From bc01e03710e3ae0e52c8c65002f06dd69e5d5eac Mon Sep 17 00:00:00 2001
From: Gurcharan Singh <72580717+gsingh935@users.noreply.github.com>
Date: Fri, 20 Jun 2025 07:37:56 +0100
Subject: [PATCH 001/381] Update service name for port-forward of Airflow GUI
 (#51945)

Update the port-forward command to reflect the new airflow api server replacing the airflow web server
---
 chart/docs/quick-start.rst | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/chart/docs/quick-start.rst b/chart/docs/quick-start.rst
index 49f71bc8d2868..9045bd9a4661b 100644
--- a/chart/docs/quick-start.rst
+++ b/chart/docs/quick-start.rst
@@ -82,7 +82,7 @@ Airflow is working.
 
 .. code-block:: bash
 
-   kubectl port-forward svc/$RELEASE_NAME-webserver 8080:8080 --namespace $NAMESPACE
+   kubectl port-forward svc/$RELEASE_NAME-api-server 8080:8080 --namespace $NAMESPACE
 
 Extending Airflow Image
 -----------------------

From b38e89605da34fa67bbe7698264ba15dd6f3cbbb Mon Sep 17 00:00:00 2001
From: Yeonguk Choo <choo121600@gmail.com>
Date: Fri, 20 Jun 2025 15:43:23 +0900
Subject: [PATCH 002/381] i18n: Move translations to `ui/public` and enable
 dynamic loading to reduce bundle size (#51735)

* Feat(i18n): Move translation files to public, use i18next-http-backend

* Adopted i18next-http-backend

* Fix(i18n): Update locales directory path to public for translation files

* Fix(i18n): Update static file path for translation locales

* Fix(i18n): Update translation config file path

* Fix(i18n): Update ESLint configuration to include jsonc-parser

* Fix(i18n): Update ESLint file patterns and add 'components' to namespaces

* Fix(i18n): Initialize i18n(en) in DagCard tests

* chore: enforce consistent array type syntax per @typescript-eslint rule

* Revert "chore: enforce consistent array type syntax per @typescript-eslint rule"

This reverts commit d218738c4e5cba091eae1f1161367116836c23ff.

* Fix(i18n): Ignore i18n locale files in ESLint TypeScript rules

* Fix(tests): Remove unused imports and clean up test setup

* Apply pre-commit formatting to openapi-gen/ files as per #51755

* Fix(eslint): Update i18n and TypeScript rules configuration

* Apply ESLint and i18nRule

* Mov Arabic and French translations to public

* Fix: Update translation file paths to public directory

* Moved i18n doc and completeness checker script from public to dev/i18n

* fix(i18n): i18n policy document translation completeness check command
---
 .github/CODEOWNERS                            |  16 +-
 .github/boring-cyborg.yml                     |  20 +--
 .pre-commit-config.yaml                       |   8 +-
 .../src/airflow/api_fastapi/core_api/app.py   |   7 +
 airflow-core/src/airflow/ui/.prettierignore   |   2 +-
 airflow-core/src/airflow/ui/package.json      |   2 +
 airflow-core/src/airflow/ui/pnpm-lock.yaml    |  45 +++++
 .../airflow/ui/{src => public}/i18n/README.md |  12 +-
 .../i18n/locales/ar/admin.json                | 132 +++++++--------
 .../i18n/locales/ar/assets.json               |   0
 .../i18n/locales/ar/browse.json               |   8 +-
 .../i18n/locales/ar/common.json               |   0
 .../ui/public/i18n/locales/ar/components.json | 131 +++++++++++++++
 .../{src => public}/i18n/locales/ar/dag.json  |   0
 .../{src => public}/i18n/locales/ar/dags.json |  18 +-
 .../i18n/locales/ar/dashboard.json            |   0
 .../{src => public}/i18n/locales/de/README.md |   0
 .../i18n/locales/de/admin.json                |   0
 .../i18n/locales/de/assets.json               |   0
 .../i18n/locales/de/browse.json               |   0
 .../i18n/locales/de/common.json               |   0
 .../i18n/locales/de/components.json           |   0
 .../{src => public}/i18n/locales/de/dag.json  |   0
 .../{src => public}/i18n/locales/de/dags.json |   0
 .../i18n/locales/de/dashboard.json            |   0
 .../i18n/locales/en/admin.json                |   0
 .../i18n/locales/en/assets.json               |   0
 .../i18n/locales/en/browse.json               |   0
 .../i18n/locales/en/common.json               |   0
 .../i18n/locales/en/components.json           |   0
 .../{src => public}/i18n/locales/en/dag.json  |   0
 .../{src => public}/i18n/locales/en/dags.json |   0
 .../i18n/locales/en/dashboard.json            |   0
 .../i18n/locales/fr/admin.json                |  26 +--
 .../i18n/locales/fr/assets.json               |   0
 .../i18n/locales/fr/browse.json               |   8 +-
 .../i18n/locales/fr/common.json               |   0
 .../i18n/locales/fr/components.json           |   0
 .../{src => public}/i18n/locales/fr/dag.json  |   0
 .../{src => public}/i18n/locales/fr/dags.json |   0
 .../i18n/locales/fr/dashboard.json            |   0
 .../i18n/locales/he/admin.json                |   0
 .../i18n/locales/he/assets.json               |   0
 .../i18n/locales/he/browse.json               |   0
 .../i18n/locales/he/common.json               |   0
 .../i18n/locales/he/components.json           |   0
 .../{src => public}/i18n/locales/he/dag.json  |   0
 .../{src => public}/i18n/locales/he/dags.json |   0
 .../i18n/locales/he/dashboard.json            |   0
 .../i18n/locales/ko/common.json               |   0
 .../i18n/locales/ko/dashboard.json            |   0
 .../i18n/locales/nl/common.json               |   0
 .../i18n/locales/nl/dashboard.json            |   0
 .../i18n/locales/pl/admin.json                |   0
 .../i18n/locales/pl/assets.json               |   0
 .../i18n/locales/pl/browse.json               |   0
 .../i18n/locales/pl/common.json               |   0
 .../i18n/locales/pl/components.json           |   0
 .../{src => public}/i18n/locales/pl/dag.json  |   0
 .../{src => public}/i18n/locales/pl/dags.json |   0
 .../i18n/locales/pl/dashboard.json            |   0
 .../i18n/locales/zh-TW/admin.json             |   0
 .../i18n/locales/zh-TW/assets.json            |   0
 .../i18n/locales/zh-TW/browse.json            |   0
 .../i18n/locales/zh-TW/common.json            |   0
 .../i18n/locales/zh-TW/components.json        |   0
 .../i18n/locales/zh-TW/dag.json               |   0
 .../i18n/locales/zh-TW/dags.json              |   0
 .../i18n/locales/zh-TW/dashboard.json         |   0
 airflow-core/src/airflow/ui/rules/i18n.js     |  13 +-
 .../src/airflow/ui/rules/typescript.js        |   1 +
 .../src/airflow/ui/src/i18n/config.ts         | 154 +-----------------
 .../ui/src/i18n/locales/ar/components.json    | 131 ---------------
 .../ui/src/pages/DagsList/DagCard.test.tsx    |  20 ++-
 airflow-core/src/airflow/ui/testsSetup.ts     |   6 +-
 dev/README_RELEASE_AIRFLOW.md                 |   2 +-
 .../i18n/check_translations_completeness.py   |   4 +-
 scripts/ci/pre_commit/boring_cyborg.py        |   2 +-
 scripts/ci/pre_commit/check_i18n_json.py      |   4 +-
 79 files changed, 353 insertions(+), 419 deletions(-)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/README.md (95%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/ar/admin.json (54%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/ar/assets.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/ar/browse.json (87%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/ar/common.json (100%)
 create mode 100644 airflow-core/src/airflow/ui/public/i18n/locales/ar/components.json
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/ar/dag.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/ar/dags.json (88%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/ar/dashboard.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/de/README.md (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/de/admin.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/de/assets.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/de/browse.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/de/common.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/de/components.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/de/dag.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/de/dags.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/de/dashboard.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/en/admin.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/en/assets.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/en/browse.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/en/common.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/en/components.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/en/dag.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/en/dags.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/en/dashboard.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/fr/admin.json (95%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/fr/assets.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/fr/browse.json (86%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/fr/common.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/fr/components.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/fr/dag.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/fr/dags.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/fr/dashboard.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/he/admin.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/he/assets.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/he/browse.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/he/common.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/he/components.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/he/dag.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/he/dags.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/he/dashboard.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/ko/common.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/ko/dashboard.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/nl/common.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/nl/dashboard.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/pl/admin.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/pl/assets.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/pl/browse.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/pl/common.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/pl/components.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/pl/dag.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/pl/dags.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/pl/dashboard.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/zh-TW/admin.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/zh-TW/assets.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/zh-TW/browse.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/zh-TW/common.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/zh-TW/components.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/zh-TW/dag.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/zh-TW/dags.json (100%)
 rename airflow-core/src/airflow/ui/{src => public}/i18n/locales/zh-TW/dashboard.json (100%)
 delete mode 100644 airflow-core/src/airflow/ui/src/i18n/locales/ar/components.json
 rename {airflow-core/src/airflow/ui/src => dev}/i18n/check_translations_completeness.py (99%)

diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index bb5815dac0b84..69f10c58301a7 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -37,14 +37,14 @@
 
 # Translation Owners (i18n)
 # Note: Non committer engaged translators are listed in comments prevent making file syntax invalid
-# See: https://github.com/apache/airflow/blob/main/airflow-core/src/airflow/ui/src/i18n/README.md#43-engaged-translator
-airflow-core/src/airflow/ui/src/i18n/locales/ar/ @shahar1 @hussein-awala # + @ahmadtfarhan
-airflow-core/src/airflow/ui/src/i18n/locales/de/ @jscheffl # + @TJaniF @m1racoli
-airflow-core/src/airflow/ui/src/i18n/locales/he/ @eladkal @shahar1 @romsharon98 # +@Dev-iL
-airflow-core/src/airflow/ui/src/i18n/locales/nl/ @BasPH # + @DjVinnii
-airflow-core/src/airflow/ui/src/i18n/locales/pl/ @potiuk @mobuchowski # + @kacpermuda
-airflow-core/src/airflow/ui/src/i18n/locales/zh-TW/ @Lee-W @jason810496 # + @RoyLee1224 @guan404ming
-airflow-core/src/airflow/ui/src/i18n/locales/fr/ @pierrejeambrun @vincbeck
+# See: https://github.com/apache/airflow/blob/main/airflow-core/src/airflow/ui/public/i18n/README.md#43-engaged-translator
+airflow-core/src/airflow/ui/public/i18n/locales/ar/ @shahar1 @hussein-awala # + @ahmadtfarhan
+airflow-core/src/airflow/ui/public/i18n/locales/de/ @jscheffl # + @TJaniF @m1racoli
+airflow-core/src/airflow/ui/public/i18n/locales/he/ @eladkal @shahar1 @romsharon98 # +@Dev-iL
+airflow-core/src/airflow/ui/public/i18n/locales/nl/ @BasPH # + @DjVinnii
+airflow-core/src/airflow/ui/public/i18n/locales/pl/ @potiuk @mobuchowski # + @kacpermuda
+airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/ @Lee-W @jason810496 # + @RoyLee1224 @guan404ming
+airflow-core/src/airflow/ui/public/i18n/locales/fr/ @pierrejeambrun @vincbeck
 
 # Security/Permissions
 /airflow-core/src/airflow/security/permissions.py @vincbeck
diff --git a/.github/boring-cyborg.yml b/.github/boring-cyborg.yml
index 02954efbed283..484cfb333d047 100644
--- a/.github/boring-cyborg.yml
+++ b/.github/boring-cyborg.yml
@@ -348,34 +348,34 @@ labelPRBasedOnFilePath:
     - airflow-core/src/airflow/ui/**/*
 
   area:translations:
-    - airflow-core/src/airflow/ui/src/i18n/**/*
+    - airflow-core/src/airflow/ui/public/i18n/**/*
 
   translation:default:
-    - airflow-core/src/airflow/ui/src/i18n/locales/en/*
+    - airflow-core/src/airflow/ui/public/i18n/locales/en/*
 
   translation:ar:
-    - airflow-core/src/airflow/ui/src/i18n/locales/ar/*
+    - airflow-core/src/airflow/ui/public/i18n/locales/ar/*
 
   translation:de:
-    - airflow-core/src/airflow/ui/src/i18n/locales/de/*
+    - airflow-core/src/airflow/ui/public/i18n/locales/de/*
 
   translation:fr:
-    - airflow-core/src/airflow/ui/src/i18n/locales/fr/*
+    - airflow-core/src/airflow/ui/public/i18n/locales/fr/*
 
   translation:he:
-    - airflow-core/src/airflow/ui/src/i18n/locales/he/*
+    - airflow-core/src/airflow/ui/public/i18n/locales/he/*
 
   translation:ko:
-    - airflow-core/src/airflow/ui/src/i18n/locales/ko/*
+    - airflow-core/src/airflow/ui/public/i18n/locales/ko/*
 
   translation:nl:
-    - airflow-core/src/airflow/ui/src/i18n/locales/nl/*
+    - airflow-core/src/airflow/ui/public/i18n/locales/nl/*
 
   translation:pl:
-    - airflow-core/src/airflow/ui/src/i18n/locales/pl/*
+    - airflow-core/src/airflow/ui/public/i18n/locales/pl/*
 
   translation:zh-TW:
-    - airflow-core/src/airflow/ui/src/i18n/locales/zh-TW/*
+    - airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/*
 
   area:CLI:
     - airflow-core/src/airflow/cli/**/*.py
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index a76b5a0771861..1bc591c116597 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -355,9 +355,7 @@ repos:
           ^.*/kinglear\.txt$|
           ^.*pnpm-lock\.yaml$|
           .*/dist/.*|
-          ^airflow-core/src/airflow/ui/src/i18n/locales/de/|
-          ^airflow-core/src/airflow/ui/src/i18n/locales/fr/|
-          ^airflow-core/src/airflow/ui/src/i18n/locales/pl/
+          ^airflow-core/src/airflow/ui/public/i18n/locales/(?!en/).+/
         args:
           - --ignore-words=docs/spelling_wordlist.txt
           - --skip=providers/.*/src/airflow/providers/*/*.rst,providers/*/docs/changelog.rst,docs/*/commits.rst,providers/*/docs/commits.rst,providers/*/*/docs/commits.rst,docs/apache-airflow/tutorial/pipeline_example.csv,*.min.js,*.lock,INTHEWILD.md,*.svg
@@ -637,7 +635,7 @@ repos:
           (?x)
           ^airflow-core/src/airflow/ui/src/i18n/config\.ts$|
           ^airflow-core/src/airflow/ui/openapi-gen/|
-          ^airflow-core/src/airflow/ui/src/i18n/locales/de/README\.md$|
+          ^airflow-core/src/airflow/ui/public/i18n/locales/de/README\.md$|
           ^airflow-core/src/airflow/cli/commands/local_commands/fastapi_api_command\.py$|
           ^airflow-core/src/airflow/config_templates/|
           ^airflow-core/src/airflow/models/baseoperator\.py$|
@@ -1454,7 +1452,7 @@ repos:
         name: Check i18n files validity
         description: Check i18n files are valid json and have no TODOs
         language: python
-        files: ^airflow-core/src/airflow/ui/src/i18n/locales/.*\.json
+        files: ^airflow-core/src/airflow/ui/public/i18n/locales/.*\.json
         entry: ./scripts/ci/pre_commit/check_i18n_json.py
         additional_dependencies: ['rich>=12.4.4']
         pass_filenames: false
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/app.py b/airflow-core/src/airflow/api_fastapi/core_api/app.py
index d378e009bc0c9..253ef206e13a9 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/app.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/app.py
@@ -55,6 +55,13 @@ def init_views(app: FastAPI) -> None:
 
     templates = Jinja2Templates(directory=directory)
 
+    if dev_mode:
+        app.mount(
+            "/static/i18n/locales",
+            StaticFiles(directory=Path(AIRFLOW_PATH) / "airflow/ui/public/i18n/locales"),
+            name="dev_i18n_static",
+        )
+
     app.mount(
         "/static",
         StaticFiles(
diff --git a/airflow-core/src/airflow/ui/.prettierignore b/airflow-core/src/airflow/ui/.prettierignore
index f013813d71866..b90ad27ecef3d 100644
--- a/airflow-core/src/airflow/ui/.prettierignore
+++ b/airflow-core/src/airflow/ui/.prettierignore
@@ -5,5 +5,5 @@ dist/
 *.yaml
 coverage/*
 .pnpm-store
-src/i18n/locales/*
+public/i18n/locales/*
 openapi-gen/
diff --git a/airflow-core/src/airflow/ui/package.json b/airflow-core/src/airflow/ui/package.json
index 7c6871eb433c8..2429adc35a0c7 100644
--- a/airflow-core/src/airflow/ui/package.json
+++ b/airflow-core/src/airflow/ui/package.json
@@ -39,6 +39,7 @@
     "html-to-image": "^1.11.13",
     "i18next": "^25.1.2",
     "i18next-browser-languagedetector": "^8.1.0",
+    "i18next-http-backend": "^3.0.2",
     "next-themes": "^0.3.0",
     "react": "^18.3.1",
     "react-chartjs-2": "^5.3.0",
@@ -85,6 +86,7 @@
     "eslint-plugin-unicorn": "^55.0.0",
     "globals": "^15.15.0",
     "happy-dom": "^17.4.6",
+    "jsonc-eslint-parser": "^2.4.0",
     "msw": "^2.7.5",
     "openapi-merge-cli": "^1.3.2",
     "prettier": "^3.5.3",
diff --git a/airflow-core/src/airflow/ui/pnpm-lock.yaml b/airflow-core/src/airflow/ui/pnpm-lock.yaml
index c7b0c7e6eebc2..04426f880c846 100644
--- a/airflow-core/src/airflow/ui/pnpm-lock.yaml
+++ b/airflow-core/src/airflow/ui/pnpm-lock.yaml
@@ -77,6 +77,9 @@ importers:
       i18next-browser-languagedetector:
         specifier: ^8.1.0
         version: 8.1.0
+      i18next-http-backend:
+        specifier: ^3.0.2
+        version: 3.0.2
       next-themes:
         specifier: ^0.3.0
         version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -210,6 +213,9 @@ importers:
       happy-dom:
         specifier: ^17.4.6
         version: 17.4.6
+      jsonc-eslint-parser:
+        specifier: ^2.4.0
+        version: 2.4.0
       msw:
         specifier: ^2.7.5
         version: 2.7.6(@types/node@22.15.14)(typescript@5.8.3)
@@ -2072,6 +2078,9 @@ packages:
   cross-fetch@3.2.0:
     resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==}
 
+  cross-fetch@4.0.0:
+    resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==}
+
   cross-spawn@7.0.6:
     resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
     engines: {node: '>= 8'}
@@ -2419,6 +2428,10 @@ packages:
     resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
+  espree@9.6.1:
+    resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
   esprima@4.0.1:
     resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
     engines: {node: '>=4'}
@@ -2742,6 +2755,9 @@ packages:
   i18next-browser-languagedetector@8.1.0:
     resolution: {integrity: sha512-mHZxNx1Lq09xt5kCauZ/4bsXOEA2pfpwSoU11/QTJB+pD94iONFwp+ohqi///PwiFvjFOxe1akYCdHyFo1ng5Q==}
 
+  i18next-http-backend@3.0.2:
+    resolution: {integrity: sha512-PdlvPnvIp4E1sYi46Ik4tBYh/v/NbYfFFgTjkwFl0is8A18s7/bx9aXqsrOax9WUbeNS6mD2oix7Z0yGGf6m5g==}
+
   i18next@25.1.2:
     resolution: {integrity: sha512-SP63m8LzdjkrAjruH7SCI3ndPSgjt4/wX7ouUUOzCW/eY+HzlIo19IQSfYA9X3qRiRP1SYtaTsg/Oz/PGsfD8w==}
     peerDependencies:
@@ -3013,6 +3029,10 @@ packages:
   json-stable-stringify-without-jsonify@1.0.1:
     resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
 
+  jsonc-eslint-parser@2.4.0:
+    resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
   jsonpointer@5.0.1:
     resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==}
     engines: {node: '>=0.10.0'}
@@ -7051,6 +7071,12 @@ snapshots:
     transitivePeerDependencies:
       - encoding
 
+  cross-fetch@4.0.0:
+    dependencies:
+      node-fetch: 2.7.0
+    transitivePeerDependencies:
+      - encoding
+
   cross-spawn@7.0.6:
     dependencies:
       path-key: 3.1.1
@@ -7532,6 +7558,12 @@ snapshots:
       acorn-jsx: 5.3.2(acorn@8.14.1)
       eslint-visitor-keys: 4.2.0
 
+  espree@9.6.1:
+    dependencies:
+      acorn: 8.14.1
+      acorn-jsx: 5.3.2(acorn@8.14.1)
+      eslint-visitor-keys: 3.4.3
+
   esprima@4.0.1: {}
 
   esquery@1.6.0:
@@ -7919,6 +7951,12 @@ snapshots:
     dependencies:
       '@babel/runtime': 7.26.10
 
+  i18next-http-backend@3.0.2:
+    dependencies:
+      cross-fetch: 4.0.0
+    transitivePeerDependencies:
+      - encoding
+
   i18next@25.1.2(typescript@5.8.3):
     dependencies:
       '@babel/runtime': 7.26.10
@@ -8179,6 +8217,13 @@ snapshots:
 
   json-stable-stringify-without-jsonify@1.0.1: {}
 
+  jsonc-eslint-parser@2.4.0:
+    dependencies:
+      acorn: 8.14.1
+      eslint-visitor-keys: 3.4.3
+      espree: 9.6.1
+      semver: 7.7.1
+
   jsonpointer@5.0.1: {}
 
   jsx-ast-utils@3.3.5:
diff --git a/airflow-core/src/airflow/ui/src/i18n/README.md b/airflow-core/src/airflow/ui/public/i18n/README.md
similarity index 95%
rename from airflow-core/src/airflow/ui/src/i18n/README.md
rename to airflow-core/src/airflow/ui/public/i18n/README.md
index 190ba07fbfdf2..4fa50122cf7a4 100644
--- a/airflow-core/src/airflow/ui/src/i18n/README.md
+++ b/airflow-core/src/airflow/ui/public/i18n/README.md
@@ -28,7 +28,7 @@ This policy aims to avoid inconsistencies, maintenance issues, unclear ownership
 
 This policy applies to:
 
-- Each supported locale included in `airflow-core/src/airflow/ui/src/i18n/locales`.
+- Each supported locale included in `airflow-core/src/airflow/ui/public/i18n/locales`.
 - Contributors making changes in the default locale (English).
 - Contributors suggesting new locales to be added to the codebase.
 - Maintainers of supported locales in any role defined below.
@@ -42,7 +42,7 @@ This policy applies to:
 
 **Internationalization (i18n)** - The process of designing a software application so that it can be adapted to various languages and regions without engineering changes (see also the [Wikipedia article](https://en.wikipedia.org/wiki/Internationalization_and_localization)).
 
-**Supported locale** - An officially accepted locale in `airflow-core/src/airflow/ui/src/i18n/locales`.
+**Supported locale** - An officially accepted locale in `airflow-core/src/airflow/ui/public/i18n/locales`.
 
 **Default locale** - English (`en`), the primary locale and fallback for all other locales.
 
@@ -175,7 +175,7 @@ Translation conflicts MUST be resolved according to the procedures outlined in s
 The following steps outline the process for approving a new locale to be added to the supported locales:
 
 - Creating a PR for adding the suggested locale to the codebase ([see example](https://github.com/apache/airflow/pull/51258/files)), which includes:
-    - The locale files (translated according to the guidelines) in the `airflow-core/src/airflow/ui/src/i18n/locales/<LOCALE_CODE>` directory, where `<LOCALE_CODE>` is the code of the language according to ISO 639-1 standard (e.g., `fr` for French). Languages with regional variants should be handled in separate directories, where the name is suffixed with `-<VARIANT>`, and `<VARIANT>` is the variant that follows ISO 3166-1 or UN M.49 codes in lowercase (e.g., `zh-tw` for Taiwanese Mandarin).
+    - The locale files (translated according to the guidelines) in the `airflow-core/src/airflow/ui/public/i18n/locales/<LOCALE_CODE>` directory, where `<LOCALE_CODE>` is the code of the language according to ISO 639-1 standard (e.g., `fr` for French). Languages with regional variants should be handled in separate directories, where the name is suffixed with `-<VARIANT>`, and `<VARIANT>` is the variant that follows ISO 3166-1 or UN M.49 codes in lowercase (e.g., `zh-tw` for Taiwanese Mandarin).
     - Making the required modifications in `airflow-core/src/airflow/ui/src/i18n/config.ts` ([see example](https://github.com/apache/airflow/pull/51258/files#diff-bfb4d5fafd26d206fb4a545a41ba303f33d15a479d21e0a726fd743bdf9717ff)).
     - Changes to the `.github/CODEOWNERS` file to include the designated code owner(s) and translation owner(s) for the new locale, considering the following:
         - A code owner who is also a translation sponsor should be indicated in a comment as well.
@@ -234,13 +234,13 @@ Language proficiency for translation owners can be demonstrated through any of t
 All files:
 
 ```bash
-uv run ./check_translations_completeness.py
+uv run dev/i18n/check_translations_completeness.py
 ```
 
 Files for specific languages:
 
 ```bash
-uv run ./check_translations_completeness.py --language <language_code>
+uv run dev/i18n/check_translations_completeness.py --language <language_code>
 ```
 
 Where `<language_code>` is the code of the language you want to check, e.g., `en`, `fr`, `de`, etc.
@@ -248,7 +248,7 @@ Where `<language_code>` is the code of the language you want to check, e.g., `en
 Adding missing translations (with `TODO: translate` prefix):
 
 ```bash
-uv run ./check_translations_completeness.py --language <language_code> --add-missing
+uv run dev/i18n/check_translations_completeness.py --language <language_code> --add-missing
 ```
 
 ## 9. Compliance & enforcement
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/ar/admin.json b/airflow-core/src/airflow/ui/public/i18n/locales/ar/admin.json
similarity index 54%
rename from airflow-core/src/airflow/ui/src/i18n/locales/ar/admin.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/ar/admin.json
index ab5e6126974c1..b3396e6c75e14 100644
--- a/airflow-core/src/airflow/ui/src/i18n/locales/ar/admin.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/ar/admin.json
@@ -1,74 +1,74 @@
 {
+  "columns": {
+    "description": "الوصف",
+    "key": "المفتاح",
+    "name": "الاسم",
+    "value": "القيمة"
+  },
+  "config": {
     "columns": {
-        "description": "الوصف",
-        "key": "المفتاح",
-        "name": "الاسم",
-        "value": "القيمة"
+      "section": "القسم"
     },
-    "config": {
-        "columns": {
-            "section": "القسم"
-        },
-        "title": "Airflow إعدادات"
+    "title": "Airflow إعدادات"
+  },
+  "connections": {
+    "add": "إضافة موَّصل",
+    "columns": {
+      "connectionId": "معرِّف الموَّصل",
+      "connectionType": "نوع الموَّصل",
+      "host": "المضيف",
+      "port": "المنفذ"
     },
-    "connections": {
-        "add": "إضافة موَّصل",
-        "columns": {
-            "connectionId": "معرِّف الموَّصل",
-            "connectionType": "نوع الموَّصل",
-            "host": "المضيف",
-            "port": "المنفذ"
-        },
-        "connection_one": "موَّصل",
-        "connection_other": "موَّصلات",
-        "delete": {
-            "deleteConnection_one": "حذف موَّصل واحد",
-            "deleteConnection_other": "موَّصلات {{count}} حذف",
-            "firstConfirmMessage_one": ":أنت على وشك حذف الموَّصل التالي",
-            "firstConfirmMessage_other": ":أنت على وشك حذف الموَّصلات التالية",
-            "title": "حذف الموَّصل"
-        },
-        "edit": "تعديل الموَّصل",
-        "form": {
-            "connectionIdRequired": "مطلوب معرِّف الموَّصل",
-            "connectionIdRequirement": "لا يمكن أن يحتوي معرِّف الموَّصل على مسافات فقط",
-            "connectionTypeRequired": "مطلوب نوع الموَّصل",
-            "extraFields": "حقول إضافية",
-            "extraFieldsJson": "JSON حقول إضافية بصيغة",
-            "helperText": "نوع الموَّصل مفقود؟ تأكد من تثبيت حزمة Airflow المناسبة.",
-            "selectConnectionType": "اختر نوع الموَّصل",
-            "standardFields": "حقول قياسية"
-        },
-        "noRowMessage": "لا توجد موَّصلات متاحة",
-        "searchPlaceholder": "البحث عن موَّصلات",
-        "test": "اختبار الموَّصل",
-        "testDisabled": "اختبار الموَّصل معطل. تواصل مع المسؤول لتفعيله.",
-        "typeMeta": {
-            "error": "فشل في استرداد نوع الموَّصل",
-            "standardFields": {
-                "description": "الوصف",
-                "host": "المضيف",
-                "login": "معرف الدخول",
-                "password": "كلمة المرور",
-                "port": "المنفذ",
-                "url_schema": "المخطط"
-            }
-        }
+    "connection_one": "موَّصل",
+    "connection_other": "موَّصلات",
+    "delete": {
+      "deleteConnection_one": "حذف موَّصل واحد",
+      "deleteConnection_other": "موَّصلات {{count}} حذف",
+      "firstConfirmMessage_one": ":أنت على وشك حذف الموَّصل التالي",
+      "firstConfirmMessage_other": ":أنت على وشك حذف الموَّصلات التالية",
+      "title": "حذف الموَّصل"
     },
-    "deleteActions": {
-        "button": "حذف",
-        "modal": {
-            "confirmButton": "نعم، حذف الموَّصلات",
-            "secondConfirmMessage": "هذا الإجراء دائم و لا يمكن التراجع عنه.",
-            "thirdConfirmMessage":  "هل أنت متأكد أنك تريد المواصلة؟"
-        },
-        "selected": "المحدد",
-        "tooltip": "حذف الموَّصلات المحددة"
+    "edit": "تعديل الموَّصل",
+    "form": {
+      "connectionIdRequired": "مطلوب معرِّف الموَّصل",
+      "connectionIdRequirement": "لا يمكن أن يحتوي معرِّف الموَّصل على مسافات فقط",
+      "connectionTypeRequired": "مطلوب نوع الموَّصل",
+      "extraFields": "حقول إضافية",
+      "extraFieldsJson": "JSON حقول إضافية بصيغة",
+      "helperText": "نوع الموَّصل مفقود؟ تأكد من تثبيت حزمة Airflow المناسبة.",
+      "selectConnectionType": "اختر نوع الموَّصل",
+      "standardFields": "حقول قياسية"
     },
-    "formActions": {
-        "reset": "إعادة تعيين",
-        "save": "حفظ"
+    "noRowMessage": "لا توجد موَّصلات متاحة",
+    "searchPlaceholder": "البحث عن موَّصلات",
+    "test": "اختبار الموَّصل",
+    "testDisabled": "اختبار الموَّصل معطل. تواصل مع المسؤول لتفعيله.",
+    "typeMeta": {
+      "error": "فشل في استرداد نوع الموَّصل",
+      "standardFields": {
+        "description": "الوصف",
+        "host": "المضيف",
+        "login": "معرف الدخول",
+        "password": "كلمة المرور",
+        "port": "المنفذ",
+        "url_schema": "المخطط"
+      }
+    }
+  },
+  "deleteActions": {
+    "button": "حذف",
+    "modal": {
+      "confirmButton": "نعم، حذف الموَّصلات",
+      "secondConfirmMessage": "هذا الإجراء دائم و لا يمكن التراجع عنه.",
+      "thirdConfirmMessage": "هل أنت متأكد أنك تريد المواصلة؟"
     },
+    "selected": "المحدد",
+    "tooltip": "حذف الموَّصلات المحددة"
+  },
+  "formActions": {
+    "reset": "إعادة تعيين",
+    "save": "حفظ"
+  },
   "plugins": {
     "columns": {
       "source": "المصدر"
@@ -80,7 +80,7 @@
   "pools": {
     "add": "إضافة حصص",
     "deferredSlotsIncluded": "شمل الحصص المؤجلة",
-    "delete":{
+    "delete": {
       "title": "حذف مجموعة",
       "warning": "هذا الإجراء سيؤدي إلى حذف المجموعة المحددة و من الممكن أن يؤثر على المهام الجارية."
     },
@@ -122,7 +122,7 @@
       "title": "حذف المتغير",
       "tooltip": "حذف المتغيرات المحددة"
     },
-    "edit":  "تعديل المتغير",
+    "edit": "تعديل المتغير",
     "export": "تصدير",
     "exportTooltip": "تصدير المتغيرات المحددة",
     "form": {
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/ar/assets.json b/airflow-core/src/airflow/ui/public/i18n/locales/ar/assets.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/ar/assets.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/ar/assets.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/ar/browse.json b/airflow-core/src/airflow/ui/public/i18n/locales/ar/browse.json
similarity index 87%
rename from airflow-core/src/airflow/ui/src/i18n/locales/ar/browse.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/ar/browse.json
index ff6abf0b81777..775230d598cc5 100644
--- a/airflow-core/src/airflow/ui/src/i18n/locales/ar/browse.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/ar/browse.json
@@ -1,10 +1,10 @@
 {
-  "auditLog":{
+  "auditLog": {
     "actions": {
       "collapseAllExtra": "طي جميع الJSON الإضافية",
       "expandAllExtra": "توسيع جميع الJSON الإضافية"
     },
-    "columns":{
+    "columns": {
       "event": "اصل",
       "extra": "إضافي",
       "user": "مستخدم",
@@ -12,8 +12,8 @@
     },
     "title": "سجل المراجعة"
   },
-  "xcom":{
-    "columns":{
+  "xcom": {
+    "columns": {
       "dag": "Dag",
       "key": "مفتاح",
       "value": "قيمة"
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/ar/common.json b/airflow-core/src/airflow/ui/public/i18n/locales/ar/common.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/ar/common.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/ar/common.json
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ar/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/ar/components.json
new file mode 100644
index 0000000000000..7764a53c62edf
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/ar/components.json
@@ -0,0 +1,131 @@
+{
+  "backfill": {
+    "affected_one": "مهمة واحدة ستُشغّل.",
+    "affected_other": "{{count}} مهام ستُشغّل.",
+    "affectedNone": "لا توجد مهام تطابق المعايير المحددة.",
+    "backwards": "تشغيل رجعي",
+    "dateRange": "نطاق التاريخ",
+    "dateRangeFrom": "من",
+    "dateRangeTo": "إلى",
+    "errorStartDateBeforeEndDate": "يجب أن يكون تاريخ البدء قبل تاريخ الانتهاء",
+    "maxRuns": "الحد الأقصى للتشغيلات النشطة",
+    "reprocessBehavior": "اعادة معالجة السلوك",
+    "run": "تشغيل التعبئة الرجعية",
+    "selectDescription": "تشغيل هذا DAG لنطاق من التواريخ",
+    "selectLabel": "تعبئة رجعية",
+    "title": "تشغيل التعبئة الرجعية",
+    "toaster": {
+      "success": {
+        "description": "تم تشغيل مهام التعبئة الرجعية بنجاح.",
+        "title": "تم إنشاء التعبئة الرجعية"
+      }
+    },
+    "tooltip": "التعبئة الرجعية تتطلب جدول زمني",
+    "unpause": "إلغاء إيقاف {{dag_display_name}} عند التشغيل",
+    "validation": {
+      "datesRequired": "يجب توفير بيانات كل من تاريخ بدء فترة وتاريخ الانتهاء.",
+      "startBeforeEnd": "بيانات فترة تاريخ البدء يجب ان تكون من او قبل تاريخ الانتهاء. "
+    }
+  },
+  "banner": {
+    "backfillInProgress": "التعبئة الرجعية قيد التنفيذ",
+    "cancel": "إلغاء التعبئة الرجعية",
+    "pause": "إيقاف التعبئة الرجعية",
+    "unpause": "إلغاء إيقاف التعبئة الرجعية"
+  },
+  "clipboard": {
+    "copy": "نسخ"
+  },
+  "close": "إغلاق",
+  "configForm": {
+    "advancedOptions": "خيارات متقدمة",
+    "configJson": "تكوين JSON",
+    "invalidJson": "تنسيق JSON غير صالح: {{errorMessage}}"
+  },
+  "dagWarnings": {
+    "error_one": "1 خطأ",
+    "errorAndWarning": "1 خطأ و{{warningText}}",
+    "warning_one": "1 تحذير",
+    "warning_other": "{{count}} تحذيرات"
+  },
+  "durationChart": {
+    "duration": "المدة (بالثواني)",
+    "lastDagRun_one": "آخر تشغيل DAG",
+    "lastDagRun_other": "آخر {{count}} تشغيلات DAG",
+    "lastTaskInstance_one": "آخر مثيل مهمة",
+    "lastTaskInstance_other": "آخر {{count}} مثيلات المهام",
+    "queuedDuration": "مدة الانتظار في الطابور",
+    "runAfter": "تشغيل بعد",
+    "runDuration": "مدة التشغيل"
+  },
+  "fileUpload": {
+    "files_other": "{{count}} ملفات"
+  },
+  "flexibleForm": {
+    "placeholder": "اختر قيمة",
+    "placeholderArray": "أدخل كل سلسلة في سطر جديد",
+    "placeholderExamples": "ابدأ الكتابة لرؤية الخيارات",
+    "placeholderMulti": "اختر قيمة أو أكثر",
+    "validationErrorArrayNotArray": "القيمة يجب أن تكون مصفوفة.",
+    "validationErrorArrayNotNumbers": "جميع العناصر في المصفوفة يجب أن تكون أرقامًا.",
+    "validationErrorArrayNotObject": "جميع العناصر في المصفوفة يجب أن تكون كائنات.",
+    "validationErrorRequired": "هذا الحقل مطلوب"
+  },
+  "graph": {
+    "directionDown": "من الأعلى إلى الأسفل",
+    "directionLeft": "من اليمين إلى اليسار",
+    "directionRight": "من اليسار إلى اليمين",
+    "directionUp": "من الأسفل إلى الأعلى",
+    "downloadImage": "تحميل صورة الرسم البياني",
+    "downloadImageError": "فشل تحميل صورة الرسم البياني.",
+    "downloadImageErrorTitle": "فشل التحميل",
+    "otherDagRuns": "+تشغيلات DAG أخرى",
+    "taskCount_one": "{{count}} مهمة",
+    "taskCount_other": "{{count}} مهام",
+    "taskGroup": "مجموعة المهام"
+  },
+  "limitedList": "+{{count}} المزيد",
+  "logs": {
+    "file": "ملف",
+    "location": "سطر {{line}} في {{name}}"
+  },
+  "reparseDag": "إعادة تحليل DAG",
+  "sortedAscending": "الترتيب تصاعدي",
+  "sortedDescending": "الترتيب تنازلي",
+  "sortedUnsorted": "غير مرتب",
+  "taskTries": "محاولات المهمة",
+  "toggleCardView": "عرض البطاقة",
+  "toggleTableView": "عرض الجدول",
+  "triggerDag": {
+    "button": "تشغيل",
+    "loading": "جارٍ تحميل معلومات DAG...",
+    "loadingFailed": "فشل تحميل معلومات DAG. يرجى المحاولة مرة أخرى.",
+    "runIdHelp": "اختياري - سيتم توليده تلقائيًا إذا لم يتم توفيره.",
+    "selectDescription": "تشغيل عملية واحدة من هذا DAG",
+    "selectLabel": "تشغيلة واحدة",
+    "title": "تشغيل DAG",
+    "toaster": {
+      "success": {
+        "description": "تم تشغيل عملية DAG بنجاح.",
+        "title": "تم تشغيل DAG"
+      }
+    },
+    "unpause": "إلغاء إيقاف {{dagDisplayName}} عند التشغيل"
+  },
+  "trimText": {
+    "details": "التفاصيل",
+    "empty": "فارغ",
+    "noContent": "لا توجد محتويات متاحة."
+  },
+  "versionDetails": {
+    "bundleLink": "رابط الحزمة",
+    "bundleName": "اسم الحزمة",
+    "bundleVersion": "إصدار الحزمة",
+    "createdAt": "تاريخ الإنشاء",
+    "versionId": "معرف الإصدار"
+  },
+  "versionSelect": {
+    "dagVersion": "إصدار DAG",
+    "versionCode": "v{{versionCode}}"
+  }
+}
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/ar/dag.json b/airflow-core/src/airflow/ui/public/i18n/locales/ar/dag.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/ar/dag.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/ar/dag.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/ar/dags.json b/airflow-core/src/airflow/ui/public/i18n/locales/ar/dags.json
similarity index 88%
rename from airflow-core/src/airflow/ui/src/i18n/locales/ar/dags.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/ar/dags.json
index 20964aff8e539..e535ee03ec670 100644
--- a/airflow-core/src/airflow/ui/src/i18n/locales/ar/dags.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/ar/dags.json
@@ -52,18 +52,18 @@
       "downstream": "المهام اللاحقة",
       "existingTasks": "مسح المهام الحالية",
       "future": "المستقبل",
-        "onlyFailed": "مسح المهام الفاشلة فقط",
-        "past": "الماضي",
-        "queueNew": "إضافة مهام جديدة للانتظار",
-            "upstream": "المهام السابقة"
+      "onlyFailed": "مسح المهام الفاشلة فقط",
+      "past": "الماضي",
+      "queueNew": "إضافة مهام جديدة للانتظار",
+      "upstream": "المهام السابقة"
     }
   },
   "search": {
-     "advanced": "بحث متقدم",
-     "clear": " مسح",
-     "dags": "ابحث عن Dags",
-     "hotkey": "+K",
-     "tasks": "ابحث عن مهام"
+    "advanced": "بحث متقدم",
+    "clear": " مسح",
+    "dags": "ابحث عن Dags",
+    "hotkey": "+K",
+    "tasks": "ابحث عن مهام"
   },
   "sort": {
     "displayName": {
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/ar/dashboard.json b/airflow-core/src/airflow/ui/public/i18n/locales/ar/dashboard.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/ar/dashboard.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/ar/dashboard.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/de/README.md b/airflow-core/src/airflow/ui/public/i18n/locales/de/README.md
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/de/README.md
rename to airflow-core/src/airflow/ui/public/i18n/locales/de/README.md
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/de/admin.json b/airflow-core/src/airflow/ui/public/i18n/locales/de/admin.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/de/admin.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/de/admin.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/de/assets.json b/airflow-core/src/airflow/ui/public/i18n/locales/de/assets.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/de/assets.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/de/assets.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/de/browse.json b/airflow-core/src/airflow/ui/public/i18n/locales/de/browse.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/de/browse.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/de/browse.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/de/common.json b/airflow-core/src/airflow/ui/public/i18n/locales/de/common.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/de/common.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/de/common.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/de/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/de/components.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/de/components.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/de/components.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/de/dag.json b/airflow-core/src/airflow/ui/public/i18n/locales/de/dag.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/de/dag.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/de/dag.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/de/dags.json b/airflow-core/src/airflow/ui/public/i18n/locales/de/dags.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/de/dags.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/de/dags.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/de/dashboard.json b/airflow-core/src/airflow/ui/public/i18n/locales/de/dashboard.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/de/dashboard.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/de/dashboard.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/en/admin.json b/airflow-core/src/airflow/ui/public/i18n/locales/en/admin.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/en/admin.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/en/admin.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/en/assets.json b/airflow-core/src/airflow/ui/public/i18n/locales/en/assets.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/en/assets.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/en/assets.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/en/browse.json b/airflow-core/src/airflow/ui/public/i18n/locales/en/browse.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/en/browse.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/en/browse.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/en/common.json b/airflow-core/src/airflow/ui/public/i18n/locales/en/common.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/en/common.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/en/common.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/en/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/en/components.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/en/components.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/en/components.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/en/dag.json b/airflow-core/src/airflow/ui/public/i18n/locales/en/dag.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/en/dag.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/en/dag.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/en/dags.json b/airflow-core/src/airflow/ui/public/i18n/locales/en/dags.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/en/dags.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/en/dags.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/en/dashboard.json b/airflow-core/src/airflow/ui/public/i18n/locales/en/dashboard.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/en/dashboard.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/en/dashboard.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/fr/admin.json b/airflow-core/src/airflow/ui/public/i18n/locales/fr/admin.json
similarity index 95%
rename from airflow-core/src/airflow/ui/src/i18n/locales/fr/admin.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/fr/admin.json
index 3626a7a2f1904..15edd6d9aad58 100644
--- a/airflow-core/src/airflow/ui/src/i18n/locales/fr/admin.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/fr/admin.json
@@ -1,19 +1,19 @@
 {
-  "columns":{
+  "columns": {
     "description": "Description",
     "key": "Clé",
     "name": "Nom",
     "value": "Valeur"
   },
-  "config":{
-    "columns":{
+  "config": {
+    "columns": {
       "section": "Section"
     },
     "title": "Configuration d'Airflow"
   },
-  "connections":{
-    "add":"Ajouter une Connexion",
-    "columns":{
+  "connections": {
+    "add": "Ajouter une Connexion",
+    "columns": {
       "connectionId": "ID de la connexion",
       "connectionType": "Type de la connexion",
       "host": "Hôte",
@@ -21,7 +21,7 @@
     },
     "connection_one": "Connexion",
     "connection_other": "Connexions",
-    "delete":{
+    "delete": {
       "deleteConnection_one": "Supprimer 1 connexion",
       "deleteConnection_other": "Supprimer {{count}} connexions",
       "firstConfirmMessage_one": "Vous êtes sur le point de supprimer la connexion suivante :",
@@ -29,7 +29,7 @@
       "title": "Supprimer la Connexion"
     },
     "edit": "Modifier la Connexion",
-    "form":{
+    "form": {
       "connectionIdRequired": "L'ID de la connexion est requis",
       "connectionIdRequirement": "L'ID de la connexion ne peut pas contenir uniquement des espaces",
       "connectionTypeRequired": "Le type de la connexion est requis",
@@ -55,9 +55,9 @@
       }
     }
   },
-  "deleteActions":{
+  "deleteActions": {
     "button": "Supprimer",
-    "modal":{
+    "modal": {
       "confirmButton": "Oui, Supprimer",
       "secondConfirmMessage": "Cette action est irréversible.",
       "thirdConfirmMessage": " Êtes-vous sûr de vouloir continuer ?"
@@ -65,7 +65,7 @@
     "selected": "Sélectionné",
     "tooltip": "Supprimer les connexions sélectionnées"
   },
-  "formActions":{
+  "formActions": {
     "reset": "Réinitialiser",
     "save": "Sauvegarder"
   },
@@ -80,7 +80,7 @@
   "pools": {
     "add": "Ajouter un Pool",
     "deferredSlotsIncluded": "Slots Différés Inclus",
-    "delete":{
+    "delete": {
       "title": "Supprimer le Pool",
       "warning": "Cela supprimera toutes les métadonnées liées au pool et peut affecter les tâches utilisant ce pool."
     },
@@ -122,7 +122,7 @@
       "title": "Supprimer la Variable",
       "tooltip": "Supprimer les variables sélectionnées"
     },
-    "edit":  "Modifier la Variable",
+    "edit": "Modifier la Variable",
     "export": "Exporter",
     "exportTooltip": "Exporter les variables sélectionnées",
     "form": {
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/fr/assets.json b/airflow-core/src/airflow/ui/public/i18n/locales/fr/assets.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/fr/assets.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/fr/assets.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/fr/browse.json b/airflow-core/src/airflow/ui/public/i18n/locales/fr/browse.json
similarity index 86%
rename from airflow-core/src/airflow/ui/src/i18n/locales/fr/browse.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/fr/browse.json
index 7aad5959a653f..09b7d3de68768 100644
--- a/airflow-core/src/airflow/ui/src/i18n/locales/fr/browse.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/fr/browse.json
@@ -1,10 +1,10 @@
 {
-  "auditLog":{
+  "auditLog": {
     "actions": {
       "collapseAllExtra": "Réduire tous les extra json",
       "expandAllExtra": "Ouvrir tous les extra json"
     },
-    "columns":{
+    "columns": {
       "event": "Événement",
       "extra": "Extra",
       "user": "Utilisateur",
@@ -12,8 +12,8 @@
     },
     "title": "Journal d'Audit"
   },
-  "xcom":{
-    "columns":{
+  "xcom": {
+    "columns": {
       "dag": "Dag",
       "key": "Clé",
       "value": "Valeur"
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/fr/common.json b/airflow-core/src/airflow/ui/public/i18n/locales/fr/common.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/fr/common.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/fr/common.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/fr/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/fr/components.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/fr/components.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/fr/components.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/fr/dag.json b/airflow-core/src/airflow/ui/public/i18n/locales/fr/dag.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/fr/dag.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/fr/dag.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/fr/dags.json b/airflow-core/src/airflow/ui/public/i18n/locales/fr/dags.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/fr/dags.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/fr/dags.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/fr/dashboard.json b/airflow-core/src/airflow/ui/public/i18n/locales/fr/dashboard.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/fr/dashboard.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/fr/dashboard.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/he/admin.json b/airflow-core/src/airflow/ui/public/i18n/locales/he/admin.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/he/admin.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/he/admin.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/he/assets.json b/airflow-core/src/airflow/ui/public/i18n/locales/he/assets.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/he/assets.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/he/assets.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/he/browse.json b/airflow-core/src/airflow/ui/public/i18n/locales/he/browse.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/he/browse.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/he/browse.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/he/common.json b/airflow-core/src/airflow/ui/public/i18n/locales/he/common.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/he/common.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/he/common.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/he/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/he/components.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/he/components.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/he/components.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/he/dag.json b/airflow-core/src/airflow/ui/public/i18n/locales/he/dag.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/he/dag.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/he/dag.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/he/dags.json b/airflow-core/src/airflow/ui/public/i18n/locales/he/dags.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/he/dags.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/he/dags.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/he/dashboard.json b/airflow-core/src/airflow/ui/public/i18n/locales/he/dashboard.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/he/dashboard.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/he/dashboard.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/ko/common.json b/airflow-core/src/airflow/ui/public/i18n/locales/ko/common.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/ko/common.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/ko/common.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/ko/dashboard.json b/airflow-core/src/airflow/ui/public/i18n/locales/ko/dashboard.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/ko/dashboard.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/ko/dashboard.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/nl/common.json b/airflow-core/src/airflow/ui/public/i18n/locales/nl/common.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/nl/common.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/nl/common.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/nl/dashboard.json b/airflow-core/src/airflow/ui/public/i18n/locales/nl/dashboard.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/nl/dashboard.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/nl/dashboard.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/pl/admin.json b/airflow-core/src/airflow/ui/public/i18n/locales/pl/admin.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/pl/admin.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/pl/admin.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/pl/assets.json b/airflow-core/src/airflow/ui/public/i18n/locales/pl/assets.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/pl/assets.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/pl/assets.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/pl/browse.json b/airflow-core/src/airflow/ui/public/i18n/locales/pl/browse.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/pl/browse.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/pl/browse.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/pl/common.json b/airflow-core/src/airflow/ui/public/i18n/locales/pl/common.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/pl/common.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/pl/common.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/pl/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/pl/components.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/pl/components.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/pl/components.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/pl/dag.json b/airflow-core/src/airflow/ui/public/i18n/locales/pl/dag.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/pl/dag.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/pl/dag.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/pl/dags.json b/airflow-core/src/airflow/ui/public/i18n/locales/pl/dags.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/pl/dags.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/pl/dags.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/pl/dashboard.json b/airflow-core/src/airflow/ui/public/i18n/locales/pl/dashboard.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/pl/dashboard.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/pl/dashboard.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/zh-TW/admin.json b/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/admin.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/zh-TW/admin.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/admin.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/zh-TW/assets.json b/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/assets.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/zh-TW/assets.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/assets.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/zh-TW/browse.json b/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/browse.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/zh-TW/browse.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/browse.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/zh-TW/common.json b/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/common.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/zh-TW/common.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/common.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/zh-TW/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/components.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/zh-TW/components.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/components.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/zh-TW/dag.json b/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/dag.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/zh-TW/dag.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/dag.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/zh-TW/dags.json b/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/dags.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/zh-TW/dags.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/dags.json
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/zh-TW/dashboard.json b/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/dashboard.json
similarity index 100%
rename from airflow-core/src/airflow/ui/src/i18n/locales/zh-TW/dashboard.json
rename to airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/dashboard.json
diff --git a/airflow-core/src/airflow/ui/rules/i18n.js b/airflow-core/src/airflow/ui/rules/i18n.js
index f96e71b37b7d4..be2fbac79e7de 100644
--- a/airflow-core/src/airflow/ui/rules/i18n.js
+++ b/airflow-core/src/airflow/ui/rules/i18n.js
@@ -20,6 +20,7 @@
 /* eslint-disable @typescript-eslint/no-unsafe-argument */
 
 /* eslint-disable @typescript-eslint/no-unsafe-assignment */
+import jsoncParser from "jsonc-eslint-parser";
 import fs from "node:fs";
 import path from "node:path";
 import { fileURLToPath } from "node:url";
@@ -50,7 +51,7 @@ const getKeys = (obj, prefix = "") => {
 };
 
 // Path to locales directory
-const localesDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../src/i18n/locales");
+const localesDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../public/i18n/locales");
 
 // Default language (English) as reference
 const defaultLanguage = "en";
@@ -72,7 +73,7 @@ fs.readdirSync(defaultLanguageDir)
   });
 
 export const i18nPlugin = {
-  files: ["**/i18n/locales/**/*.json"],
+  files: ["public/i18n/locales/**/*.json"],
   rules: {
     "check-translation-completeness": {
       /** @param {import('@typescript-eslint/utils').TSESLint.RuleContext<'missingKeys' | 'fileError', []>} context */
@@ -155,7 +156,13 @@ export const i18nPlugin = {
 
 /** @type {import("@typescript-eslint/utils/ts-eslint").FlatConfig.Config} */
 export const i18nRules = {
-  files: ["**/i18n/locales/**/*.json"],
+  files: ["public/i18n/locales/**/*.json"],
+  languageOptions: {
+    parser: jsoncParser,
+    parserOptions: {
+      extraFileExtensions: [".json"],
+    },
+  },
   plugins: {
     [i18nNamespace]: i18nPlugin,
   },
diff --git a/airflow-core/src/airflow/ui/rules/typescript.js b/airflow-core/src/airflow/ui/rules/typescript.js
index 2583b602e7264..ed05e15089799 100644
--- a/airflow-core/src/airflow/ui/rules/typescript.js
+++ b/airflow-core/src/airflow/ui/rules/typescript.js
@@ -38,6 +38,7 @@ export const typescriptNamespace = "@typescript-eslint";
  * @see [@typescript-eslint/eslint-plugin](https://typescript-eslint.io/rules/)
  */
 export const typescriptRules = /** @type {const} @satisfies {FlatConfig.Config} */ ({
+  files: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"],
   languageOptions: {
     parser: typescriptParser,
     parserOptions: {
diff --git a/airflow-core/src/airflow/ui/src/i18n/config.ts b/airflow-core/src/airflow/ui/src/i18n/config.ts
index 41bb37f5e8ace..9754236f0fd8b 100644
--- a/airflow-core/src/airflow/ui/src/i18n/config.ts
+++ b/airflow-core/src/airflow/ui/src/i18n/config.ts
@@ -18,72 +18,9 @@
  */
 import i18n from "i18next";
 import LanguageDetector from "i18next-browser-languagedetector";
+import Backend from "i18next-http-backend";
 import { initReactI18next } from "react-i18next";
 
-import arAdmin from "./locales/ar/admin.json";
-import arAssets from "./locales/ar/assets.json";
-import arBrowse from "./locales/ar/browse.json";
-import arCommon from "./locales/ar/common.json";
-import arComponents from "./locales/ar/components.json";
-import arDag from "./locales/ar/dag.json";
-import arDags from "./locales/ar/dags.json";
-import arDashboard from "./locales/ar/dashboard.json";
-import deAdmin from "./locales/de/admin.json";
-import deAssets from "./locales/de/assets.json";
-import deBrowse from "./locales/de/browse.json";
-import deCommon from "./locales/de/common.json";
-import deComponents from "./locales/de/components.json";
-import deDag from "./locales/de/dag.json";
-import deDags from "./locales/de/dags.json";
-import deDashboard from "./locales/de/dashboard.json";
-import enAdmin from "./locales/en/admin.json";
-import enAssets from "./locales/en/assets.json";
-import enBrowse from "./locales/en/browse.json";
-import enCommon from "./locales/en/common.json";
-import enComponents from "./locales/en/components.json";
-import enDag from "./locales/en/dag.json";
-import enDags from "./locales/en/dags.json";
-import enDashboard from "./locales/en/dashboard.json";
-import frAdmin from "./locales/fr/admin.json";
-import frAssets from "./locales/fr/assets.json";
-import frBrowse from "./locales/fr/browse.json";
-import frCommon from "./locales/fr/common.json";
-import frComponents from "./locales/fr/components.json";
-import frDag from "./locales/fr/dag.json";
-import frDags from "./locales/fr/dags.json";
-import frDashboard from "./locales/fr/dashboard.json";
-import heAdmin from "./locales/he/admin.json";
-import heAsset from "./locales/he/assets.json";
-import heBrowse from "./locales/he/browse.json";
-import heCommon from "./locales/he/common.json";
-import heComponents from "./locales/he/components.json";
-import heDag from "./locales/he/dag.json";
-import heDags from "./locales/he/dags.json";
-import heDashboard from "./locales/he/dashboard.json";
-import koCommon from "./locales/ko/common.json";
-import koDashboard from "./locales/ko/dashboard.json";
-import nlCommon from "./locales/nl/common.json";
-import nlDashboard from "./locales/nl/dashboard.json";
-import plAdmin from "./locales/pl/admin.json";
-import plAssets from "./locales/pl/assets.json";
-import plBrowse from "./locales/pl/browse.json";
-import plCommon from "./locales/pl/common.json";
-import plComponents from "./locales/pl/components.json";
-import plDag from "./locales/pl/dag.json";
-import plDags from "./locales/pl/dags.json";
-import plDashboard from "./locales/pl/dashboard.json";
-import zhTWAdmin from "./locales/zh-TW/admin.json";
-import zhTWAssets from "./locales/zh-TW/assets.json";
-import zhTWBrowse from "./locales/zh-TW/browse.json";
-import zhTWCommon from "./locales/zh-TW/common.json";
-import zhTWComponents from "./locales/zh-TW/components.json";
-import zhTWDag from "./locales/zh-TW/dag.json";
-import zhTWDags from "./locales/zh-TW/dags.json";
-import zhTWDashboard from "./locales/zh-TW/dashboard.json";
-
-// TODO: Dynamically load translation files
-// import Backend from 'i18next-http-backend';
-
 export const supportedLanguages = [
   { code: "ar", flag: "🇸🇦", name: "العربية" },
   { code: "de", flag: "🇩🇪", name: "Deutsch" },
@@ -97,94 +34,16 @@ export const supportedLanguages = [
 ] as const;
 
 export const defaultLanguage = "en";
-export const namespaces = ["common", "dashboard", "dags", "admin", "browse", "assets"] as const;
-
-const resources = {
-  ar: {
-    admin: arAdmin,
-    assets: arAssets,
-    browse: arBrowse,
-    common: arCommon,
-    components: arComponents,
-    dag: arDag,
-    dags: arDags,
-    dashboard: arDashboard,
-  },
-  de: {
-    admin: deAdmin,
-    assets: deAssets,
-    browse: deBrowse,
-    common: deCommon,
-    components: deComponents,
-    dag: deDag,
-    dags: deDags,
-    dashboard: deDashboard,
-  },
-  en: {
-    admin: enAdmin,
-    assets: enAssets,
-    browse: enBrowse,
-    common: enCommon,
-    components: enComponents,
-    dag: enDag,
-    dags: enDags,
-    dashboard: enDashboard,
-  },
-  fr: {
-    admin: frAdmin,
-    assets: frAssets,
-    browse: frBrowse,
-    common: frCommon,
-    components: frComponents,
-    dag: frDag,
-    dags: frDags,
-    dashboard: frDashboard,
-  },
-  he: {
-    admin: heAdmin,
-    assets: heAsset,
-    browse: heBrowse,
-    common: heCommon,
-    components: heComponents,
-    dag: heDag,
-    dags: heDags,
-    dashboard: heDashboard,
-  },
-  ko: {
-    common: koCommon,
-    dashboard: koDashboard,
-  },
-  nl: {
-    common: nlCommon,
-    dashboard: nlDashboard,
-  },
-  pl: {
-    admin: plAdmin,
-    assets: plAssets,
-    browse: plBrowse,
-    common: plCommon,
-    components: plComponents,
-    dag: plDag,
-    dags: plDags,
-    dashboard: plDashboard,
-  },
-  "zh-TW": {
-    admin: zhTWAdmin,
-    assets: zhTWAssets,
-    browse: zhTWBrowse,
-    common: zhTWCommon,
-    components: zhTWComponents,
-    dag: zhTWDag,
-    dags: zhTWDags,
-    dashboard: zhTWDashboard,
-  },
-};
+export const namespaces = ["common", "dashboard", "dags", "admin", "browse", "assets", "components"] as const;
 
 void i18n
-  // .use(Backend) // TODO: Dynamically load translation files
+  .use(Backend)
   .use(LanguageDetector)
   .use(initReactI18next)
   .init({
+    backend: {
+      loadPath: "/static/i18n/locales/{{lng}}/{{ns}}.json",
+    },
     defaultNS: "common",
     detection: {
       caches: ["localStorage"],
@@ -198,7 +57,6 @@ void i18n
     react: {
       useSuspense: false,
     },
-    resources,
     supportedLngs: supportedLanguages.map((lang) => lang.code),
   });
 
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/ar/components.json b/airflow-core/src/airflow/ui/src/i18n/locales/ar/components.json
deleted file mode 100644
index b5b9c1b43b372..0000000000000
--- a/airflow-core/src/airflow/ui/src/i18n/locales/ar/components.json
+++ /dev/null
@@ -1,131 +0,0 @@
-{
-    "backfill": {
-        "affected_one": "مهمة واحدة ستُشغّل.",
-        "affected_other": "{{count}} مهام ستُشغّل.",
-        "affectedNone": "لا توجد مهام تطابق المعايير المحددة.",
-        "backwards": "تشغيل رجعي",
-        "dateRange": "نطاق التاريخ",
-        "dateRangeFrom": "من",
-        "dateRangeTo": "إلى",
-        "errorStartDateBeforeEndDate": "يجب أن يكون تاريخ البدء قبل تاريخ الانتهاء",
-        "maxRuns": "الحد الأقصى للتشغيلات النشطة",
-        "reprocessBehavior": "اعادة معالجة السلوك",
-        "run": "تشغيل التعبئة الرجعية",
-        "selectDescription": "تشغيل هذا DAG لنطاق من التواريخ",
-        "selectLabel": "تعبئة رجعية",
-        "title": "تشغيل التعبئة الرجعية",
-        "toaster": {
-            "success": {
-                "description": "تم تشغيل مهام التعبئة الرجعية بنجاح.",
-                "title": "تم إنشاء التعبئة الرجعية"
-            }
-        },
-        "tooltip": "التعبئة الرجعية تتطلب جدول زمني",
-        "unpause": "إلغاء إيقاف {{dag_display_name}} عند التشغيل",
-        "validation": {
-            "datesRequired": "يجب توفير بيانات كل من تاريخ بدء فترة وتاريخ الانتهاء.",
-            "startBeforeEnd": "بيانات فترة تاريخ البدء يجب ان تكون من او قبل تاريخ الانتهاء. "
-        }
-    },
-    "banner": {
-        "backfillInProgress": "التعبئة الرجعية قيد التنفيذ",
-        "cancel": "إلغاء التعبئة الرجعية",
-        "pause": "إيقاف التعبئة الرجعية",
-        "unpause": "إلغاء إيقاف التعبئة الرجعية"
-    },
-    "clipboard": {
-        "copy": "نسخ"
-    },
-    "close": "إغلاق",
-    "configForm": {
-        "advancedOptions": "خيارات متقدمة",
-        "configJson": "تكوين JSON",
-        "invalidJson": "تنسيق JSON غير صالح: {{errorMessage}}"
-    },
-    "dagWarnings": {
-        "error_one": "1 خطأ",
-        "errorAndWarning": "1 خطأ و{{warningText}}",
-        "warning_one": "1 تحذير",
-        "warning_other": "{{count}} تحذيرات"
-    },
-    "durationChart": {
-        "duration": "المدة (بالثواني)",
-        "lastDagRun_one": "آخر تشغيل DAG",
-        "lastDagRun_other": "آخر {{count}} تشغيلات DAG",
-        "lastTaskInstance_one": "آخر مثيل مهمة",
-        "lastTaskInstance_other": "آخر {{count}} مثيلات المهام",
-        "queuedDuration": "مدة الانتظار في الطابور",
-        "runAfter": "تشغيل بعد",
-        "runDuration": "مدة التشغيل"
-    },
-    "fileUpload": {
-        "files_other": "{{count}} ملفات"
-    },
-    "flexibleForm": {
-        "placeholder": "اختر قيمة",
-        "placeholderArray": "أدخل كل سلسلة في سطر جديد",
-        "placeholderExamples": "ابدأ الكتابة لرؤية الخيارات",
-        "placeholderMulti": "اختر قيمة أو أكثر",
-        "validationErrorArrayNotArray": "القيمة يجب أن تكون مصفوفة.",
-        "validationErrorArrayNotNumbers": "جميع العناصر في المصفوفة يجب أن تكون أرقامًا.",
-        "validationErrorArrayNotObject": "جميع العناصر في المصفوفة يجب أن تكون كائنات.",
-        "validationErrorRequired": "هذا الحقل مطلوب"
-    },
-    "graph": {
-        "directionDown": "من الأعلى إلى الأسفل",
-        "directionLeft": "من اليمين إلى اليسار",
-        "directionRight": "من اليسار إلى اليمين",
-        "directionUp": "من الأسفل إلى الأعلى",
-        "downloadImage": "تحميل صورة الرسم البياني",
-        "downloadImageError": "فشل تحميل صورة الرسم البياني.",
-        "downloadImageErrorTitle": "فشل التحميل",
-        "otherDagRuns": "+تشغيلات DAG أخرى",
-        "taskCount_one": "{{count}} مهمة",
-        "taskCount_other": "{{count}} مهام",
-        "taskGroup": "مجموعة المهام"
-    },
-    "limitedList": "+{{count}} المزيد",
-    "logs": {
-        "file": "ملف",
-        "location": "سطر {{line}} في {{name}}"
-    },
-    "reparseDag": "إعادة تحليل DAG",
-    "sortedAscending": "الترتيب تصاعدي",
-    "sortedDescending": "الترتيب تنازلي",
-    "sortedUnsorted": "غير مرتب",
-    "taskTries": "محاولات المهمة",
-    "toggleCardView": "عرض البطاقة",
-    "toggleTableView": "عرض الجدول",
-    "triggerDag": {
-        "button": "تشغيل",
-        "loading": "جارٍ تحميل معلومات DAG...",
-        "loadingFailed": "فشل تحميل معلومات DAG. يرجى المحاولة مرة أخرى.",
-        "runIdHelp": "اختياري - سيتم توليده تلقائيًا إذا لم يتم توفيره.",
-        "selectDescription": "تشغيل عملية واحدة من هذا DAG",
-        "selectLabel": "تشغيلة واحدة",
-        "title": "تشغيل DAG",
-        "toaster": {
-            "success": {
-                "description": "تم تشغيل عملية DAG بنجاح.",
-                "title": "تم تشغيل DAG"
-            }
-        },
-        "unpause": "إلغاء إيقاف {{dagDisplayName}} عند التشغيل"
-    },
-    "trimText": {
-        "details": "التفاصيل",
-        "empty": "فارغ",
-        "noContent": "لا توجد محتويات متاحة."
-    },
-    "versionDetails": {
-        "bundleLink": "رابط الحزمة",
-        "bundleName": "اسم الحزمة",
-        "bundleVersion": "إصدار الحزمة",
-        "createdAt": "تاريخ الإنشاء",
-        "versionId": "معرف الإصدار"
-    },
-    "versionSelect": {
-        "dagVersion": "إصدار DAG",
-        "versionCode": "v{{versionCode}}"
-    }
-}
diff --git a/airflow-core/src/airflow/ui/src/pages/DagsList/DagCard.test.tsx b/airflow-core/src/airflow/ui/src/pages/DagsList/DagCard.test.tsx
index d95e4466be5cf..c5ed905568f95 100644
--- a/airflow-core/src/airflow/ui/src/pages/DagsList/DagCard.test.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/DagsList/DagCard.test.tsx
@@ -19,8 +19,9 @@
  * under the License.
  */
 import { render, screen } from "@testing-library/react";
+import i18n from "i18next";
 import type { DagTagResponse, DAGWithLatestDagRunsResponse } from "openapi-gen/requests/types.gen";
-import { afterEach, describe, it, vi, expect } from "vitest";
+import { afterEach, describe, it, vi, expect, beforeAll } from "vitest";
 
 import { Wrapper } from "src/utils/Wrapper";
 
@@ -58,6 +59,23 @@ const mockDag = {
   timetable_summary: "",
 } satisfies DAGWithLatestDagRunsResponse;
 
+beforeAll(async () => {
+  await i18n.init({
+    defaultNS: "components",
+    fallbackLng: "en",
+    interpolation: { escapeValue: false },
+    lng: "en",
+    ns: ["components"],
+    resources: {
+      en: {
+        components: {
+          limitedList: "+{{count}} more",
+        },
+      },
+    },
+  });
+});
+
 afterEach(() => {
   vi.restoreAllMocks();
 });
diff --git a/airflow-core/src/airflow/ui/testsSetup.ts b/airflow-core/src/airflow/ui/testsSetup.ts
index 676ffc3d82e0d..09dbe7bce31e3 100644
--- a/airflow-core/src/airflow/ui/testsSetup.ts
+++ b/airflow-core/src/airflow/ui/testsSetup.ts
@@ -16,19 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import * as matchers from "@testing-library/jest-dom/matchers";
 import "@testing-library/jest-dom/vitest";
 import type { HttpHandler } from "msw";
 import { setupServer, type SetupServerApi } from "msw/node";
-import { beforeEach, expect, beforeAll, afterAll } from "vitest";
+import { beforeEach, beforeAll, afterAll } from "vitest";
 
 import { handlers } from "src/mocks/handlers";
 
 let server: SetupServerApi;
 
-// extends vitest matchers with react-testing-library's ones
-expect.extend(matchers);
-
 beforeAll(() => {
   server = setupServer(...(handlers as Array<HttpHandler>));
   server.listen({ onUnhandledRequest: "bypass" });
diff --git a/dev/README_RELEASE_AIRFLOW.md b/dev/README_RELEASE_AIRFLOW.md
index 0b5b538fcc188..268fdb1d1ada7 100644
--- a/dev/README_RELEASE_AIRFLOW.md
+++ b/dev/README_RELEASE_AIRFLOW.md
@@ -75,7 +75,7 @@ The first step of a release is to work out what is being included. This differs
 
 ## Validating completeness of i18n locale files
 
-At this point you should validate the completeness of the i18n locale files - follow the instructions in section 8.1 of the [internationalization (i18n) policy](../airflow-core/src/airflow/ui/src/i18n/README.md) for doing so.
+At this point you should validate the completeness of the i18n locale files - follow the instructions in section 8.1 of the [internationalization (i18n) policy](../airflow-core/src/airflow/ui/public/i18n/README.md) for doing so.
 If there are any incomplete locales, copy the names of the incomplete locales and send out a reminder to the code owners to ensure completion of the translation by a due date of your choice
 before cutting the release candidate (RC).
 The reminder should be sent via dev@airflow.apache.org mailing list, preferably with an accompanying GitHub issue for tracking purposes.
diff --git a/airflow-core/src/airflow/ui/src/i18n/check_translations_completeness.py b/dev/i18n/check_translations_completeness.py
similarity index 99%
rename from airflow-core/src/airflow/ui/src/i18n/check_translations_completeness.py
rename to dev/i18n/check_translations_completeness.py
index d001091f606da..35d0583b53160 100755
--- a/airflow-core/src/airflow/ui/src/i18n/check_translations_completeness.py
+++ b/dev/i18n/check_translations_completeness.py
@@ -40,7 +40,9 @@
 click.rich_click.MAX_WIDTH = 120
 click.rich_click.USE_RICH_MARKUP = True
 
-LOCALES_DIR = Path(__file__).parent / "locales"
+LOCALES_DIR = (
+    Path(__file__).parents[2] / "airflow-core" / "src" / "airflow" / "ui" / "public" / "i18n" / "locales"
+)
 
 
 class LocaleSummary(NamedTuple):
diff --git a/scripts/ci/pre_commit/boring_cyborg.py b/scripts/ci/pre_commit/boring_cyborg.py
index 22d82d736cb9f..95fb1f057c032 100755
--- a/scripts/ci/pre_commit/boring_cyborg.py
+++ b/scripts/ci/pre_commit/boring_cyborg.py
@@ -63,7 +63,7 @@
 
 # Check for missing translations
 EXCEPTIONS = ["en"]
-for p in repo_root.glob("airflow-core/src/airflow/ui/src/i18n/locales/*"):
+for p in repo_root.glob("airflow-core/src/airflow/ui/public/i18n/locales/*"):
     if p.is_dir():
         lang_id = p.name
         expected_key = f"translation:{lang_id}"
diff --git a/scripts/ci/pre_commit/check_i18n_json.py b/scripts/ci/pre_commit/check_i18n_json.py
index 9c4f1af4a77d3..31051092e4edb 100755
--- a/scripts/ci/pre_commit/check_i18n_json.py
+++ b/scripts/ci/pre_commit/check_i18n_json.py
@@ -17,7 +17,7 @@
 # under the License.
 
 """
-Pre-commit script to check that all .json files in airflow-core/src/airflow/ui/src/i18n/locales/
+Pre-commit script to check that all .json files in airflow-core/src/airflow/ui/public/i18n/locales/
 are valid JSON and do not contain any 'TODO:' entries.
 """
 
@@ -32,7 +32,7 @@
 sys.path.insert(0, COMMON_PRECOMMIT_PATH.as_posix())  # make sure common_precommit_utils is imported
 from common_precommit_utils import AIRFLOW_ROOT_PATH, console
 
-LOCALES_DIR = AIRFLOW_ROOT_PATH / "airflow-core" / "src" / "airflow" / "ui" / "src" / "i18n" / "locales"
+LOCALES_DIR = AIRFLOW_ROOT_PATH / "airflow-core" / "src" / "airflow" / "ui" / "public" / "i18n" / "locales"
 
 
 def main():

From 35500290d4f3afb16228ea4021ee57a5deacbfd1 Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Fri, 20 Jun 2025 12:15:13 +0530
Subject: [PATCH 003/381] Adding basic manual testing instructions for go-sdk
 (#51912)

* Adding basic manual testing instructions for go-sdk

* update stopping celery queues
---
 go-sdk/README.md | 53 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)

diff --git a/go-sdk/README.md b/go-sdk/README.md
index a3f55246fa0b6..0b208d64855d7 100644
--- a/go-sdk/README.md
+++ b/go-sdk/README.md
@@ -32,6 +32,59 @@ The Task API however does not provide a means to get the `ExecuteTaskWorkload` t
 
 Since Go is a compiled language (putting aside projects such as [YAEGI](https://github.com/traefik/yaegi) that allow go to be interpreted) all tasks must be a) compiled in to the binary, and b) "registered" inside the worker process in order to be executed.
 
+## Quick Testing Setup
+
+The Go SDK currently works with Airflow's Celery Executor setup. Here's how to get started:
+
+### Prerequisites
+
+- Go 1.21 or later
+- Docker and Docker Compose (for Breeze)
+- Redis (for Celery broker)
+
+### Step 1: Start Airflow with Celery Executor
+
+Start Breeze with Celery executor:
+
+```bash
+breeze start-airflow --backend postgres --executor CeleryExecutor --load-example-dags
+```
+
+This will start:
+
+- Airflow API Server on `http://localhost:28080`
+- Celery workers (we will not utilise this)
+- Redis broker on `localhost:26379`
+- Loads the example DAGs
+
+### Step 2: Stop the Celery Worker
+
+We want to run the go workers instead of running the Celery ones. So in `breeze`, press CTRL+C to
+stop the Celery workers.
+
+### Step 3: Run the Go SDK Worker
+
+From the `go-sdk` directory, run the example worker:
+
+```bash
+go run ./example/main.go run \
+  --broker-address=localhost:26379 \
+  --queues default \
+  --execution-api-url http://localhost:28080/execution
+```
+
+**Parameters explained:**
+
+- `--broker-address=localhost:26379`: Redis broker address (default Celery broker)
+- `--queues default`: Queue name where Celery enqueues tasks
+- `--execution-api-url http://localhost:28080/execution`: Airflow's Task Execution API endpoint
+
+### Step 4: Submit a Test Task
+
+You can submit tasks through the Airflow UI for dag_id: `tutorial_dag`. The Go worker will pick up tasks from the Celery queue and execute them using the Task Execution Interface.
+
+Observe the logs in the terminal where you run the test task.
+
 ## Current state
 
 This SDK currently will:

From db896a73393f8b404914936771aa9503a8dda927 Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Fri, 20 Jun 2025 15:40:12 +0530
Subject: [PATCH 004/381] Small update to go mod tidy hook (#51951)

---
 .pre-commit-config.yaml                         | 2 +-
 contributing-docs/08_static_code_checks.rst     | 2 +-
 dev/breeze/doc/images/output_static-checks.svg  | 2 +-
 dev/breeze/doc/images/output_static-checks.txt  | 2 +-
 dev/breeze/src/airflow_breeze/pre_commit_ids.py | 2 +-
 5 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 1bc591c116597..995e255cf363d 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1277,7 +1277,7 @@ repos:
         types: [go]
         pass_filenames: false
         language: docker_image
-      - id: go-tidy
+      - id: go-mod-tidy
         name: Run go mod tidy
         entry: bash -c "cd go-sdk && go mod tidy"
         files: ^go-sdk/
diff --git a/contributing-docs/08_static_code_checks.rst b/contributing-docs/08_static_code_checks.rst
index a36bb02573e69..d1b8a7aa4ee62 100644
--- a/contributing-docs/08_static_code_checks.rst
+++ b/contributing-docs/08_static_code_checks.rst
@@ -294,7 +294,7 @@ require Breeze Docker image to be built locally.
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
 | go-mockery                                                | Generate mocks for go                                  |         |
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
-| go-tidy                                                   | Run go mod tidy                                        |         |
+| go-mod-tidy                                               | Run go mod tidy                                        |         |
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
 | gofmt                                                     | Format go code                                         |         |
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
diff --git a/dev/breeze/doc/images/output_static-checks.svg b/dev/breeze/doc/images/output_static-checks.svg
index 7af46cdafc132..beaf498a9e529 100644
--- a/dev/breeze/doc/images/output_static-checks.svg
+++ b/dev/breeze/doc/images/output_static-checks.svg
@@ -369,7 +369,7 @@
 </text><text class="breeze-static-checks-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1044.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-42)">generate-airflow-diagrams&#160;|&#160;generate-airflowctl-datamodels&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">│</text><text class="breeze-static-checks-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">
 </text><text class="breeze-static-checks-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1069.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-43)">generate-airflowctl-help-images&#160;|&#160;generate-openapi-spec&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1069.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">│</text><text class="breeze-static-checks-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">
 </text><text class="breeze-static-checks-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1093.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-44)">generate-openapi-spec-fab&#160;|&#160;generate-pypi-readme&#160;|&#160;generate-tasksdk-datamodels&#160;|&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1093.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">│</text><text class="breeze-static-checks-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">
-</text><text class="breeze-static-checks-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-static-checks-line-45)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1118" textLength="988.2" clip-path="url(#breeze-static-checks-line-45)">generate-volumes-for-sources&#160;|&#160;go-mockery&#160;|&#160;go-tidy&#160;|&#160;gofmt&#160;|&#160;identity&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1118" textLength="12.2" clip-path="url(#breeze-static-checks-line-45)">│</text><text class="breeze-static-checks-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-static-checks-line-45)">
+</text><text class="breeze-static-checks-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-static-checks-line-45)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1118" textLength="988.2" clip-path="url(#breeze-static-checks-line-45)">generate-volumes-for-sources&#160;|&#160;go-mockery&#160;|&#160;go-mod-tidy&#160;|&#160;gofmt&#160;|&#160;identity&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1118" textLength="12.2" clip-path="url(#breeze-static-checks-line-45)">│</text><text class="breeze-static-checks-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-static-checks-line-45)">
 </text><text class="breeze-static-checks-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1142.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-46)">insert-license&#160;|&#160;kubeconform&#160;|&#160;lint-chart-schema&#160;|&#160;lint-dockerfile&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1142.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">│</text><text class="breeze-static-checks-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">
 </text><text class="breeze-static-checks-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1166.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-47)">lint-helm-chart&#160;|&#160;lint-json-schema&#160;|&#160;lint-markdown&#160;|&#160;mixed-line-ending&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1166.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">│</text><text class="breeze-static-checks-r1" x="1464" y="1166.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">
 </text><text class="breeze-static-checks-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1191.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-48)">mypy-airflow-core&#160;|&#160;mypy-airflow-ctl&#160;|&#160;mypy-dev&#160;|&#160;mypy-devel-common&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1191.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">│</text><text class="breeze-static-checks-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">
diff --git a/dev/breeze/doc/images/output_static-checks.txt b/dev/breeze/doc/images/output_static-checks.txt
index 7e1564761d64a..a62f2b66d5aa2 100644
--- a/dev/breeze/doc/images/output_static-checks.txt
+++ b/dev/breeze/doc/images/output_static-checks.txt
@@ -1 +1 @@
-0965787dd63858d380d63a34b5afdc76
+f31561bb0408a8cab278aad420d260b3
diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids.py b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
index 7db2b08ffd228..de0227170d7fd 100644
--- a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
+++ b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
@@ -110,7 +110,7 @@
     "generate-tasksdk-datamodels",
     "generate-volumes-for-sources",
     "go-mockery",
-    "go-tidy",
+    "go-mod-tidy",
     "gofmt",
     "identity",
     "insert-license",

From 2d6d594ee897df5f11dc74cbf0b64e84db45009a Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Fri, 20 Jun 2025 16:36:47 +0530
Subject: [PATCH 005/381] Fix connection recovery from uri when host has
 protocol (#51953)

---
 airflow-core/src/airflow/models/connection.py | 19 +++++++++++++-----
 .../tests/unit/models/test_connection.py      | 17 ++++++++++++++++
 .../src/airflow/sdk/definitions/connection.py | 20 ++++++++++++++-----
 3 files changed, 46 insertions(+), 10 deletions(-)

diff --git a/airflow-core/src/airflow/models/connection.py b/airflow-core/src/airflow/models/connection.py
index 02df02ddac2ca..a3ff23bbdea07 100644
--- a/airflow-core/src/airflow/models/connection.py
+++ b/airflow-core/src/airflow/models/connection.py
@@ -266,11 +266,20 @@ def get_uri(self) -> str:
 
         if self.host and "://" in self.host:
             protocol, host = self.host.split("://", 1)
+            # If the protocol in host matches the connection type, don't add it again
+            if protocol == self.conn_type:
+                host_to_use = self.host
+                protocol_to_add = None
+            else:
+                # Different protocol, add it to the URI
+                host_to_use = host
+                protocol_to_add = protocol
         else:
-            protocol, host = None, self.host
+            host_to_use = self.host
+            protocol_to_add = None
 
-        if protocol:
-            uri += f"{protocol}://"
+        if protocol_to_add:
+            uri += f"{protocol_to_add}://"
 
         authority_block = ""
         if self.login is not None:
@@ -285,8 +294,8 @@ def get_uri(self) -> str:
             uri += authority_block
 
         host_block = ""
-        if host:
-            host_block += quote(host, safe="")
+        if host_to_use:
+            host_block += quote(host_to_use, safe="")
 
         if self.port:
             if host_block == "" and authority_block == "":
diff --git a/airflow-core/tests/unit/models/test_connection.py b/airflow-core/tests/unit/models/test_connection.py
index 653869785e4b6..97d7b3acec786 100644
--- a/airflow-core/tests/unit/models/test_connection.py
+++ b/airflow-core/tests/unit/models/test_connection.py
@@ -255,6 +255,23 @@ def test_get_uri(self, connection, expected_uri):
     def test_sanitize_conn_id(self, connection, expected_conn_id):
         assert connection.conn_id == expected_conn_id
 
+    @pytest.mark.parametrize(
+        "conn_type, host",
+        [
+            # same protocol to type
+            ("http", "http://host"),
+            # different protocol to type
+            ("https", "http://host"),
+        ],
+    )
+    def test_connection_uri_recovery(self, conn_type, host):
+        original = Connection(conn_id="test", conn_type=conn_type, host=host)
+        uri = original.get_uri()
+
+        recovered = Connection(uri=uri)
+        assert recovered.conn_type == original.conn_type
+        assert recovered.host == original.host
+
     def test_extra_dejson(self):
         extra = (
             '{"trust_env": false, "verify": false, "stream": true, "headers":'
diff --git a/task-sdk/src/airflow/sdk/definitions/connection.py b/task-sdk/src/airflow/sdk/definitions/connection.py
index c66b264dce098..89344cf967d3b 100644
--- a/task-sdk/src/airflow/sdk/definitions/connection.py
+++ b/task-sdk/src/airflow/sdk/definitions/connection.py
@@ -74,10 +74,20 @@ def get_uri(self) -> str:
 
         if self.host and "://" in self.host:
             protocol, host = self.host.split("://", 1)
+            # If the protocol in host matches the connection type, don't add it again
+            if protocol == self.conn_type:
+                host_to_use = self.host
+                protocol_to_add = None
+            else:
+                # Different protocol, add it to the URI
+                host_to_use = host
+                protocol_to_add = protocol
         else:
-            protocol, host = None, self.host or ""
-        if protocol:
-            uri += f"{protocol}://"
+            host_to_use = self.host  # type: ignore[assignment]
+            protocol_to_add = None
+
+        if protocol_to_add:
+            uri += f"{protocol_to_add}://"
 
         authority_block = ""
         if self.login is not None:
@@ -89,8 +99,8 @@ def get_uri(self) -> str:
             uri += authority_block
 
         host_block = ""
-        if host != "":
-            host_block += quote(host, safe="")
+        if host_to_use:
+            host_block += quote(host_to_use, safe="")
         if self.port:
             if host_block == "" and authority_block == "":
                 host_block += f"@:{self.port}"

From 067b3e8ae849d646f84f1a9cea1bcc41f5ab2dce Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Fri, 20 Jun 2025 16:37:20 +0530
Subject: [PATCH 006/381] Converting int account IDs to str in DBT Cloud
 connections (#51957)

---
 providers/dbt/cloud/tests/unit/dbt/cloud/hooks/test_dbt.py  | 6 +++---
 .../dbt/cloud/tests/unit/dbt/cloud/operators/test_dbt.py    | 2 +-
 .../dbt/cloud/tests/unit/dbt/cloud/sensors/test_dbt.py      | 4 +++-
 3 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/providers/dbt/cloud/tests/unit/dbt/cloud/hooks/test_dbt.py b/providers/dbt/cloud/tests/unit/dbt/cloud/hooks/test_dbt.py
index 1a11662019b46..acf622b8812b4 100644
--- a/providers/dbt/cloud/tests/unit/dbt/cloud/hooks/test_dbt.py
+++ b/providers/dbt/cloud/tests/unit/dbt/cloud/hooks/test_dbt.py
@@ -156,7 +156,7 @@ def setup_class(self):
         account_id_conn = Connection(
             conn_id=ACCOUNT_ID_CONN,
             conn_type=DbtCloudHook.conn_type,
-            login=DEFAULT_ACCOUNT_ID,
+            login=str(DEFAULT_ACCOUNT_ID),
             password=TOKEN,
         )
 
@@ -171,7 +171,7 @@ def setup_class(self):
         host_conn = Connection(
             conn_id=SINGLE_TENANT_CONN,
             conn_type=DbtCloudHook.conn_type,
-            login=DEFAULT_ACCOUNT_ID,
+            login=str(DEFAULT_ACCOUNT_ID),
             password=TOKEN,
             host=SINGLE_TENANT_DOMAIN,
         )
@@ -180,7 +180,7 @@ def setup_class(self):
         proxy_conn = Connection(
             conn_id=PROXY_CONN,
             conn_type=DbtCloudHook.conn_type,
-            login=DEFAULT_ACCOUNT_ID,
+            login=str(DEFAULT_ACCOUNT_ID),
             password=TOKEN,
             host=SINGLE_TENANT_DOMAIN,
             extra=EXTRA_PROXIES,
diff --git a/providers/dbt/cloud/tests/unit/dbt/cloud/operators/test_dbt.py b/providers/dbt/cloud/tests/unit/dbt/cloud/operators/test_dbt.py
index 616423d5ba984..13ed5208030a2 100644
--- a/providers/dbt/cloud/tests/unit/dbt/cloud/operators/test_dbt.py
+++ b/providers/dbt/cloud/tests/unit/dbt/cloud/operators/test_dbt.py
@@ -102,7 +102,7 @@ def setup_module():
     conn_account_id = Connection(
         conn_id=ACCOUNT_ID_CONN,
         conn_type=DbtCloudHook.conn_type,
-        login=DEFAULT_ACCOUNT_ID,
+        login=str(DEFAULT_ACCOUNT_ID),
         password=TOKEN,
     )
 
diff --git a/providers/dbt/cloud/tests/unit/dbt/cloud/sensors/test_dbt.py b/providers/dbt/cloud/tests/unit/dbt/cloud/sensors/test_dbt.py
index b0cd0a4ede30f..14dd82b1eacec 100644
--- a/providers/dbt/cloud/tests/unit/dbt/cloud/sensors/test_dbt.py
+++ b/providers/dbt/cloud/tests/unit/dbt/cloud/sensors/test_dbt.py
@@ -56,7 +56,9 @@ def setup_class(self):
         )
 
         # Connection
-        conn = Connection(conn_id="dbt", conn_type=DbtCloudHook.conn_type, login=ACCOUNT_ID, password=TOKEN)
+        conn = Connection(
+            conn_id="dbt", conn_type=DbtCloudHook.conn_type, login=str(ACCOUNT_ID), password=TOKEN
+        )
 
         db.merge_conn(conn)
 

From 9cd74b027ba38a912a7f55091ee75610186dfdf8 Mon Sep 17 00:00:00 2001
From: Dov Benyomin Sohacheski <b@kloud.email>
Date: Fri, 20 Jun 2025 15:10:16 +0300
Subject: [PATCH 007/381] Use merged  to render airflow.cfg and include
 computed defaults (#51828)

---
 chart/templates/configmaps/configmap.yaml           |  4 ++--
 .../tests/helm_tests/airflow_aux/test_configmap.py  | 13 ++++++-------
 2 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/chart/templates/configmaps/configmap.yaml b/chart/templates/configmaps/configmap.yaml
index e904e7e579fff..49240f442cb21 100644
--- a/chart/templates/configmaps/configmap.yaml
+++ b/chart/templates/configmaps/configmap.yaml
@@ -38,10 +38,10 @@ metadata:
   {{- end }}
 {{- $Global := . }}
 data:
+  {{- $config := deepCopy .Values.config | merge (dict "core" dict) }}
   {{/*- Set a default for core.execution_api_server_url pointing to the api-server service if it's not set -*/}}
   {{- if semverCompare ">=3.0.0" .Values.airflowVersion -}}
     {{- $basePath := "" -}}
-    {{- $config := merge .Values.config ( dict  "core" dict )}}
     {{- if not (hasKey $config.core "execution_api_server_url") -}}
       {{-  if (and $config.api $config.api.base_url) -}}
         {{- with urlParse $config.api.base_url }}{{ $basePath = (trimSuffix "/" .path) }}{{ end }}
@@ -51,7 +51,7 @@ data:
   {{- end -}}
   # These are system-specified config overrides.
   airflow.cfg: |-
-    {{- range $section, $settings := .Values.config }}
+    {{- range $section, $settings := $config }}
     [{{ $section }}]
     {{- range $key, $val := $settings }}
     {{ $key }} = {{ tpl ($val | toString) $Global }}
diff --git a/helm-tests/tests/helm_tests/airflow_aux/test_configmap.py b/helm-tests/tests/helm_tests/airflow_aux/test_configmap.py
index e1bad9e3a72c7..e5fde40acb642 100644
--- a/helm-tests/tests/helm_tests/airflow_aux/test_configmap.py
+++ b/helm-tests/tests/helm_tests/airflow_aux/test_configmap.py
@@ -248,7 +248,7 @@ def test_standalone_dag_processor_explicit(self, airflow_version, enabled):
                 "3.0.0",
                 None,
                 None,
-                "http://release-name-api-server:8080/execution",
+                "http://release-name-api-server:8080/execution/",
             ),
             (
                 "2.9.0",
@@ -260,13 +260,13 @@ def test_standalone_dag_processor_explicit(self, airflow_version, enabled):
                 "3.0.0",
                 "http://example.com",
                 None,
-                "http://release-name-api-server:8080/execution",
+                "http://release-name-api-server:8080/execution/",
             ),
             (
                 "3.0.0",
                 "http://example.com/airflow",
                 None,
-                "http://release-name-api-server:8080/airflow/execution",
+                "http://release-name-api-server:8080/airflow/execution/",
             ),
             (
                 "3.0.0",
@@ -291,14 +291,13 @@ def test_execution_api_server_url(
             show_only=["templates/configmaps/configmap.yaml"],
         )
 
-        # config is the jmespath search for the data["airflow.cfg"] in the configmap
-        config = jmespath.search('data.["airflow.cfg"]', configmap[0])
+        config = jmespath.search('data."airflow.cfg"', configmap[0])
         assert config is not None, "Configmap data for airflow.cfg should not be None"
         assert len(config) > 0, "Configmap data for airflow.cfg should not be empty"
 
         if expected_execution_url is not None:
-            assert f"\nexecution_api_server_url = {expected_execution_url}" in config[0]
+            assert f"\nexecution_api_server_url = {expected_execution_url}\n" in config
         else:
-            assert "execution_api_server_url" not in config[0], (
+            assert "execution_api_server_url" not in config, (
                 "execution_api_server_url should not be set for Airflow 2.x versions"
             )

From e5670f1ab909133e53c1011f3fda1002dd6ef530 Mon Sep 17 00:00:00 2001
From: Elad Kalif <45845474+eladkal@users.noreply.github.com>
Date: Fri, 20 Jun 2025 16:35:01 +0300
Subject: [PATCH 008/381] Bump apache-beam>=2.60.0 (#51961)

---
 providers/apache/beam/pyproject.toml | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/providers/apache/beam/pyproject.toml b/providers/apache/beam/pyproject.toml
index 7536b0949925c..7f9aafa85954d 100644
--- a/providers/apache/beam/pyproject.toml
+++ b/providers/apache/beam/pyproject.toml
@@ -58,9 +58,7 @@ requires-python = "~=3.9"
 # After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
 dependencies = [
     "apache-airflow>=2.10.0",
-    # Apache Beam > 2.53.0 and pyarrow > 14.0.1 fix https://nvd.nist.gov/vuln/detail/CVE-2023-47248.
-    'apache-beam>=2.53.0; python_version < "3.12"',
-    'apache-beam>=2.57.0; python_version >= "3.12"',
+    'apache-beam>=2.60.0',
     "pyarrow>=14.0.1",
     "numpy>=1.26.0",
 

From d8b58471f9812127ea1955c8163af3747f1cbe25 Mon Sep 17 00:00:00 2001
From: Elad Kalif <45845474+eladkal@users.noreply.github.com>
Date: Fri, 20 Jun 2025 17:22:10 +0300
Subject: [PATCH 009/381] Prepare release for June 2025 2nd provider wave
 (#51894)

---
 providers/apache/beam/README.rst                  | 15 +++++++--------
 providers/apache/beam/docs/changelog.rst          | 13 +++++++++++++
 providers/apache/beam/docs/index.rst              | 15 +++++++--------
 providers/apache/beam/provider.yaml               |  3 ++-
 providers/apache/beam/pyproject.toml              |  6 +++---
 .../src/airflow/providers/apache/beam/__init__.py |  2 +-
 providers/common/messaging/README.rst             |  6 +++---
 providers/common/messaging/docs/changelog.rst     | 11 +++++++++++
 providers/common/messaging/docs/index.rst         |  2 +-
 providers/common/messaging/provider.yaml          |  3 ++-
 providers/common/messaging/pyproject.toml         |  6 +++---
 .../providers/common/messaging/__init__.py        |  2 +-
 providers/fab/docs/changelog.rst                  |  7 +++++++
 13 files changed, 61 insertions(+), 30 deletions(-)

diff --git a/providers/apache/beam/README.rst b/providers/apache/beam/README.rst
index c23bfbb00cf1e..95a17247052b0 100644
--- a/providers/apache/beam/README.rst
+++ b/providers/apache/beam/README.rst
@@ -23,7 +23,7 @@
 
 Package ``apache-airflow-providers-apache-beam``
 
-Release: ``6.1.0``
+Release: ``6.1.1``
 
 
 `Apache Beam <https://beam.apache.org/>`__.
@@ -36,7 +36,7 @@ This is a provider package for ``apache.beam`` provider. All classes for this pr
 are in ``airflow.providers.apache.beam`` python package.
 
 You can find package information and changelog for the provider
-in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-apache-beam/6.1.0/>`_.
+in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-apache-beam/6.1.1/>`_.
 
 Installation
 ------------
@@ -50,15 +50,14 @@ The package supports the following python versions: 3.9,3.10,3.11,3.12
 Requirements
 ------------
 
-==================  ======================================
+==================  ==================
 PIP package         Version required
-==================  ======================================
+==================  ==================
 ``apache-airflow``  ``>=2.10.0``
-``apache-beam``     ``>=2.53.0; python_version < "3.12"``
-``apache-beam``     ``>=2.57.0; python_version >= "3.12"``
+``apache-beam``     ``>=2.60.0``
 ``pyarrow``         ``>=14.0.1``
 ``numpy``           ``>=1.26.0``
-==================  ======================================
+==================  ==================
 
 Cross provider package dependencies
 -----------------------------------
@@ -81,4 +80,4 @@ Dependent package
 ==================================================================================================================  =================
 
 The changelog for the provider package can be found in the
-`changelog <https://airflow.apache.org/docs/apache-airflow-providers-apache-beam/6.1.0/changelog.html>`_.
+`changelog <https://airflow.apache.org/docs/apache-airflow-providers-apache-beam/6.1.1/changelog.html>`_.
diff --git a/providers/apache/beam/docs/changelog.rst b/providers/apache/beam/docs/changelog.rst
index ce5d02db9ae1c..f753855499b76 100644
--- a/providers/apache/beam/docs/changelog.rst
+++ b/providers/apache/beam/docs/changelog.rst
@@ -26,6 +26,19 @@
 Changelog
 ---------
 
+6.1.1
+.....
+
+Misc
+~~~~
+
+* ``Bump apache-beam>=2.60.0 (#51961)``
+* ``Change the Link implementation in Google Provider to make it cleand and compatible with Airflow 3 (#51576)``
+* ``Bump apache-beam minimum version dependency to 2.60.0 (#51825)``
+
+.. Below changes are excluded from the changelog. Move them to
+   appropriate section above if needed. Do not delete the lines(!):
+
 6.1.0
 .....
 
diff --git a/providers/apache/beam/docs/index.rst b/providers/apache/beam/docs/index.rst
index 115d1c0021c94..bb3f07d91f90b 100644
--- a/providers/apache/beam/docs/index.rst
+++ b/providers/apache/beam/docs/index.rst
@@ -75,7 +75,7 @@ apache-airflow-providers-apache-beam package
 `Apache Beam <https://beam.apache.org/>`__.
 
 
-Release: 6.1.0
+Release: 6.1.1
 
 Provider package
 ----------------
@@ -95,15 +95,14 @@ Requirements
 
 The minimum Apache Airflow version supported by this provider distribution is ``2.10.0``.
 
-==================  ======================================
+==================  ==================
 PIP package         Version required
-==================  ======================================
+==================  ==================
 ``apache-airflow``  ``>=2.10.0``
-``apache-beam``     ``>=2.53.0; python_version < "3.12"``
-``apache-beam``     ``>=2.57.0; python_version >= "3.12"``
+``apache-beam``     ``>=2.60.0``
 ``pyarrow``         ``>=14.0.1``
 ``numpy``           ``>=1.26.0``
-==================  ======================================
+==================  ==================
 
 Cross provider package dependencies
 -----------------------------------
@@ -131,5 +130,5 @@ Downloading official packages
 You can download officially released packages and verify their checksums and signatures from the
 `Official Apache Download site <https://downloads.apache.org/airflow/providers/>`_
 
-* `The apache-airflow-providers-apache-beam 6.1.0 sdist package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_apache_beam-6.1.0.tar.gz>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_apache_beam-6.1.0.tar.gz.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_apache_beam-6.1.0.tar.gz.sha512>`__)
-* `The apache-airflow-providers-apache-beam 6.1.0 wheel package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_apache_beam-6.1.0-py3-none-any.whl>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_apache_beam-6.1.0-py3-none-any.whl.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_apache_beam-6.1.0-py3-none-any.whl.sha512>`__)
+* `The apache-airflow-providers-apache-beam 6.1.1 sdist package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_apache_beam-6.1.1.tar.gz>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_apache_beam-6.1.1.tar.gz.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_apache_beam-6.1.1.tar.gz.sha512>`__)
+* `The apache-airflow-providers-apache-beam 6.1.1 wheel package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_apache_beam-6.1.1-py3-none-any.whl>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_apache_beam-6.1.1-py3-none-any.whl.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_apache_beam-6.1.1-py3-none-any.whl.sha512>`__)
diff --git a/providers/apache/beam/provider.yaml b/providers/apache/beam/provider.yaml
index b5794fd205081..323c0b6318aaa 100644
--- a/providers/apache/beam/provider.yaml
+++ b/providers/apache/beam/provider.yaml
@@ -22,12 +22,13 @@ description: |
     `Apache Beam <https://beam.apache.org/>`__.
 
 state: ready
-source-date-epoch: 1747131299
+source-date-epoch: 1750426671
 # Note that those versions are maintained by release manager - do not update them manually
 # with the exception of case where other provider in sources has >= new provider version.
 # In such case adding >= NEW_VERSION and bumping to NEW_VERSION in a provider have
 # to be done in the same PR
 versions:
+  - 6.1.1
   - 6.1.0
   - 6.0.4
   - 6.0.3
diff --git a/providers/apache/beam/pyproject.toml b/providers/apache/beam/pyproject.toml
index 7f9aafa85954d..0b28523ad0094 100644
--- a/providers/apache/beam/pyproject.toml
+++ b/providers/apache/beam/pyproject.toml
@@ -25,7 +25,7 @@ build-backend = "flit_core.buildapi"
 
 [project]
 name = "apache-airflow-providers-apache-beam"
-version = "6.1.0"
+version = "6.1.1"
 description = "Provider package apache-airflow-providers-apache-beam for Apache Airflow"
 readme = "README.rst"
 authors = [
@@ -110,8 +110,8 @@ apache-airflow-providers-common-sql = {workspace = true}
 apache-airflow-providers-standard = {workspace = true}
 
 [project.urls]
-"Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-apache-beam/6.1.0"
-"Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-apache-beam/6.1.0/changelog.html"
+"Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-apache-beam/6.1.1"
+"Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-apache-beam/6.1.1/changelog.html"
 "Bug Tracker" = "https://github.com/apache/airflow/issues"
 "Source Code" = "https://github.com/apache/airflow"
 "Slack Chat" = "https://s.apache.org/airflow-slack"
diff --git a/providers/apache/beam/src/airflow/providers/apache/beam/__init__.py b/providers/apache/beam/src/airflow/providers/apache/beam/__init__.py
index 5eeaa3fe45e14..91fc6db5869fe 100644
--- a/providers/apache/beam/src/airflow/providers/apache/beam/__init__.py
+++ b/providers/apache/beam/src/airflow/providers/apache/beam/__init__.py
@@ -29,7 +29,7 @@
 
 __all__ = ["__version__"]
 
-__version__ = "6.1.0"
+__version__ = "6.1.1"
 
 if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
     "2.10.0"
diff --git a/providers/common/messaging/README.rst b/providers/common/messaging/README.rst
index de9411533ccb5..0a1b1d8941b09 100644
--- a/providers/common/messaging/README.rst
+++ b/providers/common/messaging/README.rst
@@ -23,7 +23,7 @@
 
 Package ``apache-airflow-providers-common-messaging``
 
-Release: ``1.0.2``
+Release: ``1.0.3``
 
 
 ``Common Messaging Provider``
@@ -36,7 +36,7 @@ This is a provider package for ``common.messaging`` provider. All classes for th
 are in ``airflow.providers.common.messaging`` python package.
 
 You can find package information and changelog for the provider
-in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-common-messaging/1.0.2/>`_.
+in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-common-messaging/1.0.3/>`_.
 
 Installation
 ------------
@@ -57,4 +57,4 @@ PIP package         Version required
 ==================  ==================
 
 The changelog for the provider package can be found in the
-`changelog <https://airflow.apache.org/docs/apache-airflow-providers-common-messaging/1.0.2/changelog.html>`_.
+`changelog <https://airflow.apache.org/docs/apache-airflow-providers-common-messaging/1.0.3/changelog.html>`_.
diff --git a/providers/common/messaging/docs/changelog.rst b/providers/common/messaging/docs/changelog.rst
index 6cb569e7dd39d..233c544429665 100644
--- a/providers/common/messaging/docs/changelog.rst
+++ b/providers/common/messaging/docs/changelog.rst
@@ -25,6 +25,17 @@
 Changelog
 ---------
 
+1.0.3
+.....
+
+Bug Fixes
+~~~~~~~~~
+
+* ``Move MESSAGE_QUEUE_PROVIDERS array to where it belongs - to msq_queue (#51774)``
+
+.. Below changes are excluded from the changelog. Move them to
+   appropriate section above if needed. Do not delete the lines(!):
+
 1.0.2
 .....
 
diff --git a/providers/common/messaging/docs/index.rst b/providers/common/messaging/docs/index.rst
index 33b367fb0af8e..e67c4da27846c 100644
--- a/providers/common/messaging/docs/index.rst
+++ b/providers/common/messaging/docs/index.rst
@@ -77,7 +77,7 @@ apache-airflow-providers-common-messaging package
 ``Common Messaging Provider``
 
 
-Release: 1.0.2
+Release: 1.0.3
 
 Provider package
 ----------------
diff --git a/providers/common/messaging/provider.yaml b/providers/common/messaging/provider.yaml
index d1dd15769f7a3..acae2b2ed5544 100644
--- a/providers/common/messaging/provider.yaml
+++ b/providers/common/messaging/provider.yaml
@@ -22,12 +22,13 @@ description: |
   ``Common Messaging Provider``
 
 state: ready
-source-date-epoch: 1747132189
+source-date-epoch: 1750263693
 # Note that those versions are maintained by release manager - do not update them manually
 # with the exception of case where other provider in sources has >= new provider version.
 # In such case adding >= NEW_VERSION and bumping to NEW_VERSION in a provider have
 # to be done in the same PR
 versions:
+  - 1.0.3
   - 1.0.2
   - 1.0.1
   - 1.0.0
diff --git a/providers/common/messaging/pyproject.toml b/providers/common/messaging/pyproject.toml
index afe0f6a33bef8..dd7dd73c5cd66 100644
--- a/providers/common/messaging/pyproject.toml
+++ b/providers/common/messaging/pyproject.toml
@@ -25,7 +25,7 @@ build-backend = "flit_core.buildapi"
 
 [project]
 name = "apache-airflow-providers-common-messaging"
-version = "1.0.2"
+version = "1.0.3"
 description = "Provider package apache-airflow-providers-common-messaging for Apache Airflow"
 readme = "README.rst"
 authors = [
@@ -109,8 +109,8 @@ apache-airflow-providers-common-sql = {workspace = true}
 apache-airflow-providers-standard = {workspace = true}
 
 [project.urls]
-"Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-common-messaging/1.0.2"
-"Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-common-messaging/1.0.2/changelog.html"
+"Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-common-messaging/1.0.3"
+"Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-common-messaging/1.0.3/changelog.html"
 "Bug Tracker" = "https://github.com/apache/airflow/issues"
 "Source Code" = "https://github.com/apache/airflow"
 "Slack Chat" = "https://s.apache.org/airflow-slack"
diff --git a/providers/common/messaging/src/airflow/providers/common/messaging/__init__.py b/providers/common/messaging/src/airflow/providers/common/messaging/__init__.py
index 77637c20fbc07..15ac47c5a2ac6 100644
--- a/providers/common/messaging/src/airflow/providers/common/messaging/__init__.py
+++ b/providers/common/messaging/src/airflow/providers/common/messaging/__init__.py
@@ -29,7 +29,7 @@
 
 __all__ = ["__version__"]
 
-__version__ = "1.0.2"
+__version__ = "1.0.3"
 
 if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
     "3.0.1"
diff --git a/providers/fab/docs/changelog.rst b/providers/fab/docs/changelog.rst
index 44f5f5757b50e..12242cd1af942 100644
--- a/providers/fab/docs/changelog.rst
+++ b/providers/fab/docs/changelog.rst
@@ -28,6 +28,7 @@ Bug Fixes
 
 * ``Fix: allow users with specific DAG permissions to access DAGs when no pecific DAG is requested (#51462)``
 * ``Fix fab asset compilation hashing script (#51446)``
+* ``Fix default setting for hash algorithm for FAB password hash (#51858)``
 
 Misc
 ~~~~
@@ -35,8 +36,14 @@ Misc
 * ``Add back security api in FAB auth manager (#51578)``
 * ``Bump @babel/eslint-parser from 7.27.1 to 7.27.5 in /providers/fab/src/airflow/providers/fab/www in the fab-ui-package-updates group across 1 directory (#51375)``
 
+Doc-only
+~~~~~~~~
+
+* ``Fix docstring in 'FabAuthManager' (#51892)``
+
 .. Below changes are excluded from the changelog. Move them to
    appropriate section above if needed. Do not delete the lines(!):
+   * ``Prepare release for June 2025 provider wave (#51724)``
 
 2.2.0
 .....

From aabd67d021d280f90344a5d757fb84b7f87a0708 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Fri, 20 Jun 2025 20:28:23 +0200
Subject: [PATCH 010/381] Inline check_files.py dependencies and update
 documentation (#51973)

The "check_files.py" had some dependencies (rich/rich_click) and
it was failing when they were not present in the venv.

This PR updates the docs on how to run it with `uv run` and adds
inline dependencies so that `uv` can automatically run the script
with the right dependencies.
---
 dev/README_RELEASE_AIRFLOW.md   | 2 +-
 dev/README_RELEASE_PROVIDERS.md | 2 +-
 dev/check_files.py              | 7 +++++++
 3 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/dev/README_RELEASE_AIRFLOW.md b/dev/README_RELEASE_AIRFLOW.md
index 268fdb1d1ada7..a5b9266fe76aa 100644
--- a/dev/README_RELEASE_AIRFLOW.md
+++ b/dev/README_RELEASE_AIRFLOW.md
@@ -663,7 +663,7 @@ Optionally you can use `check_files.py` script to verify that all expected files
 present in SVN. This script may help also with verifying installation of the packages.
 
 ```shell script
-python check_files.py airflow -v ${VERSION} -p {PATH_TO_SVN}
+uv run check_files.py airflow -v ${VERSION} -p {PATH_TO_SVN}
 ```
 
 ## Licence check
diff --git a/dev/README_RELEASE_PROVIDERS.md b/dev/README_RELEASE_PROVIDERS.md
index bd5afb26ad3c5..f0a45a560af28 100644
--- a/dev/README_RELEASE_PROVIDERS.md
+++ b/dev/README_RELEASE_PROVIDERS.md
@@ -758,7 +758,7 @@ may help with verifying installation of the packages.
 
 ```shell script
 # Copy the list of packages (pypi urls) into `packages.txt` then run:
-python check_files.py providers -p {PATH_TO_SVN}
+uv run check_files.py providers -p {PATH_TO_SVN}
 ```
 
 After the above script completes you can build `Dockerfile.pmc` to trigger an installation of each provider
diff --git a/dev/check_files.py b/dev/check_files.py
index 042546a19eb3b..91861422d29e0 100644
--- a/dev/check_files.py
+++ b/dev/check_files.py
@@ -14,6 +14,13 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+# /// script
+# requires-python = ">=3.11"
+# dependencies = [
+#   "rich",
+#   "rich-click",
+# ]
+# ///
 from __future__ import annotations
 
 import itertools

From 548bd41290148f2d3b4c44d2267b6f9d8434411e Mon Sep 17 00:00:00 2001
From: Yeonguk Choo <choo121600@gmail.com>
Date: Sat, 21 Jun 2025 04:06:09 +0900
Subject: [PATCH 011/381] UI(i18n): Korean translations (#51974)

---
 .../ui/public/i18n/locales/ko/admin.json      | 161 ++++++++++++++
 .../ui/public/i18n/locales/ko/assets.json     |  29 +++
 .../ui/public/i18n/locales/ko/browse.json     |  23 ++
 .../ui/public/i18n/locales/ko/common.json     | 209 +++++++++++++++++-
 .../ui/public/i18n/locales/ko/components.json | 131 +++++++++++
 .../ui/public/i18n/locales/ko/dag.json        | 110 +++++++++
 .../ui/public/i18n/locales/ko/dags.json       |  87 ++++++++
 .../ui/public/i18n/locales/ko/dashboard.json  |   6 +-
 8 files changed, 747 insertions(+), 9 deletions(-)
 create mode 100644 airflow-core/src/airflow/ui/public/i18n/locales/ko/admin.json
 create mode 100644 airflow-core/src/airflow/ui/public/i18n/locales/ko/assets.json
 create mode 100644 airflow-core/src/airflow/ui/public/i18n/locales/ko/browse.json
 create mode 100644 airflow-core/src/airflow/ui/public/i18n/locales/ko/components.json
 create mode 100644 airflow-core/src/airflow/ui/public/i18n/locales/ko/dag.json
 create mode 100644 airflow-core/src/airflow/ui/public/i18n/locales/ko/dags.json

diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ko/admin.json b/airflow-core/src/airflow/ui/public/i18n/locales/ko/admin.json
new file mode 100644
index 0000000000000..ee6c8a89c03ef
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/ko/admin.json
@@ -0,0 +1,161 @@
+{
+  "columns": {
+    "description": "설명",
+    "key": "키",
+    "name": "이름",
+    "value": "값"
+  },
+  "config": {
+    "columns": {
+      "section": "섹션"
+    },
+    "title": "Airflow 구성"
+  },
+  "connections": {
+    "add": "연결 추가",
+    "columns": {
+      "connectionId": "연결 ID",
+      "connectionType": "연결 유형",
+      "host": "호스트",
+      "port": "포트"
+    },
+    "connection_one": "연결",
+    "connection_other": "연결들",
+    "delete": {
+      "deleteConnection_one": "연결 1개 삭제",
+      "deleteConnection_other": "연결 {{count}}개 삭제",
+      "firstConfirmMessage_one": "다음 연결을 삭제하려고 합니다:",
+      "firstConfirmMessage_other": "다음 연결들을 삭제하려고 합니다:",
+      "title": "연결 삭제"
+    },
+    "edit": "연결 편집",
+    "form": {
+      "connectionIdRequired": "연결 ID는 필수 항목입니다",
+      "connectionIdRequirement": "연결 ID는 공백만으로 구성될 수 없습니다",
+      "connectionTypeRequired": "연결 유형은 필수 항목입니다",
+      "extraFields": "추가 필드",
+      "extraFieldsJson": "추가 필드 JSON",
+      "helperText": "연결 유형이 보이지 않나요? 해당 Airflow Provider 패키지가 설치되어 있는지 확인하세요.",
+      "selectConnectionType": "연결 유형 선택",
+      "standardFields": "기본 필드"
+    },
+    "noRowMessage": "연결을 찾을 수 없습니다.",
+    "searchPlaceholder": "연결 검색",
+    "test": "연결 테스트",
+    "testDisabled": "연결 테스트 기능이 비활성화되어 있습니다. 관리자에게 활성화를 요청하세요.",
+    "typeMeta": {
+      "error": "연결 유형 메타 정보를 가져오지 못했습니다",
+      "standardFields": {
+        "description": "설명",
+        "host": "호스트",
+        "login": "로그인",
+        "password": "비밀번호",
+        "port": "포트",
+        "url_schema": "스키마"
+      }
+    }
+  },
+  "deleteActions": {
+    "button": "삭제",
+    "modal": {
+      "confirmButton": "네, 삭제합니다",
+      "secondConfirmMessage": "이 작업은 영구적으로 삭제되며 되돌릴 수 없습니다.",
+      "thirdConfirmMessage": "정말로 계속하시겠습니까?"
+    },
+    "selected": "선택됨",
+    "tooltip": "선택된 연결들 삭제"
+  },
+  "formActions": {
+    "reset": "초기화",
+    "save": "저장"
+  },
+  "plugins": {
+    "columns": {
+      "source": "소스"
+    },
+    "importError_one": "플러그인 가져오기 오류",
+    "importError_other": "플러그인 가져오기 오류들",
+    "searchPlaceholder": "파일로 검색"
+  },
+  "pools": {
+    "add": "풀 추가",
+    "deferredSlotsIncluded": "연기된 슬롯 포함됨",
+    "delete": {
+      "title": "풀 삭제",
+      "warning": "이 작업은 풀과 관련된 모든 메타데이터를 제거하며, 해당 풀을 사용하는 태스크에 영향을 줄 수 있습니다."
+    },
+    "edit": "풀 편집",
+    "form": {
+      "checkbox": "열린 풀 슬롯 게산시 연기된 작업 포함",
+      "description": "설명",
+      "includeDeferred": "연기됨 포함",
+      "nameMaxLength": "이름은 최대 256자까지 입력할 수 있습니다",
+      "nameRequired": "이름은 필수입니다",
+      "slots": "슬롯"
+    },
+    "noPoolsFound": "풀을 찾을 수 없습니다",
+    "pool_one": "풀",
+    "pool_other": "풀",
+    "searchPlaceholder": "풀 검색",
+    "sort": {
+      "asc": "이름 (A-Z)",
+      "desc": "이름 (Z-A)",
+      "placeholder": "정렬 기준"
+    }
+  },
+  "providers": {
+    "columns": {
+      "packageName": "패키지 이름",
+      "version": "버전"
+    }
+  },
+  "variables": {
+    "add": "변수 추가",
+    "columns": {
+      "isEncrypted": "암호화됨 여부"
+    },
+    "delete": {
+      "deleteVariable_one": "변수 1개 삭제",
+      "deleteVariable_other": "변수 {{count}}개 삭제",
+      "firstConfirmMessage_one": "다음 변수를 삭제하려고 합니다:",
+      "firstConfirmMessage_other": "다음 변수들을 삭제하려고 합니다:",
+      "title": "변수 삭제",
+      "tooltip": "선택된 변수들 삭제"
+    },
+    "edit": "변수 편집",
+    "export": "내보내기",
+    "exportTooltip": "선택된 변수들 내보내기",
+    "form": {
+      "invalidJson": "유효하지 않은 JSON입니다",
+      "keyMaxLength": "키는 최대 250자까지 입력할 수 있습니다",
+      "keyRequired": "키는 필수입니다",
+      "valueRequired": "값은 필수입니다"
+    },
+    "import": {
+      "button": "가져오기",
+      "conflictResolution": "변수 충돌 해결 방법 선택",
+      "errorParsingJsonFile": "JSON 파일 구문 분석 오류: 변수들이 포함된 JSON 파일을 업로드하세요 (예: {\"key\": \"value\", ...}).",
+      "options": {
+        "fail": {
+          "description": "기존 변수가 존재하는 경우 가져오기를 실패합니다.",
+          "title": "실패"
+        },
+        "overwrite": {
+          "description": "충돌 시 해당 변수를 덮어씁니다.",
+          "title": "덮어쓰기"
+        },
+        "skip": {
+          "description": "이미 존재하는 변수는 가져오기를 건너뜁니다.",
+          "title": "건너뛰기"
+        }
+      },
+      "title": "변수 가져오기",
+      "upload": "JSON 파일 업로드",
+      "uploadPlaceholder": "변수를 포함한 JSON 파일 업로드 (e.g., {\"key\": \"value\", ...})"
+    },
+    "noRowsMessage": "변수를 찾을 수 없습니다",
+    "searchPlaceholder": "키 검색",
+    "variable_one": "변수",
+    "variable_other": "변수들"
+  }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ko/assets.json b/airflow-core/src/airflow/ui/public/i18n/locales/ko/assets.json
new file mode 100644
index 0000000000000..629cae2480498
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/ko/assets.json
@@ -0,0 +1,29 @@
+{
+  "consumingDags": "사용 중인 Dags",
+  "createEvent": {
+    "button": "이벤트 생성",
+    "manual": {
+      "description": "에셋 이벤트를 수동으로 생성",
+      "extra": "에셋 이벤트 추가 정보",
+      "label": "수동 생성"
+    },
+    "materialize": {
+      "description": "이 에셋의 상위 Dag을 트리거합니다",
+      "descriptionWithDag": "이 에셋의 상위 Dag을 트리거합니다: {{dagName}}",
+      "label": "구체화",
+      "unpauseDag": "트리거 시 {{dagName}}의 일시중지를 해제합니다"
+    },
+    "success": {
+      "manualDescription": "에셋 이벤트가 성공적으로 수동 생성되었습니다.",
+      "manualTitle": "에셋 이벤트 생성 완료",
+      "materializeDescription": "상위 Dag {{dagId}}가 성공적으로 트리거되었습니다.",
+      "materializeTitle": "에셋 구체화 중"
+    },
+    "title": "{{name}}에 대한 에셋 이벤트 생성"
+  },
+  "group": "그룹",
+  "lastAssetEvent": "마지막 에셋 이벤트",
+  "name": "이름",
+  "producingTasks": "생성하는 태스크",
+  "searchPlaceholder": "에셋 검색"
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ko/browse.json b/airflow-core/src/airflow/ui/public/i18n/locales/ko/browse.json
new file mode 100644
index 0000000000000..ee5f1b9d1e405
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/ko/browse.json
@@ -0,0 +1,23 @@
+{
+  "auditLog": {
+    "actions": {
+      "collapseAllExtra": "모든 추가 JSON 접기",
+      "expandAllExtra": "모든 추가 JSON 펼치기"
+    },
+    "columns": {
+      "event": "이벤트",
+      "extra": "추가 정보",
+      "user": "사용자",
+      "when": "시점"
+    },
+    "title": "감사 로그"
+  },
+  "xcom": {
+    "columns": {
+      "dag": "Dag",
+      "key": "키",
+      "value": "값"
+    },
+    "title": "XCom"
+  }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ko/common.json b/airflow-core/src/airflow/ui/public/i18n/locales/ko/common.json
index dc4217be1eb34..b8b120f578dfa 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/ko/common.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/ko/common.json
@@ -3,50 +3,149 @@
     "Config": "설정",
     "Connections": "연결들",
     "Plugins": "플러그인들",
-    "Pools": "Pools",
+    "Pools": "풀들",
     "Providers": "제공자들",
     "Variables": "변수들"
   },
   "assetEvent_one": "에셋 이벤트",
   "assetEvent_other": "에셋 이벤트들",
+  "asset_one": "에셋",
+  "asset_other": "에셋들",
+  "backfill_one": "백필",
+  "backfill_other": "백필들",
   "browse": {
     "auditLog": "감사 로그",
     "xcoms": "XComs"
   },
+  "createdAssetEvent_one": "생성된 에셋 이벤트",
+  "createdAssetEvent_other": "생성된 에셋 이벤트들",
+  "dagDetails": {
+    "catchup": "캐치업",
+    "concurrency": "동시 샐행 수",
+    "dagRunTimeout": "Dag 실행 제한 시간",
+    "defaultArgs": "기본 인자",
+    "description": "설명",
+    "documentation": "Dag 문서",
+    "fileLocation": "파일 위치",
+    "hasTaskConcurrencyLimits": "태스크 동시성 제한 존재 여부",
+    "lastExpired": "마지막 만료 시점",
+    "lastParsed": "마지막 파싱 시점",
+    "latestDagVersion": "최신 Dag 버전",
+    "latestRun": "최근 실행",
+    "maxActiveRuns": "최대 활성 실행 수",
+    "maxActiveTasks": "최대 활성 태스크 수",
+    "maxConsecutiveFailedDagRuns": "연속 실패한 Dag 실행 최대 횟수",
+    "nextRun": "다음 실행",
+    "owner": "소유자",
+    "params": "매개변수",
+    "schedule": "스케줄",
+    "tags": "태그"
+  },
+  "dagId": "Dag ID",
+  "dagRun": {
+    "conf": "구성",
+    "dagVersions": "Dag 버전",
+    "dataIntervalEnd": "데이터 구간 종료",
+    "dataIntervalStart": "데이터 구간 시작",
+    "lastSchedulingDecision": "마지막 스케줄링 결정",
+    "queuedAt": "대기열에 추가된 시간",
+    "runAfter": "다음 실행",
+    "runType": "실행 유형",
+    "sourceAssetEvent": "소스 에셋 이벤트",
+    "triggeredBy": "실행 주체"
+  },
   "dagRun_one": "Dag 실행",
   "dagRun_other": "Dag 실행들",
+  "dagWarnings": "Dag 경고/오류",
+  "dag_one": "Dag",
+  "dag_other": "Dags",
   "defaultToGraphView": "그래프 뷰 기본 보기",
   "defaultToGridView": "그리드 뷰 기본 보기",
+  "direction": "방향",
   "docs": {
     "documentation": "문서",
     "githubRepo": "GitHub 저장소",
     "restApiReference": "REST API 참조"
   },
-  "duration": "지속 시간",
+  "duration": "기간",
+  "endDate": "종료일",
+  "error": {
+    "back": "뒤로",
+    "defaultMessage": "예기치 않은 오류가 발생했습니다.",
+    "home": "홈",
+    "notFound": "페이지를 찾을 수 없습니다.",
+    "title": "오류"
+  },
+  "expression": {
+    "all": "모두",
+    "and": "그리고",
+    "any": "모든",
+    "or": "또는"
+  },
+  "logicalDate": "논리적 날짜",
   "logout": "로그아웃",
+  "logoutConfirmation": "애플리케이션에서 로그아웃하시겠습니까?",
+  "mapIndex": "맵 인덱스",
+  "modal": {
+    "cancel": "취소",
+    "confirm": "확인",
+    "delete": {
+      "button": "삭제",
+      "confirmation": "{{resourceName}}을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다."
+    }
+  },
   "nav": {
     "admin": "관리자",
     "assets": "에셋",
     "browse": "탐색",
+    "dags": "Dags",
     "docs": "문서",
     "home": "홈",
-    "plugins": "플러그인"
+    "plugins": "플러그인",
+    "security": "보안"
   },
   "noItemsFound": "{{modelName}} 을(를) 찾을 수 없음",
+  "note": {
+    "add": "메모 추가",
+    "dagRun": "Dag 실행 메모",
+    "label": "메모",
+    "placeholder": "메모 추가...",
+    "taskInstance": "작업 인스턴스 메모"
+  },
   "pools": {
     "deferred": "연기됨",
     "open": "열림",
-    "pools_one": "pool",
-    "pools_other": "pools",
+    "pools_one": "풀",
+    "pools_other": "풀",
     "queued": "대기 중",
     "running": "실행 중",
     "scheduled": "예약됨"
   },
+  "runId": "실행 ID",
+  "runTypes": {
+    "asset_triggered": "에셋 트리거",
+    "backfill": "백필",
+    "manual": "수동",
+    "scheduled": "예정됨"
+  },
+  "seconds": "{{count}}초",
+  "security": {
+    "actions": "작업",
+    "permissions": "권한",
+    "resources": "리소스",
+    "roles": "역할",
+    "users": "사용자"
+  },
   "selectLanguage": "언어 선택",
+  "sourceAssetEvent_one": "소스 에셋 이벤트",
+  "sourceAssetEvent_other": "소스 에셋 이벤트",
+  "startDate": "시작일",
+  "state": "상태",
   "states": {
     "deferred": "연기됨",
     "failed": "실패",
     "no_status": "상태 없음",
+    "none": "상태 없음",
     "queued": "대기 중",
     "removed": "제거됨",
     "restarting": "다시 시작 중",
@@ -60,8 +159,57 @@
   },
   "switchToDarkMode": "다크 모드로 전환",
   "switchToLightMode": "라이트 모드로 전환",
+  "table": {
+    "completedAt": "완료 시간",
+    "createdAt": "생성 시간",
+    "filterByTag": "태그로 Dag 필터링",
+    "filterColumns": "테이블 열 필터링",
+    "filterReset_one": "필터 초기화",
+    "filterReset_other": "필터 초기화",
+    "from": "시작",
+    "maxActiveRuns": "최대 활성 실행 수",
+    "noTagsFound": "태그를 찾을 수 없습니다.",
+    "tagMode": {
+      "all": "모두",
+      "any": "모든"
+    },
+    "tagPlaceholder": "태그로 필터링",
+    "to": "종료"
+  },
+  "task": {
+    "documentation": "작업 문서",
+    "lastInstance": "마지막 인스턴스",
+    "operator": "연산자",
+    "triggerRule": "트리거 규칙"
+  },
+  "taskId": "작업 ID",
+  "taskInstance": {
+    "dagVersion": "Dag 버전",
+    "executor": "실행기",
+    "executorConfig": "실행기 구성",
+    "hostname": "호스트 이름",
+    "maxTries": "최대 시도 횟수",
+    "pid": "PID",
+    "pool": "풀",
+    "poolSlots": "풀 슬롯",
+    "priorityWeight": "우선순위 가중치",
+    "queue": "큐",
+    "queuedWhen": "대기열에 추가된 시간",
+    "scheduledWhen": "예정된 시간",
+    "triggerer": {
+      "assigned": "할당된 트리거",
+      "class": "트리거 클래스",
+      "createdAt": "트리거 생성 시간",
+      "id": "트리거 ID",
+      "latestHeartbeat": "최신 트리거 상태",
+      "title": "트리거 정보"
+    },
+    "unixname": "유닉스 이름"
+  },
   "taskInstance_one": "작업 인스턴스",
   "taskInstance_other": "작업 인스턴스들",
+  "task_one": "작업",
+  "task_other": "작업들",
   "timeRange": {
     "last12Hours": "지난 12 시간",
     "last24Hours": "지난 24 시간",
@@ -69,6 +217,55 @@
     "pastWeek": "지난 주"
   },
   "timezone": "시간대",
+  "timezoneModal": {
+    "current-timezone": "현재 시간:",
+    "placeholder": "시간대 선택",
+    "title": "시간대 선택",
+    "utc": "UTC (협정 세계시)"
+  },
+  "toaster": {
+    "bulkDelete": {
+      "error": "대량 삭제 {{resourceName}} 요청 실패",
+      "success": {
+        "description": "{{count}}개 {{resourceName}}이(가) 성공적으로 삭제되었습니다. 키: {{keys}}",
+        "title": "대량 삭제 {{resourceName}} 요청 제출됨"
+      }
+    },
+    "create": {
+      "error": "생성 {{resourceName}} 요청 실패",
+      "success": {
+        "description": "{{resourceName}}이(가) 성공적으로 생성되었습니다.",
+        "title": "생성 {{resourceName}} 요청 제출됨"
+      }
+    },
+    "delete": {
+      "error": "삭제 {{resourceName}} 요청 실패",
+      "success": {
+        "description": "{{resourceName}}이(가) 성공적으로 삭제되었습니다.",
+        "title": "삭제 {{resourceName}} 요청 제출됨"
+      }
+    },
+    "import": {
+      "error": "가져오기 {{resourceName}} 요청 실패",
+      "success": {
+        "description": "{{count}}개 {{resourceName}}이(가) 성공적으로 가져와졌습니다.",
+        "title": "가져오기 {{resourceName}} 요청 제출됨"
+      }
+    },
+    "update": {
+      "error": "업데이트 {{resourceName}} 요청 실패",
+      "success": {
+        "description": "{{resourceName}}이(가) 성공적으로 업데이트되었습니다.",
+        "title": "업데이트 {{resourceName}} 요청 제출됨"
+      }
+    }
+  },
   "triggered": "트리거됨",
-  "user": "사용자"
+  "tryNumber": "시도 횟수",
+  "user": "사용자",
+  "wrap": {
+    "tooltip": "{{hotkey}}를 눌러 텍스트 줄바꿈 토글",
+    "unwrap": "줄바꿈 해제",
+    "wrap": "줄바꿈"
+  }
 }
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ko/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/ko/components.json
new file mode 100644
index 0000000000000..79c1b7a1ccecd
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/ko/components.json
@@ -0,0 +1,131 @@
+{
+  "backfill": {
+    "affected_one": "1개의 실행이 트리거됩니다.",
+    "affected_other": "{{count}}개의 실행이 트리거됩니다.",
+    "affectedNone": "선택한 조건과 일치하는 실행이 없습니다.",
+    "backwards": "거꾸로 실행",
+    "dateRange": "날짜 범위",
+    "dateRangeFrom": "시작",
+    "dateRangeTo": "종료",
+    "errorStartDateBeforeEndDate": "시작일은 종료일보다 빨라야 합니다.",
+    "maxRuns": "최대 활성 실행 수",
+    "reprocessBehavior": "재처리 동작",
+    "run": "백필 실행",
+    "selectDescription": "이 Dag을(를) 특정 날짜 범위에 대해 실행합니다.",
+    "selectLabel": "백필",
+    "title": "백필 실행",
+    "toaster": {
+      "success": {
+        "description": "백필 작업이 성공적으로 트리거되었습니다.",
+        "title": "백필 생성됨"
+      }
+    },
+    "tooltip": "백필에는 일정이 필요합니다.",
+    "unpause": "트리거 시 {{dag_display_name}} 일시 중지 해제",
+    "validation": {
+      "datesRequired": "데이터 구간 시작일과 종료일이 모두 제공되어야 합니다.",
+      "startBeforeEnd": "데이터 구간 시작일은 데이터 구간 종료일보다 작거나 같아야 합니다."
+    }
+  },
+  "banner": {
+    "backfillInProgress": "백필 진행 중",
+    "cancel": "백필 취소",
+    "pause": "백필 일시 중지",
+    "unpause": "백필 일시 중지 해제"
+  },
+  "clipboard": {
+    "copy": "복사"
+  },
+  "close": "닫기",
+  "configForm": {
+    "advancedOptions": "고급 옵션",
+    "configJson": "구성 JSON",
+    "invalidJson": "잘못된 JSON 형식: {{errorMessage}}"
+  },
+  "dagWarnings": {
+    "error_one": "오류 1개",
+    "errorAndWarning": "오류 1개 및 {{warningText}}",
+    "warning_one": "경고 1개",
+    "warning_other": "경고 {{count}}개"
+  },
+  "durationChart": {
+    "duration": "기간 (초)",
+    "lastDagRun_one": "마지막 Dag 실행",
+    "lastDagRun_other": "마지막 {{count}}개 Dag 실행",
+    "lastTaskInstance_one": "마지막 작업 인스턴스",
+    "lastTaskInstance_other": "마지막 {{count}}개 작업 인스턴스",
+    "queuedDuration": "대기열 대기 시간",
+    "runAfter": "실행 후",
+    "runDuration": "실행 기간"
+  },
+  "fileUpload": {
+    "files_other": "{{count}}개 파일"
+  },
+  "flexibleForm": {
+    "placeholder": "값 선택",
+    "placeholderArray": "각 문자열을 새 줄에 입력하세요.",
+    "placeholderExamples": "입력하여 옵션 보기",
+    "placeholderMulti": "하나 또는 여러 값 선택",
+    "validationErrorArrayNotArray": "값은 배열이어야 합니다.",
+    "validationErrorArrayNotNumbers": "배열의 모든 요소는 숫자여야 합니다.",
+    "validationErrorArrayNotObject": "배열의 모든 요소는 객체여야 합니다.",
+    "validationErrorRequired": "이 필드는 필수입니다."
+  },
+  "graph": {
+    "directionDown": "위에서 아래로",
+    "directionLeft": "오른쪽에서 왼쪽으로",
+    "directionRight": "왼쪽에서 오른쪽으로",
+    "directionUp": "아래에서 위로",
+    "downloadImage": "그래프 이미지 다운로드",
+    "downloadImageError": "그래프 이미지를 다운로드하지 못했습니다.",
+    "downloadImageErrorTitle": "다운로드 실패",
+    "otherDagRuns": "+다른 Dag 실행",
+    "taskCount_one": "{{count}}개 작업",
+    "taskCount_other": "{{count}}개 작업",
+    "taskGroup": "작업 그룹"
+  },
+  "limitedList": "+{{count}}개 더 보기",
+  "logs": {
+    "file": "파일",
+    "location": "{{name}}의 {{line}}번째 줄"
+  },
+  "reparseDag": "Dag 재구문 분석",
+  "sortedAscending": "오름차순 정렬됨",
+  "sortedDescending": "내림차순 정렬됨",
+  "sortedUnsorted": "정렬되지 않음",
+  "taskTries": "작업 시도 횟수",
+  "toggleCardView": "카드 보기 표시",
+  "toggleTableView": "테이블 보기 표시",
+  "triggerDag": {
+    "button": "트리거",
+    "loading": "DAG 정보 로드 중...",
+    "loadingFailed": "DAG 정보를 로드하지 못했습니다. 다시 시도해주세요.",
+    "runIdHelp": "선택 사항 - 제공되지 않으면 생성됩니다.",
+    "selectDescription": "이 Dag을(를) 단일 실행 트리거",
+    "selectLabel": "단일 실행",
+    "title": "Dag 트리거",
+    "toaster": {
+      "success": {
+        "description": "Dag 실행이 성공적으로 트리거되었습니다.",
+        "title": "Dag 실행 트리거됨"
+      }
+    },
+    "unpause": "트리거 시 {{dagDisplayName}} 일시 중지 해제"
+  },
+  "trimText": {
+    "details": "세부 정보",
+    "empty": "비어 있음",
+    "noContent": "내용 없음."
+  },
+  "versionDetails": {
+    "bundleLink": "번들 링크",
+    "bundleName": "번들 이름",
+    "bundleVersion": "번들 버전",
+    "createdAt": "생성 시간",
+    "versionId": "버전 ID"
+  },
+  "versionSelect": {
+    "dagVersion": "Dag 버전",
+    "versionCode": "v{{versionCode}}"
+  }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ko/dag.json b/airflow-core/src/airflow/ui/public/i18n/locales/ko/dag.json
new file mode 100644
index 0000000000000..a8a295e88720d
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/ko/dag.json
@@ -0,0 +1,110 @@
+{
+  "allRuns": "모든 실행",
+  "blockingDeps": {
+    "dependency": "종속성",
+    "reason": "이유",
+    "title": "작업 스케줄링을 막는 종속성"
+  },
+  "code": {
+    "bundleUrl": "번들 URL",
+    "noCode": "코드를 찾을 수 없습니다.",
+    "parsedAt": "구문 분석 시간:"
+  },
+  "extraLinks": "추가 링크",
+  "grid": {
+    "buttons": {
+      "resetToLatest": "최신 버전으로 재설정",
+      "toggleGroup": "그룹 토글"
+    }
+  },
+  "header": {
+    "buttons": {
+      "dagDocs": "Dag 문서"
+    }
+  },
+  "logs": {
+    "noTryNumber": "시도 횟수 없음",
+    "viewInExternal": "{{name}}에서 로그 보기 (시도 {{attempt}})"
+  },
+  "overview": {
+    "buttons": {
+      "failedRun_one": "실패한 실행",
+      "failedRun_other": "실패한 실행",
+      "failedTask_one": "실패한 작업",
+      "failedTask_other": "실패한 작업",
+      "failedTaskInstance_one": "실패한 작업 인스턴스",
+      "failedTaskInstance_other": "실패한 작업 인스턴스"
+    },
+    "charts": {
+      "assetEvent_one": "생성된 에셋 이벤트",
+      "assetEvent_other": "생성된 에셋 이벤트"
+    },
+    "failedLogs": {
+      "title": "최근 실패한 작업 로그",
+      "viewFullLogs": "전체 로그 보기"
+    }
+  },
+  "panel": {
+    "buttons": {
+      "options": "옵션",
+      "showGraph": "그래프 보기",
+      "showGrid": "그리드 보기"
+    },
+    "dagRuns": {
+      "label": "Dag 실행 수"
+    },
+    "dependencies": {
+      "label": "종속성",
+      "options": {
+        "allDagDependencies": "모든 Dag 종속성",
+        "externalConditions": "외부 조건",
+        "onlyTasks": "작업만"
+      },
+      "placeholder": "종속성"
+    },
+    "graphDirection": {
+      "label": "그래프 방향"
+    }
+  },
+  "paramsFailed": "매개변수 로드 실패",
+  "parse": {
+    "toaster": {
+      "error": {
+        "description": "Dag 구문 분석 요청에 실패했습니다. 처리되지 않은 보류 중인 구문 분석 요청이 있을 수 있습니다.",
+        "title": "Dag 재구문 분석 실패"
+      },
+      "success": {
+        "description": "Dag이(가) 곧 재구문 분석될 예정입니다.",
+        "title": "재구문 분석 요청이 성공적으로 제출되었습니다."
+      }
+    }
+  },
+  "tabs": {
+    "assetEvents": "에셋 이벤트",
+    "auditLog": "감사 로그",
+    "backfills": "백필",
+    "code": "코드",
+    "details": "세부 정보",
+    "logs": "로그",
+    "mappedTaskInstances_one": "작업 인스턴스 [{{count}}]",
+    "mappedTaskInstances_other": "작업 인스턴스 [{{count}}]",
+    "overview": "개요",
+    "renderedTemplates": "렌더링된 템플릿",
+    "runs": "실행",
+    "taskInstances": "작업 인스턴스",
+    "tasks": "작업",
+    "xcom": "XCom"
+  },
+  "taskGroups": {
+    "collapseAll": "모든 작업 그룹 접기",
+    "expandAll": "모든 작업 그룹 확장"
+  },
+  "taskLogs": {
+    "allLogLevels": "모든 로그 레벨",
+    "allSources": "모든 소스",
+    "fullscreen": {
+      "button": "전체 화면",
+      "tooltip": "전체 화면을 보려면 {{hotkey}}를 누르세요."
+    }
+  }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ko/dags.json b/airflow-core/src/airflow/ui/public/i18n/locales/ko/dags.json
new file mode 100644
index 0000000000000..665294e4a01de
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/ko/dags.json
@@ -0,0 +1,87 @@
+{
+  "assetSchedule": "{{total}}개 에셋 중 {{count}}개 업데이트됨",
+  "dagActions": {
+    "delete": {
+      "button": "Dag 삭제",
+      "warning": "실행 및 작업를 포함하여 Dag과(와) 관련된 모든 메타데이터가 제거됩니다."
+    }
+  },
+  "filters": {
+    "allRunTypes": "모든 실행 유형",
+    "allStates": "모든 상태",
+    "paused": {
+      "active": "활성",
+      "all": "모두",
+      "paused": "일시 중지됨"
+    }
+  },
+  "ownerLink": "{{owner}}의 소유자 링크",
+  "runAndTaskActions": {
+    "affectedTasks": {
+      "noItemsFound": "작업를 찾을 수 없습니다.",
+      "title": "영향을 받는 작업: {{count}}"
+    },
+    "clear": {
+      "button": "{{type}} 지우기",
+      "buttonTooltip": "Shift+C를 눌러 지우기",
+      "error": "{{type}}을(를) 지우지 못했습니다.",
+      "title": "{{type}} 지우기"
+    },
+    "delete": {
+      "button": "{{type}} 삭제",
+      "dialog": {
+        "resourceName": "{{type}} {{id}}",
+        "title": "{{type}} 삭제",
+        "warning": "{{type}}과(와) 관련된 모든 메타데이터가 제거됩니다."
+      },
+      "error": "{{type}} 삭제 오류",
+      "success": {
+        "description": "{{type}} 삭제 요청이 성공했습니다.",
+        "title": "{{type}} 삭제 완료"
+      }
+    },
+    "markAs": {
+      "button": "{{type}}을(를) ...으로 표시",
+      "buttonTooltip": {
+        "failed": "Shift+F를 눌러 실패로 표시",
+        "success": "Shift+S를 눌러 성공으로 표시"
+      },
+      "title": "{{type}}을(를) {{state}}으로 표시"
+    },
+    "options": {
+      "downstream": "다운스트림",
+      "existingTasks": "기존 작업 지우기",
+      "future": "미래",
+      "onlyFailed": "실패한 작업만 지우기",
+      "past": "과거",
+      "queueNew": "새 작업 대기열에 추가",
+      "upstream": "업스트림"
+    }
+  },
+  "search": {
+    "advanced": "고급 검색",
+    "clear": "검색 지우기",
+    "dags": "Dag 검색",
+    "hotkey": "+K",
+    "tasks": "작업 검색"
+  },
+  "sort": {
+    "displayName": {
+      "asc": "표시 이름으로 정렬 (A-Z)",
+      "desc": "표시 이름으로 정렬 (Z-A)"
+    },
+    "lastRunStartDate": {
+      "asc": "최신 실행 시작 날짜로 정렬 (이전-최신)",
+      "desc": "최신 실행 시작 날짜로 정렬 (최신-이전)"
+    },
+    "lastRunState": {
+      "asc": "최신 실행 상태로 정렬 (A-Z)",
+      "desc": "최신 실행 상태로 정렬 (Z-A)"
+    },
+    "nextDagRun": {
+      "asc": "다음 Dag 실행으로 정렬 (이전-최신)",
+      "desc": "다음 Dag 실행으로 정렬 (최신-이전)"
+    },
+    "placeholder": "정렬 기준"
+  }
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ko/dashboard.json b/airflow-core/src/airflow/ui/public/i18n/locales/ko/dashboard.json
index c8f200c8eafbe..84e3529ca5cbb 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/ko/dashboard.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/ko/dashboard.json
@@ -18,9 +18,9 @@
     "searchByFile": "파일로 검색",
     "timestamp": "타임스탬프"
   },
-  "managePools": "Pools 관리",
-  "noAssetEvents": "자산 이벤트를 찾을 수 없습니다.",
-  "poolSlots": "Pool 슬롯",
+  "managePools": "풀 관리",
+  "noAssetEvents": "에셋 이벤트를 찾을 수 없습니다.",
+  "poolSlots": "풀 슬롯",
   "sortBy": {
     "newestFirst": "최신순",
     "oldestFirst": "오래된 순"

From de894ecf4de89c7307276cde8e861e7a9e2dc28d Mon Sep 17 00:00:00 2001
From: Nitochkin <62333822+Crowiant@users.noreply.github.com>
Date: Fri, 20 Jun 2025 22:23:38 +0200
Subject: [PATCH 012/381] Add new operator for Vertex AI (#51965)

Co-authored-by: Anton Nitochkin <nitochkin@google.com>
---
 .../google/docs/operators/cloud/vertex_ai.rst | 12 +++
 .../cloud/hooks/vertex_ai/generative_model.py | 30 ++++++++
 .../operators/vertex_ai/generative_model.py   | 73 ++++++++++++++++++-
 .../example_vertex_ai_generative_model.py     | 12 +++
 .../vertex_ai/test_generative_model.py        | 29 ++++++++
 5 files changed, 155 insertions(+), 1 deletion(-)

diff --git a/providers/google/docs/operators/cloud/vertex_ai.rst b/providers/google/docs/operators/cloud/vertex_ai.rst
index f870623bee046..646cb4fee51a0 100644
--- a/providers/google/docs/operators/cloud/vertex_ai.rst
+++ b/providers/google/docs/operators/cloud/vertex_ai.rst
@@ -741,6 +741,18 @@ To update cluster you can use
     :start-after: [START how_to_cloud_vertex_ai_update_ray_cluster_operator]
     :end-before: [END how_to_cloud_vertex_ai_update_ray_cluster_operator]
 
+Interacting with experiment run
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+To delete experiment run you can use
+:class:`~airflow.providers.google.cloud.operators.vertex_ai.generative_model.DeleteExperimentRunOperator`.
+
+.. exampleinclude:: /../../google/tests/system/google/cloud/vertex_ai/example_vertex_ai_generative_model.py
+    :language: python
+    :dedent: 4
+    :start-after: [START how_to_cloud_vertex_ai_delete_experiment_run_operator]
+    :end-before: [END how_to_cloud_vertex_ai_delete_experiment_run_operator]
+
 Reference
 ^^^^^^^^^
 
diff --git a/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/generative_model.py b/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/generative_model.py
index d6d5a6cbadc20..f31e131b0a205 100644
--- a/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/generative_model.py
+++ b/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/generative_model.py
@@ -24,6 +24,7 @@
 from typing import TYPE_CHECKING
 
 import vertexai
+from google.cloud import aiplatform
 from vertexai.generative_models import GenerativeModel
 from vertexai.language_models import TextEmbeddingModel
 from vertexai.preview.caching import CachedContent
@@ -359,3 +360,32 @@ def generate_from_cached_content(
         )
 
         return response.text
+
+
+class ExperimentRunHook(GoogleBaseHook):
+    """Use the Vertex AI SDK for Python to create and manage your experiment runs."""
+
+    @GoogleBaseHook.fallback_to_default_project_id
+    def delete_experiment_run(
+        self,
+        experiment_run_name: str,
+        experiment_name: str,
+        location: str,
+        project_id: str = PROVIDE_PROJECT_ID,
+        delete_backing_tensorboard_run: bool = False,
+    ) -> None:
+        """
+        Delete experiment run from the experiment.
+
+        :param project_id: Required. The ID of the Google Cloud project that the service belongs to.
+        :param location: Required. The ID of the Google Cloud location that the service belongs to.
+        :param experiment_name: Required. The name of the evaluation experiment.
+        :param experiment_run_name: Required. The specific run name or ID for this experiment.
+        :param delete_backing_tensorboard_run: Whether to delete the backing Vertex AI TensorBoard run
+            that stores time series metrics for this run.
+        """
+        self.log.info("Next experiment run will be deleted: %s", experiment_run_name)
+        experiment_run = aiplatform.ExperimentRun(
+            run_name=experiment_run_name, experiment=experiment_name, project=project_id, location=location
+        )
+        experiment_run.delete(delete_backing_tensorboard_run=delete_backing_tensorboard_run)
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/generative_model.py b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/generative_model.py
index ec8d7749cd0a7..bf7ffa5475c7f 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/generative_model.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/generative_model.py
@@ -22,7 +22,13 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING
 
-from airflow.providers.google.cloud.hooks.vertex_ai.generative_model import GenerativeModelHook
+from google.api_core import exceptions
+
+from airflow.exceptions import AirflowException
+from airflow.providers.google.cloud.hooks.vertex_ai.generative_model import (
+    ExperimentRunHook,
+    GenerativeModelHook,
+)
 from airflow.providers.google.cloud.operators.cloud_base import GoogleCloudBaseOperator
 
 if TYPE_CHECKING:
@@ -580,3 +586,68 @@ def execute(self, context: Context):
         self.log.info("Cached Content Response: %s", cached_content_text)
 
         return cached_content_text
+
+
+class DeleteExperimentRunOperator(GoogleCloudBaseOperator):
+    """
+    Use the Rapid Evaluation API to evaluate a model.
+
+    :param project_id: Required. The ID of the Google Cloud project that the service belongs to.
+    :param location: Required. The ID of the Google Cloud location that the service belongs to.
+    :param experiment_name: Required. The name of the evaluation experiment.
+    :param experiment_run_name: Required. The specific run name or ID for this experiment.
+    :param gcp_conn_id: The connection ID to use connecting to Google Cloud.
+    :param impersonation_chain: Optional service account to impersonate using short-term
+        credentials, or chained list of accounts required to get the access_token
+        of the last account in the list, which will be impersonated in the request.
+        If set as a string, the account must grant the originating account
+        the Service Account Token Creator IAM role.
+        If set as a sequence, the identities from the list must grant
+        Service Account Token Creator IAM role to the directly preceding identity, with first
+        account from the list granting this role to the originating account (templated).
+    """
+
+    template_fields = (
+        "location",
+        "project_id",
+        "impersonation_chain",
+        "experiment_name",
+        "experiment_run_name",
+    )
+
+    def __init__(
+        self,
+        *,
+        project_id: str,
+        location: str,
+        experiment_name: str,
+        experiment_run_name: str,
+        gcp_conn_id: str = "google_cloud_default",
+        impersonation_chain: str | Sequence[str] | None = None,
+        **kwargs,
+    ) -> None:
+        super().__init__(**kwargs)
+        self.project_id = project_id
+        self.location = location
+        self.experiment_name = experiment_name
+        self.experiment_run_name = experiment_run_name
+        self.gcp_conn_id = gcp_conn_id
+        self.impersonation_chain = impersonation_chain
+
+    def execute(self, context: Context) -> None:
+        self.hook = ExperimentRunHook(
+            gcp_conn_id=self.gcp_conn_id,
+            impersonation_chain=self.impersonation_chain,
+        )
+
+        try:
+            self.hook.delete_experiment_run(
+                project_id=self.project_id,
+                location=self.location,
+                experiment_name=self.experiment_name,
+                experiment_run_name=self.experiment_run_name,
+            )
+        except exceptions.NotFound:
+            raise AirflowException(f"Experiment Run with name {self.experiment_run_name} not found")
+
+        self.log.info("Deleted experiment run: %s", self.experiment_run_name)
diff --git a/providers/google/tests/system/google/cloud/vertex_ai/example_vertex_ai_generative_model.py b/providers/google/tests/system/google/cloud/vertex_ai/example_vertex_ai_generative_model.py
index eb453b2d8544d..413c1f08ec0cd 100644
--- a/providers/google/tests/system/google/cloud/vertex_ai/example_vertex_ai_generative_model.py
+++ b/providers/google/tests/system/google/cloud/vertex_ai/example_vertex_ai_generative_model.py
@@ -33,6 +33,7 @@
 from airflow.providers.google.cloud.operators.vertex_ai.generative_model import (
     CountTokensOperator,
     CreateCachedContentOperator,
+    DeleteExperimentRunOperator,
     GenerateFromCachedContentOperator,
     GenerativeModelGenerateContentOperator,
     RunEvaluationOperator,
@@ -238,6 +239,16 @@ def get_actual_models() -> dict[str, str]:
     )
     # [END how_to_cloud_vertex_ai_run_evaluation_operator]
 
+    # [START how_to_cloud_vertex_ai_delete_experiment_run_operator]
+    delete_experiment_run = DeleteExperimentRunOperator(
+        task_id="delete_experiment_run_task",
+        project_id=PROJECT_ID,
+        location=REGION,
+        experiment_name=EXPERIMENT_NAME,
+        experiment_run_name=EXPERIMENT_RUN_NAME,
+    )
+    # [END how_to_cloud_vertex_ai_delete_experiment_run_operator]
+
     # [START how_to_cloud_vertex_ai_create_cached_content_operator]
     create_cached_content_task = CreateCachedContentOperator(
         task_id="create_cached_content_task",
@@ -264,6 +275,7 @@ def get_actual_models() -> dict[str, str]:
     # [END how_to_cloud_vertex_ai_generate_from_cached_content_operator]
 
     create_cached_content_task >> generate_from_cached_content_task
+    run_evaluation_task >> delete_experiment_run
 
     from tests_common.test_utils.watcher import watcher
 
diff --git a/providers/google/tests/unit/google/cloud/operators/vertex_ai/test_generative_model.py b/providers/google/tests/unit/google/cloud/operators/vertex_ai/test_generative_model.py
index 2683936e7f57e..fbd8fde9c0db3 100644
--- a/providers/google/tests/unit/google/cloud/operators/vertex_ai/test_generative_model.py
+++ b/providers/google/tests/unit/google/cloud/operators/vertex_ai/test_generative_model.py
@@ -30,6 +30,7 @@
 from airflow.providers.google.cloud.operators.vertex_ai.generative_model import (
     CountTokensOperator,
     CreateCachedContentOperator,
+    DeleteExperimentRunOperator,
     GenerateFromCachedContentOperator,
     GenerativeModelGenerateContentOperator,
     RunEvaluationOperator,
@@ -355,3 +356,31 @@ def test_execute(self, mock_hook):
             generation_config=None,
             safety_settings=None,
         )
+
+
+class TestVertexAIDeleteExperimentRunOperator:
+    @mock.patch(VERTEX_AI_PATH.format("generative_model.ExperimentRunHook"))
+    def test_execute(self, mock_hook):
+        test_experiment_name = "test_experiment_name"
+        test_experiment_run_name = "test_experiment_run_name"
+
+        op = DeleteExperimentRunOperator(
+            task_id=TASK_ID,
+            project_id=GCP_PROJECT,
+            location=GCP_LOCATION,
+            experiment_name=test_experiment_name,
+            experiment_run_name=test_experiment_run_name,
+            gcp_conn_id=GCP_CONN_ID,
+            impersonation_chain=IMPERSONATION_CHAIN,
+        )
+        op.execute(context={"ti": mock.MagicMock()})
+        mock_hook.assert_called_once_with(
+            gcp_conn_id=GCP_CONN_ID,
+            impersonation_chain=IMPERSONATION_CHAIN,
+        )
+        mock_hook.return_value.delete_experiment_run.assert_called_once_with(
+            project_id=GCP_PROJECT,
+            location=GCP_LOCATION,
+            experiment_name=test_experiment_name,
+            experiment_run_name=test_experiment_run_name,
+        )

From 66ebdc246e5abd74d31eedc9f8de2fe5ce3828de Mon Sep 17 00:00:00 2001
From: Shahar Epstein <60007259+shahar1@users.noreply.github.com>
Date: Sat, 21 Jun 2025 00:08:54 +0300
Subject: [PATCH 013/381] Create missing locale directory when using
 `--add-missing` in i18n completeness tool (#51976)

---
 dev/i18n/check_translations_completeness.py | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/dev/i18n/check_translations_completeness.py b/dev/i18n/check_translations_completeness.py
index 35d0583b53160..bdfa7cc99f24e 100755
--- a/dev/i18n/check_translations_completeness.py
+++ b/dev/i18n/check_translations_completeness.py
@@ -377,6 +377,9 @@ def count_todos(obj):
     help="Add missing translations for the selected language, prefixed with 'TODO: translate:'.",
 )
 def cli(language: str | None = None, add_missing: bool = False):
+    if add_missing:
+        locale_path = LOCALES_DIR / language
+        locale_path.mkdir(exist_ok=True)
     locale_files = get_locale_files()
     console = Console(force_terminal=True, color_system="auto")
     print_locale_file_table(locale_files, console, language)

From d1974d0ebdc0d8c0f45323d47b02919ccde19a40 Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Sat, 21 Jun 2025 05:45:52 +0530
Subject: [PATCH 014/381] Adding a more realistic case for
 test_connection_uri_recovery (#51963)

---
 airflow-core/tests/unit/models/test_connection.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/airflow-core/tests/unit/models/test_connection.py b/airflow-core/tests/unit/models/test_connection.py
index 97d7b3acec786..62c9377e2b637 100644
--- a/airflow-core/tests/unit/models/test_connection.py
+++ b/airflow-core/tests/unit/models/test_connection.py
@@ -261,7 +261,7 @@ def test_sanitize_conn_id(self, connection, expected_conn_id):
             # same protocol to type
             ("http", "http://host"),
             # different protocol to type
-            ("https", "http://host"),
+            ("spark", "k8s://100.68.0.1:443"),
         ],
     )
     def test_connection_uri_recovery(self, conn_type, host):

From 9c8678363a3fffbb87721307f2f15650fc06e2c4 Mon Sep 17 00:00:00 2001
From: Wei Lee <weilee.rx@gmail.com>
Date: Sat, 21 Jun 2025 14:46:24 +0800
Subject: [PATCH 015/381] fix(dev): guard missing --language if --add-missing
 is used in dev/i18n/check_translations_completeness.py (#51981)

---
 dev/i18n/check_translations_completeness.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/dev/i18n/check_translations_completeness.py b/dev/i18n/check_translations_completeness.py
index bdfa7cc99f24e..9202ca0012880 100755
--- a/dev/i18n/check_translations_completeness.py
+++ b/dev/i18n/check_translations_completeness.py
@@ -378,6 +378,8 @@ def count_todos(obj):
 )
 def cli(language: str | None = None, add_missing: bool = False):
     if add_missing:
+        if not language:
+            raise ValueError("--language is required when passing --add_missing")
         locale_path = LOCALES_DIR / language
         locale_path.mkdir(exist_ok=True)
     locale_files = get_locale_files()

From e5cfae14aefde03102bff41d518272ce954e3296 Mon Sep 17 00:00:00 2001
From: nica <140262534+nzdable@users.noreply.github.com>
Date: Sat, 21 Jun 2025 16:03:09 +0800
Subject: [PATCH 016/381] fix: add space to goto instances in contributors
 quick start (#51985)

* fix: add space to goto instances in contributors quick start

* fix: add space to goto instances in contributors quick start
---
 contributing-docs/03_contributors_quick_start.rst           | 6 +++---
 .../quick-start-ide/contributors_quick_start_codespaces.rst | 2 +-
 .../quick-start-ide/contributors_quick_start_gitpod.rst     | 6 +++---
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/contributing-docs/03_contributors_quick_start.rst b/contributing-docs/03_contributors_quick_start.rst
index a5d4e1858ecab..c10d4d80ab63c 100644
--- a/contributing-docs/03_contributors_quick_start.rst
+++ b/contributing-docs/03_contributors_quick_start.rst
@@ -199,7 +199,7 @@ like system, this command will install all necessary dependencies that should be
 Forking and cloning Project
 ---------------------------
 
-1. Goto |airflow_github| and fork the project
+1. Go to |airflow_github| and fork the project
 
    .. |airflow_github| raw:: html
 
@@ -212,7 +212,7 @@ Forking and cloning Project
             alt="Forking Apache Airflow project">
      </div>
 
-2. Goto your github account's fork of Airflow click on ``Code`` you will find the link to your repo
+2. Go to your github account's fork of Airflow click on ``Code`` you will find the link to your repo
 
    .. raw:: html
 
@@ -768,7 +768,7 @@ Raising Pull Request
 
     <div align="center" style="padding-bottom:10px">
       <img src="images/quick_start/pr1.png"
-           alt="Goto fork and select branches">
+           alt="Go to fork and select branches">
     </div>
 
 2. Click on ``New pull request`` button on branch from which you want to raise a pull request
diff --git a/contributing-docs/quick-start-ide/contributors_quick_start_codespaces.rst b/contributing-docs/quick-start-ide/contributors_quick_start_codespaces.rst
index b6b91e7c13d7e..b8bb5432da1e1 100644
--- a/contributing-docs/quick-start-ide/contributors_quick_start_codespaces.rst
+++ b/contributing-docs/quick-start-ide/contributors_quick_start_codespaces.rst
@@ -19,7 +19,7 @@
 Setup and develop using GitHub Codespaces
 #########################################
 
-1. Goto |airflow_github| and fork the project.
+1. Go to |airflow_github| and fork the project.
 
    .. |airflow_github| raw:: html
 
diff --git a/contributing-docs/quick-start-ide/contributors_quick_start_gitpod.rst b/contributing-docs/quick-start-ide/contributors_quick_start_gitpod.rst
index 66da407e5e583..7ba156fbee99c 100644
--- a/contributing-docs/quick-start-ide/contributors_quick_start_gitpod.rst
+++ b/contributing-docs/quick-start-ide/contributors_quick_start_gitpod.rst
@@ -20,7 +20,7 @@
 Connect your project to Gitpod
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-1. Goto |airflow_github| and fork the project.
+1. Go to |airflow_github| and fork the project.
 
    .. |airflow_github| raw:: html
 
@@ -33,7 +33,7 @@ Connect your project to Gitpod
             alt="Forking Apache Airflow project">
      </div>
 
-2. Goto your github account's fork of airflow, click on ``Code``, and copy the clone link.
+2. Go to your github account's fork of airflow, click on ``Code``, and copy the clone link.
 
    .. raw:: html
 
@@ -42,7 +42,7 @@ Connect your project to Gitpod
              alt="Cloning github fork of Apache airflow">
       </div>
 
-3. Add goto https://gitpod.io/#<copied-url> as shown.
+3. Add go to https://gitpod.io/#<copied-url> as shown.
 
    .. raw:: html
 

From fdd9fc1c536cc8e08cf40174081467a739859237 Mon Sep 17 00:00:00 2001
From: Kyle Nathan Naranjo <63973445+teslakoile@users.noreply.github.com>
Date: Sat, 21 Jun 2025 16:10:07 +0800
Subject: [PATCH 017/381] docs: update vertex AI generative model documentation
 (#51983)

* docs: update vertex AI generative model documentation

* chore: add multimodal to spelling wordlist

---------

Co-authored-by: tm-kyle-naranjo <kyle.n@thinkingmachin.es>
---
 docs/spelling_wordlist.txt                               | 1 +
 .../google/cloud/operators/vertex_ai/generative_model.py | 9 ++++-----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt
index f54012138bcd8..192f79e1397a9 100644
--- a/docs/spelling_wordlist.txt
+++ b/docs/spelling_wordlist.txt
@@ -1154,6 +1154,7 @@ mssql
 mTLS
 mtls
 muldelete
+multimodal
 Multinamespace
 mutex
 mv
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/generative_model.py b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/generative_model.py
index bf7ffa5475c7f..365efed44ff84 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/generative_model.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/generative_model.py
@@ -44,7 +44,7 @@ class TextEmbeddingModelGetEmbeddingsOperator(GoogleCloudBaseOperator):
     :param location: Required. The ID of the Google Cloud location that the
         service belongs to (templated).
     :param prompt: Required. Inputs or queries that a user or a program gives
-        to the Vertex AI PaLM API, in order to elicit a specific response (templated).
+        to the Vertex AI Generative Model API, in order to elicit a specific response (templated).
     :param pretrained_model: Required. Model, optimized for performing text embeddings.
     :param gcp_conn_id: The connection ID to use connecting to Google Cloud.
     :param impersonation_chain: Optional service account to impersonate using short-term
@@ -112,10 +112,9 @@ class GenerativeModelGenerateContentOperator(GoogleCloudBaseOperator):
     :param safety_settings: Optional. Per request settings for blocking unsafe content.
     :param tools: Optional. A list of tools available to the model during evaluation, such as a data store.
     :param system_instruction: Optional. An instruction given to the model to guide its behavior.
-    :param pretrained_model: Required. Model,
-        supporting prompts with text-only input, including natural language
-        tasks, multi-turn text and code chat, and code generation. It can
-        output text and code.
+    :param pretrained_model: Required. The name of the model to use for content generation,
+        which can be a text-only or multimodal model. For example, `gemini-pro` or
+        `gemini-pro-vision`.
     :param gcp_conn_id: The connection ID to use connecting to Google Cloud.
     :param impersonation_chain: Optional service account to impersonate using short-term
         credentials, or chained list of accounts required to get the access_token

From de6d59742341f4663dee02643ee01da8e5d86ff6 Mon Sep 17 00:00:00 2001
From: Domadelfin <63452391+Domadelfin@users.noreply.github.com>
Date: Sat, 21 Jun 2025 17:04:29 +0800
Subject: [PATCH 018/381] Add comma (#51990)

---
 dev/breeze/doc/02_customizing.rst | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dev/breeze/doc/02_customizing.rst b/dev/breeze/doc/02_customizing.rst
index 9acccbd8f3d03..315c749e11e58 100644
--- a/dev/breeze/doc/02_customizing.rst
+++ b/dev/breeze/doc/02_customizing.rst
@@ -158,7 +158,7 @@ By default Breeze starts only Airflow container without any integration enabled.
 that is selected). You can start the additional integrations by passing ``--integration`` flag
 with appropriate integration name when starting Breeze. You can specify several ``--integration`` flags
 to start more than one integration at a time.
-Finally you can specify ``--integration all-testable`` to start all testable integrations and
+Finally, you can specify ``--integration all-testable`` to start all testable integrations and
 ``--integration all`` to enable all integrations.
 
 Once integration is started, it will continue to run until the environment is stopped with

From 98d10bd4e40c4c6f07b4b898f3aa22089106dc2f Mon Sep 17 00:00:00 2001
From: Alex Neal Albinda <alex.albinda9@gmail.com>
Date: Sat, 21 Jun 2025 17:10:21 +0800
Subject: [PATCH 019/381] refactor: remove dag.py params typechecking (#51987)

---
 airflow-core/src/airflow/models/dag.py | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/airflow-core/src/airflow/models/dag.py b/airflow-core/src/airflow/models/dag.py
index 80263b45ef8d2..cc63f5776ffd6 100644
--- a/airflow-core/src/airflow/models/dag.py
+++ b/airflow-core/src/airflow/models/dag.py
@@ -1589,9 +1589,6 @@ def create_dagrun(
 
         # todo: AIP-78 add verification that if run type is backfill then we have a backfill id
 
-        if TYPE_CHECKING:
-            # TODO: Task-SDK: remove this assert
-            assert self.params
         # create a copy of params before validating
         copied_params = copy.deepcopy(self.params)
         if conf:

From 01093ed36e676f5bd06e2a755474253b90d966aa Mon Sep 17 00:00:00 2001
From: Kyle Nathan Naranjo <63973445+teslakoile@users.noreply.github.com>
Date: Sat, 21 Jun 2025 17:11:09 +0800
Subject: [PATCH 020/381] docs: clarify remote logging configuration for Azure
 Blob Storage (#51988)

---
 .../microsoft/azure/docs/logging/index.rst    | 27 ++++++++++++++-----
 1 file changed, 20 insertions(+), 7 deletions(-)

diff --git a/providers/microsoft/azure/docs/logging/index.rst b/providers/microsoft/azure/docs/logging/index.rst
index ca2149ab28f00..16ed9b5c7fd07 100644
--- a/providers/microsoft/azure/docs/logging/index.rst
+++ b/providers/microsoft/azure/docs/logging/index.rst
@@ -37,14 +37,29 @@ example:
     # location. If remote_logging is set to true, see UPDATING.md for additional
     # configuration requirements.
     remote_logging = True
-    remote_base_log_folder = wasb-base-folder/path/to/logs
+    remote_base_log_folder = wasb://path/to/logs
 
     [azure_remote_logging]
     remote_wasb_log_container = my-container
 
-#. Install the provider package with ``pip install apache-airflow-providers-microsoft-azure``
+.. note::
+    If you are using environment variables, the equivalent configuration is:
+
+    .. code-block:: bash
+
+        export AIRFLOW__LOGGING__REMOTE_LOGGING=True
+        export AIRFLOW__LOGGING__REMOTE_LOG_CONN_ID=<your_wasb_connection_id>
+        export AIRFLOW__LOGGING__REMOTE_BASE_LOG_FOLDER=wasb://path/to/logs
+        export AIRFLOW__AZURE_REMOTE_LOGGING__REMOTE_WASB_LOG_CONTAINER=<your_container_name>
+
+    The ``remote_base_log_folder`` must be prefixed with ``wasb://`` for Airflow to use the correct log handler. An incorrect format can cause a misleading ``ResourceNotFoundError``, even if the container exists.
+
+Setup Steps:
+''''''''''''''
+
+#. Install the provider package with ``pip install apache-airflow-providers-microsoft-azure``.
 #. Ensure :ref:`connection <howto/connection:wasb>` is already setup with read and write access to Azure Blob Storage in the ``remote_wasb_log_container`` container and path ``remote_base_log_folder``.
-#. Setup the above configuration values. Please note that the ``remote_base_log_folder`` should start with ``wasb`` to select the correct handler as shown above and the container should already exist.
+#. Setup the above configuration values. Please note that the container should already exist.
 #. Restart the Airflow webserver and scheduler, and trigger (or wait for) a new task execution.
 #. Verify that logs are showing up for newly executed tasks in the container at the specified base path you have defined.
 #. Verify that the Azure Blob Storage viewer is working in the UI. Pull up a newly executed task, and verify that you see something like:
@@ -52,9 +67,7 @@ example:
 .. code-block:: none
 
     *** Found remote logs:
-    ***   * https://my-container.blob.core.windows.net/wasb-base-folder/path/to/logs/dag_id=tutorial_dag/run_id=manual__2023-07-22T22:22:25.891267+00:00/task_id=load/attempt=1.log
-    [2023-07-23, 03:52:47] {taskinstance.py:1144} INFO - Dependencies all met for dep_context=non-requeueable deps ti=<TaskInstance: tutorial_dag.load manual__2023-07-22T22:22:25.891267+00:00 [queued]>
-    [2023-07-23, 03:52:47] {taskinstance.py:1144} INFO - Dependencies all met for dep_context=requeueable deps ti=<TaskInstance: tutorial_dag.load manual__2023-07-22T22:22:25.891267+00:00 [queued]>
-    [2023-07-23, 03:52:47] {taskinstance.py:1346} INFO - Starting attempt 1 of 3
+    ***   * https://my-container.blob.core.windows.net/path/to/logs/dag_id=tutorial_dag/run_id=manual.../task_id=load/attempt=1.log
+    [2023-07-23, 03:52:47] {taskinstance.py:1144} INFO - Dependencies all met...
 
 **Note** that the path to the remote log file is listed in the second line.

From 9dff03b6a1e793ab1bc63bf231e511c2dc45a0da Mon Sep 17 00:00:00 2001
From: Rafa <rafa.paderna@gmail.com>
Date: Sat, 21 Jun 2025 17:12:12 +0800
Subject: [PATCH 021/381] docs: Format consistency for
 variables/directories/flags in `unit_tests.rst` (#51986)

* docs: Format consistency for variables/directories/flags in `unit_tests.rst`

- Added missing backticks (``example``) to variables/flags/directories for improved readability and format consistency
- Updated an incomplete paragraph

* docs: Breakline adjustments for formatting fix in `unit_tests.rst`

* docs: Fix whitespaces in `unit_tests.st`
---
 contributing-docs/testing/unit_tests.rst | 55 ++++++++++++------------
 1 file changed, 27 insertions(+), 28 deletions(-)

diff --git a/contributing-docs/testing/unit_tests.rst b/contributing-docs/testing/unit_tests.rst
index 2e8cb8b8c16cb..698096f702990 100644
--- a/contributing-docs/testing/unit_tests.rst
+++ b/contributing-docs/testing/unit_tests.rst
@@ -353,7 +353,7 @@ For the whole test suite you can run:
 
      breeze testing core-tests --skip-db-tests
 
-For selected test types (example - the tests will run for Providers/API/CLI code only:
+For selected test types (example - the tests will run for ``Providers/API/CLI`` code only:
 
   .. code-block:: bash
 
@@ -386,7 +386,7 @@ There are some tricky test cases that require special handling. Here are some of
 Parameterized tests stability
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-The parameterized tests require stable order of parameters if they are run via xdist - because the parameterized
+The parameterized tests require stable order of parameters if they are run via ``xdist`` - because the parameterized
 tests are distributed among multiple processes and handled separately. In some cases the parameterized tests
 have undefined / random order (or parameters are not hashable - for example set of enums). In such cases
 the xdist execution of the tests will fail and you will get an error mentioning "Known Limitations of xdist".
@@ -415,7 +415,7 @@ do that:
    @pytest.mark.parametrize("status", sorted(ALL_STATES))
    def test_method(): ...
 
-Similarly if your parameters are defined as result of utcnow() or other dynamic method - you should
+Similarly if your parameters are defined as result of ``utcnow()`` or other dynamic method - you should
 avoid that, or assign unique IDs for those parametrized tests. Instead of this:
 
 .. code-block:: python
@@ -521,7 +521,7 @@ the test is marked as DB test:
        def test_from_json(self, input, request_class): ...
 
 
-Instead - this will not break collection. The TaskInstance is not initialized when the module is parsed,
+Instead - this will not break collection. The ``TaskInstance`` is not initialized when the module is parsed,
 it will only be initialized when the test gets executed because we moved initialization of it from
 top level / parametrize to inside the test:
 
@@ -576,7 +576,7 @@ top level / parametrize to inside the test:
 
 Sometimes it is difficult to rewrite the tests, so you might add conditional handling and mock out some
 database-bound methods or objects to avoid hitting the database during test collection. The code below
-will hit the Database while parsing the tests, because this is what Variable.setdefault does when
+will hit the Database while parsing the tests, because this is what ``Variable.setdefault`` does when
 parametrize specification is being parsed - even if test is marked as DB test.
 
 
@@ -617,7 +617,7 @@ parametrize specification is being parsed - even if test is marked as DB test.
     def test_rendered_task_detail_env_secret(patch_app, admin_client, request, env, expected): ...
 
 
-You can make the code conditional and mock out the Variable to avoid hitting the database.
+You can make the code conditional and mock out the ``Variable`` to avoid hitting the database.
 
 
 .. code-block:: python
@@ -724,8 +724,8 @@ this in two clicks.
 
 1. Add Breeze as an "External Tool":
 
-   a. From the settings menu, navigate to Tools > External Tools
-   b. Click the little plus symbol to open the "Create Tool" popup and fill it out:
+   a. From the settings menu, navigate to ``Tools > External Tools``
+   b. Click the little plus symbol to open the ``Create Tool`` popup and fill it out:
 
 .. image:: images/pycharm/pycharm_create_tool.png
     :align: center
@@ -733,20 +733,20 @@ this in two clicks.
 
 2. Add the tool to the context menu:
 
-   a. From the settings menu, navigate to Appearance & Behavior > Menus & Toolbars > Project View Popup Menu
-   b. Click on the list of entries where you would like it to be added.  Right above or below "Project View Popup Menu Run Group" may be a good choice, you can drag and drop this list to rearrange the placement later as desired.
+   a. From the settings menu, navigate to ``Appearance & Behavior > Menus & Toolbars > Project View Popup Menu``
+   b. Click on the list of entries where you would like it to be added.  Right above or below ``Project View Popup Menu Run Group`` may be a good choice, you can drag and drop this list to rearrange the placement later as desired.
    c. Click the little plus at the top of the popup window
-   d. Find your "External Tool" in the new "Choose Actions to Add" popup and click OK.  If you followed the image above, it will be at External Tools > External Tools > Breeze
+   d. Find your ``External Tool`` in the new ``Choose Actions to Add`` popup and click OK.  If you followed the image above, it will be at ``External Tools > External Tools > Breeze``
 
 **Note:** That only adds the option to that one menu.  If you would like to add it to the context menu
 when right-clicking on a tab at the top of the editor, for example, follow the steps above again
-and place it in the "Editor Tab Popup Menu"
+and place it in the ``Editor Tab Popup Menu``
 
 .. image:: images/pycharm/pycharm_add_to_context.png
     :align: center
     :alt: Installing Python extension
 
-3. To run tests in Breeze, right click on the file or directory in the Project View and click Breeze.
+3. To run tests in Breeze, right click on the file or directory in the ``Project View`` and click Breeze.
 
 
 Running Unit Tests from Visual Studio Code
@@ -864,8 +864,8 @@ Once you enter the container, you might run regular pytest commands. For example
 Running Tests using Breeze from the Host
 ........................................
 
-If you wish to only run tests and not to drop into the shell, apply the
-``tests`` command. You can add extra targets and pytest flags after the ``tests`` command. Note that
+If you wish to only run tests and not to drop into the shell, apply the ``tests`` command.
+You can add extra targets and pytest flags after the ``tests`` command. Note that
 often you want to run the tests with a clean/reset db, so usually you want to add ``--db-reset`` flag
 to breeze command. The Breeze image usually will have all the dependencies needed and it
 will ask you to rebuild the image if it is needed and some new dependencies should be installed.
@@ -931,17 +931,16 @@ Running full Airflow unit test suite in parallel
 ................................................
 
 If you run ``breeze testing core-tests --run-in-parallel`` or
-``breeze testing providers-tests --run-in-parallel`` tests run in parallel
-on your development machine - maxing out the number of parallel runs at the number of cores you
-have available in your Docker engine.
+``breeze testing providers-tests --run-in-parallel``, tests are executed in parallel
+on your development machine, using as many cores as are available to the Docker engine.
 
-In case you do not have enough memory available to your Docker (8 GB), the ``Integration``. ``Provider``
-and ``Core`` test type are executed sequentially with cleaning the docker setup in-between. This
-allows to print
+If your Docker environment has limited memory (less than 8 GB), then ``Integration``, ``Provider``,
+and ``Core`` tests are run sequentially, with the Docker setup cleaned between test runs
+to minimize memory usage.
 
-This allows for massive speedup in full test execution. On 8 CPU machine with 16 cores and 64 GB memory
-and fast SSD disk, the whole suite of tests completes in about 5 minutes (!). Same suite of tests takes
-more than 30 minutes on the same machine when tests are run sequentially.
+This approach allows for a massive speedup in full test execution. On a machine with 8 CPUs
+(16 cores), 64 GB of RAM, and a fast SSD, the full suite of tests can complete in about
+5 minutes (!) — compared to more than 30 minutes when run sequentially.
 
 .. note::
 
@@ -952,7 +951,7 @@ more than 30 minutes on the same machine when tests are run sequentially.
   in the ``Docker for Mac`` documentation on how to do it.
 
 You can also limit the parallelism by specifying the maximum number of parallel jobs via
-MAX_PARALLEL_TEST_JOBS variable. If you set it to "1", all the test types will be run sequentially.
+``MAX_PARALLEL_TEST_JOBS`` variable. If you set it to "1", all the test types will be run sequentially.
 
 .. code-block:: bash
 
@@ -1254,7 +1253,7 @@ running the tests from there, after manually downgrading the dependencies:
     cd airflow-core
     uv sync --resolution lowest-direct
 
-or run --force-lowest-dependencies switch directly from the breeze command line:
+or run ``--force-lowest-dependencies`` switch directly from the breeze command line:
 
 .. code-block:: bash
 
@@ -1298,7 +1297,7 @@ manually downgrading dependencies for the provider and running the tests after t
     uv sync --resolution lowest-direct
 
 
-or run --force-lowest-dependencies switch directly from the breeze command line:
+or run ``--force-lowest-dependencies`` switch directly from the breeze command line:
 
 .. code-block:: bash
 
@@ -1421,7 +1420,7 @@ Enable masking secrets in tests
 ...............................
 
 By default masking secrets in test disabled because it might have side effects
-into the other tests which intends to check logging/stdout/stderr values
+into the other tests which intends to check ``logging/stdout/stderr`` values
 
 If you need to test masking secrets in test cases
 you have to apply ``pytest.mark.enable_redact`` to the specific test case, class or module.

From e883909919a29aa3670c578612d1015b87842a7d Mon Sep 17 00:00:00 2001
From: pendoks <89318896+Whiskine@users.noreply.github.com>
Date: Sat, 21 Jun 2025 17:58:40 +0800
Subject: [PATCH 022/381] docs: fix grammar, spelling, and spacing in README
 (#51980)

* docs: fix grammar, spelling, and spacing in README

This commit corrects minor grammatical errors, fixes spelling mistakes, and adjusts inconsistent spacing in the README file. These changes aim to improve clarity and maintain a professional tone. No content or meaning was altered.

* docs: address review comments in README

Applied the suggested changes from the code review.

* docs: ran pre-commit, fixed airflow spelling

* docs: fix formatting issue
---
 docs/README.md | 111 ++++++++++++++++++++++++-------------------------
 1 file changed, 55 insertions(+), 56 deletions(-)

diff --git a/docs/README.md b/docs/README.md
index 9012cb4e8ef71..4aced88a18dbd 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -38,44 +38,44 @@
 # Documentation configuration
 
 This directory used to contain all the documentation files for the project. The documentation has
-been split to separate folders - the documentation is now in the folders in sub-projects that they
+been split into separate folders - the documentation is now in the folders in sub-projects that they
 are referring to.
 
-If you look for the documentation it is stored as follows:
+If you look for the documentation, it is stored as follows:
 
 Documentation in separate distributions:
 
 * `airflow-core/docs` - documentation for Airflow Core
 * `providers/**/docs` - documentation for Providers
-* `chart/docs` - documentation for Helm Chart
+* `chart/docs` - documentation for the Helm Chart
 * `task-sdk/docs` - documentation for Task SDK (new format not yet published)
 * `airflow-ctl/docs` - documentation for Airflow CLI (future)
 
-Documentation for general overview and summaries not connected with any specific distribution:
+Documentation for a general overview and summaries not connected with any specific distribution:
 
 * `docker-stack-docs` - documentation for Docker Stack'
-* `providers-summary-docs` - documentation for provider summary page
+* `providers-summary-docs` - documentation for the provider summary page
 
 # Architecture of documentation for Airflow
 
-Building documentation for Airflow is optimized for speed and for convenience workflows of the release
+Building documentation for Airflow is optimized for speed and for the convenience workflows of the release
 managers and committers who publish and fix the documentation - that's why it's a little complex, as we have
-multiple repositories and multiple sources of the documentation involved.
+multiple repositories and multiple sources of documentation involved.
 
-There are few repositories under `apache` organization which are used to build the documentation for Airflow:
+There are a few repositories under `apache` organization that are used to build the documentation for Airflow:
 
 * `apache-airflow` - the repository with the code and the documentation sources for Airflow distributions,
-   provider distributions, providers summary and docker summary: [apache-airflow](https://github.com/apache/airflow)
-   from here we publish the documentation to S3 bucket where the documentation is hosted.
+   provider distributions, providers' summary, and docker summary: [apache-airflow](https://github.com/apache/airflow).
+   From here, we publish the documentation to an S3 bucket where the documentation is hosted.
 * `airflow-site` - the repository with the website theme and content where we keep sources of the website
-   structure, navigation, theme for the website [airflow-site](https://github.com/apache/airflow). From here
-   we publish the website to the ASF servers so they are publish as the [official website](https://airflow.apache.org)
+   structure, navigation, and theme for the website [airflow-site](https://github.com/apache/airflow-site). From here,
+   we publish the website to the ASF servers so they are published as the [official website](https://airflow.apache.org)
 * `airflow-site-archive` - here we keep the archived historical versions of the generated documentation
    of all the documentation packages that we keep on S3. This repository is automatically synchronized from
-   the S3 buckets and is only used in case we need to perform a bulk update of historical documentation. Here only
-   generated `html`, `css`, `js` and `images` files are kept, no sources of the documentation are kept here.
+   the S3 buckets and is only used in case we need to perform a bulk update of historical documentation. Here, only
+   generated `html`, `css`, `js`, and `images` files are kept; no sources of the documentation are kept here.
 
-We have two S3 buckets where we can publish the documentation generated from `apache-airflow` repository:
+We have two S3 buckets where we can publish the documentation generated from the `apache-airflow` repository:
 
 * `s3://live-docs-airflow-apache-org/docs/` - live, [official documentation](https://airflow.apache.org/docs/)
 * `s3://staging-docs-airflow-apache-org/docs/` - staging documentation [official documentation](https://staging-airflow.apache.org/docs/) TODO: make it work
@@ -93,14 +93,14 @@ differences are:
 
 * The staging bucket is `s3://staging-docs-airflow-apache-org/docs/`
 * The staging website is `https://airflow.staged.apache.org/docs/`
-* The staging site is deployed by merging PR or pushing `staging` branch in the `airflow-site` repository
-  rather than main. The `staging` branch should be periodically rebased to the `main` branch, but while
-  some changes are developed in `staging` it can diverge from `main` branch.
-* Merging into `staging` branch of `airflow-site` repository or pushing `staging` branch
+* The staging site is deployed by merging PR or pushing the `staging` branch in the `airflow-site` repository
+  rather than `main`. The `staging` branch should be periodically rebased to the `main` branch, but while
+  some changes are developed in `staging`, it can diverge from the `main` branch.
+* Merging into the `staging` branch of the `airflow-site` repository or pushing the `staging` branch
   will automatically trigger the build of the website and publish it to the `publish-staging` branch and
   effectively to the staging site.
 
-Documentation of pre-release versions of Airflow distributions should be published to the staging s3
+Documentation of pre-release versions of Airflow distributions should be published to the staging S3
 bucket so that we can test the documentation before we publish it to the `live` bucket.
 
 # Typical workflows
@@ -111,7 +111,7 @@ There are a few typical workflows that we support:
 
 The release manager publishes the documentation using GitHub Actions workflow
 [Publish Docs to S3](https://github.com/apache/airflow/actions/workflows/publish-docs-to-s3.yml).
-The same workflow can be used to publish Airflow, Helm chart and providers documentation.
+The same workflow can be used to publish Airflow, Helm chart, and providers' documentation.
 
 This workflow is used twice:
 
@@ -120,7 +120,7 @@ This workflow is used twice:
 * when final releases of distributions are prepared - the documentation should be published to the `live`
   bucket and the `live` website should be built and published.
 
-When release manager publishes the documentation they choose `auto` destination by default - depending on the
+When the release manager publishes the documentation, they choose `auto` destination by default - depending on the
 tag they use - `staging` will be used to publish from pre-release tag and `live` will be used ot publish
 from the release tag.
 
@@ -134,7 +134,7 @@ and the list of documentation packages to be published. Usually it is:
 * Helm chart: `helm-chart`
 * Providers: `provider_id1 provider_id2` or `all providers` if all providers should be published.
 
-Optionally - specifically if we run `all-providers` and release manager wants to exclude some providers,
+Optionally - specifically if we run `all-providers` and the release manager wants to exclude some providers,
 they can specify documentation packages to exclude. Leaving "no-docs-excluded" will publish all packages
 specified to be published without exclusions.
 
@@ -144,17 +144,17 @@ Example screenshot of the workflow triggered from the GitHub UI:
 ![Publishing airflow or providers](images/publish_airflow.png)
 
 Note that this just publishes the documentation but does not update the "site" with version numbers or
-stable links to providers and airflow - if you release a new documentation version it will be available
-with direct URL (say https://apache.airflow.org/docs/apache-airflow/3.0.1/) but the main site will still
-point to previous version of the documentation as `stable` and the version drop-downs will not be updated.
+stable links to providers and airflow - if you release a new documentation version, it will be available
+with direct URL (say https://apache.airflow.org/docs/apache-airflow/3.0.1/), but the main site will still
+point to the previous version of the documentation as `stable` and the version drop-downs will not be updated.
 
 In order to do it, you need to run the [Build docs](https://github.com/apache/airflow-site/actions/workflows/build.yml)
 workflow in `airflow-site` repository.
 
 For `live` site you should run the workflow in `main` branch. For `staging` site it should be staging branch.
 This will build the website and publish it to the `publish` branch of `airflow-site` repository (for `live`
-site) or `publish-staging` branch, (for `staging` site). The workflow will also update the website with
-including refreshing of the version numbers in the drop-downs and stable links.
+site) or `publish-staging` branch (for `staging` site). The workflow will also update the website,
+including refreshing the version numbers in the drop-downs and stable links.
 
 The `staging` documentation is produced automatically with `staging` watermark added.
 
@@ -164,7 +164,7 @@ This workflow also invalidates cache in Fastly that Apache Software Foundation u
 so you should always run it after you modify the documentation for the website. Other than that Fastly is
 configured with 3600 seconds TTL - which means that changes will propagate to the website in ~1 hour.
 
-Shortly after the workflow succeeds and documentation is published, in live bucket, the `airflow-site-archive`
+Shortly after the workflow succeeds and documentation is published, in the live bucket, the [airflow-site-archive](https://github.com/apache/airflow-site-archive)
 repository is automatically synchronized with the live S3 bucket. TODO: IMPLEMENT THIS, FOR NOW IT HAS
 TO BE MANUALLY SYNCHRONIZED VIA [Sync s3 to GitHub](https://github.com/apache/airflow-site-archive/actions/workflows/s3-to-github.yml)
 workflow in `airflow-site-archive` repository. The `airflow-site-archive` essentially keeps the history of
@@ -182,9 +182,9 @@ manually in the main branch of `airflow-site` repository. The workflow builds th
 `publish` branch of `airflow-site` repository, which in turn gets picked up by the ASF servers and is
 published as the official website. This includes any changes to `.htaccess` of the website.
 
-Such a main build also publishes latest "sphinx-airflow-theme" package to GitHub so that the next build
+Such a main build also publishes the latest "sphinx-airflow-theme" package to GitHub so that the next build
 of documentation can automatically pick it up from there. This means that if you want to make changes to
-`javascript` or `css` that are part of the theme, you need to do it in `ariflow-site` repository and
+`javascript` or `css` that are part of the theme, you need to do it in `airflow-site` repository and
 merge it to `main` branch in order to be able to run the documentation build in `apache-airflow` repository
 and pick up the latest version of the theme.
 
@@ -193,34 +193,33 @@ The version of sphinx theme is fixed in both repositories:
 * https://github.com/apache/airflow-site/blob/main/sphinx_airflow_theme/sphinx_airflow_theme/__init__.py#L21
 * https://github.com/apache/airflow/blob/main/devel-common/pyproject.toml#L77 in "docs" section
 
-In case of bigger changes to the theme, we
-can first iterate on the website and merge a new theme version, and only after that we can switch to the new
-version of the theme.
+In case of bigger changes to the theme, we can first iterate on the website and merge a new theme version,
+and only after that can we switch to the new version of the theme.
 
 
 # Fixing historical documentation
 
-Sometimes we need to update historical documentation (modify generated `html`) - for example when we find
+Sometimes we need to update historical documentation (modify generated `html`) - for example, when we find
 bad links or when we change some of the structure in the documentation. This can be done via the
 `airflow-site-archive` repository. The workflow is as follows:
 
 1. Get the latest version of the documentation from S3 to `airflow-site-archive` repository using
-   `Sync s3 to GitHub` workflow. This will download the latest version of the documentation from S3 to
-   `airflow-site-archive` repository (this should be normally not needed, if automated synchronization works).
+   `Sync S3 to GitHub` workflow. This will download the latest version of the documentation from S3 to
+   `airflow-site-archive` repository (this should normally not be needed, if automated synchronization works).
 2. Make the changes to the documentation in `airflow-site-archive` repository. This can be done using any
-   text editors, scripts etc. Those files are generated as `html` files and are not meant to be regenerated,
+   text editor, script, etc. Those files are generated as `html` files and are not meant to be regenerated,
    they should be modified as `html` files in-place
 3. Commit the changes to `airflow-site-archive` repository and push them to `some` branch of the repository.
 4. Run `Sync GitHub to S3` workflow in `airflow-site-archive` repository. This will upload the modified
-   documentation to S3 bucket.
-5. You can choose, whether to sync the changes to `live` or `staging` bucket. The default is `live`.
-6. By default the workflow will synchronize all documentation modified in single - last commit pushed to
+   documentation to the S3 bucket.
+5. You can choose whether to sync the changes to `live` or `staging` bucket. The default is `live`.
+6. By default, the workflow will synchronize all documentation modified in a single last commit pushed to
    the branch you specified. You can also specify "full_sync" to synchronize all files in the repository.
 7. In case you specify "full_sync", you can also synchronize `all` docs or only selected documentation
    packages (for example `apache-airflow` or `docker-stack` or `amazon` or `helm-chart`) - you can specify
    more than one package separated by  spaces.
 8. After you synchronize the changes to S3, the Sync `S3 to GitHub` workflow will be triggered
-   automatically and the changes will be synchronized to `airflow-site-archive` `main` branch - so there
+   automatically, and the changes will be synchronized to `airflow-site-archive` `main` branch - so there
    is no need to merge your changes to `main` branch of `airflow-site-archive` repository. You can safely
    delete the branch you created in step 3.
 
@@ -229,22 +228,22 @@ bad links or when we change some of the structure in the documentation. This can
 
 ## Manually publishing documentation directly to S3
 
-The regular publishing workflows involve running Github Actions workflow and they cover majority of cases,
-however sometimes some manual updates and cherry-picks are needed, when we discover problems with the
-publishing and doc building code - for example when we find that we need to fix extensions to sphinx.
+The regular publishing workflows involve running a GitHub Actions workflow, and they cover the majority of cases.
+However, sometimes, some manual updates and cherry-picks are needed, when we discover problems with the
+publishing and doc building code - for example, when we find that we need to fix extensions to sphinx.
 
-In such case, release manager or a committer can build and publish documentation locally - providing that
+In such a case, the release manager or a committer can build and publish documentation locally - providing that
 they configure AWS credentials to be able to upload files to S3. You can ask in
 the #internal-airflow-ci-cd channel on Airflow Slack to get your AWS credentials configured.
 
 You can checkout locally a version of airflow repo that you need and apply any cherry-picks you need before
 running publishing.
 
-This is done using breeze. You also need to have aws CLI installed and configured credentials to be able
+This is done using breeze. You also need to have AWS CLI installed and configured credentials to be able
 to upload files to S3. You can get credentials from one of the admins of Airflow's AWS account. The
 region to set for AWS is `us-east-2`.
 
-Note that it is advise to add `--dry-run` if you just want to see what would happen. Also you can use
+Note that it is advised to add `--dry-run` if you just want to see what would happen. Also, you can use
 the `s3://staging-docs-airflow-apache-org/docs/` bucket to test the publishing using staging site.
 
 ```bash
@@ -258,18 +257,18 @@ breeze release-management publish-docs-to-s3 --source-dir-path /tmp/airflow-site
 
 ## Manually publishing documentation via `apache-airflow-site-archive` repo
 
-If you do not have S3 credentials and want to be careful about publishing the documentation you can also
+If you do not have S3 credentials and want to be careful about publishing the documentation, you can also
 use publishing via `apache-airflow-site-archive` repository. This is a little more complex, but it allows
 you to publish documentation without having S3 credentials.
 
 The process is as follows:
 
 1. Run `Sync s3 to GitHub` workflow in `apache-airflow-site-archive` repository. This will download the
-   latest version of the documentation from S3 to `airflow-site-archive` repository (this should be normally
-   not needed, if automated synchronization works).
-2. Checkout `apache-airflow-site-archive` repository and create a branch for your changes.
-3. Build documentation locally in `apache-airflow` repo with any cherry-picks and modifications you need and
-   publish the docs to the checked out `airflow-site-archive` branch
+   latest version of the documentation from S3 to `airflow-site-archive` repository (this should normally not
+   be needed, if automated synchronization works).
+2. Checkout the `apache-airflow-site-archive` repository and create a branch for your changes.
+3. Build documentation locally in `apache-airflow` repo with any cherry-picks and modifications you need, and
+   publish the docs to the checked out `airflow-site-archive` branch.
 
 ```bash
 breeze build-docs "<package_id1>" "<package_id2>" --docs-only
@@ -279,8 +278,8 @@ breeze release-management publish-docs --override-versioned --airflow-site-direc
 4. Commit the changes to `apache-airflow-site-archive` repository and push them to `some` branch of the
    repository.
 5. Run `Sync GitHub to S3` workflow in `apache-airflow-site-archive` repository. This will upload the modified
-   documentation to S3 bucket. You can choose, whether to sync the changes to `live` or `staging` bucket.
-   The default is `live`. You can also specify which folders to sync - by default all modified folders are synced.
+   documentation to S3 bucket. You can choose whether to sync the changes to `live` or `staging` bucket.
+   The default is `live`. You can also specify which folders to sync - by default, all modified folders are synced.
 6. After you synchronize the changes to S3, the Sync `S3 to GitHub` workflow will be triggered
    automatically and the changes will be synchronized to `airflow-site-archive` `main` branch - so there
    is no need to merge your changes to `main` branch of `airflow-site-archive` repository. You can safely

From 32e1f2e3af302231188c774dfb08f26ecd142505 Mon Sep 17 00:00:00 2001
From: Satish Chinthanippu <satish.chinthanippu@teradata.com>
Date: Sat, 21 Jun 2025 03:06:11 -0700
Subject: [PATCH 023/381] Add BteqOperator for Executing Teradata BTEQ Scripts
 in Airflow (#51807)

* Add BteqOperator for Executing Teradata BTEQ Scripts in Airflow (#58)

BTEQ (Basic Teradata Query) is a command-line utility provided by Teradata for interacting with Teradata databases. The BteqOperator is designed to provide flexible and robust execution of Teradata SQL Statements and BTEQ script/SQL file using the BTEQ command-line utility within Airflow DAGs

* system test failure fixed

* unit tests issues fixed

* unit tests issues fixed

* As per airflow recommendation, removed usage of Caplog

* airflow workflow issue fixed

* Documentation is improved

---------

Co-authored-by: Satish Ch <satishchinthanippu@gmail.com>
---
 docs/spelling_wordlist.txt                    |   1 +
 providers/teradata/docs/operators/bteq.rst    | 264 +++++++++++++
 providers/teradata/provider.yaml              |   9 +
 providers/teradata/pyproject.toml             |   4 +
 .../providers/teradata/get_provider_info.py   |   7 +-
 .../airflow/providers/teradata/hooks/bteq.py  | 325 ++++++++++++++++
 .../airflow/providers/teradata/hooks/ttu.py   |  93 +++++
 .../providers/teradata/operators/bteq.py      | 284 ++++++++++++++
 .../providers/teradata/utils/bteq_util.py     | 182 +++++++++
 .../teradata/utils/encryption_utils.py        |  75 ++++
 .../tests/system/teradata/example_bteq.py     | 272 +++++++++++++
 .../system/teradata/example_remote_bteq.py    | 272 +++++++++++++
 .../teradata/tests/system/teradata/script     |  15 +
 .../tests/system/teradata/script.bteq         |  15 +
 .../teradata/tests/system/teradata/script.sql |  29 ++
 .../tests/system/teradata/script_utf16.bteq   | Bin 0 -> 980 bytes
 .../tests/unit/teradata/hooks/test_bteq.py    | 364 ++++++++++++++++++
 .../tests/unit/teradata/hooks/test_ttu.py     | 136 +++++++
 .../unit/teradata/operators/test_bteq.py      | 288 ++++++++++++++
 .../unit/teradata/utils/test_bteq_util.py     | 187 +++++++++
 .../teradata/utils/test_encryption_utils.py   | 108 ++++++
 21 files changed, 2928 insertions(+), 2 deletions(-)
 create mode 100644 providers/teradata/docs/operators/bteq.rst
 create mode 100644 providers/teradata/src/airflow/providers/teradata/hooks/bteq.py
 create mode 100644 providers/teradata/src/airflow/providers/teradata/hooks/ttu.py
 create mode 100644 providers/teradata/src/airflow/providers/teradata/operators/bteq.py
 create mode 100644 providers/teradata/src/airflow/providers/teradata/utils/bteq_util.py
 create mode 100644 providers/teradata/src/airflow/providers/teradata/utils/encryption_utils.py
 create mode 100644 providers/teradata/tests/system/teradata/example_bteq.py
 create mode 100644 providers/teradata/tests/system/teradata/example_remote_bteq.py
 create mode 100644 providers/teradata/tests/system/teradata/script
 create mode 100644 providers/teradata/tests/system/teradata/script.bteq
 create mode 100644 providers/teradata/tests/system/teradata/script.sql
 create mode 100644 providers/teradata/tests/system/teradata/script_utf16.bteq
 create mode 100644 providers/teradata/tests/unit/teradata/hooks/test_bteq.py
 create mode 100644 providers/teradata/tests/unit/teradata/hooks/test_ttu.py
 create mode 100644 providers/teradata/tests/unit/teradata/operators/test_bteq.py
 create mode 100644 providers/teradata/tests/unit/teradata/utils/test_bteq_util.py
 create mode 100644 providers/teradata/tests/unit/teradata/utils/test_encryption_utils.py

diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt
index 192f79e1397a9..36cdf13b293fa 100644
--- a/docs/spelling_wordlist.txt
+++ b/docs/spelling_wordlist.txt
@@ -215,6 +215,7 @@ botocore
 BounceX
 Bq
 bq
+bteq
 bugfix
 bugfixes
 buildType
diff --git a/providers/teradata/docs/operators/bteq.rst b/providers/teradata/docs/operators/bteq.rst
new file mode 100644
index 0000000000000..2424aa9855e1f
--- /dev/null
+++ b/providers/teradata/docs/operators/bteq.rst
@@ -0,0 +1,264 @@
+ .. Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+ ..   http://www.apache.org/licenses/LICENSE-2.0
+
+ .. Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+.. _howto/operator:BteqOperator:
+
+BteqOperator
+============
+
+The :class:`~airflow.providers.teradata.operators.bteq.BteqOperator` enables execution of SQL statements or BTEQ (Basic Teradata Query) scripts using the Teradata BTEQ utility, which can be installed either locally or accessed remotely via SSH.
+
+This is useful for executing administrative operations, batch queries, or ETL tasks in Teradata environments using the Teradata BTEQ utility.
+
+.. note::
+
+   This operator requires the Teradata Tools and Utilities (TTU) including the ``bteq`` binary to be installed
+   and accessible via the system's ``PATH`` (either locally or on the remote SSH host).
+
+Use the ``BteqOperator`` when you want to:
+
+- Run parameterized or templated SQL/BTEQ scripts
+- Connect securely to Teradata with Airflow connections
+- Execute queries via SSH on remote systems with BTEQ installed
+
+Prerequisite
+------------
+
+Make sure your Teradata Airflow connection is defined with the required fields:
+
+- ``host``
+- ``login``
+- ``password``
+- Optional: ``database``, etc.
+
+You can define a remote host with a separate SSH connection using the ``ssh_conn_id``.
+
+.. note::
+
+   For improved security, it is **highly recommended** to use
+   **private key-based SSH authentication** (SSH key pairs) instead of username/password
+   for the SSH connection.
+
+   This avoids password exposure, enables seamless automated execution, and enhances security.
+
+   See the Airflow SSH Connection documentation for details on configuring SSH keys:
+   https://airflow.apache.org/docs/apache-airflow/stable/howto/connection/ssh.html
+
+
+To execute arbitrary SQL or BTEQ commands in a Teradata database, use the
+:class:`~airflow.providers.teradata.operators.bteq.BteqOperator`.
+
+Common Database Operations with BteqOperator when BTEQ is installed on local machine
+-------------------------------------------------------------------------------------
+
+Creating a Teradata database table
+----------------------------------
+
+You can use the BteqOperator to create tables in a Teradata database. The following example demonstrates how to create a simple employee table:
+
+.. exampleinclude:: /../../teradata/tests/system/teradata/example_bteq.py
+    :language: python
+    :dedent: 4
+    :start-after: [START bteq_operator_howto_guide_create_table]
+    :end-before: [END bteq_operator_howto_guide_create_table]
+
+The BTEQ script within this operator handles the table creation, including defining columns, data types, and constraints.
+
+
+Inserting data into a Teradata database table
+---------------------------------------------
+
+The following example demonstrates how to populate the ``my_employees`` table with sample employee records:
+
+.. exampleinclude:: /../../teradata/tests/system/teradata/example_bteq.py
+    :language: python
+    :dedent: 4
+    :start-after: [START bteq_operator_howto_guide_populate_table]
+    :end-before: [END bteq_operator_howto_guide_populate_table]
+
+This BTEQ script inserts multiple rows into the table in a single operation, making it efficient for batch data loading.
+
+
+Exporting data from a Teradata database table to a file
+-------------------------------------------------------
+
+The BteqOperator makes it straightforward to export query results to a file. This capability is valuable for data extraction, backups, and transferring data between systems. The following example demonstrates how to query the employee table and export the results:
+
+.. exampleinclude:: /../../teradata/tests/system/teradata/example_bteq.py
+    :language: python
+    :dedent: 4
+    :start-after: [START bteq_operator_howto_guide_export_data_to_a_file]
+    :end-before: [END bteq_operator_howto_guide_export_data_to_a_file]
+
+The BTEQ script above handles the data export with options for formatting, file location specification, and error handling during the export process.
+
+
+Fetching and processing records from your Teradata database
+-----------------------------------------------------------
+
+You can use BteqOperator to query and retrieve data from your Teradata tables. The following example demonstrates
+how to fetch specific records from the employee table with filtering and formatting:
+
+.. exampleinclude:: /../../teradata/tests/system/teradata/example_bteq.py
+    :language: python
+    :dedent: 4
+    :start-after: [START bteq_operator_howto_guide_get_it_employees]
+    :end-before: [END bteq_operator_howto_guide_get_it_employees]
+
+Executing a BTEQ script with the BteqOperator
+---------------------------------------------
+
+You can use BteqOperator to execute a BTEQ script directly. This is useful for running complex queries or scripts that require multiple SQL statements or specific BTEQ commands.
+
+.. exampleinclude:: /../../teradata/tests/system/teradata/example_bteq.py
+    :language: python
+    :dedent: 4
+    :start-after: [START bteq_operator_howto_guide_bteq_file_input]
+    :end-before: [END bteq_operator_howto_guide_bteq_file_input]
+
+
+Common Database Operations with BteqOperator when BTEQ is installed on remote machine
+-------------------------------------------------------------------------------------
+
+Make sure SSH connection is defined with the required fields to connect to remote machine:
+
+- ``remote_host``
+- ``username``
+- ``password``
+- Optional: ``key_file``, ``private_key``, ``conn_timeout``, etc.
+
+Creating a Teradata database table
+----------------------------------
+
+You can use the BteqOperator to create tables in a Teradata database. The following example demonstrates how to create a simple employee table:
+
+.. exampleinclude:: /../../teradata/tests/system/teradata/example_remote_bteq.py
+    :language: python
+    :dedent: 4
+    :start-after: [START bteq_operator_howto_guide_create_table]
+    :end-before: [END bteq_operator_howto_guide_create_table]
+
+The BTEQ script within this operator handles the table creation, including defining columns, data types, and constraints.
+
+
+Inserting data into a Teradata database table
+---------------------------------------------
+
+The following example demonstrates how to populate the ``my_employees`` table with sample employee records:
+
+.. exampleinclude:: /../../teradata/tests/system/teradata/example_remote_bteq.py
+    :language: python
+    :dedent: 4
+    :start-after: [START bteq_operator_howto_guide_populate_table]
+    :end-before: [END bteq_operator_howto_guide_populate_table]
+
+This BTEQ script inserts multiple rows into the table in a single operation, making it efficient for batch data loading.
+
+
+Exporting data from a Teradata database table to a file
+-------------------------------------------------------
+
+The BteqOperator makes it straightforward to export query results to a file. This capability is valuable for data extraction, backups, and transferring data between systems. The following example demonstrates how to query the employee table and export the results:
+
+.. exampleinclude:: /../../teradata/tests/system/teradata/example_remote_bteq.py
+    :language: python
+    :dedent: 4
+    :start-after: [START bteq_operator_howto_guide_export_data_to_a_file]
+    :end-before: [END bteq_operator_howto_guide_export_data_to_a_file]
+
+The BTEQ script above handles the data export with options for formatting, file location specification, and error handling during the export process.
+
+
+Fetching and processing records from your Teradata database
+-----------------------------------------------------------
+
+You can use BteqOperator to query and retrieve data from your Teradata tables. The following example demonstrates
+how to fetch specific records from the employee table with filtering and formatting:
+
+.. exampleinclude:: /../../teradata/tests/system/teradata/example_remote_bteq.py
+    :language: python
+    :dedent: 4
+    :start-after: [START bteq_operator_howto_guide_get_it_employees]
+    :end-before: [END bteq_operator_howto_guide_get_it_employees]
+
+This example shows how to:
+- Execute a SELECT query with WHERE clause filtering
+- Format the output for better readability
+- Process the result set within the BTEQ script
+- Handle empty result sets appropriately
+
+Executing a BTEQ script with the BteqOperator when BTEQ script file is on remote machine
+----------------------------------------------------------------------------------------
+
+You can use BteqOperator to execute a BTEQ script directly when file is on remote machine.
+
+.. exampleinclude:: /../../teradata/tests/system/teradata/example_remote_bteq.py
+    :language: python
+    :dedent: 4
+    :start-after: [START bteq_operator_howto_guide_bteq_file_input]
+    :end-before: [END bteq_operator_howto_guide_bteq_file_input]
+
+
+Using Conditional Logic with BteqOperator
+-----------------------------------------
+
+The BteqOperator supports executing conditional logic within your BTEQ scripts. This powerful feature lets you create dynamic, decision-based workflows that respond to data conditions or processing results:
+
+.. exampleinclude:: /../../teradata/tests/system/teradata/example_bteq.py
+    :language: python
+    :dedent: 4
+    :start-after: [START bteq_operator_howto_guide_conditional_logic]
+    :end-before: [END bteq_operator_howto_guide_conditional_logic]
+
+Conditional execution enables more intelligent data pipelines that can adapt to different scenarios without requiring separate DAG branches.
+
+
+Error Handling in BTEQ Scripts
+------------------------------
+
+The BteqOperator allows you to implement comprehensive error handling within your BTEQ scripts:
+
+.. exampleinclude:: /../../teradata/tests/system/teradata/example_bteq.py
+    :language: python
+    :dedent: 4
+    :start-after: [START bteq_operator_howto_guide_error_handling]
+    :end-before: [END bteq_operator_howto_guide_error_handling]
+
+This approach lets you catch and respond to errors at the BTEQ script level, providing more granular control over error conditions and enabling appropriate recovery actions.
+
+
+Dropping a Teradata Database Table
+----------------------------------
+
+When your workflow completes or requires cleanup, you can use the BteqOperator to drop database objects. The following example demonstrates how to drop the ``my_employees`` table:
+
+.. exampleinclude:: /../../teradata/tests/system/teradata/example_bteq.py
+    :language: python
+    :dedent: 4
+    :start-after: [START bteq_operator_howto_guide_drop_table]
+    :end-before: [END bteq_operator_howto_guide_drop_table]
+
+
+The complete Teradata Operator DAG
+----------------------------------
+
+When we put everything together, our DAG should look like this:
+
+.. exampleinclude:: /../../teradata/tests/system/teradata/example_bteq.py
+    :language: python
+    :start-after: [START bteq_operator_howto_guide]
+    :end-before: [END bteq_operator_howto_guide]
diff --git a/providers/teradata/provider.yaml b/providers/teradata/provider.yaml
index 153e825ccd7ab..01563d9d0dee3 100644
--- a/providers/teradata/provider.yaml
+++ b/providers/teradata/provider.yaml
@@ -57,11 +57,20 @@ operators:
     python-modules:
       - airflow.providers.teradata.operators.teradata
       - airflow.providers.teradata.operators.teradata_compute_cluster
+  - integration-name: Bteq
+    python-modules:
+      - airflow.providers.teradata.operators.bteq
 
 hooks:
   - integration-name: Teradata
     python-modules:
       - airflow.providers.teradata.hooks.teradata
+  - integration-name: Ttu
+    python-modules:
+      - airflow.providers.teradata.hooks.ttu
+  - integration-name: Bteq
+    python-modules:
+      - airflow.providers.teradata.hooks.bteq
 
 transfers:
   - source-integration-name: Teradata
diff --git a/providers/teradata/pyproject.toml b/providers/teradata/pyproject.toml
index d2dbb359b3090..3866c56d0a64a 100644
--- a/providers/teradata/pyproject.toml
+++ b/providers/teradata/pyproject.toml
@@ -72,6 +72,9 @@ dependencies = [
 "amazon" = [
     "apache-airflow-providers-amazon",
 ]
+"ssh" = [
+    "apache-airflow-providers-ssh"
+]
 
 [dependency-groups]
 dev = [
@@ -81,6 +84,7 @@ dev = [
     "apache-airflow-providers-amazon",
     "apache-airflow-providers-common-sql",
     "apache-airflow-providers-microsoft-azure",
+    "apache-airflow-providers-ssh",
     # Additional devel dependencies (do not remove this line and add extra development dependencies)
 ]
 
diff --git a/providers/teradata/src/airflow/providers/teradata/get_provider_info.py b/providers/teradata/src/airflow/providers/teradata/get_provider_info.py
index 7780d600f0531..f9b935fa551ff 100644
--- a/providers/teradata/src/airflow/providers/teradata/get_provider_info.py
+++ b/providers/teradata/src/airflow/providers/teradata/get_provider_info.py
@@ -45,10 +45,13 @@ def get_provider_info():
                     "airflow.providers.teradata.operators.teradata",
                     "airflow.providers.teradata.operators.teradata_compute_cluster",
                 ],
-            }
+            },
+            {"integration-name": "Bteq", "python-modules": ["airflow.providers.teradata.operators.bteq"]},
         ],
         "hooks": [
-            {"integration-name": "Teradata", "python-modules": ["airflow.providers.teradata.hooks.teradata"]}
+            {"integration-name": "Teradata", "python-modules": ["airflow.providers.teradata.hooks.teradata"]},
+            {"integration-name": "Ttu", "python-modules": ["airflow.providers.teradata.hooks.ttu"]},
+            {"integration-name": "Bteq", "python-modules": ["airflow.providers.teradata.hooks.bteq"]},
         ],
         "transfers": [
             {
diff --git a/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py b/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py
new file mode 100644
index 0000000000000..89aac594ddb18
--- /dev/null
+++ b/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py
@@ -0,0 +1,325 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+import os
+import socket
+import subprocess
+import tempfile
+from contextlib import contextmanager
+
+from paramiko import SSHException
+
+from airflow.exceptions import AirflowException
+from airflow.providers.ssh.hooks.ssh import SSHHook
+from airflow.providers.teradata.hooks.ttu import TtuHook
+from airflow.providers.teradata.utils.bteq_util import (
+    prepare_bteq_command_for_local_execution,
+    prepare_bteq_command_for_remote_execution,
+    transfer_file_sftp,
+    verify_bteq_installed,
+    verify_bteq_installed_remote,
+)
+from airflow.providers.teradata.utils.encryption_utils import (
+    decrypt_remote_file_to_string,
+    generate_encrypted_file_with_openssl,
+    generate_random_password,
+)
+
+
+class BteqHook(TtuHook):
+    """
+    Hook for executing BTEQ (Basic Teradata Query) scripts.
+
+    This hook provides functionality to execute BTEQ scripts either locally or remotely via SSH.
+    It extends the `TtuHook` and integrates with Airflow's SSHHook for remote execution.
+
+    The BTEQ scripts are used to interact with Teradata databases, allowing users to perform
+    operations such as querying, data manipulation, and administrative tasks.
+
+    Features:
+    - Supports both local and remote execution of BTEQ scripts.
+    - Handles connection details, script preparation, and execution.
+    - Provides robust error handling and logging for debugging.
+    - Allows configuration of session parameters like output width and encoding.
+
+    .. seealso::
+        - :ref:`hook API connection <howto/connection:teradata>`
+
+    :param bteq_script: The BTEQ script to be executed. This can be a string containing the BTEQ commands.
+    :param remote_working_dir: Temporary directory location on the remote host (via SSH) where the BTEQ script will be transferred and executed. Defaults to `/tmp` if not specified. This is only applicable when `ssh_conn_id` is provided.
+    :param bteq_script_encoding: Character encoding for the BTEQ script file. Defaults to ASCII if not specified.
+    :param timeout: Timeout (in seconds) for executing the BTEQ command. Default is 600 seconds (10 minutes).
+    :param timeout_rc: Return code to use if the BTEQ execution fails due to a timeout. To allow DAG execution to continue after a timeout, include this value in `bteq_quit_rc`. If not specified, a timeout will raise an exception and stop the DAG.
+    :param bteq_session_encoding: Character encoding for the BTEQ session. Defaults to UTF-8 if not specified.
+    :param bteq_quit_rc: Accepts a single integer, list, or tuple of return codes. Specifies which BTEQ return codes should be treated as successful, allowing subsequent tasks to continue execution.
+    """
+
+    def __init__(self, teradata_conn_id: str, ssh_conn_id: str | None = None, *args, **kwargs):
+        super().__init__(teradata_conn_id, *args, **kwargs)
+        self.ssh_conn_id = ssh_conn_id
+        self.ssh_hook = SSHHook(ssh_conn_id=ssh_conn_id) if ssh_conn_id else None
+
+    def execute_bteq_script(
+        self,
+        bteq_script: str,
+        remote_working_dir: str | None,
+        bteq_script_encoding: str | None,
+        timeout: int,
+        timeout_rc: int | None,
+        bteq_session_encoding: str | None,
+        bteq_quit_rc: int | list[int] | tuple[int, ...] | None,
+        temp_file_read_encoding: str | None,
+    ) -> int | None:
+        """Execute the BTEQ script either in local machine or on remote host based on ssh_conn_id."""
+        # Remote execution
+        if self.ssh_hook:
+            # Write script to local temp file
+            # Encrypt the file locally
+            return self.execute_bteq_script_at_remote(
+                bteq_script,
+                remote_working_dir,
+                bteq_script_encoding,
+                timeout,
+                timeout_rc,
+                bteq_session_encoding,
+                bteq_quit_rc,
+                temp_file_read_encoding,
+            )
+        return self.execute_bteq_script_at_local(
+            bteq_script,
+            bteq_script_encoding,
+            timeout,
+            timeout_rc,
+            bteq_quit_rc,
+            bteq_session_encoding,
+            temp_file_read_encoding,
+        )
+
+    def execute_bteq_script_at_remote(
+        self,
+        bteq_script: str,
+        remote_working_dir: str | None,
+        bteq_script_encoding: str | None,
+        timeout: int,
+        timeout_rc: int | None,
+        bteq_session_encoding: str | None,
+        bteq_quit_rc: int | list[int] | tuple[int, ...] | None,
+        temp_file_read_encoding: str | None,
+    ) -> int | None:
+        with (
+            self.preferred_temp_directory() as tmp_dir,
+        ):
+            file_path = os.path.join(tmp_dir, "bteq_script.txt")
+            with open(file_path, "w", encoding=str(temp_file_read_encoding or "UTF-8")) as f:
+                f.write(bteq_script)
+            return self._transfer_to_and_execute_bteq_on_remote(
+                file_path,
+                remote_working_dir,
+                bteq_script_encoding,
+                timeout,
+                timeout_rc,
+                bteq_quit_rc,
+                bteq_session_encoding,
+                tmp_dir,
+            )
+
+    def _transfer_to_and_execute_bteq_on_remote(
+        self,
+        file_path: str,
+        remote_working_dir: str | None,
+        bteq_script_encoding: str | None,
+        timeout: int,
+        timeout_rc: int | None,
+        bteq_quit_rc: int | list[int] | tuple[int, ...] | None,
+        bteq_session_encoding: str | None,
+        tmp_dir: str,
+    ) -> int | None:
+        encrypted_file_path = None
+        remote_encrypted_path = None
+        try:
+            if self.ssh_hook and self.ssh_hook.get_conn():
+                with self.ssh_hook.get_conn() as ssh_client:
+                    if ssh_client is None:
+                        raise AirflowException("Failed to establish SSH connection. `ssh_client` is None.")
+                    verify_bteq_installed_remote(ssh_client)
+                    password = generate_random_password()  # Encryption/Decryption password
+                    encrypted_file_path = os.path.join(tmp_dir, "bteq_script.enc")
+                    generate_encrypted_file_with_openssl(file_path, password, encrypted_file_path)
+                    remote_encrypted_path = os.path.join(remote_working_dir or "", "bteq_script.enc")
+
+                    transfer_file_sftp(ssh_client, encrypted_file_path, remote_encrypted_path)
+
+                    bteq_command_str = prepare_bteq_command_for_remote_execution(
+                        timeout=timeout,
+                        bteq_script_encoding=bteq_script_encoding or "",
+                        bteq_session_encoding=bteq_session_encoding or "",
+                        timeout_rc=timeout_rc or -1,
+                    )
+
+                    exit_status, stdout, stderr = decrypt_remote_file_to_string(
+                        ssh_client,
+                        remote_encrypted_path,
+                        password,
+                        bteq_command_str,
+                    )
+
+                    failure_message = None
+                    password = None  # Clear sensitive data
+
+                    if "Failure" in stderr or "Error" in stderr:
+                        failure_message = stderr
+                    # Raising an exception if there is any failure in bteq and also user wants to fail the
+                    # task otherwise just log the error message as warning to not fail the task.
+                    if (
+                        failure_message
+                        and exit_status != 0
+                        and exit_status
+                        not in (
+                            bteq_quit_rc
+                            if isinstance(bteq_quit_rc, (list, tuple))
+                            else [bteq_quit_rc if bteq_quit_rc is not None else 0]
+                        )
+                    ):
+                        raise AirflowException(f"BTEQ task failed with error: {failure_message}")
+                    if failure_message:
+                        self.log.warning(failure_message)
+                    return exit_status
+            else:
+                raise AirflowException("SSH connection is not established. `ssh_hook` is None or invalid.")
+        except (OSError, socket.gaierror):
+            raise AirflowException(
+                "SSH connection timed out. Please check the network or server availability."
+            )
+        except SSHException as e:
+            raise AirflowException(f"An unexpected error occurred during SSH connection: {str(e)}")
+        except AirflowException as e:
+            raise e
+        except Exception as e:
+            raise AirflowException(
+                f"An unexpected error occurred while executing BTEQ script on remote machine: {str(e)}"
+            )
+        finally:
+            # Remove the local script file
+            if encrypted_file_path and os.path.exists(encrypted_file_path):
+                os.remove(encrypted_file_path)
+            # Cleanup: Delete the remote temporary file
+            if encrypted_file_path:
+                cleanup_en_command = f"rm -f {remote_encrypted_path}"
+                if self.ssh_hook and self.ssh_hook.get_conn():
+                    with self.ssh_hook.get_conn() as ssh_client:
+                        if ssh_client is None:
+                            raise AirflowException(
+                                "Failed to establish SSH connection. `ssh_client` is None."
+                            )
+                        ssh_client.exec_command(cleanup_en_command)
+
+    def execute_bteq_script_at_local(
+        self,
+        bteq_script: str,
+        bteq_script_encoding: str | None,
+        timeout: int,
+        timeout_rc: int | None,
+        bteq_quit_rc: int | list[int] | tuple[int, ...] | None,
+        bteq_session_encoding: str | None,
+        temp_file_read_encoding: str | None,
+    ) -> int | None:
+        verify_bteq_installed()
+        bteq_command_str = prepare_bteq_command_for_local_execution(
+            self.get_conn(),
+            timeout=timeout,
+            bteq_script_encoding=bteq_script_encoding or "",
+            bteq_session_encoding=bteq_session_encoding or "",
+            timeout_rc=timeout_rc or -1,
+        )
+        process = subprocess.Popen(
+            bteq_command_str,
+            stdin=subprocess.PIPE,
+            stdout=subprocess.PIPE,
+            stderr=subprocess.STDOUT,
+            shell=True,
+            preexec_fn=os.setsid,
+        )
+        encode_bteq_script = bteq_script.encode(str(temp_file_read_encoding or "UTF-8"))
+        stdout_data, _ = process.communicate(input=encode_bteq_script)
+        try:
+            # https://docs.python.org/3.10/library/subprocess.html#subprocess.Popen.wait  timeout is in seconds
+            process.wait(timeout=timeout + 60)  # Adding 1 minute extra for BTEQ script timeout
+        except subprocess.TimeoutExpired:
+            self.on_kill()
+            raise AirflowException(f"BTEQ command timed out after {timeout} seconds.")
+        conn = self.get_conn()
+        conn["sp"] = process  # For `on_kill` support
+        failure_message = None
+        if stdout_data is None:
+            raise AirflowException("Process stdout is None. Unable to read BTEQ output.")
+        decoded_line = ""
+        for line in stdout_data.splitlines():
+            try:
+                decoded_line = line.decode("UTF-8").strip()
+            except UnicodeDecodeError:
+                self.log.warning("Failed to decode line: %s", line)
+            if "Failure" in decoded_line or "Error" in decoded_line:
+                failure_message = decoded_line
+        # Raising an exception if there is any failure in bteq and also user wants to fail the
+        # task otherwise just log the error message as warning to not fail the task.
+        if (
+            failure_message
+            and process.returncode != 0
+            and process.returncode
+            not in (
+                bteq_quit_rc
+                if isinstance(bteq_quit_rc, (list, tuple))
+                else [bteq_quit_rc if bteq_quit_rc is not None else 0]
+            )
+        ):
+            raise AirflowException(f"BTEQ task failed with error: {failure_message}")
+        if failure_message:
+            self.log.warning(failure_message)
+
+        return process.returncode
+
+    def on_kill(self):
+        """Terminate the subprocess if running."""
+        conn = self.get_conn()
+        process = conn.get("sp")
+        if process:
+            try:
+                process.terminate()
+                process.wait(timeout=5)
+            except subprocess.TimeoutExpired:
+                self.log.warning("Subprocess did not terminate in time. Forcing kill...")
+                process.kill()
+            except Exception as e:
+                self.log.error("Failed to terminate subprocess: %s", str(e))
+
+    def get_airflow_home_dir(self) -> str:
+        """Get the AIRFLOW_HOME directory."""
+        return os.environ.get("AIRFLOW_HOME", "~/airflow")
+
+    @contextmanager
+    def preferred_temp_directory(self, prefix="bteq_"):
+        try:
+            temp_dir = tempfile.gettempdir()
+            if not os.path.isdir(temp_dir) or not os.access(temp_dir, os.W_OK):
+                raise OSError("OS temp dir not usable")
+        except Exception:
+            temp_dir = self.get_airflow_home_dir()
+
+        with tempfile.TemporaryDirectory(dir=temp_dir, prefix=prefix) as tmp:
+            yield tmp
diff --git a/providers/teradata/src/airflow/providers/teradata/hooks/ttu.py b/providers/teradata/src/airflow/providers/teradata/hooks/ttu.py
new file mode 100644
index 0000000000000..958bd76796e73
--- /dev/null
+++ b/providers/teradata/src/airflow/providers/teradata/hooks/ttu.py
@@ -0,0 +1,93 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import subprocess
+from abc import ABC
+from typing import Any
+
+from airflow.exceptions import AirflowException
+from airflow.hooks.base import BaseHook
+
+
+class TtuHook(BaseHook, ABC):
+    """
+    Abstract base hook for integrating Teradata Tools and Utilities (TTU) in Airflow.
+
+    This hook provides common connection handling, resource management, and lifecycle
+    support for TTU based operations such as BTEQ, TLOAD, and TPT.
+
+    It should not be used directly. Instead, it must be subclassed by concrete hooks
+    like `BteqHook`, `TloadHook`, or `TddlHook` that implement the actual TTU command logic.
+
+    Core Features:
+    - Establishes a reusable Teradata connection configuration.
+    - Provides context management for safe resource cleanup.
+    - Manages subprocess termination (e.g., for long-running TTU jobs).
+
+    Requirements:
+    - TTU command-line tools must be installed and accessible via PATH.
+    - A valid Airflow connection with Teradata credentials must be configured.
+    """
+
+    def __init__(self, teradata_conn_id: str = "teradata_default", *args, **kwargs) -> None:
+        super().__init__()
+        self.teradata_conn_id = teradata_conn_id
+        self.conn: dict[str, Any] | None = None
+
+    def __enter__(self):
+        return self
+
+    def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:
+        if self.conn is not None:
+            self.close_conn()
+
+    def get_conn(self) -> dict[str, Any]:
+        """
+        Set up and return a Teradata connection dictionary.
+
+        This dictionary includes connection credentials and a subprocess placeholder.
+        Ensures connection is created only once per hook instance.
+
+        :return: Dictionary with connection details.
+        """
+        if not self.conn:
+            connection = self.get_connection(self.teradata_conn_id)
+            if not connection.login or not connection.password or not connection.host:
+                raise AirflowException("Missing required connection parameters: login, password, or host.")
+
+            self.conn = dict(
+                login=connection.login,
+                password=connection.password,
+                host=connection.host,
+                database=connection.schema,
+                sp=None,  # Subprocess placeholder
+            )
+        return self.conn
+
+    def close_conn(self):
+        """Terminate any active TTU subprocess and clear the connection."""
+        if self.conn:
+            if self.conn.get("sp") and self.conn["sp"].poll() is None:
+                self.conn["sp"].terminate()
+                try:
+                    self.conn["sp"].wait(timeout=5)
+                except subprocess.TimeoutExpired:
+                    self.log.warning("Subprocess did not terminate in time. Forcing kill...")
+                    self.conn["sp"].kill()
+            self.conn = None
diff --git a/providers/teradata/src/airflow/providers/teradata/operators/bteq.py b/providers/teradata/src/airflow/providers/teradata/operators/bteq.py
new file mode 100644
index 0000000000000..22779be9bfb33
--- /dev/null
+++ b/providers/teradata/src/airflow/providers/teradata/operators/bteq.py
@@ -0,0 +1,284 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Literal
+
+from airflow.providers.teradata.utils.bteq_util import (
+    is_valid_encoding,
+    is_valid_file,
+    is_valid_remote_bteq_script_file,
+    prepare_bteq_script_for_local_execution,
+    prepare_bteq_script_for_remote_execution,
+    read_file,
+)
+
+if TYPE_CHECKING:
+    from paramiko import SSHClient
+
+    try:
+        from airflow.sdk.definitions.context import Context
+    except ImportError:
+        from airflow.utils.context import Context
+
+from airflow.models import BaseOperator
+from airflow.providers.ssh.hooks.ssh import SSHHook
+from airflow.providers.teradata.hooks.bteq import BteqHook
+from airflow.providers.teradata.hooks.teradata import TeradataHook
+
+
+def contains_template(parameter_value):
+    # Check if the parameter contains Jinja templating syntax
+    return "{{" in parameter_value and "}}" in parameter_value
+
+
+class BteqOperator(BaseOperator):
+    """
+    Teradata Operator to execute SQL Statements or BTEQ (Basic Teradata Query) scripts using Teradata BTEQ utility.
+
+    This supports execution of BTEQ scripts either locally or remotely via SSH.
+
+    The BTEQ scripts are used to interact with Teradata databases, allowing users to perform
+    operations such as querying, data manipulation, and administrative tasks.
+
+    Features:
+    - Supports both local and remote execution of BTEQ scripts.
+    - Handles connection details, script preparation, and execution.
+    - Provides robust error handling and logging for debugging.
+    - Allows configuration of session parameters like session and BTEQ I/O encoding.
+
+    .. seealso::
+        For more information on how to use this operator, take a look at the guide:
+        :ref:`howto/operator:BteqOperator`
+
+    :param sql: SQL statement(s) to be executed using BTEQ. (templated)
+    :param file_path: Optional path to an existing SQL or BTEQ script file. If provided, this file will be used instead of the `sql` content. This path represents remote file path when executing remotely via SSH, or local file path when executing locally.
+    :param teradata_conn_id: Reference to a specific Teradata connection.
+    :param ssh_conn_id: Optional SSH connection ID for remote execution. Used only when executing scripts remotely.
+    :param remote_working_dir: Temporary directory location on the remote host (via SSH) where the BTEQ script will be transferred and executed. Defaults to `/tmp` if not specified. This is only applicable when `ssh_conn_id` is provided.
+    :param bteq_session_encoding: Character set encoding for the BTEQ session. Defaults to ASCII if not specified.
+    :param bteq_script_encoding: Character encoding for the BTEQ script file. Defaults to ASCII if not specified.
+    :param bteq_quit_rc: Accepts a single integer, list, or tuple of return codes. Specifies which BTEQ return codes should be treated as successful, allowing subsequent tasks to continue execution.
+    :param timeout: Timeout (in seconds) for executing the BTEQ command. Default is 600 seconds (10 minutes).
+    :param timeout_rc: Return code to use if the BTEQ execution fails due to a timeout. To allow DAG execution to continue after a timeout, include this value in `bteq_quit_rc`. If not specified, a timeout will raise an exception and stop the DAG.
+    """
+
+    template_fields = "sql"
+    ui_color = "#ff976d"
+
+    def __init__(
+        self,
+        *,
+        sql: str | None = None,
+        file_path: str | None = None,
+        teradata_conn_id: str = TeradataHook.default_conn_name,
+        ssh_conn_id: str | None = None,
+        remote_working_dir: str | None = None,
+        bteq_session_encoding: str | None = None,
+        bteq_script_encoding: str | None = None,
+        bteq_quit_rc: int | list[int] | tuple[int, ...] | None = None,
+        timeout: int | Literal[600] = 600,  # Default to 10 minutes
+        timeout_rc: int | None = None,
+        **kwargs,
+    ) -> None:
+        super().__init__(**kwargs)
+        self.sql = sql
+        self.file_path = file_path
+        self.teradata_conn_id = teradata_conn_id
+        self.ssh_conn_id = ssh_conn_id
+        self.remote_working_dir = remote_working_dir
+        self.timeout = timeout
+        self.timeout_rc = timeout_rc
+        self.bteq_session_encoding = bteq_session_encoding
+        self.bteq_script_encoding = bteq_script_encoding
+        self.bteq_quit_rc = bteq_quit_rc
+        self._hook: BteqHook | None = None
+        self._ssh_hook: SSHHook | None = None
+        self.temp_file_read_encoding = "UTF-8"
+
+    def execute(self, context: Context) -> int | None:
+        """Execute BTEQ code using the BteqHook."""
+        if not self.sql and not self.file_path:
+            raise ValueError(
+                "BteqOperator requires either the 'sql' or 'file_path' parameter. Both are missing."
+            )
+        self._hook = BteqHook(teradata_conn_id=self.teradata_conn_id, ssh_conn_id=self.ssh_conn_id)
+        self._ssh_hook = SSHHook(ssh_conn_id=self.ssh_conn_id) if self.ssh_conn_id else None
+
+        # Validate and set BTEQ session and script encoding
+        if not self.bteq_session_encoding or self.bteq_session_encoding == "ASCII":
+            self.bteq_session_encoding = ""
+            if self.bteq_script_encoding == "UTF8":
+                self.temp_file_read_encoding = "UTF-8"
+            elif self.bteq_script_encoding == "UTF16":
+                self.temp_file_read_encoding = "UTF-16"
+            self.bteq_script_encoding = ""
+        elif self.bteq_session_encoding == "UTF8" and (
+            not self.bteq_script_encoding or self.bteq_script_encoding == "ASCII"
+        ):
+            self.bteq_script_encoding = "UTF8"
+        elif self.bteq_session_encoding == "UTF16":
+            if not self.bteq_script_encoding or self.bteq_script_encoding == "ASCII":
+                self.bteq_script_encoding = "UTF8"
+        # for file reading in python. Mapping BTEQ encoding to Python encoding
+        if self.bteq_script_encoding == "UTF8":
+            self.temp_file_read_encoding = "UTF-8"
+        elif self.bteq_script_encoding == "UTF16":
+            self.temp_file_read_encoding = "UTF-16"
+
+        if not self.remote_working_dir:
+            self.remote_working_dir = "/tmp"
+        # Handling execution on local:
+        if not self._ssh_hook:
+            if self.sql:
+                bteq_script = prepare_bteq_script_for_local_execution(
+                    sql=self.sql,
+                )
+                return self._hook.execute_bteq_script(
+                    bteq_script,
+                    self.remote_working_dir,
+                    self.bteq_script_encoding,
+                    self.timeout,
+                    self.timeout_rc,
+                    self.bteq_session_encoding,
+                    self.bteq_quit_rc,
+                    self.temp_file_read_encoding,
+                )
+            if self.file_path:
+                if not is_valid_file(self.file_path):
+                    raise ValueError(
+                        f"The provided file path '{self.file_path}' is invalid or does not exist."
+                    )
+                try:
+                    is_valid_encoding(self.file_path, self.temp_file_read_encoding or "UTF-8")
+                except UnicodeDecodeError as e:
+                    errmsg = f"The provided file '{self.file_path}' encoding is different from BTEQ I/O encoding i.e.'UTF-8'."
+                    if self.bteq_script_encoding:
+                        errmsg = f"The provided file '{self.file_path}' encoding is different from the specified BTEQ I/O encoding '{self.bteq_script_encoding}'."
+                    raise ValueError(errmsg) from e
+                return self._handle_local_bteq_file(
+                    file_path=self.file_path,
+                    context=context,
+                )
+        # Execution on Remote machine
+        elif self._ssh_hook:
+            # When sql statement is provided as input through sql parameter, Preparing the bteq script
+            if self.sql:
+                bteq_script = prepare_bteq_script_for_remote_execution(
+                    conn=self._hook.get_conn(),
+                    sql=self.sql,
+                )
+                return self._hook.execute_bteq_script(
+                    bteq_script,
+                    self.remote_working_dir,
+                    self.bteq_script_encoding,
+                    self.timeout,
+                    self.timeout_rc,
+                    self.bteq_session_encoding,
+                    self.bteq_quit_rc,
+                    self.temp_file_read_encoding,
+                )
+            if self.file_path:
+                with self._ssh_hook.get_conn() as ssh_client:
+                    # When .sql or .bteq remote file path is provided as input through file_path parameter, executing on remote machine
+                    if self.file_path and is_valid_remote_bteq_script_file(ssh_client, self.file_path):
+                        return self._handle_remote_bteq_file(
+                            ssh_client=self._ssh_hook.get_conn(),
+                            file_path=self.file_path,
+                            context=context,
+                        )
+                    raise ValueError(
+                        f"The provided remote file path '{self.file_path}' is invalid or file does not exist on remote machine at given path."
+                    )
+            else:
+                raise ValueError(
+                    "BteqOperator requires either the 'sql' or 'file_path' parameter. Both are missing."
+                )
+        return None
+
+    def _handle_remote_bteq_file(
+        self,
+        ssh_client: SSHClient,
+        file_path: str | None,
+        context: Context,
+    ) -> int | None:
+        if file_path:
+            with ssh_client:
+                sftp = ssh_client.open_sftp()
+                try:
+                    with sftp.open(file_path, "r") as remote_file:
+                        original_content = remote_file.read().decode(self.temp_file_read_encoding or "UTF-8")
+                finally:
+                    sftp.close()
+                rendered_content = original_content
+                if contains_template(original_content):
+                    rendered_content = self.render_template(original_content, context)
+                if self._hook:
+                    bteq_script = prepare_bteq_script_for_remote_execution(
+                        conn=self._hook.get_conn(),
+                        sql=rendered_content,
+                    )
+                    return self._hook.execute_bteq_script_at_remote(
+                        bteq_script,
+                        self.remote_working_dir,
+                        self.bteq_script_encoding,
+                        self.timeout,
+                        self.timeout_rc,
+                        self.bteq_session_encoding,
+                        self.bteq_quit_rc,
+                        self.temp_file_read_encoding,
+                    )
+            return None
+        raise ValueError(
+            "Please provide a valid file path for the BTEQ script to be executed on the remote machine."
+        )
+
+    def _handle_local_bteq_file(
+        self,
+        file_path: str,
+        context: Context,
+    ) -> int | None:
+        if file_path and is_valid_file(file_path):
+            file_content = read_file(file_path, encoding=str(self.temp_file_read_encoding or "UTF-8"))
+            # Manually render using operator's context
+            rendered_content = file_content
+            if contains_template(file_content):
+                rendered_content = self.render_template(file_content, context)
+            bteq_script = prepare_bteq_script_for_local_execution(
+                sql=rendered_content,
+            )
+            if self._hook:
+                result = self._hook.execute_bteq_script(
+                    bteq_script,
+                    self.remote_working_dir,
+                    self.bteq_script_encoding,
+                    self.timeout,
+                    self.timeout_rc,
+                    self.bteq_session_encoding,
+                    self.bteq_quit_rc,
+                    self.temp_file_read_encoding,
+                )
+                return result
+        return None
+
+    def on_kill(self) -> None:
+        """Handle task termination by invoking the on_kill method of BteqHook."""
+        if self._hook:
+            self._hook.on_kill()
+        else:
+            self.log.warning("BteqHook was not initialized. Nothing to terminate.")
diff --git a/providers/teradata/src/airflow/providers/teradata/utils/bteq_util.py b/providers/teradata/src/airflow/providers/teradata/utils/bteq_util.py
new file mode 100644
index 0000000000000..0741ebb20090c
--- /dev/null
+++ b/providers/teradata/src/airflow/providers/teradata/utils/bteq_util.py
@@ -0,0 +1,182 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import os
+import shutil
+import stat
+from typing import TYPE_CHECKING, Any
+
+if TYPE_CHECKING:
+    from paramiko import SSHClient
+
+from airflow.exceptions import AirflowException
+
+
+def verify_bteq_installed():
+    """Verify if BTEQ is installed and available in the system's PATH."""
+    if shutil.which("bteq") is None:
+        raise AirflowException("BTEQ is not installed or not available in the system's PATH.")
+
+
+def verify_bteq_installed_remote(ssh_client: SSHClient):
+    """Verify if BTEQ is installed on the remote machine."""
+    stdin, stdout, stderr = ssh_client.exec_command("which bteq")
+    exit_status = stdout.channel.recv_exit_status()
+    output = stdout.read().strip()
+    error = stderr.read().strip()
+
+    if exit_status != 0 or not output:
+        raise AirflowException(
+            f"BTEQ is not installed or not available in PATH. stderr: {error.decode() if error else 'N/A'}"
+        )
+
+
+def transfer_file_sftp(ssh_client, local_path, remote_path):
+    sftp = ssh_client.open_sftp()
+    sftp.put(local_path, remote_path)
+    sftp.close()
+
+
+# We can not pass host details with bteq command when executing on remote machine. Instead, we will prepare .logon in bteq script itself to avoid risk of
+# exposing sensitive information
+def prepare_bteq_script_for_remote_execution(conn: dict[str, Any], sql: str) -> str:
+    """Build a BTEQ script with necessary connection and session commands."""
+    script_lines = []
+    host = conn["host"]
+    login = conn["login"]
+    password = conn["password"]
+    script_lines.append(f" .LOGON {host}/{login},{password}")
+    return _prepare_bteq_script(script_lines, sql)
+
+
+def prepare_bteq_script_for_local_execution(
+    sql: str,
+) -> str:
+    """Build a BTEQ script with necessary connection and session commands."""
+    script_lines: list[str] = []
+    return _prepare_bteq_script(script_lines, sql)
+
+
+def _prepare_bteq_script(script_lines: list[str], sql: str) -> str:
+    script_lines.append(sql.strip())
+    script_lines.append(".EXIT")
+    return "\n".join(script_lines)
+
+
+def _prepare_bteq_command(
+    timeout: int,
+    bteq_script_encoding: str,
+    bteq_session_encoding: str,
+    timeout_rc: int,
+) -> list[str]:
+    bteq_core_cmd = ["bteq"]
+    if bteq_session_encoding:
+        bteq_core_cmd.append(f" -e {bteq_script_encoding}")
+        bteq_core_cmd.append(f" -c {bteq_session_encoding}")
+    bteq_core_cmd.append('"')
+    bteq_core_cmd.append(f".SET EXITONDELAY ON MAXREQTIME {timeout}")
+    if timeout_rc is not None and timeout_rc >= 0:
+        bteq_core_cmd.append(f" RC {timeout_rc}")
+    bteq_core_cmd.append(";")
+    # Airflow doesn't display the script of BTEQ in UI but only in log so WIDTH is 500 enough
+    bteq_core_cmd.append(" .SET WIDTH 500;")
+    return bteq_core_cmd
+
+
+def prepare_bteq_command_for_remote_execution(
+    timeout: int,
+    bteq_script_encoding: str,
+    bteq_session_encoding: str,
+    timeout_rc: int,
+) -> str:
+    """Prepare the BTEQ command with necessary parameters."""
+    bteq_core_cmd = _prepare_bteq_command(timeout, bteq_script_encoding, bteq_session_encoding, timeout_rc)
+    bteq_core_cmd.append('"')
+    return " ".join(bteq_core_cmd)
+
+
+def prepare_bteq_command_for_local_execution(
+    conn: dict[str, Any],
+    timeout: int,
+    bteq_script_encoding: str,
+    bteq_session_encoding: str,
+    timeout_rc: int,
+) -> str:
+    """Prepare the BTEQ command with necessary parameters."""
+    bteq_core_cmd = _prepare_bteq_command(timeout, bteq_script_encoding, bteq_session_encoding, timeout_rc)
+    host = conn["host"]
+    login = conn["login"]
+    password = conn["password"]
+    bteq_core_cmd.append(f" .LOGON {host}/{login},{password}")
+    bteq_core_cmd.append('"')
+    bteq_command_str = " ".join(bteq_core_cmd)
+    return bteq_command_str
+
+
+def is_valid_file(file_path: str) -> bool:
+    return os.path.isfile(file_path)
+
+
+def is_valid_encoding(file_path: str, encoding: str = "UTF-8") -> bool:
+    """
+    Check if the file can be read with the specified encoding.
+
+    :param file_path: Path to the file to be checked.
+    :param encoding: Encoding to use for reading the file.
+    :return: True if the file can be read with the specified encoding, False otherwise.
+    """
+    with open(file_path, encoding=encoding) as f:
+        f.read()
+        return True
+
+
+def read_file(file_path: str, encoding: str = "UTF-8") -> str:
+    """
+    Read the content of a file with the specified encoding.
+
+    :param file_path: Path to the file to be read.
+    :param encoding: Encoding to use for reading the file.
+    :return: Content of the file as a string.
+    """
+    if not os.path.isfile(file_path):
+        raise FileNotFoundError(f"The file {file_path} does not exist.")
+
+    with open(file_path, encoding=encoding) as f:
+        return f.read()
+
+
+def is_valid_remote_bteq_script_file(ssh_client: SSHClient, remote_file_path: str, logger=None) -> bool:
+    """Check if the given remote file path is a valid BTEQ script file."""
+    if remote_file_path:
+        sftp_client = ssh_client.open_sftp()
+        try:
+            # Get file metadata
+            file_stat = sftp_client.stat(remote_file_path)
+            if file_stat.st_mode:
+                is_regular_file = stat.S_ISREG(file_stat.st_mode)
+                return is_regular_file
+            return False
+        except FileNotFoundError:
+            if logger:
+                logger.error("File does not exist on remote at : %s", remote_file_path)
+            return False
+        finally:
+            sftp_client.close()
+    else:
+        return False
diff --git a/providers/teradata/src/airflow/providers/teradata/utils/encryption_utils.py b/providers/teradata/src/airflow/providers/teradata/utils/encryption_utils.py
new file mode 100644
index 0000000000000..57ed4b9855810
--- /dev/null
+++ b/providers/teradata/src/airflow/providers/teradata/utils/encryption_utils.py
@@ -0,0 +1,75 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import secrets
+import string
+import subprocess
+
+
+def generate_random_password(length=12):
+    # Define the character set: letters, digits, and special characters
+    characters = string.ascii_letters + string.digits + string.punctuation
+    # Generate a random password
+    password = "".join(secrets.choice(characters) for _ in range(length))
+    return password
+
+
+def generate_encrypted_file_with_openssl(file_path: str, password: str, out_file: str):
+    # Write plaintext temporarily to file
+
+    # Run openssl enc with AES-256-CBC, pbkdf2, salt
+    cmd = [
+        "openssl",
+        "enc",
+        "-aes-256-cbc",
+        "-salt",
+        "-pbkdf2",
+        "-pass",
+        f"pass:{password}",
+        "-in",
+        file_path,
+        "-out",
+        out_file,
+    ]
+    subprocess.run(cmd, check=True)
+
+
+def decrypt_remote_file_to_string(ssh_client, remote_enc_file, password, bteq_command_str):
+    # Run openssl decrypt command on remote machine
+    quoted_password = shell_quote_single(password)
+
+    decrypt_cmd = (
+        f"openssl enc -d -aes-256-cbc -salt -pbkdf2 -pass pass:{quoted_password} -in {remote_enc_file} | "
+        + bteq_command_str
+    )
+    # Clear password to prevent lingering sensitive data
+    password = None
+    quoted_password = None
+    stdin, stdout, stderr = ssh_client.exec_command(decrypt_cmd)
+    # Wait for command to finish
+    exit_status = stdout.channel.recv_exit_status()
+    output = stdout.read().decode()
+    err = stderr.read().decode()
+    return exit_status, output, err
+
+
+def shell_quote_single(s):
+    # Escape single quotes in s, then wrap in single quotes
+    # In shell, to include a single quote inside single quotes, close, add '\'' and reopen
+    return "'" + s.replace("'", "'\\''") + "'"
diff --git a/providers/teradata/tests/system/teradata/example_bteq.py b/providers/teradata/tests/system/teradata/example_bteq.py
new file mode 100644
index 0000000000000..a77f81bc697dc
--- /dev/null
+++ b/providers/teradata/tests/system/teradata/example_bteq.py
@@ -0,0 +1,272 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+"""
+Example Airflow DAG to show usage of BteqOperator.
+
+This DAG assumes Airflow Connection with connection id `TTU_DEFAULT` already exists in locally. It
+shows how to use Teradata BTEQ commands with BteqOperator as tasks in
+airflow dags using BteqeOperator.
+"""
+
+from __future__ import annotations
+
+import datetime
+import os
+
+import pytest
+
+from airflow import DAG
+
+try:
+    from airflow.providers.teradata.operators.bteq import BteqOperator
+except ImportError:
+    pytest.skip("TERADATA provider not available", allow_module_level=True)
+
+# [START bteq_operator_howto_guide]
+
+
+ENV_ID = os.environ.get("SYSTEM_TESTS_ENV_ID")
+DAG_ID = "example_bteq"
+CONN_ID = "teradata_default"
+SSH_CONN_ID = "ssh_default"
+
+host = os.environ.get("host", "localhost")
+username = os.environ.get("username", "temp")
+password = os.environ.get("password", "temp")
+params = {
+    "host": host,
+    "username": username,
+    "password": password,
+    "DATABASE_NAME": "airflow",
+    "TABLE_NAME": "my_employees",
+    "DB_TABLE_NAME": "airflow.my_employees",
+}
+with DAG(
+    dag_id=DAG_ID,
+    start_date=datetime.datetime(2020, 2, 2),
+    schedule="@once",
+    catchup=False,
+    default_args={"teradata_conn_id": CONN_ID, "params": params},
+) as dag:
+    # [START bteq_operator_howto_guide_create_table]
+    create_table = BteqOperator(
+        task_id="create_table",
+        sql=r"""
+                CREATE SET TABLE {{params.DB_TABLE_NAME}} (
+                  emp_id INT,
+                  emp_name VARCHAR(100),
+                  dept VARCHAR(50)
+                ) PRIMARY INDEX (emp_id);
+                """,
+        bteq_quit_rc=[0, 4],
+        timeout=20,
+        bteq_session_encoding="UTF8",
+        bteq_script_encoding="UTF8",
+        params=params,
+    )
+    # [END bteq_operator_howto_guide_create_table]
+    # [START bteq_operator_howto_guide_populate_table]
+    populate_table = BteqOperator(
+        task_id="populate_table",
+        sql=r"""
+                INSERT INTO {{params.DB_TABLE_NAME}} VALUES (1, 'John Doe', 'IT');
+                INSERT INTO {{params.DB_TABLE_NAME}} VALUES (2, 'Jane Smith', 'HR');
+                """,
+        params=params,
+        bteq_session_encoding="UTF8",
+        bteq_quit_rc=0,
+    )
+    # [END bteq_operator_howto_guide_populate_table]
+
+    # [START bteq_operator_howto_guide_export_data_to_a_file]
+    export_to_a_file = BteqOperator(
+        task_id="export_to_a_file",
+        sql=r"""
+                .EXPORT FILE = employees_output.txt;
+                SELECT * FROM {{params.DB_TABLE_NAME}};
+                .EXPORT RESET;
+                """,
+        bteq_session_encoding="UTF16",
+    )
+    # [END bteq_operator_howto_guide_export_data_to_a_file]
+
+    # [START bteq_operator_howto_guide_get_it_employees]
+    get_it_employees = BteqOperator(
+        task_id="get_it_employees",
+        sql=r"""
+                SELECT * FROM {{params.DB_TABLE_NAME}} WHERE dept = 'IT';
+                """,
+        bteq_session_encoding="ASCII",
+    )
+    # [END bteq_operator_howto_guide_get_it_employees]
+
+    # [START bteq_operator_howto_guide_conditional_logic]
+    cond_logic = BteqOperator(
+        task_id="cond_logic",
+        sql=r"""
+                .IF ERRORCODE <> 0 THEN .GOTO handle_error;
+
+                SELECT COUNT(*) FROM {{params.DB_TABLE_NAME}};
+
+                .LABEL handle_error;
+                """,
+        bteq_script_encoding="UTF8",
+    )
+    # [END bteq_operator_howto_guide_conditional_logic]
+
+    # [START bteq_operator_howto_guide_error_handling]
+    error_handling = BteqOperator(
+        task_id="error_handling",
+        sql=r"""
+                DROP TABLE my_temp;
+                .IF ERRORCODE = 3807 THEN .GOTO table_not_found;
+                SELECT 'Table dropped successfully.';
+                .GOTO end;
+
+                .LABEL table_not_found;
+                SELECT 'Table not found - continuing execution';
+                .LABEL end;
+                .LOGOFF;
+                .QUIT 0;
+                """,
+        bteq_script_encoding="UTF16",
+    )
+    # [END bteq_operator_howto_guide_error_handling]
+
+    # [START bteq_operator_howto_guide_drop_table]
+    drop_table = BteqOperator(
+        task_id="drop_table",
+        sql=r"""
+                DROP TABLE {{params.DB_TABLE_NAME}};
+                .IF ERRORCODE = 3807 THEN .GOTO end;
+
+                .LABEL end;
+                .LOGOFF;
+                .QUIT 0;
+                """,
+        bteq_script_encoding="ASCII",
+    )
+    # [END bteq_operator_howto_guide_drop_table]
+    # [START bteq_operator_howto_guide_bteq_file_input]
+    execute_bteq_file = BteqOperator(
+        task_id="execute_bteq_file",
+        file_path="providers/teradata/tests/system/teradata/script.bteq",
+        params=params,
+    )
+    # [END bteq_operator_howto_guide_bteq_file_input]
+    # [START bteq_operator_howto_guide_bteq_file_utf8_input]
+    execute_bteq_utf8_file = BteqOperator(
+        task_id="execute_bteq_utf8_file",
+        file_path="providers/teradata/tests/system/teradata/script.bteq",
+        params=params,
+        bteq_script_encoding="UTF8",
+    )
+    # [END bteq_operator_howto_guide_bteq_file_utf8_input]
+    # [START bteq_operator_howto_guide_bteq_file_utf8_session_ascii_input]
+    execute_bteq_utf8_session_ascii_file = BteqOperator(
+        task_id="execute_bteq_utf8_session_ascii_file",
+        file_path="providers/teradata/tests/system/teradata/script.bteq",
+        params=params,
+        bteq_script_encoding="UTF8",
+        bteq_session_encoding="ASCII",
+    )
+    # [END bteq_operator_howto_guide_bteq_file_utf8_session_ascii_input]
+    # [START bteq_operator_howto_guide_bteq_file_utf8_session_utf8_input]
+    execute_bteq_utf8_session_utf8_file = BteqOperator(
+        task_id="execute_bteq_utf8_session_utf8_file",
+        file_path="providers/teradata/tests/system/teradata/script.bteq",
+        params=params,
+        bteq_script_encoding="UTF8",
+        bteq_session_encoding="UTF8",
+    )
+    # [END bteq_operator_howto_guide_bteq_file_utf8_session_utf8_input]
+    # [START bteq_operator_howto_guide_bteq_file_utf8_session_utf16_input]
+    execute_bteq_utf8_session_utf16_file = BteqOperator(
+        task_id="execute_bteq_utf8_session_utf16_file",
+        file_path="providers/teradata/tests/system/teradata/script.bteq",
+        params=params,
+        bteq_script_encoding="UTF8",
+        bteq_session_encoding="UTF16",
+    )
+    # [END bteq_operator_howto_guide_bteq_file_utf8_session_utf16_input]
+    # [START bteq_operator_howto_guide_bteq_file_utf16_input]
+    execute_bteq_utf16_file = BteqOperator(
+        task_id="execute_bteq_utf16_file",
+        file_path="providers/teradata/tests/system/teradata/script_utf16.bteq",
+        params=params,
+        bteq_script_encoding="UTF16",
+    )
+    # [END bteq_operator_howto_guide_bteq_file_utf16_input]
+    # [START bteq_operator_howto_guide_bteq_file_utf16_input]
+    execute_bteq_utf16_session_ascii_file = BteqOperator(
+        task_id="execute_bteq_utf16_session_ascii_file",
+        file_path="providers/teradata/tests/system/teradata/script_utf16.bteq",
+        params=params,
+        bteq_script_encoding="UTF16",
+        bteq_session_encoding="ASCII",
+    )
+    # [END bteq_operator_howto_guide_bteq_file_utf16_input]
+    # [START bteq_operator_howto_guide_bteq_file_utf16_session_utf8_input]
+    execute_bteq_utf16_session_utf8_file = BteqOperator(
+        task_id="execute_bteq_utf16_session_utf8_file",
+        file_path="providers/teradata/tests/system/teradata/script_utf16.bteq",
+        params=params,
+        bteq_script_encoding="UTF16",
+        bteq_session_encoding="UTF8",
+    )
+    # [END bteq_operator_howto_guide_bteq_file_utf16_session_utf8_input]
+    # [START bteq_operator_howto_guide_bteq_file_utf16_session_utf8_input]
+    execute_bteq_utf16_session_utf16_file = BteqOperator(
+        task_id="execute_bteq_utf16_session_utf16_file",
+        file_path="providers/teradata/tests/system/teradata/script_utf16.bteq",
+        params=params,
+        bteq_script_encoding="UTF16",
+        bteq_session_encoding="UTF16",
+    )
+    # [END bteq_operator_howto_guide_bteq_file_utf16_session_utf8_input]
+    (
+        create_table
+        >> populate_table
+        >> export_to_a_file
+        >> get_it_employees
+        >> cond_logic
+        >> error_handling
+        >> drop_table
+        >> execute_bteq_file
+        >> execute_bteq_utf8_file
+        >> execute_bteq_utf8_session_ascii_file
+        >> execute_bteq_utf8_session_utf8_file
+        >> execute_bteq_utf8_session_utf16_file
+        >> execute_bteq_utf16_file
+        >> execute_bteq_utf16_session_ascii_file
+        >> execute_bteq_utf16_session_utf8_file
+        >> execute_bteq_utf16_session_utf16_file
+    )
+
+    # [END bteq_operator_howto_guide]
+
+    from tests_common.test_utils.watcher import watcher
+
+    # This test needs watcher in order to properly mark success/failure
+    # when "tearDown" task with trigger rule is part of the DAG
+    list(dag.tasks) >> watcher()
+
+from tests_common.test_utils.system_tests import get_test_run  # noqa: E402
+
+# Needed to run the example DAG with pytest (see: tests/system/README.md#run_via_pytest)
+test_run = get_test_run(dag)
diff --git a/providers/teradata/tests/system/teradata/example_remote_bteq.py b/providers/teradata/tests/system/teradata/example_remote_bteq.py
new file mode 100644
index 0000000000000..76bedff0b950f
--- /dev/null
+++ b/providers/teradata/tests/system/teradata/example_remote_bteq.py
@@ -0,0 +1,272 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+"""
+Example Airflow DAG to show usage of BteqOperator.
+
+This DAG assumes Airflow Connection with connection id `TTU_DEFAULT` already exists in locally. It
+shows how to use Teradata BTEQ commands with BteqOperator as tasks in
+airflow dags using BteqeOperator.
+"""
+
+from __future__ import annotations
+
+import datetime
+import os
+
+import pytest
+
+from airflow import DAG
+
+try:
+    from airflow.providers.teradata.operators.bteq import BteqOperator
+except ImportError:
+    pytest.skip("TERADATA provider not available", allow_module_level=True)
+
+# [START bteq_operator_howto_guide]
+
+
+ENV_ID = os.environ.get("SYSTEM_TESTS_ENV_ID")
+DAG_ID = "example_remote_bteq"
+CONN_ID = "teradata_default"
+SSH_CONN_ID = "ssh_default"
+
+host = os.environ.get("host", "localhost")
+username = os.environ.get("username", "temp")
+password = os.environ.get("password", "temp")
+params = {
+    "host": host,
+    "username": username,
+    "password": password,
+    "DATABASE_NAME": "airflow",
+    "TABLE_NAME": "my_employees",
+    "DB_TABLE_NAME": "airflow.my_employees",
+}
+with DAG(
+    dag_id=DAG_ID,
+    start_date=datetime.datetime(2020, 2, 2),
+    schedule="@once",
+    catchup=False,
+    default_args={"teradata_conn_id": CONN_ID, "params": params, "ssh_conn_id": SSH_CONN_ID},
+) as dag:
+    # [START bteq_operator_howto_guide_create_table]
+    create_table = BteqOperator(
+        task_id="create_table",
+        sql=r"""
+                CREATE SET TABLE {{params.DB_TABLE_NAME}} (
+                  emp_id INT,
+                  emp_name VARCHAR(100),
+                  dept VARCHAR(50)
+                ) PRIMARY INDEX (emp_id);
+                """,
+        bteq_quit_rc=[0, 4],
+        timeout=20,
+        bteq_session_encoding="UTF8",
+        bteq_script_encoding="UTF8",
+        params=params,
+    )
+    # [END bteq_operator_howto_guide_create_table]
+    # [START bteq_operator_howto_guide_populate_table]
+    populate_table = BteqOperator(
+        task_id="populate_table",
+        sql=r"""
+                INSERT INTO {{params.DB_TABLE_NAME}} VALUES (1, 'John Doe', 'IT');
+                INSERT INTO {{params.DB_TABLE_NAME}} VALUES (2, 'Jane Smith', 'HR');
+                """,
+        params=params,
+        bteq_session_encoding="UTF8",
+        bteq_quit_rc=0,
+    )
+    # [END bteq_operator_howto_guide_populate_table]
+
+    # [START bteq_operator_howto_guide_export_data_to_a_file]
+    export_to_a_file = BteqOperator(
+        task_id="export_to_a_file",
+        sql=r"""
+                .EXPORT FILE = employees_output.txt;
+                SELECT * FROM {{params.DB_TABLE_NAME}};
+                .EXPORT RESET;
+                """,
+        bteq_session_encoding="UTF16",
+    )
+    # [END bteq_operator_howto_guide_export_data_to_a_file]
+
+    # [START bteq_operator_howto_guide_get_it_employees]
+    get_it_employees = BteqOperator(
+        task_id="get_it_employees",
+        sql=r"""
+                SELECT * FROM {{params.DB_TABLE_NAME}} WHERE dept = 'IT';
+                """,
+        bteq_session_encoding="ASCII",
+    )
+    # [END bteq_operator_howto_guide_get_it_employees]
+
+    # [START bteq_operator_howto_guide_conditional_logic]
+    cond_logic = BteqOperator(
+        task_id="cond_logic",
+        sql=r"""
+                .IF ERRORCODE <> 0 THEN .GOTO handle_error;
+
+                SELECT COUNT(*) FROM {{params.DB_TABLE_NAME}};
+
+                .LABEL handle_error;
+                """,
+        bteq_script_encoding="UTF8",
+    )
+    # [END bteq_operator_howto_guide_conditional_logic]
+
+    # [START bteq_operator_howto_guide_error_handling]
+    error_handling = BteqOperator(
+        task_id="error_handling",
+        sql=r"""
+                DROP TABLE my_temp;
+                .IF ERRORCODE = 3807 THEN .GOTO table_not_found;
+                SELECT 'Table dropped successfully.';
+                .GOTO end;
+
+                .LABEL table_not_found;
+                SELECT 'Table not found - continuing execution';
+                .LABEL end;
+                .LOGOFF;
+                .QUIT 0;
+                """,
+        bteq_script_encoding="UTF16",
+    )
+    # [END bteq_operator_howto_guide_error_handling]
+
+    # [START bteq_operator_howto_guide_drop_table]
+    drop_table = BteqOperator(
+        task_id="drop_table",
+        sql=r"""
+                DROP TABLE {{params.DB_TABLE_NAME}};
+                .IF ERRORCODE = 3807 THEN .GOTO end;
+
+                .LABEL end;
+                .LOGOFF;
+                .QUIT 0;
+                """,
+        bteq_script_encoding="ASCII",
+    )
+    # [END bteq_operator_howto_guide_drop_table]
+    # [START bteq_operator_howto_guide_bteq_file_input]
+    execute_bteq_file = BteqOperator(
+        task_id="execute_bteq_file",
+        file_path="/home/devtools/satish/airflow/script.bteq",
+        params=params,
+    )
+    # [END bteq_operator_howto_guide_bteq_file_input]
+    # [START bteq_operator_howto_guide_bteq_file_utf8_input]
+    execute_bteq_utf8_file = BteqOperator(
+        task_id="execute_bteq_utf8_file",
+        file_path="/home/devtools/satish/airflow/script.bteq",
+        params=params,
+        bteq_script_encoding="UTF8",
+    )
+    # [END bteq_operator_howto_guide_bteq_file_utf8_input]
+    # [START bteq_operator_howto_guide_bteq_file_utf8_session_ascii_input]
+    execute_bteq_utf8_session_ascii_file = BteqOperator(
+        task_id="execute_bteq_utf8_session_ascii_file",
+        file_path="/home/devtools/satish/airflow/script.bteq",
+        params=params,
+        bteq_script_encoding="UTF8",
+        bteq_session_encoding="ASCII",
+    )
+    # [END bteq_operator_howto_guide_bteq_file_utf8_session_ascii_input]
+    # [START bteq_operator_howto_guide_bteq_file_utf8_session_utf8_input]
+    execute_bteq_utf8_session_utf8_file = BteqOperator(
+        task_id="execute_bteq_utf8_session_utf8_file",
+        file_path="/home/devtools/satish/airflow/script.bteq",
+        params=params,
+        bteq_script_encoding="UTF8",
+        bteq_session_encoding="UTF8",
+    )
+    # [END bteq_operator_howto_guide_bteq_file_utf8_session_utf8_input]
+    # [START bteq_operator_howto_guide_bteq_file_utf8_session_utf16_input]
+    execute_bteq_utf8_session_utf16_file = BteqOperator(
+        task_id="execute_bteq_utf8_session_utf16_file",
+        file_path="/home/devtools/satish/airflow/script.bteq",
+        params=params,
+        bteq_script_encoding="UTF8",
+        bteq_session_encoding="UTF16",
+    )
+    # [END bteq_operator_howto_guide_bteq_file_utf8_session_utf16_input]
+    # [START bteq_operator_howto_guide_bteq_file_utf16_input]
+    execute_bteq_utf16_file = BteqOperator(
+        task_id="execute_bteq_utf16_file",
+        file_path="/home/devtools/satish/airflow/script_utf16.bteq",
+        params=params,
+        bteq_script_encoding="UTF16",
+    )
+    # [END bteq_operator_howto_guide_bteq_file_utf16_input]
+    # [START bteq_operator_howto_guide_bteq_file_utf16_input]
+    execute_bteq_utf16_session_ascii_file = BteqOperator(
+        task_id="execute_bteq_utf16_session_ascii_file",
+        file_path="/home/devtools/satish/airflow/script_utf16.bteq",
+        params=params,
+        bteq_script_encoding="UTF16",
+        bteq_session_encoding="ASCII",
+    )
+    # [END bteq_operator_howto_guide_bteq_file_utf16_input]
+    # [START bteq_operator_howto_guide_bteq_file_utf16_session_utf8_input]
+    execute_bteq_utf16_session_utf8_file = BteqOperator(
+        task_id="execute_bteq_utf16_session_utf8_file",
+        file_path="/home/devtools/satish/airflow/script_utf16.bteq",
+        params=params,
+        bteq_script_encoding="UTF16",
+        bteq_session_encoding="UTF8",
+    )
+    # [END bteq_operator_howto_guide_bteq_file_utf16_session_utf8_input]
+    # [START bteq_operator_howto_guide_bteq_file_utf16_session_utf8_input]
+    execute_bteq_utf16_session_utf16_file = BteqOperator(
+        task_id="execute_bteq_utf16_session_utf16_file",
+        file_path="/home/devtools/satish/airflow/script_utf16.bteq",
+        params=params,
+        bteq_script_encoding="UTF16",
+        bteq_session_encoding="UTF16",
+    )
+    # [END bteq_operator_howto_guide_bteq_file_utf16_session_utf8_input]
+    (
+        create_table
+        >> populate_table
+        >> export_to_a_file
+        >> get_it_employees
+        >> cond_logic
+        >> error_handling
+        >> drop_table
+        >> execute_bteq_file
+        >> execute_bteq_utf8_file
+        >> execute_bteq_utf8_session_ascii_file
+        >> execute_bteq_utf8_session_utf8_file
+        >> execute_bteq_utf8_session_utf16_file
+        >> execute_bteq_utf16_file
+        >> execute_bteq_utf16_session_ascii_file
+        >> execute_bteq_utf16_session_utf8_file
+        >> execute_bteq_utf16_session_utf16_file
+    )
+
+    # [END bteq_operator_howto_guide]
+
+    from tests_common.test_utils.watcher import watcher
+
+    # This test needs watcher in order to properly mark success/failure
+    # when "tearDown" task with trigger rule is part of the DAG
+    list(dag.tasks) >> watcher()
+
+from tests_common.test_utils.system_tests import get_test_run  # noqa: E402
+
+# Needed to run the example DAG with pytest (see: tests/system/README.md#run_via_pytest)
+test_run = get_test_run(dag)
diff --git a/providers/teradata/tests/system/teradata/script b/providers/teradata/tests/system/teradata/script
new file mode 100644
index 0000000000000..346e647b1aeae
--- /dev/null
+++ b/providers/teradata/tests/system/teradata/script
@@ -0,0 +1,15 @@
+.LOGON {{params.host}}/{{params.username}},{{params.password}}
+.IF ERRORCODE <> 0 THEN .QUIT 8
+.SET WIDTH 500
+.SET SESSION CHARSET 'ASCII'
+DATABASE {{params.DATABASE_NAME}};
+CREATE SET TABLE {{params.TABLE_NAME}} (
+    emp_id INT,
+    emp_name VARCHAR(100),
+    dept VARCHAR(50)
+    ) PRIMARY INDEX (emp_id);
+INSERT INTO {{params.TABLE_NAME}} VALUES (1, 'John Doe', 'IT');
+INSERT INTO {{params.TABLE_NAME}} VALUES (2, 'Jane Smith', 'HR');
+DROP TABLE {{params.TABLE_NAME}};
+.LOGOFF
+.quit 0
diff --git a/providers/teradata/tests/system/teradata/script.bteq b/providers/teradata/tests/system/teradata/script.bteq
new file mode 100644
index 0000000000000..346e647b1aeae
--- /dev/null
+++ b/providers/teradata/tests/system/teradata/script.bteq
@@ -0,0 +1,15 @@
+.LOGON {{params.host}}/{{params.username}},{{params.password}}
+.IF ERRORCODE <> 0 THEN .QUIT 8
+.SET WIDTH 500
+.SET SESSION CHARSET 'ASCII'
+DATABASE {{params.DATABASE_NAME}};
+CREATE SET TABLE {{params.TABLE_NAME}} (
+    emp_id INT,
+    emp_name VARCHAR(100),
+    dept VARCHAR(50)
+    ) PRIMARY INDEX (emp_id);
+INSERT INTO {{params.TABLE_NAME}} VALUES (1, 'John Doe', 'IT');
+INSERT INTO {{params.TABLE_NAME}} VALUES (2, 'Jane Smith', 'HR');
+DROP TABLE {{params.TABLE_NAME}};
+.LOGOFF
+.quit 0
diff --git a/providers/teradata/tests/system/teradata/script.sql b/providers/teradata/tests/system/teradata/script.sql
new file mode 100644
index 0000000000000..84d93c5fe9aea
--- /dev/null
+++ b/providers/teradata/tests/system/teradata/script.sql
@@ -0,0 +1,29 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+*/
+
+DATABASE {{params.DATABASE_NAME}};
+CREATE SET TABLE {{params.TABLE_NAME}} (
+          emp_id INT,
+          emp_name VARCHAR(100),
+          dept VARCHAR(50)
+        ) PRIMARY INDEX (emp_id);
+INSERT INTO {{params.TABLE_NAME}} VALUES (1, 'John Doe', 'IT');
+INSERT INTO {{params.TABLE_NAME}} VALUES (2, 'Jane Smith', 'HR');
+SELECT * FROM {{params.TABLE_NAME}};
+DROP TABLE {{params.TABLE_NAME}};
diff --git a/providers/teradata/tests/system/teradata/script_utf16.bteq b/providers/teradata/tests/system/teradata/script_utf16.bteq
new file mode 100644
index 0000000000000000000000000000000000000000..34d329deb91b007542852df992eb67bd09df78c4
GIT binary patch
diff --git a/providers/teradata/tests/unit/teradata/hooks/test_bteq.py b/providers/teradata/tests/unit/teradata/hooks/test_bteq.py
new file mode 100644
index 0000000000000..46b50e652b597
--- /dev/null
+++ b/providers/teradata/tests/unit/teradata/hooks/test_bteq.py
@@ -0,0 +1,364 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import os
+import subprocess
+from unittest.mock import MagicMock, patch
+
+import pytest
+
+from airflow.exceptions import AirflowException
+from airflow.providers.teradata.hooks.bteq import BteqHook
+
+
+@pytest.fixture
+def dummy_bteq_script():
+    return "SELECT * FROM dbc.tables;"
+
+
+@pytest.fixture
+def dummy_remote_dir():
+    return "/tmp"
+
+
+@pytest.fixture
+def dummy_encoding():
+    return "utf-8"
+
+
+@pytest.fixture
+def dummy_password():
+    return "dummy_password"
+
+
+@pytest.fixture
+def hook_without_ssh():
+    return BteqHook(ssh_conn_id=None, teradata_conn_id="teradata_conn")
+
+
+@patch("airflow.providers.teradata.hooks.bteq.SSHHook")
+def test_init_sets_ssh_hook(mock_ssh_hook_class):
+    mock_ssh_instance = MagicMock()
+    mock_ssh_hook_class.return_value = mock_ssh_instance
+
+    hook = BteqHook(ssh_conn_id="ssh_conn_id", teradata_conn_id="teradata_conn")
+
+    # Validate the call and assignment
+    mock_ssh_hook_class.assert_called_once_with(ssh_conn_id="ssh_conn_id")
+    assert hook.ssh_hook == mock_ssh_instance
+
+
+@patch("subprocess.Popen")
+@patch.object(
+    BteqHook,
+    "get_conn",
+    return_value={
+        "host": "localhost",
+        "login": "user",
+        "password": "pass",
+        "sp": None,
+    },
+)
+@patch("airflow.providers.teradata.utils.bteq_util.verify_bteq_installed")
+@patch("airflow.providers.teradata.utils.bteq_util.prepare_bteq_command_for_local_execution")
+def test_execute_bteq_script_at_local_timeout(
+    mock_prepare_cmd,
+    mock_verify_bteq,
+    mock_get_conn,
+    mock_popen,
+):
+    hook = BteqHook(ssh_conn_id=None, teradata_conn_id="teradata_conn")
+
+    # Create mock process with timeout simulation
+    mock_process = MagicMock()
+    mock_process.communicate.return_value = (b"some output", None)
+    mock_process.wait.side_effect = subprocess.TimeoutExpired(cmd="bteq_command", timeout=5)
+    mock_process.returncode = None
+    mock_popen.return_value = mock_process
+    mock_prepare_cmd.return_value = "bteq_command"
+
+    with pytest.raises(AirflowException):
+        hook.execute_bteq_script_at_local(
+            bteq_script="SELECT * FROM test;",
+            bteq_script_encoding="utf-8",
+            timeout=5,
+            timeout_rc=None,
+            bteq_quit_rc=0,
+            bteq_session_encoding=None,
+            temp_file_read_encoding=None,
+        )
+
+
+@patch("subprocess.Popen")
+@patch.object(
+    BteqHook,
+    "get_conn",
+    return_value={
+        "host": "localhost",
+        "login": "user",
+        "password": "pass",
+        "sp": None,
+    },
+)
+@patch("airflow.providers.teradata.hooks.bteq.verify_bteq_installed")  # <- patch here
+@patch("airflow.providers.teradata.hooks.bteq.prepare_bteq_command_for_local_execution")  # <- patch here too
+def test_execute_bteq_script_at_local_success(
+    mock_prepare_cmd,
+    mock_verify_bteq,
+    mock_get_conn,
+    mock_popen,
+):
+    hook = BteqHook(teradata_conn_id="teradata_conn")
+
+    mock_process = MagicMock()
+    mock_process.communicate.return_value = (b"Output line 1\nOutput line 2\n", None)
+    mock_process.wait.return_value = 0
+    mock_process.returncode = 0
+    mock_popen.return_value = mock_process
+    mock_prepare_cmd.return_value = "bteq_command"
+
+    ret_code = hook.execute_bteq_script_at_local(
+        bteq_script="SELECT * FROM test;",
+        bteq_script_encoding="utf-8",
+        timeout=10,
+        timeout_rc=None,
+        bteq_quit_rc=0,
+        bteq_session_encoding=None,
+        temp_file_read_encoding=None,
+    )
+
+    mock_verify_bteq.assert_called_once()
+    mock_prepare_cmd.assert_called_once()
+    mock_popen.assert_called_once_with(
+        "bteq_command",
+        stdin=subprocess.PIPE,
+        stdout=subprocess.PIPE,
+        stderr=subprocess.STDOUT,
+        shell=True,
+        preexec_fn=os.setsid,
+    )
+    assert ret_code == 0
+
+
+@patch("subprocess.Popen")
+@patch.object(
+    BteqHook,
+    "get_conn",
+    return_value={
+        "host": "localhost",
+        "login": "user",
+        "password": "pass",
+        "sp": None,
+    },
+)
+@patch("airflow.providers.teradata.hooks.bteq.verify_bteq_installed")
+@patch("airflow.providers.teradata.hooks.bteq.prepare_bteq_command_for_local_execution")
+def test_execute_bteq_script_at_local_failure_raises(
+    mock_prepare_cmd,
+    mock_verify_bteq,
+    mock_get_conn,
+    mock_popen,
+):
+    hook = BteqHook(ssh_conn_id=None, teradata_conn_id="teradata_conn")
+
+    failure_message = "Failure: some error occurred"
+
+    mock_process = MagicMock()
+    # The output contains "Failure"
+    mock_process.communicate.return_value = (failure_message.encode("utf-8"), None)
+    mock_process.wait.return_value = 1
+    mock_process.returncode = 1
+    mock_popen.return_value = mock_process
+    mock_prepare_cmd.return_value = "bteq_command"
+
+    with pytest.raises(AirflowException, match="BTEQ task failed with error: Failure: some error occurred"):
+        hook.execute_bteq_script_at_local(
+            bteq_script="SELECT * FROM test;",
+            bteq_script_encoding="utf-8",
+            timeout=10,
+            timeout_rc=None,
+            bteq_quit_rc=0,  # 1 is not allowed here
+            bteq_session_encoding=None,
+            temp_file_read_encoding=None,
+        )
+
+
+@pytest.fixture(autouse=False)
+def patch_ssh_hook_class():
+    # Patch SSHHook where bteq.py imports it
+    with patch("airflow.providers.teradata.hooks.bteq.SSHHook") as mock_ssh_hook_class:
+        mock_ssh_instance = MagicMock()
+        mock_ssh_hook_class.return_value = mock_ssh_instance
+        yield mock_ssh_hook_class
+
+
+@pytest.fixture
+def hook_with_ssh(patch_ssh_hook_class):
+    # Now the BteqHook() call will use the patched SSHHook
+    return BteqHook(ssh_conn_id="ssh_conn_id", teradata_conn_id="teradata_conn")
+
+
+@patch("airflow.providers.teradata.hooks.bteq.SSHHook")
+@patch("airflow.providers.teradata.hooks.bteq.verify_bteq_installed_remote")
+@patch("airflow.providers.teradata.hooks.bteq.generate_random_password", return_value="test_password")
+@patch("airflow.providers.teradata.hooks.bteq.generate_encrypted_file_with_openssl")
+@patch("airflow.providers.teradata.hooks.bteq.transfer_file_sftp")
+@patch(
+    "airflow.providers.teradata.hooks.bteq.prepare_bteq_command_for_remote_execution",
+    return_value="bteq_command",
+)
+@patch(
+    "airflow.providers.teradata.hooks.bteq.decrypt_remote_file_to_string", return_value=(0, ["output"], [])
+)
+def test_execute_bteq_script_at_remote_success(
+    mock_decrypt,
+    mock_prepare_cmd,
+    mock_transfer,
+    mock_encrypt,
+    mock_password,
+    mock_verify,
+    mock_ssh_hook_class,
+):
+    # Mock SSHHook instance and its get_conn() context manager
+    mock_ssh_hook = MagicMock()
+    mock_ssh_client = MagicMock()
+    mock_ssh_hook.get_conn.return_value.__enter__.return_value = mock_ssh_client
+    mock_ssh_hook_class.return_value = mock_ssh_hook
+
+    # Instantiate BteqHook with ssh_conn_id (will use mocked SSHHook)
+    hook = BteqHook(ssh_conn_id="ssh_conn_id", teradata_conn_id="teradata_conn")
+
+    # Call method under test
+    ret_code = hook.execute_bteq_script_at_remote(
+        bteq_script="SELECT 1;",
+        remote_working_dir="/tmp",
+        bteq_script_encoding="utf-8",
+        timeout=10,
+        timeout_rc=None,
+        bteq_session_encoding="utf-8",
+        bteq_quit_rc=0,
+        temp_file_read_encoding=None,
+    )
+
+    # Assert mocks called as expected
+    mock_verify.assert_called_once_with(mock_ssh_client)
+    mock_password.assert_called_once()
+    mock_encrypt.assert_called_once()
+    mock_transfer.assert_called_once()
+    mock_prepare_cmd.assert_called_once()
+    mock_decrypt.assert_called_once()
+
+    # Assert the return code is what decrypt_remote_file_to_string returns (0 here)
+    assert ret_code == 0
+
+
+def test_on_kill_terminates_process(hook_without_ssh):
+    process_mock = MagicMock()
+    # Patch the hook's get_conn method to return a dict with the mocked process
+    with patch.object(hook_without_ssh, "get_conn", return_value={"sp": process_mock}):
+        hook_without_ssh.on_kill()
+
+        process_mock.terminate.assert_called_once()
+        process_mock.wait.assert_called_once()
+
+
+def test_on_kill_no_process(hook_without_ssh):
+    # Mock get_connection to avoid AirflowNotFoundException
+    with patch.object(hook_without_ssh, "get_connection", return_value={"host": "dummy_host"}):
+        # Provide a dummy conn dict to avoid errors
+        with patch.object(hook_without_ssh, "get_conn", return_value={"sp": None}):
+            # This should not raise any exceptions even if sp (process) is None
+            hook_without_ssh.on_kill()
+
+
+@patch("airflow.providers.teradata.hooks.bteq.verify_bteq_installed_remote")
+def test_transfer_to_and_execute_bteq_on_remote_ssh_failure(mock_verify, hook_with_ssh):
+    # Patch get_conn to simulate SSH failure by returning None
+    hook_with_ssh.ssh_hook.get_conn = MagicMock(return_value=None)
+
+    # Patch helper functions used in the tested function to avoid side effects
+    with (
+        patch("airflow.providers.teradata.hooks.bteq.generate_random_password", return_value="password"),
+        patch("airflow.providers.teradata.hooks.bteq.generate_encrypted_file_with_openssl"),
+        patch("airflow.providers.teradata.hooks.bteq.transfer_file_sftp"),
+        patch(
+            "airflow.providers.teradata.hooks.bteq.prepare_bteq_command_for_remote_execution",
+            return_value="cmd",
+        ),
+        patch(
+            "airflow.providers.teradata.hooks.bteq.decrypt_remote_file_to_string", return_value=(0, [], [])
+        ),
+    ):
+        with pytest.raises(AirflowException) as excinfo:
+            hook_with_ssh._transfer_to_and_execute_bteq_on_remote(
+                file_path="/tmp/fakefile",
+                remote_working_dir="/tmp",
+                bteq_script_encoding="utf-8",
+                timeout=10,
+                timeout_rc=None,
+                bteq_quit_rc=0,
+                bteq_session_encoding="utf-8",
+                tmp_dir="/tmp",
+            )
+        assert "SSH connection is not established" in str(excinfo.value)
+
+
+@patch("airflow.providers.teradata.hooks.bteq.verify_bteq_installed_remote")
+@patch("airflow.providers.teradata.hooks.bteq.generate_random_password", return_value="testpass")
+@patch("airflow.providers.teradata.hooks.bteq.generate_encrypted_file_with_openssl")
+@patch("airflow.providers.teradata.hooks.bteq.transfer_file_sftp")
+@patch(
+    "airflow.providers.teradata.hooks.bteq.prepare_bteq_command_for_remote_execution",
+    return_value="bteq_remote_command",
+)
+@patch(
+    "airflow.providers.teradata.hooks.bteq.decrypt_remote_file_to_string",
+    side_effect=Exception("mocked exception"),
+)
+def test_remote_execution_cleanup_on_exception(
+    mock_decrypt,
+    mock_prepare,
+    mock_transfer,
+    mock_generate_enc,
+    mock_generate_pass,
+    mock_verify_remote,
+    hook_with_ssh,
+):
+    temp_dir = "/tmp"
+    local_file_path = os.path.join(temp_dir, "bteq_script.txt")
+    remote_working_dir = temp_dir
+
+    # Make sure the local encrypted file exists for cleanup
+    encrypted_file_path = os.path.join(temp_dir, "bteq_script.enc")
+    with open(encrypted_file_path, "w") as f:
+        f.write("dummy")
+
+    with pytest.raises(AirflowException):
+        hook_with_ssh._transfer_to_and_execute_bteq_on_remote(
+            file_path=local_file_path,
+            remote_working_dir=remote_working_dir,
+            bteq_script_encoding="utf-8",
+            timeout=5,
+            timeout_rc=None,
+            bteq_quit_rc=0,
+            bteq_session_encoding="utf-8",
+            tmp_dir=temp_dir,
+        )
+
+    # After exception, encrypted file should be deleted
+    assert not os.path.exists(encrypted_file_path)
diff --git a/providers/teradata/tests/unit/teradata/hooks/test_ttu.py b/providers/teradata/tests/unit/teradata/hooks/test_ttu.py
new file mode 100644
index 0000000000000..2c49cb7401819
--- /dev/null
+++ b/providers/teradata/tests/unit/teradata/hooks/test_ttu.py
@@ -0,0 +1,136 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import subprocess
+from unittest import mock
+
+import pytest
+
+from airflow.exceptions import AirflowException
+from airflow.providers.teradata.hooks.ttu import TtuHook
+
+
+class TestTtuHook:
+    @mock.patch("airflow.providers.teradata.hooks.ttu.TtuHook.get_connection")
+    def test_get_conn_with_valid_params(self, mock_get_connection):
+        # Setup
+        mock_conn = mock.MagicMock()
+        mock_conn.login = "test_user"
+        mock_conn.password = "test_pass"
+        mock_conn.host = "test_host"
+        mock_conn.extra_dejson = {}
+        mock_get_connection.return_value = mock_conn
+
+        # Execute
+        hook = TtuHook()
+        conn = hook.get_conn()
+
+        # Assert
+        assert conn["login"] == "test_user"
+        assert conn["password"] == "test_pass"
+        assert conn["host"] == "test_host"
+
+    @mock.patch("airflow.providers.teradata.hooks.ttu.TtuHook.get_connection")
+    def test_get_conn_missing_params(self, mock_get_connection):
+        # Setup
+        mock_conn = mock.MagicMock()
+        mock_conn.login = None
+        mock_conn.password = "test_pass"
+        mock_conn.host = "test_host"
+        mock_conn.extra_dejson = {}
+        mock_get_connection.return_value = mock_conn
+
+        # Execute and Assert
+        hook = TtuHook()
+        with pytest.raises(AirflowException, match="Missing required connection parameters"):
+            hook.get_conn()
+
+    @mock.patch("subprocess.Popen")
+    @mock.patch("airflow.providers.teradata.hooks.ttu.TtuHook.get_connection")
+    def test_close_conn_subprocess_running(self, mock_get_connection, mock_popen):
+        # Setup
+        mock_conn = mock.MagicMock()
+        mock_conn.login = "test_user"
+        mock_conn.password = "test_pass"
+        mock_conn.host = "test_host"
+        mock_conn.extra_dejson = {}
+        mock_get_connection.return_value = mock_conn
+
+        mock_process = mock.MagicMock()
+        mock_process.poll.return_value = None
+        mock_popen.return_value = mock_process
+
+        # Execute
+        hook = TtuHook()
+        conn = hook.get_conn()
+        conn["sp"] = mock_process
+        hook.close_conn()
+
+        # Assert
+        mock_process.terminate.assert_called_once()
+        mock_process.wait.assert_called_once_with(timeout=5)
+        assert hook.conn is None
+
+    @mock.patch("subprocess.Popen")
+    @mock.patch("airflow.providers.teradata.hooks.ttu.TtuHook.get_connection")
+    def test_close_conn_subprocess_timeout(self, mock_get_connection, mock_popen):
+        # Setup
+        mock_conn = mock.MagicMock()
+        mock_conn.login = "test_user"
+        mock_conn.password = "test_pass"
+        mock_conn.host = "test_host"
+        mock_conn.extra_dejson = {}
+        mock_get_connection.return_value = mock_conn
+
+        mock_process = mock.MagicMock()
+        mock_process.poll.return_value = None
+        mock_process.wait.side_effect = subprocess.TimeoutExpired(cmd="test", timeout=5)
+        mock_popen.return_value = mock_process
+
+        # Execute
+        hook = TtuHook()
+        conn = hook.get_conn()
+        conn["sp"] = mock_process
+        hook.close_conn()
+
+        # Assert
+        mock_process.terminate.assert_called_once()
+        mock_process.wait.assert_called_once()
+        mock_process.kill.assert_called_once()
+        assert hook.conn is None
+
+    @mock.patch("airflow.providers.teradata.hooks.ttu.TtuHook.__exit__")
+    @mock.patch("airflow.providers.teradata.hooks.ttu.TtuHook.__enter__")
+    def test_hook_context_manager(self, mock_enter, mock_exit):
+        # Setup
+        hook = TtuHook()
+        mock_enter.return_value = hook
+
+        # Execute
+        with hook as h:
+            assert h == hook
+
+        # Assert
+        mock_exit.assert_called_once()
+        # Ensure the exit method was called with the correct parameters
+        # Context manager's __exit__ is called with (exc_type, exc_val, exc_tb)
+        args = mock_exit.call_args[0]
+        assert len(args) == 3  # Verify we have the correct number of arguments
+        assert args[0] is None  # type should be None
+        assert args[1] is None  # value should be None
+        assert args[2] is None  # traceback should be None
diff --git a/providers/teradata/tests/unit/teradata/operators/test_bteq.py b/providers/teradata/tests/unit/teradata/operators/test_bteq.py
new file mode 100644
index 0000000000000..d6690096aa83f
--- /dev/null
+++ b/providers/teradata/tests/unit/teradata/operators/test_bteq.py
@@ -0,0 +1,288 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import logging
+import tempfile
+import unittest
+from unittest import mock
+
+import pytest
+
+from airflow.providers.teradata.hooks.bteq import BteqHook
+from airflow.providers.teradata.operators.bteq import BteqOperator
+
+log = logging.getLogger(__name__)
+
+
+class TestBteqOperator:
+    @mock.patch.object(BteqHook, "execute_bteq_script")
+    @mock.patch.object(BteqHook, "__init__", return_value=None)
+    def test_execute(self, mock_hook_init, mock_execute_bteq):
+        task_id = "test_bteq_operator"
+        sql = "SELECT * FROM my_table;"
+        teradata_conn_id = "teradata_default"
+        mock_context = {}
+        # Given
+        expected_result = "BTEQ execution result"
+        mock_execute_bteq.return_value = expected_result
+        operator = BteqOperator(
+            task_id=task_id,
+            sql=sql,
+            teradata_conn_id=teradata_conn_id,
+        )
+
+        # When
+        result = operator.execute(mock_context)
+
+        # Then
+        mock_hook_init.assert_called_once_with(teradata_conn_id=teradata_conn_id, ssh_conn_id=None)
+        mock_execute_bteq.assert_called_once_with(sql + "\n.EXIT", "/tmp", "", 600, None, "", None, "UTF-8")
+        assert result == "BTEQ execution result"
+
+    @mock.patch.object(BteqHook, "execute_bteq_script")
+    @mock.patch.object(BteqHook, "__init__", return_value=None)
+    def test_execute_sql_only(self, mock_hook_init, mock_execute_bteq):
+        # Arrange
+        task_id = "test_bteq_operator"
+        sql = "SELECT * FROM my_table;"
+        teradata_conn_id = "teradata_default"
+        mock_context = {}
+        expected_result = "BTEQ execution result"
+        mock_execute_bteq.return_value = expected_result
+
+        operator = BteqOperator(
+            task_id=task_id,
+            sql=sql,
+            teradata_conn_id=teradata_conn_id,
+        )
+        # Manually set _hook since we bypassed __init__
+        operator._hook = mock.MagicMock()
+        operator._hook.execute_bteq_script = mock_execute_bteq
+
+        # Act
+        result = operator.execute(mock_context)
+
+        # Assert
+        mock_hook_init.assert_called_once_with(teradata_conn_id=teradata_conn_id, ssh_conn_id=None)
+        mock_execute_bteq.assert_called_once_with(
+            sql + "\n.EXIT",  # Assuming the prepare_bteq_script_for_local_execution appends ".EXIT"
+            "/tmp",  # default remote_working_dir
+            "",  # bteq_script_encoding (default ASCII => empty string)
+            600,  # timeout default
+            None,  # timeout_rc
+            "",  # bteq_session_encoding
+            None,  # bteq_quit_rc
+            "UTF-8",
+        )
+        assert result == expected_result
+
+    @mock.patch("airflow.providers.teradata.operators.bteq.BteqHook.execute_bteq_script")
+    @mock.patch("airflow.providers.teradata.operators.bteq.BteqHook.__init__", return_value=None)
+    def test_execute_sql_local(self, mock_hook_init, mock_execute_script):
+        sql = "SELECT * FROM test_table;"
+        expected_result = 0
+        mock_execute_script.return_value = expected_result
+        context = {}
+
+        op = BteqOperator(
+            task_id="test_local_sql",
+            sql=sql,
+            teradata_conn_id="td_conn",
+        )
+        op._hook = mock.Mock()
+        op._hook.execute_bteq_script = mock_execute_script
+
+        result = op.execute(context)
+
+        mock_hook_init.assert_called_once_with(teradata_conn_id="td_conn", ssh_conn_id=None)
+        mock_execute_script.assert_called_once()
+        assert result == expected_result
+
+    @mock.patch.object(BteqHook, "on_kill")
+    def test_on_kill(self, mock_on_kill):
+        task_id = "test_bteq_operator"
+        sql = "SELECT * FROM my_table;"
+        # Given
+        operator = BteqOperator(
+            task_id=task_id,
+            sql=sql,
+        )
+        operator._hook = BteqHook(None)
+
+        # When
+        operator.on_kill()
+
+        # Then
+        mock_on_kill.assert_called_once()
+
+    def test_on_kill_not_initialized(self):
+        task_id = "test_bteq_operator"
+        sql = "SELECT * FROM my_table;"
+        # Given
+        operator = BteqOperator(
+            task_id=task_id,
+            sql=sql,
+        )
+        operator._hook = None
+
+        # When/Then (no exception should be raised)
+        operator.on_kill()
+
+    def test_template_fields(self):
+        # Verify template fields are defined correctly
+        print(BteqOperator.template_fields)
+        assert BteqOperator.template_fields == "sql"
+
+    def test_execute_raises_if_no_sql_or_file(self):
+        op = BteqOperator(task_id="fail_case", teradata_conn_id="td_conn")
+        with pytest.raises(ValueError, match="requires either the 'sql' or 'file_path' parameter"):
+            op.execute({})
+
+    @mock.patch("airflow.providers.teradata.operators.bteq.is_valid_file", return_value=False)
+    def test_invalid_file_path(self, mock_is_valid_file):
+        op = BteqOperator(
+            task_id="fail_invalid_file",
+            file_path="/invalid/path.sql",
+            teradata_conn_id="td_conn",
+        )
+        with pytest.raises(ValueError, match="is invalid or does not exist"):
+            op.execute({})
+
+    @mock.patch("airflow.providers.teradata.operators.bteq.is_valid_file", return_value=True)
+    @mock.patch(
+        "airflow.providers.teradata.operators.bteq.is_valid_encoding",
+        side_effect=UnicodeDecodeError("utf8", b"", 0, 1, "error"),
+    )
+    def test_file_encoding_error(self, mock_encoding, mock_valid_file):
+        op = BteqOperator(
+            task_id="encoding_fail",
+            file_path="/tmp/test.sql",
+            bteq_script_encoding="UTF-8",
+            teradata_conn_id="td_conn",
+        )
+        with pytest.raises(ValueError, match="encoding is different from BTEQ I/O encoding"):
+            op.execute({})
+
+    @mock.patch("airflow.providers.teradata.operators.bteq.BteqHook.execute_bteq_script")
+    @mock.patch("airflow.providers.teradata.operators.bteq.is_valid_file", return_value=True)
+    @mock.patch("airflow.providers.teradata.operators.bteq.is_valid_encoding")
+    @mock.patch("airflow.providers.teradata.operators.bteq.read_file")
+    def test_execute_local_file(
+        self,
+        mock_read_file,
+        mock_valid_encoding,
+        mock_valid_file,
+        mock_execute_bteq_script,
+    ):
+        mock_execute_bteq_script.return_value = 0
+        sql_content = "SELECT * FROM table_name;"
+        mock_read_file.return_value = sql_content
+
+        with tempfile.NamedTemporaryFile("w+", suffix=".sql", delete=False) as tmp_file:
+            tmp_file.write(sql_content)
+            tmp_file_path = tmp_file.name
+
+        op = BteqOperator(
+            task_id="test_bteq_local_file",
+            file_path=tmp_file_path,
+            teradata_conn_id="teradata_default",
+        )
+
+        result = op.execute(context={})
+
+        assert result == 0
+        mock_execute_bteq_script.assert_called_once()
+
+    def test_on_kill_calls_hook(self):
+        op = BteqOperator(task_id="kill_test", teradata_conn_id="td_conn")
+        op._hook = mock.Mock()
+        op.on_kill()
+        op._hook.on_kill.assert_called_once()
+
+    def test_on_kill_logs_if_no_hook(self):
+        op = BteqOperator(task_id="kill_no_hook", teradata_conn_id="td_conn")
+        op._hook = None
+
+        with mock.patch.object(op.log, "warning") as mock_log_info:
+            op.on_kill()
+            mock_log_info.assert_called_once_with("BteqHook was not initialized. Nothing to terminate.")
+
+    @mock.patch("airflow.providers.teradata.operators.bteq.BteqHook.execute_bteq_script")
+    @mock.patch("airflow.providers.teradata.operators.bteq.BteqHook.get_conn")
+    @mock.patch("airflow.providers.teradata.operators.bteq.SSHHook")
+    @mock.patch("airflow.providers.teradata.operators.bteq.BteqHook.__init__", return_value=None)
+    def test_remote_execution_with_sql(
+        self,
+        mock_bteq_hook_init,
+        mock_ssh_hook_class,
+        mock_get_conn,
+        mock_execute_bteq_script,
+    ):
+        mock_execute_bteq_script.return_value = 0
+        mock_ssh_hook_instance = mock.Mock()
+        mock_ssh_hook_class.return_value = mock_ssh_hook_instance
+
+        op = BteqOperator(
+            task_id="test_remote_sql",
+            sql="SELECT * FROM customers;",
+            ssh_conn_id="ssh_default",
+            teradata_conn_id="teradata_default",
+        )
+
+        result = op.execute(context={})
+
+        mock_bteq_hook_init.assert_called_once_with(
+            teradata_conn_id="teradata_default", ssh_conn_id="ssh_default"
+        )
+        mock_execute_bteq_script.assert_called_once()
+        assert result == 0
+
+    @mock.patch("airflow.models.BaseOperator.render_template")
+    def test_render_template_in_sql(self, mock_render):
+        op = BteqOperator(task_id="render_test", sql="SELECT * FROM {{ params.table }};")
+        mock_render.return_value = "SELECT * FROM my_table;"
+        rendered_sql = op.render_template("sql", op.sql, context={"params": {"table": "my_table"}})
+        assert rendered_sql == "SELECT * FROM my_table;"
+
+    @mock.patch("airflow.providers.teradata.operators.bteq.BteqHook.execute_bteq_script", return_value=99)
+    @mock.patch("airflow.providers.teradata.operators.bteq.BteqHook.__init__", return_value=None)
+    def test_bteq_timeout_with_custom_rc(self, mock_hook_init, mock_exec):
+        op = BteqOperator(
+            task_id="timeout_case",
+            sql="SELECT 1",
+            teradata_conn_id="td_conn",
+            timeout=30,
+            timeout_rc=99,
+            bteq_quit_rc=[99],
+        )
+        result = op.execute({})
+        assert result == 99
+        mock_exec.assert_called_once()
+
+    @mock.patch("airflow.providers.teradata.operators.bteq.BteqHook.execute_bteq_script", return_value=42)
+    @mock.patch("airflow.providers.teradata.operators.bteq.BteqHook.__init__", return_value=None)
+    def test_bteq_return_code_not_in_quit_rc(self, mock_hook_init, mock_exec):
+        op = BteqOperator(
+            task_id="rc_not_allowed", sql="SELECT 1", teradata_conn_id="td_conn", bteq_quit_rc=[0, 1]
+        )
+        result = op.execute({})
+        assert result == 42  # still returns, but caller can fail on RC if desired
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/providers/teradata/tests/unit/teradata/utils/test_bteq_util.py b/providers/teradata/tests/unit/teradata/utils/test_bteq_util.py
new file mode 100644
index 0000000000000..f0ee54aaa6804
--- /dev/null
+++ b/providers/teradata/tests/unit/teradata/utils/test_bteq_util.py
@@ -0,0 +1,187 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import os
+import stat
+import unittest
+from unittest.mock import MagicMock, patch
+
+import pytest
+
+from airflow.exceptions import AirflowException
+from airflow.providers.teradata.utils.bteq_util import (
+    is_valid_encoding,
+    is_valid_file,
+    is_valid_remote_bteq_script_file,
+    prepare_bteq_script_for_local_execution,
+    prepare_bteq_script_for_remote_execution,
+    read_file,
+    transfer_file_sftp,
+    verify_bteq_installed,
+    verify_bteq_installed_remote,
+)
+
+
+class TestBteqUtils:
+    @patch("shutil.which")
+    def test_verify_bteq_installed_success(self, mock_which):
+        mock_which.return_value = "/usr/bin/bteq"
+        # Should not raise
+        verify_bteq_installed()
+        mock_which.assert_called_with("bteq")
+
+    @patch("shutil.which")
+    def test_verify_bteq_installed_fail(self, mock_which):
+        mock_which.return_value = None
+        with pytest.raises(AirflowException):
+            verify_bteq_installed()
+
+    def test_prepare_bteq_script_for_remote_execution(self):
+        conn = {"host": "myhost", "login": "user", "password": "pass"}
+        sql = "SELECT * FROM DUAL;"
+        script = prepare_bteq_script_for_remote_execution(conn, sql)
+        assert ".LOGON myhost/user,pass" in script
+        assert "SELECT * FROM DUAL;" in script
+        assert ".EXIT" in script
+
+    def test_prepare_bteq_script_for_local_execution(self):
+        sql = "SELECT 1;"
+        script = prepare_bteq_script_for_local_execution(sql)
+        assert "SELECT 1;" in script
+        assert ".EXIT" in script
+
+    @patch("paramiko.SSHClient.exec_command")
+    def test_verify_bteq_installed_remote_success(self, mock_exec):
+        mock_stdin = MagicMock()
+        mock_stdout = MagicMock()
+        mock_stderr = MagicMock()
+        mock_stdout.channel.recv_exit_status.return_value = 0
+        mock_stdout.read.return_value = b"/usr/bin/bteq"
+        mock_stderr.read.return_value = b""
+        mock_exec.return_value = (mock_stdin, mock_stdout, mock_stderr)
+
+        ssh_client = MagicMock()
+        ssh_client.exec_command = mock_exec
+
+        # Should not raise
+        verify_bteq_installed_remote(ssh_client)
+
+    @patch("paramiko.SSHClient.exec_command")
+    def test_verify_bteq_installed_remote_fail(self, mock_exec):
+        mock_stdin = MagicMock()
+        mock_stdout = MagicMock()
+        mock_stderr = MagicMock()
+        mock_stdout.channel.recv_exit_status.return_value = 1
+        mock_stdout.read.return_value = b""
+        mock_stderr.read.return_value = b"command not found"
+        mock_exec.return_value = (mock_stdin, mock_stdout, mock_stderr)
+
+        ssh_client = MagicMock()
+        ssh_client.exec_command = mock_exec
+
+        with pytest.raises(AirflowException):
+            verify_bteq_installed_remote(ssh_client)
+
+    @patch("paramiko.SSHClient.open_sftp")
+    def test_transfer_file_sftp(self, mock_open_sftp):
+        mock_sftp = MagicMock()
+        mock_open_sftp.return_value = mock_sftp
+
+        ssh_client = MagicMock()
+        ssh_client.open_sftp = mock_open_sftp
+
+        transfer_file_sftp(ssh_client, "local_file.txt", "remote_file.txt")
+
+        mock_open_sftp.assert_called_once()
+        mock_sftp.put.assert_called_once_with("local_file.txt", "remote_file.txt")
+        mock_sftp.close.assert_called_once()
+
+    def test_is_valid_file(self):
+        # create temp file
+        with open("temp_test_file.txt", "w") as f:
+            f.write("hello")
+
+        assert is_valid_file("temp_test_file.txt") is True
+        assert is_valid_file("non_existent_file.txt") is False
+
+        os.remove("temp_test_file.txt")
+
+    def test_is_valid_encoding(self):
+        # Write a file with UTF-8 encoding
+        with open("temp_utf8_file.txt", "w", encoding="utf-8") as f:
+            f.write("hello world")
+
+        # Should return True
+        assert is_valid_encoding("temp_utf8_file.txt", encoding="utf-8") is True
+
+        # Cleanup
+        os.remove("temp_utf8_file.txt")
+
+    def test_read_file_success(self):
+        content = "Sample content"
+        with open("temp_read_file.txt", "w") as f:
+            f.write(content)
+
+        read_content = read_file("temp_read_file.txt")
+        assert read_content == content
+        os.remove("temp_read_file.txt")
+
+    def test_read_file_file_not_found(self):
+        with pytest.raises(FileNotFoundError):
+            read_file("non_existent_file.txt")
+
+    @patch("paramiko.SSHClient.open_sftp")
+    def test_is_valid_remote_bteq_script_file_exists(self, mock_open_sftp):
+        mock_sftp = MagicMock()
+        mock_open_sftp.return_value = mock_sftp
+
+        # Mock stat to return a regular file mode
+        mock_stat = MagicMock()
+        mock_stat.st_mode = stat.S_IFREG
+        mock_sftp.stat.return_value = mock_stat
+
+        ssh_client = MagicMock()
+        ssh_client.open_sftp = mock_open_sftp
+
+        result = is_valid_remote_bteq_script_file(ssh_client, "/remote/path/to/file")
+        assert result is True
+        mock_sftp.close.assert_called_once()
+
+    @patch("paramiko.SSHClient.open_sftp")
+    def test_is_valid_remote_bteq_script_file_not_exists(self, mock_open_sftp):
+        mock_sftp = MagicMock()
+        mock_open_sftp.return_value = mock_sftp
+
+        # Raise FileNotFoundError for stat
+        mock_sftp.stat.side_effect = FileNotFoundError
+
+        ssh_client = MagicMock()
+        ssh_client.open_sftp = mock_open_sftp
+
+        result = is_valid_remote_bteq_script_file(ssh_client, "/remote/path/to/file")
+        assert result is False
+        mock_sftp.close.assert_called_once()
+
+    def test_is_valid_remote_bteq_script_file_none_path(self):
+        ssh_client = MagicMock()
+        result = is_valid_remote_bteq_script_file(ssh_client, None)
+        assert result is False
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/providers/teradata/tests/unit/teradata/utils/test_encryption_utils.py b/providers/teradata/tests/unit/teradata/utils/test_encryption_utils.py
new file mode 100644
index 0000000000000..ba688182ae6a9
--- /dev/null
+++ b/providers/teradata/tests/unit/teradata/utils/test_encryption_utils.py
@@ -0,0 +1,108 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import string
+import unittest
+from unittest.mock import MagicMock, patch
+
+from airflow.providers.teradata.utils.encryption_utils import (
+    decrypt_remote_file_to_string,
+    generate_encrypted_file_with_openssl,
+    generate_random_password,
+    shell_quote_single,
+)
+
+
+class TestEncryptionUtils:
+    def test_generate_random_password_length(self):
+        pwd = generate_random_password(16)
+        assert len(pwd) == 16
+        # Check characters are in allowed set
+        allowed_chars = string.ascii_letters + string.digits + string.punctuation
+        assert (all(c in allowed_chars for c in pwd)) is True
+
+    @patch("subprocess.run")
+    def test_generate_encrypted_file_with_openssl_calls_subprocess(self, mock_run):
+        file_path = "/tmp/plain.txt"
+        password = "testpass"
+        out_file = "/tmp/encrypted.enc"
+
+        generate_encrypted_file_with_openssl(file_path, password, out_file)
+
+        mock_run.assert_called_once_with(
+            [
+                "openssl",
+                "enc",
+                "-aes-256-cbc",
+                "-salt",
+                "-pbkdf2",
+                "-pass",
+                f"pass:{password}",
+                "-in",
+                file_path,
+                "-out",
+                out_file,
+            ],
+            check=True,
+        )
+
+    def test_shell_quote_single_simple(self):
+        s = "simple"
+        quoted = shell_quote_single(s)
+        assert quoted == "'simple'"
+
+    def test_shell_quote_single_with_single_quote(self):
+        s = "O'Reilly"
+        quoted = shell_quote_single(s)
+        assert quoted == "'O'\\''Reilly'"
+
+    def test_decrypt_remote_file_to_string(self):
+        password = "mysecret"
+        remote_enc_file = "/remote/encrypted.enc"
+        bteq_command_str = "bteq -c UTF-8"
+
+        ssh_client = MagicMock()
+        mock_stdin = MagicMock()
+        mock_stdout = MagicMock()
+        mock_stderr = MagicMock()
+
+        # Setup mock outputs and exit code
+        mock_stdout.channel.recv_exit_status.return_value = 0
+        mock_stdout.read.return_value = b"decrypted output"
+        mock_stderr.read.return_value = b""
+
+        ssh_client.exec_command.return_value = (mock_stdin, mock_stdout, mock_stderr)
+
+        exit_status, output, err = decrypt_remote_file_to_string(
+            ssh_client, remote_enc_file, password, bteq_command_str
+        )
+
+        quoted_password = shell_quote_single(password)
+        expected_cmd = (
+            f"openssl enc -d -aes-256-cbc -salt -pbkdf2 -pass pass:{quoted_password} -in {remote_enc_file} | "
+            + bteq_command_str
+        )
+
+        ssh_client.exec_command.assert_called_once_with(expected_cmd)
+        assert exit_status == 0
+        assert output == "decrypted output"
+        assert err == ""
+
+
+if __name__ == "__main__":
+    unittest.main()

From e7c35aff298f5b83f69f5949bdf96619cee7c31c Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sat, 21 Jun 2025 15:07:49 +0200
Subject: [PATCH 024/381] Update diagrams generated in our code: (#51996)

The diagram generation was slightly broken after we moved the docs
to devel-common. This PR fixes it by adding proper paths to common
diagramming .png files but also add inline pyproject.toml definitions
so that the diagram generating scripts can be run as "standalone"
scripts with `uv run`.

Also multi-team diagram was simplified following recent AIP-67 proposal.
---
 ...m_auth_manager_airflow_architecture.md5sum |   2 +-
 ...gram_auth_manager_airflow_architecture.png | Bin 54220 -> 50671 bytes
 ...agram_auth_manager_airflow_architecture.py |  15 +++++-
 .../diagram_basic_airflow_architecture.md5sum |   2 +-
 .../diagram_basic_airflow_architecture.png    | Bin 117106 -> 116548 bytes
 .../img/diagram_basic_airflow_architecture.py |  17 +++++--
 ..._dag_processor_airflow_architecture.md5sum |   2 +-
 ...ram_dag_processor_airflow_architecture.png | Bin 238002 -> 240630 bytes
 ...gram_dag_processor_airflow_architecture.py |  18 +++++--
 ...am_distributed_airflow_architecture.md5sum |   2 +-
 ...agram_distributed_airflow_architecture.png | Bin 192331 -> 174855 bytes
 ...iagram_distributed_airflow_architecture.py |  18 +++++--
 ...ram_multi_team_airflow_architecture.md5sum |   2 +-
 ...iagram_multi_team_airflow_architecture.png | Bin 630129 -> 578476 bytes
 ...diagram_multi_team_airflow_architecture.py |  48 +++++++-----------
 .../docs/img/diagram_task_lifecycle.md5sum    |   2 +-
 .../docs/img/diagram_task_lifecycle.png       | Bin 529144 -> 604573 bytes
 .../docs/img/diagram_task_lifecycle.py        |  28 +++++++---
 18 files changed, 101 insertions(+), 55 deletions(-)

diff --git a/airflow-core/docs/img/diagram_auth_manager_airflow_architecture.md5sum b/airflow-core/docs/img/diagram_auth_manager_airflow_architecture.md5sum
index ac3e24d8483b8..d108e6b94b972 100644
--- a/airflow-core/docs/img/diagram_auth_manager_airflow_architecture.md5sum
+++ b/airflow-core/docs/img/diagram_auth_manager_airflow_architecture.md5sum
@@ -1 +1 @@
-5b82cba489898a46dcfe5f458eeee33b
+cdcfa104c489e0e679894e344084c061
diff --git a/airflow-core/docs/img/diagram_auth_manager_airflow_architecture.png b/airflow-core/docs/img/diagram_auth_manager_airflow_architecture.png
index 35f3f418f2df4fb59023b7c29dd2921a73ba511c..2a677c0dc9b2439d831b5d4ee9a83f37e28b00d9 100644
GIT binary patch
diff --git a/airflow-core/docs/img/diagram_auth_manager_airflow_architecture.py b/airflow-core/docs/img/diagram_auth_manager_airflow_architecture.py
index 453d17267c8c6..b38c633cfde86 100644
--- a/airflow-core/docs/img/diagram_auth_manager_airflow_architecture.py
+++ b/airflow-core/docs/img/diagram_auth_manager_airflow_architecture.py
@@ -14,6 +14,13 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+# /// script
+# requires-python = ">=3.11"
+# dependencies = [
+#    "rich>=12.4.4",
+#    "diagrams>=0.23.4",
+# ]
+# ///
 from __future__ import annotations
 
 from pathlib import Path
@@ -25,7 +32,13 @@
 
 MY_DIR = Path(__file__).parent
 MY_FILENAME = Path(__file__).with_suffix("").name
-PYTHON_MULTIPROCESS_LOGO = MY_DIR.parents[1] / "diagrams" / "python_multiprocess_logo.png"
+AIRFLOW_SOURCES_ROOT = MY_DIR.parents[2]
+DIAGRAMS_DIR = AIRFLOW_SOURCES_ROOT / "devel-common" / "src" / "docs" / "diagrams"
+PYTHON_MULTIPROCESS_LOGO = DIAGRAMS_DIR / "python_multiprocess_logo.png"
+PACKAGES_IMAGE = DIAGRAMS_DIR / "packages.png"
+DATABASE_IMAGE = DIAGRAMS_DIR / "database.png"
+MULTIPLE_FILES_IMAGE = DIAGRAMS_DIR / "multiple_files.png"
+CONFIG_FILE = DIAGRAMS_DIR / "config_file.png"
 
 console = Console(width=400, color_system="standard")
 
diff --git a/airflow-core/docs/img/diagram_basic_airflow_architecture.md5sum b/airflow-core/docs/img/diagram_basic_airflow_architecture.md5sum
index 810a76ed84d78..c0165abb926c3 100644
--- a/airflow-core/docs/img/diagram_basic_airflow_architecture.md5sum
+++ b/airflow-core/docs/img/diagram_basic_airflow_architecture.md5sum
@@ -1 +1 @@
-cc2aca72cb388d28842e539f599d373c
+02bb21a66db61c0ea72aae788d1cd7da
diff --git a/airflow-core/docs/img/diagram_basic_airflow_architecture.png b/airflow-core/docs/img/diagram_basic_airflow_architecture.png
index 94a0590419f331c8deab0833016a47574fed7e22..b027745363ca0fc198cc200f256bcde2a29ba39b 100644
GIT binary patch
diff --git a/airflow-core/docs/img/diagram_basic_airflow_architecture.py b/airflow-core/docs/img/diagram_basic_airflow_architecture.py
index 7d77cb321eee8..6f34fe19e02f5 100644
--- a/airflow-core/docs/img/diagram_basic_airflow_architecture.py
+++ b/airflow-core/docs/img/diagram_basic_airflow_architecture.py
@@ -14,6 +14,13 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+# /// script
+# requires-python = ">=3.11"
+# dependencies = [
+#    "rich>=12.4.4",
+#    "diagrams>=0.23.4",
+# ]
+# ///
 from __future__ import annotations
 
 from pathlib import Path
@@ -26,9 +33,13 @@
 
 MY_DIR = Path(__file__).parent
 MY_FILENAME = Path(__file__).with_suffix("").name
-PACKAGES_IMAGE = MY_DIR.parents[1] / "diagrams" / "packages.png"
-DATABASE_IMAGE = MY_DIR.parents[1] / "diagrams" / "database.png"
-MULTIPLE_FILES_IMAGE = MY_DIR.parents[1] / "diagrams" / "multiple_files.png"
+AIRFLOW_SOURCES_ROOT = MY_DIR.parents[2]
+DIAGRAMS_DIR = AIRFLOW_SOURCES_ROOT / "devel-common" / "src" / "docs" / "diagrams"
+PYTHON_MULTIPROCESS_LOGO = DIAGRAMS_DIR / "python_multiprocess_logo.png"
+PACKAGES_IMAGE = DIAGRAMS_DIR / "packages.png"
+DATABASE_IMAGE = DIAGRAMS_DIR / "database.png"
+MULTIPLE_FILES_IMAGE = DIAGRAMS_DIR / "multiple_files.png"
+CONFIG_FILE = DIAGRAMS_DIR / "config_file.png"
 
 console = Console(width=400, color_system="standard")
 
diff --git a/airflow-core/docs/img/diagram_dag_processor_airflow_architecture.md5sum b/airflow-core/docs/img/diagram_dag_processor_airflow_architecture.md5sum
index 9b9ffcdc2a980..f14acf5c6c246 100644
--- a/airflow-core/docs/img/diagram_dag_processor_airflow_architecture.md5sum
+++ b/airflow-core/docs/img/diagram_dag_processor_airflow_architecture.md5sum
@@ -1 +1 @@
-00f67a1e0cd073ba521da168dc80ccaa
+c5e05dafe7b9a39325835fd3a2b47d4d
diff --git a/airflow-core/docs/img/diagram_dag_processor_airflow_architecture.png b/airflow-core/docs/img/diagram_dag_processor_airflow_architecture.png
index 9d8773877835a7a1f49fa1e0ae916cc067812308..a13bc92586fc794c3f77626942249124476a0a40 100644
GIT binary patch
diff --git a/airflow-core/docs/img/diagram_dag_processor_airflow_architecture.py b/airflow-core/docs/img/diagram_dag_processor_airflow_architecture.py
index 9a33c5af05a49..99091215128c9 100644
--- a/airflow-core/docs/img/diagram_dag_processor_airflow_architecture.py
+++ b/airflow-core/docs/img/diagram_dag_processor_airflow_architecture.py
@@ -14,6 +14,13 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+# /// script
+# requires-python = ">=3.11"
+# dependencies = [
+#    "rich>=12.4.4",
+#    "diagrams>=0.23.4",
+# ]
+# ///
 from __future__ import annotations
 
 from pathlib import Path
@@ -25,10 +32,13 @@
 
 MY_DIR = Path(__file__).parent
 MY_FILENAME = Path(__file__).with_suffix("").name
-PYTHON_MULTIPROCESS_LOGO = MY_DIR.parents[1] / "diagrams" / "python_multiprocess_logo.png"
-PACKAGES_IMAGE = MY_DIR.parents[1] / "diagrams" / "packages.png"
-DATABASE_IMAGE = MY_DIR.parents[1] / "diagrams" / "database.png"
-MULTIPLE_FILES_IMAGE = MY_DIR.parents[1] / "diagrams" / "multiple_files.png"
+AIRFLOW_SOURCES_ROOT = MY_DIR.parents[2]
+DIAGRAMS_DIR = AIRFLOW_SOURCES_ROOT / "devel-common" / "src" / "docs" / "diagrams"
+PYTHON_MULTIPROCESS_LOGO = DIAGRAMS_DIR / "python_multiprocess_logo.png"
+PACKAGES_IMAGE = DIAGRAMS_DIR / "packages.png"
+DATABASE_IMAGE = DIAGRAMS_DIR / "database.png"
+MULTIPLE_FILES_IMAGE = DIAGRAMS_DIR / "multiple_files.png"
+CONFIG_FILE = DIAGRAMS_DIR / "config_file.png"
 
 console = Console(width=400, color_system="standard")
 
diff --git a/airflow-core/docs/img/diagram_distributed_airflow_architecture.md5sum b/airflow-core/docs/img/diagram_distributed_airflow_architecture.md5sum
index f0df07cedd4b0..436ccc21c2c59 100644
--- a/airflow-core/docs/img/diagram_distributed_airflow_architecture.md5sum
+++ b/airflow-core/docs/img/diagram_distributed_airflow_architecture.md5sum
@@ -1 +1 @@
-887125381a232d742ab059c2049f3176
+c9291864de06bc4b09f3a0ed89609572
diff --git a/airflow-core/docs/img/diagram_distributed_airflow_architecture.png b/airflow-core/docs/img/diagram_distributed_airflow_architecture.png
index b1b46d3d3c7cd25be504e4ca7ede0591d61115ba..388d98138e226faf3d9213f2358d0f4f954414b9 100644
GIT binary patch
diff --git a/airflow-core/docs/img/diagram_distributed_airflow_architecture.py b/airflow-core/docs/img/diagram_distributed_airflow_architecture.py
index 831a9783a85e0..37521141462b2 100644
--- a/airflow-core/docs/img/diagram_distributed_airflow_architecture.py
+++ b/airflow-core/docs/img/diagram_distributed_airflow_architecture.py
@@ -14,6 +14,13 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+# /// script
+# requires-python = ">=3.11"
+# dependencies = [
+#    "rich>=12.4.4",
+#    "diagrams>=0.23.4",
+# ]
+# ///
 from __future__ import annotations
 
 from pathlib import Path
@@ -25,10 +32,13 @@
 
 MY_DIR = Path(__file__).parent
 MY_FILENAME = Path(__file__).with_suffix("").name
-PYTHON_MULTIPROCESS_LOGO = MY_DIR.parents[1] / "diagrams" / "python_multiprocess_logo.png"
-PACKAGES_IMAGE = MY_DIR.parents[1] / "diagrams" / "packages.png"
-DATABASE_IMAGE = MY_DIR.parents[1] / "diagrams" / "database.png"
-MULTIPLE_FILES_IMAGE = MY_DIR.parents[1] / "diagrams" / "multiple_files.png"
+AIRFLOW_SOURCES_ROOT = MY_DIR.parents[2]
+DIAGRAMS_DIR = AIRFLOW_SOURCES_ROOT / "devel-common" / "src" / "docs" / "diagrams"
+PYTHON_MULTIPROCESS_LOGO = DIAGRAMS_DIR / "python_multiprocess_logo.png"
+PACKAGES_IMAGE = DIAGRAMS_DIR / "packages.png"
+DATABASE_IMAGE = DIAGRAMS_DIR / "database.png"
+MULTIPLE_FILES_IMAGE = DIAGRAMS_DIR / "multiple_files.png"
+CONFIG_FILE = DIAGRAMS_DIR / "config_file.png"
 
 console = Console(width=400, color_system="standard")
 
diff --git a/airflow-core/docs/img/diagram_multi_team_airflow_architecture.md5sum b/airflow-core/docs/img/diagram_multi_team_airflow_architecture.md5sum
index 824f07b0e0157..b10d471780b21 100644
--- a/airflow-core/docs/img/diagram_multi_team_airflow_architecture.md5sum
+++ b/airflow-core/docs/img/diagram_multi_team_airflow_architecture.md5sum
@@ -1 +1 @@
-c50412b8cf43b84752d4acbf9d7a40ee
+22f0feed88ad6a955d5bebba08469bf9
diff --git a/airflow-core/docs/img/diagram_multi_team_airflow_architecture.png b/airflow-core/docs/img/diagram_multi_team_airflow_architecture.png
index 75ff970e95f121d99cf9039e5565c953cb47babc..2ce11092f59ec0bda4bf164afdf3e29cec24d2f0 100644
GIT binary patch
diff --git a/airflow-core/docs/img/diagram_multi_team_airflow_architecture.py b/airflow-core/docs/img/diagram_multi_team_airflow_architecture.py
index 43e2e62c0604f..ed25e5efbf4e1 100644
--- a/airflow-core/docs/img/diagram_multi_team_airflow_architecture.py
+++ b/airflow-core/docs/img/diagram_multi_team_airflow_architecture.py
@@ -14,6 +14,13 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+# /// script
+# requires-python = ">=3.11"
+# dependencies = [
+#    "rich>=12.4.4",
+#    "diagrams>=0.23.4",
+# ]
+# ///
 from __future__ import annotations
 
 from pathlib import Path
@@ -26,11 +33,13 @@
 
 MY_DIR = Path(__file__).parent
 MY_FILENAME = Path(__file__).with_suffix("").name
-PYTHON_MULTIPROCESS_LOGO = MY_DIR.parents[1] / "diagrams" / "python_multiprocess_logo.png"
-PACKAGES_IMAGE = MY_DIR.parents[1] / "diagrams" / "packages.png"
-DATABASE_IMAGE = MY_DIR.parents[1] / "diagrams" / "database.png"
-MULTIPLE_FILES_IMAGE = MY_DIR.parents[1] / "diagrams" / "multiple_files.png"
-CONFIG_FILE = MY_DIR.parents[1] / "diagrams" / "config_file.png"
+AIRFLOW_SOURCES_ROOT = MY_DIR.parents[2]
+DIAGRAMS_DIR = AIRFLOW_SOURCES_ROOT / "devel-common" / "src" / "docs" / "diagrams"
+PYTHON_MULTIPROCESS_LOGO = DIAGRAMS_DIR / "python_multiprocess_logo.png"
+PACKAGES_IMAGE = DIAGRAMS_DIR / "packages.png"
+DATABASE_IMAGE = DIAGRAMS_DIR / "database.png"
+MULTIPLE_FILES_IMAGE = DIAGRAMS_DIR / "multiple_files.png"
+CONFIG_FILE = DIAGRAMS_DIR / "config_file.png"
 
 console = Console(width=400, color_system="standard")
 
@@ -77,8 +86,6 @@ def generate_dag_processor_airflow_diagram():
                 "Common\nOrganization\nPlugins &\nPackages", PACKAGES_IMAGE.as_posix()
             )
 
-            organization_config_file = Custom("Config\nFile\nCommon\nOrganization", CONFIG_FILE.as_posix())
-
             internal_api = Custom("Task SDK\nGRPC API", PYTHON_MULTIPROCESS_LOGO.as_posix())
             (
                 internal_api
@@ -104,7 +111,7 @@ def generate_dag_processor_airflow_diagram():
         )
 
         deployment_manager_1 = User("Deployment\nManager\nTeam 1")
-        dag_author_1 = User("DAG Author\nTeamt 1")
+        dag_author_1 = User("DAG Author\nTeam 1")
 
         with Cluster("Team 1 Airflow Deployment", graph_attr={"bgcolor": "#AAAABB", "fontsize": "22"}):
             with Cluster("No DB access"):
@@ -113,9 +120,8 @@ def generate_dag_processor_airflow_diagram():
                     triggerer_1 = Custom("Triggerer(s)", PYTHON_MULTIPROCESS_LOGO.as_posix())
                 with Cluster("Parsing"):
                     dag_processors_1 = Custom("DAG\nProcessor(s)", PYTHON_MULTIPROCESS_LOGO.as_posix())
-                dag_files_1 = Custom("DAGS/Team 1", MULTIPLE_FILES_IMAGE.as_posix())
+                dag_files_1 = Custom("DAG Bundles\nTeam 1", MULTIPLE_FILES_IMAGE.as_posix())
                 plugins_and_packages_1 = Custom("Plugins\n& Packages\nTenant 1", PACKAGES_IMAGE.as_posix())
-                config_file_1 = Custom("Config\nFile\nTeam 1", CONFIG_FILE.as_posix())
         operations_user_1 = User("Operations User\nTeam 1")
 
         deployment_manager_2 = User("Deployment\nManager\nTeam 2")
@@ -128,9 +134,8 @@ def generate_dag_processor_airflow_diagram():
                     triggerer_2 = Custom("Triggerer(s)", PYTHON_MULTIPROCESS_LOGO.as_posix())
                 with Cluster("Parsing"):
                     dag_processors_2 = Custom("DAG\nProcessor(s)", PYTHON_MULTIPROCESS_LOGO.as_posix())
-                dag_files_2 = Custom("DAGS/Team 2", MULTIPLE_FILES_IMAGE.as_posix())
+                dag_files_2 = Custom("DAG Bundles\nTeam 2", MULTIPLE_FILES_IMAGE.as_posix())
                 plugins_and_packages_2 = Custom("Plugins\n& Packages\nTeam 2", PACKAGES_IMAGE.as_posix())
-                config_file_2 = Custom("Config\nFile\nTeam 2", CONFIG_FILE.as_posix())
         operations_user_2 = User("Operations User\nTeam 2")
 
         (
@@ -154,12 +159,6 @@ def generate_dag_processor_airflow_diagram():
             >> plugins_and_packages_1
         )
 
-        (
-            deployment_manager_1
-            >> Edge(color="blue", style="dashed", reverse=False, label="configure\n\n")
-            >> config_file_1
-        )
-
         dag_author_2 >> Edge(color="brown", style="dashed", reverse=False, label="author\n\n") >> dag_files_2
         (
             deployment_manager_2
@@ -167,24 +166,12 @@ def generate_dag_processor_airflow_diagram():
             >> plugins_and_packages_2
         )
 
-        (
-            deployment_manager_2
-            >> Edge(color="blue", style="solid", reverse=False, label="configure\n\n")
-            >> config_file_2
-        )
-
         (
             organization_plugins_and_packages
             - Edge(color="blue", style="solid", reverse=True, label="install\n\n")
             - organization_deployment_manager
         )
 
-        (
-            organization_config_file
-            - Edge(color="blue", style="solid", reverse=True, label="configure\n\n")
-            - organization_deployment_manager
-        )
-
         plugins_and_packages_1 >> Edge(style="invis") >> workers_1
         plugins_and_packages_1 >> Edge(style="invis") >> dag_processors_1
         plugins_and_packages_1 >> Edge(style="invis") >> triggerer_1
@@ -237,7 +224,6 @@ def generate_dag_processor_airflow_diagram():
         dag_files_2 >> Edge(color="brown", style="solid", label="sync\n\n") >> triggerer_2
 
         # This is for better layout. Invisible edges are used to align the nodes better
-        schedulers - Edge(style="invis") - organization_config_file
         schedulers - Edge(style="invis") - organization_plugins_and_packages
         metadata_db - Edge(style="invis") - executor_1
         metadata_db - Edge(style="invis") - executor_2
diff --git a/airflow-core/docs/img/diagram_task_lifecycle.md5sum b/airflow-core/docs/img/diagram_task_lifecycle.md5sum
index 5b00beaa9d888..a19ff4c1e4d6d 100644
--- a/airflow-core/docs/img/diagram_task_lifecycle.md5sum
+++ b/airflow-core/docs/img/diagram_task_lifecycle.md5sum
@@ -1 +1 @@
-ef689d2a19fcef658dca32076bb0bfd4
+2f0f0308c52315026f2ac50939247857
diff --git a/airflow-core/docs/img/diagram_task_lifecycle.png b/airflow-core/docs/img/diagram_task_lifecycle.png
index 6f5f4e25a30265cc451706846c10a1ac223ff24f..837a9a7a06692fd7461941b7491c3ef08172e704 100644
GIT binary patch
diff --git a/airflow-core/docs/img/diagram_task_lifecycle.py b/airflow-core/docs/img/diagram_task_lifecycle.py
index 969a4fee324ec..3dc66c1635c35 100644
--- a/airflow-core/docs/img/diagram_task_lifecycle.py
+++ b/airflow-core/docs/img/diagram_task_lifecycle.py
@@ -14,6 +14,13 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+# /// script
+# requires-python = ">=3.11"
+# dependencies = [
+#    "rich>=12.4.4",
+#    "diagrams>=0.23.4",
+# ]
+# ///
 from __future__ import annotations
 
 from pathlib import Path
@@ -25,12 +32,21 @@
 
 MY_DIR = Path(__file__).parent
 MY_FILENAME = Path(__file__).with_suffix("").name
-COMPONENT_IMG = (MY_DIR.parents[1] / "diagrams" / "task_lifecycle" / "component.png").as_posix()
-CONDITION_IMG = (MY_DIR.parents[1] / "diagrams" / "task_lifecycle" / "condition.png").as_posix()
-SHARED_STATE_IMG = (MY_DIR.parents[1] / "diagrams" / "task_lifecycle" / "shared_state.png").as_posix()
-TERMINAL_STATE_IMG = (MY_DIR.parents[1] / "diagrams" / "task_lifecycle" / "terminal_state.png").as_posix()
-SENSOR_STATE_IMG = (MY_DIR.parents[1] / "diagrams" / "task_lifecycle" / "sensor_state.png").as_posix()
-DEFERRABLE_STATE_IMG = (MY_DIR.parents[1] / "diagrams" / "task_lifecycle" / "deferrable_state.png").as_posix()
+MY_DIR = Path(__file__).parent
+MY_FILENAME = Path(__file__).with_suffix("").name
+AIRFLOW_SOURCES_ROOT = MY_DIR.parents[2]
+DIAGRAMS_DIR = AIRFLOW_SOURCES_ROOT / "devel-common" / "src" / "docs" / "diagrams"
+PYTHON_MULTIPROCESS_LOGO = DIAGRAMS_DIR / "python_multiprocess_logo.png"
+PACKAGES_IMAGE = DIAGRAMS_DIR / "packages.png"
+DATABASE_IMAGE = DIAGRAMS_DIR / "database.png"
+MULTIPLE_FILES_IMAGE = DIAGRAMS_DIR / "multiple_files.png"
+CONFIG_FILE = DIAGRAMS_DIR / "config_file.png"
+COMPONENT_IMG = (DIAGRAMS_DIR / "task_lifecycle" / "component.png").as_posix()
+CONDITION_IMG = (DIAGRAMS_DIR / "task_lifecycle" / "condition.png").as_posix()
+SHARED_STATE_IMG = (DIAGRAMS_DIR / "task_lifecycle" / "shared_state.png").as_posix()
+TERMINAL_STATE_IMG = (DIAGRAMS_DIR / "task_lifecycle" / "terminal_state.png").as_posix()
+SENSOR_STATE_IMG = (DIAGRAMS_DIR / "task_lifecycle" / "sensor_state.png").as_posix()
+DEFERRABLE_STATE_IMG = (DIAGRAMS_DIR / "task_lifecycle" / "deferrable_state.png").as_posix()
 
 STATE_NODE_ATTRS = {"width": "4.16", "height": "1", "fontname": "Monospace", "fontsize": "20"}
 COMPONENT_NODE_ATTRS = {

From 6931f3a1a5e6ecbac967a7082dcafeb031c35613 Mon Sep 17 00:00:00 2001
From: Jens Scheffler <95105677+jscheffl@users.noreply.github.com>
Date: Sat, 21 Jun 2025 16:34:13 +0200
Subject: [PATCH 025/381] Remove FAB dependency from Edge3 Provider (#51995)

* Remove FAB dependency from Edge3 Provider

* Uuups, pytests needed adjustment
---
 providers/edge3/pyproject.toml                |   2 -
 .../edge3/plugins/edge_executor_plugin.py     | 357 +++++++++---------
 .../plugins/test_edge_executor_plugin.py      |   6 +-
 3 files changed, 179 insertions(+), 186 deletions(-)

diff --git a/providers/edge3/pyproject.toml b/providers/edge3/pyproject.toml
index c111dd424e901..302d6f2afafd8 100644
--- a/providers/edge3/pyproject.toml
+++ b/providers/edge3/pyproject.toml
@@ -58,7 +58,6 @@ requires-python = "~=3.9"
 # After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
 dependencies = [
     "apache-airflow>=2.10.0",
-    "apache-airflow-providers-fab>=1.5.3",
     "pydantic>=2.11.0",
     "retryhttp>=1.2.0,!=1.3.0",
 ]
@@ -68,7 +67,6 @@ dev = [
     "apache-airflow",
     "apache-airflow-task-sdk",
     "apache-airflow-devel-common",
-    "apache-airflow-providers-fab",
     # Additional devel dependencies (do not remove this line and add extra development dependencies)
 ]
 
diff --git a/providers/edge3/src/airflow/providers/edge3/plugins/edge_executor_plugin.py b/providers/edge3/src/airflow/providers/edge3/plugins/edge_executor_plugin.py
index 2d06f78e7b975..a8a4f5b374018 100644
--- a/providers/edge3/src/airflow/providers/edge3/plugins/edge_executor_plugin.py
+++ b/providers/edge3/src/airflow/providers/edge3/plugins/edge_executor_plugin.py
@@ -17,184 +17,179 @@
 
 from __future__ import annotations
 
-import re
-from datetime import datetime, timedelta
-from pathlib import Path
-from typing import TYPE_CHECKING, Any
-
-from flask import Blueprint, redirect, request, url_for
-from flask_appbuilder import BaseView, expose
-from markupsafe import Markup
-from sqlalchemy import select
-
 from airflow.configuration import conf
 from airflow.exceptions import AirflowConfigException
-from airflow.models.taskinstance import TaskInstanceState
 from airflow.plugins_manager import AirflowPlugin
 from airflow.providers.edge3.version_compat import AIRFLOW_V_3_0_PLUS
-from airflow.utils.state import State
 
 if AIRFLOW_V_3_0_PLUS:
-    from airflow.api_fastapi.auth.managers.models.resource_details import AccessView
-    from airflow.providers.fab.www.auth import has_access_view
-
-else:
-    from airflow.auth.managers.models.resource_details import AccessView  # type: ignore[no-redef]
-    from airflow.www.auth import has_access_view  # type: ignore[no-redef]
-from airflow.utils.session import NEW_SESSION, provide_session
-from airflow.utils.yaml import safe_load
-
-if TYPE_CHECKING:
-    from sqlalchemy.orm import Session
-
-
-def _get_airflow_2_api_endpoint() -> Blueprint:
-    from airflow.www.constants import SWAGGER_BUNDLE, SWAGGER_ENABLED
-    from airflow.www.extensions.init_views import _CustomErrorRequestBodyValidator, _LazyResolver
-
-    folder = Path(__file__).parents[1].resolve()  # this is airflow/providers/edge3/
-    with folder.joinpath("openapi", "edge_worker_api_v1.yaml").open() as f:
-        specification = safe_load(f)
-    from connexion import FlaskApi
-
-    bp = FlaskApi(
-        specification=specification,
-        resolver=_LazyResolver(),
-        base_path="/edge_worker/v1",
-        strict_validation=True,
-        options={"swagger_ui": SWAGGER_ENABLED, "swagger_path": SWAGGER_BUNDLE.__fspath__()},
-        validate_responses=True,
-        validator_map={"body": _CustomErrorRequestBodyValidator},
-    ).blueprint
-    # Need to exempt CSRF to make API usable
-    from airflow.www.app import csrf
-
-    csrf.exempt(bp)
-    return bp
-
-
-def _get_api_endpoint() -> dict[str, Any]:
     from airflow.providers.edge3.worker_api.app import create_edge_worker_api_app
 
-    return {
-        "app": create_edge_worker_api_app(),
-        "url_prefix": "/edge_worker/v1",
-        "name": "Airflow Edge Worker API",
-    }
-
-
-def _state_token(state):
-    """Return a formatted string with HTML for a given State."""
-    color = State.color(state)
-    fg_color = State.color_fg(state)
-    return Markup(
-        """
-        <span class="label" style="color:{fg_color}; background-color:{color};"
-            title="Current State: {state}">{state}</span>
-        """
-    ).format(color=color, state=state, fg_color=fg_color)
-
-
-def modify_maintenance_comment_on_update(maintenance_comment: str | None, username: str) -> str:
-    if maintenance_comment:
-        if re.search(
-            r"^\[[-\d:\s]+\] - .+ put node into maintenance mode\r?\nComment:.*", maintenance_comment
-        ):
-            return re.sub(
-                r"^\[[-\d:\s]+\] - .+ put node into maintenance mode\r?\nComment:",
-                f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment:",
-                maintenance_comment,
-            )
-        if re.search(r"^\[[-\d:\s]+\] - .+ updated maintenance mode\r?\nComment:.*", maintenance_comment):
-            return re.sub(
-                r"^\[[-\d:\s]+\] - .+ updated maintenance mode\r?\nComment:",
-                f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment:",
-                maintenance_comment,
-            )
-        return f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment: {maintenance_comment}"
-    return f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment:"
-
-
-# registers airflow/providers/edge3/plugins/templates as a Jinja template folder
-template_bp = Blueprint(
-    "template_blueprint",
-    __name__,
-    template_folder="templates",
-)
-
-
-class EdgeWorkerJobs(BaseView):
-    """Simple view to show Edge Worker jobs."""
-
-    default_view = "jobs"
-
-    @expose("/jobs")
-    @has_access_view(AccessView.JOBS)
-    @provide_session
-    def jobs(self, session: Session = NEW_SESSION):
-        from airflow.providers.edge3.models.edge_job import EdgeJobModel
-
-        jobs = session.scalars(select(EdgeJobModel).order_by(EdgeJobModel.queued_dttm)).all()
-        html_states = {
-            str(state): _state_token(str(state)) for state in TaskInstanceState.__members__.values()
+    def _get_api_endpoint() -> dict[str, Any]:
+        return {
+            "app": create_edge_worker_api_app(),
+            "url_prefix": "/edge_worker/v1",
+            "name": "Airflow Edge Worker API",
         }
-        return self.render_template("edge_worker_jobs.html", jobs=jobs, html_states=html_states)
-
-
-class EdgeWorkerHosts(BaseView):
-    """Simple view to show Edge Worker status."""
-
-    default_view = "status"
-
-    @expose("/status")
-    @has_access_view(AccessView.JOBS)
-    @provide_session
-    def status(self, session: Session = NEW_SESSION):
-        from airflow.providers.edge3.models.edge_worker import EdgeWorkerModel
-
-        hosts = session.scalars(select(EdgeWorkerModel).order_by(EdgeWorkerModel.worker_name)).all()
-        five_min_ago = datetime.now() - timedelta(minutes=5)
-        return self.render_template("edge_worker_hosts.html", hosts=hosts, five_min_ago=five_min_ago)
-
-    @expose("/status/maintenance/<string:worker_name>/on", methods=["POST"])
-    @has_access_view(AccessView.JOBS)
-    def worker_to_maintenance(self, worker_name: str):
-        from flask_login import current_user
-
-        from airflow.providers.edge3.models.edge_worker import request_maintenance
-
-        maintenance_comment = request.form.get("maintenance_comment")
-        maintenance_comment = f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {current_user.username} put node into maintenance mode\nComment: {maintenance_comment}"
-        request_maintenance(worker_name, maintenance_comment)
-        return redirect(url_for("EdgeWorkerHosts.status"))
 
-    @expose("/status/maintenance/<string:worker_name>/off", methods=["POST"])
-    @has_access_view(AccessView.JOBS)
-    def remove_worker_from_maintenance(self, worker_name: str):
-        from airflow.providers.edge3.models.edge_worker import exit_maintenance
-
-        exit_maintenance(worker_name)
-        return redirect(url_for("EdgeWorkerHosts.status"))
-
-    @expose("/status/maintenance/<string:worker_name>/remove", methods=["POST"])
-    @has_access_view(AccessView.JOBS)
-    def remove_worker(self, worker_name: str):
-        from airflow.providers.edge3.models.edge_worker import remove_worker
-
-        remove_worker(worker_name)
-        return redirect(url_for("EdgeWorkerHosts.status"))
-
-    @expose("/status/maintenance/<string:worker_name>/change_comment", methods=["POST"])
-    @has_access_view(AccessView.JOBS)
-    def change_maintenance_comment(self, worker_name: str):
-        from flask_login import current_user
-
-        from airflow.providers.edge3.models.edge_worker import change_maintenance_comment
-
-        maintenance_comment = request.form.get("maintenance_comment")
-        maintenance_comment = modify_maintenance_comment_on_update(maintenance_comment, current_user.username)
-        change_maintenance_comment(worker_name, maintenance_comment)
-        return redirect(url_for("EdgeWorkerHosts.status"))
+else:
+    # This is for back-compatability with Airflow 2.x and we only make this
+    # to prevents dependencies and breaking imports in Airflow 3.x
+    import re
+    from datetime import datetime, timedelta
+    from pathlib import Path
+    from typing import TYPE_CHECKING, Any
+
+    from flask import Blueprint, redirect, request, url_for
+    from flask_appbuilder import BaseView, expose
+    from markupsafe import Markup
+    from sqlalchemy import select
+
+    from airflow.auth.managers.models.resource_details import AccessView
+    from airflow.models.taskinstance import TaskInstanceState
+    from airflow.utils.session import NEW_SESSION, provide_session
+    from airflow.utils.state import State
+    from airflow.utils.yaml import safe_load
+    from airflow.www.auth import has_access_view
+
+    if TYPE_CHECKING:
+        from sqlalchemy.orm import Session
+
+    def _get_airflow_2_api_endpoint() -> Blueprint:
+        from airflow.www.app import csrf
+        from airflow.www.constants import SWAGGER_BUNDLE, SWAGGER_ENABLED
+        from airflow.www.extensions.init_views import _CustomErrorRequestBodyValidator, _LazyResolver
+
+        folder = Path(__file__).parents[1].resolve()  # this is airflow/providers/edge3/
+        with folder.joinpath("openapi", "edge_worker_api_v1.yaml").open() as f:
+            specification = safe_load(f)
+        from connexion import FlaskApi
+
+        bp = FlaskApi(
+            specification=specification,
+            resolver=_LazyResolver(),
+            base_path="/edge_worker/v1",
+            strict_validation=True,
+            options={"swagger_ui": SWAGGER_ENABLED, "swagger_path": SWAGGER_BUNDLE.__fspath__()},
+            validate_responses=True,
+            validator_map={"body": _CustomErrorRequestBodyValidator},
+        ).blueprint
+        # Need to exempt CSRF to make API usable
+        csrf.exempt(bp)
+        return bp
+
+    def _state_token(state):
+        """Return a formatted string with HTML for a given State."""
+        color = State.color(state)
+        fg_color = State.color_fg(state)
+        return Markup(
+            """
+            <span class="label" style="color:{fg_color}; background-color:{color};"
+                title="Current State: {state}">{state}</span>
+            """
+        ).format(color=color, state=state, fg_color=fg_color)
+
+    def modify_maintenance_comment_on_update(maintenance_comment: str | None, username: str) -> str:
+        if maintenance_comment:
+            if re.search(
+                r"^\[[-\d:\s]+\] - .+ put node into maintenance mode\r?\nComment:.*", maintenance_comment
+            ):
+                return re.sub(
+                    r"^\[[-\d:\s]+\] - .+ put node into maintenance mode\r?\nComment:",
+                    f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment:",
+                    maintenance_comment,
+                )
+            if re.search(r"^\[[-\d:\s]+\] - .+ updated maintenance mode\r?\nComment:.*", maintenance_comment):
+                return re.sub(
+                    r"^\[[-\d:\s]+\] - .+ updated maintenance mode\r?\nComment:",
+                    f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment:",
+                    maintenance_comment,
+                )
+            return f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment: {maintenance_comment}"
+        return (
+            f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment:"
+        )
+
+    # registers airflow/providers/edge3/plugins/templates as a Jinja template folder
+    template_bp = Blueprint(
+        "template_blueprint",
+        __name__,
+        template_folder="templates",
+    )
+
+    class EdgeWorkerJobs(BaseView):
+        """Simple view to show Edge Worker jobs."""
+
+        default_view = "jobs"
+
+        @expose("/jobs")
+        @has_access_view(AccessView.JOBS)
+        @provide_session
+        def jobs(self, session: Session = NEW_SESSION):
+            from airflow.providers.edge3.models.edge_job import EdgeJobModel
+
+            jobs = session.scalars(select(EdgeJobModel).order_by(EdgeJobModel.queued_dttm)).all()
+            html_states = {
+                str(state): _state_token(str(state)) for state in TaskInstanceState.__members__.values()
+            }
+            return self.render_template("edge_worker_jobs.html", jobs=jobs, html_states=html_states)
+
+    class EdgeWorkerHosts(BaseView):
+        """Simple view to show Edge Worker status."""
+
+        default_view = "status"
+
+        @expose("/status")
+        @has_access_view(AccessView.JOBS)
+        @provide_session
+        def status(self, session: Session = NEW_SESSION):
+            from airflow.providers.edge3.models.edge_worker import EdgeWorkerModel
+
+            hosts = session.scalars(select(EdgeWorkerModel).order_by(EdgeWorkerModel.worker_name)).all()
+            five_min_ago = datetime.now() - timedelta(minutes=5)
+            return self.render_template("edge_worker_hosts.html", hosts=hosts, five_min_ago=five_min_ago)
+
+        @expose("/status/maintenance/<string:worker_name>/on", methods=["POST"])
+        @has_access_view(AccessView.JOBS)
+        def worker_to_maintenance(self, worker_name: str):
+            from flask_login import current_user
+
+            from airflow.providers.edge3.models.edge_worker import request_maintenance
+
+            maintenance_comment = request.form.get("maintenance_comment")
+            maintenance_comment = f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {current_user.username} put node into maintenance mode\nComment: {maintenance_comment}"
+            request_maintenance(worker_name, maintenance_comment)
+            return redirect(url_for("EdgeWorkerHosts.status"))
+
+        @expose("/status/maintenance/<string:worker_name>/off", methods=["POST"])
+        @has_access_view(AccessView.JOBS)
+        def remove_worker_from_maintenance(self, worker_name: str):
+            from airflow.providers.edge3.models.edge_worker import exit_maintenance
+
+            exit_maintenance(worker_name)
+            return redirect(url_for("EdgeWorkerHosts.status"))
+
+        @expose("/status/maintenance/<string:worker_name>/remove", methods=["POST"])
+        @has_access_view(AccessView.JOBS)
+        def remove_worker(self, worker_name: str):
+            from airflow.providers.edge3.models.edge_worker import remove_worker
+
+            remove_worker(worker_name)
+            return redirect(url_for("EdgeWorkerHosts.status"))
+
+        @expose("/status/maintenance/<string:worker_name>/change_comment", methods=["POST"])
+        @has_access_view(AccessView.JOBS)
+        def change_maintenance_comment(self, worker_name: str):
+            from flask_login import current_user
+
+            from airflow.providers.edge3.models.edge_worker import change_maintenance_comment
+
+            maintenance_comment = request.form.get("maintenance_comment")
+            maintenance_comment = modify_maintenance_comment_on_update(
+                maintenance_comment, current_user.username
+            )
+            change_maintenance_comment(worker_name, maintenance_comment)
+            return redirect(url_for("EdgeWorkerHosts.status"))
 
 
 # Check if EdgeExecutor is actually loaded
@@ -209,21 +204,19 @@ class EdgeExecutorPlugin(AirflowPlugin):
 
     name = "edge_executor"
     if EDGE_EXECUTOR_ACTIVE:
-        appbuilder_views = [
-            {
-                "name": "Edge Worker Jobs",
-                "category": "Admin",
-                "view": EdgeWorkerJobs(),
-            },
-            {
-                "name": "Edge Worker Hosts",
-                "category": "Admin",
-                "view": EdgeWorkerHosts(),
-            },
-        ]
-
         if AIRFLOW_V_3_0_PLUS:
             fastapi_apps = [_get_api_endpoint()]
-            flask_blueprints = [template_bp]
         else:
+            appbuilder_views = [
+                {
+                    "name": "Edge Worker Jobs",
+                    "category": "Admin",
+                    "view": EdgeWorkerJobs(),
+                },
+                {
+                    "name": "Edge Worker Hosts",
+                    "category": "Admin",
+                    "view": EdgeWorkerHosts(),
+                },
+            ]
             flask_blueprints = [_get_airflow_2_api_endpoint(), template_bp]
diff --git a/providers/edge3/tests/unit/edge3/plugins/test_edge_executor_plugin.py b/providers/edge3/tests/unit/edge3/plugins/test_edge_executor_plugin.py
index 52e837387502e..178625c4cf42c 100644
--- a/providers/edge3/tests/unit/edge3/plugins/test_edge_executor_plugin.py
+++ b/providers/edge3/tests/unit/edge3/plugins/test_edge_executor_plugin.py
@@ -54,11 +54,12 @@ def test_plugin_active():
 
         rep = EdgeExecutorPlugin()
         assert EDGE_EXECUTOR_ACTIVE
-        assert len(rep.appbuilder_views) == 2
         if AIRFLOW_V_3_0_PLUS:
-            assert len(rep.flask_blueprints) == 1
+            assert len(rep.appbuilder_views) == 0
+            assert len(rep.flask_blueprints) == 0
             assert len(rep.fastapi_apps) == 1
         else:
+            assert len(rep.appbuilder_views) == 2
             assert len(rep.flask_blueprints) == 2
 
 
@@ -73,6 +74,7 @@ def test_plugin_is_airflow_plugin(plugin):
     assert isinstance(plugin, AirflowPlugin)
 
 
+@pytest.mark.skipif(AIRFLOW_V_3_0_PLUS, reason="Plugin endpoint is not used in Airflow 3.0+")
 @pytest.mark.parametrize(
     "initial_comment, expected_comment",
     [

From 46385565a7f2589b53c6353f4f8a500a333d364d Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sat, 21 Jun 2025 18:03:26 +0200
Subject: [PATCH 026/381] Revert "Remove FAB dependency from Edge3 Provider
 (#51995)" (#51998)

This reverts commit 6931f3a1a5e6ecbac967a7082dcafeb031c35613.
---
 providers/edge3/pyproject.toml                |   2 +
 .../edge3/plugins/edge_executor_plugin.py     | 357 +++++++++---------
 .../plugins/test_edge_executor_plugin.py      |   6 +-
 3 files changed, 186 insertions(+), 179 deletions(-)

diff --git a/providers/edge3/pyproject.toml b/providers/edge3/pyproject.toml
index 302d6f2afafd8..c111dd424e901 100644
--- a/providers/edge3/pyproject.toml
+++ b/providers/edge3/pyproject.toml
@@ -58,6 +58,7 @@ requires-python = "~=3.9"
 # After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
 dependencies = [
     "apache-airflow>=2.10.0",
+    "apache-airflow-providers-fab>=1.5.3",
     "pydantic>=2.11.0",
     "retryhttp>=1.2.0,!=1.3.0",
 ]
@@ -67,6 +68,7 @@ dev = [
     "apache-airflow",
     "apache-airflow-task-sdk",
     "apache-airflow-devel-common",
+    "apache-airflow-providers-fab",
     # Additional devel dependencies (do not remove this line and add extra development dependencies)
 ]
 
diff --git a/providers/edge3/src/airflow/providers/edge3/plugins/edge_executor_plugin.py b/providers/edge3/src/airflow/providers/edge3/plugins/edge_executor_plugin.py
index a8a4f5b374018..2d06f78e7b975 100644
--- a/providers/edge3/src/airflow/providers/edge3/plugins/edge_executor_plugin.py
+++ b/providers/edge3/src/airflow/providers/edge3/plugins/edge_executor_plugin.py
@@ -17,179 +17,184 @@
 
 from __future__ import annotations
 
+import re
+from datetime import datetime, timedelta
+from pathlib import Path
+from typing import TYPE_CHECKING, Any
+
+from flask import Blueprint, redirect, request, url_for
+from flask_appbuilder import BaseView, expose
+from markupsafe import Markup
+from sqlalchemy import select
+
 from airflow.configuration import conf
 from airflow.exceptions import AirflowConfigException
+from airflow.models.taskinstance import TaskInstanceState
 from airflow.plugins_manager import AirflowPlugin
 from airflow.providers.edge3.version_compat import AIRFLOW_V_3_0_PLUS
+from airflow.utils.state import State
 
 if AIRFLOW_V_3_0_PLUS:
+    from airflow.api_fastapi.auth.managers.models.resource_details import AccessView
+    from airflow.providers.fab.www.auth import has_access_view
+
+else:
+    from airflow.auth.managers.models.resource_details import AccessView  # type: ignore[no-redef]
+    from airflow.www.auth import has_access_view  # type: ignore[no-redef]
+from airflow.utils.session import NEW_SESSION, provide_session
+from airflow.utils.yaml import safe_load
+
+if TYPE_CHECKING:
+    from sqlalchemy.orm import Session
+
+
+def _get_airflow_2_api_endpoint() -> Blueprint:
+    from airflow.www.constants import SWAGGER_BUNDLE, SWAGGER_ENABLED
+    from airflow.www.extensions.init_views import _CustomErrorRequestBodyValidator, _LazyResolver
+
+    folder = Path(__file__).parents[1].resolve()  # this is airflow/providers/edge3/
+    with folder.joinpath("openapi", "edge_worker_api_v1.yaml").open() as f:
+        specification = safe_load(f)
+    from connexion import FlaskApi
+
+    bp = FlaskApi(
+        specification=specification,
+        resolver=_LazyResolver(),
+        base_path="/edge_worker/v1",
+        strict_validation=True,
+        options={"swagger_ui": SWAGGER_ENABLED, "swagger_path": SWAGGER_BUNDLE.__fspath__()},
+        validate_responses=True,
+        validator_map={"body": _CustomErrorRequestBodyValidator},
+    ).blueprint
+    # Need to exempt CSRF to make API usable
+    from airflow.www.app import csrf
+
+    csrf.exempt(bp)
+    return bp
+
+
+def _get_api_endpoint() -> dict[str, Any]:
     from airflow.providers.edge3.worker_api.app import create_edge_worker_api_app
 
-    def _get_api_endpoint() -> dict[str, Any]:
-        return {
-            "app": create_edge_worker_api_app(),
-            "url_prefix": "/edge_worker/v1",
-            "name": "Airflow Edge Worker API",
+    return {
+        "app": create_edge_worker_api_app(),
+        "url_prefix": "/edge_worker/v1",
+        "name": "Airflow Edge Worker API",
+    }
+
+
+def _state_token(state):
+    """Return a formatted string with HTML for a given State."""
+    color = State.color(state)
+    fg_color = State.color_fg(state)
+    return Markup(
+        """
+        <span class="label" style="color:{fg_color}; background-color:{color};"
+            title="Current State: {state}">{state}</span>
+        """
+    ).format(color=color, state=state, fg_color=fg_color)
+
+
+def modify_maintenance_comment_on_update(maintenance_comment: str | None, username: str) -> str:
+    if maintenance_comment:
+        if re.search(
+            r"^\[[-\d:\s]+\] - .+ put node into maintenance mode\r?\nComment:.*", maintenance_comment
+        ):
+            return re.sub(
+                r"^\[[-\d:\s]+\] - .+ put node into maintenance mode\r?\nComment:",
+                f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment:",
+                maintenance_comment,
+            )
+        if re.search(r"^\[[-\d:\s]+\] - .+ updated maintenance mode\r?\nComment:.*", maintenance_comment):
+            return re.sub(
+                r"^\[[-\d:\s]+\] - .+ updated maintenance mode\r?\nComment:",
+                f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment:",
+                maintenance_comment,
+            )
+        return f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment: {maintenance_comment}"
+    return f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment:"
+
+
+# registers airflow/providers/edge3/plugins/templates as a Jinja template folder
+template_bp = Blueprint(
+    "template_blueprint",
+    __name__,
+    template_folder="templates",
+)
+
+
+class EdgeWorkerJobs(BaseView):
+    """Simple view to show Edge Worker jobs."""
+
+    default_view = "jobs"
+
+    @expose("/jobs")
+    @has_access_view(AccessView.JOBS)
+    @provide_session
+    def jobs(self, session: Session = NEW_SESSION):
+        from airflow.providers.edge3.models.edge_job import EdgeJobModel
+
+        jobs = session.scalars(select(EdgeJobModel).order_by(EdgeJobModel.queued_dttm)).all()
+        html_states = {
+            str(state): _state_token(str(state)) for state in TaskInstanceState.__members__.values()
         }
+        return self.render_template("edge_worker_jobs.html", jobs=jobs, html_states=html_states)
 
-else:
-    # This is for back-compatability with Airflow 2.x and we only make this
-    # to prevents dependencies and breaking imports in Airflow 3.x
-    import re
-    from datetime import datetime, timedelta
-    from pathlib import Path
-    from typing import TYPE_CHECKING, Any
-
-    from flask import Blueprint, redirect, request, url_for
-    from flask_appbuilder import BaseView, expose
-    from markupsafe import Markup
-    from sqlalchemy import select
-
-    from airflow.auth.managers.models.resource_details import AccessView
-    from airflow.models.taskinstance import TaskInstanceState
-    from airflow.utils.session import NEW_SESSION, provide_session
-    from airflow.utils.state import State
-    from airflow.utils.yaml import safe_load
-    from airflow.www.auth import has_access_view
-
-    if TYPE_CHECKING:
-        from sqlalchemy.orm import Session
-
-    def _get_airflow_2_api_endpoint() -> Blueprint:
-        from airflow.www.app import csrf
-        from airflow.www.constants import SWAGGER_BUNDLE, SWAGGER_ENABLED
-        from airflow.www.extensions.init_views import _CustomErrorRequestBodyValidator, _LazyResolver
-
-        folder = Path(__file__).parents[1].resolve()  # this is airflow/providers/edge3/
-        with folder.joinpath("openapi", "edge_worker_api_v1.yaml").open() as f:
-            specification = safe_load(f)
-        from connexion import FlaskApi
-
-        bp = FlaskApi(
-            specification=specification,
-            resolver=_LazyResolver(),
-            base_path="/edge_worker/v1",
-            strict_validation=True,
-            options={"swagger_ui": SWAGGER_ENABLED, "swagger_path": SWAGGER_BUNDLE.__fspath__()},
-            validate_responses=True,
-            validator_map={"body": _CustomErrorRequestBodyValidator},
-        ).blueprint
-        # Need to exempt CSRF to make API usable
-        csrf.exempt(bp)
-        return bp
-
-    def _state_token(state):
-        """Return a formatted string with HTML for a given State."""
-        color = State.color(state)
-        fg_color = State.color_fg(state)
-        return Markup(
-            """
-            <span class="label" style="color:{fg_color}; background-color:{color};"
-                title="Current State: {state}">{state}</span>
-            """
-        ).format(color=color, state=state, fg_color=fg_color)
-
-    def modify_maintenance_comment_on_update(maintenance_comment: str | None, username: str) -> str:
-        if maintenance_comment:
-            if re.search(
-                r"^\[[-\d:\s]+\] - .+ put node into maintenance mode\r?\nComment:.*", maintenance_comment
-            ):
-                return re.sub(
-                    r"^\[[-\d:\s]+\] - .+ put node into maintenance mode\r?\nComment:",
-                    f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment:",
-                    maintenance_comment,
-                )
-            if re.search(r"^\[[-\d:\s]+\] - .+ updated maintenance mode\r?\nComment:.*", maintenance_comment):
-                return re.sub(
-                    r"^\[[-\d:\s]+\] - .+ updated maintenance mode\r?\nComment:",
-                    f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment:",
-                    maintenance_comment,
-                )
-            return f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment: {maintenance_comment}"
-        return (
-            f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment:"
-        )
-
-    # registers airflow/providers/edge3/plugins/templates as a Jinja template folder
-    template_bp = Blueprint(
-        "template_blueprint",
-        __name__,
-        template_folder="templates",
-    )
-
-    class EdgeWorkerJobs(BaseView):
-        """Simple view to show Edge Worker jobs."""
-
-        default_view = "jobs"
-
-        @expose("/jobs")
-        @has_access_view(AccessView.JOBS)
-        @provide_session
-        def jobs(self, session: Session = NEW_SESSION):
-            from airflow.providers.edge3.models.edge_job import EdgeJobModel
-
-            jobs = session.scalars(select(EdgeJobModel).order_by(EdgeJobModel.queued_dttm)).all()
-            html_states = {
-                str(state): _state_token(str(state)) for state in TaskInstanceState.__members__.values()
-            }
-            return self.render_template("edge_worker_jobs.html", jobs=jobs, html_states=html_states)
-
-    class EdgeWorkerHosts(BaseView):
-        """Simple view to show Edge Worker status."""
-
-        default_view = "status"
-
-        @expose("/status")
-        @has_access_view(AccessView.JOBS)
-        @provide_session
-        def status(self, session: Session = NEW_SESSION):
-            from airflow.providers.edge3.models.edge_worker import EdgeWorkerModel
-
-            hosts = session.scalars(select(EdgeWorkerModel).order_by(EdgeWorkerModel.worker_name)).all()
-            five_min_ago = datetime.now() - timedelta(minutes=5)
-            return self.render_template("edge_worker_hosts.html", hosts=hosts, five_min_ago=five_min_ago)
-
-        @expose("/status/maintenance/<string:worker_name>/on", methods=["POST"])
-        @has_access_view(AccessView.JOBS)
-        def worker_to_maintenance(self, worker_name: str):
-            from flask_login import current_user
-
-            from airflow.providers.edge3.models.edge_worker import request_maintenance
-
-            maintenance_comment = request.form.get("maintenance_comment")
-            maintenance_comment = f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {current_user.username} put node into maintenance mode\nComment: {maintenance_comment}"
-            request_maintenance(worker_name, maintenance_comment)
-            return redirect(url_for("EdgeWorkerHosts.status"))
-
-        @expose("/status/maintenance/<string:worker_name>/off", methods=["POST"])
-        @has_access_view(AccessView.JOBS)
-        def remove_worker_from_maintenance(self, worker_name: str):
-            from airflow.providers.edge3.models.edge_worker import exit_maintenance
-
-            exit_maintenance(worker_name)
-            return redirect(url_for("EdgeWorkerHosts.status"))
-
-        @expose("/status/maintenance/<string:worker_name>/remove", methods=["POST"])
-        @has_access_view(AccessView.JOBS)
-        def remove_worker(self, worker_name: str):
-            from airflow.providers.edge3.models.edge_worker import remove_worker
-
-            remove_worker(worker_name)
-            return redirect(url_for("EdgeWorkerHosts.status"))
-
-        @expose("/status/maintenance/<string:worker_name>/change_comment", methods=["POST"])
-        @has_access_view(AccessView.JOBS)
-        def change_maintenance_comment(self, worker_name: str):
-            from flask_login import current_user
-
-            from airflow.providers.edge3.models.edge_worker import change_maintenance_comment
-
-            maintenance_comment = request.form.get("maintenance_comment")
-            maintenance_comment = modify_maintenance_comment_on_update(
-                maintenance_comment, current_user.username
-            )
-            change_maintenance_comment(worker_name, maintenance_comment)
-            return redirect(url_for("EdgeWorkerHosts.status"))
+
+class EdgeWorkerHosts(BaseView):
+    """Simple view to show Edge Worker status."""
+
+    default_view = "status"
+
+    @expose("/status")
+    @has_access_view(AccessView.JOBS)
+    @provide_session
+    def status(self, session: Session = NEW_SESSION):
+        from airflow.providers.edge3.models.edge_worker import EdgeWorkerModel
+
+        hosts = session.scalars(select(EdgeWorkerModel).order_by(EdgeWorkerModel.worker_name)).all()
+        five_min_ago = datetime.now() - timedelta(minutes=5)
+        return self.render_template("edge_worker_hosts.html", hosts=hosts, five_min_ago=five_min_ago)
+
+    @expose("/status/maintenance/<string:worker_name>/on", methods=["POST"])
+    @has_access_view(AccessView.JOBS)
+    def worker_to_maintenance(self, worker_name: str):
+        from flask_login import current_user
+
+        from airflow.providers.edge3.models.edge_worker import request_maintenance
+
+        maintenance_comment = request.form.get("maintenance_comment")
+        maintenance_comment = f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {current_user.username} put node into maintenance mode\nComment: {maintenance_comment}"
+        request_maintenance(worker_name, maintenance_comment)
+        return redirect(url_for("EdgeWorkerHosts.status"))
+
+    @expose("/status/maintenance/<string:worker_name>/off", methods=["POST"])
+    @has_access_view(AccessView.JOBS)
+    def remove_worker_from_maintenance(self, worker_name: str):
+        from airflow.providers.edge3.models.edge_worker import exit_maintenance
+
+        exit_maintenance(worker_name)
+        return redirect(url_for("EdgeWorkerHosts.status"))
+
+    @expose("/status/maintenance/<string:worker_name>/remove", methods=["POST"])
+    @has_access_view(AccessView.JOBS)
+    def remove_worker(self, worker_name: str):
+        from airflow.providers.edge3.models.edge_worker import remove_worker
+
+        remove_worker(worker_name)
+        return redirect(url_for("EdgeWorkerHosts.status"))
+
+    @expose("/status/maintenance/<string:worker_name>/change_comment", methods=["POST"])
+    @has_access_view(AccessView.JOBS)
+    def change_maintenance_comment(self, worker_name: str):
+        from flask_login import current_user
+
+        from airflow.providers.edge3.models.edge_worker import change_maintenance_comment
+
+        maintenance_comment = request.form.get("maintenance_comment")
+        maintenance_comment = modify_maintenance_comment_on_update(maintenance_comment, current_user.username)
+        change_maintenance_comment(worker_name, maintenance_comment)
+        return redirect(url_for("EdgeWorkerHosts.status"))
 
 
 # Check if EdgeExecutor is actually loaded
@@ -204,19 +209,21 @@ class EdgeExecutorPlugin(AirflowPlugin):
 
     name = "edge_executor"
     if EDGE_EXECUTOR_ACTIVE:
+        appbuilder_views = [
+            {
+                "name": "Edge Worker Jobs",
+                "category": "Admin",
+                "view": EdgeWorkerJobs(),
+            },
+            {
+                "name": "Edge Worker Hosts",
+                "category": "Admin",
+                "view": EdgeWorkerHosts(),
+            },
+        ]
+
         if AIRFLOW_V_3_0_PLUS:
             fastapi_apps = [_get_api_endpoint()]
+            flask_blueprints = [template_bp]
         else:
-            appbuilder_views = [
-                {
-                    "name": "Edge Worker Jobs",
-                    "category": "Admin",
-                    "view": EdgeWorkerJobs(),
-                },
-                {
-                    "name": "Edge Worker Hosts",
-                    "category": "Admin",
-                    "view": EdgeWorkerHosts(),
-                },
-            ]
             flask_blueprints = [_get_airflow_2_api_endpoint(), template_bp]
diff --git a/providers/edge3/tests/unit/edge3/plugins/test_edge_executor_plugin.py b/providers/edge3/tests/unit/edge3/plugins/test_edge_executor_plugin.py
index 178625c4cf42c..52e837387502e 100644
--- a/providers/edge3/tests/unit/edge3/plugins/test_edge_executor_plugin.py
+++ b/providers/edge3/tests/unit/edge3/plugins/test_edge_executor_plugin.py
@@ -54,12 +54,11 @@ def test_plugin_active():
 
         rep = EdgeExecutorPlugin()
         assert EDGE_EXECUTOR_ACTIVE
+        assert len(rep.appbuilder_views) == 2
         if AIRFLOW_V_3_0_PLUS:
-            assert len(rep.appbuilder_views) == 0
-            assert len(rep.flask_blueprints) == 0
+            assert len(rep.flask_blueprints) == 1
             assert len(rep.fastapi_apps) == 1
         else:
-            assert len(rep.appbuilder_views) == 2
             assert len(rep.flask_blueprints) == 2
 
 
@@ -74,7 +73,6 @@ def test_plugin_is_airflow_plugin(plugin):
     assert isinstance(plugin, AirflowPlugin)
 
 
-@pytest.mark.skipif(AIRFLOW_V_3_0_PLUS, reason="Plugin endpoint is not used in Airflow 3.0+")
 @pytest.mark.parametrize(
     "initial_comment, expected_comment",
     [

From afbe2372423dc3a14a0421d9620a38ee963b3a10 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sat, 21 Jun 2025 19:35:56 +0200
Subject: [PATCH 027/381] Exclude ray in google provider for Python 3.13
 (#51994)

Currently we cannot generate `pypi` constraint for Python 3.13,
because released google provider has `ray` as dependency and `ray`
does not support Pyton 3.13 yet - so we have to exclude `ray` in
released provider before we can merge Python 3.13
support.
---
 providers/google/pyproject.toml                     |  2 +-
 .../providers/google/cloud/hooks/vertex_ai/ray.py   | 13 +++++++++++--
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/providers/google/pyproject.toml b/providers/google/pyproject.toml
index 10816668276e7..ba0d3a7f0aa67 100644
--- a/providers/google/pyproject.toml
+++ b/providers/google/pyproject.toml
@@ -80,7 +80,7 @@ dependencies = [
     # Remove the ray dependency as well as google-cloud-bigquery-storage once linked issue is fixed
     "google-cloud-aiplatform[evaluation,ray]>=1.73.0;python_version < '3.12'",
     "google-cloud-aiplatform[evaluation]>=1.73.0;python_version >= '3.12'",
-    "ray[default]>=2.42.0 ; python_version >= '3.12'",
+    "ray[default]>=2.42.0 ; python_version >= '3.12' and python_version < '3.13'",
     "google-cloud-bigquery-storage>=2.31.0; python_version >= '3.12'",
     "google-cloud-alloydb>=0.4.0",
     "google-cloud-automl>=2.12.0",
diff --git a/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/ray.py b/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/ray.py
index 373c72e13bbe4..5aede4a0465e7 100644
--- a/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/ray.py
+++ b/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/ray.py
@@ -22,8 +22,17 @@
 import dataclasses
 from typing import Any
 
-import vertex_ray
-from google._upb._message import ScalarMapContainer  # type: ignore[attr-defined]
+from airflow.exceptions import AirflowOptionalProviderFeatureException
+
+try:
+    import vertex_ray
+    from google._upb._message import ScalarMapContainer  # type: ignore[attr-defined]
+except ImportError:
+    # Fallback for environments where the upb module is not available.
+    raise AirflowOptionalProviderFeatureException(
+        "google._upb._message.ScalarMapContainer is not available. "
+        "Please install the ray package to use this feature."
+    )
 from google.cloud import aiplatform
 from google.cloud.aiplatform.vertex_ray.util import resources
 from google.cloud.aiplatform_v1 import (

From 6eca233fbab623243995a0166eefb58653d3664d Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Sat, 21 Jun 2025 20:09:02 +0100
Subject: [PATCH 028/381] Dont use builtin len as varibale (#51992)

---
 .../src/airflow/jobs/triggerer_job_runner.py         |  8 ++++----
 task-sdk/src/airflow/sdk/execution_time/comms.py     | 12 ++++++------
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/airflow-core/src/airflow/jobs/triggerer_job_runner.py b/airflow-core/src/airflow/jobs/triggerer_job_runner.py
index adc87e802fa6f..d96cf7faacd8a 100644
--- a/airflow-core/src/airflow/jobs/triggerer_job_runner.py
+++ b/airflow-core/src/airflow/jobs/triggerer_job_runner.py
@@ -713,11 +713,11 @@ def send(self, msg: ToTriggerSupervisor) -> ToTriggerRunner | None:
 
     async def _aread_frame(self):
         len_bytes = await self._async_reader.readexactly(4)
-        len = int.from_bytes(len_bytes, byteorder="big")
-        if len >= 2**32:
-            raise OverflowError(f"Refusing to receive messages larger than 4GiB {len=}")
+        length = int.from_bytes(len_bytes, byteorder="big")
+        if length >= 2**32:
+            raise OverflowError(f"Refusing to receive messages larger than 4GiB {length=}")
 
-        buffer = await self._async_reader.readexactly(len)
+        buffer = await self._async_reader.readexactly(length)
         return self.resp_decoder.decode(buffer)
 
     async def _aget_response(self, expect_id: int) -> ToTriggerRunner | None:
diff --git a/task-sdk/src/airflow/sdk/execution_time/comms.py b/task-sdk/src/airflow/sdk/execution_time/comms.py
index 0589f12f866e3..97ed1761ad8eb 100644
--- a/task-sdk/src/airflow/sdk/execution_time/comms.py
+++ b/task-sdk/src/airflow/sdk/execution_time/comms.py
@@ -183,9 +183,9 @@ class CommsDecoder(Generic[ReceiveMsgType, SendMsgType]):
     def send(self, msg: SendMsgType) -> ReceiveMsgType | None:
         """Send a request to the parent and block until the response is received."""
         frame = _RequestFrame(id=next(self.id_counter), body=msg.model_dump())
-        bytes = frame.as_bytes()
+        frame_bytes = frame.as_bytes()
 
-        self.socket.sendall(bytes)
+        self.socket.sendall(frame_bytes)
         if isinstance(msg, ResendLoggingFD):
             if recv_fds is None:
                 return None
@@ -225,13 +225,13 @@ def _read_frame(self, maxfds: int | None = None) -> tuple[_ResponseFrame, list[i
         if len_bytes == b"":
             raise EOFError("Request socket closed before length")
 
-        len = int.from_bytes(len_bytes, byteorder="big")
+        length = int.from_bytes(len_bytes, byteorder="big")
 
-        buffer = bytearray(len)
+        buffer = bytearray(length)
         nread = self.socket.recv_into(buffer)
-        if nread != len:
+        if nread != length:
             raise RuntimeError(
-                f"unable to read full response in child. (We read {nread}, but expected {len})"
+                f"unable to read full response in child. (We read {nread}, but expected {length})"
             )
         if nread == 0:
             raise EOFError(f"Request socket closed before response was complete ({self.id_counter=})")

From 1d4c1ae2c783b960ded46803cd9fb48027e94ebe Mon Sep 17 00:00:00 2001
From: Eric Wang <iwongjian666@gmail.com>
Date: Sun, 22 Jun 2025 03:10:04 +0800
Subject: [PATCH 029/381] fix(azure): check account_key before
 DefaultAzureCredential (#51999)

- Check account_key in connection extra before falling back to DefaultAzureCredential
- Ensure proper authentication precedence for WasbHook and WasbAsyncHook
- Add test case for account_key authentication
- Update documentation to clarify account_key authentication method and priority
- Update hook docstring and UI placeholders to reflect account_key support
- Fixes #51944
---
 .../microsoft/azure/docs/connections/wasb.rst |  8 ++--
 .../microsoft/azure/docs/logging/index.rst    |  2 +-
 .../azure/newsfragments/51944.bugfix.rst      |  1 +
 .../providers/microsoft/azure/hooks/wasb.py   | 45 ++++++++++++-------
 .../unit/microsoft/azure/hooks/test_wasb.py   | 19 ++++++++
 5 files changed, 54 insertions(+), 21 deletions(-)
 create mode 100644 providers/microsoft/azure/newsfragments/51944.bugfix.rst

diff --git a/providers/microsoft/azure/docs/connections/wasb.rst b/providers/microsoft/azure/docs/connections/wasb.rst
index e7e2f78b596ad..057160b30f0e9 100644
--- a/providers/microsoft/azure/docs/connections/wasb.rst
+++ b/providers/microsoft/azure/docs/connections/wasb.rst
@@ -27,7 +27,7 @@ The Microsoft Azure Blob Storage connection type enables the Azure Blob Storage
 Authenticating to Azure Blob Storage
 ------------------------------------
 
-There are six ways to connect to Azure Blob Storage using Airflow.
+There are seven ways to connect to Azure Blob Storage using Airflow.
 
 1. Use `token credentials`_
    i.e. add specific credentials (client_id, secret, tenant) and subscription id to the Airflow connection.
@@ -37,8 +37,9 @@ There are six ways to connect to Azure Blob Storage using Airflow.
    i.e. add a key config to ``sas_token`` in the Airflow connection.
 4. Use a `Connection String`_
    i.e. add connection string to ``connection_string`` in the Airflow connection.
-5. Use managed identity by setting ``managed_identity_client_id``, ``workload_identity_tenant_id`` (under the hook, it uses DefaultAzureCredential_ with these arguments)
-6. Fallback on DefaultAzureCredential_.
+5. Use account key by setting ``account_key`` in the Airflow connection extra fields.
+6. Use managed identity by setting ``managed_identity_client_id``, ``workload_identity_tenant_id`` (under the hook, it uses DefaultAzureCredential_ with these arguments)
+7. Fallback on DefaultAzureCredential_.
    This includes a mechanism to try different options to authenticate: Managed System Identity, environment variables, authentication through Azure CLI, etc.
 
 Only one authorization method can be used at a time. If you need to manage multiple credentials or keys then you should
@@ -84,6 +85,7 @@ Extra (optional)
     Specify the extra parameters (as json dictionary) that can be used in Azure connection.
     The following parameters are all optional:
 
+    * ``account_key``: Specify the account key for Azure Blob Storage authentication. This will be checked before falling back to DefaultAzureCredential_.
     * ``client_secret_auth_config``: Extra config to pass while authenticating as a service principal using `ClientSecretCredential`_ It can be left out to fall back on DefaultAzureCredential_.
     * ``managed_identity_client_id``:  The client ID of a user-assigned managed identity. If provided with `workload_identity_tenant_id`, they'll pass to ``DefaultAzureCredential``.
     * ``workload_identity_tenant_id``: ID of the application's Microsoft Entra tenant. Also called its "directory" ID. If provided with `managed_identity_client_id`, they'll pass to ``DefaultAzureCredential``.
diff --git a/providers/microsoft/azure/docs/logging/index.rst b/providers/microsoft/azure/docs/logging/index.rst
index 16ed9b5c7fd07..04405eedf35b1 100644
--- a/providers/microsoft/azure/docs/logging/index.rst
+++ b/providers/microsoft/azure/docs/logging/index.rst
@@ -58,7 +58,7 @@ Setup Steps:
 ''''''''''''''
 
 #. Install the provider package with ``pip install apache-airflow-providers-microsoft-azure``.
-#. Ensure :ref:`connection <howto/connection:wasb>` is already setup with read and write access to Azure Blob Storage in the ``remote_wasb_log_container`` container and path ``remote_base_log_folder``.
+#. Ensure :ref:`connection <howto/connection:wasb>` is already setup with read and write access to Azure Blob Storage in the ``remote_wasb_log_container`` container and path ``remote_base_log_folder``. The connection should be configured with appropriate authentication credentials (such as account key, shared access key, or managed identity). For account key authentication, you can add ``account_key`` to the connection's extra fields as a JSON dictionary: ``{"account_key": "your_account_key"}``.
 #. Setup the above configuration values. Please note that the container should already exist.
 #. Restart the Airflow webserver and scheduler, and trigger (or wait for) a new task execution.
 #. Verify that logs are showing up for newly executed tasks in the container at the specified base path you have defined.
diff --git a/providers/microsoft/azure/newsfragments/51944.bugfix.rst b/providers/microsoft/azure/newsfragments/51944.bugfix.rst
new file mode 100644
index 0000000000000..5706bcc088e17
--- /dev/null
+++ b/providers/microsoft/azure/newsfragments/51944.bugfix.rst
@@ -0,0 +1 @@
+Fix Azure Blob Storage authentication to check ``account_key`` field in connection extra before falling back to ``DefaultAzureCredential``
diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/wasb.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/wasb.py
index 8eb009592a15f..7ff704e0f5e45 100644
--- a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/wasb.py
+++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/wasb.py
@@ -67,8 +67,9 @@ class WasbHook(BaseHook):
     These parameters have to be passed in Airflow Data Base: account_name and account_key.
 
     Additional options passed in the 'extra' field of the connection will be
-    passed to the `BlockBlockService()` constructor. For example, authenticate
-    using a SAS token by adding {"sas_token": "YOUR_TOKEN"}.
+    passed to the `BlobServiceClient()` constructor. For example, authenticate
+    using a SAS token by adding {"sas_token": "YOUR_TOKEN"} or using an account key
+    by adding {"account_key": "YOUR_ACCOUNT_KEY"}.
 
     If no authentication configuration is provided, DefaultAzureCredential will be used (applicable
     when using Azure compute infrastructure).
@@ -121,7 +122,7 @@ def get_ui_field_behaviour(cls) -> dict[str, Any]:
                 "tenant_id": "tenant",
                 "shared_access_key": "shared access key",
                 "sas_token": "account url or token",
-                "extra": "additional options for use with ClientSecretCredential or DefaultAzureCredential",
+                "extra": "additional options for use with ClientSecretCredential, DefaultAzureCredential, or account_key authentication",
             },
         }
 
@@ -198,13 +199,18 @@ def get_conn(self) -> BlobServiceClient:
         # Fall back to old auth (password) or use managed identity if not provided.
         credential = conn.password
         if not credential:
-            managed_identity_client_id = self._get_field(extra, "managed_identity_client_id")
-            workload_identity_tenant_id = self._get_field(extra, "workload_identity_tenant_id")
-            credential = get_sync_default_azure_credential(
-                managed_identity_client_id=managed_identity_client_id,
-                workload_identity_tenant_id=workload_identity_tenant_id,
-            )
-            self.log.info("Using DefaultAzureCredential as credential")
+            # Check for account_key in extra fields before falling back to DefaultAzureCredential
+            account_key = self._get_field(extra, "account_key")
+            if account_key:
+                credential = account_key
+            else:
+                managed_identity_client_id = self._get_field(extra, "managed_identity_client_id")
+                workload_identity_tenant_id = self._get_field(extra, "workload_identity_tenant_id")
+                credential = get_sync_default_azure_credential(
+                    managed_identity_client_id=managed_identity_client_id,
+                    workload_identity_tenant_id=workload_identity_tenant_id,
+                )
+                self.log.info("Using DefaultAzureCredential as credential")
         return BlobServiceClient(
             account_url=account_url,
             credential=credential,
@@ -646,13 +652,18 @@ async def get_async_conn(self) -> AsyncBlobServiceClient:
         # Fall back to old auth (password) or use managed identity if not provided.
         credential = conn.password
         if not credential:
-            managed_identity_client_id = self._get_field(extra, "managed_identity_client_id")
-            workload_identity_tenant_id = self._get_field(extra, "workload_identity_tenant_id")
-            credential = get_async_default_azure_credential(
-                managed_identity_client_id=managed_identity_client_id,
-                workload_identity_tenant_id=workload_identity_tenant_id,
-            )
-            self.log.info("Using DefaultAzureCredential as credential")
+            # Check for account_key in extra fields before falling back to DefaultAzureCredential
+            account_key = self._get_field(extra, "account_key")
+            if account_key:
+                credential = account_key
+            else:
+                managed_identity_client_id = self._get_field(extra, "managed_identity_client_id")
+                workload_identity_tenant_id = self._get_field(extra, "workload_identity_tenant_id")
+                credential = get_async_default_azure_credential(
+                    managed_identity_client_id=managed_identity_client_id,
+                    workload_identity_tenant_id=workload_identity_tenant_id,
+                )
+                self.log.info("Using DefaultAzureCredential as credential")
         self.blob_service_client = AsyncBlobServiceClient(
             account_url=account_url,
             credential=credential,
diff --git a/providers/microsoft/azure/tests/unit/microsoft/azure/hooks/test_wasb.py b/providers/microsoft/azure/tests/unit/microsoft/azure/hooks/test_wasb.py
index 55895879fac53..dffb2eeb4bb2d 100644
--- a/providers/microsoft/azure/tests/unit/microsoft/azure/hooks/test_wasb.py
+++ b/providers/microsoft/azure/tests/unit/microsoft/azure/hooks/test_wasb.py
@@ -79,6 +79,7 @@ def setup_method(self, create_mock_connections):
         self.public_read_conn_id = "pub_read_id"
         self.public_read_conn_id_without_host = "pub_read_id_without_host"
         self.managed_identity_conn_id = "managed_identity_conn_id"
+        self.account_key_conn_id = "account_key_conn_id"
         self.authority = "https://test_authority.com"
 
         self.proxies = PROXIES
@@ -135,6 +136,12 @@ def setup_method(self, create_mock_connections):
                 conn_type=self.connection_type,
                 extra={"proxies": self.proxies},
             ),
+            Connection(
+                conn_id=self.account_key_conn_id,
+                conn_type=self.connection_type,
+                login="testaccount",
+                extra={"account_key": "test_account_key", "proxies": self.proxies},
+            ),
             Connection(
                 conn_id="sas_conn_id",
                 conn_type=self.connection_type,
@@ -223,6 +230,16 @@ def test_azure_directory_connection(self, mocked_client_secret_credential, mocke
             proxies=self.proxies,
         )
 
+    def test_account_key_connection(self, mocked_blob_service_client):
+        """Test that account_key from extra is used when no password is provided."""
+        WasbHook(wasb_conn_id=self.account_key_conn_id).get_conn()
+        mocked_blob_service_client.assert_called_once_with(
+            account_url="https://testaccount.blob.core.windows.net/",
+            credential="test_account_key",
+            proxies=self.proxies,
+            account_key="test_account_key",
+        )
+
     @pytest.mark.parametrize(
         "mocked_connection",
         [
@@ -331,6 +348,7 @@ def test_sas_token_connection(self, conn_id_str, extra_key):
             "azure_shared_key_test",
             "ad_conn_id",
             "managed_identity_conn_id",
+            "account_key_conn_id",
             "sas_conn_id",
             "extra__wasb__sas_conn_id",
             "http_sas_conn_id",
@@ -659,6 +677,7 @@ def test_connection_failure(self, mocked_blob_service_client):
             "azure_shared_key_test",
             "ad_conn_id",
             "managed_identity_conn_id",
+            "account_key_conn_id",
             "sas_conn_id",
             "extra__wasb__sas_conn_id",
             "http_sas_conn_id",

From 9312746ac9716ece629463a53097b420ed02567b Mon Sep 17 00:00:00 2001
From: karunpoudel <62040859+karunpoudel@users.noreply.github.com>
Date: Sat, 21 Jun 2025 15:22:50 -0400
Subject: [PATCH 030/381] fix `conn_name_attr` (#51948)

---
 .../src/airflow/providers/microsoft/azure/hooks/base_azure.py   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/base_azure.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/base_azure.py
index c54ece1e041f6..fcc01248b755a 100644
--- a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/base_azure.py
+++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/base_azure.py
@@ -41,7 +41,7 @@ class AzureBaseHook(BaseHook):
         which refers to the information to connect to the service.
     """
 
-    conn_name_attr = "azure_conn_id"
+    conn_name_attr = "conn_id"
     default_conn_name = "azure_default"
     conn_type = "azure"
     hook_name = "Azure"

From cf65598b8d94bb071dc01bc0399ed1eef0972252 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sat, 21 Jun 2025 21:23:23 +0200
Subject: [PATCH 031/381] Bump the core-ui-package-updates group across 1
 directory with 44 updates (#51942)

---
updated-dependencies:
- dependency-name: "@chakra-ui/react"
  dependency-version: 3.21.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: "@codemirror/lang-json"
  dependency-version: 6.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: core-ui-package-updates
- dependency-name: "@tanstack/react-query"
  dependency-version: 5.80.10
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: "@tanstack/react-virtual"
  dependency-version: 3.13.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: core-ui-package-updates
- dependency-name: "@uiw/codemirror-themes-all"
  dependency-version: 4.23.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: core-ui-package-updates
- dependency-name: "@uiw/react-codemirror"
  dependency-version: 4.23.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: core-ui-package-updates
- dependency-name: "@xyflow/react"
  dependency-version: 12.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: axios
  dependency-version: 1.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: chart.js
  dependency-version: 4.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: i18next
  dependency-version: 25.2.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: i18next-browser-languagedetector
  dependency-version: 8.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: next-themes
  dependency-version: 0.4.6
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: react
  dependency-version: 19.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
- dependency-name: "@types/react"
  dependency-version: 19.1.8
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
- dependency-name: react-dom
  dependency-version: 19.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
- dependency-name: "@types/react-dom"
  dependency-version: 19.1.6
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
- dependency-name: react-hook-form
  dependency-version: 7.58.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: react-hotkeys-hook
  dependency-version: 5.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
- dependency-name: react-i18next
  dependency-version: 15.5.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: core-ui-package-updates
- dependency-name: react-markdown
  dependency-version: 10.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
- dependency-name: react-resizable-panels
  dependency-version: 3.0.3
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
- dependency-name: react-router-dom
  dependency-version: 7.6.2
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
- dependency-name: use-debounce
  dependency-version: 10.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: core-ui-package-updates
- dependency-name: zustand
  dependency-version: 5.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: core-ui-package-updates
- dependency-name: "@eslint/compat"
  dependency-version: 1.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: "@eslint/js"
  dependency-version: 9.29.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: "@stylistic/eslint-plugin"
  dependency-version: 4.4.1
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
- dependency-name: "@tanstack/eslint-plugin-query"
  dependency-version: 5.78.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: "@trivago/prettier-plugin-sort-imports"
  dependency-version: 5.2.2
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
- dependency-name: "@types/node"
  dependency-version: 24.0.3
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
- dependency-name: "@types/react"
  dependency-version: 19.1.8
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
- dependency-name: "@types/react-dom"
  dependency-version: 19.1.6
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
- dependency-name: "@vitejs/plugin-react-swc"
  dependency-version: 3.10.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: "@vitest/coverage-v8"
  dependency-version: 3.2.4
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
- dependency-name: eslint
  dependency-version: 9.29.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: eslint-config-prettier
  dependency-version: 10.1.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: core-ui-package-updates
- dependency-name: eslint-plugin-perfectionist
  dependency-version: 4.15.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: eslint-plugin-prettier
  dependency-version: 5.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: eslint-plugin-react-hooks
  dependency-version: 5.2.0
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
- dependency-name: eslint-plugin-unicorn
  dependency-version: 59.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
- dependency-name: globals
  dependency-version: 16.2.0
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
- dependency-name: happy-dom
  dependency-version: 18.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
- dependency-name: msw
  dependency-version: 2.10.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: typescript-eslint
  dependency-version: 8.34.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: vite
  dependency-version: 6.3.5
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
- dependency-name: vitest
  dependency-version: 3.2.4
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
 airflow-core/src/airflow/ui/package.json   |   88 +-
 airflow-core/src/airflow/ui/pnpm-lock.yaml | 4815 +++++++++-----------
 2 files changed, 2170 insertions(+), 2733 deletions(-)

diff --git a/airflow-core/src/airflow/ui/package.json b/airflow-core/src/airflow/ui/package.json
index 2429adc35a0c7..0ab5b684d2066 100644
--- a/airflow-core/src/airflow/ui/package.json
+++ b/airflow-core/src/airflow/ui/package.json
@@ -17,84 +17,84 @@
   },
   "dependencies": {
     "@chakra-ui/anatomy": "^2.3.4",
-    "@chakra-ui/react": "^3.20.0",
-    "@codemirror/lang-json": "^6.0.1",
+    "@chakra-ui/react": "^3.21.0",
+    "@codemirror/lang-json": "^6.0.2",
     "@emotion/react": "^11.14.0",
-    "@tanstack/react-query": "^5.75.1",
+    "@tanstack/react-query": "^5.80.10",
     "@tanstack/react-table": "^8.21.3",
-    "@tanstack/react-virtual": "^3.13.8",
+    "@tanstack/react-virtual": "^3.13.10",
     "@types/debounce-promise": "^3.1.9",
-    "@uiw/codemirror-themes-all": "^4.23.12",
-    "@uiw/react-codemirror": "^4.23.12",
+    "@uiw/codemirror-themes-all": "^4.23.13",
+    "@uiw/react-codemirror": "^4.23.13",
     "@visx/group": "^3.12.0",
     "@visx/shape": "^3.12.0",
-    "@xyflow/react": "^12.4.4",
-    "axios": "^1.8.4",
+    "@xyflow/react": "^12.7.0",
+    "axios": "^1.10.0",
     "chakra-react-select": "6.1.0",
-    "chart.js": "^4.4.9",
+    "chart.js": "^4.5.0",
     "chartjs-plugin-annotation": "^3.1.0",
     "dayjs": "^1.11.13",
     "debounce-promise": "^3.1.2",
     "elkjs": "^0.10.0",
     "html-to-image": "^1.11.13",
-    "i18next": "^25.1.2",
-    "i18next-browser-languagedetector": "^8.1.0",
+    "i18next": "^25.2.1",
+    "i18next-browser-languagedetector": "^8.2.0",
     "i18next-http-backend": "^3.0.2",
-    "next-themes": "^0.3.0",
-    "react": "^18.3.1",
+    "next-themes": "^0.4.6",
+    "react": "^19.1.0",
     "react-chartjs-2": "^5.3.0",
-    "react-dom": "^18.3.1",
-    "react-hook-form": "^7.56.1",
-    "react-hotkeys-hook": "^4.6.1",
-    "react-i18next": "^15.5.1",
+    "react-dom": "^19.1.0",
+    "react-hook-form": "^7.58.1",
+    "react-hotkeys-hook": "^5.1.0",
+    "react-i18next": "^15.5.3",
     "react-icons": "^5.5.0",
     "react-innertext": "^1.1.5",
     "react-json-view": "^1.21.3",
-    "react-markdown": "^9.1.0",
-    "react-resizable-panels": "^2.1.7",
-    "react-router-dom": "^6.30.0",
+    "react-markdown": "^10.1.0",
+    "react-resizable-panels": "^3.0.3",
+    "react-router-dom": "^7.6.2",
     "react-syntax-highlighter": "^15.6.1",
     "remark-gfm": "^4.0.1",
-    "use-debounce": "^10.0.4",
+    "use-debounce": "^10.0.5",
     "usehooks-ts": "^3.1.1",
-    "zustand": "^5.0.4"
+    "zustand": "^5.0.5"
   },
   "devDependencies": {
     "@7nohe/openapi-react-query-codegen": "^1.6.2",
-    "@eslint/compat": "^1.2.9",
-    "@eslint/js": "^9.25.1",
-    "@stylistic/eslint-plugin": "^2.13.0",
-    "@tanstack/eslint-plugin-query": "^5.74.7",
+    "@eslint/compat": "^1.3.0",
+    "@eslint/js": "^9.29.0",
+    "@stylistic/eslint-plugin": "^4.4.1",
+    "@tanstack/eslint-plugin-query": "^5.78.0",
     "@testing-library/jest-dom": "^6.6.3",
     "@testing-library/react": "^16.3.0",
-    "@trivago/prettier-plugin-sort-imports": "^4.3.0",
-    "@types/node": "^22.15.3",
-    "@types/react": "^18.3.19",
-    "@types/react-dom": "^18.3.5",
+    "@trivago/prettier-plugin-sort-imports": "^5.2.2",
+    "@types/node": "^24.0.3",
+    "@types/react": "^19.1.8",
+    "@types/react-dom": "^19.1.6",
     "@types/react-syntax-highlighter": "^15.5.13",
-    "@vitejs/plugin-react-swc": "^3.9.0",
-    "@vitest/coverage-v8": "^2.1.9",
-    "eslint": "^9.25.1",
-    "eslint-config-prettier": "^10.1.2",
+    "@vitejs/plugin-react-swc": "^3.10.2",
+    "@vitest/coverage-v8": "^3.2.4",
+    "eslint": "^9.29.0",
+    "eslint-config-prettier": "^10.1.5",
     "eslint-plugin-i18next": "^6.1.1",
     "eslint-plugin-jsx-a11y": "^6.10.2",
-    "eslint-plugin-perfectionist": "^4.12.3",
-    "eslint-plugin-prettier": "^5.2.6",
+    "eslint-plugin-perfectionist": "^4.15.0",
+    "eslint-plugin-prettier": "^5.5.0",
     "eslint-plugin-react": "^7.37.5",
-    "eslint-plugin-react-hooks": "^4.6.2",
+    "eslint-plugin-react-hooks": "^5.2.0",
     "eslint-plugin-react-refresh": "^0.4.20",
-    "eslint-plugin-unicorn": "^55.0.0",
-    "globals": "^15.15.0",
-    "happy-dom": "^17.4.6",
+    "eslint-plugin-unicorn": "^59.0.1",
+    "globals": "^16.2.0",
+    "happy-dom": "^18.0.1",
     "jsonc-eslint-parser": "^2.4.0",
-    "msw": "^2.7.5",
+    "msw": "^2.10.2",
     "openapi-merge-cli": "^1.3.2",
     "prettier": "^3.5.3",
     "typescript": "~5.8.3",
-    "typescript-eslint": "^8.31.1",
-    "vite": "^5.4.19",
+    "typescript-eslint": "^8.34.1",
+    "vite": "^6.3.5",
     "vite-plugin-css-injected-by-js": "^3.5.2",
-    "vitest": "^2.1.9",
+    "vitest": "^3.2.4",
     "web-worker": "^1.5.0"
   },
   "pnpm": {
diff --git a/airflow-core/src/airflow/ui/pnpm-lock.yaml b/airflow-core/src/airflow/ui/pnpm-lock.yaml
index 04426f880c846..cf1c8812d67a2 100644
--- a/airflow-core/src/airflow/ui/pnpm-lock.yaml
+++ b/airflow-core/src/airflow/ui/pnpm-lock.yaml
@@ -12,53 +12,53 @@ importers:
         specifier: ^2.3.4
         version: 2.3.4
       '@chakra-ui/react':
-        specifier: ^3.20.0
-        version: 3.20.0(@emotion/react@11.14.0(@types/react@18.3.19)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+        specifier: ^3.21.0
+        version: 3.21.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
       '@codemirror/lang-json':
-        specifier: ^6.0.1
-        version: 6.0.1
+        specifier: ^6.0.2
+        version: 6.0.2
       '@emotion/react':
         specifier: ^11.14.0
-        version: 11.14.0(@types/react@18.3.19)(react@18.3.1)
+        version: 11.14.0(@types/react@19.1.8)(react@19.1.0)
       '@tanstack/react-query':
-        specifier: ^5.75.1
-        version: 5.75.4(react@18.3.1)
+        specifier: ^5.80.10
+        version: 5.80.10(react@19.1.0)
       '@tanstack/react-table':
         specifier: ^8.21.3
-        version: 8.21.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+        version: 8.21.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
       '@tanstack/react-virtual':
-        specifier: ^3.13.8
-        version: 3.13.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+        specifier: ^3.13.10
+        version: 3.13.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
       '@types/debounce-promise':
         specifier: ^3.1.9
         version: 3.1.9
       '@uiw/codemirror-themes-all':
-        specifier: ^4.23.12
-        version: 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+        specifier: ^4.23.13
+        version: 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
       '@uiw/react-codemirror':
-        specifier: ^4.23.12
-        version: 4.23.12(@babel/runtime@7.26.10)(@codemirror/autocomplete@6.18.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)(@lezer/common@1.2.3))(@codemirror/language@6.11.0)(@codemirror/lint@6.8.2)(@codemirror/search@6.5.6)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.36.4)(codemirror@6.0.1(@lezer/common@1.2.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+        specifier: ^4.23.13
+        version: 4.23.13(@babel/runtime@7.27.6)(@codemirror/autocomplete@6.18.2(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)(@lezer/common@1.2.3))(@codemirror/language@6.11.1)(@codemirror/lint@6.8.2)(@codemirror/search@6.5.6)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.37.2)(codemirror@6.0.1(@lezer/common@1.2.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
       '@visx/group':
         specifier: ^3.12.0
-        version: 3.12.0(react@18.3.1)
+        version: 3.12.0(react@19.1.0)
       '@visx/shape':
         specifier: ^3.12.0
-        version: 3.12.0(react@18.3.1)
+        version: 3.12.0(react@19.1.0)
       '@xyflow/react':
-        specifier: ^12.4.4
-        version: 12.4.4(@types/react@18.3.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+        specifier: ^12.7.0
+        version: 12.7.0(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
       axios:
-        specifier: ^1.8.4
-        version: 1.8.4
+        specifier: ^1.10.0
+        version: 1.10.0
       chakra-react-select:
         specifier: 6.1.0
-        version: 6.1.0(@chakra-ui/react@3.20.0(@emotion/react@11.14.0(@types/react@18.3.19)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.19)(next-themes@0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+        version: 6.1.0(@chakra-ui/react@3.21.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
       chart.js:
-        specifier: ^4.4.9
-        version: 4.4.9
+        specifier: ^4.5.0
+        version: 4.5.0
       chartjs-plugin-annotation:
         specifier: ^3.1.0
-        version: 3.1.0(chart.js@4.4.9)
+        version: 3.1.0(chart.js@4.5.0)
       dayjs:
         specifier: ^1.11.13
         version: 1.11.13
@@ -72,153 +72,153 @@ importers:
         specifier: ^1.11.13
         version: 1.11.13
       i18next:
-        specifier: ^25.1.2
-        version: 25.1.2(typescript@5.8.3)
+        specifier: ^25.2.1
+        version: 25.2.1(typescript@5.8.3)
       i18next-browser-languagedetector:
-        specifier: ^8.1.0
-        version: 8.1.0
+        specifier: ^8.2.0
+        version: 8.2.0
       i18next-http-backend:
         specifier: ^3.0.2
         version: 3.0.2
       next-themes:
-        specifier: ^0.3.0
-        version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+        specifier: ^0.4.6
+        version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
       react:
-        specifier: ^18.3.1
-        version: 18.3.1
+        specifier: ^19.1.0
+        version: 19.1.0
       react-chartjs-2:
         specifier: ^5.3.0
-        version: 5.3.0(chart.js@4.4.9)(react@18.3.1)
+        version: 5.3.0(chart.js@4.5.0)(react@19.1.0)
       react-dom:
-        specifier: ^18.3.1
-        version: 18.3.1(react@18.3.1)
+        specifier: ^19.1.0
+        version: 19.1.0(react@19.1.0)
       react-hook-form:
-        specifier: ^7.56.1
-        version: 7.56.2(react@18.3.1)
+        specifier: ^7.58.1
+        version: 7.58.1(react@19.1.0)
       react-hotkeys-hook:
-        specifier: ^4.6.1
-        version: 4.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+        specifier: ^5.1.0
+        version: 5.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
       react-i18next:
-        specifier: ^15.5.1
-        version: 15.5.1(i18next@25.1.2(typescript@5.8.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)
+        specifier: ^15.5.3
+        version: 15.5.3(i18next@25.2.1(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)
       react-icons:
         specifier: ^5.5.0
-        version: 5.5.0(react@18.3.1)
+        version: 5.5.0(react@19.1.0)
       react-innertext:
         specifier: ^1.1.5
-        version: 1.1.5(@types/react@18.3.19)(react@18.3.1)
+        version: 1.1.5(@types/react@19.1.8)(react@19.1.0)
       react-json-view:
         specifier: ^1.21.3
-        version: 1.21.3(@types/react@18.3.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+        version: 1.21.3(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
       react-markdown:
-        specifier: ^9.1.0
-        version: 9.1.0(@types/react@18.3.19)(react@18.3.1)
+        specifier: ^10.1.0
+        version: 10.1.0(@types/react@19.1.8)(react@19.1.0)
       react-resizable-panels:
-        specifier: ^2.1.7
-        version: 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+        specifier: ^3.0.3
+        version: 3.0.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
       react-router-dom:
-        specifier: ^6.30.0
-        version: 6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+        specifier: ^7.6.2
+        version: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
       react-syntax-highlighter:
         specifier: ^15.6.1
-        version: 15.6.1(react@18.3.1)
+        version: 15.6.1(react@19.1.0)
       remark-gfm:
         specifier: ^4.0.1
         version: 4.0.1
       use-debounce:
-        specifier: ^10.0.4
-        version: 10.0.4(react@18.3.1)
+        specifier: ^10.0.5
+        version: 10.0.5(react@19.1.0)
       usehooks-ts:
         specifier: ^3.1.1
-        version: 3.1.1(react@18.3.1)
+        version: 3.1.1(react@19.1.0)
       zustand:
-        specifier: ^5.0.4
-        version: 5.0.4(@types/react@18.3.19)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1))
+        specifier: ^5.0.5
+        version: 5.0.5(@types/react@19.1.8)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0))
     devDependencies:
       '@7nohe/openapi-react-query-codegen':
         specifier: ^1.6.2
         version: 1.6.2(commander@12.1.0)(glob@11.0.0)(magicast@0.3.5)(ts-morph@23.0.0)(typescript@5.8.3)
       '@eslint/compat':
-        specifier: ^1.2.9
-        version: 1.2.9(eslint@9.26.0(jiti@1.21.7))
+        specifier: ^1.3.0
+        version: 1.3.0(eslint@9.29.0(jiti@1.21.7))
       '@eslint/js':
-        specifier: ^9.25.1
-        version: 9.26.0
+        specifier: ^9.29.0
+        version: 9.29.0
       '@stylistic/eslint-plugin':
-        specifier: ^2.13.0
-        version: 2.13.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
+        specifier: ^4.4.1
+        version: 4.4.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
       '@tanstack/eslint-plugin-query':
-        specifier: ^5.74.7
-        version: 5.74.7(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
+        specifier: ^5.78.0
+        version: 5.78.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
       '@testing-library/jest-dom':
         specifier: ^6.6.3
         version: 6.6.3
       '@testing-library/react':
         specifier: ^16.3.0
-        version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.5(@types/react@18.3.19))(@types/react@18.3.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+        version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
       '@trivago/prettier-plugin-sort-imports':
-        specifier: ^4.3.0
-        version: 4.3.0(prettier@3.5.3)
+        specifier: ^5.2.2
+        version: 5.2.2(prettier@3.5.3)
       '@types/node':
-        specifier: ^22.15.3
-        version: 22.15.14
+        specifier: ^24.0.3
+        version: 24.0.3
       '@types/react':
-        specifier: ^18.3.19
-        version: 18.3.19
+        specifier: ^19.1.8
+        version: 19.1.8
       '@types/react-dom':
-        specifier: ^18.3.5
-        version: 18.3.5(@types/react@18.3.19)
+        specifier: ^19.1.6
+        version: 19.1.6(@types/react@19.1.8)
       '@types/react-syntax-highlighter':
         specifier: ^15.5.13
         version: 15.5.13
       '@vitejs/plugin-react-swc':
-        specifier: ^3.9.0
-        version: 3.9.0(vite@5.4.19(@types/node@22.15.14))
+        specifier: ^3.10.2
+        version: 3.10.2(@swc/helpers@0.5.17)(vite@6.3.5(@types/node@24.0.3)(jiti@1.21.7))
       '@vitest/coverage-v8':
-        specifier: ^2.1.9
-        version: 2.1.9(vitest@2.1.9(@types/node@22.15.14)(happy-dom@17.4.6)(msw@2.7.6(@types/node@22.15.14)(typescript@5.8.3)))
+        specifier: ^3.2.4
+        version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.3)(happy-dom@18.0.1)(jiti@1.21.7)(msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3)))
       eslint:
-        specifier: ^9.25.1
-        version: 9.26.0(jiti@1.21.7)
+        specifier: ^9.29.0
+        version: 9.29.0(jiti@1.21.7)
       eslint-config-prettier:
-        specifier: ^10.1.2
-        version: 10.1.2(eslint@9.26.0(jiti@1.21.7))
+        specifier: ^10.1.5
+        version: 10.1.5(eslint@9.29.0(jiti@1.21.7))
       eslint-plugin-i18next:
         specifier: ^6.1.1
         version: 6.1.1
       eslint-plugin-jsx-a11y:
         specifier: ^6.10.2
-        version: 6.10.2(eslint@9.26.0(jiti@1.21.7))
+        version: 6.10.2(eslint@9.29.0(jiti@1.21.7))
       eslint-plugin-perfectionist:
-        specifier: ^4.12.3
-        version: 4.12.3(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
+        specifier: ^4.15.0
+        version: 4.15.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
       eslint-plugin-prettier:
-        specifier: ^5.2.6
-        version: 5.4.0(eslint-config-prettier@10.1.2(eslint@9.26.0(jiti@1.21.7)))(eslint@9.26.0(jiti@1.21.7))(prettier@3.5.3)
+        specifier: ^5.5.0
+        version: 5.5.0(eslint-config-prettier@10.1.5(eslint@9.29.0(jiti@1.21.7)))(eslint@9.29.0(jiti@1.21.7))(prettier@3.5.3)
       eslint-plugin-react:
         specifier: ^7.37.5
-        version: 7.37.5(eslint@9.26.0(jiti@1.21.7))
+        version: 7.37.5(eslint@9.29.0(jiti@1.21.7))
       eslint-plugin-react-hooks:
-        specifier: ^4.6.2
-        version: 4.6.2(eslint@9.26.0(jiti@1.21.7))
+        specifier: ^5.2.0
+        version: 5.2.0(eslint@9.29.0(jiti@1.21.7))
       eslint-plugin-react-refresh:
         specifier: ^0.4.20
-        version: 0.4.20(eslint@9.26.0(jiti@1.21.7))
+        version: 0.4.20(eslint@9.29.0(jiti@1.21.7))
       eslint-plugin-unicorn:
-        specifier: ^55.0.0
-        version: 55.0.0(eslint@9.26.0(jiti@1.21.7))
+        specifier: ^59.0.1
+        version: 59.0.1(eslint@9.29.0(jiti@1.21.7))
       globals:
-        specifier: ^15.15.0
-        version: 15.15.0
+        specifier: ^16.2.0
+        version: 16.2.0
       happy-dom:
-        specifier: ^17.4.6
-        version: 17.4.6
+        specifier: ^18.0.1
+        version: 18.0.1
       jsonc-eslint-parser:
         specifier: ^2.4.0
         version: 2.4.0
       msw:
-        specifier: ^2.7.5
-        version: 2.7.6(@types/node@22.15.14)(typescript@5.8.3)
+        specifier: ^2.10.2
+        version: 2.10.2(@types/node@24.0.3)(typescript@5.8.3)
       openapi-merge-cli:
         specifier: ^1.3.2
         version: 1.3.2
@@ -229,17 +229,17 @@ importers:
         specifier: ~5.8.3
         version: 5.8.3
       typescript-eslint:
-        specifier: ^8.31.1
-        version: 8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
+        specifier: ^8.34.1
+        version: 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
       vite:
-        specifier: ^5.4.19
-        version: 5.4.19(@types/node@22.15.14)
+        specifier: ^6.3.5
+        version: 6.3.5(@types/node@24.0.3)(jiti@1.21.7)
       vite-plugin-css-injected-by-js:
         specifier: ^3.5.2
-        version: 3.5.2(vite@5.4.19(@types/node@22.15.14))
+        version: 3.5.2(vite@6.3.5(@types/node@24.0.3)(jiti@1.21.7))
       vitest:
-        specifier: ^2.1.9
-        version: 2.1.9(@types/node@22.15.14)(happy-dom@17.4.6)(msw@2.7.6(@types/node@22.15.14)(typescript@5.8.3))
+        specifier: ^3.2.4
+        version: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.3)(happy-dom@18.0.1)(jiti@1.21.7)(msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3))
       web-worker:
         specifier: ^1.5.0
         version: 1.5.0
@@ -267,62 +267,34 @@ packages:
     resolution: {integrity: sha512-9K6xOqeevacvweLGik6LnZCb1fBtCOSIWQs8d096XGeqoLKC33UVMGz9+77Gw44KvbH4pKcQPWo4ZpxkXYj05w==}
     engines: {node: '>= 16'}
 
-  '@ark-ui/react@5.12.0':
-    resolution: {integrity: sha512-UV89EqyESZoyr6rtvrbFJn/FejpswhvRVcfK44dZDU6h6UY8CxfR/6Ayvrq9UtFdD0dEawqwWrXS22l8Y05Nnw==}
+  '@ark-ui/react@5.14.0':
+    resolution: {integrity: sha512-7WWlCM3SowtF01e9NouuO4T6SYuKTM1dovR+2NZuuWTlqTBlvZ+1vPHS6BeqzXriwMLU7QUU+Y0i/TcI6/s/Sg==}
     peerDependencies:
       react: '>=18.0.0'
       react-dom: '>=18.0.0'
 
-  '@babel/code-frame@7.26.2':
-    resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
-    engines: {node: '>=6.9.0'}
-
   '@babel/code-frame@7.27.1':
     resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/generator@7.17.7':
-    resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/generator@7.26.10':
-    resolution: {integrity: sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-environment-visitor@7.24.7':
-    resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-function-name@7.24.7':
-    resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-hoist-variables@7.24.7':
-    resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==}
+  '@babel/generator@7.27.5':
+    resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==}
     engines: {node: '>=6.9.0'}
 
   '@babel/helper-module-imports@7.25.9':
     resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/helper-split-export-declaration@7.24.7':
-    resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-string-parser@7.25.9':
-    resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-validator-identifier@7.25.9':
-    resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
+  '@babel/helper-string-parser@7.27.1':
+    resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
     engines: {node: '>=6.9.0'}
 
   '@babel/helper-validator-identifier@7.27.1':
     resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/parser@7.26.10':
-    resolution: {integrity: sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==}
+  '@babel/parser@7.27.5':
+    resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==}
     engines: {node: '>=6.0.0'}
     hasBin: true
 
@@ -330,28 +302,25 @@ packages:
     resolution: {integrity: sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/template@7.26.9':
-    resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==}
+  '@babel/runtime@7.27.6':
+    resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/traverse@7.23.2':
-    resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==}
+  '@babel/template@7.27.2':
+    resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/traverse@7.26.10':
-    resolution: {integrity: sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==}
+  '@babel/traverse@7.27.4':
+    resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/types@7.17.0':
-    resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==}
+  '@babel/types@7.27.6':
+    resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/types@7.26.10':
-    resolution: {integrity: sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==}
-    engines: {node: '>=6.9.0'}
-
-  '@bcoe/v8-coverage@0.2.3':
-    resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
+  '@bcoe/v8-coverage@1.0.2':
+    resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==}
+    engines: {node: '>=18'}
 
   '@bundled-es-modules/cookie@2.0.1':
     resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==}
@@ -365,8 +334,8 @@ packages:
   '@chakra-ui/anatomy@2.3.4':
     resolution: {integrity: sha512-fFIYN7L276gw0Q7/ikMMlZxP7mvnjRaWJ7f3Jsf9VtDOi6eAYIBRrhQe6+SZ0PGmoOkRaBc7gSE5oeIbgFFyrw==}
 
-  '@chakra-ui/react@3.20.0':
-    resolution: {integrity: sha512-zHYQAUqrT2pZZ/Xi+sskRC/An9q4ZelLPJkFHdobftTYkcFo1FtkMbBO0AEBZhb/6mZGyfw3JLflSawkuR++uQ==}
+  '@chakra-ui/react@3.21.0':
+    resolution: {integrity: sha512-Ajw6GuUhfNhMagTM9cO1Lg/w/HSQUwsv55j2QvvvPw/dk01wHiGi1aihfuCLpa6QY4ElLNs6SS3f78xI9Fwo6A==}
     peerDependencies:
       '@emotion/react': '>=11'
       react: '>=18'
@@ -383,11 +352,11 @@ packages:
   '@codemirror/commands@6.8.1':
     resolution: {integrity: sha512-KlGVYufHMQzxbdQONiLyGQDUW0itrLZwq3CcY7xpv9ZLRHqzkBSoteocBHtMCoY7/Ci4xhzSrToIeLg7FxHuaw==}
 
-  '@codemirror/lang-json@6.0.1':
-    resolution: {integrity: sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==}
+  '@codemirror/lang-json@6.0.2':
+    resolution: {integrity: sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==}
 
-  '@codemirror/language@6.11.0':
-    resolution: {integrity: sha512-A7+f++LodNNc1wGgoRDTt78cOwWm9KVezApgjOMp1W4hM0898nsqBXwF+sbePE7ZRcjN7Sa1Z5m2oN27XkmEjQ==}
+  '@codemirror/language@6.11.1':
+    resolution: {integrity: sha512-5kS1U7emOGV84vxC+ruBty5sUgcD0te6dyupyRVG2zaSjhTDM73LhVKUtVwiqSe6QwmEoA4SCiU8AKPFyumAWQ==}
 
   '@codemirror/lint@6.8.2':
     resolution: {integrity: sha512-PDFG5DjHxSEjOXk9TQYYVjZDqlZTFaDBfhQixHnQOEVDDNHUbEh/hstAjcQJaA6FQdZTD1hquXTK0rVBLADR1g==}
@@ -401,8 +370,8 @@ packages:
   '@codemirror/theme-one-dark@6.1.2':
     resolution: {integrity: sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA==}
 
-  '@codemirror/view@6.36.4':
-    resolution: {integrity: sha512-ZQ0V5ovw/miKEXTvjgzRyjnrk9TwriUB1k4R5p7uNnHR9Hus+D1SXHGdJshijEzPFjU25xea/7nhIeSqYFKdbA==}
+  '@codemirror/view@6.37.2':
+    resolution: {integrity: sha512-XD3LdgQpxQs5jhOOZ2HRVT+Rj59O4Suc7g2ULvZ+Yi8eCkickrkZ5JFuoDhs2ST1mNI5zSsNYgR3NGa4OUrbnw==}
 
   '@emotion/babel-plugin@11.13.5':
     resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==}
@@ -448,150 +417,156 @@ packages:
   '@emotion/weak-memoize@0.4.0':
     resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==}
 
-  '@esbuild/aix-ppc64@0.21.5':
-    resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
-    engines: {node: '>=12'}
+  '@esbuild/aix-ppc64@0.25.5':
+    resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==}
+    engines: {node: '>=18'}
     cpu: [ppc64]
     os: [aix]
 
-  '@esbuild/android-arm64@0.21.5':
-    resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
-    engines: {node: '>=12'}
+  '@esbuild/android-arm64@0.25.5':
+    resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==}
+    engines: {node: '>=18'}
     cpu: [arm64]
     os: [android]
 
-  '@esbuild/android-arm@0.21.5':
-    resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
-    engines: {node: '>=12'}
+  '@esbuild/android-arm@0.25.5':
+    resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==}
+    engines: {node: '>=18'}
     cpu: [arm]
     os: [android]
 
-  '@esbuild/android-x64@0.21.5':
-    resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
-    engines: {node: '>=12'}
+  '@esbuild/android-x64@0.25.5':
+    resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==}
+    engines: {node: '>=18'}
     cpu: [x64]
     os: [android]
 
-  '@esbuild/darwin-arm64@0.21.5':
-    resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
-    engines: {node: '>=12'}
+  '@esbuild/darwin-arm64@0.25.5':
+    resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==}
+    engines: {node: '>=18'}
     cpu: [arm64]
     os: [darwin]
 
-  '@esbuild/darwin-x64@0.21.5':
-    resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
-    engines: {node: '>=12'}
+  '@esbuild/darwin-x64@0.25.5':
+    resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==}
+    engines: {node: '>=18'}
     cpu: [x64]
     os: [darwin]
 
-  '@esbuild/freebsd-arm64@0.21.5':
-    resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
-    engines: {node: '>=12'}
+  '@esbuild/freebsd-arm64@0.25.5':
+    resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==}
+    engines: {node: '>=18'}
     cpu: [arm64]
     os: [freebsd]
 
-  '@esbuild/freebsd-x64@0.21.5':
-    resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
-    engines: {node: '>=12'}
+  '@esbuild/freebsd-x64@0.25.5':
+    resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==}
+    engines: {node: '>=18'}
     cpu: [x64]
     os: [freebsd]
 
-  '@esbuild/linux-arm64@0.21.5':
-    resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
-    engines: {node: '>=12'}
+  '@esbuild/linux-arm64@0.25.5':
+    resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==}
+    engines: {node: '>=18'}
     cpu: [arm64]
     os: [linux]
 
-  '@esbuild/linux-arm@0.21.5':
-    resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
-    engines: {node: '>=12'}
+  '@esbuild/linux-arm@0.25.5':
+    resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==}
+    engines: {node: '>=18'}
     cpu: [arm]
     os: [linux]
 
-  '@esbuild/linux-ia32@0.21.5':
-    resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
-    engines: {node: '>=12'}
+  '@esbuild/linux-ia32@0.25.5':
+    resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==}
+    engines: {node: '>=18'}
     cpu: [ia32]
     os: [linux]
 
-  '@esbuild/linux-loong64@0.21.5':
-    resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
-    engines: {node: '>=12'}
+  '@esbuild/linux-loong64@0.25.5':
+    resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==}
+    engines: {node: '>=18'}
     cpu: [loong64]
     os: [linux]
 
-  '@esbuild/linux-mips64el@0.21.5':
-    resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
-    engines: {node: '>=12'}
+  '@esbuild/linux-mips64el@0.25.5':
+    resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==}
+    engines: {node: '>=18'}
     cpu: [mips64el]
     os: [linux]
 
-  '@esbuild/linux-ppc64@0.21.5':
-    resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
-    engines: {node: '>=12'}
+  '@esbuild/linux-ppc64@0.25.5':
+    resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==}
+    engines: {node: '>=18'}
     cpu: [ppc64]
     os: [linux]
 
-  '@esbuild/linux-riscv64@0.21.5':
-    resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
-    engines: {node: '>=12'}
+  '@esbuild/linux-riscv64@0.25.5':
+    resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==}
+    engines: {node: '>=18'}
     cpu: [riscv64]
     os: [linux]
 
-  '@esbuild/linux-s390x@0.21.5':
-    resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
-    engines: {node: '>=12'}
+  '@esbuild/linux-s390x@0.25.5':
+    resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==}
+    engines: {node: '>=18'}
     cpu: [s390x]
     os: [linux]
 
-  '@esbuild/linux-x64@0.21.5':
-    resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
-    engines: {node: '>=12'}
+  '@esbuild/linux-x64@0.25.5':
+    resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==}
+    engines: {node: '>=18'}
     cpu: [x64]
     os: [linux]
 
-  '@esbuild/netbsd-x64@0.21.5':
-    resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
-    engines: {node: '>=12'}
+  '@esbuild/netbsd-arm64@0.25.5':
+    resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==}
+    engines: {node: '>=18'}
+    cpu: [arm64]
+    os: [netbsd]
+
+  '@esbuild/netbsd-x64@0.25.5':
+    resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==}
+    engines: {node: '>=18'}
     cpu: [x64]
     os: [netbsd]
 
-  '@esbuild/openbsd-x64@0.21.5':
-    resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
-    engines: {node: '>=12'}
+  '@esbuild/openbsd-arm64@0.25.5':
+    resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==}
+    engines: {node: '>=18'}
+    cpu: [arm64]
+    os: [openbsd]
+
+  '@esbuild/openbsd-x64@0.25.5':
+    resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==}
+    engines: {node: '>=18'}
     cpu: [x64]
     os: [openbsd]
 
-  '@esbuild/sunos-x64@0.21.5':
-    resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
-    engines: {node: '>=12'}
+  '@esbuild/sunos-x64@0.25.5':
+    resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==}
+    engines: {node: '>=18'}
     cpu: [x64]
     os: [sunos]
 
-  '@esbuild/win32-arm64@0.21.5':
-    resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
-    engines: {node: '>=12'}
+  '@esbuild/win32-arm64@0.25.5':
+    resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==}
+    engines: {node: '>=18'}
     cpu: [arm64]
     os: [win32]
 
-  '@esbuild/win32-ia32@0.21.5':
-    resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
-    engines: {node: '>=12'}
+  '@esbuild/win32-ia32@0.25.5':
+    resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==}
+    engines: {node: '>=18'}
     cpu: [ia32]
     os: [win32]
 
-  '@esbuild/win32-x64@0.21.5':
-    resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
-    engines: {node: '>=12'}
+  '@esbuild/win32-x64@0.25.5':
+    resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==}
+    engines: {node: '>=18'}
     cpu: [x64]
     os: [win32]
 
-  '@eslint-community/eslint-utils@4.5.1':
-    resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
-
   '@eslint-community/eslint-utils@4.7.0':
     resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -602,8 +577,8 @@ packages:
     resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
     engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
 
-  '@eslint/compat@1.2.9':
-    resolution: {integrity: sha512-gCdSY54n7k+driCadyMNv8JSPzYLeDVM/ikZRtvtROBpRdFSkS8W9A82MqsaY7lZuwL0wiapgD0NT1xT0hyJsA==}
+  '@eslint/compat@1.3.0':
+    resolution: {integrity: sha512-ZBygRBqpDYiIHsN+d1WyHn3TYgzgpzLEcgJUxTATyiInQbKZz6wZb6+ljwdg8xeeOe4v03z6Uh6lELiw0/mVhQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       eslint: ^9.10.0
@@ -611,24 +586,32 @@ packages:
       eslint:
         optional: true
 
-  '@eslint/config-array@0.20.0':
-    resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==}
+  '@eslint/config-array@0.20.1':
+    resolution: {integrity: sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@eslint/config-helpers@0.2.2':
-    resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==}
+  '@eslint/config-helpers@0.2.3':
+    resolution: {integrity: sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
   '@eslint/core@0.13.0':
     resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
+  '@eslint/core@0.14.0':
+    resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@eslint/core@0.15.0':
+    resolution: {integrity: sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
   '@eslint/eslintrc@3.3.1':
     resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@eslint/js@9.26.0':
-    resolution: {integrity: sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==}
+  '@eslint/js@9.29.0':
+    resolution: {integrity: sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
   '@eslint/object-schema@2.1.6':
@@ -639,6 +622,10 @@ packages:
     resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
+  '@eslint/plugin-kit@0.3.2':
+    resolution: {integrity: sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
   '@floating-ui/core@1.6.9':
     resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==}
 
@@ -677,12 +664,12 @@ packages:
     resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
     engines: {node: '>=18.18'}
 
-  '@humanwhocodes/retry@0.4.2':
-    resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==}
+  '@humanwhocodes/retry@0.4.3':
+    resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
     engines: {node: '>=18.18'}
 
-  '@inquirer/confirm@5.1.8':
-    resolution: {integrity: sha512-dNLWCYZvXDjO3rnQfk2iuJNL4Ivwz/T2+C3+WnNfJKsNGSuOs3wAo2F6e0p946gtSAk31nZMfW+MRmYaplPKsg==}
+  '@inquirer/confirm@5.1.12':
+    resolution: {integrity: sha512-dpq+ielV9/bqgXRUbNH//KsY6WEw9DrGPmipkpmgC1Y46cwuBTNx7PXFWTjc3MQ+urcc0QxoVHcMI0FW4Ok0hg==}
     engines: {node: '>=18'}
     peerDependencies:
       '@types/node': '>=18'
@@ -690,8 +677,8 @@ packages:
       '@types/node':
         optional: true
 
-  '@inquirer/core@10.1.9':
-    resolution: {integrity: sha512-sXhVB8n20NYkUBfDYgizGHlpRVaCRjtuzNZA6xpALIUbkgfd2Hjz+DfEN6+h1BRnuxw0/P4jCIMjMsEOAMwAJw==}
+  '@inquirer/core@10.1.13':
+    resolution: {integrity: sha512-1viSxebkYN2nJULlzCxES6G9/stgHSepZ9LqqfdIGPHj5OHhiBUXVS0a6R0bEC2A+VL4D9w6QB66ebCr6HGllA==}
     engines: {node: '>=18'}
     peerDependencies:
       '@types/node': '>=18'
@@ -699,12 +686,12 @@ packages:
       '@types/node':
         optional: true
 
-  '@inquirer/figures@1.0.11':
-    resolution: {integrity: sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==}
+  '@inquirer/figures@1.0.12':
+    resolution: {integrity: sha512-MJttijd8rMFcKJC8NYmprWr6hD3r9Gd9qUC0XwPNwoEPWSMVJwA2MlXxF+nhZZNMY+HXsWa+o7KY2emWYIn0jQ==}
     engines: {node: '>=18'}
 
-  '@inquirer/type@3.0.5':
-    resolution: {integrity: sha512-ZJpeIYYueOz/i/ONzrfof8g89kNdO2hjGuvULROo3O8rlB2CRtSseE5KeirnyE4t/thAn/EwvS/vuQeJCn+NZg==}
+  '@inquirer/type@3.0.7':
+    resolution: {integrity: sha512-PfunHQcjwnju84L+ycmcMKB/pTPIngjUJvfnRhKY6FKPuYXlM4aQCb/nIdTFR6BEhMjFvngzvng/vBAJMZpLSA==}
     engines: {node: '>=18'}
     peerDependencies:
       '@types/node': '>=18'
@@ -712,11 +699,19 @@ packages:
       '@types/node':
         optional: true
 
-  '@internationalized/date@3.8.1':
-    resolution: {integrity: sha512-PgVE6B6eIZtzf9Gu5HvJxRK3ufUFz9DhspELuhW/N0GuMGMTLvPQNRkHP2hTuP9lblOk+f+1xi96sPiPXANXAA==}
+  '@internationalized/date@3.8.2':
+    resolution: {integrity: sha512-/wENk7CbvLbkUvX1tu0mwq49CVkkWpkXubGel6birjRPyo6uQ4nQpnq5xZu823zRCwwn82zgHrvgF1vZyvmVgA==}
 
-  '@internationalized/number@3.6.2':
-    resolution: {integrity: sha512-E5QTOlMg9wo5OrKdHD6edo1JJlIoOsylh0+mbf0evi1tHJwMZfJSaBpGtnJV9N7w3jeiioox9EG/EWRWPh82vg==}
+  '@internationalized/number@3.6.3':
+    resolution: {integrity: sha512-p+Zh1sb6EfrfVaS86jlHGQ9HA66fJhV9x5LiE5vCbZtXEHAuhcmUZUdZ4WrFpUBfNalr2OkAJI5AcKEQF+Lebw==}
+
+  '@isaacs/balanced-match@4.0.1':
+    resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
+    engines: {node: 20 || >=22}
+
+  '@isaacs/brace-expansion@5.0.0':
+    resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
+    engines: {node: 20 || >=22}
 
   '@isaacs/cliui@8.0.2':
     resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
@@ -765,12 +760,8 @@ packages:
   '@marijn/find-cluster-break@1.0.2':
     resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==}
 
-  '@modelcontextprotocol/sdk@1.11.0':
-    resolution: {integrity: sha512-k/1pb70eD638anoi0e8wUGAlbMJXyvdV4p62Ko+EZ7eBe1xMx8Uhak1R5DgfoofsK5IBBnRwsYGTaLZl+6/+RQ==}
-    engines: {node: '>=18'}
-
-  '@mswjs/interceptors@0.37.6':
-    resolution: {integrity: sha512-wK+5pLK5XFmgtH3aQ2YVvA3HohS3xqV/OxuVOdNx9Wpnz7VE/fnC+e1A7ln6LFYeck7gOJ/dsZV6OLplOtAJ2w==}
+  '@mswjs/interceptors@0.39.2':
+    resolution: {integrity: sha512-RuzCup9Ct91Y7V79xwCb146RaBRHZ7NBbrIUySumd1rpKqHL5OonaqrGIbug5hNwP/fRyxFMA6ISgw4FTtYFYg==}
     engines: {node: '>=18'}
 
   '@nodelib/fs.scandir@2.1.5':
@@ -801,182 +792,181 @@ packages:
     resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
     engines: {node: '>=14'}
 
-  '@pkgr/core@0.2.4':
-    resolution: {integrity: sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==}
+  '@pkgr/core@0.2.7':
+    resolution: {integrity: sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==}
     engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
 
-  '@remix-run/router@1.23.0':
-    resolution: {integrity: sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==}
-    engines: {node: '>=14.0.0'}
+  '@rolldown/pluginutils@1.0.0-beta.11':
+    resolution: {integrity: sha512-L/gAA/hyCSuzTF1ftlzUSI/IKr2POHsv1Dd78GfqkR83KMNuswWD61JxGV2L7nRwBBBSDr6R1gCkdTmoN7W4ag==}
 
-  '@rollup/rollup-android-arm-eabi@4.40.1':
-    resolution: {integrity: sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==}
+  '@rollup/rollup-android-arm-eabi@4.44.0':
+    resolution: {integrity: sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==}
     cpu: [arm]
     os: [android]
 
-  '@rollup/rollup-android-arm64@4.40.1':
-    resolution: {integrity: sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw==}
+  '@rollup/rollup-android-arm64@4.44.0':
+    resolution: {integrity: sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw==}
     cpu: [arm64]
     os: [android]
 
-  '@rollup/rollup-darwin-arm64@4.40.1':
-    resolution: {integrity: sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA==}
+  '@rollup/rollup-darwin-arm64@4.44.0':
+    resolution: {integrity: sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==}
     cpu: [arm64]
     os: [darwin]
 
-  '@rollup/rollup-darwin-x64@4.40.1':
-    resolution: {integrity: sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw==}
+  '@rollup/rollup-darwin-x64@4.44.0':
+    resolution: {integrity: sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==}
     cpu: [x64]
     os: [darwin]
 
-  '@rollup/rollup-freebsd-arm64@4.40.1':
-    resolution: {integrity: sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw==}
+  '@rollup/rollup-freebsd-arm64@4.44.0':
+    resolution: {integrity: sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ==}
     cpu: [arm64]
     os: [freebsd]
 
-  '@rollup/rollup-freebsd-x64@4.40.1':
-    resolution: {integrity: sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q==}
+  '@rollup/rollup-freebsd-x64@4.44.0':
+    resolution: {integrity: sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g==}
     cpu: [x64]
     os: [freebsd]
 
-  '@rollup/rollup-linux-arm-gnueabihf@4.40.1':
-    resolution: {integrity: sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==}
+  '@rollup/rollup-linux-arm-gnueabihf@4.44.0':
+    resolution: {integrity: sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==}
     cpu: [arm]
     os: [linux]
 
-  '@rollup/rollup-linux-arm-musleabihf@4.40.1':
-    resolution: {integrity: sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==}
+  '@rollup/rollup-linux-arm-musleabihf@4.44.0':
+    resolution: {integrity: sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==}
     cpu: [arm]
     os: [linux]
 
-  '@rollup/rollup-linux-arm64-gnu@4.40.1':
-    resolution: {integrity: sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==}
+  '@rollup/rollup-linux-arm64-gnu@4.44.0':
+    resolution: {integrity: sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==}
     cpu: [arm64]
     os: [linux]
 
-  '@rollup/rollup-linux-arm64-musl@4.40.1':
-    resolution: {integrity: sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==}
+  '@rollup/rollup-linux-arm64-musl@4.44.0':
+    resolution: {integrity: sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==}
     cpu: [arm64]
     os: [linux]
 
-  '@rollup/rollup-linux-loongarch64-gnu@4.40.1':
-    resolution: {integrity: sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==}
+  '@rollup/rollup-linux-loongarch64-gnu@4.44.0':
+    resolution: {integrity: sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==}
     cpu: [loong64]
     os: [linux]
 
-  '@rollup/rollup-linux-powerpc64le-gnu@4.40.1':
-    resolution: {integrity: sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==}
+  '@rollup/rollup-linux-powerpc64le-gnu@4.44.0':
+    resolution: {integrity: sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==}
     cpu: [ppc64]
     os: [linux]
 
-  '@rollup/rollup-linux-riscv64-gnu@4.40.1':
-    resolution: {integrity: sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==}
+  '@rollup/rollup-linux-riscv64-gnu@4.44.0':
+    resolution: {integrity: sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==}
     cpu: [riscv64]
     os: [linux]
 
-  '@rollup/rollup-linux-riscv64-musl@4.40.1':
-    resolution: {integrity: sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==}
+  '@rollup/rollup-linux-riscv64-musl@4.44.0':
+    resolution: {integrity: sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==}
     cpu: [riscv64]
     os: [linux]
 
-  '@rollup/rollup-linux-s390x-gnu@4.40.1':
-    resolution: {integrity: sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==}
+  '@rollup/rollup-linux-s390x-gnu@4.44.0':
+    resolution: {integrity: sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==}
     cpu: [s390x]
     os: [linux]
 
-  '@rollup/rollup-linux-x64-gnu@4.40.1':
-    resolution: {integrity: sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==}
+  '@rollup/rollup-linux-x64-gnu@4.44.0':
+    resolution: {integrity: sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==}
     cpu: [x64]
     os: [linux]
 
-  '@rollup/rollup-linux-x64-musl@4.40.1':
-    resolution: {integrity: sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==}
+  '@rollup/rollup-linux-x64-musl@4.44.0':
+    resolution: {integrity: sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==}
     cpu: [x64]
     os: [linux]
 
-  '@rollup/rollup-win32-arm64-msvc@4.40.1':
-    resolution: {integrity: sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==}
+  '@rollup/rollup-win32-arm64-msvc@4.44.0':
+    resolution: {integrity: sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==}
     cpu: [arm64]
     os: [win32]
 
-  '@rollup/rollup-win32-ia32-msvc@4.40.1':
-    resolution: {integrity: sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA==}
+  '@rollup/rollup-win32-ia32-msvc@4.44.0':
+    resolution: {integrity: sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA==}
     cpu: [ia32]
     os: [win32]
 
-  '@rollup/rollup-win32-x64-msvc@4.40.1':
-    resolution: {integrity: sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA==}
+  '@rollup/rollup-win32-x64-msvc@4.44.0':
+    resolution: {integrity: sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==}
     cpu: [x64]
     os: [win32]
 
-  '@stylistic/eslint-plugin@2.13.0':
-    resolution: {integrity: sha512-RnO1SaiCFHn666wNz2QfZEFxvmiNRqhzaMXHXxXXKt+MEP7aajlPxUSMIQpKAaJfverpovEYqjBOXDq6dDcaOQ==}
+  '@stylistic/eslint-plugin@4.4.1':
+    resolution: {integrity: sha512-CEigAk7eOLyHvdgmpZsKFwtiqS2wFwI1fn4j09IU9GmD4euFM4jEBAViWeCqaNLlbX2k2+A/Fq9cje4HQBXuJQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
-      eslint: '>=8.40.0'
+      eslint: '>=9.0.0'
 
-  '@swc/core-darwin-arm64@1.11.24':
-    resolution: {integrity: sha512-dhtVj0PC1APOF4fl5qT2neGjRLgHAAYfiVP8poJelhzhB/318bO+QCFWAiimcDoyMgpCXOhTp757gnoJJrheWA==}
+  '@swc/core-darwin-arm64@1.12.4':
+    resolution: {integrity: sha512-HihKfeitjZU2ab94Zf893sxzFryLKX0TweGsNXXOLNtkSMLw50auuYfpRM0BOL9/uXXtuCWgRIF6P030SAX5xQ==}
     engines: {node: '>=10'}
     cpu: [arm64]
     os: [darwin]
 
-  '@swc/core-darwin-x64@1.11.24':
-    resolution: {integrity: sha512-H/3cPs8uxcj2Fe3SoLlofN5JG6Ny5bl8DuZ6Yc2wr7gQFBmyBkbZEz+sPVgsID7IXuz7vTP95kMm1VL74SO5AQ==}
+  '@swc/core-darwin-x64@1.12.4':
+    resolution: {integrity: sha512-meYCXHyYb6RDdu2N5PNAf0EelyxPBFhRcVo4kBFLuvuNb0m6EUg///VWy8MUMXq9/s9uzGS9kJVXXdRdr/d6FA==}
     engines: {node: '>=10'}
     cpu: [x64]
     os: [darwin]
 
-  '@swc/core-linux-arm-gnueabihf@1.11.24':
-    resolution: {integrity: sha512-PHJgWEpCsLo/NGj+A2lXZ2mgGjsr96ULNW3+T3Bj2KTc8XtMUkE8tmY2Da20ItZOvPNC/69KroU7edyo1Flfbw==}
+  '@swc/core-linux-arm-gnueabihf@1.12.4':
+    resolution: {integrity: sha512-szfDbf7mE8V64of0q/LSqbk+em+T+TD3uqnH40Z7Qu/aL8vi5CHgyLjWG2SLkLLpyjgkAUF6AKrupgnBYcC2NA==}
     engines: {node: '>=10'}
     cpu: [arm]
     os: [linux]
 
-  '@swc/core-linux-arm64-gnu@1.11.24':
-    resolution: {integrity: sha512-C2FJb08+n5SD4CYWCTZx1uR88BN41ZieoHvI8A55hfVf2woT8+6ZiBzt74qW2g+ntZ535Jts5VwXAKdu41HpBg==}
+  '@swc/core-linux-arm64-gnu@1.12.4':
+    resolution: {integrity: sha512-n0IY76w+Scx8m3HIVRvLkoResuwsQgjDfAk9bxn99dq4leQO+mE0fkPl0Yw/1BIsPh+kxGfopIJH9zsZ1Z2YrA==}
     engines: {node: '>=10'}
     cpu: [arm64]
     os: [linux]
 
-  '@swc/core-linux-arm64-musl@1.11.24':
-    resolution: {integrity: sha512-ypXLIdszRo0re7PNNaXN0+2lD454G8l9LPK/rbfRXnhLWDBPURxzKlLlU/YGd2zP98wPcVooMmegRSNOKfvErw==}
+  '@swc/core-linux-arm64-musl@1.12.4':
+    resolution: {integrity: sha512-wE5jmFi5cEQyLy8WmCWmNwfKETrnzy2D8YNi/xpYWpLPWqPhcelpa6tswkfYlbsMmmOh7hQNoTba1QdGu0jvHQ==}
     engines: {node: '>=10'}
     cpu: [arm64]
     os: [linux]
 
-  '@swc/core-linux-x64-gnu@1.11.24':
-    resolution: {integrity: sha512-IM7d+STVZD48zxcgo69L0yYptfhaaE9cMZ+9OoMxirNafhKKXwoZuufol1+alEFKc+Wbwp+aUPe/DeWC/Lh3dg==}
+  '@swc/core-linux-x64-gnu@1.12.4':
+    resolution: {integrity: sha512-6S50Xd/7ePjEwrXyHMxpKTZ+KBrgUwMA8hQPbArUOwH4S5vHBr51heL0iXbUkppn1bkSr0J0IbOove5hzn+iqQ==}
     engines: {node: '>=10'}
     cpu: [x64]
     os: [linux]
 
-  '@swc/core-linux-x64-musl@1.11.24':
-    resolution: {integrity: sha512-DZByJaMVzSfjQKKQn3cqSeqwy6lpMaQDQQ4HPlch9FWtDx/dLcpdIhxssqZXcR2rhaQVIaRQsCqwV6orSDGAGw==}
+  '@swc/core-linux-x64-musl@1.12.4':
+    resolution: {integrity: sha512-hbYRyaHhC13vYKuGG5BrAG5fjjWEQFfQetuFp/4QKEoXDzdnabJoixxWTQACDL3m0JW32nJ+gUzsYIPtFYkwXg==}
     engines: {node: '>=10'}
     cpu: [x64]
     os: [linux]
 
-  '@swc/core-win32-arm64-msvc@1.11.24':
-    resolution: {integrity: sha512-Q64Ytn23y9aVDKN5iryFi8mRgyHw3/kyjTjT4qFCa8AEb5sGUuSj//AUZ6c0J7hQKMHlg9do5Etvoe61V98/JQ==}
+  '@swc/core-win32-arm64-msvc@1.12.4':
+    resolution: {integrity: sha512-e6EbfjPL8GA/bb1lc9Omtxjlz+1ThTsAuBsy4Q3Kpbuh6B3jclg8KzxU/6t91v23wG593mieTyR5f3Pr7X3AWw==}
     engines: {node: '>=10'}
     cpu: [arm64]
     os: [win32]
 
-  '@swc/core-win32-ia32-msvc@1.11.24':
-    resolution: {integrity: sha512-9pKLIisE/Hh2vJhGIPvSoTK4uBSPxNVyXHmOrtdDot4E1FUUI74Vi8tFdlwNbaj8/vusVnb8xPXsxF1uB0VgiQ==}
+  '@swc/core-win32-ia32-msvc@1.12.4':
+    resolution: {integrity: sha512-RG2FzmllBTUf4EksANlIvLckcBrLZEA0t13LIa6L213UZKQfEuDNHezqESgoVhJMg2S/tWauitATOCFgZNSmjg==}
     engines: {node: '>=10'}
     cpu: [ia32]
     os: [win32]
 
-  '@swc/core-win32-x64-msvc@1.11.24':
-    resolution: {integrity: sha512-sybnXtOsdB+XvzVFlBVGgRHLqp3yRpHK7CrmpuDKszhj/QhmsaZzY/GHSeALlMtLup13M0gqbcQvsTNlAHTg3w==}
+  '@swc/core-win32-x64-msvc@1.12.4':
+    resolution: {integrity: sha512-oRHKnZlR83zaMeVUCmHENa4j5uNRAWbmEpjYbzRcfC45LPFNWKGWGAGERLx0u87XMUtTGqnVYxnBTHN/rzDHOw==}
     engines: {node: '>=10'}
     cpu: [x64]
     os: [win32]
 
-  '@swc/core@1.11.24':
-    resolution: {integrity: sha512-MaQEIpfcEMzx3VWWopbofKJvaraqmL6HbLlw2bFZ7qYqYw3rkhM0cQVEgyzbHtTWwCwPMFZSC2DUbhlZgrMfLg==}
+  '@swc/core@1.12.4':
+    resolution: {integrity: sha512-hn30ebV4njAn0NAUM+3a0qCF+MJgqTNSrfA/hUAbC6TVjOQy2OYGQwkUvCu/V7S2+rZxrUsTpKOnZ7qqECZV9Q==}
     engines: {node: '>=10'}
     peerDependencies:
       '@swc/helpers': '>=0.5.17'
@@ -987,22 +977,22 @@ packages:
   '@swc/counter@0.1.3':
     resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
 
-  '@swc/helpers@0.5.15':
-    resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
+  '@swc/helpers@0.5.17':
+    resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
 
-  '@swc/types@0.1.21':
-    resolution: {integrity: sha512-2YEtj5HJVbKivud9N4bpPBAyZhj4S2Ipe5LkUG94alTpr7in/GU/EARgPAd3BwU+YOmFVJC2+kjqhGRi3r0ZpQ==}
+  '@swc/types@0.1.23':
+    resolution: {integrity: sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==}
 
-  '@tanstack/eslint-plugin-query@5.74.7':
-    resolution: {integrity: sha512-EeHuaaYiCOD+XOGyB7LMNEx9OEByAa5lkgP+S3ZggjKJpmIO6iRWeoIYYDKo2F8uc3qXcVhTfC7pn7NddQiNtA==}
+  '@tanstack/eslint-plugin-query@5.78.0':
+    resolution: {integrity: sha512-hYkhWr3UP0CkAsn/phBVR98UQawbw8CmTSgWtdgEBUjI60/GBaEIkpgi/Bp/2I8eIDK4+vdY7ac6jZx+GR+hEQ==}
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
 
-  '@tanstack/query-core@5.75.4':
-    resolution: {integrity: sha512-pcqOUgWG9oGlzkfRQQMMsEFmtQu0wq81A414CtELZGq+ztVwSTAaoB3AZRAXQJs88LmNMk2YpUKuQbrvzNDyRg==}
+  '@tanstack/query-core@5.80.10':
+    resolution: {integrity: sha512-mUNQOtzxkjL6jLbyChZoSBP6A5gQDVRUiPvW+/zw/9ftOAz+H754zCj3D8PwnzPKyHzGkQ9JbH48ukhym9LK1Q==}
 
-  '@tanstack/react-query@5.75.4':
-    resolution: {integrity: sha512-Vf65pzYRkf8fk9SP1ncIZjvaXszBhtsvpf+h45Y/9kOywOrVZfBGUpCdffdsVzbmBzmz6TCFes9bM0d3pRrIsA==}
+  '@tanstack/react-query@5.80.10':
+    resolution: {integrity: sha512-6zM098J8sLy9oU60XAdzUlAH4wVzoMVsWUWiiE/Iz4fd67PplxeyL4sw/MPcVJJVhbwGGXCsHn9GrQt2mlAzig==}
     peerDependencies:
       react: ^18 || ^19
 
@@ -1013,8 +1003,8 @@ packages:
       react: '>=16.8'
       react-dom: '>=16.8'
 
-  '@tanstack/react-virtual@3.13.8':
-    resolution: {integrity: sha512-meS2AanUg50f3FBSNoAdBSRAh8uS0ue01qm7zrw65KGJtiXB9QXfybqZwkh4uFpRv2iX/eu5tjcH5wqUpwYLPg==}
+  '@tanstack/react-virtual@3.13.10':
+    resolution: {integrity: sha512-nvrzk4E9mWB4124YdJ7/yzwou7IfHxlSef6ugCFcBfRmsnsma3heciiiV97sBNxyc3VuwtZvmwXd0aB5BpucVw==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
@@ -1023,8 +1013,8 @@ packages:
     resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==}
     engines: {node: '>=12'}
 
-  '@tanstack/virtual-core@3.13.8':
-    resolution: {integrity: sha512-BT6w89Hqy7YKaWewYzmecXQzcJh6HTBbKYJIIkMaNU49DZ06LoTV3z32DWWEdUsgW6n1xTmwTLs4GtWrZC261w==}
+  '@tanstack/virtual-core@3.13.10':
+    resolution: {integrity: sha512-sPEDhXREou5HyZYqSWIqdU580rsF6FGeN7vpzijmP3KTiOGjOMZASz4Y6+QKjiFQwhWrR58OP8izYaNGVxvViA==}
 
   '@testing-library/dom@10.4.0':
     resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==}
@@ -1049,14 +1039,21 @@ packages:
       '@types/react-dom':
         optional: true
 
-  '@trivago/prettier-plugin-sort-imports@4.3.0':
-    resolution: {integrity: sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ==}
+  '@trivago/prettier-plugin-sort-imports@5.2.2':
+    resolution: {integrity: sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA==}
+    engines: {node: '>18.12'}
     peerDependencies:
       '@vue/compiler-sfc': 3.x
       prettier: 2.x - 3.x
+      prettier-plugin-svelte: 3.x
+      svelte: 4.x || 5.x
     peerDependenciesMeta:
       '@vue/compiler-sfc':
         optional: true
+      prettier-plugin-svelte:
+        optional: true
+      svelte:
+        optional: true
 
   '@ts-morph/common@0.24.0':
     resolution: {integrity: sha512-c1xMmNHWpNselmpIqursHeOHHBTIsJLbB+NuovbTTRCNiTLEr/U9dbJ8qy0jd/O2x5pc3seWuOUN5R2IoOTp8A==}
@@ -1064,6 +1061,9 @@ packages:
   '@types/aria-query@5.0.4':
     resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==}
 
+  '@types/chai@5.2.2':
+    resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==}
+
   '@types/cookie@0.6.0':
     resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
 
@@ -1124,14 +1124,14 @@ packages:
   '@types/debug@4.1.12':
     resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
 
+  '@types/deep-eql@4.0.2':
+    resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
+
   '@types/estree-jsx@1.0.5':
     resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
 
-  '@types/estree@1.0.6':
-    resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
-
-  '@types/estree@1.0.7':
-    resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
+  '@types/estree@1.0.8':
+    resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
 
   '@types/geojson@7946.0.16':
     resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==}
@@ -1154,22 +1154,19 @@ packages:
   '@types/ms@2.1.0':
     resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
 
-  '@types/node@22.15.14':
-    resolution: {integrity: sha512-BL1eyu/XWsFGTtDWOYULQEs4KR0qdtYfCxYAUYRoB7JP7h9ETYLgQTww6kH8Sj2C0pFGgrpM0XKv6/kbIzYJ1g==}
+  '@types/node@20.19.1':
+    resolution: {integrity: sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA==}
 
-  '@types/normalize-package-data@2.4.4':
-    resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
+  '@types/node@24.0.3':
+    resolution: {integrity: sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==}
 
   '@types/parse-json@4.0.2':
     resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
 
-  '@types/prop-types@15.7.14':
-    resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==}
-
-  '@types/react-dom@18.3.5':
-    resolution: {integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==}
+  '@types/react-dom@19.1.6':
+    resolution: {integrity: sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==}
     peerDependencies:
-      '@types/react': ^18.0.0
+      '@types/react': ^19.0.0
 
   '@types/react-syntax-highlighter@15.5.13':
     resolution: {integrity: sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==}
@@ -1179,11 +1176,11 @@ packages:
     peerDependencies:
       '@types/react': '*'
 
-  '@types/react@18.3.19':
-    resolution: {integrity: sha512-fcdJqaHOMDbiAwJnXv6XCzX0jDW77yI3tJqYh1Byn8EL5/S628WRx9b/y3DnNe55zTukUQKrfYxiZls2dHcUMw==}
+  '@types/react@19.1.8':
+    resolution: {integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==}
 
-  '@types/statuses@2.0.5':
-    resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==}
+  '@types/statuses@2.0.6':
+    resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==}
 
   '@types/tough-cookie@4.0.5':
     resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
@@ -1194,105 +1191,70 @@ packages:
   '@types/unist@3.0.3':
     resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
 
-  '@typescript-eslint/eslint-plugin@8.32.0':
-    resolution: {integrity: sha512-/jU9ettcntkBFmWUzzGgsClEi2ZFiikMX5eEQsmxIAWMOn4H3D4rvHssstmAHGVvrYnaMqdWWWg0b5M6IN/MTQ==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
-      eslint: ^8.57.0 || ^9.0.0
-      typescript: '>=4.8.4 <5.9.0'
+  '@types/whatwg-mimetype@3.0.2':
+    resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==}
 
-  '@typescript-eslint/parser@8.32.0':
-    resolution: {integrity: sha512-B2MdzyWxCE2+SqiZHAjPphft+/2x2FlO9YBx7eKE1BCb+rqBlQdhtAEhzIEdozHd55DXPmxBdpMygFJjfjjA9A==}
+  '@typescript-eslint/eslint-plugin@8.34.1':
+    resolution: {integrity: sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
+      '@typescript-eslint/parser': ^8.34.1
       eslint: ^8.57.0 || ^9.0.0
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/scope-manager@8.27.0':
-    resolution: {integrity: sha512-8oI9GwPMQmBryaaxG1tOZdxXVeMDte6NyJA4i7/TWa4fBwgnAXYlIQP+uYOeqAaLJ2JRxlG9CAyL+C+YE9Xknw==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@typescript-eslint/scope-manager@8.28.0':
-    resolution: {integrity: sha512-u2oITX3BJwzWCapoZ/pXw6BCOl8rJP4Ij/3wPoGvY8XwvXflOzd1kLrDUUUAIEdJSFh+ASwdTHqtan9xSg8buw==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@typescript-eslint/scope-manager@8.32.0':
-    resolution: {integrity: sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@typescript-eslint/type-utils@8.32.0':
-    resolution: {integrity: sha512-t2vouuYQKEKSLtJaa5bB4jHeha2HJczQ6E5IXPDPgIty9EqcJxpr1QHQ86YyIPwDwxvUmLfP2YADQ5ZY4qddZg==}
+  '@typescript-eslint/parser@8.34.1':
+    resolution: {integrity: sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/types@8.27.0':
-    resolution: {integrity: sha512-/6cp9yL72yUHAYq9g6DsAU+vVfvQmd1a8KyA81uvfDE21O2DwQ/qxlM4AR8TSdAu+kJLBDrEHKC5/W2/nxsY0A==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@typescript-eslint/types@8.28.0':
-    resolution: {integrity: sha512-bn4WS1bkKEjx7HqiwG2JNB3YJdC1q6Ue7GyGlwPHyt0TnVq6TtD/hiOdTZt71sq0s7UzqBFXD8t8o2e63tXgwA==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@typescript-eslint/types@8.32.0':
-    resolution: {integrity: sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@typescript-eslint/typescript-estree@8.27.0':
-    resolution: {integrity: sha512-BnKq8cqPVoMw71O38a1tEb6iebEgGA80icSxW7g+kndx0o6ot6696HjG7NdgfuAVmVEtwXUr3L8R9ZuVjoQL6A==}
+  '@typescript-eslint/project-service@8.34.1':
+    resolution: {integrity: sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/typescript-estree@8.28.0':
-    resolution: {integrity: sha512-H74nHEeBGeklctAVUvmDkxB1mk+PAZ9FiOMPFncdqeRBXxk1lWSYraHw8V12b7aa6Sg9HOBNbGdSHobBPuQSuA==}
+  '@typescript-eslint/scope-manager@8.34.1':
+    resolution: {integrity: sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/typescript-estree@8.32.0':
-    resolution: {integrity: sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ==}
+  '@typescript-eslint/tsconfig-utils@8.34.1':
+    resolution: {integrity: sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/utils@8.27.0':
-    resolution: {integrity: sha512-njkodcwH1yvmo31YWgRHNb/x1Xhhq4/m81PhtvmRngD8iHPehxffz1SNCO+kwaePhATC+kOa/ggmvPoPza5i0Q==}
+  '@typescript-eslint/type-utils@8.34.1':
+    resolution: {integrity: sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/utils@8.28.0':
-    resolution: {integrity: sha512-OELa9hbTYciYITqgurT1u/SzpQVtDLmQMFzy/N8pQE+tefOyCWT79jHsav294aTqV1q1u+VzqDGbuujvRYaeSQ==}
+  '@typescript-eslint/types@8.34.1':
+    resolution: {integrity: sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@typescript-eslint/typescript-estree@8.34.1':
+    resolution: {integrity: sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/utils@8.32.0':
-    resolution: {integrity: sha512-8S9hXau6nQ/sYVtC3D6ISIDoJzS1NsCK+gluVhLN2YkBPX+/1wkwyUiDKnxRh15579WoOIyVWnoyIf3yGI9REw==}
+  '@typescript-eslint/utils@8.34.1':
+    resolution: {integrity: sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/visitor-keys@8.27.0':
-    resolution: {integrity: sha512-WsXQwMkILJvffP6z4U3FYJPlbf/j07HIxmDjZpbNvBJkMfvwXj5ACRkkHwBDvLBbDbtX5TdU64/rcvKJ/vuInQ==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@typescript-eslint/visitor-keys@8.28.0':
-    resolution: {integrity: sha512-hbn8SZ8w4u2pRwgQ1GlUrPKE+t2XvcCW5tTRF7j6SMYIuYG37XuzIW44JCZPa36evi0Oy2SnM664BlIaAuQcvg==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@typescript-eslint/visitor-keys@8.32.0':
-    resolution: {integrity: sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w==}
+  '@typescript-eslint/visitor-keys@8.34.1':
+    resolution: {integrity: sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@uiw/codemirror-extensions-basic-setup@4.23.12':
-    resolution: {integrity: sha512-l9vuiXOTFDBetYrRLDmz3jDxQHDsrVAZ2Y6dVfmrqi2AsulsDu+y7csW0JsvaMqo79rYkaIZg8yeqmDgMb7VyQ==}
+  '@uiw/codemirror-extensions-basic-setup@4.23.13':
+    resolution: {integrity: sha512-U1CnDFpq6ydNqrRDS5Bdnvgso8ezwwbrmKvmAD3hmoVyRDsDU6HTtmcV+w0rZ3kElUCkKI5lY0DMvTTQ4+L3RQ==}
     peerDependencies:
       '@codemirror/autocomplete': '>=6.0.0'
       '@codemirror/commands': '>=6.0.0'
@@ -1302,123 +1264,123 @@ packages:
       '@codemirror/state': '>=6.0.0'
       '@codemirror/view': '>=6.0.0'
 
-  '@uiw/codemirror-theme-abcdef@4.23.12':
-    resolution: {integrity: sha512-Jd7RpoUIMP01N3MRieVlUlMgh683E84lCGjHsDd4IgosgrZYfHJITJZVgOiRk+ei+lGUdDOQmr/jg3Zug7Lgxg==}
+  '@uiw/codemirror-theme-abcdef@4.23.13':
+    resolution: {integrity: sha512-n7rcYYitdLSwqirWGTC8MGJRO4esmU1LFLDul1qhKCbQyY6O5t+dzpCNlsH2cgiMhhr2so/XG/FRUGcMcSZQTw==}
 
-  '@uiw/codemirror-theme-abyss@4.23.12':
-    resolution: {integrity: sha512-oQbTTH+YV0os0kXDidhOgNeoMhDF7edF/O04wUO/75DTVcaBT+NHWO2BsR4R/vX8/FylUJEOUAoRYdX2mEfnVw==}
+  '@uiw/codemirror-theme-abyss@4.23.13':
+    resolution: {integrity: sha512-7e74zeYPo5n2KqT2PHiX8UVqfCrgu5CXxqycQm6d/66widnGS3AOXXM+utNRjc9j2ESHubtty4JsBfI86Q012Q==}
 
-  '@uiw/codemirror-theme-androidstudio@4.23.12':
-    resolution: {integrity: sha512-2PDjsaAvPxctvF5+i0eL1ntiZI/Vvi72aHSGIZNFMM5NKSCG6z+n9fn9Ci49Dy2JXkTnO8T20G89/DWhGd36cw==}
+  '@uiw/codemirror-theme-androidstudio@4.23.13':
+    resolution: {integrity: sha512-DcZmRGjFiU0mWCYqlrUPsKe5pWzoHP2Ab/QWckLTrHRDWuRjB+8bydqXupOWqfrxZqYM6dR5ptpwZCrMnMpFVg==}
 
-  '@uiw/codemirror-theme-andromeda@4.23.12':
-    resolution: {integrity: sha512-XM3WQkHmQr/h/uQlODiP6twa81UDNfNAmGcyWww+3HQIGU8eIRFQ1ZGGgT8tZKgCmdfMOC3p0/qr0d6r3/TfYQ==}
+  '@uiw/codemirror-theme-andromeda@4.23.13':
+    resolution: {integrity: sha512-KzmSaTEvc1IikN55OfXxaAYNp9puLsy8AjIXD+wUo0nAVhuRQXaw09x2EE7QIX31hOBOwyaCk97KMYkZPKQVrw==}
 
-  '@uiw/codemirror-theme-atomone@4.23.12':
-    resolution: {integrity: sha512-W4/GOQ5Flw7n59/29UD1uJV2iIVxzr7B/7oPTotn0/2BBArRbJNjOEWYQ1b/OgMl3+mZjNozaYgtr44tHHNSfg==}
+  '@uiw/codemirror-theme-atomone@4.23.13':
+    resolution: {integrity: sha512-k/ebwmO0BPdpCjZDPoei3+9FdbO8ChUgy4lozTtpWQTuG2H1IvGlH6ikLdVKdD3QjsL1IDkGx41Ih07clSZE9Q==}
 
-  '@uiw/codemirror-theme-aura@4.23.12':
-    resolution: {integrity: sha512-BnFsSAH+22CvD3AoQIEzRl8s07CR4SOGcrR2cQJWFLFSb7hlEa0myIEx9H4oEHtE1T40meKTx3pk2dpJTqL+IA==}
+  '@uiw/codemirror-theme-aura@4.23.13':
+    resolution: {integrity: sha512-fNEwb8Rq5VSykXmHabKH/JU0OZj4vVgs8Qr4/4xwmxj8t/v1gOIThJNd1/8ZTMFsmZ8aBORIacfwuqEquqDfdA==}
 
-  '@uiw/codemirror-theme-basic@4.23.12':
-    resolution: {integrity: sha512-KepDYk/yb1DPV733N0UwbngRlHmFjGR5gh4UOXZic9yI14ndx8jEJsa36Em8THNSCqhSpmn1zeCbnXBxhyF4rA==}
+  '@uiw/codemirror-theme-basic@4.23.13':
+    resolution: {integrity: sha512-7GYiryQZSZFpKuskc0d//Pn81z0OtnHhEQp3tZ5Jn2GQuMEHdZt9RomLLzqJTqOXOXVm37cKuYbd47XWcgejmw==}
 
-  '@uiw/codemirror-theme-bbedit@4.23.12':
-    resolution: {integrity: sha512-g5kHD1qTKCjINicbgLEi9MXR4r41klmum4kvFyo/SURwmjTDmetUB+MIqb0fvkcG9VzCiitxHVBl8ZNKxF8PWw==}
+  '@uiw/codemirror-theme-bbedit@4.23.13':
+    resolution: {integrity: sha512-7Yc3iQFEecbaQisy5YC+9aov/PVGSKZAEGRR86C+keC/3yxAe6jcg9a/rVuafegm70pKAhO+beGZGjot0k3DVQ==}
 
-  '@uiw/codemirror-theme-bespin@4.23.12':
-    resolution: {integrity: sha512-XuJlDs5fw2yNUBWRsjamExVlt/EsoZQmlZ97qYhK4CDvc/TjHZysVaMApGcwG56CJhGexf5BAxi8xJCFaDTEdQ==}
+  '@uiw/codemirror-theme-bespin@4.23.13':
+    resolution: {integrity: sha512-9VQ+utZYQBFTjXPNkWNwVwdjVCznp9q0bq6YCsvN/hH9y1iW5O4RlUqU6cmxJaNndkJS88FtpyO1c+HKxJ08FA==}
 
-  '@uiw/codemirror-theme-console@4.23.12':
-    resolution: {integrity: sha512-HnTjbG5+9tQf3Q+2GxsbVrrFfTjf0X+kd6npGMuiAzeakbJVQ+/yzGQVAg4mLU0nnGMZtoayTcdWcuacSIi38A==}
+  '@uiw/codemirror-theme-console@4.23.13':
+    resolution: {integrity: sha512-EtNsXdi5nVQ7uqHLhfpIlIHyGJfuIf9DkpcjWgLtpWYINGa9BGVwkNlke40tSf3P0J+QKxeFGJL0sdMRe6uhHA==}
 
-  '@uiw/codemirror-theme-copilot@4.23.12':
-    resolution: {integrity: sha512-ZICTJQCaFgJI2pJUHuj2NoEd7PZWsOGta1a5jk2SFwlr9JHPkOqrxZixwcoEMEuqtPGdoW+ezXa21H/mlik83g==}
+  '@uiw/codemirror-theme-copilot@4.23.13':
+    resolution: {integrity: sha512-vr3Ywydm0tV3b3Pty1YEKpvWF0InPuE0tQkynM7DVXxyit7SuSOXXjlZvAGlzUss8oospUpxYBLrSlJFyqxFXQ==}
 
-  '@uiw/codemirror-theme-darcula@4.23.12':
-    resolution: {integrity: sha512-+TsLGgPrwmjTyTXEOnjtNCsTpE1B6WDESTEeqFtdonLh2xkkT2URwpaRNumVeeTQ9ink/UBTIiGWmtAWiOa+Iw==}
+  '@uiw/codemirror-theme-darcula@4.23.13':
+    resolution: {integrity: sha512-eQbKRuFlxJRgpRfikMQDCyG+bk9iGbCmKnKTDxP9/b0qlRP3dnF5mdAe2VqBNapxju0Cn+cy8Wu8s7z0GiYzWg==}
 
-  '@uiw/codemirror-theme-dracula@4.23.12':
-    resolution: {integrity: sha512-ZTNKHvXCOdvXF62mLOkrumu5UeegK/Iip7lCwzW3ZdV4HgljDbnWshyLY6M8iLrjTI1QbYjVGJzt7J5lg5xgOA==}
+  '@uiw/codemirror-theme-dracula@4.23.13':
+    resolution: {integrity: sha512-Puw9aqYHA/r4iwIo+JMyIZ9taX2xkTAX4jOz8qVwI4x8LE+PvcF4jVLJkdBHmQEQEzZrKq4vrjrLnviZ2LStKw==}
 
-  '@uiw/codemirror-theme-duotone@4.23.12':
-    resolution: {integrity: sha512-8FUZQyUBJTLaxPU4trS7M658F0NTQ3rAjKCw4jW1N/LlUb9zedgxuGA8Ta/YWg05UbuqHKnMXpFlEXKlLzQqUA==}
+  '@uiw/codemirror-theme-duotone@4.23.13':
+    resolution: {integrity: sha512-JZWgBc7i9UBPgVW+35fML7YF8JHSG98PvV1wwa37J2UIQ4csrbgfvh/2g3EPMOPyHZrw9IrNZFLqpIWMJNP4KQ==}
 
-  '@uiw/codemirror-theme-eclipse@4.23.12':
-    resolution: {integrity: sha512-SVyvHPtrmS47IAnREuqG3YcAFJziLoFNtXg4dXX1IGjJzrT1ONGAn9vfMx0KNWOdGHpFUUFjiH8G3igI0VhZZA==}
+  '@uiw/codemirror-theme-eclipse@4.23.13':
+    resolution: {integrity: sha512-773gbWBg740h+YLaS7+78BoIPJzsvHYD6uEvmShMdN3bqUPsPtoLNf/+8SFGoF0PU24n9mrm+H8HH5twbhjd3w==}
 
-  '@uiw/codemirror-theme-github@4.23.12':
-    resolution: {integrity: sha512-yxgycQxA1fNVdrjIZ7H7pq+9Q+BeKLmD5oq5oOlw7kVJrnToOMBylv5oIWplVd2s2LFo47lIhWrVC9Ay3b6Baw==}
+  '@uiw/codemirror-theme-github@4.23.13':
+    resolution: {integrity: sha512-e75jgCl6Zf7sC63ntyl4r2GU6ekqKbyfIB4g6EnneQlIzJQiDTM+mU0/pDR5hLTyGQdxQpcDs9EmDqfEyejGSQ==}
 
-  '@uiw/codemirror-theme-gruvbox-dark@4.23.12':
-    resolution: {integrity: sha512-5SHwgUjpqSDpcWGM3xSWYZYZPRxq8XfrXB1XoHMkfz7pR5sXuJQ/sj09XM5vG+NiaCXGTvXITxq4QoixczpOqg==}
+  '@uiw/codemirror-theme-gruvbox-dark@4.23.13':
+    resolution: {integrity: sha512-GugvLaFUA2gAvVZtdTfYccm3DmADZZou9VzJMuyLwUCFNKMRTL5nSIRaQZlNTvJYp3tRrPEMoIjqsyxqbB4DBg==}
 
-  '@uiw/codemirror-theme-kimbie@4.23.12':
-    resolution: {integrity: sha512-kr+9nKzPgjVDyfPxRMjbRADrLhYjDsNyQIv4yXEgOdmVBxh6w2yzP0zFB1oEds+xzTsx5uLr1O4m2GfRRJx3xw==}
+  '@uiw/codemirror-theme-kimbie@4.23.13':
+    resolution: {integrity: sha512-ue4lh1z3bnDKYaNRPF0/OYHe5lSnfgpgSsR6uj7z2LcYaMmKIAf8R84SozWot7IN6IjfHLKVC5Zv0Iz0wb8VmA==}
 
-  '@uiw/codemirror-theme-material@4.23.12':
-    resolution: {integrity: sha512-M7yo5mE0QDKjWm02sN6Sw3Ld4/3XvAuJZcEdKYgqmiGI7GKL/nAV8HDfD8iMNm0HGnyozK402WLzb84oB57gAg==}
+  '@uiw/codemirror-theme-material@4.23.13':
+    resolution: {integrity: sha512-UrAi2ETtmkf2oblJp1cGiMXl/+S/rsQL/TF6+J/jDN9+fXIsluSm1E5Odg6SCWzdhmNgfeS6OxMcdHfkftapnA==}
 
-  '@uiw/codemirror-theme-monokai-dimmed@4.23.12':
-    resolution: {integrity: sha512-cFLtLIR8UT7/32imXsiEONBMHbHsqfXjOXe01PfzvDclghE1TDm/4kn12pG6mjztphnngnxQfYNSn6/eQTOq0Q==}
+  '@uiw/codemirror-theme-monokai-dimmed@4.23.13':
+    resolution: {integrity: sha512-lUF1N+faBd4mLHPFpMNT3uxAbT9/LfdyTsGTw1OsI4VcX51D+8GeW1KTcz1cDeHlJ2IVuG8sbJgAd3cSTTMAeA==}
 
-  '@uiw/codemirror-theme-monokai@4.23.12':
-    resolution: {integrity: sha512-axDkBX+txR4NKZLrEkFd+m50UQS579UEqneHz1cTQ8r0z7OYjAZo+7CwdXF5BliJOgaRTC617fyUqEr4X6UCkQ==}
+  '@uiw/codemirror-theme-monokai@4.23.13':
+    resolution: {integrity: sha512-R69hxAvAwhNlP9iOeY9b7Bnk7zCLb1951FWuNMRkMq+tpJJJ9sZ6UdME3Q0dKZwokU+kd2Pzjot2SpZ/Gdd+tA==}
 
-  '@uiw/codemirror-theme-noctis-lilac@4.23.12':
-    resolution: {integrity: sha512-iXc9O0AfeiUp4OXRf+u7nLfz5SQpcCVtvbOxb0+18taAsyisikkKcejUwCUk0hVauW9VKL2FErDkOOzn5z1FtQ==}
+  '@uiw/codemirror-theme-noctis-lilac@4.23.13':
+    resolution: {integrity: sha512-V/K6yhswPlvKL6pGp5QkaWAzGsxhC50vaUTQlzsm7dGN+ffwE4ufX4NRSJkPisRzM3GlxdYTTi0tu1112Xur+A==}
 
-  '@uiw/codemirror-theme-nord@4.23.12':
-    resolution: {integrity: sha512-U8w3VIuim9H1lEzReeNyv1+uwnPO+gc3gLXCFwxpwF/XDrTQf5TjQFL+c1AGVCYM/Ywf5sflUcF96C3z634r6g==}
+  '@uiw/codemirror-theme-nord@4.23.13':
+    resolution: {integrity: sha512-khQ4YklsTdeSN+ixF/JiCaig2zpLeqtd+fJdtK1iXH3u6BBWRNzPeTXZ519+9zHjuGeUDgCtuYqUy92YNlM87Q==}
 
-  '@uiw/codemirror-theme-okaidia@4.23.12':
-    resolution: {integrity: sha512-iunSHnMoCxJMUX1usfEQFIFzKhv807aMArMJ324y49nZLkmwZDuGNLYg2x4MUvdGyD9Ksa9N5eujoq++SekfGg==}
+  '@uiw/codemirror-theme-okaidia@4.23.13':
+    resolution: {integrity: sha512-0GPJ45l6FaB4mV9gVCbI8WehhfqaG3iB7Bma41fJcBoqTV26ocgzhTMCNs3JrdYu4EMNwVc7uLm7wm839mk5Mw==}
 
-  '@uiw/codemirror-theme-quietlight@4.23.12':
-    resolution: {integrity: sha512-p/btvByFWjRGNTQXRySOiInub3njLEoepPGqhU8V099ndmprzl3ef9bO5ANWDM7R8p6uciYUp6hS2u+PJPtu8g==}
+  '@uiw/codemirror-theme-quietlight@4.23.13':
+    resolution: {integrity: sha512-1EgWh1aVAVs9zNeuvGZQMYLHpt3i5kCc02eA5xPc6Ibyu3rc9WWqP1cdSybZ3lw4/GJGQyZxyjL6mNs4jwiitg==}
 
-  '@uiw/codemirror-theme-red@4.23.12':
-    resolution: {integrity: sha512-m9Xu01Ko1WuLThuYDdOQqVS6YgGV5Xz9s0Qv1idIbKNeu/HX8BGeWnjrxjkv6EhIX0zH+uN4wcWELZ7dHZZx6A==}
+  '@uiw/codemirror-theme-red@4.23.13':
+    resolution: {integrity: sha512-JaNXcyGC0KvWsOaPlAiYVdJP52P/3J3/8jizwKU8VAhXHm/YDUyLAnAHzHXL5W2IYHlYxqd7mMOoagY8Lj0k/Q==}
 
-  '@uiw/codemirror-theme-solarized@4.23.12':
-    resolution: {integrity: sha512-qAh5jS7P/qwLAJ93OP9r4Z3DdZh0SFq0uhwYXckSVVYtuypiYf3ZSpQLuiSQ7I/B9BMPtENt7GgthFIun21PYA==}
+  '@uiw/codemirror-theme-solarized@4.23.13':
+    resolution: {integrity: sha512-e6sota2PFvAubVlcWJnfFW1fpggZvU7BFtz/5wzSmBDMmZmAL2PQCGf8cv4W0XNVTFm/n8AnSmSTHJZfzCnljA==}
 
-  '@uiw/codemirror-theme-sublime@4.23.12':
-    resolution: {integrity: sha512-fblzQo2xIZqznuu26FhkUST0JFdcJS1pWGJfJUpR49/cY1yni7LW5m30oAklJT2NpPW2ZFi4YkhCqkOfEzXYAQ==}
+  '@uiw/codemirror-theme-sublime@4.23.13':
+    resolution: {integrity: sha512-bdT27xQNNIVKURTdN40mNJYtBYzcdpJInsn7ggs9eZY2RI1b/bFblCJNSyepGBFRt/KewDDu6ih/cmixHGZJwg==}
 
-  '@uiw/codemirror-theme-tokyo-night-day@4.23.12':
-    resolution: {integrity: sha512-wT/A0SI7aD9j3WQXkLlk3mLk81kZ8ZGD1Okz+YIk+DngH0uD730c5ZMv6AUSHbqAtPePgsjSOHMNS/IQfPOunQ==}
+  '@uiw/codemirror-theme-tokyo-night-day@4.23.13':
+    resolution: {integrity: sha512-YqO5w5LTLbZdPRFQNVbDk9VbDxV6QPG5UpDdC2QmeoMGkifxTBcUgTvXUzUS6/KU4/iw4DxMBssTcBnZBTHnBA==}
 
-  '@uiw/codemirror-theme-tokyo-night-storm@4.23.12':
-    resolution: {integrity: sha512-vBk7OMWmkNlReajWdApBe009SgE6h1D8GnmaamjLklnzuIjEDyy2HnbvRxK4cwaNBGDDT5SGRWVbiiKssLTQdQ==}
+  '@uiw/codemirror-theme-tokyo-night-storm@4.23.13':
+    resolution: {integrity: sha512-bL7NQsYSo7AztsVu0WADft4QMqUhhkhP6GVfEPAzi0fEHn+v7HKTelv9C1ljq2y0OCK2IDxhpd3Biy9To1jX/g==}
 
-  '@uiw/codemirror-theme-tokyo-night@4.23.12':
-    resolution: {integrity: sha512-4J4+RhN2qXeqNouY79K/0g69xjgTxqefZdfHv7Y7xFh0n76oR387ojHxut+98rcEOX7GKGXn8tXRoyhWWZVcxg==}
+  '@uiw/codemirror-theme-tokyo-night@4.23.13':
+    resolution: {integrity: sha512-FhvtU9RTYVxUwhl8K/6jJKC5IRnBgm76WCEtACsdfgvHS4qTa6m9E66qTbUUkfHi2G19GiO/RQVlU6cXgndiIw==}
 
-  '@uiw/codemirror-theme-tomorrow-night-blue@4.23.12':
-    resolution: {integrity: sha512-84aXg/k5kERu3iri48sGT/8uap2OQKELjt2Hv+js3mZcBUm7rM39NuSvXueSXhCoR4HjA3aV5q3rvUph9peZeg==}
+  '@uiw/codemirror-theme-tomorrow-night-blue@4.23.13':
+    resolution: {integrity: sha512-opz1ikxFo3LNkYU6TSd9YY7aE7I4dB3tEltJS9VB7zJh4ddrEiaNBVaGdjwVIl1Sqm448e2Uul0Eo5J0si9gzg==}
 
-  '@uiw/codemirror-theme-vscode@4.23.12':
-    resolution: {integrity: sha512-ePBaUQiixrpmSoZJWCGXUStKmcM8G0VBv3UqwPR+kNGBjqDife76Gbhv77izSeEI3zRPzL+683BOdclkvWnsMg==}
+  '@uiw/codemirror-theme-vscode@4.23.13':
+    resolution: {integrity: sha512-Fn79r3NBMPP/hF9ui1e8VCyEjVbZ+rW2MIIGgq/LOkLXZSDXEZRa6NhRt991IuZ6e0R8bprrx3TGVQnkVfODbQ==}
 
-  '@uiw/codemirror-theme-white@4.23.12':
-    resolution: {integrity: sha512-f2pHnI1UWNQQ3d8A+zNveMQMqE7RVFoMcgCAp5owM6EDI+o0RjyqUPDLH9H1mvCPc84qEMG7ZZrxjaG0C7oG1g==}
+  '@uiw/codemirror-theme-white@4.23.13':
+    resolution: {integrity: sha512-objVXKwMYwWmLyUxTxzvmz3IkpLUNrScO2X/5dcNPrkClj7Kc/Tkhc61sreq4DGVYN7jFu9bCOwhDdG6+bht1A==}
 
-  '@uiw/codemirror-theme-xcode@4.23.12':
-    resolution: {integrity: sha512-9KnTjhXFqwGphQl18CGRzRc6yB8SZkyv4L7u+j1QOq/nFmk3i44HKuHiuKY+J+XfFq3Cmxg629o3CK4ecMsvUQ==}
+  '@uiw/codemirror-theme-xcode@4.23.13':
+    resolution: {integrity: sha512-Q57CoaPCC7xr55zOV+502V4GgyNqgz2r8UBeLnOVzfMX2xS5YzsZgah7kUdmliN+PQAveohdmhuhzynhpbAz+g==}
 
-  '@uiw/codemirror-themes-all@4.23.12':
-    resolution: {integrity: sha512-nXBqEfbPUK2BQgPfC/18IlWX/jDKRFLVnSANK+NJBhz6coht+VVXfcGPcahjh+HfTvvWb+Ld6ZQAXBBpHxR6Cw==}
+  '@uiw/codemirror-themes-all@4.23.13':
+    resolution: {integrity: sha512-VwQQC05fCPp3ev74ceT9gqcHIIBB0LKr8SoiIgmrtGcn+3b+vKxD0ywTL9zPGCJzLq+CTaAwNyDH77q1zZuYmQ==}
 
-  '@uiw/codemirror-themes@4.23.12':
-    resolution: {integrity: sha512-8etEByfS9yttFZW0rcWhdZc7/JXJKRWlU5lHmJCI3GydZNGCzydNA+HtK9nWKpJUndVc58Q2sqSC5OIcwq8y6A==}
+  '@uiw/codemirror-themes@4.23.13':
+    resolution: {integrity: sha512-thk4X8VNl15XPoDiOXdkeMAIIHQOoc5lPfmgOvrhPXHzt4zvH5efLWBw3zgpwuOWF+Uk6sYrS0eumtsSO/kgcA==}
     peerDependencies:
       '@codemirror/language': '>=6.0.0'
       '@codemirror/state': '>=6.0.0'
       '@codemirror/view': '>=6.0.0'
 
-  '@uiw/react-codemirror@4.23.12':
-    resolution: {integrity: sha512-yseqWdzoAAGAW7i/NiU8YrfSLVOEBjQvSx1KpDTFVV/nn0AlAZoDVTIPEBgdXrPlVUQoCrwgpEaj3uZCklk9QA==}
+  '@uiw/react-codemirror@4.23.13':
+    resolution: {integrity: sha512-y65ULzxOAfpxrA/8epoAOeCfmJXu9z0P62BbGOkITJTtU7WI59KfPbbwj35npSsMAkAmDE841qZo2I8jst/THg==}
     peerDependencies:
       '@babel/runtime': '>=7.11.0'
       '@codemirror/state': '>=6.0.0'
@@ -1450,271 +1412,267 @@ packages:
   '@visx/vendor@3.12.0':
     resolution: {integrity: sha512-SVO+G0xtnL9dsNpGDcjCgoiCnlB3iLSM9KLz1sLbSrV7RaVXwY3/BTm2X9OWN1jH2a9M+eHt6DJ6sE6CXm4cUg==}
 
-  '@vitejs/plugin-react-swc@3.9.0':
-    resolution: {integrity: sha512-jYFUSXhwMCYsh/aQTgSGLIN3Foz5wMbH9ahb0Zva//UzwZYbMiZd7oT3AU9jHT9DLswYDswsRwPU9jVF3yA48Q==}
+  '@vitejs/plugin-react-swc@3.10.2':
+    resolution: {integrity: sha512-xD3Rdvrt5LgANug7WekBn1KhcvLn1H3jNBfJRL3reeOIua/WnZOEV5qi5qIBq5T8R0jUDmRtxuvk4bPhzGHDWw==}
     peerDependencies:
-      vite: ^4 || ^5 || ^6
+      vite: ^4 || ^5 || ^6 || ^7.0.0-beta.0
 
-  '@vitest/coverage-v8@2.1.9':
-    resolution: {integrity: sha512-Z2cOr0ksM00MpEfyVE8KXIYPEcBFxdbLSs56L8PO0QQMxt/6bDj45uQfxoc96v05KW3clk7vvgP0qfDit9DmfQ==}
+  '@vitest/coverage-v8@3.2.4':
+    resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==}
     peerDependencies:
-      '@vitest/browser': 2.1.9
-      vitest: 2.1.9
+      '@vitest/browser': 3.2.4
+      vitest: 3.2.4
     peerDependenciesMeta:
       '@vitest/browser':
         optional: true
 
-  '@vitest/expect@2.1.9':
-    resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==}
+  '@vitest/expect@3.2.4':
+    resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==}
 
-  '@vitest/mocker@2.1.9':
-    resolution: {integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==}
+  '@vitest/mocker@3.2.4':
+    resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==}
     peerDependencies:
       msw: ^2.4.9
-      vite: ^5.0.0
+      vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0
     peerDependenciesMeta:
       msw:
         optional: true
       vite:
         optional: true
 
-  '@vitest/pretty-format@2.1.9':
-    resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==}
+  '@vitest/pretty-format@3.2.4':
+    resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==}
 
-  '@vitest/runner@2.1.9':
-    resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==}
+  '@vitest/runner@3.2.4':
+    resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==}
 
-  '@vitest/snapshot@2.1.9':
-    resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==}
+  '@vitest/snapshot@3.2.4':
+    resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==}
 
-  '@vitest/spy@2.1.9':
-    resolution: {integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==}
+  '@vitest/spy@3.2.4':
+    resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==}
 
-  '@vitest/utils@2.1.9':
-    resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==}
+  '@vitest/utils@3.2.4':
+    resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
 
-  '@xyflow/react@12.4.4':
-    resolution: {integrity: sha512-9RZ9dgKZNJOlbrXXST5HPb5TcXPOIDGondjwcjDro44OQRPl1E0ZRPTeWPGaQtVjbg4WpR4BUYwOeshNI2TuVg==}
+  '@xyflow/react@12.7.0':
+    resolution: {integrity: sha512-U6VMEbYjiCg1byHrR7S+b5ZdHTjgCFX4KpBc634G/WtEBUvBLoMQdlCD6uJHqodnOAxpt3+G2wiDeTmXAFJzgQ==}
     peerDependencies:
       react: '>=17'
       react-dom: '>=17'
 
-  '@xyflow/system@0.0.52':
-    resolution: {integrity: sha512-pJBMaoh/GEebIABWEIxAai0yf57dm+kH7J/Br+LnLFPuJL87Fhcmm4KFWd/bCUy/kCWUg+2/yFAGY0AUHRPOnQ==}
+  '@xyflow/system@0.0.62':
+    resolution: {integrity: sha512-Z2ufbnvuYxIOCGyzE/8eX8TAEM8Lpzc/JafjD1Tzy6ZJs/E7KGVU17Q1F5WDHVW+dbztJAdyXMG0ejR9bwSUAA==}
 
-  '@zag-js/accordion@1.15.0':
-    resolution: {integrity: sha512-EKNeuKx+lOQ/deCe/ApCjVPxpxpDwT2NXvMPL+YvqXmSv7hAnTLs9fDKjbDUQUMmsyx32BsBd8t6d17DL3rPXg==}
+  '@zag-js/accordion@1.15.2':
+    resolution: {integrity: sha512-4ooxmmnEDeRLPLOCsrQeLHcTj+xTqBHm6pYEdho/pb67lHujAUSnbfEryorBSfvJEWdiUTYts96EfsLfbn5SYA==}
 
-  '@zag-js/anatomy@1.15.0':
-    resolution: {integrity: sha512-r0l5I7mSsF35HdwXm22TppNhfVftFuqvKfHvTUw+wQZhni4eUL93HypJD0Fl7mDhtP5zfVGfBwR048OzD0+tCw==}
+  '@zag-js/anatomy@1.15.2':
+    resolution: {integrity: sha512-GiWZk+fqO/W15FIRVhUL237xZmYMm/gcrp8b4VJGLpZE4qaQaBd4kSYObhIl/7AnLC45VjKbV7c8fLxZKd/5kA==}
 
-  '@zag-js/angle-slider@1.15.0':
-    resolution: {integrity: sha512-xIZBa9V6d05uK7+XQVhfdsThqbZKimSYVxtMOWJfG0sKn63N9VGPxL1OtOMq7FA4IP3SyvlelsGt+3t82TUiyA==}
+  '@zag-js/angle-slider@1.15.2':
+    resolution: {integrity: sha512-ItcDlKHJbPFfPGmmiCGcWcd0Y8xC+WH5Dji7+uzBl40L9hh8si7/FrY9EB2cX/qUTDppNyicLPIDnZRGkByTOA==}
 
-  '@zag-js/aria-hidden@1.15.0':
-    resolution: {integrity: sha512-3ogglAasycekTHI34ph16mqwM+VtHCOMtrFHWzPwB16itV5oDEeeMNdQXenHSSyQ/07nJ2QsRGFFjGhPm1kWNg==}
+  '@zag-js/aria-hidden@1.15.2':
+    resolution: {integrity: sha512-Uwt86QpEaI4qLFS/k4C7rwIfyiH8EdE5a4AWiQ26WsL8VOpjROn65rBEOJ8q3fG5CJXbdcqaYK3lg4ldqf9irQ==}
 
-  '@zag-js/auto-resize@1.15.0':
-    resolution: {integrity: sha512-EXgrsU7OWxc7obSOt8Okh0144H8DQi1S84OsOUY04Uni11Dnp5/X8+t6mvBbkw4/Qyz5UBjChjocwBcO+HHV8w==}
+  '@zag-js/auto-resize@1.15.2':
+    resolution: {integrity: sha512-Mg3IN3eIP2wKBFRm5qti/rjKpTj7sfIVNfO9BgWdHDSzli1VwaBX7GaOE3nGc1tZ2nJ8n0SWRvRSzr3b57cwKw==}
 
-  '@zag-js/avatar@1.15.0':
-    resolution: {integrity: sha512-EHGxzXb1mLf3n6x0z/rqFl1mghDB/gyfPAeaFUoA/cacmmMk8YB3aDUXkS9pTgN9stYJBM5f6T4xB1ZUhrP8tg==}
+  '@zag-js/avatar@1.15.2':
+    resolution: {integrity: sha512-4aG2ETJbdMTALyXwU/DeGfjs/dM0Kllje+t5ov52fQrtkY123JdrvKQkcvsc7Luph1kdN1tC1/2fe/pDMhycCg==}
 
-  '@zag-js/carousel@1.15.0':
-    resolution: {integrity: sha512-ZI9H34f2utdJ2Ek6GZa+iuRH4eC99GHD/VEOKLdGani8uadpT2v8M5kUwPGrlAJq9SiPbQ2UuXBmCkmurPQqdA==}
+  '@zag-js/carousel@1.15.2':
+    resolution: {integrity: sha512-7bcyEtWIhv7kw+V4H+Fv5rE8I8lf0LQOj+m3HTYzWo+wiLybFfI8/bg1qywjSYKsgZr3gmGVCEZhfx3BSpP3eA==}
 
-  '@zag-js/checkbox@1.15.0':
-    resolution: {integrity: sha512-6lQvPQNJXt7R0xxdpOuh2qtmAkzdBdqSvFIH7fE6GJzJ/AWiRZh0X+9deLQ76CN4EDUdxizEe7MlQfTI3a56aw==}
+  '@zag-js/checkbox@1.15.2':
+    resolution: {integrity: sha512-Ay/+rpKbxL4jE1pwVw52h0t79PpiifA6QlYnV4E+hWl1yJBkMRIi76Ryhqvqp4yY+2Wyr9OfDA9eHmQjapG4VA==}
 
-  '@zag-js/clipboard@1.15.0':
-    resolution: {integrity: sha512-Q3kh0fHvOEAJUywQm3zAWyltrYyiI8OpeZQ18k5Mf3/M+bq3gSphZL0+AYsgGbKUg5O2+hJ1SfiErAjyhRtBQA==}
+  '@zag-js/clipboard@1.15.2':
+    resolution: {integrity: sha512-EE5OlsIYbBklo62qu3A7GiUnsgmoGaoDZvhpYvpNM8StWNeRREcJZXRIizv4aFC46e5eODzSNcebnMLYa8Wcgw==}
 
-  '@zag-js/collapsible@1.15.0':
-    resolution: {integrity: sha512-GX0kdMlKk4Yk5k/2wN0prudf21k+TfArGr4EHqimTDR0vQE3dSdb3pYyPjw20fLzceKHBBCLsoi2v+YnS75gHA==}
+  '@zag-js/collapsible@1.15.2':
+    resolution: {integrity: sha512-vvUXQMFgwsZJphE4Ml5ap4FVhtyLOqK2QXPbt2+F8X8SRwJ3/pqsSsLFdH+ALpNoCK6WF9j+8FZ4lyidr7XPDw==}
 
-  '@zag-js/collection@1.15.0':
-    resolution: {integrity: sha512-oC3i6c/oP/FuNPsfgoC1reSXbAvDBGXl0HU3CcvXiNLHbjg2ek8J7kbow6MNuXK6chiksiOHbzKxHl2Oo0Ox7A==}
+  '@zag-js/collection@1.15.2':
+    resolution: {integrity: sha512-bJ9EtZ1Cpjh/rQFDMPTPrky/eSfaLpHWmMnk/S9b7wi+OhC0Hoqw38lcWzfc0AaE4bJsfru9/FLIsCDOLf7TSg==}
 
-  '@zag-js/color-picker@1.15.0':
-    resolution: {integrity: sha512-DGujS24h1OWkYL+TWyd+xukOO8NBgcSfFCINffa4ivkHtNx3nC28qkwLPRASbl7AK69pbrcuO6bx1Sy/JQJw0Q==}
+  '@zag-js/color-picker@1.15.2':
+    resolution: {integrity: sha512-UOYHECq+X6hSrgSxwBt5O4Y6f2IdOGMhe7P/LFev7Yn0x1F9fMxJZCIzvQGaQ2V/hR0eTatiKk5SmOp9+dJA/g==}
 
-  '@zag-js/color-utils@1.15.0':
-    resolution: {integrity: sha512-SKo+p5Fu0TBtdDua8UHVjptOkwLLBFoD499Z1FER/gr0R/97L03Kdir0YTxvKn5pXWXYY1EQn4hpTuTITN16lQ==}
+  '@zag-js/color-utils@1.15.2':
+    resolution: {integrity: sha512-c167QcxiVHgFZ7ca0PSQZ7skhbBOd6u1lIyWYzkZ2uPf0yJndqP9gFYPMbwK6d4WIM9k6y6mLdsWCGpqIJJsIg==}
 
-  '@zag-js/combobox@1.15.0':
-    resolution: {integrity: sha512-HBck3wcEeIOa7IQMsUkUKbm9cAU7bjoklIyq2zFGn90k7DcDa++oXK9Z2pmcd4TPoBYiyVuuXucaCcjmLX8V/Q==}
+  '@zag-js/combobox@1.15.2':
+    resolution: {integrity: sha512-lZXW99NLnRfLLY1ZOE0oqo4wMDglkUjKV1UZaHyj+yqXsiMtWhKQFQW/JeVBRDe6RCv8wWPPHMycNANMw581gQ==}
 
-  '@zag-js/core@1.15.0':
-    resolution: {integrity: sha512-P/8F3IXabMhpFnc6hC7GDg3rvUnvY27cuZU04hxjUqTH6+SfORIA/Uvqd4ekhC+dIprL9jicnFrmGgcyelyxfQ==}
+  '@zag-js/core@1.15.2':
+    resolution: {integrity: sha512-yUnh4I0nZ8rlszWgF402F5vGoYw7DNwStYz2TAO+4E08BpKBATw3FEdqAHPm+2xZm5qPqnPbM4iObwUlkBQUEw==}
 
-  '@zag-js/date-picker@1.15.0':
-    resolution: {integrity: sha512-IZD0V9MAljp1QhxYbST80AonryuDnyx7hvEy/RrBY/VOx6I4STtKfcSJ5ZZgVIzJfH8Yyaed4+IwcenqG7W5YQ==}
+  '@zag-js/date-picker@1.15.2':
+    resolution: {integrity: sha512-KElAFm3fW4GKGUNUe+jqqUX+P1H+Cigp/eGRgIl0dUjCwHocD1oN0ZCwNYmf7SJoWSgPRc1UJdA4XvpdU0IwPQ==}
     peerDependencies:
       '@internationalized/date': '>=3.0.0'
 
-  '@zag-js/date-utils@1.15.0':
-    resolution: {integrity: sha512-FX9EesJRnUTYTpbXf5EVfCbsXW5vYtZfc635aQzojc9ekk1FGcHpqQs8ZKfCOTPuauZFOX9i6139A4KoPfQOiw==}
+  '@zag-js/date-utils@1.15.2':
+    resolution: {integrity: sha512-U+HtfdtHJ5ed2ys8izMhu8gY5jQigCd8ExPN5Cxg5CoIbSkho9NT8o/eO9OW71jc2F4kwBh+q0reyxxLJnTSbw==}
     peerDependencies:
       '@internationalized/date': '>=3.0.0'
 
-  '@zag-js/dialog@1.15.0':
-    resolution: {integrity: sha512-Vlt5vySs4u8c8xBEh2JMUvRfPc+aaVEIIUtFVxpc2ORWhBXs9glijyp1yf3rNHJhjj8gqqhF5sEvs3yUTTAk+Q==}
+  '@zag-js/dialog@1.15.2':
+    resolution: {integrity: sha512-LUF+tiiUJj7v24txhC0TOwEgsfj1GCogAmBaiJKxvqrDEDv1B91J0b6SUQ5TuTMLW+hlBEzXZw0QsTxa9OXBew==}
 
-  '@zag-js/dismissable@1.15.0':
-    resolution: {integrity: sha512-yv575KWy8gA1p4aajOiY5l/nBQ3Xw+Mrjpungp1+wiGd/98eNAIKJ6/adldfbE1Ygd/Q4Dx2VQ7D1AmiTdwUSw==}
+  '@zag-js/dismissable@1.15.2':
+    resolution: {integrity: sha512-+WY8a1L+L8hXPGmWKqOsSg2KCHabVWXEX8mewHamltpSb86+2WMmblpLNgTwbm6V0T6txf1N8lFuzWMojMEWSg==}
 
-  '@zag-js/dom-query@1.15.0':
-    resolution: {integrity: sha512-z8H/j/Zs0eZEsGpbonScmlKSv0jEXKiAwUCrvQ9Mt6Gz9n0CQRM3MkFclSsM8aeiSv6qKLlhPfkzjl18OLkbgA==}
+  '@zag-js/dom-query@1.15.2':
+    resolution: {integrity: sha512-+r9Xj6hiQj9b2ZNkT3E/bDaXgigoAkhtikDXov9duAY14pFFJxazXr0NcVgacik8ytAEt6XOOshLcAftyalRKg==}
 
-  '@zag-js/editable@1.15.0':
-    resolution: {integrity: sha512-F14HKZuDsfkpfIkaF/ZDYPkz/pFf6VHrvoV0rdhj8wb8QJQ4nB+lgBv2APSwkEaFb/gGrnE19v3Ojlt5tqpPsw==}
+  '@zag-js/editable@1.15.2':
+    resolution: {integrity: sha512-32v7DXDBnDX1CiFpGRh9uclu48UJQJT2QZPQ0Bys3ZOFgMxsWH6tCKDb7iQTcINIc/XIx/9nclWnV5egzimG9w==}
 
-  '@zag-js/file-upload@1.15.0':
-    resolution: {integrity: sha512-2hAlQr9qdT8EH4XnmkNkEIDCCsmp2SMoMAjq6nJKYO8UJNQGRanU2B5S8jV3quJBz0vIY43SwyvqiZ3+1VrJSg==}
+  '@zag-js/file-upload@1.15.2':
+    resolution: {integrity: sha512-Zgac/da5QrUlE0ItlNy1kyMXfTy4ynTWnq4aZ4wZ9eVHUFQhLXERv8l+hYJetImISnuclmNVxNKP8Xk+5t4+tA==}
 
-  '@zag-js/file-utils@1.15.0':
-    resolution: {integrity: sha512-tahJt3JmrXaOtGiknH5PxIiOyyNvroMfjiBqOqnNksIPzDoWmVNxHOEme/ts7dJlkRD8U2qm2NFC2VS0bKerzg==}
+  '@zag-js/file-utils@1.15.2':
+    resolution: {integrity: sha512-aNUEBJUeK6G3pyf+zYnIMg0GgJnInddjGRedFeTnfK1UmlSO8wTbxQTCvjWd4Nnr5eCTpQkRq6wTZy8JeIcOpw==}
 
-  '@zag-js/floating-panel@1.15.0':
-    resolution: {integrity: sha512-AYYFseA1MeQUZl+zjNoKUu4j0kwz8EyJd4oJjs8uJIR6KG8u8QhpWYIBUny63M6AtZTCSYQAgBEcEh+mrbEyyQ==}
+  '@zag-js/floating-panel@1.15.2':
+    resolution: {integrity: sha512-8oG2MRXWWeXws7iVDmJFBqHLHYOGLvYe+vgXI3vgnLhmS4SeX9qAJj6qIOar7htOmEtp1p/KiBo2w2MYtzjuAw==}
 
-  '@zag-js/focus-trap@1.15.0':
-    resolution: {integrity: sha512-N8m/JpNe1gHUPJlr0hyGUdHg6pAuyJKkBaX0s38cyVntlo2CJhyAWZGuUdocpT2Q3HNPql666FNnH986rYPDKQ==}
+  '@zag-js/focus-trap@1.15.2':
+    resolution: {integrity: sha512-5EU5/Cg80oNO3z83A/33t9SOVYvLqLOuSPxt/7Xzy/L1Vj3vUj+s1ox6IpECmEFJcuql7X5yt6VIVitrLtgbFA==}
 
-  '@zag-js/focus-visible@1.15.0':
-    resolution: {integrity: sha512-TPXBf47tj6L0hhZNl9AWhuLoVzfPaNPM+/Gw8t9l9Whvy6v9rk/rqUCidY5LsrQuPiKTi7s5WI5J+Wod8ib3gw==}
+  '@zag-js/focus-visible@1.15.2':
+    resolution: {integrity: sha512-zElE5T41p5QaB4856xK2SeERmHrKbA/UMzoyHzrAk/N1r6dNiMOOx1hMyHy7y6pEhC9kjJFwEpXi1QEel6/ELA==}
 
-  '@zag-js/highlight-word@1.15.0':
-    resolution: {integrity: sha512-Rwr/rRm8BaF2xW9BAEJeA2wpFVx6HzoezfYQX7GFPPgw3N8nBMAYNjx+i1YIwIEcNyad2rbaBB+pSd2fZLIniA==}
+  '@zag-js/highlight-word@1.15.2':
+    resolution: {integrity: sha512-2a49h4k0ISIDydaZZDdASEHJpwxJeuZHSPCE7cM3/BWCR3H5galeC/jbNWRlTJVH4OQTYAR0I2wILQvOWLhSrw==}
 
-  '@zag-js/hover-card@1.15.0':
-    resolution: {integrity: sha512-j6BsE+metdnv/C/Ls0TZzAMN78rtS2r8M1ccHY5FFTGyUvZnlE8BY/QPNyCSSSCUpynymzMYh3IMYlxbJgfpSQ==}
+  '@zag-js/hover-card@1.15.2':
+    resolution: {integrity: sha512-FfNmhow8MPMp5RgTeC87x4EStFw+d1137w4QZ+fC5PystRzxGeiyDJyLRYGVeIQO2oP463az70vnxsbFAMu98A==}
 
-  '@zag-js/i18n-utils@1.15.0':
-    resolution: {integrity: sha512-anxSbT8kLbJaFJFSb0Ork2j/Lp+XVfMNCIgiBR2BuqUlfX72k23TIJvRxAfwNIkUfs0L8ikaSgLss9OwS4mAnw==}
+  '@zag-js/i18n-utils@1.15.2':
+    resolution: {integrity: sha512-1RnqCaxe+l4UR1O3fhn04T+J62yw/SkCByhrhrPSis/H7a65nW0WsoWiJTIgWp/hN9HI2Y3dVFfMEwQUFFHG1g==}
 
-  '@zag-js/interact-outside@1.15.0':
-    resolution: {integrity: sha512-OwBf/iesQGU9Oq3xe/tcK7gu7xipiGWsmwl2CcScr0fTp3BIMbQywHS928IgPk1DxA8KTHodY8wBjoY1dskfRA==}
+  '@zag-js/interact-outside@1.15.2':
+    resolution: {integrity: sha512-WbCICcMJHL6yS8vaou0FvKV6shl1Z+CefF7yzn5MEshPLbmy33WGQ2KBzodTkIQFM/C/zdVz5xKl8TbQmi7jUg==}
 
-  '@zag-js/listbox@1.15.0':
-    resolution: {integrity: sha512-Gcg76uWZwUAyMFZzGWpHnFCU/aaquNbXmVnyzzBgE3Co2snkv02rK1yG9iBwemZe3e5+VBifMMAtLLPAQJdz+g==}
+  '@zag-js/listbox@1.15.2':
+    resolution: {integrity: sha512-V6Zbi8HTiyhsV4GhFaiFYL2bJo4lOt24/SA9M/T5D7ZH+bTm3itPUxYddIBi9w6yRTU0gsorosD2GyFkHjchvg==}
 
-  '@zag-js/live-region@1.15.0':
-    resolution: {integrity: sha512-Xy1PqLZD9AKzKuTKCMo9miL1Xizk/N8qFvj64iybBKUYnKr89/af3w7hRFqd2BDX+q3zrNxPp9rZ6L7MlOc7kA==}
+  '@zag-js/live-region@1.15.2':
+    resolution: {integrity: sha512-dIrfDlKyNz99CQVeHu9RHe/x+yTBm3wFA7H655DXL7CugO9tpTlynkrTG9AB+0Z84JKZTeHh0vGVa2chTWKrNg==}
 
-  '@zag-js/menu@1.15.0':
-    resolution: {integrity: sha512-GbEBVYu0w7+88xrGX2GrjXfnwWuX5jLhoLiEcuxvxJQal/nahKrH4AGXJvHXNaRbj+53V3nWAh3u70C9210PWw==}
+  '@zag-js/menu@1.15.2':
+    resolution: {integrity: sha512-54dGUChMLyTrkCGbKGh0R8l/cg0vPFnGZwMG96zYJhkmXdpDMECZgBrN3j7B6RtEIvlAR8fMH5Sya58Amb3lGg==}
 
-  '@zag-js/number-input@1.15.0':
-    resolution: {integrity: sha512-+kK8kyXJhIAbEUnswoMDR+DSJUmvDNIOW0ffuZ9pbfukN3p6zaA3/dCp2Dtg3bQS7hGrFWgtrdejJ8l+mVvUAA==}
+  '@zag-js/number-input@1.15.2':
+    resolution: {integrity: sha512-qtDAVUdMXBhufBSwAgi8MXm7zHb36ujfWmxCJg6HbjKVF0BEAxeoye5VexgyYul7Hp8+Rr9LkW8X35W4amjJEQ==}
 
-  '@zag-js/pagination@1.15.0':
-    resolution: {integrity: sha512-Z62Q41fQPWqk59QyJk+9J0Ad3H9DCqZ0zZutI6iH8DdzT0A0xxmT6zhup6DM/8C8h0OLlaHFTWQnj0RdRNrnXg==}
+  '@zag-js/pagination@1.15.2':
+    resolution: {integrity: sha512-k1jT7UWDwgkYVsf83TTUhks6iZ7aQpcEjQ+iWI2LbZu98+bVhX9hpHfxdWbvTbueGk6WjB2xa1X0tsktII1mmQ==}
 
-  '@zag-js/password-input@1.15.0':
-    resolution: {integrity: sha512-oHuZKDRJIbycqWpTVznufy4L7K2g8kwcEaZ4runkwO2ocF00zP8HVmOZQzmhkUgTny0azErQydg8XE0VR5OfYg==}
+  '@zag-js/password-input@1.15.2':
+    resolution: {integrity: sha512-9BpQ26Z9XoCiNAHOmx3zwa+62+C6358/az0h3N24P4qS1EdTVWkhG1tsyPhRElg4v1koavZ40RMUppJQBH+DmA==}
 
-  '@zag-js/pin-input@1.15.0':
-    resolution: {integrity: sha512-IykjogZBG+BfbFXymSa+KGpOi5CrV9kl8HRm6G2V2Sr3NA5jEwMFaGSd/QrcHS9vh23D1Smx/io4pvF7c3q0kg==}
+  '@zag-js/pin-input@1.15.2':
+    resolution: {integrity: sha512-1KjGGmyldtEb4RwwdBTKzbgAwpNT6CyY274LvQC8lTCEUYOBkUmS9OUaKUbwkoluCdmXrugpg/XMulisRmMtgg==}
 
-  '@zag-js/popover@1.15.0':
-    resolution: {integrity: sha512-cdzEed3zcGbjSgPQnQnrsuXo2hVVslmSNwQbU5dHcNzG1uxxmtPCIMVeBUmGyJbAFF5XQpKCq/7mIr26dT73vw==}
+  '@zag-js/popover@1.15.2':
+    resolution: {integrity: sha512-6cD4eTwwj/bkTCDWVk0dMFqg01iD7qJofRSU3da7nde1Y0TMz8gBlt++GASgCF4p/hPeGLD18GcIF8FKka9IlA==}
 
-  '@zag-js/popper@1.15.0':
-    resolution: {integrity: sha512-Ra/0Ko423KN+8D4+mIFFkeTn9uaHfpxn6UUNIWwZKoiJQvED8DH4dPbLbmvGEoKp6qmisnRHAzi71NLgEhk0Mw==}
+  '@zag-js/popper@1.15.2':
+    resolution: {integrity: sha512-5uaFW9IU8bj3NdEiyuSp2eVJaPvWoA6/q7Fh423Va8booMYW4k1KFmz2BSxQ3JfK5lt3vPI0X2026gSxTx/vmg==}
 
-  '@zag-js/presence@1.15.0':
-    resolution: {integrity: sha512-hoxXis50pm79PpkY2kA1wdhh4AEo7t7pBv0VsQYZYjmzuFh4V5IMw9oa1EOfBlC6f/A+EMZ9E+xg+EVsB68a8w==}
+  '@zag-js/presence@1.15.2':
+    resolution: {integrity: sha512-cNPJz3qeXdoYFEefxFixZoMDFzqfHsLgmi2ynmRrFlyHzHtFdvKjvS5ywo9YFGNgwKrEddS43n8gl3w3lgqBCA==}
 
-  '@zag-js/progress@1.15.0':
-    resolution: {integrity: sha512-/Mz26GR2rOAuoErNOiSGRpvwckTmbCD5nWGDE/aYlVRID13HcsmN15Zk2Jfa4LadqK88aIN8Iy0Sk4elG0+Efw==}
+  '@zag-js/progress@1.15.2':
+    resolution: {integrity: sha512-VPunnrTYiJaHnnCKuh2ZARCnzgTtxYIiNKiUVPWlygsWy2AGg1K3AvVswF2CVfGpwbO4ioyBQO65EZkQiMN/Aw==}
 
-  '@zag-js/qr-code@1.15.0':
-    resolution: {integrity: sha512-GkGy5k5tk6DIui9lGjDO8+e8TsSVOxEGp1lblPiaRm1ggIh10GhIfCQWGe/x78ezdie8WzxlSrma89suTpaiAQ==}
+  '@zag-js/qr-code@1.15.2':
+    resolution: {integrity: sha512-hFtwGGArxVJo7osbY3R73BHIX3Ldb8G4gtNDZ2fGcKAcp+SQg5GXUIBK17ncxJrOC7A1Wp7sdOoYNNOPWe2fYA==}
 
-  '@zag-js/radio-group@1.15.0':
-    resolution: {integrity: sha512-+KTebHUtMsE/YDyGE8wF5VnWfZQp+f2WoAwwzBjfhPpRxXbOUMDo0pZEEr3yxkSvQ9hgCcBhMKH8pEk0SPxvjQ==}
+  '@zag-js/radio-group@1.15.2':
+    resolution: {integrity: sha512-+V9Y4EZuNITMbA9iJisysqWW+JB3YdlFF6dAomvXN8nuOuj8HE02JHndIeMflDtW6Tz99JcJLS7lNXN7G5uEuw==}
 
-  '@zag-js/rating-group@1.15.0':
-    resolution: {integrity: sha512-omGKN97FhplFwBX9J/Mj7BCZuwFXSXssSVTKU7Yp2d1Cmxhez4+Ju7KdSRNnIoWB4OxFCxwZyaAPTcg3E0Pjrg==}
+  '@zag-js/rating-group@1.15.2':
+    resolution: {integrity: sha512-g7F9NyB1MF6ydE9aEr9zLPXGKXZIH2ZsUBXEQ9u6apUhnchhCSHDw6xHVXI1hYGrJHnpf2xMw3Xu1opJge1DQg==}
 
-  '@zag-js/react@1.15.0':
-    resolution: {integrity: sha512-YSp9QBkdeBfZt4nVhJW+CUd5sNEEVAuwkmoZWDFUoDoWSAXwzSKuHCmTm5/8DaXg1IZD2bMrXgMNDqZv2x0hZw==}
+  '@zag-js/react@1.15.2':
+    resolution: {integrity: sha512-T5QPiLbW4DoQ32NS5+Qu9NsIXKKz0d5MOpfEdXXuc6hKZdvV+V9d7EXeHBRohs3P6jqtf8FXpXDdK2trv37YlQ==}
     peerDependencies:
       react: '>=18.0.0'
       react-dom: '>=18.0.0'
 
-  '@zag-js/rect-utils@1.15.0':
-    resolution: {integrity: sha512-sjAn78x1t3XiDG3NT8SoFfyO0u7/SEJU5RKRhMgjTPoOLXTzZj+lu2d5N4cUw0uZTfeGb/ormObSchMQVhFgYQ==}
+  '@zag-js/rect-utils@1.15.2':
+    resolution: {integrity: sha512-wPsOM4qYncwOli20MNINgl0ZwmMY11RvrgPvjcMrkJ9dVqU/YrCcXV4rIg8Zig5jxCT+mf7rWQe9aQJlNTVipA==}
 
-  '@zag-js/remove-scroll@1.15.0':
-    resolution: {integrity: sha512-vdWSAdgY8wJ7s4YeaKwTMwmZiRMBxCehmdktSxBWvwtAjU1cM3UWvjmZ9E6INJrQXxH9vDpe/rpFSyv1guIQIw==}
+  '@zag-js/remove-scroll@1.15.2':
+    resolution: {integrity: sha512-pXVuvFcAQND+C0KAzAve02hGaI/AgEhC7RpgpyUKaUzEccEsxLi40C88j1/2HCfta6GI7nd2e0QwPZiqngUIyA==}
 
-  '@zag-js/scroll-snap@1.15.0':
-    resolution: {integrity: sha512-/LfBlsjoR4tVL3Djus3k9jKLhwC2ApdHTACxEc72TAewoPe4M8icnSDLXmKHvwwOhzK0HlFz8wGm6ZncAbQbuA==}
+  '@zag-js/scroll-snap@1.15.2':
+    resolution: {integrity: sha512-RswpsMHg0aWHsx7xqybnPm8bTL9ow17z9GhYgxSWtIi2U9wgkUHDtEJQcRNUA9PQEGyVd29B39NM0ir64HAhNQ==}
 
-  '@zag-js/select@1.15.0':
-    resolution: {integrity: sha512-4urUBADzhrsGEO/UsqHdjsgmDdF15Zzeid3ejEbIMTrkt2/mMMcQ1CShuxtsWqm2EUBz/N1kOcZlE6Tq69n7Xg==}
+  '@zag-js/select@1.15.2':
+    resolution: {integrity: sha512-Y07RlBIc8bVj2WklhS7tiVySZntBv9TE9sfiA8RcLU7KFFGTdS2XUoQV4fziJubUL8XFhNzEC92/bKeBLqpgDw==}
 
-  '@zag-js/signature-pad@1.15.0':
-    resolution: {integrity: sha512-5Tj8vkrRxEkSV417oR2qdy+TRgDmS3W8dY7xsIjpbBf/kqkt/8Uo4JpaVH2vwQAFw9AwEFogBh9i6dHcXMy0rA==}
+  '@zag-js/signature-pad@1.15.2':
+    resolution: {integrity: sha512-vw7oD7afBfGvUyotJrFl+PjPVYOYZLgQ1eVAosKj54phgKvxheBr8/ySq9vlyTkyvOMjJ8zIkkxlywuqoZzl8g==}
 
-  '@zag-js/slider@1.15.0':
-    resolution: {integrity: sha512-NYIsn3GKXIoPmvkDXsQmw9wdYg3QHbYHXnZ8Ewl2fVubN7S5mDlHSZs2iDVsBvX+a4RChWFRO6JHX8E1+BncOg==}
+  '@zag-js/slider@1.15.2':
+    resolution: {integrity: sha512-Lcrm+h4Vx0stD0ybAqD5tA1qOnrKEfQP9ucQsPUy+fY2em19XC6raOVOhAc6ROx4X0neTI/yEc1ARJQSaxtRZw==}
 
-  '@zag-js/splitter@1.15.0':
-    resolution: {integrity: sha512-Xnedl+cpnD/hv9m+GOYCK5K2xRxbs4xuP/EajYtgVcDw8E1X5cBmxHa1hCrp7BMgb2xYCvZ5et4hnmZfb+1X9g==}
+  '@zag-js/splitter@1.15.2':
+    resolution: {integrity: sha512-LIuTTPRaw3inS64f2TLcFIlwjNe9Tx9mSE4VXf7wPhYitNKmyh7MeNE59na+wDzZisVwx9yBewAPfrZtbHDGBA==}
 
-  '@zag-js/steps@1.15.0':
-    resolution: {integrity: sha512-VoIDcDIEErZawmW2m0yTGlffqjfRuSwR37K9LdSRy8Q4Qzz3wV7jASaTjMhTya1hlreJ7tJg+Qbjqowvw9GndA==}
+  '@zag-js/steps@1.15.2':
+    resolution: {integrity: sha512-NnS3wYQrFWA5OXu+jnlnPpm49rGpzHCDbN2UuUcMGvbYVETKEXEO9fC1XWh7PstVuNi03E/CrZGHl5cEjf/j8w==}
 
-  '@zag-js/store@1.15.0':
-    resolution: {integrity: sha512-ecqjcy3b1GsULpsT8RVJV9KDaikajRN0XRg48HMvaGkaPIvxI6esyrE6RKnShuqr2eVXIPghgBnCnrJUev4UlA==}
+  '@zag-js/store@1.15.2':
+    resolution: {integrity: sha512-oDJuRdu8SaGab06UycN96OgvNau1ynawDNNfQNhA7zoOIZlaJH6jP+5YaAPFila+wyjdw7svz5+4ejs8vXcjpw==}
 
-  '@zag-js/switch@1.15.0':
-    resolution: {integrity: sha512-2CaAUTi7jM4lJjCYoSE1HWlFPCifI5GR+hufWOCYKpanf8VA/LM+t/a2Aq5QoBsWdcQv3B9mHxF/aVTDbnCKPQ==}
+  '@zag-js/switch@1.15.2':
+    resolution: {integrity: sha512-2aEm5HDP/ENcLvoP77CH7DQTPXIMUzVilefHlz6WT0tQxQzOw8uMhUOYYcuNmEq0FNRUOyuMEMyZnZFUYAxqvQ==}
 
-  '@zag-js/tabs@1.15.0':
-    resolution: {integrity: sha512-voHWpibC1TKLmbAJfixOesxrCio7wK+gdLRvh7Xh5u+3VSsT2fP2wEw3ySkJbpw3MpEE7R2OWkInbCV/SwPcsA==}
+  '@zag-js/tabs@1.15.2':
+    resolution: {integrity: sha512-SJMR4K59sxvNZEIgnJfbweLzncmgxRWTBm+FamwMtP8DKQ3RETNdjrn4aA9qLUsCObapk06KT3iTeiCXzuBaFA==}
 
-  '@zag-js/tags-input@1.15.0':
-    resolution: {integrity: sha512-CB60z+/I/Nso1gwatTO1qrk4XITxDd4qtRD+l6fuuKyOkZGgKm0AP0W+/6qUuOvtWIuY6fas3yZHFmF2eEZ9vQ==}
+  '@zag-js/tags-input@1.15.2':
+    resolution: {integrity: sha512-/mAuB8emhGoo3eoIgmlT/kQE27ukRlhghgwp3OjvEen+iTpz0XIWM+S+IV3QU6U4DlhwkadQaINht/c9ln6gxQ==}
 
-  '@zag-js/time-picker@1.15.0':
-    resolution: {integrity: sha512-4S02433X88X3MW/BxaFJiWna4BIRXsAdrmDcBb0PZ8dln29DUmpD8YHcFtONsKvmCAmrbO7Gr65n86nQwK8zeg==}
+  '@zag-js/time-picker@1.15.2':
+    resolution: {integrity: sha512-Aoe9GdbrvAMP1fdOEmzCESr/dO+cGnqhCoa0UkZB5wuB4dT3S02hRGSZsHO51Eon2NpzHPG9j+/alncwOe77Tw==}
     peerDependencies:
       '@internationalized/date': '>=3.0.0'
 
-  '@zag-js/timer@1.15.0':
-    resolution: {integrity: sha512-gDsYm4C9yju7g/r5u7n7mRQ2UY7diXXVbbLFr5Ja+0iUXgbD+uoSZEt9HypVc5TL9NWEEwn5/tut36owEeW4rw==}
+  '@zag-js/timer@1.15.2':
+    resolution: {integrity: sha512-v8RN3cwFuNXxuDMuxxfXKCSd+Z1UT6Ct+ueU3PRZqHqXU9u4k9Mm+vROIqnNzhCCdIHNxsqUt32/2zsRRaubbw==}
 
-  '@zag-js/toast@1.15.0':
-    resolution: {integrity: sha512-0RupMCXyGr7/La4Zlei7VqBF0VPNJelGd7zimLboe+IKZyy4Ypi/N2IX14rl8JZQDsDEgkLUl33xrSk/9RW2nQ==}
+  '@zag-js/toast@1.15.2':
+    resolution: {integrity: sha512-OohJvGTy+J1MpydJ4eCV36picggfF9VbDW4nK97TT+4bIIRDgW+PGYgB4dd+PvEjRrk9194Kkm93lud95yOyZg==}
 
-  '@zag-js/toggle-group@1.15.0':
-    resolution: {integrity: sha512-992vMz/2sriLrUKI3LpT/01kCGTbPGLgGLibiHRt562i0v9+2tV+GiY2jBctHZjJaKPrzBY3H0l8CCCvDj8gng==}
+  '@zag-js/toggle-group@1.15.2':
+    resolution: {integrity: sha512-JhWV0GY2NRgDhlzP73ADlG1E4NFXqv1h2q5+m3Rmos+Bi8soOV437jch/wy+M+xYN5vdZCczXJu9BumHNlknhA==}
 
-  '@zag-js/toggle@1.15.0':
-    resolution: {integrity: sha512-mMSQ1+f1hOMp/7gLA7rTeiSNyeZxsCjRxP4XnTBY4BxJ5LswLuhem9CplBwaVthkhY1Y/5f3HHu80LBcfF+BVQ==}
+  '@zag-js/toggle@1.15.2':
+    resolution: {integrity: sha512-wtDeIRhDeVhaUboWQ2GrxlCC4+cLRyZzvZiN84tad7H/sUKq9hNDdROcCnIYBhEkb1Qf4sjR8KszY12YLtJx6A==}
 
-  '@zag-js/tooltip@1.15.0':
-    resolution: {integrity: sha512-sOpVECyfdS4RZBx46mSV+RPc9C5k9JvYQYUfoOVWh0E5RLSEz5bQm5xxctKOHfCOv+vJNTfG5gP596B1r2+Fkw==}
+  '@zag-js/tooltip@1.15.2':
+    resolution: {integrity: sha512-Spw5ewga3DNaT5H4AnrtsxJ6ebRoTxy+igwojGTYUCNUoxyQn6W3UpqZpgAAfw8B236bduTRh9MW9CsaM/hnmg==}
 
-  '@zag-js/tour@1.15.0':
-    resolution: {integrity: sha512-EplcxoiE0z9vI0z6675+ABclQ9Mi1YUWhDZOHx7wfjRzpfawmJoBAlNDKzK3wc801d6OxgJx69SPj7ac0BwwwA==}
+  '@zag-js/tour@1.15.2':
+    resolution: {integrity: sha512-OW+autOwwsVMGwcYCxdCh3Hibeeag6Sg8w02XfmX7E+T2u9a+GGdLOrH7DPM2oHTbZV0iBUqIaKxGPKgRYZNng==}
 
-  '@zag-js/tree-view@1.15.0':
-    resolution: {integrity: sha512-wqdd+hu1bDOCWtnZ8MarRFHqbZF2t8qKBM3kO42IBq7jTI/93LCkHSlceEPft9dgZ6Ea9km0YJMHhoTqCPZ/fw==}
+  '@zag-js/tree-view@1.15.2':
+    resolution: {integrity: sha512-HWDHH3rpGEz3IN5bsj8EHZnU0ttk8uJwBOnH3reYcFQEQskA8cmyzd7y9hdBEn8PzAns+iOjUBj49IVmoYpOIg==}
 
-  '@zag-js/types@1.15.0':
-    resolution: {integrity: sha512-lV2ov2M07BlmjDUCSwBeHxPApHI3oAiLytG94AqcYvQ0BtsCRo5T60yRQ0syFc6fHf0e9+kwt89uoIgfGFYfmw==}
+  '@zag-js/types@1.15.2':
+    resolution: {integrity: sha512-qEHNRA/uOYQjvXzI/ie6vuOD74/p7w6MA4X1VoZEYF2/sbIQjlRn6SzpeV3RyFZBzl6WBO6RqV/XEbgpvGSb5w==}
 
-  '@zag-js/utils@1.15.0':
-    resolution: {integrity: sha512-XctFny5H8C00BsougV40Yp0qVEj9M2d/NRme7B33mon9wG+3hscZwP6miJmF6BYI5Pgu6e2P0Sv45FddQU1Tkg==}
-
-  accepts@2.0.0:
-    resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
-    engines: {node: '>= 0.6'}
+  '@zag-js/utils@1.15.2':
+    resolution: {integrity: sha512-JdlyGT6yfG2ub2FftrB6BidIlvD04cSwdKYJGb/M+NJ7p7uxnZUZMxAjeBmTLhM1nWbtJPVq3oDTYz/cBBZLng==}
 
   acorn-jsx@5.3.2:
     resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
@@ -1726,6 +1684,11 @@ packages:
     engines: {node: '>=0.4.0'}
     hasBin: true
 
+  acorn@8.15.0:
+    resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
+    engines: {node: '>=0.4.0'}
+    hasBin: true
+
   ajv@6.12.6:
     resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
 
@@ -1808,6 +1771,9 @@ packages:
   ast-types-flow@0.0.8:
     resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
 
+  ast-v8-to-istanbul@0.3.3:
+    resolution: {integrity: sha512-MuXMrSLVVoA6sYN/6Hke18vMzrT4TZNbZIj/hvh0fnYFpO+/kFXcLIaiPwXXWaQUPg4yJD8fj+lfJ7/1EBconw==}
+
   async-function@1.0.0:
     resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
     engines: {node: '>= 0.4'}
@@ -1826,8 +1792,8 @@ packages:
     resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==}
     engines: {node: '>=4'}
 
-  axios@1.8.4:
-    resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==}
+  axios@1.10.0:
+    resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==}
 
   axobject-query@4.1.0:
     resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
@@ -1850,32 +1816,24 @@ packages:
     resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
     engines: {node: '>=8'}
 
-  body-parser@2.2.0:
-    resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==}
-    engines: {node: '>=18'}
+  brace-expansion@1.1.12:
+    resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
 
-  brace-expansion@1.1.11:
-    resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
-
-  brace-expansion@2.0.1:
-    resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+  brace-expansion@2.0.2:
+    resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
 
   braces@3.0.3:
     resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
     engines: {node: '>=8'}
 
-  browserslist@4.24.4:
-    resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==}
+  browserslist@4.25.0:
+    resolution: {integrity: sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==}
     engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
     hasBin: true
 
-  builtin-modules@3.3.0:
-    resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
-    engines: {node: '>=6'}
-
-  bytes@3.1.2:
-    resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
-    engines: {node: '>= 0.8'}
+  builtin-modules@5.0.0:
+    resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==}
+    engines: {node: '>=18.20'}
 
   c12@1.11.1:
     resolution: {integrity: sha512-KDU0TvSvVdaYcQKQ6iPHATGz/7p/KiVjPg4vQrB6Jg/wX9R0yl5RZxWm9IoZqaIHD2+6PZd81+KMGwRr/lRIUg==}
@@ -1909,8 +1867,8 @@ packages:
     resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==}
     engines: {node: '>=16'}
 
-  caniuse-lite@1.0.30001707:
-    resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==}
+  caniuse-lite@1.0.30001724:
+    resolution: {integrity: sha512-WqJo7p0TbHDOythNTqYujmaJTvtYRZrjpP8TCvH6Vb9CYJerJNKamKzIWOM4BkQatWj9H2lYulpdAQNBe7QhNA==}
 
   ccount@2.0.1:
     resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
@@ -1955,8 +1913,8 @@ packages:
   character-reference-invalid@2.0.1:
     resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
 
-  chart.js@4.4.9:
-    resolution: {integrity: sha512-EyZ9wWKgpAU0fLJ43YAEIF8sr5F2W3LqbS40ZJyHIner2lY14ufqv2VMp69MAiZ2rpwxEUxEhIH/0U3xyRynxg==}
+  chart.js@4.5.0:
+    resolution: {integrity: sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ==}
     engines: {pnpm: '>=8'}
 
   chartjs-plugin-annotation@3.1.0:
@@ -2042,31 +2000,19 @@ packages:
     resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
     engines: {node: ^14.18.0 || >=16.10.0}
 
-  content-disposition@1.0.0:
-    resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==}
-    engines: {node: '>= 0.6'}
-
-  content-type@1.0.5:
-    resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
-    engines: {node: '>= 0.6'}
-
   convert-source-map@1.9.0:
     resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
 
-  cookie-signature@1.2.2:
-    resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==}
-    engines: {node: '>=6.6.0'}
-
   cookie@0.7.2:
     resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
     engines: {node: '>= 0.6'}
 
-  core-js-compat@3.41.0:
-    resolution: {integrity: sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==}
+  cookie@1.0.2:
+    resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==}
+    engines: {node: '>=18'}
 
-  cors@2.8.5:
-    resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
-    engines: {node: '>= 0.10'}
+  core-js-compat@3.43.0:
+    resolution: {integrity: sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==}
 
   cosmiconfig@7.1.0:
     resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
@@ -2184,8 +2130,8 @@ packages:
   debounce-promise@3.1.2:
     resolution: {integrity: sha512-rZHcgBkbYavBeD9ej6sP56XfG53d51CD4dnaw989YX/nZ/ZJfgRx/9ePKmTNiUiyQvh4mtrMoS3OAWW+yoYtpg==}
 
-  debug@4.4.0:
-    resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
+  debug@4.4.1:
+    resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
     engines: {node: '>=6.0'}
     peerDependencies:
       supports-color: '*'
@@ -2193,8 +2139,8 @@ packages:
       supports-color:
         optional: true
 
-  decode-named-character-reference@1.1.0:
-    resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==}
+  decode-named-character-reference@1.2.0:
+    resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==}
 
   deep-eql@5.0.2:
     resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
@@ -2221,10 +2167,6 @@ packages:
     resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
     engines: {node: '>=0.4.0'}
 
-  depd@2.0.0:
-    resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
-    engines: {node: '>= 0.8'}
-
   dequal@2.0.3:
     resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
     engines: {node: '>=6'}
@@ -2259,11 +2201,8 @@ packages:
   eastasianwidth@0.2.0:
     resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
 
-  ee-first@1.1.1:
-    resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
-
-  electron-to-chromium@1.5.123:
-    resolution: {integrity: sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==}
+  electron-to-chromium@1.5.171:
+    resolution: {integrity: sha512-scWpzXEJEMrGJa4Y6m/tVotb0WuvNmasv3wWVzUAeCgKU0ToFOhUW6Z+xWnRQANMYGxN4ngJXIThgBJOqzVPCQ==}
 
   elkjs@0.10.0:
     resolution: {integrity: sha512-v/3r+3Bl2NMrWmVoRTMBtHtWvRISTix/s9EfnsfEWApNrsmNjqgqJOispCGg46BPwIFdkag3N/HYSxJczvCm6w==}
@@ -2274,10 +2213,6 @@ packages:
   emoji-regex@9.2.2:
     resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
 
-  encodeurl@2.0.0:
-    resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
-    engines: {node: '>= 0.8'}
-
   error-ex@1.3.2:
     resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
 
@@ -2297,8 +2232,8 @@ packages:
     resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==}
     engines: {node: '>= 0.4'}
 
-  es-module-lexer@1.6.0:
-    resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==}
+  es-module-lexer@1.7.0:
+    resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
 
   es-object-atoms@1.1.1:
     resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
@@ -2319,18 +2254,15 @@ packages:
   es6-promise@4.2.8:
     resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
 
-  esbuild@0.21.5:
-    resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
-    engines: {node: '>=12'}
+  esbuild@0.25.5:
+    resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==}
+    engines: {node: '>=18'}
     hasBin: true
 
   escalade@3.2.0:
     resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
     engines: {node: '>=6'}
 
-  escape-html@1.0.3:
-    resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
-
   escape-string-regexp@1.0.5:
     resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
     engines: {node: '>=0.8.0'}
@@ -2343,8 +2275,8 @@ packages:
     resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
     engines: {node: '>=12'}
 
-  eslint-config-prettier@10.1.2:
-    resolution: {integrity: sha512-Epgp/EofAUeEpIdZkW60MHKvPyru1ruQJxPL+WIycnaPApuseK0Zpkrh/FwL9oIpQvIhJwV7ptOy0DWUjTlCiA==}
+  eslint-config-prettier@10.1.5:
+    resolution: {integrity: sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==}
     hasBin: true
     peerDependencies:
       eslint: '>=7.0.0'
@@ -2359,14 +2291,14 @@ packages:
     peerDependencies:
       eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9
 
-  eslint-plugin-perfectionist@4.12.3:
-    resolution: {integrity: sha512-V0dmpq6fBbn0BYofHsiRuuY9wgkKMDkdruM0mIRBIJ8XZ8vEaTAZqFsywm40RuWNVnduWBt5HO1ZZ+flE2yqjg==}
+  eslint-plugin-perfectionist@4.15.0:
+    resolution: {integrity: sha512-pC7PgoXyDnEXe14xvRUhBII8A3zRgggKqJFx2a82fjrItDs1BSI7zdZnQtM2yQvcyod6/ujmzb7ejKPx8lZTnw==}
     engines: {node: ^18.0.0 || >=20.0.0}
     peerDependencies:
       eslint: '>=8.45.0'
 
-  eslint-plugin-prettier@5.4.0:
-    resolution: {integrity: sha512-BvQOvUhkVQM1i63iMETK9Hjud9QhqBnbtT1Zc642p9ynzBuCe5pybkOnvqZIBypXmMlsGcnU4HZ8sCTPfpAexA==}
+  eslint-plugin-prettier@5.5.0:
+    resolution: {integrity: sha512-8qsOYwkkGrahrgoUv76NZi23koqXOGiiEzXMrT8Q7VcYaUISR+5MorIUxfWqYXN0fN/31WbSrxCxFkVQ43wwrA==}
     engines: {node: ^14.18.0 || >=16.0.0}
     peerDependencies:
       '@types/eslint': '>=8.0.0'
@@ -2379,11 +2311,11 @@ packages:
       eslint-config-prettier:
         optional: true
 
-  eslint-plugin-react-hooks@4.6.2:
-    resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==}
+  eslint-plugin-react-hooks@5.2.0:
+    resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==}
     engines: {node: '>=10'}
     peerDependencies:
-      eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
+      eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
 
   eslint-plugin-react-refresh@0.4.20:
     resolution: {integrity: sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==}
@@ -2396,26 +2328,26 @@ packages:
     peerDependencies:
       eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
 
-  eslint-plugin-unicorn@55.0.0:
-    resolution: {integrity: sha512-n3AKiVpY2/uDcGrS3+QsYDkjPfaOrNrsfQxU9nt5nitd9KuvVXrfAvgCO9DYPSfap+Gqjw9EOrXIsBp5tlHZjA==}
-    engines: {node: '>=18.18'}
+  eslint-plugin-unicorn@59.0.1:
+    resolution: {integrity: sha512-EtNXYuWPUmkgSU2E7Ttn57LbRREQesIP1BiLn7OZLKodopKfDXfBUkC/0j6mpw2JExwf43Uf3qLSvrSvppgy8Q==}
+    engines: {node: ^18.20.0 || ^20.10.0 || >=21.0.0}
     peerDependencies:
-      eslint: '>=8.56.0'
+      eslint: '>=9.22.0'
 
-  eslint-scope@8.3.0:
-    resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==}
+  eslint-scope@8.4.0:
+    resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
   eslint-visitor-keys@3.4.3:
     resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 
-  eslint-visitor-keys@4.2.0:
-    resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
+  eslint-visitor-keys@4.2.1:
+    resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  eslint@9.26.0:
-    resolution: {integrity: sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==}
+  eslint@9.29.0:
+    resolution: {integrity: sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     hasBin: true
     peerDependencies:
@@ -2424,8 +2356,8 @@ packages:
       jiti:
         optional: true
 
-  espree@10.3.0:
-    resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
+  espree@10.4.0:
+    resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
   espree@9.6.1:
@@ -2459,32 +2391,10 @@ packages:
     resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
     engines: {node: '>=0.10.0'}
 
-  etag@1.8.1:
-    resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
-    engines: {node: '>= 0.6'}
-
-  eventsource-parser@3.0.1:
-    resolution: {integrity: sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==}
-    engines: {node: '>=18.0.0'}
-
-  eventsource@3.0.6:
-    resolution: {integrity: sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA==}
-    engines: {node: '>=18.0.0'}
-
-  expect-type@1.2.0:
-    resolution: {integrity: sha512-80F22aiJ3GLyVnS/B3HzgR6RelZVumzj9jkL0Rhz4h0xYbNW9PjlQz5h3J/SShErbXBc295vseR4/MIbVmUbeA==}
+  expect-type@1.2.1:
+    resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==}
     engines: {node: '>=12.0.0'}
 
-  express-rate-limit@7.5.0:
-    resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==}
-    engines: {node: '>= 16'}
-    peerDependencies:
-      express: ^4.11 || 5 || ^5.0.0-beta.1
-
-  express@5.1.0:
-    resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==}
-    engines: {node: '>= 18'}
-
   extend@3.0.2:
     resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
 
@@ -2522,6 +2432,14 @@ packages:
   fbjs@3.0.5:
     resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==}
 
+  fdir@6.4.6:
+    resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==}
+    peerDependencies:
+      picomatch: ^3 || ^4
+    peerDependenciesMeta:
+      picomatch:
+        optional: true
+
   file-entry-cache@8.0.0:
     resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
     engines: {node: '>=16.0.0'}
@@ -2530,16 +2448,12 @@ packages:
     resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
     engines: {node: '>=8'}
 
-  finalhandler@2.1.0:
-    resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==}
-    engines: {node: '>= 0.8'}
-
   find-root@1.1.0:
     resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
 
-  find-up@4.1.0:
-    resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
-    engines: {node: '>=8'}
+  find-up-simple@1.0.1:
+    resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==}
+    engines: {node: '>=18'}
 
   find-up@5.0.0:
     resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
@@ -2574,22 +2488,14 @@ packages:
     resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
     engines: {node: '>=14'}
 
-  form-data@4.0.2:
-    resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==}
+  form-data@4.0.3:
+    resolution: {integrity: sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==}
     engines: {node: '>= 6'}
 
   format@0.2.2:
     resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
     engines: {node: '>=0.4.x'}
 
-  forwarded@0.2.0:
-    resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
-    engines: {node: '>= 0.6'}
-
-  fresh@2.0.0:
-    resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
-    engines: {node: '>= 0.8'}
-
   fs-minipass@2.1.0:
     resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
     engines: {node: '>= 8'}
@@ -2654,8 +2560,8 @@ packages:
     resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
     engines: {node: '>=18'}
 
-  globals@15.15.0:
-    resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
+  globals@16.2.0:
+    resolution: {integrity: sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==}
     engines: {node: '>=18'}
 
   globalthis@1.0.4:
@@ -2669,8 +2575,8 @@ packages:
   graphemer@1.4.0:
     resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
 
-  graphql@16.10.0:
-    resolution: {integrity: sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==}
+  graphql@16.11.0:
+    resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==}
     engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
 
   handlebars@4.7.8:
@@ -2678,9 +2584,9 @@ packages:
     engines: {node: '>=0.4.7'}
     hasBin: true
 
-  happy-dom@17.4.6:
-    resolution: {integrity: sha512-OEV1hDe9i2rFr66+WZNiwy1S8rAJy6bRXmXql68YJDjdfHBRbN76om+qVh68vQACf6y5Bcr90e/oK53RQxsDdg==}
-    engines: {node: '>=18.0.0'}
+  happy-dom@18.0.1:
+    resolution: {integrity: sha512-qn+rKOW7KWpVTtgIUi6RVmTBZJSe2k0Db0vh1f7CWrWclkkc7/Q+FrOfkZIb2eiErLyqu5AXEzE7XthO9JVxRA==}
+    engines: {node: '>=20.0.0'}
 
   has-bigints@1.1.0:
     resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
@@ -2733,9 +2639,6 @@ packages:
   hoist-non-react-statics@3.3.2:
     resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
 
-  hosted-git-info@2.8.9:
-    resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
-
   html-escaper@2.0.2:
     resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
 
@@ -2748,32 +2651,28 @@ packages:
   html-url-attributes@3.0.1:
     resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==}
 
-  http-errors@2.0.0:
-    resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
-    engines: {node: '>= 0.8'}
-
-  i18next-browser-languagedetector@8.1.0:
-    resolution: {integrity: sha512-mHZxNx1Lq09xt5kCauZ/4bsXOEA2pfpwSoU11/QTJB+pD94iONFwp+ohqi///PwiFvjFOxe1akYCdHyFo1ng5Q==}
+  i18next-browser-languagedetector@8.2.0:
+    resolution: {integrity: sha512-P+3zEKLnOF0qmiesW383vsLdtQVyKtCNA9cjSoKCppTKPQVfKd2W8hbVo5ZhNJKDqeM7BOcvNoKJOjpHh4Js9g==}
 
   i18next-http-backend@3.0.2:
     resolution: {integrity: sha512-PdlvPnvIp4E1sYi46Ik4tBYh/v/NbYfFFgTjkwFl0is8A18s7/bx9aXqsrOax9WUbeNS6mD2oix7Z0yGGf6m5g==}
 
-  i18next@25.1.2:
-    resolution: {integrity: sha512-SP63m8LzdjkrAjruH7SCI3ndPSgjt4/wX7ouUUOzCW/eY+HzlIo19IQSfYA9X3qRiRP1SYtaTsg/Oz/PGsfD8w==}
+  i18next@25.2.1:
+    resolution: {integrity: sha512-+UoXK5wh+VlE1Zy5p6MjcvctHXAhRwQKCxiJD8noKZzIXmnAX8gdHX5fLPA3MEVxEN4vbZkQFy8N0LyD9tUqPw==}
     peerDependencies:
       typescript: ^5
     peerDependenciesMeta:
       typescript:
         optional: true
 
-  iconv-lite@0.6.3:
-    resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
-    engines: {node: '>=0.10.0'}
-
   ignore@5.3.2:
     resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
     engines: {node: '>= 4'}
 
+  ignore@7.0.5:
+    resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
+    engines: {node: '>= 4'}
+
   import-fresh@3.3.1:
     resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
     engines: {node: '>=6'}
@@ -2786,8 +2685,9 @@ packages:
     resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
     engines: {node: '>=8'}
 
-  inherits@2.0.4:
-    resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+  indent-string@5.0.0:
+    resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==}
+    engines: {node: '>=12'}
 
   inline-style-parser@0.2.4:
     resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==}
@@ -2800,10 +2700,6 @@ packages:
     resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
     engines: {node: '>=12'}
 
-  ipaddr.js@1.9.1:
-    resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
-    engines: {node: '>= 0.10'}
-
   is-alphabetical@1.0.4:
     resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==}
 
@@ -2839,9 +2735,9 @@ packages:
     resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
     engines: {node: '>= 0.4'}
 
-  is-builtin-module@3.2.1:
-    resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==}
-    engines: {node: '>=6'}
+  is-builtin-module@5.0.0:
+    resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==}
+    engines: {node: '>=18.20'}
 
   is-callable@1.2.7:
     resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
@@ -2910,9 +2806,6 @@ packages:
     resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
     engines: {node: '>=12'}
 
-  is-promise@4.0.0:
-    resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==}
-
   is-regex@1.2.1:
     resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
     engines: {node: '>= 0.4'}
@@ -2981,8 +2874,8 @@ packages:
   jackspeak@3.4.3:
     resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
 
-  jackspeak@4.1.0:
-    resolution: {integrity: sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==}
+  jackspeak@4.1.1:
+    resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==}
     engines: {node: 20 || >=22}
 
   javascript-natural-sort@0.7.1:
@@ -2995,6 +2888,9 @@ packages:
   js-tokens@4.0.0:
     resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
 
+  js-tokens@9.0.1:
+    resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
+
   js-yaml@3.14.1:
     resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
     hasBin: true
@@ -3003,13 +2899,9 @@ packages:
     resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
     hasBin: true
 
-  jsesc@0.5.0:
-    resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
-    hasBin: true
-
-  jsesc@2.5.2:
-    resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
-    engines: {node: '>=4'}
+  jsesc@3.0.2:
+    resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==}
+    engines: {node: '>=6'}
     hasBin: true
 
   jsesc@3.1.0:
@@ -3058,10 +2950,6 @@ packages:
   lines-and-columns@1.2.4:
     resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
 
-  locate-path@5.0.0:
-    resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
-    engines: {node: '>=8'}
-
   locate-path@6.0.0:
     resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
     engines: {node: '>=10'}
@@ -3088,8 +2976,8 @@ packages:
     resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
     hasBin: true
 
-  loupe@3.1.3:
-    resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==}
+  loupe@3.1.4:
+    resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==}
 
   lowlight@1.20.0:
     resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==}
@@ -3167,17 +3055,9 @@ packages:
   mdast-util-to-string@4.0.0:
     resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
 
-  media-typer@1.1.0:
-    resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==}
-    engines: {node: '>= 0.8'}
-
   memoize-one@6.0.0:
     resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==}
 
-  merge-descriptors@2.0.0:
-    resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==}
-    engines: {node: '>=18'}
-
   merge2@1.4.1:
     resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
     engines: {node: '>= 8'}
@@ -3274,24 +3154,16 @@ packages:
     resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
     engines: {node: '>= 0.6'}
 
-  mime-db@1.54.0:
-    resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
-    engines: {node: '>= 0.6'}
-
   mime-types@2.1.35:
     resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
     engines: {node: '>= 0.6'}
 
-  mime-types@3.0.1:
-    resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==}
-    engines: {node: '>= 0.6'}
-
   min-indent@1.0.1:
     resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
     engines: {node: '>=4'}
 
-  minimatch@10.0.1:
-    resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==}
+  minimatch@10.0.3:
+    resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==}
     engines: {node: 20 || >=22}
 
   minimatch@3.1.2:
@@ -3336,8 +3208,8 @@ packages:
   ms@2.1.3:
     resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
 
-  msw@2.7.6:
-    resolution: {integrity: sha512-P+rwn43ktxN8ghcl8q+hSAUlEi0PbJpDhGmDkw4zeUnRj3hBCVynWD+dTu38yLYKCE9ZF1OYcvpy7CTBRcqkZA==}
+  msw@2.10.2:
+    resolution: {integrity: sha512-RCKM6IZseZQCWcSWlutdf590M8nVfRHG1ImwzOtwz8IYxgT4zhUO0rfTcTvDGiaFE0Rhcc+h43lcF3Jc9gFtwQ==}
     engines: {node: '>=18'}
     hasBin: true
     peerDependencies:
@@ -3362,18 +3234,14 @@ packages:
     resolution: {integrity: sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==}
     engines: {node: '>=18'}
 
-  negotiator@1.0.0:
-    resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
-    engines: {node: '>= 0.6'}
-
   neo-async@2.6.2:
     resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
 
-  next-themes@0.3.0:
-    resolution: {integrity: sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==}
+  next-themes@0.4.6:
+    resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==}
     peerDependencies:
-      react: ^16.8 || ^17 || ^18
-      react-dom: ^16.8 || ^17 || ^18
+      react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
+      react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
 
   node-fetch-native@1.6.6:
     resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==}
@@ -3390,9 +3258,6 @@ packages:
   node-releases@2.0.19:
     resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
 
-  normalize-package-data@2.5.0:
-    resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
-
   normalize-path@3.0.0:
     resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
     engines: {node: '>=0.10.0'}
@@ -3433,13 +3298,6 @@ packages:
   ohash@1.1.6:
     resolution: {integrity: sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg==}
 
-  on-finished@2.4.1:
-    resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
-    engines: {node: '>= 0.8'}
-
-  once@1.4.0:
-    resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
-
   openapi-merge-cli@1.3.2:
     resolution: {integrity: sha512-f2F5SRwZpcxvEpMm776Lh2XW9XqNuRedMzlCA0usx9JgQmZUhtC24px4zFYc5J/ZYXvNG6mdqdj/D0BnfEy6AA==}
     hasBin: true
@@ -3458,26 +3316,14 @@ packages:
     resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
     engines: {node: '>= 0.4'}
 
-  p-limit@2.3.0:
-    resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
-    engines: {node: '>=6'}
-
   p-limit@3.1.0:
     resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
     engines: {node: '>=10'}
 
-  p-locate@4.1.0:
-    resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
-    engines: {node: '>=8'}
-
   p-locate@5.0.0:
     resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
     engines: {node: '>=10'}
 
-  p-try@2.2.0:
-    resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
-    engines: {node: '>=6'}
-
   package-json-from-dist@1.0.1:
     resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
 
@@ -3495,10 +3341,6 @@ packages:
     resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
     engines: {node: '>=8'}
 
-  parseurl@1.3.3:
-    resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
-    engines: {node: '>= 0.8'}
-
   path-browserify@1.0.1:
     resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
 
@@ -3524,10 +3366,6 @@ packages:
   path-to-regexp@6.3.0:
     resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==}
 
-  path-to-regexp@8.2.0:
-    resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==}
-    engines: {node: '>=16'}
-
   path-type@4.0.0:
     resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
     engines: {node: '>=8'}
@@ -3559,10 +3397,6 @@ packages:
     resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
     engines: {node: '>=12'}
 
-  pkce-challenge@5.0.0:
-    resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==}
-    engines: {node: '>=16.20.0'}
-
   pkg-types@1.3.1:
     resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
 
@@ -3574,8 +3408,8 @@ packages:
     resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
     engines: {node: '>= 0.4'}
 
-  postcss@8.5.3:
-    resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
+  postcss@8.5.6:
+    resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
     engines: {node: ^10 || ^12 || >=14}
 
   prelude-ls@1.2.1:
@@ -3612,12 +3446,8 @@ packages:
   property-information@5.6.0:
     resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==}
 
-  property-information@7.0.0:
-    resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==}
-
-  proxy-addr@2.0.7:
-    resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
-    engines: {node: '>= 0.10'}
+  property-information@7.1.0:
+    resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
 
   proxy-compare@3.0.1:
     resolution: {integrity: sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q==}
@@ -3638,24 +3468,12 @@ packages:
   pure-color@1.3.0:
     resolution: {integrity: sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==}
 
-  qs@6.14.0:
-    resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
-    engines: {node: '>=0.6'}
-
   querystringify@2.2.0:
     resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
 
   queue-microtask@1.2.3:
     resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
 
-  range-parser@1.2.1:
-    resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
-    engines: {node: '>= 0.6'}
-
-  raw-body@3.0.0:
-    resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==}
-    engines: {node: '>= 0.8'}
-
   rc9@2.1.2:
     resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==}
 
@@ -3668,25 +3486,25 @@ packages:
       chart.js: ^4.1.1
       react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
 
-  react-dom@18.3.1:
-    resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
+  react-dom@19.1.0:
+    resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==}
     peerDependencies:
-      react: ^18.3.1
+      react: ^19.1.0
 
-  react-hook-form@7.56.2:
-    resolution: {integrity: sha512-vpfuHuQMF/L6GpuQ4c3ZDo+pRYxIi40gQqsCmmfUBwm+oqvBhKhwghCuj2o00YCgSfU6bR9KC/xnQGWm3Gr08A==}
+  react-hook-form@7.58.1:
+    resolution: {integrity: sha512-Lml/KZYEEFfPhUVgE0RdCVpnC4yhW+PndRhbiTtdvSlQTL8IfVR+iQkBjLIvmmc6+GGoVeM11z37ktKFPAb0FA==}
     engines: {node: '>=18.0.0'}
     peerDependencies:
       react: ^16.8.0 || ^17 || ^18 || ^19
 
-  react-hotkeys-hook@4.6.1:
-    resolution: {integrity: sha512-XlZpbKUj9tkfgPgT9gA+1p7Ey6vFIZHttUjPqpTdyT5nqQ8mHL7elxvSbaC+dpSiHUSmr21Ya1mDxBZG3aje4Q==}
+  react-hotkeys-hook@5.1.0:
+    resolution: {integrity: sha512-GCNGXjBzV9buOS3REoQFmSmE4WTvBhYQ0YrAeeMZI83bhXg3dRWsLHXDutcVDdEjwJqJCxk5iewWYX5LtFUd7g==}
     peerDependencies:
-      react: '>=16.8.1'
-      react-dom: '>=16.8.1'
+      react: '>=16.8.0'
+      react-dom: '>=16.8.0'
 
-  react-i18next@15.5.1:
-    resolution: {integrity: sha512-C8RZ7N7H0L+flitiX6ASjq9p5puVJU1Z8VyL3OgM/QOMRf40BMZX+5TkpxzZVcTmOLPX5zlti4InEX5pFyiVeA==}
+  react-i18next@15.5.3:
+    resolution: {integrity: sha512-ypYmOKOnjqPEJZO4m1BI0kS8kWqkBNsKYyhVUfij0gvjy9xJNoG/VcGkxq5dRlVwzmrmY1BQMAmpbbUBLwC4Kw==}
     peerDependencies:
       i18next: '>= 23.2.3'
       react: '>= 16.8.0'
@@ -3727,30 +3545,34 @@ packages:
   react-lifecycles-compat@3.0.4:
     resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==}
 
-  react-markdown@9.1.0:
-    resolution: {integrity: sha512-xaijuJB0kzGiUdG7nc2MOMDUDBWPyGAjZtUrow9XxUeua8IqeP+VlIfAZ3bphpcLTnSZXz6z9jcVC/TCwbfgdw==}
+  react-markdown@10.1.0:
+    resolution: {integrity: sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==}
     peerDependencies:
       '@types/react': '>=18'
       react: '>=18'
 
-  react-resizable-panels@2.1.7:
-    resolution: {integrity: sha512-JtT6gI+nURzhMYQYsx8DKkx6bSoOGFp7A3CwMrOb8y5jFHFyqwo9m68UhmXRw57fRVJksFn1TSlm3ywEQ9vMgA==}
+  react-resizable-panels@3.0.3:
+    resolution: {integrity: sha512-7HA8THVBHTzhDK4ON0tvlGXyMAJN1zBeRpuyyremSikgYh2ku6ltD7tsGQOcXx4NKPrZtYCm/5CBr+dkruTGQw==}
     peerDependencies:
       react: ^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
       react-dom: ^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
 
-  react-router-dom@6.30.0:
-    resolution: {integrity: sha512-x30B78HV5tFk8ex0ITwzC9TTZMua4jGyA9IUlH1JLQYQTFyxr/ZxwOJq7evg1JX1qGVUcvhsmQSKdPncQrjTgA==}
-    engines: {node: '>=14.0.0'}
+  react-router-dom@7.6.2:
+    resolution: {integrity: sha512-Q8zb6VlTbdYKK5JJBLQEN06oTUa/RAbG/oQS1auK1I0TbJOXktqm+QENEVJU6QvWynlXPRBXI3fiOQcSEA78rA==}
+    engines: {node: '>=20.0.0'}
     peerDependencies:
-      react: '>=16.8'
-      react-dom: '>=16.8'
+      react: '>=18'
+      react-dom: '>=18'
 
-  react-router@6.30.0:
-    resolution: {integrity: sha512-D3X8FyH9nBcTSHGdEKurK7r8OYE1kKFn3d/CF+CoxbSHkxU7o37+Uh7eAHRXr6k2tSExXYO++07PeXJtA/dEhQ==}
-    engines: {node: '>=14.0.0'}
+  react-router@7.6.2:
+    resolution: {integrity: sha512-U7Nv3y+bMimgWjhlT5CRdzHPu2/KVmqPwKUCChW8en5P3znxUqwlYFlbmyj8Rgp1SF6zs5X4+77kBVknkg6a0w==}
+    engines: {node: '>=20.0.0'}
     peerDependencies:
-      react: '>=16.8'
+      react: '>=18'
+      react-dom: '>=18'
+    peerDependenciesMeta:
+      react-dom:
+        optional: true
 
   react-select@5.10.1:
     resolution: {integrity: sha512-roPEZUL4aRZDx6DcsD+ZNreVl+fM8VsKn0Wtex1v4IazH60ILp5xhdlp464IsEAlJdXeD+BhDAFsBVMfvLQueA==}
@@ -3775,18 +3597,10 @@ packages:
       react: '>=16.6.0'
       react-dom: '>=16.6.0'
 
-  react@18.3.1:
-    resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
+  react@19.1.0:
+    resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==}
     engines: {node: '>=0.10.0'}
 
-  read-pkg-up@7.0.1:
-    resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
-    engines: {node: '>=8'}
-
-  read-pkg@5.2.0:
-    resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
-    engines: {node: '>=8'}
-
   readdirp@3.6.0:
     resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
     engines: {node: '>=8.10.0'}
@@ -3813,8 +3627,8 @@ packages:
     resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
     engines: {node: '>= 0.4'}
 
-  regjsparser@0.10.0:
-    resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==}
+  regjsparser@0.12.0:
+    resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==}
     hasBin: true
 
   remark-gfm@4.0.1:
@@ -3823,8 +3637,8 @@ packages:
   remark-parse@11.0.0:
     resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
 
-  remark-rehype@11.1.1:
-    resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==}
+  remark-rehype@11.1.2:
+    resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==}
 
   remark-stringify@11.0.0:
     resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
@@ -3860,15 +3674,11 @@ packages:
   robust-predicates@3.0.2:
     resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
 
-  rollup@4.40.1:
-    resolution: {integrity: sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==}
+  rollup@4.44.0:
+    resolution: {integrity: sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA==}
     engines: {node: '>=18.0.0', npm: '>=8.0.0'}
     hasBin: true
 
-  router@2.2.0:
-    resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==}
-    engines: {node: '>= 18'}
-
   run-parallel@1.2.0:
     resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
 
@@ -3876,9 +3686,6 @@ packages:
     resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
     engines: {node: '>=0.4'}
 
-  safe-buffer@5.2.1:
-    resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
-
   safe-push-apply@1.0.0:
     resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
     engines: {node: '>= 0.4'}
@@ -3887,15 +3694,8 @@ packages:
     resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
     engines: {node: '>= 0.4'}
 
-  safer-buffer@2.1.2:
-    resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
-
-  scheduler@0.23.2:
-    resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
-
-  semver@5.7.2:
-    resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
-    hasBin: true
+  scheduler@0.26.0:
+    resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==}
 
   semver@6.3.1:
     resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
@@ -3906,13 +3706,13 @@ packages:
     engines: {node: '>=10'}
     hasBin: true
 
-  send@1.2.0:
-    resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==}
-    engines: {node: '>= 18'}
+  semver@7.7.2:
+    resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
+    engines: {node: '>=10'}
+    hasBin: true
 
-  serve-static@2.2.0:
-    resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==}
-    engines: {node: '>= 18'}
+  set-cookie-parser@2.7.1:
+    resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==}
 
   set-function-length@1.2.2:
     resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
@@ -3929,9 +3729,6 @@ packages:
   setimmediate@1.0.5:
     resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
 
-  setprototypeof@1.2.0:
-    resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
-
   shebang-command@2.0.0:
     resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
     engines: {node: '>=8'}
@@ -3981,30 +3778,18 @@ packages:
   space-separated-tokens@2.0.2:
     resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
 
-  spdx-correct@3.2.0:
-    resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
-
-  spdx-exceptions@2.5.0:
-    resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==}
-
-  spdx-expression-parse@3.0.1:
-    resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
-
-  spdx-license-ids@3.0.21:
-    resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==}
-
   sprintf-js@1.0.3:
     resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
 
   stackback@0.0.2:
     resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
 
-  statuses@2.0.1:
-    resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
+  statuses@2.0.2:
+    resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
     engines: {node: '>= 0.8'}
 
-  std-env@3.8.1:
-    resolution: {integrity: sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==}
+  std-env@3.9.0:
+    resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==}
 
   strict-event-emitter@0.5.1:
     resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==}
@@ -4055,18 +3840,25 @@ packages:
     resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
     engines: {node: '>=8'}
 
+  strip-indent@4.0.0:
+    resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==}
+    engines: {node: '>=12'}
+
   strip-json-comments@3.1.1:
     resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
     engines: {node: '>=8'}
 
+  strip-literal@3.0.0:
+    resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==}
+
   style-mod@4.1.2:
     resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==}
 
-  style-to-js@1.1.16:
-    resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==}
+  style-to-js@1.1.17:
+    resolution: {integrity: sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==}
 
-  style-to-object@1.0.8:
-    resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==}
+  style-to-object@1.0.9:
+    resolution: {integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==}
 
   stylis@4.2.0:
     resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==}
@@ -4079,8 +3871,8 @@ packages:
     resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
     engines: {node: '>= 0.4'}
 
-  synckit@0.11.4:
-    resolution: {integrity: sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ==}
+  synckit@0.11.8:
+    resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==}
     engines: {node: ^14.18.0 || >=16.0.0}
 
   tar@6.2.1:
@@ -4097,30 +3889,26 @@ packages:
   tinyexec@0.3.2:
     resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
 
-  tinypool@1.0.2:
-    resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==}
+  tinyglobby@0.2.14:
+    resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
+    engines: {node: '>=12.0.0'}
+
+  tinypool@1.1.1:
+    resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==}
     engines: {node: ^18.0.0 || >=20.0.0}
 
-  tinyrainbow@1.2.0:
-    resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==}
+  tinyrainbow@2.0.0:
+    resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
     engines: {node: '>=14.0.0'}
 
-  tinyspy@3.0.2:
-    resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
+  tinyspy@4.0.3:
+    resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==}
     engines: {node: '>=14.0.0'}
 
-  to-fast-properties@2.0.0:
-    resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
-    engines: {node: '>=4'}
-
   to-regex-range@5.0.1:
     resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
     engines: {node: '>=8.0'}
 
-  toidentifier@1.0.1:
-    resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
-    engines: {node: '>=0.6'}
-
   tough-cookie@4.1.4:
     resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==}
     engines: {node: '>=6'}
@@ -4157,22 +3945,10 @@ packages:
     resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
     engines: {node: '>=10'}
 
-  type-fest@0.6.0:
-    resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
-    engines: {node: '>=8'}
-
-  type-fest@0.8.1:
-    resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
-    engines: {node: '>=8'}
-
-  type-fest@4.37.0:
-    resolution: {integrity: sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==}
+  type-fest@4.41.0:
+    resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
     engines: {node: '>=16'}
 
-  type-is@2.0.1:
-    resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==}
-    engines: {node: '>= 0.6'}
-
   typed-array-buffer@1.0.3:
     resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
     engines: {node: '>= 0.4'}
@@ -4189,8 +3965,8 @@ packages:
     resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
     engines: {node: '>= 0.4'}
 
-  typescript-eslint@8.32.0:
-    resolution: {integrity: sha512-UMq2kxdXCzinFFPsXc9o2ozIpYCCOiEC46MG3yEh5Vipq6BO27otTtEBZA1fQ66DulEUgE97ucQ/3YY66CPg0A==}
+  typescript-eslint@8.34.1:
+    resolution: {integrity: sha512-XjS+b6Vg9oT1BaIUfkW3M3LvqZE++rbzAMEHuccCfO/YkP43ha6w3jTEMilQxMF92nVOYCcdjv1ZUhAa1D/0ow==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
@@ -4220,6 +3996,9 @@ packages:
   undici-types@6.21.0:
     resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
 
+  undici-types@7.8.0:
+    resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==}
+
   unified@11.0.5:
     resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
 
@@ -4242,10 +4021,6 @@ packages:
     resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
     engines: {node: '>= 4.0.0'}
 
-  unpipe@1.0.0:
-    resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
-    engines: {node: '>= 0.8'}
-
   update-browserslist-db@1.1.3:
     resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
     hasBin: true
@@ -4273,8 +4048,8 @@ packages:
       '@types/react':
         optional: true
 
-  use-debounce@10.0.4:
-    resolution: {integrity: sha512-6Cf7Yr7Wk7Kdv77nnJMf6de4HuDE4dTxKij+RqE9rufDsI6zsbjyAxcH5y2ueJCQAnfgKbzXbZHYlkFwmBlWkw==}
+  use-debounce@10.0.5:
+    resolution: {integrity: sha512-Q76E3lnIV+4YT9AHcrHEHYmAd9LKwUAbPXDm7FlqVGDHiSOhX3RDjT8dm0AxbJup6WgOb1YEcKyCr11kBJR5KQ==}
     engines: {node: '>= 16.0.0'}
     peerDependencies:
       react: '*'
@@ -4297,8 +4072,8 @@ packages:
       '@types/react':
         optional: true
 
-  use-sync-external-store@1.4.0:
-    resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==}
+  use-sync-external-store@1.5.0:
+    resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
 
@@ -4308,22 +4083,15 @@ packages:
     peerDependencies:
       react: ^16.8.0  || ^17 || ^18 || ^19 || ^19.0.0-rc
 
-  validate-npm-package-license@3.0.4:
-    resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
-
-  vary@1.1.2:
-    resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
-    engines: {node: '>= 0.8'}
-
   vfile-message@4.0.2:
     resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
 
   vfile@6.0.3:
     resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
 
-  vite-node@2.1.9:
-    resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==}
-    engines: {node: ^18.0.0 || >=20.0.0}
+  vite-node@3.2.4:
+    resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==}
+    engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
     hasBin: true
 
   vite-plugin-css-injected-by-js@3.5.2:
@@ -4331,22 +4099,27 @@ packages:
     peerDependencies:
       vite: '>2.0.0-0'
 
-  vite@5.4.19:
-    resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==}
-    engines: {node: ^18.0.0 || >=20.0.0}
+  vite@6.3.5:
+    resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==}
+    engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
     hasBin: true
     peerDependencies:
-      '@types/node': ^18.0.0 || >=20.0.0
+      '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
+      jiti: '>=1.21.0'
       less: '*'
       lightningcss: ^1.21.0
       sass: '*'
       sass-embedded: '*'
       stylus: '*'
       sugarss: '*'
-      terser: ^5.4.0
+      terser: ^5.16.0
+      tsx: ^4.8.1
+      yaml: ^2.4.2
     peerDependenciesMeta:
       '@types/node':
         optional: true
+      jiti:
+        optional: true
       less:
         optional: true
       lightningcss:
@@ -4361,21 +4134,28 @@ packages:
         optional: true
       terser:
         optional: true
+      tsx:
+        optional: true
+      yaml:
+        optional: true
 
-  vitest@2.1.9:
-    resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==}
-    engines: {node: ^18.0.0 || >=20.0.0}
+  vitest@3.2.4:
+    resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==}
+    engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
     hasBin: true
     peerDependencies:
       '@edge-runtime/vm': '*'
-      '@types/node': ^18.0.0 || >=20.0.0
-      '@vitest/browser': 2.1.9
-      '@vitest/ui': 2.1.9
+      '@types/debug': ^4.1.12
+      '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
+      '@vitest/browser': 3.2.4
+      '@vitest/ui': 3.2.4
       happy-dom: '*'
       jsdom: '*'
     peerDependenciesMeta:
       '@edge-runtime/vm':
         optional: true
+      '@types/debug':
+        optional: true
       '@types/node':
         optional: true
       '@vitest/browser':
@@ -4400,10 +4180,6 @@ packages:
   webidl-conversions@3.0.1:
     resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
 
-  webidl-conversions@7.0.0:
-    resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
-    engines: {node: '>=12'}
-
   whatwg-fetch@3.6.20:
     resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==}
 
@@ -4459,9 +4235,6 @@ packages:
     resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
     engines: {node: '>=12'}
 
-  wrappy@1.0.2:
-    resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
-
   xtend@4.0.2:
     resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
     engines: {node: '>=0.4'}
@@ -4493,16 +4266,8 @@ packages:
     resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==}
     engines: {node: '>=18'}
 
-  zod-to-json-schema@3.24.5:
-    resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==}
-    peerDependencies:
-      zod: ^3.24.1
-
-  zod@3.24.4:
-    resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==}
-
-  zustand@4.5.6:
-    resolution: {integrity: sha512-ibr/n1hBzLLj5Y+yUcU7dYw8p6WnIVzdJbnX+1YpaScvZVF2ziugqHs+LAmHw4lWO9c/zRj+K1ncgWDQuthEdQ==}
+  zustand@4.5.7:
+    resolution: {integrity: sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==}
     engines: {node: '>=12.7.0'}
     peerDependencies:
       '@types/react': '>=16.8'
@@ -4516,8 +4281,8 @@ packages:
       react:
         optional: true
 
-  zustand@5.0.4:
-    resolution: {integrity: sha512-39VFTN5InDtMd28ZhjLyuTnlytDr9HfwO512Ai4I8ZABCoyAj4F1+sr7sD1jP/+p7k77Iko0Pb5NhgBFDCX0kQ==}
+  zustand@5.0.5:
+    resolution: {integrity: sha512-mILtRfKW9xM47hqxGIxCv12gXusoY/xTSHBYApXozR0HmQv299whhBeeAcRy+KrPPybzosvJBCOmVjq6x12fCg==}
     engines: {node: '>=12.20.0'}
     peerDependencies:
       '@types/react': '>=18.0.0'
@@ -4562,74 +4327,68 @@ snapshots:
       '@types/json-schema': 7.0.15
       js-yaml: 4.1.0
 
-  '@ark-ui/react@5.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
-    dependencies:
-      '@internationalized/date': 3.8.1
-      '@zag-js/accordion': 1.15.0
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/angle-slider': 1.15.0
-      '@zag-js/auto-resize': 1.15.0
-      '@zag-js/avatar': 1.15.0
-      '@zag-js/carousel': 1.15.0
-      '@zag-js/checkbox': 1.15.0
-      '@zag-js/clipboard': 1.15.0
-      '@zag-js/collapsible': 1.15.0
-      '@zag-js/collection': 1.15.0
-      '@zag-js/color-picker': 1.15.0
-      '@zag-js/color-utils': 1.15.0
-      '@zag-js/combobox': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/date-picker': 1.15.0(@internationalized/date@3.8.1)
-      '@zag-js/date-utils': 1.15.0(@internationalized/date@3.8.1)
-      '@zag-js/dialog': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/editable': 1.15.0
-      '@zag-js/file-upload': 1.15.0
-      '@zag-js/file-utils': 1.15.0
-      '@zag-js/floating-panel': 1.15.0
-      '@zag-js/focus-trap': 1.15.0
-      '@zag-js/highlight-word': 1.15.0
-      '@zag-js/hover-card': 1.15.0
-      '@zag-js/i18n-utils': 1.15.0
-      '@zag-js/listbox': 1.15.0
-      '@zag-js/menu': 1.15.0
-      '@zag-js/number-input': 1.15.0
-      '@zag-js/pagination': 1.15.0
-      '@zag-js/password-input': 1.15.0
-      '@zag-js/pin-input': 1.15.0
-      '@zag-js/popover': 1.15.0
-      '@zag-js/presence': 1.15.0
-      '@zag-js/progress': 1.15.0
-      '@zag-js/qr-code': 1.15.0
-      '@zag-js/radio-group': 1.15.0
-      '@zag-js/rating-group': 1.15.0
-      '@zag-js/react': 1.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@zag-js/select': 1.15.0
-      '@zag-js/signature-pad': 1.15.0
-      '@zag-js/slider': 1.15.0
-      '@zag-js/splitter': 1.15.0
-      '@zag-js/steps': 1.15.0
-      '@zag-js/switch': 1.15.0
-      '@zag-js/tabs': 1.15.0
-      '@zag-js/tags-input': 1.15.0
-      '@zag-js/time-picker': 1.15.0(@internationalized/date@3.8.1)
-      '@zag-js/timer': 1.15.0
-      '@zag-js/toast': 1.15.0
-      '@zag-js/toggle': 1.15.0
-      '@zag-js/toggle-group': 1.15.0
-      '@zag-js/tooltip': 1.15.0
-      '@zag-js/tour': 1.15.0
-      '@zag-js/tree-view': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
-
-  '@babel/code-frame@7.26.2':
-    dependencies:
-      '@babel/helper-validator-identifier': 7.25.9
-      js-tokens: 4.0.0
-      picocolors: 1.1.1
+  '@ark-ui/react@5.14.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+    dependencies:
+      '@internationalized/date': 3.8.2
+      '@zag-js/accordion': 1.15.2
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/angle-slider': 1.15.2
+      '@zag-js/auto-resize': 1.15.2
+      '@zag-js/avatar': 1.15.2
+      '@zag-js/carousel': 1.15.2
+      '@zag-js/checkbox': 1.15.2
+      '@zag-js/clipboard': 1.15.2
+      '@zag-js/collapsible': 1.15.2
+      '@zag-js/collection': 1.15.2
+      '@zag-js/color-picker': 1.15.2
+      '@zag-js/color-utils': 1.15.2
+      '@zag-js/combobox': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/date-picker': 1.15.2(@internationalized/date@3.8.2)
+      '@zag-js/date-utils': 1.15.2(@internationalized/date@3.8.2)
+      '@zag-js/dialog': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/editable': 1.15.2
+      '@zag-js/file-upload': 1.15.2
+      '@zag-js/file-utils': 1.15.2
+      '@zag-js/floating-panel': 1.15.2
+      '@zag-js/focus-trap': 1.15.2
+      '@zag-js/highlight-word': 1.15.2
+      '@zag-js/hover-card': 1.15.2
+      '@zag-js/i18n-utils': 1.15.2
+      '@zag-js/listbox': 1.15.2
+      '@zag-js/menu': 1.15.2
+      '@zag-js/number-input': 1.15.2
+      '@zag-js/pagination': 1.15.2
+      '@zag-js/password-input': 1.15.2
+      '@zag-js/pin-input': 1.15.2
+      '@zag-js/popover': 1.15.2
+      '@zag-js/presence': 1.15.2
+      '@zag-js/progress': 1.15.2
+      '@zag-js/qr-code': 1.15.2
+      '@zag-js/radio-group': 1.15.2
+      '@zag-js/rating-group': 1.15.2
+      '@zag-js/react': 1.15.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+      '@zag-js/select': 1.15.2
+      '@zag-js/signature-pad': 1.15.2
+      '@zag-js/slider': 1.15.2
+      '@zag-js/splitter': 1.15.2
+      '@zag-js/steps': 1.15.2
+      '@zag-js/switch': 1.15.2
+      '@zag-js/tabs': 1.15.2
+      '@zag-js/tags-input': 1.15.2
+      '@zag-js/time-picker': 1.15.2(@internationalized/date@3.8.2)
+      '@zag-js/timer': 1.15.2
+      '@zag-js/toast': 1.15.2
+      '@zag-js/toggle': 1.15.2
+      '@zag-js/toggle-group': 1.15.2
+      '@zag-js/tooltip': 1.15.2
+      '@zag-js/tour': 1.15.2
+      '@zag-js/tree-view': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+      react: 19.1.0
+      react-dom: 19.1.0(react@19.1.0)
 
   '@babel/code-frame@7.27.1':
     dependencies:
@@ -4637,102 +4396,59 @@ snapshots:
       js-tokens: 4.0.0
       picocolors: 1.1.1
 
-  '@babel/generator@7.17.7':
+  '@babel/generator@7.27.5':
     dependencies:
-      '@babel/types': 7.17.0
-      jsesc: 2.5.2
-      source-map: 0.5.7
-
-  '@babel/generator@7.26.10':
-    dependencies:
-      '@babel/parser': 7.26.10
-      '@babel/types': 7.26.10
+      '@babel/parser': 7.27.5
+      '@babel/types': 7.27.6
       '@jridgewell/gen-mapping': 0.3.8
       '@jridgewell/trace-mapping': 0.3.25
       jsesc: 3.1.0
 
-  '@babel/helper-environment-visitor@7.24.7':
-    dependencies:
-      '@babel/types': 7.26.10
-
-  '@babel/helper-function-name@7.24.7':
-    dependencies:
-      '@babel/template': 7.26.9
-      '@babel/types': 7.26.10
-
-  '@babel/helper-hoist-variables@7.24.7':
-    dependencies:
-      '@babel/types': 7.26.10
-
   '@babel/helper-module-imports@7.25.9':
     dependencies:
-      '@babel/traverse': 7.26.10
-      '@babel/types': 7.26.10
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/helper-split-export-declaration@7.24.7':
-    dependencies:
-      '@babel/types': 7.26.10
-
-  '@babel/helper-string-parser@7.25.9': {}
+      '@babel/traverse': 7.27.4
+      '@babel/types': 7.27.6
+    transitivePeerDependencies:
+      - supports-color
 
-  '@babel/helper-validator-identifier@7.25.9': {}
+  '@babel/helper-string-parser@7.27.1': {}
 
   '@babel/helper-validator-identifier@7.27.1': {}
 
-  '@babel/parser@7.26.10':
+  '@babel/parser@7.27.5':
     dependencies:
-      '@babel/types': 7.26.10
+      '@babel/types': 7.27.6
 
   '@babel/runtime@7.26.10':
     dependencies:
       regenerator-runtime: 0.14.1
 
-  '@babel/template@7.26.9':
-    dependencies:
-      '@babel/code-frame': 7.26.2
-      '@babel/parser': 7.26.10
-      '@babel/types': 7.26.10
+  '@babel/runtime@7.27.6': {}
 
-  '@babel/traverse@7.23.2':
+  '@babel/template@7.27.2':
     dependencies:
-      '@babel/code-frame': 7.26.2
-      '@babel/generator': 7.26.10
-      '@babel/helper-environment-visitor': 7.24.7
-      '@babel/helper-function-name': 7.24.7
-      '@babel/helper-hoist-variables': 7.24.7
-      '@babel/helper-split-export-declaration': 7.24.7
-      '@babel/parser': 7.26.10
-      '@babel/types': 7.26.10
-      debug: 4.4.0
-      globals: 11.12.0
-    transitivePeerDependencies:
-      - supports-color
+      '@babel/code-frame': 7.27.1
+      '@babel/parser': 7.27.5
+      '@babel/types': 7.27.6
 
-  '@babel/traverse@7.26.10':
+  '@babel/traverse@7.27.4':
     dependencies:
-      '@babel/code-frame': 7.26.2
-      '@babel/generator': 7.26.10
-      '@babel/parser': 7.26.10
-      '@babel/template': 7.26.9
-      '@babel/types': 7.26.10
-      debug: 4.4.0
+      '@babel/code-frame': 7.27.1
+      '@babel/generator': 7.27.5
+      '@babel/parser': 7.27.5
+      '@babel/template': 7.27.2
+      '@babel/types': 7.27.6
+      debug: 4.4.1
       globals: 11.12.0
     transitivePeerDependencies:
       - supports-color
 
-  '@babel/types@7.17.0':
+  '@babel/types@7.27.6':
     dependencies:
-      '@babel/helper-validator-identifier': 7.25.9
-      to-fast-properties: 2.0.0
-
-  '@babel/types@7.26.10':
-    dependencies:
-      '@babel/helper-string-parser': 7.25.9
-      '@babel/helper-validator-identifier': 7.25.9
+      '@babel/helper-string-parser': 7.27.1
+      '@babel/helper-validator-identifier': 7.27.1
 
-  '@bcoe/v8-coverage@0.2.3': {}
+  '@bcoe/v8-coverage@1.0.2': {}
 
   '@bundled-es-modules/cookie@2.0.1':
     dependencies:
@@ -4740,7 +4456,7 @@ snapshots:
 
   '@bundled-es-modules/statuses@1.0.1':
     dependencies:
-      statuses: 2.0.1
+      statuses: 2.0.2
 
   '@bundled-es-modules/tough-cookie@0.1.6':
     dependencies:
@@ -4749,43 +4465,43 @@ snapshots:
 
   '@chakra-ui/anatomy@2.3.4': {}
 
-  '@chakra-ui/react@3.20.0(@emotion/react@11.14.0(@types/react@18.3.19)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+  '@chakra-ui/react@3.21.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
     dependencies:
-      '@ark-ui/react': 5.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@ark-ui/react': 5.14.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
       '@emotion/is-prop-valid': 1.3.1
-      '@emotion/react': 11.14.0(@types/react@18.3.19)(react@18.3.1)
+      '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0)
       '@emotion/serialize': 1.3.3
-      '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1)
+      '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0)
       '@emotion/utils': 1.4.2
       '@pandacss/is-valid-prop': 0.53.6
       csstype: 3.1.3
       fast-safe-stringify: 2.1.1
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
+      react: 19.1.0
+      react-dom: 19.1.0(react@19.1.0)
 
-  '@codemirror/autocomplete@6.18.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)(@lezer/common@1.2.3)':
+  '@codemirror/autocomplete@6.18.2(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)(@lezer/common@1.2.3)':
     dependencies:
-      '@codemirror/language': 6.11.0
+      '@codemirror/language': 6.11.1
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.36.4
+      '@codemirror/view': 6.37.2
       '@lezer/common': 1.2.3
 
   '@codemirror/commands@6.8.1':
     dependencies:
-      '@codemirror/language': 6.11.0
+      '@codemirror/language': 6.11.1
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.36.4
+      '@codemirror/view': 6.37.2
       '@lezer/common': 1.2.3
 
-  '@codemirror/lang-json@6.0.1':
+  '@codemirror/lang-json@6.0.2':
     dependencies:
-      '@codemirror/language': 6.11.0
+      '@codemirror/language': 6.11.1
       '@lezer/json': 1.0.3
 
-  '@codemirror/language@6.11.0':
+  '@codemirror/language@6.11.1':
     dependencies:
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.36.4
+      '@codemirror/view': 6.37.2
       '@lezer/common': 1.2.3
       '@lezer/highlight': 1.2.1
       '@lezer/lr': 1.4.2
@@ -4794,13 +4510,13 @@ snapshots:
   '@codemirror/lint@6.8.2':
     dependencies:
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.36.4
+      '@codemirror/view': 6.37.2
       crelt: 1.0.6
 
   '@codemirror/search@6.5.6':
     dependencies:
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.36.4
+      '@codemirror/view': 6.37.2
       crelt: 1.0.6
 
   '@codemirror/state@6.5.2':
@@ -4809,14 +4525,15 @@ snapshots:
 
   '@codemirror/theme-one-dark@6.1.2':
     dependencies:
-      '@codemirror/language': 6.11.0
+      '@codemirror/language': 6.11.1
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.36.4
+      '@codemirror/view': 6.37.2
       '@lezer/highlight': 1.2.1
 
-  '@codemirror/view@6.36.4':
+  '@codemirror/view@6.37.2':
     dependencies:
       '@codemirror/state': 6.5.2
+      crelt: 1.0.6
       style-mod: 4.1.2
       w3c-keyname: 2.2.8
 
@@ -4852,19 +4569,19 @@ snapshots:
 
   '@emotion/memoize@0.9.0': {}
 
-  '@emotion/react@11.14.0(@types/react@18.3.19)(react@18.3.1)':
+  '@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0)':
     dependencies:
       '@babel/runtime': 7.26.10
       '@emotion/babel-plugin': 11.13.5
       '@emotion/cache': 11.14.0
       '@emotion/serialize': 1.3.3
-      '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1)
+      '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0)
       '@emotion/utils': 1.4.2
       '@emotion/weak-memoize': 0.4.0
       hoist-non-react-statics: 3.3.2
-      react: 18.3.1
+      react: 19.1.0
     optionalDependencies:
-      '@types/react': 18.3.19
+      '@types/react': 19.1.8
     transitivePeerDependencies:
       - supports-color
 
@@ -4880,118 +4597,127 @@ snapshots:
 
   '@emotion/unitless@0.10.0': {}
 
-  '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@18.3.1)':
+  '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.1.0)':
     dependencies:
-      react: 18.3.1
+      react: 19.1.0
 
   '@emotion/utils@1.4.2': {}
 
   '@emotion/weak-memoize@0.4.0': {}
 
-  '@esbuild/aix-ppc64@0.21.5':
+  '@esbuild/aix-ppc64@0.25.5':
     optional: true
 
-  '@esbuild/android-arm64@0.21.5':
+  '@esbuild/android-arm64@0.25.5':
     optional: true
 
-  '@esbuild/android-arm@0.21.5':
+  '@esbuild/android-arm@0.25.5':
     optional: true
 
-  '@esbuild/android-x64@0.21.5':
+  '@esbuild/android-x64@0.25.5':
     optional: true
 
-  '@esbuild/darwin-arm64@0.21.5':
+  '@esbuild/darwin-arm64@0.25.5':
     optional: true
 
-  '@esbuild/darwin-x64@0.21.5':
+  '@esbuild/darwin-x64@0.25.5':
     optional: true
 
-  '@esbuild/freebsd-arm64@0.21.5':
+  '@esbuild/freebsd-arm64@0.25.5':
     optional: true
 
-  '@esbuild/freebsd-x64@0.21.5':
+  '@esbuild/freebsd-x64@0.25.5':
     optional: true
 
-  '@esbuild/linux-arm64@0.21.5':
+  '@esbuild/linux-arm64@0.25.5':
     optional: true
 
-  '@esbuild/linux-arm@0.21.5':
+  '@esbuild/linux-arm@0.25.5':
     optional: true
 
-  '@esbuild/linux-ia32@0.21.5':
+  '@esbuild/linux-ia32@0.25.5':
     optional: true
 
-  '@esbuild/linux-loong64@0.21.5':
+  '@esbuild/linux-loong64@0.25.5':
     optional: true
 
-  '@esbuild/linux-mips64el@0.21.5':
+  '@esbuild/linux-mips64el@0.25.5':
     optional: true
 
-  '@esbuild/linux-ppc64@0.21.5':
+  '@esbuild/linux-ppc64@0.25.5':
     optional: true
 
-  '@esbuild/linux-riscv64@0.21.5':
+  '@esbuild/linux-riscv64@0.25.5':
     optional: true
 
-  '@esbuild/linux-s390x@0.21.5':
+  '@esbuild/linux-s390x@0.25.5':
     optional: true
 
-  '@esbuild/linux-x64@0.21.5':
+  '@esbuild/linux-x64@0.25.5':
     optional: true
 
-  '@esbuild/netbsd-x64@0.21.5':
+  '@esbuild/netbsd-arm64@0.25.5':
     optional: true
 
-  '@esbuild/openbsd-x64@0.21.5':
+  '@esbuild/netbsd-x64@0.25.5':
     optional: true
 
-  '@esbuild/sunos-x64@0.21.5':
+  '@esbuild/openbsd-arm64@0.25.5':
     optional: true
 
-  '@esbuild/win32-arm64@0.21.5':
+  '@esbuild/openbsd-x64@0.25.5':
     optional: true
 
-  '@esbuild/win32-ia32@0.21.5':
+  '@esbuild/sunos-x64@0.25.5':
     optional: true
 
-  '@esbuild/win32-x64@0.21.5':
+  '@esbuild/win32-arm64@0.25.5':
     optional: true
 
-  '@eslint-community/eslint-utils@4.5.1(eslint@9.26.0(jiti@1.21.7))':
-    dependencies:
-      eslint: 9.26.0(jiti@1.21.7)
-      eslint-visitor-keys: 3.4.3
+  '@esbuild/win32-ia32@0.25.5':
+    optional: true
+
+  '@esbuild/win32-x64@0.25.5':
+    optional: true
 
-  '@eslint-community/eslint-utils@4.7.0(eslint@9.26.0(jiti@1.21.7))':
+  '@eslint-community/eslint-utils@4.7.0(eslint@9.29.0(jiti@1.21.7))':
     dependencies:
-      eslint: 9.26.0(jiti@1.21.7)
+      eslint: 9.29.0(jiti@1.21.7)
       eslint-visitor-keys: 3.4.3
 
   '@eslint-community/regexpp@4.12.1': {}
 
-  '@eslint/compat@1.2.9(eslint@9.26.0(jiti@1.21.7))':
+  '@eslint/compat@1.3.0(eslint@9.29.0(jiti@1.21.7))':
     optionalDependencies:
-      eslint: 9.26.0(jiti@1.21.7)
+      eslint: 9.29.0(jiti@1.21.7)
 
-  '@eslint/config-array@0.20.0':
+  '@eslint/config-array@0.20.1':
     dependencies:
       '@eslint/object-schema': 2.1.6
-      debug: 4.4.0
+      debug: 4.4.1
       minimatch: 3.1.2
     transitivePeerDependencies:
       - supports-color
 
-  '@eslint/config-helpers@0.2.2': {}
+  '@eslint/config-helpers@0.2.3': {}
 
   '@eslint/core@0.13.0':
     dependencies:
       '@types/json-schema': 7.0.15
 
+  '@eslint/core@0.14.0':
+    dependencies:
+      '@types/json-schema': 7.0.15
+
+  '@eslint/core@0.15.0':
+    dependencies:
+      '@types/json-schema': 7.0.15
+
   '@eslint/eslintrc@3.3.1':
     dependencies:
       ajv: 6.12.6
-      debug: 4.4.0
-      espree: 10.3.0
+      debug: 4.4.1
+      espree: 10.4.0
       globals: 14.0.0
       ignore: 5.3.2
       import-fresh: 3.3.1
@@ -5001,7 +4727,7 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@eslint/js@9.26.0': {}
+  '@eslint/js@9.29.0': {}
 
   '@eslint/object-schema@2.1.6': {}
 
@@ -5010,6 +4736,11 @@ snapshots:
       '@eslint/core': 0.13.0
       levn: 0.4.1
 
+  '@eslint/plugin-kit@0.3.2':
+    dependencies:
+      '@eslint/core': 0.15.0
+      levn: 0.4.1
+
   '@floating-ui/core@1.6.9':
     dependencies:
       '@floating-ui/utils': 0.2.9
@@ -5052,19 +4783,19 @@ snapshots:
 
   '@humanwhocodes/retry@0.3.1': {}
 
-  '@humanwhocodes/retry@0.4.2': {}
+  '@humanwhocodes/retry@0.4.3': {}
 
-  '@inquirer/confirm@5.1.8(@types/node@22.15.14)':
+  '@inquirer/confirm@5.1.12(@types/node@24.0.3)':
     dependencies:
-      '@inquirer/core': 10.1.9(@types/node@22.15.14)
-      '@inquirer/type': 3.0.5(@types/node@22.15.14)
+      '@inquirer/core': 10.1.13(@types/node@24.0.3)
+      '@inquirer/type': 3.0.7(@types/node@24.0.3)
     optionalDependencies:
-      '@types/node': 22.15.14
+      '@types/node': 24.0.3
 
-  '@inquirer/core@10.1.9(@types/node@22.15.14)':
+  '@inquirer/core@10.1.13(@types/node@24.0.3)':
     dependencies:
-      '@inquirer/figures': 1.0.11
-      '@inquirer/type': 3.0.5(@types/node@22.15.14)
+      '@inquirer/figures': 1.0.12
+      '@inquirer/type': 3.0.7(@types/node@24.0.3)
       ansi-escapes: 4.3.2
       cli-width: 4.1.0
       mute-stream: 2.0.0
@@ -5072,21 +4803,27 @@ snapshots:
       wrap-ansi: 6.2.0
       yoctocolors-cjs: 2.1.2
     optionalDependencies:
-      '@types/node': 22.15.14
+      '@types/node': 24.0.3
 
-  '@inquirer/figures@1.0.11': {}
+  '@inquirer/figures@1.0.12': {}
 
-  '@inquirer/type@3.0.5(@types/node@22.15.14)':
+  '@inquirer/type@3.0.7(@types/node@24.0.3)':
     optionalDependencies:
-      '@types/node': 22.15.14
+      '@types/node': 24.0.3
+
+  '@internationalized/date@3.8.2':
+    dependencies:
+      '@swc/helpers': 0.5.17
 
-  '@internationalized/date@3.8.1':
+  '@internationalized/number@3.6.3':
     dependencies:
-      '@swc/helpers': 0.5.15
+      '@swc/helpers': 0.5.17
 
-  '@internationalized/number@3.6.2':
+  '@isaacs/balanced-match@4.0.1': {}
+
+  '@isaacs/brace-expansion@5.0.0':
     dependencies:
-      '@swc/helpers': 0.5.15
+      '@isaacs/balanced-match': 4.0.1
 
   '@isaacs/cliui@8.0.2':
     dependencies:
@@ -5138,22 +4875,7 @@ snapshots:
 
   '@marijn/find-cluster-break@1.0.2': {}
 
-  '@modelcontextprotocol/sdk@1.11.0':
-    dependencies:
-      content-type: 1.0.5
-      cors: 2.8.5
-      cross-spawn: 7.0.6
-      eventsource: 3.0.6
-      express: 5.1.0
-      express-rate-limit: 7.5.0(express@5.1.0)
-      pkce-challenge: 5.0.0
-      raw-body: 3.0.0
-      zod: 3.24.4
-      zod-to-json-schema: 3.24.5(zod@3.24.4)
-    transitivePeerDependencies:
-      - supports-color
-
-  '@mswjs/interceptors@0.37.6':
+  '@mswjs/interceptors@0.39.2':
     dependencies:
       '@open-draft/deferred-promise': 2.2.0
       '@open-draft/logger': 0.3.0
@@ -5188,173 +4910,174 @@ snapshots:
   '@pkgjs/parseargs@0.11.0':
     optional: true
 
-  '@pkgr/core@0.2.4': {}
+  '@pkgr/core@0.2.7': {}
 
-  '@remix-run/router@1.23.0': {}
+  '@rolldown/pluginutils@1.0.0-beta.11': {}
 
-  '@rollup/rollup-android-arm-eabi@4.40.1':
+  '@rollup/rollup-android-arm-eabi@4.44.0':
     optional: true
 
-  '@rollup/rollup-android-arm64@4.40.1':
+  '@rollup/rollup-android-arm64@4.44.0':
     optional: true
 
-  '@rollup/rollup-darwin-arm64@4.40.1':
+  '@rollup/rollup-darwin-arm64@4.44.0':
     optional: true
 
-  '@rollup/rollup-darwin-x64@4.40.1':
+  '@rollup/rollup-darwin-x64@4.44.0':
     optional: true
 
-  '@rollup/rollup-freebsd-arm64@4.40.1':
+  '@rollup/rollup-freebsd-arm64@4.44.0':
     optional: true
 
-  '@rollup/rollup-freebsd-x64@4.40.1':
+  '@rollup/rollup-freebsd-x64@4.44.0':
     optional: true
 
-  '@rollup/rollup-linux-arm-gnueabihf@4.40.1':
+  '@rollup/rollup-linux-arm-gnueabihf@4.44.0':
     optional: true
 
-  '@rollup/rollup-linux-arm-musleabihf@4.40.1':
+  '@rollup/rollup-linux-arm-musleabihf@4.44.0':
     optional: true
 
-  '@rollup/rollup-linux-arm64-gnu@4.40.1':
+  '@rollup/rollup-linux-arm64-gnu@4.44.0':
     optional: true
 
-  '@rollup/rollup-linux-arm64-musl@4.40.1':
+  '@rollup/rollup-linux-arm64-musl@4.44.0':
     optional: true
 
-  '@rollup/rollup-linux-loongarch64-gnu@4.40.1':
+  '@rollup/rollup-linux-loongarch64-gnu@4.44.0':
     optional: true
 
-  '@rollup/rollup-linux-powerpc64le-gnu@4.40.1':
+  '@rollup/rollup-linux-powerpc64le-gnu@4.44.0':
     optional: true
 
-  '@rollup/rollup-linux-riscv64-gnu@4.40.1':
+  '@rollup/rollup-linux-riscv64-gnu@4.44.0':
     optional: true
 
-  '@rollup/rollup-linux-riscv64-musl@4.40.1':
+  '@rollup/rollup-linux-riscv64-musl@4.44.0':
     optional: true
 
-  '@rollup/rollup-linux-s390x-gnu@4.40.1':
+  '@rollup/rollup-linux-s390x-gnu@4.44.0':
     optional: true
 
-  '@rollup/rollup-linux-x64-gnu@4.40.1':
+  '@rollup/rollup-linux-x64-gnu@4.44.0':
     optional: true
 
-  '@rollup/rollup-linux-x64-musl@4.40.1':
+  '@rollup/rollup-linux-x64-musl@4.44.0':
     optional: true
 
-  '@rollup/rollup-win32-arm64-msvc@4.40.1':
+  '@rollup/rollup-win32-arm64-msvc@4.44.0':
     optional: true
 
-  '@rollup/rollup-win32-ia32-msvc@4.40.1':
+  '@rollup/rollup-win32-ia32-msvc@4.44.0':
     optional: true
 
-  '@rollup/rollup-win32-x64-msvc@4.40.1':
+  '@rollup/rollup-win32-x64-msvc@4.44.0':
     optional: true
 
-  '@stylistic/eslint-plugin@2.13.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)':
+  '@stylistic/eslint-plugin@4.4.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
     dependencies:
-      '@typescript-eslint/utils': 8.27.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
-      eslint: 9.26.0(jiti@1.21.7)
-      eslint-visitor-keys: 4.2.0
-      espree: 10.3.0
+      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      eslint: 9.29.0(jiti@1.21.7)
+      eslint-visitor-keys: 4.2.1
+      espree: 10.4.0
       estraverse: 5.3.0
       picomatch: 4.0.2
     transitivePeerDependencies:
       - supports-color
       - typescript
 
-  '@swc/core-darwin-arm64@1.11.24':
+  '@swc/core-darwin-arm64@1.12.4':
     optional: true
 
-  '@swc/core-darwin-x64@1.11.24':
+  '@swc/core-darwin-x64@1.12.4':
     optional: true
 
-  '@swc/core-linux-arm-gnueabihf@1.11.24':
+  '@swc/core-linux-arm-gnueabihf@1.12.4':
     optional: true
 
-  '@swc/core-linux-arm64-gnu@1.11.24':
+  '@swc/core-linux-arm64-gnu@1.12.4':
     optional: true
 
-  '@swc/core-linux-arm64-musl@1.11.24':
+  '@swc/core-linux-arm64-musl@1.12.4':
     optional: true
 
-  '@swc/core-linux-x64-gnu@1.11.24':
+  '@swc/core-linux-x64-gnu@1.12.4':
     optional: true
 
-  '@swc/core-linux-x64-musl@1.11.24':
+  '@swc/core-linux-x64-musl@1.12.4':
     optional: true
 
-  '@swc/core-win32-arm64-msvc@1.11.24':
+  '@swc/core-win32-arm64-msvc@1.12.4':
     optional: true
 
-  '@swc/core-win32-ia32-msvc@1.11.24':
+  '@swc/core-win32-ia32-msvc@1.12.4':
     optional: true
 
-  '@swc/core-win32-x64-msvc@1.11.24':
+  '@swc/core-win32-x64-msvc@1.12.4':
     optional: true
 
-  '@swc/core@1.11.24':
+  '@swc/core@1.12.4(@swc/helpers@0.5.17)':
     dependencies:
       '@swc/counter': 0.1.3
-      '@swc/types': 0.1.21
+      '@swc/types': 0.1.23
     optionalDependencies:
-      '@swc/core-darwin-arm64': 1.11.24
-      '@swc/core-darwin-x64': 1.11.24
-      '@swc/core-linux-arm-gnueabihf': 1.11.24
-      '@swc/core-linux-arm64-gnu': 1.11.24
-      '@swc/core-linux-arm64-musl': 1.11.24
-      '@swc/core-linux-x64-gnu': 1.11.24
-      '@swc/core-linux-x64-musl': 1.11.24
-      '@swc/core-win32-arm64-msvc': 1.11.24
-      '@swc/core-win32-ia32-msvc': 1.11.24
-      '@swc/core-win32-x64-msvc': 1.11.24
+      '@swc/core-darwin-arm64': 1.12.4
+      '@swc/core-darwin-x64': 1.12.4
+      '@swc/core-linux-arm-gnueabihf': 1.12.4
+      '@swc/core-linux-arm64-gnu': 1.12.4
+      '@swc/core-linux-arm64-musl': 1.12.4
+      '@swc/core-linux-x64-gnu': 1.12.4
+      '@swc/core-linux-x64-musl': 1.12.4
+      '@swc/core-win32-arm64-msvc': 1.12.4
+      '@swc/core-win32-ia32-msvc': 1.12.4
+      '@swc/core-win32-x64-msvc': 1.12.4
+      '@swc/helpers': 0.5.17
 
   '@swc/counter@0.1.3': {}
 
-  '@swc/helpers@0.5.15':
+  '@swc/helpers@0.5.17':
     dependencies:
       tslib: 2.8.1
 
-  '@swc/types@0.1.21':
+  '@swc/types@0.1.23':
     dependencies:
       '@swc/counter': 0.1.3
 
-  '@tanstack/eslint-plugin-query@5.74.7(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)':
+  '@tanstack/eslint-plugin-query@5.78.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
     dependencies:
-      '@typescript-eslint/utils': 8.28.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
-      eslint: 9.26.0(jiti@1.21.7)
+      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      eslint: 9.29.0(jiti@1.21.7)
     transitivePeerDependencies:
       - supports-color
       - typescript
 
-  '@tanstack/query-core@5.75.4': {}
+  '@tanstack/query-core@5.80.10': {}
 
-  '@tanstack/react-query@5.75.4(react@18.3.1)':
+  '@tanstack/react-query@5.80.10(react@19.1.0)':
     dependencies:
-      '@tanstack/query-core': 5.75.4
-      react: 18.3.1
+      '@tanstack/query-core': 5.80.10
+      react: 19.1.0
 
-  '@tanstack/react-table@8.21.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+  '@tanstack/react-table@8.21.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
     dependencies:
       '@tanstack/table-core': 8.21.3
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
+      react: 19.1.0
+      react-dom: 19.1.0(react@19.1.0)
 
-  '@tanstack/react-virtual@3.13.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+  '@tanstack/react-virtual@3.13.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
     dependencies:
-      '@tanstack/virtual-core': 3.13.8
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
+      '@tanstack/virtual-core': 3.13.10
+      react: 19.1.0
+      react-dom: 19.1.0(react@19.1.0)
 
   '@tanstack/table-core@8.21.3': {}
 
-  '@tanstack/virtual-core@3.13.8': {}
+  '@tanstack/virtual-core@3.13.10': {}
 
   '@testing-library/dom@10.4.0':
     dependencies:
       '@babel/code-frame': 7.27.1
-      '@babel/runtime': 7.26.10
+      '@babel/runtime': 7.27.6
       '@types/aria-query': 5.0.4
       aria-query: 5.3.0
       chalk: 4.1.2
@@ -5372,22 +5095,22 @@ snapshots:
       lodash: 4.17.21
       redent: 3.0.0
 
-  '@testing-library/react@16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.5(@types/react@18.3.19))(@types/react@18.3.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+  '@testing-library/react@16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
     dependencies:
       '@babel/runtime': 7.26.10
       '@testing-library/dom': 10.4.0
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
+      react: 19.1.0
+      react-dom: 19.1.0(react@19.1.0)
     optionalDependencies:
-      '@types/react': 18.3.19
-      '@types/react-dom': 18.3.5(@types/react@18.3.19)
+      '@types/react': 19.1.8
+      '@types/react-dom': 19.1.6(@types/react@19.1.8)
 
-  '@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.5.3)':
+  '@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.5.3)':
     dependencies:
-      '@babel/generator': 7.17.7
-      '@babel/parser': 7.26.10
-      '@babel/traverse': 7.23.2
-      '@babel/types': 7.17.0
+      '@babel/generator': 7.27.5
+      '@babel/parser': 7.27.5
+      '@babel/traverse': 7.27.4
+      '@babel/types': 7.27.6
       javascript-natural-sort: 0.7.1
       lodash: 4.17.21
       prettier: 3.5.3
@@ -5403,6 +5126,10 @@ snapshots:
 
   '@types/aria-query@5.0.4': {}
 
+  '@types/chai@5.2.2':
+    dependencies:
+      '@types/deep-eql': 4.0.2
+
   '@types/cookie@0.6.0': {}
 
   '@types/d3-array@3.0.3': {}
@@ -5462,13 +5189,13 @@ snapshots:
     dependencies:
       '@types/ms': 2.1.0
 
+  '@types/deep-eql@4.0.2': {}
+
   '@types/estree-jsx@1.0.5':
     dependencies:
-      '@types/estree': 1.0.7
+      '@types/estree': 1.0.8
 
-  '@types/estree@1.0.6': {}
-
-  '@types/estree@1.0.7': {}
+  '@types/estree@1.0.8': {}
 
   '@types/geojson@7946.0.16': {}
 
@@ -5490,34 +5217,33 @@ snapshots:
 
   '@types/ms@2.1.0': {}
 
-  '@types/node@22.15.14':
+  '@types/node@20.19.1':
     dependencies:
       undici-types: 6.21.0
 
-  '@types/normalize-package-data@2.4.4': {}
+  '@types/node@24.0.3':
+    dependencies:
+      undici-types: 7.8.0
 
   '@types/parse-json@4.0.2': {}
 
-  '@types/prop-types@15.7.14': {}
-
-  '@types/react-dom@18.3.5(@types/react@18.3.19)':
+  '@types/react-dom@19.1.6(@types/react@19.1.8)':
     dependencies:
-      '@types/react': 18.3.19
+      '@types/react': 19.1.8
 
   '@types/react-syntax-highlighter@15.5.13':
     dependencies:
-      '@types/react': 18.3.19
+      '@types/react': 19.1.8
 
-  '@types/react-transition-group@4.4.12(@types/react@18.3.19)':
+  '@types/react-transition-group@4.4.12(@types/react@19.1.8)':
     dependencies:
-      '@types/react': 18.3.19
+      '@types/react': 19.1.8
 
-  '@types/react@18.3.19':
+  '@types/react@19.1.8':
     dependencies:
-      '@types/prop-types': 15.7.14
       csstype: 3.1.3
 
-  '@types/statuses@2.0.5': {}
+  '@types/statuses@2.0.6': {}
 
   '@types/tough-cookie@4.0.5': {}
 
@@ -5525,507 +5251,450 @@ snapshots:
 
   '@types/unist@3.0.3': {}
 
-  '@typescript-eslint/eslint-plugin@8.32.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)':
+  '@types/whatwg-mimetype@3.0.2': {}
+
+  '@typescript-eslint/eslint-plugin@8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
     dependencies:
       '@eslint-community/regexpp': 4.12.1
-      '@typescript-eslint/parser': 8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
-      '@typescript-eslint/scope-manager': 8.32.0
-      '@typescript-eslint/type-utils': 8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
-      '@typescript-eslint/utils': 8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
-      '@typescript-eslint/visitor-keys': 8.32.0
-      eslint: 9.26.0(jiti@1.21.7)
+      '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      '@typescript-eslint/scope-manager': 8.34.1
+      '@typescript-eslint/type-utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      '@typescript-eslint/visitor-keys': 8.34.1
+      eslint: 9.29.0(jiti@1.21.7)
       graphemer: 1.4.0
-      ignore: 5.3.2
+      ignore: 7.0.5
       natural-compare: 1.4.0
       ts-api-utils: 2.1.0(typescript@5.8.3)
       typescript: 5.8.3
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)':
+  '@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
     dependencies:
-      '@typescript-eslint/scope-manager': 8.32.0
-      '@typescript-eslint/types': 8.32.0
-      '@typescript-eslint/typescript-estree': 8.32.0(typescript@5.8.3)
-      '@typescript-eslint/visitor-keys': 8.32.0
-      debug: 4.4.0
-      eslint: 9.26.0(jiti@1.21.7)
+      '@typescript-eslint/scope-manager': 8.34.1
+      '@typescript-eslint/types': 8.34.1
+      '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3)
+      '@typescript-eslint/visitor-keys': 8.34.1
+      debug: 4.4.1
+      eslint: 9.29.0(jiti@1.21.7)
       typescript: 5.8.3
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/scope-manager@8.27.0':
-    dependencies:
-      '@typescript-eslint/types': 8.27.0
-      '@typescript-eslint/visitor-keys': 8.27.0
-
-  '@typescript-eslint/scope-manager@8.28.0':
-    dependencies:
-      '@typescript-eslint/types': 8.28.0
-      '@typescript-eslint/visitor-keys': 8.28.0
-
-  '@typescript-eslint/scope-manager@8.32.0':
-    dependencies:
-      '@typescript-eslint/types': 8.32.0
-      '@typescript-eslint/visitor-keys': 8.32.0
-
-  '@typescript-eslint/type-utils@8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)':
+  '@typescript-eslint/project-service@8.34.1(typescript@5.8.3)':
     dependencies:
-      '@typescript-eslint/typescript-estree': 8.32.0(typescript@5.8.3)
-      '@typescript-eslint/utils': 8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
-      debug: 4.4.0
-      eslint: 9.26.0(jiti@1.21.7)
-      ts-api-utils: 2.1.0(typescript@5.8.3)
+      '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3)
+      '@typescript-eslint/types': 8.34.1
+      debug: 4.4.1
       typescript: 5.8.3
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/types@8.27.0': {}
-
-  '@typescript-eslint/types@8.28.0': {}
-
-  '@typescript-eslint/types@8.32.0': {}
+  '@typescript-eslint/scope-manager@8.34.1':
+    dependencies:
+      '@typescript-eslint/types': 8.34.1
+      '@typescript-eslint/visitor-keys': 8.34.1
 
-  '@typescript-eslint/typescript-estree@8.27.0(typescript@5.8.3)':
+  '@typescript-eslint/tsconfig-utils@8.34.1(typescript@5.8.3)':
     dependencies:
-      '@typescript-eslint/types': 8.27.0
-      '@typescript-eslint/visitor-keys': 8.27.0
-      debug: 4.4.0
-      fast-glob: 3.3.3
-      is-glob: 4.0.3
-      minimatch: 9.0.5
-      semver: 7.7.1
-      ts-api-utils: 2.1.0(typescript@5.8.3)
       typescript: 5.8.3
-    transitivePeerDependencies:
-      - supports-color
 
-  '@typescript-eslint/typescript-estree@8.28.0(typescript@5.8.3)':
+  '@typescript-eslint/type-utils@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
     dependencies:
-      '@typescript-eslint/types': 8.28.0
-      '@typescript-eslint/visitor-keys': 8.28.0
-      debug: 4.4.0
-      fast-glob: 3.3.3
-      is-glob: 4.0.3
-      minimatch: 9.0.5
-      semver: 7.7.1
+      '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3)
+      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      debug: 4.4.1
+      eslint: 9.29.0(jiti@1.21.7)
       ts-api-utils: 2.1.0(typescript@5.8.3)
       typescript: 5.8.3
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/typescript-estree@8.32.0(typescript@5.8.3)':
+  '@typescript-eslint/types@8.34.1': {}
+
+  '@typescript-eslint/typescript-estree@8.34.1(typescript@5.8.3)':
     dependencies:
-      '@typescript-eslint/types': 8.32.0
-      '@typescript-eslint/visitor-keys': 8.32.0
-      debug: 4.4.0
+      '@typescript-eslint/project-service': 8.34.1(typescript@5.8.3)
+      '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3)
+      '@typescript-eslint/types': 8.34.1
+      '@typescript-eslint/visitor-keys': 8.34.1
+      debug: 4.4.1
       fast-glob: 3.3.3
       is-glob: 4.0.3
       minimatch: 9.0.5
-      semver: 7.7.1
+      semver: 7.7.2
       ts-api-utils: 2.1.0(typescript@5.8.3)
       typescript: 5.8.3
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/utils@8.27.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)':
-    dependencies:
-      '@eslint-community/eslint-utils': 4.5.1(eslint@9.26.0(jiti@1.21.7))
-      '@typescript-eslint/scope-manager': 8.27.0
-      '@typescript-eslint/types': 8.27.0
-      '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.8.3)
-      eslint: 9.26.0(jiti@1.21.7)
-      typescript: 5.8.3
-    transitivePeerDependencies:
-      - supports-color
-
-  '@typescript-eslint/utils@8.28.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)':
-    dependencies:
-      '@eslint-community/eslint-utils': 4.5.1(eslint@9.26.0(jiti@1.21.7))
-      '@typescript-eslint/scope-manager': 8.28.0
-      '@typescript-eslint/types': 8.28.0
-      '@typescript-eslint/typescript-estree': 8.28.0(typescript@5.8.3)
-      eslint: 9.26.0(jiti@1.21.7)
-      typescript: 5.8.3
-    transitivePeerDependencies:
-      - supports-color
-
-  '@typescript-eslint/utils@8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)':
+  '@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
     dependencies:
-      '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@1.21.7))
-      '@typescript-eslint/scope-manager': 8.32.0
-      '@typescript-eslint/types': 8.32.0
-      '@typescript-eslint/typescript-estree': 8.32.0(typescript@5.8.3)
-      eslint: 9.26.0(jiti@1.21.7)
+      '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@1.21.7))
+      '@typescript-eslint/scope-manager': 8.34.1
+      '@typescript-eslint/types': 8.34.1
+      '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3)
+      eslint: 9.29.0(jiti@1.21.7)
       typescript: 5.8.3
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/visitor-keys@8.27.0':
-    dependencies:
-      '@typescript-eslint/types': 8.27.0
-      eslint-visitor-keys: 4.2.0
-
-  '@typescript-eslint/visitor-keys@8.28.0':
-    dependencies:
-      '@typescript-eslint/types': 8.28.0
-      eslint-visitor-keys: 4.2.0
-
-  '@typescript-eslint/visitor-keys@8.32.0':
+  '@typescript-eslint/visitor-keys@8.34.1':
     dependencies:
-      '@typescript-eslint/types': 8.32.0
-      eslint-visitor-keys: 4.2.0
+      '@typescript-eslint/types': 8.34.1
+      eslint-visitor-keys: 4.2.1
 
-  '@uiw/codemirror-extensions-basic-setup@4.23.12(@codemirror/autocomplete@6.18.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)(@lezer/common@1.2.3))(@codemirror/commands@6.8.1)(@codemirror/language@6.11.0)(@codemirror/lint@6.8.2)(@codemirror/search@6.5.6)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-extensions-basic-setup@4.23.13(@codemirror/autocomplete@6.18.2(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)(@lezer/common@1.2.3))(@codemirror/commands@6.8.1)(@codemirror/language@6.11.1)(@codemirror/lint@6.8.2)(@codemirror/search@6.5.6)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@codemirror/autocomplete': 6.18.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)(@lezer/common@1.2.3)
+      '@codemirror/autocomplete': 6.18.2(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)(@lezer/common@1.2.3)
       '@codemirror/commands': 6.8.1
-      '@codemirror/language': 6.11.0
+      '@codemirror/language': 6.11.1
       '@codemirror/lint': 6.8.2
       '@codemirror/search': 6.5.6
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.36.4
+      '@codemirror/view': 6.37.2
 
-  '@uiw/codemirror-theme-abcdef@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-abcdef@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-abyss@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-abyss@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-androidstudio@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-androidstudio@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-andromeda@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-andromeda@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-atomone@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-atomone@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-aura@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-aura@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-basic@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-basic@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-bbedit@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-bbedit@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-bespin@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-bespin@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-console@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-console@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-copilot@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-copilot@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-darcula@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-darcula@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-dracula@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-dracula@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-duotone@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-duotone@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-eclipse@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-eclipse@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-github@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-github@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-gruvbox-dark@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-gruvbox-dark@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-kimbie@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-kimbie@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-material@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-material@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-monokai-dimmed@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-monokai-dimmed@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-monokai@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-monokai@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-noctis-lilac@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-noctis-lilac@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-nord@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-nord@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-okaidia@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-okaidia@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-quietlight@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-quietlight@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-red@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-red@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-solarized@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-solarized@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-sublime@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-sublime@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-tokyo-night-day@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-tokyo-night-day@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-tokyo-night-storm@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-tokyo-night-storm@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-tokyo-night@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-tokyo-night@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-tomorrow-night-blue@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-tomorrow-night-blue@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-vscode@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-vscode@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-white@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-white@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-xcode@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-theme-xcode@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-themes-all@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
-    dependencies:
-      '@uiw/codemirror-theme-abcdef': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-abyss': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-androidstudio': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-andromeda': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-atomone': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-aura': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-basic': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-bbedit': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-bespin': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-console': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-copilot': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-darcula': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-dracula': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-duotone': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-eclipse': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-github': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-gruvbox-dark': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-kimbie': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-material': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-monokai': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-monokai-dimmed': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-noctis-lilac': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-nord': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-okaidia': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-quietlight': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-red': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-solarized': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-sublime': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-tokyo-night': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-tokyo-night-day': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-tokyo-night-storm': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-tomorrow-night-blue': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-vscode': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-white': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-theme-xcode': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
-      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+  '@uiw/codemirror-themes-all@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+    dependencies:
+      '@uiw/codemirror-theme-abcdef': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-abyss': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-androidstudio': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-andromeda': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-atomone': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-aura': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-basic': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-bbedit': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-bespin': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-console': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-copilot': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-darcula': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-dracula': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-duotone': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-eclipse': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-github': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-gruvbox-dark': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-kimbie': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-material': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-monokai': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-monokai-dimmed': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-noctis-lilac': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-nord': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-okaidia': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-quietlight': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-red': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-solarized': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-sublime': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-tokyo-night': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-tokyo-night-day': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-tokyo-night-storm': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-tomorrow-night-blue': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-vscode': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-white': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-theme-xcode': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-themes@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+  '@uiw/codemirror-themes@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
     dependencies:
-      '@codemirror/language': 6.11.0
+      '@codemirror/language': 6.11.1
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.36.4
+      '@codemirror/view': 6.37.2
 
-  '@uiw/react-codemirror@4.23.12(@babel/runtime@7.26.10)(@codemirror/autocomplete@6.18.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)(@lezer/common@1.2.3))(@codemirror/language@6.11.0)(@codemirror/lint@6.8.2)(@codemirror/search@6.5.6)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.36.4)(codemirror@6.0.1(@lezer/common@1.2.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+  '@uiw/react-codemirror@4.23.13(@babel/runtime@7.27.6)(@codemirror/autocomplete@6.18.2(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)(@lezer/common@1.2.3))(@codemirror/language@6.11.1)(@codemirror/lint@6.8.2)(@codemirror/search@6.5.6)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.37.2)(codemirror@6.0.1(@lezer/common@1.2.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
     dependencies:
-      '@babel/runtime': 7.26.10
+      '@babel/runtime': 7.27.6
       '@codemirror/commands': 6.8.1
       '@codemirror/state': 6.5.2
       '@codemirror/theme-one-dark': 6.1.2
-      '@codemirror/view': 6.36.4
-      '@uiw/codemirror-extensions-basic-setup': 4.23.12(@codemirror/autocomplete@6.18.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)(@lezer/common@1.2.3))(@codemirror/commands@6.8.1)(@codemirror/language@6.11.0)(@codemirror/lint@6.8.2)(@codemirror/search@6.5.6)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@codemirror/view': 6.37.2
+      '@uiw/codemirror-extensions-basic-setup': 4.23.13(@codemirror/autocomplete@6.18.2(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)(@lezer/common@1.2.3))(@codemirror/commands@6.8.1)(@codemirror/language@6.11.1)(@codemirror/lint@6.8.2)(@codemirror/search@6.5.6)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
       codemirror: 6.0.1(@lezer/common@1.2.3)
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
+      react: 19.1.0
+      react-dom: 19.1.0(react@19.1.0)
     transitivePeerDependencies:
       - '@codemirror/autocomplete'
       - '@codemirror/language'
@@ -6039,32 +5708,32 @@ snapshots:
       '@types/d3-shape': 1.3.12
       d3-shape: 1.3.7
 
-  '@visx/group@3.12.0(react@18.3.1)':
+  '@visx/group@3.12.0(react@19.1.0)':
     dependencies:
-      '@types/react': 18.3.19
+      '@types/react': 19.1.8
       classnames: 2.5.1
       prop-types: 15.8.1
-      react: 18.3.1
+      react: 19.1.0
 
   '@visx/scale@3.12.0':
     dependencies:
       '@visx/vendor': 3.12.0
 
-  '@visx/shape@3.12.0(react@18.3.1)':
+  '@visx/shape@3.12.0(react@19.1.0)':
     dependencies:
       '@types/d3-path': 1.0.11
       '@types/d3-shape': 1.3.12
       '@types/lodash': 4.17.16
-      '@types/react': 18.3.19
+      '@types/react': 19.1.8
       '@visx/curve': 3.12.0
-      '@visx/group': 3.12.0(react@18.3.1)
+      '@visx/group': 3.12.0(react@19.1.0)
       '@visx/scale': 3.12.0
       classnames: 2.5.1
       d3-path: 1.0.9
       d3-shape: 1.3.7
       lodash: 4.17.21
       prop-types: 15.8.1
-      react: 18.3.1
+      react: 19.1.0
 
   '@visx/vendor@3.12.0':
     dependencies:
@@ -6088,603 +5757,610 @@ snapshots:
       d3-time-format: 4.1.0
       internmap: 2.0.3
 
-  '@vitejs/plugin-react-swc@3.9.0(vite@5.4.19(@types/node@22.15.14))':
+  '@vitejs/plugin-react-swc@3.10.2(@swc/helpers@0.5.17)(vite@6.3.5(@types/node@24.0.3)(jiti@1.21.7))':
     dependencies:
-      '@swc/core': 1.11.24
-      vite: 5.4.19(@types/node@22.15.14)
+      '@rolldown/pluginutils': 1.0.0-beta.11
+      '@swc/core': 1.12.4(@swc/helpers@0.5.17)
+      vite: 6.3.5(@types/node@24.0.3)(jiti@1.21.7)
     transitivePeerDependencies:
       - '@swc/helpers'
 
-  '@vitest/coverage-v8@2.1.9(vitest@2.1.9(@types/node@22.15.14)(happy-dom@17.4.6)(msw@2.7.6(@types/node@22.15.14)(typescript@5.8.3)))':
+  '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.3)(happy-dom@18.0.1)(jiti@1.21.7)(msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3)))':
     dependencies:
       '@ampproject/remapping': 2.3.0
-      '@bcoe/v8-coverage': 0.2.3
-      debug: 4.4.0
+      '@bcoe/v8-coverage': 1.0.2
+      ast-v8-to-istanbul: 0.3.3
+      debug: 4.4.1
       istanbul-lib-coverage: 3.2.2
       istanbul-lib-report: 3.0.1
       istanbul-lib-source-maps: 5.0.6
       istanbul-reports: 3.1.7
       magic-string: 0.30.17
       magicast: 0.3.5
-      std-env: 3.8.1
+      std-env: 3.9.0
       test-exclude: 7.0.1
-      tinyrainbow: 1.2.0
-      vitest: 2.1.9(@types/node@22.15.14)(happy-dom@17.4.6)(msw@2.7.6(@types/node@22.15.14)(typescript@5.8.3))
+      tinyrainbow: 2.0.0
+      vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.3)(happy-dom@18.0.1)(jiti@1.21.7)(msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3))
     transitivePeerDependencies:
       - supports-color
 
-  '@vitest/expect@2.1.9':
+  '@vitest/expect@3.2.4':
     dependencies:
-      '@vitest/spy': 2.1.9
-      '@vitest/utils': 2.1.9
+      '@types/chai': 5.2.2
+      '@vitest/spy': 3.2.4
+      '@vitest/utils': 3.2.4
       chai: 5.2.0
-      tinyrainbow: 1.2.0
+      tinyrainbow: 2.0.0
 
-  '@vitest/mocker@2.1.9(msw@2.7.6(@types/node@22.15.14)(typescript@5.8.3))(vite@5.4.19(@types/node@22.15.14))':
+  '@vitest/mocker@3.2.4(msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3))(vite@6.3.5(@types/node@24.0.3)(jiti@1.21.7))':
     dependencies:
-      '@vitest/spy': 2.1.9
+      '@vitest/spy': 3.2.4
       estree-walker: 3.0.3
       magic-string: 0.30.17
     optionalDependencies:
-      msw: 2.7.6(@types/node@22.15.14)(typescript@5.8.3)
-      vite: 5.4.19(@types/node@22.15.14)
+      msw: 2.10.2(@types/node@24.0.3)(typescript@5.8.3)
+      vite: 6.3.5(@types/node@24.0.3)(jiti@1.21.7)
 
-  '@vitest/pretty-format@2.1.9':
+  '@vitest/pretty-format@3.2.4':
     dependencies:
-      tinyrainbow: 1.2.0
+      tinyrainbow: 2.0.0
 
-  '@vitest/runner@2.1.9':
+  '@vitest/runner@3.2.4':
     dependencies:
-      '@vitest/utils': 2.1.9
-      pathe: 1.1.2
+      '@vitest/utils': 3.2.4
+      pathe: 2.0.3
+      strip-literal: 3.0.0
 
-  '@vitest/snapshot@2.1.9':
+  '@vitest/snapshot@3.2.4':
     dependencies:
-      '@vitest/pretty-format': 2.1.9
+      '@vitest/pretty-format': 3.2.4
       magic-string: 0.30.17
-      pathe: 1.1.2
+      pathe: 2.0.3
 
-  '@vitest/spy@2.1.9':
+  '@vitest/spy@3.2.4':
     dependencies:
-      tinyspy: 3.0.2
+      tinyspy: 4.0.3
 
-  '@vitest/utils@2.1.9':
+  '@vitest/utils@3.2.4':
     dependencies:
-      '@vitest/pretty-format': 2.1.9
-      loupe: 3.1.3
-      tinyrainbow: 1.2.0
+      '@vitest/pretty-format': 3.2.4
+      loupe: 3.1.4
+      tinyrainbow: 2.0.0
 
-  '@xyflow/react@12.4.4(@types/react@18.3.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+  '@xyflow/react@12.7.0(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
     dependencies:
-      '@xyflow/system': 0.0.52
+      '@xyflow/system': 0.0.62
       classcat: 5.0.5
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
-      zustand: 4.5.6(@types/react@18.3.19)(react@18.3.1)
+      react: 19.1.0
+      react-dom: 19.1.0(react@19.1.0)
+      zustand: 4.5.7(@types/react@19.1.8)(react@19.1.0)
     transitivePeerDependencies:
       - '@types/react'
       - immer
 
-  '@xyflow/system@0.0.52':
+  '@xyflow/system@0.0.62':
     dependencies:
       '@types/d3-drag': 3.0.7
+      '@types/d3-interpolate': 3.0.4
       '@types/d3-selection': 3.0.11
       '@types/d3-transition': 3.0.9
       '@types/d3-zoom': 3.0.8
       d3-drag: 3.0.0
+      d3-interpolate: 3.0.1
       d3-selection: 3.0.0
       d3-zoom: 3.0.0
 
-  '@zag-js/accordion@1.15.0':
+  '@zag-js/accordion@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/anatomy@1.15.0': {}
+  '@zag-js/anatomy@1.15.2': {}
 
-  '@zag-js/angle-slider@1.15.0':
+  '@zag-js/angle-slider@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/rect-utils': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/rect-utils': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/aria-hidden@1.15.0': {}
+  '@zag-js/aria-hidden@1.15.2': {}
 
-  '@zag-js/auto-resize@1.15.0':
+  '@zag-js/auto-resize@1.15.2':
     dependencies:
-      '@zag-js/dom-query': 1.15.0
+      '@zag-js/dom-query': 1.15.2
 
-  '@zag-js/avatar@1.15.0':
+  '@zag-js/avatar@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/carousel@1.15.0':
+  '@zag-js/carousel@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/scroll-snap': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/scroll-snap': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/checkbox@1.15.0':
+  '@zag-js/checkbox@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/focus-visible': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/focus-visible': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/clipboard@1.15.0':
+  '@zag-js/clipboard@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/collapsible@1.15.0':
+  '@zag-js/collapsible@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/collection@1.15.0':
+  '@zag-js/collection@1.15.2':
     dependencies:
-      '@zag-js/utils': 1.15.0
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/color-picker@1.15.0':
+  '@zag-js/color-picker@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/color-utils': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/popper': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/color-utils': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/popper': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/color-utils@1.15.0':
+  '@zag-js/color-utils@1.15.2':
     dependencies:
-      '@zag-js/utils': 1.15.0
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/combobox@1.15.0':
+  '@zag-js/combobox@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/aria-hidden': 1.15.0
-      '@zag-js/collection': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/popper': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/aria-hidden': 1.15.2
+      '@zag-js/collection': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/popper': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/core@1.15.0':
+  '@zag-js/core@1.15.2':
     dependencies:
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/date-picker@1.15.0(@internationalized/date@3.8.1)':
+  '@zag-js/date-picker@1.15.2(@internationalized/date@3.8.2)':
     dependencies:
-      '@internationalized/date': 3.8.1
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/date-utils': 1.15.0(@internationalized/date@3.8.1)
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/live-region': 1.15.0
-      '@zag-js/popper': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@internationalized/date': 3.8.2
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/date-utils': 1.15.2(@internationalized/date@3.8.2)
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/live-region': 1.15.2
+      '@zag-js/popper': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/date-utils@1.15.0(@internationalized/date@3.8.1)':
+  '@zag-js/date-utils@1.15.2(@internationalized/date@3.8.2)':
     dependencies:
-      '@internationalized/date': 3.8.1
+      '@internationalized/date': 3.8.2
 
-  '@zag-js/dialog@1.15.0':
+  '@zag-js/dialog@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/aria-hidden': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/focus-trap': 1.15.0
-      '@zag-js/remove-scroll': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/aria-hidden': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/focus-trap': 1.15.2
+      '@zag-js/remove-scroll': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/dismissable@1.15.0':
+  '@zag-js/dismissable@1.15.2':
     dependencies:
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/interact-outside': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/interact-outside': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/dom-query@1.15.0':
+  '@zag-js/dom-query@1.15.2':
     dependencies:
-      '@zag-js/types': 1.15.0
+      '@zag-js/types': 1.15.2
 
-  '@zag-js/editable@1.15.0':
+  '@zag-js/editable@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/interact-outside': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/interact-outside': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/file-upload@1.15.0':
+  '@zag-js/file-upload@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/file-utils': 1.15.0
-      '@zag-js/i18n-utils': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/file-utils': 1.15.2
+      '@zag-js/i18n-utils': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/file-utils@1.15.0':
+  '@zag-js/file-utils@1.15.2':
     dependencies:
-      '@zag-js/i18n-utils': 1.15.0
+      '@zag-js/i18n-utils': 1.15.2
 
-  '@zag-js/floating-panel@1.15.0':
+  '@zag-js/floating-panel@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/popper': 1.15.0
-      '@zag-js/rect-utils': 1.15.0
-      '@zag-js/store': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/popper': 1.15.2
+      '@zag-js/rect-utils': 1.15.2
+      '@zag-js/store': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/focus-trap@1.15.0':
+  '@zag-js/focus-trap@1.15.2':
     dependencies:
-      '@zag-js/dom-query': 1.15.0
+      '@zag-js/dom-query': 1.15.2
 
-  '@zag-js/focus-visible@1.15.0':
+  '@zag-js/focus-visible@1.15.2':
     dependencies:
-      '@zag-js/dom-query': 1.15.0
+      '@zag-js/dom-query': 1.15.2
 
-  '@zag-js/highlight-word@1.15.0': {}
+  '@zag-js/highlight-word@1.15.2': {}
 
-  '@zag-js/hover-card@1.15.0':
+  '@zag-js/hover-card@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/popper': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/popper': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/i18n-utils@1.15.0':
+  '@zag-js/i18n-utils@1.15.2':
     dependencies:
-      '@zag-js/dom-query': 1.15.0
+      '@zag-js/dom-query': 1.15.2
 
-  '@zag-js/interact-outside@1.15.0':
+  '@zag-js/interact-outside@1.15.2':
     dependencies:
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/listbox@1.15.0':
+  '@zag-js/listbox@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/collection': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/focus-visible': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/collection': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/focus-visible': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/live-region@1.15.0': {}
+  '@zag-js/live-region@1.15.2': {}
 
-  '@zag-js/menu@1.15.0':
+  '@zag-js/menu@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/popper': 1.15.0
-      '@zag-js/rect-utils': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/popper': 1.15.2
+      '@zag-js/rect-utils': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/number-input@1.15.0':
+  '@zag-js/number-input@1.15.2':
     dependencies:
-      '@internationalized/number': 3.6.2
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@internationalized/number': 3.6.3
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/pagination@1.15.0':
+  '@zag-js/pagination@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/password-input@1.15.0':
+  '@zag-js/password-input@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/pin-input@1.15.0':
+  '@zag-js/pin-input@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/popover@1.15.0':
+  '@zag-js/popover@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/aria-hidden': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/focus-trap': 1.15.0
-      '@zag-js/popper': 1.15.0
-      '@zag-js/remove-scroll': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/aria-hidden': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/focus-trap': 1.15.2
+      '@zag-js/popper': 1.15.2
+      '@zag-js/remove-scroll': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/popper@1.15.0':
+  '@zag-js/popper@1.15.2':
     dependencies:
       '@floating-ui/dom': 1.7.1
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/presence@1.15.0':
+  '@zag-js/presence@1.15.2':
     dependencies:
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
 
-  '@zag-js/progress@1.15.0':
+  '@zag-js/progress@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/qr-code@1.15.0':
+  '@zag-js/qr-code@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
       proxy-memoize: 3.0.1
       uqr: 0.1.2
 
-  '@zag-js/radio-group@1.15.0':
+  '@zag-js/radio-group@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/focus-visible': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/focus-visible': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/rating-group@1.15.0':
+  '@zag-js/rating-group@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/react@1.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+  '@zag-js/react@1.15.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
     dependencies:
-      '@zag-js/core': 1.15.0
-      '@zag-js/store': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
+      '@zag-js/core': 1.15.2
+      '@zag-js/store': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+      react: 19.1.0
+      react-dom: 19.1.0(react@19.1.0)
 
-  '@zag-js/rect-utils@1.15.0': {}
+  '@zag-js/rect-utils@1.15.2': {}
 
-  '@zag-js/remove-scroll@1.15.0':
+  '@zag-js/remove-scroll@1.15.2':
     dependencies:
-      '@zag-js/dom-query': 1.15.0
+      '@zag-js/dom-query': 1.15.2
 
-  '@zag-js/scroll-snap@1.15.0':
+  '@zag-js/scroll-snap@1.15.2':
     dependencies:
-      '@zag-js/dom-query': 1.15.0
+      '@zag-js/dom-query': 1.15.2
 
-  '@zag-js/select@1.15.0':
+  '@zag-js/select@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/collection': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/popper': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/collection': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/popper': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/signature-pad@1.15.0':
+  '@zag-js/signature-pad@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
       perfect-freehand: 1.2.2
 
-  '@zag-js/slider@1.15.0':
+  '@zag-js/slider@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/splitter@1.15.0':
+  '@zag-js/splitter@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/steps@1.15.0':
+  '@zag-js/steps@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/store@1.15.0':
+  '@zag-js/store@1.15.2':
     dependencies:
       proxy-compare: 3.0.1
 
-  '@zag-js/switch@1.15.0':
-    dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/focus-visible': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-
-  '@zag-js/tabs@1.15.0':
-    dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-
-  '@zag-js/tags-input@1.15.0':
-    dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/auto-resize': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/interact-outside': 1.15.0
-      '@zag-js/live-region': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-
-  '@zag-js/time-picker@1.15.0(@internationalized/date@3.8.1)':
-    dependencies:
-      '@internationalized/date': 3.8.1
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/popper': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-
-  '@zag-js/timer@1.15.0':
-    dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-
-  '@zag-js/toast@1.15.0':
-    dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-
-  '@zag-js/toggle-group@1.15.0':
-    dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-
-  '@zag-js/toggle@1.15.0':
-    dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-
-  '@zag-js/tooltip@1.15.0':
-    dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/focus-visible': 1.15.0
-      '@zag-js/popper': 1.15.0
-      '@zag-js/store': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-
-  '@zag-js/tour@1.15.0':
-    dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/focus-trap': 1.15.0
-      '@zag-js/interact-outside': 1.15.0
-      '@zag-js/popper': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-
-  '@zag-js/tree-view@1.15.0':
-    dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/collection': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-
-  '@zag-js/types@1.15.0':
+  '@zag-js/switch@1.15.2':
+    dependencies:
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/focus-visible': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+
+  '@zag-js/tabs@1.15.2':
+    dependencies:
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+
+  '@zag-js/tags-input@1.15.2':
+    dependencies:
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/auto-resize': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/interact-outside': 1.15.2
+      '@zag-js/live-region': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+
+  '@zag-js/time-picker@1.15.2(@internationalized/date@3.8.2)':
+    dependencies:
+      '@internationalized/date': 3.8.2
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/popper': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+
+  '@zag-js/timer@1.15.2':
+    dependencies:
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+
+  '@zag-js/toast@1.15.2':
+    dependencies:
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+
+  '@zag-js/toggle-group@1.15.2':
+    dependencies:
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+
+  '@zag-js/toggle@1.15.2':
+    dependencies:
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+
+  '@zag-js/tooltip@1.15.2':
+    dependencies:
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/focus-visible': 1.15.2
+      '@zag-js/popper': 1.15.2
+      '@zag-js/store': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+
+  '@zag-js/tour@1.15.2':
+    dependencies:
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/focus-trap': 1.15.2
+      '@zag-js/interact-outside': 1.15.2
+      '@zag-js/popper': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+
+  '@zag-js/tree-view@1.15.2':
+    dependencies:
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/collection': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+
+  '@zag-js/types@1.15.2':
     dependencies:
       csstype: 3.1.3
 
-  '@zag-js/utils@1.15.0': {}
-
-  accepts@2.0.0:
-    dependencies:
-      mime-types: 3.0.1
-      negotiator: 1.0.0
+  '@zag-js/utils@1.15.2': {}
 
   acorn-jsx@5.3.2(acorn@8.14.1):
     dependencies:
       acorn: 8.14.1
 
+  acorn-jsx@5.3.2(acorn@8.15.0):
+    dependencies:
+      acorn: 8.15.0
+
   acorn@8.14.1: {}
 
+  acorn@8.15.0: {}
+
   ajv@6.12.6:
     dependencies:
       fast-deep-equal: 3.1.3
@@ -6786,6 +6462,12 @@ snapshots:
 
   ast-types-flow@0.0.8: {}
 
+  ast-v8-to-istanbul@0.3.3:
+    dependencies:
+      '@jridgewell/trace-mapping': 0.3.25
+      estree-walker: 3.0.3
+      js-tokens: 9.0.1
+
   async-function@1.0.0: {}
 
   asynckit@0.4.0: {}
@@ -6801,10 +6483,10 @@ snapshots:
 
   axe-core@4.10.3: {}
 
-  axios@1.8.4:
+  axios@1.10.0:
     dependencies:
       follow-redirects: 1.15.9
-      form-data: 4.0.2
+      form-data: 4.0.3
       proxy-from-env: 1.1.0
     transitivePeerDependencies:
       - debug
@@ -6825,26 +6507,12 @@ snapshots:
 
   binary-extensions@2.3.0: {}
 
-  body-parser@2.2.0:
-    dependencies:
-      bytes: 3.1.2
-      content-type: 1.0.5
-      debug: 4.4.0
-      http-errors: 2.0.0
-      iconv-lite: 0.6.3
-      on-finished: 2.4.1
-      qs: 6.14.0
-      raw-body: 3.0.0
-      type-is: 2.0.1
-    transitivePeerDependencies:
-      - supports-color
-
-  brace-expansion@1.1.11:
+  brace-expansion@1.1.12:
     dependencies:
       balanced-match: 1.0.2
       concat-map: 0.0.1
 
-  brace-expansion@2.0.1:
+  brace-expansion@2.0.2:
     dependencies:
       balanced-match: 1.0.2
 
@@ -6852,16 +6520,14 @@ snapshots:
     dependencies:
       fill-range: 7.1.1
 
-  browserslist@4.24.4:
+  browserslist@4.25.0:
     dependencies:
-      caniuse-lite: 1.0.30001707
-      electron-to-chromium: 1.5.123
+      caniuse-lite: 1.0.30001724
+      electron-to-chromium: 1.5.171
       node-releases: 2.0.19
-      update-browserslist-db: 1.1.3(browserslist@4.24.4)
-
-  builtin-modules@3.3.0: {}
+      update-browserslist-db: 1.1.3(browserslist@4.25.0)
 
-  bytes@3.1.2: {}
+  builtin-modules@5.0.0: {}
 
   c12@1.11.1(magicast@0.3.5):
     dependencies:
@@ -6903,7 +6569,7 @@ snapshots:
 
   camelcase@8.0.0: {}
 
-  caniuse-lite@1.0.30001707: {}
+  caniuse-lite@1.0.30001724: {}
 
   ccount@2.0.1: {}
 
@@ -6912,15 +6578,15 @@ snapshots:
       assertion-error: 2.0.1
       check-error: 2.1.1
       deep-eql: 5.0.2
-      loupe: 3.1.3
+      loupe: 3.1.4
       pathval: 2.0.0
 
-  chakra-react-select@6.1.0(@chakra-ui/react@3.20.0(@emotion/react@11.14.0(@types/react@18.3.19)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.19)(next-themes@0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+  chakra-react-select@6.1.0(@chakra-ui/react@3.21.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
     dependencies:
-      '@chakra-ui/react': 3.20.0(@emotion/react@11.14.0(@types/react@18.3.19)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      next-themes: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      react: 18.3.1
-      react-select: 5.10.1(@types/react@18.3.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@chakra-ui/react': 3.21.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+      next-themes: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+      react: 19.1.0
+      react-select: 5.10.1(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
     transitivePeerDependencies:
       - '@types/react'
       - react-dom
@@ -6950,13 +6616,13 @@ snapshots:
 
   character-reference-invalid@2.0.1: {}
 
-  chart.js@4.4.9:
+  chart.js@4.5.0:
     dependencies:
       '@kurkle/color': 0.3.4
 
-  chartjs-plugin-annotation@3.1.0(chart.js@4.4.9):
+  chartjs-plugin-annotation@3.1.0(chart.js@4.5.0):
     dependencies:
-      chart.js: 4.4.9
+      chart.js: 4.5.0
 
   check-error@2.1.1: {}
 
@@ -7000,13 +6666,13 @@ snapshots:
 
   codemirror@6.0.1(@lezer/common@1.2.3):
     dependencies:
-      '@codemirror/autocomplete': 6.18.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)(@lezer/common@1.2.3)
+      '@codemirror/autocomplete': 6.18.2(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)(@lezer/common@1.2.3)
       '@codemirror/commands': 6.8.1
-      '@codemirror/language': 6.11.0
+      '@codemirror/language': 6.11.1
       '@codemirror/lint': 6.8.2
       '@codemirror/search': 6.5.6
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.36.4
+      '@codemirror/view': 6.37.2
     transitivePeerDependencies:
       - '@lezer/common'
 
@@ -7034,26 +6700,15 @@ snapshots:
 
   consola@3.4.2: {}
 
-  content-disposition@1.0.0:
-    dependencies:
-      safe-buffer: 5.2.1
-
-  content-type@1.0.5: {}
-
   convert-source-map@1.9.0: {}
 
-  cookie-signature@1.2.2: {}
-
   cookie@0.7.2: {}
 
-  core-js-compat@3.41.0:
-    dependencies:
-      browserslist: 4.24.4
+  cookie@1.0.2: {}
 
-  cors@2.8.5:
+  core-js-compat@3.43.0:
     dependencies:
-      object-assign: 4.1.1
-      vary: 1.1.2
+      browserslist: 4.25.0
 
   cosmiconfig@7.1.0:
     dependencies:
@@ -7183,11 +6838,11 @@ snapshots:
 
   debounce-promise@3.1.2: {}
 
-  debug@4.4.0:
+  debug@4.4.1:
     dependencies:
       ms: 2.1.3
 
-  decode-named-character-reference@1.1.0:
+  decode-named-character-reference@1.2.0:
     dependencies:
       character-entities: 2.0.2
 
@@ -7215,8 +6870,6 @@ snapshots:
 
   delayed-stream@1.0.0: {}
 
-  depd@2.0.0: {}
-
   dequal@2.0.3: {}
 
   destr@2.0.3: {}
@@ -7235,7 +6888,7 @@ snapshots:
 
   dom-helpers@5.2.1:
     dependencies:
-      '@babel/runtime': 7.26.10
+      '@babel/runtime': 7.27.6
       csstype: 3.1.3
 
   dotenv@16.4.7: {}
@@ -7248,9 +6901,7 @@ snapshots:
 
   eastasianwidth@0.2.0: {}
 
-  ee-first@1.1.1: {}
-
-  electron-to-chromium@1.5.123: {}
+  electron-to-chromium@1.5.171: {}
 
   elkjs@0.10.0: {}
 
@@ -7258,8 +6909,6 @@ snapshots:
 
   emoji-regex@9.2.2: {}
 
-  encodeurl@2.0.0: {}
-
   error-ex@1.3.2:
     dependencies:
       is-arrayish: 0.2.1
@@ -7341,7 +6990,7 @@ snapshots:
       iterator.prototype: 1.1.5
       safe-array-concat: 1.1.3
 
-  es-module-lexer@1.6.0: {}
+  es-module-lexer@1.7.0: {}
 
   es-object-atoms@1.1.1:
     dependencies:
@@ -7366,52 +7015,52 @@ snapshots:
 
   es6-promise@4.2.8: {}
 
-  esbuild@0.21.5:
+  esbuild@0.25.5:
     optionalDependencies:
-      '@esbuild/aix-ppc64': 0.21.5
-      '@esbuild/android-arm': 0.21.5
-      '@esbuild/android-arm64': 0.21.5
-      '@esbuild/android-x64': 0.21.5
-      '@esbuild/darwin-arm64': 0.21.5
-      '@esbuild/darwin-x64': 0.21.5
-      '@esbuild/freebsd-arm64': 0.21.5
-      '@esbuild/freebsd-x64': 0.21.5
-      '@esbuild/linux-arm': 0.21.5
-      '@esbuild/linux-arm64': 0.21.5
-      '@esbuild/linux-ia32': 0.21.5
-      '@esbuild/linux-loong64': 0.21.5
-      '@esbuild/linux-mips64el': 0.21.5
-      '@esbuild/linux-ppc64': 0.21.5
-      '@esbuild/linux-riscv64': 0.21.5
-      '@esbuild/linux-s390x': 0.21.5
-      '@esbuild/linux-x64': 0.21.5
-      '@esbuild/netbsd-x64': 0.21.5
-      '@esbuild/openbsd-x64': 0.21.5
-      '@esbuild/sunos-x64': 0.21.5
-      '@esbuild/win32-arm64': 0.21.5
-      '@esbuild/win32-ia32': 0.21.5
-      '@esbuild/win32-x64': 0.21.5
+      '@esbuild/aix-ppc64': 0.25.5
+      '@esbuild/android-arm': 0.25.5
+      '@esbuild/android-arm64': 0.25.5
+      '@esbuild/android-x64': 0.25.5
+      '@esbuild/darwin-arm64': 0.25.5
+      '@esbuild/darwin-x64': 0.25.5
+      '@esbuild/freebsd-arm64': 0.25.5
+      '@esbuild/freebsd-x64': 0.25.5
+      '@esbuild/linux-arm': 0.25.5
+      '@esbuild/linux-arm64': 0.25.5
+      '@esbuild/linux-ia32': 0.25.5
+      '@esbuild/linux-loong64': 0.25.5
+      '@esbuild/linux-mips64el': 0.25.5
+      '@esbuild/linux-ppc64': 0.25.5
+      '@esbuild/linux-riscv64': 0.25.5
+      '@esbuild/linux-s390x': 0.25.5
+      '@esbuild/linux-x64': 0.25.5
+      '@esbuild/netbsd-arm64': 0.25.5
+      '@esbuild/netbsd-x64': 0.25.5
+      '@esbuild/openbsd-arm64': 0.25.5
+      '@esbuild/openbsd-x64': 0.25.5
+      '@esbuild/sunos-x64': 0.25.5
+      '@esbuild/win32-arm64': 0.25.5
+      '@esbuild/win32-ia32': 0.25.5
+      '@esbuild/win32-x64': 0.25.5
 
   escalade@3.2.0: {}
 
-  escape-html@1.0.3: {}
-
   escape-string-regexp@1.0.5: {}
 
   escape-string-regexp@4.0.0: {}
 
   escape-string-regexp@5.0.0: {}
 
-  eslint-config-prettier@10.1.2(eslint@9.26.0(jiti@1.21.7)):
+  eslint-config-prettier@10.1.5(eslint@9.29.0(jiti@1.21.7)):
     dependencies:
-      eslint: 9.26.0(jiti@1.21.7)
+      eslint: 9.29.0(jiti@1.21.7)
 
   eslint-plugin-i18next@6.1.1:
     dependencies:
       lodash: 4.17.21
       requireindex: 1.1.0
 
-  eslint-plugin-jsx-a11y@6.10.2(eslint@9.26.0(jiti@1.21.7)):
+  eslint-plugin-jsx-a11y@6.10.2(eslint@9.29.0(jiti@1.21.7)):
     dependencies:
       aria-query: 5.3.2
       array-includes: 3.1.8
@@ -7421,7 +7070,7 @@ snapshots:
       axobject-query: 4.1.0
       damerau-levenshtein: 1.0.8
       emoji-regex: 9.2.2
-      eslint: 9.26.0(jiti@1.21.7)
+      eslint: 9.29.0(jiti@1.21.7)
       hasown: 2.0.2
       jsx-ast-utils: 3.3.5
       language-tags: 1.0.9
@@ -7430,34 +7079,34 @@ snapshots:
       safe-regex-test: 1.1.0
       string.prototype.includes: 2.0.1
 
-  eslint-plugin-perfectionist@4.12.3(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3):
+  eslint-plugin-perfectionist@4.15.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3):
     dependencies:
-      '@typescript-eslint/types': 8.32.0
-      '@typescript-eslint/utils': 8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
-      eslint: 9.26.0(jiti@1.21.7)
+      '@typescript-eslint/types': 8.34.1
+      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      eslint: 9.29.0(jiti@1.21.7)
       natural-orderby: 5.0.0
     transitivePeerDependencies:
       - supports-color
       - typescript
 
-  eslint-plugin-prettier@5.4.0(eslint-config-prettier@10.1.2(eslint@9.26.0(jiti@1.21.7)))(eslint@9.26.0(jiti@1.21.7))(prettier@3.5.3):
+  eslint-plugin-prettier@5.5.0(eslint-config-prettier@10.1.5(eslint@9.29.0(jiti@1.21.7)))(eslint@9.29.0(jiti@1.21.7))(prettier@3.5.3):
     dependencies:
-      eslint: 9.26.0(jiti@1.21.7)
+      eslint: 9.29.0(jiti@1.21.7)
       prettier: 3.5.3
       prettier-linter-helpers: 1.0.0
-      synckit: 0.11.4
+      synckit: 0.11.8
     optionalDependencies:
-      eslint-config-prettier: 10.1.2(eslint@9.26.0(jiti@1.21.7))
+      eslint-config-prettier: 10.1.5(eslint@9.29.0(jiti@1.21.7))
 
-  eslint-plugin-react-hooks@4.6.2(eslint@9.26.0(jiti@1.21.7)):
+  eslint-plugin-react-hooks@5.2.0(eslint@9.29.0(jiti@1.21.7)):
     dependencies:
-      eslint: 9.26.0(jiti@1.21.7)
+      eslint: 9.29.0(jiti@1.21.7)
 
-  eslint-plugin-react-refresh@0.4.20(eslint@9.26.0(jiti@1.21.7)):
+  eslint-plugin-react-refresh@0.4.20(eslint@9.29.0(jiti@1.21.7)):
     dependencies:
-      eslint: 9.26.0(jiti@1.21.7)
+      eslint: 9.29.0(jiti@1.21.7)
 
-  eslint-plugin-react@7.37.5(eslint@9.26.0(jiti@1.21.7)):
+  eslint-plugin-react@7.37.5(eslint@9.29.0(jiti@1.21.7)):
     dependencies:
       array-includes: 3.1.8
       array.prototype.findlast: 1.2.5
@@ -7465,7 +7114,7 @@ snapshots:
       array.prototype.tosorted: 1.1.4
       doctrine: 2.1.0
       es-iterator-helpers: 1.2.1
-      eslint: 9.26.0(jiti@1.21.7)
+      eslint: 9.29.0(jiti@1.21.7)
       estraverse: 5.3.0
       hasown: 2.0.2
       jsx-ast-utils: 3.3.5
@@ -7479,59 +7128,59 @@ snapshots:
       string.prototype.matchall: 4.0.12
       string.prototype.repeat: 1.0.0
 
-  eslint-plugin-unicorn@55.0.0(eslint@9.26.0(jiti@1.21.7)):
+  eslint-plugin-unicorn@59.0.1(eslint@9.29.0(jiti@1.21.7)):
     dependencies:
-      '@babel/helper-validator-identifier': 7.25.9
-      '@eslint-community/eslint-utils': 4.5.1(eslint@9.26.0(jiti@1.21.7))
+      '@babel/helper-validator-identifier': 7.27.1
+      '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@1.21.7))
+      '@eslint/plugin-kit': 0.2.8
       ci-info: 4.2.0
       clean-regexp: 1.0.0
-      core-js-compat: 3.41.0
-      eslint: 9.26.0(jiti@1.21.7)
+      core-js-compat: 3.43.0
+      eslint: 9.29.0(jiti@1.21.7)
       esquery: 1.6.0
-      globals: 15.15.0
-      indent-string: 4.0.0
-      is-builtin-module: 3.2.1
+      find-up-simple: 1.0.1
+      globals: 16.2.0
+      indent-string: 5.0.0
+      is-builtin-module: 5.0.0
       jsesc: 3.1.0
       pluralize: 8.0.0
-      read-pkg-up: 7.0.1
       regexp-tree: 0.1.27
-      regjsparser: 0.10.0
-      semver: 7.7.1
-      strip-indent: 3.0.0
+      regjsparser: 0.12.0
+      semver: 7.7.2
+      strip-indent: 4.0.0
 
-  eslint-scope@8.3.0:
+  eslint-scope@8.4.0:
     dependencies:
       esrecurse: 4.3.0
       estraverse: 5.3.0
 
   eslint-visitor-keys@3.4.3: {}
 
-  eslint-visitor-keys@4.2.0: {}
+  eslint-visitor-keys@4.2.1: {}
 
-  eslint@9.26.0(jiti@1.21.7):
+  eslint@9.29.0(jiti@1.21.7):
     dependencies:
-      '@eslint-community/eslint-utils': 4.5.1(eslint@9.26.0(jiti@1.21.7))
+      '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@1.21.7))
       '@eslint-community/regexpp': 4.12.1
-      '@eslint/config-array': 0.20.0
-      '@eslint/config-helpers': 0.2.2
-      '@eslint/core': 0.13.0
+      '@eslint/config-array': 0.20.1
+      '@eslint/config-helpers': 0.2.3
+      '@eslint/core': 0.14.0
       '@eslint/eslintrc': 3.3.1
-      '@eslint/js': 9.26.0
-      '@eslint/plugin-kit': 0.2.8
+      '@eslint/js': 9.29.0
+      '@eslint/plugin-kit': 0.3.2
       '@humanfs/node': 0.16.6
       '@humanwhocodes/module-importer': 1.0.1
-      '@humanwhocodes/retry': 0.4.2
-      '@modelcontextprotocol/sdk': 1.11.0
-      '@types/estree': 1.0.7
+      '@humanwhocodes/retry': 0.4.3
+      '@types/estree': 1.0.8
       '@types/json-schema': 7.0.15
       ajv: 6.12.6
       chalk: 4.1.2
       cross-spawn: 7.0.6
-      debug: 4.4.0
+      debug: 4.4.1
       escape-string-regexp: 4.0.0
-      eslint-scope: 8.3.0
-      eslint-visitor-keys: 4.2.0
-      espree: 10.3.0
+      eslint-scope: 8.4.0
+      eslint-visitor-keys: 4.2.1
+      espree: 10.4.0
       esquery: 1.6.0
       esutils: 2.0.3
       fast-deep-equal: 3.1.3
@@ -7546,17 +7195,16 @@ snapshots:
       minimatch: 3.1.2
       natural-compare: 1.4.0
       optionator: 0.9.4
-      zod: 3.24.4
     optionalDependencies:
       jiti: 1.21.7
     transitivePeerDependencies:
       - supports-color
 
-  espree@10.3.0:
+  espree@10.4.0:
     dependencies:
-      acorn: 8.14.1
-      acorn-jsx: 5.3.2(acorn@8.14.1)
-      eslint-visitor-keys: 4.2.0
+      acorn: 8.15.0
+      acorn-jsx: 5.3.2(acorn@8.15.0)
+      eslint-visitor-keys: 4.2.1
 
   espree@9.6.1:
     dependencies:
@@ -7580,55 +7228,11 @@ snapshots:
 
   estree-walker@3.0.3:
     dependencies:
-      '@types/estree': 1.0.7
+      '@types/estree': 1.0.8
 
   esutils@2.0.3: {}
 
-  etag@1.8.1: {}
-
-  eventsource-parser@3.0.1: {}
-
-  eventsource@3.0.6:
-    dependencies:
-      eventsource-parser: 3.0.1
-
-  expect-type@1.2.0: {}
-
-  express-rate-limit@7.5.0(express@5.1.0):
-    dependencies:
-      express: 5.1.0
-
-  express@5.1.0:
-    dependencies:
-      accepts: 2.0.0
-      body-parser: 2.2.0
-      content-disposition: 1.0.0
-      content-type: 1.0.5
-      cookie: 0.7.2
-      cookie-signature: 1.2.2
-      debug: 4.4.0
-      encodeurl: 2.0.0
-      escape-html: 1.0.3
-      etag: 1.8.1
-      finalhandler: 2.1.0
-      fresh: 2.0.0
-      http-errors: 2.0.0
-      merge-descriptors: 2.0.0
-      mime-types: 3.0.1
-      on-finished: 2.4.1
-      once: 1.4.0
-      parseurl: 1.3.3
-      proxy-addr: 2.0.7
-      qs: 6.14.0
-      range-parser: 1.2.1
-      router: 2.2.0
-      send: 1.2.0
-      serve-static: 2.2.0
-      statuses: 2.0.1
-      type-is: 2.0.1
-      vary: 1.1.2
-    transitivePeerDependencies:
-      - supports-color
+  expect-type@1.2.1: {}
 
   extend@3.0.2: {}
 
@@ -7678,6 +7282,10 @@ snapshots:
     transitivePeerDependencies:
       - encoding
 
+  fdir@6.4.6(picomatch@4.0.2):
+    optionalDependencies:
+      picomatch: 4.0.2
+
   file-entry-cache@8.0.0:
     dependencies:
       flat-cache: 4.0.1
@@ -7686,23 +7294,9 @@ snapshots:
     dependencies:
       to-regex-range: 5.0.1
 
-  finalhandler@2.1.0:
-    dependencies:
-      debug: 4.4.0
-      encodeurl: 2.0.0
-      escape-html: 1.0.3
-      on-finished: 2.4.1
-      parseurl: 1.3.3
-      statuses: 2.0.1
-    transitivePeerDependencies:
-      - supports-color
-
   find-root@1.1.0: {}
 
-  find-up@4.1.0:
-    dependencies:
-      locate-path: 5.0.0
-      path-exists: 4.0.0
+  find-up-simple@1.0.1: {}
 
   find-up@5.0.0:
     dependencies:
@@ -7716,11 +7310,11 @@ snapshots:
 
   flatted@3.3.3: {}
 
-  flux@4.0.4(react@18.3.1):
+  flux@4.0.4(react@19.1.0):
     dependencies:
       fbemitter: 3.0.0
       fbjs: 3.0.5
-      react: 18.3.1
+      react: 19.1.0
     transitivePeerDependencies:
       - encoding
 
@@ -7735,19 +7329,16 @@ snapshots:
       cross-spawn: 7.0.6
       signal-exit: 4.1.0
 
-  form-data@4.0.2:
+  form-data@4.0.3:
     dependencies:
       asynckit: 0.4.0
       combined-stream: 1.0.8
       es-set-tostringtag: 2.1.0
+      hasown: 2.0.2
       mime-types: 2.1.35
 
   format@0.2.2: {}
 
-  forwarded@0.2.0: {}
-
-  fresh@2.0.0: {}
-
   fs-minipass@2.1.0:
     dependencies:
       minipass: 3.3.6
@@ -7824,8 +7415,8 @@ snapshots:
   glob@11.0.0:
     dependencies:
       foreground-child: 3.3.1
-      jackspeak: 4.1.0
-      minimatch: 10.0.1
+      jackspeak: 4.1.1
+      minimatch: 10.0.3
       minipass: 7.1.2
       package-json-from-dist: 1.0.1
       path-scurry: 2.0.0
@@ -7834,7 +7425,7 @@ snapshots:
 
   globals@14.0.0: {}
 
-  globals@15.15.0: {}
+  globals@16.2.0: {}
 
   globalthis@1.0.4:
     dependencies:
@@ -7845,7 +7436,7 @@ snapshots:
 
   graphemer@1.4.0: {}
 
-  graphql@16.10.0: {}
+  graphql@16.11.0: {}
 
   handlebars@4.7.8:
     dependencies:
@@ -7856,9 +7447,10 @@ snapshots:
     optionalDependencies:
       uglify-js: 3.19.3
 
-  happy-dom@17.4.6:
+  happy-dom@18.0.1:
     dependencies:
-      webidl-conversions: 7.0.0
+      '@types/node': 20.19.1
+      '@types/whatwg-mimetype': 3.0.2
       whatwg-mimetype: 3.0.0
 
   has-bigints@1.1.0: {}
@@ -7887,7 +7479,7 @@ snapshots:
 
   hast-util-to-jsx-runtime@2.3.6:
     dependencies:
-      '@types/estree': 1.0.6
+      '@types/estree': 1.0.8
       '@types/hast': 3.0.4
       '@types/unist': 3.0.3
       comma-separated-tokens: 2.0.3
@@ -7897,9 +7489,9 @@ snapshots:
       mdast-util-mdx-expression: 2.0.1
       mdast-util-mdx-jsx: 3.2.0
       mdast-util-mdxjs-esm: 2.0.1
-      property-information: 7.0.0
+      property-information: 7.1.0
       space-separated-tokens: 2.0.2
-      style-to-js: 1.1.16
+      style-to-js: 1.1.17
       unist-util-position: 5.0.0
       vfile-message: 4.0.2
     transitivePeerDependencies:
@@ -7927,8 +7519,6 @@ snapshots:
     dependencies:
       react-is: 16.13.1
 
-  hosted-git-info@2.8.9: {}
-
   html-escaper@2.0.2: {}
 
   html-parse-stringify@3.0.1:
@@ -7939,17 +7529,9 @@ snapshots:
 
   html-url-attributes@3.0.1: {}
 
-  http-errors@2.0.0:
+  i18next-browser-languagedetector@8.2.0:
     dependencies:
-      depd: 2.0.0
-      inherits: 2.0.4
-      setprototypeof: 1.2.0
-      statuses: 2.0.1
-      toidentifier: 1.0.1
-
-  i18next-browser-languagedetector@8.1.0:
-    dependencies:
-      '@babel/runtime': 7.26.10
+      '@babel/runtime': 7.27.6
 
   i18next-http-backend@3.0.2:
     dependencies:
@@ -7957,18 +7539,16 @@ snapshots:
     transitivePeerDependencies:
       - encoding
 
-  i18next@25.1.2(typescript@5.8.3):
+  i18next@25.2.1(typescript@5.8.3):
     dependencies:
-      '@babel/runtime': 7.26.10
+      '@babel/runtime': 7.27.6
     optionalDependencies:
       typescript: 5.8.3
 
-  iconv-lite@0.6.3:
-    dependencies:
-      safer-buffer: 2.1.2
-
   ignore@5.3.2: {}
 
+  ignore@7.0.5: {}
+
   import-fresh@3.3.1:
     dependencies:
       parent-module: 1.0.1
@@ -7978,7 +7558,7 @@ snapshots:
 
   indent-string@4.0.0: {}
 
-  inherits@2.0.4: {}
+  indent-string@5.0.0: {}
 
   inline-style-parser@0.2.4: {}
 
@@ -7990,8 +7570,6 @@ snapshots:
 
   internmap@2.0.3: {}
 
-  ipaddr.js@1.9.1: {}
-
   is-alphabetical@1.0.4: {}
 
   is-alphabetical@2.0.1: {}
@@ -8035,9 +7613,9 @@ snapshots:
       call-bound: 1.0.4
       has-tostringtag: 1.0.2
 
-  is-builtin-module@3.2.1:
+  is-builtin-module@5.0.0:
     dependencies:
-      builtin-modules: 3.3.0
+      builtin-modules: 5.0.0
 
   is-callable@1.2.7: {}
 
@@ -8096,8 +7674,6 @@ snapshots:
 
   is-plain-obj@4.1.0: {}
 
-  is-promise@4.0.0: {}
-
   is-regex@1.2.1:
     dependencies:
       call-bound: 1.0.4
@@ -8159,7 +7735,7 @@ snapshots:
   istanbul-lib-source-maps@5.0.6:
     dependencies:
       '@jridgewell/trace-mapping': 0.3.25
-      debug: 4.4.0
+      debug: 4.4.1
       istanbul-lib-coverage: 3.2.2
     transitivePeerDependencies:
       - supports-color
@@ -8184,7 +7760,7 @@ snapshots:
     optionalDependencies:
       '@pkgjs/parseargs': 0.11.0
 
-  jackspeak@4.1.0:
+  jackspeak@4.1.1:
     dependencies:
       '@isaacs/cliui': 8.0.2
 
@@ -8194,6 +7770,8 @@ snapshots:
 
   js-tokens@4.0.0: {}
 
+  js-tokens@9.0.1: {}
+
   js-yaml@3.14.1:
     dependencies:
       argparse: 1.0.10
@@ -8203,9 +7781,7 @@ snapshots:
     dependencies:
       argparse: 2.0.1
 
-  jsesc@0.5.0: {}
-
-  jsesc@2.5.2: {}
+  jsesc@3.0.2: {}
 
   jsesc@3.1.0: {}
 
@@ -8250,10 +7826,6 @@ snapshots:
 
   lines-and-columns@1.2.4: {}
 
-  locate-path@5.0.0:
-    dependencies:
-      p-locate: 4.1.0
-
   locate-path@6.0.0:
     dependencies:
       p-locate: 5.0.0
@@ -8274,7 +7846,7 @@ snapshots:
     dependencies:
       js-tokens: 4.0.0
 
-  loupe@3.1.3: {}
+  loupe@3.1.4: {}
 
   lowlight@1.20.0:
     dependencies:
@@ -8293,13 +7865,13 @@ snapshots:
 
   magicast@0.3.5:
     dependencies:
-      '@babel/parser': 7.26.10
-      '@babel/types': 7.26.10
+      '@babel/parser': 7.27.5
+      '@babel/types': 7.27.6
       source-map-js: 1.2.1
 
   make-dir@4.0.0:
     dependencies:
-      semver: 7.7.1
+      semver: 7.7.2
 
   markdown-table@3.0.4: {}
 
@@ -8316,7 +7888,7 @@ snapshots:
     dependencies:
       '@types/mdast': 4.0.4
       '@types/unist': 3.0.3
-      decode-named-character-reference: 1.1.0
+      decode-named-character-reference: 1.2.0
       devlop: 1.1.0
       mdast-util-to-string: 4.0.0
       micromark: 4.0.2
@@ -8458,17 +8030,13 @@ snapshots:
     dependencies:
       '@types/mdast': 4.0.4
 
-  media-typer@1.1.0: {}
-
   memoize-one@6.0.0: {}
 
-  merge-descriptors@2.0.0: {}
-
   merge2@1.4.1: {}
 
   micromark-core-commonmark@2.0.3:
     dependencies:
-      decode-named-character-reference: 1.1.0
+      decode-named-character-reference: 1.2.0
       devlop: 1.1.0
       micromark-factory-destination: 2.0.1
       micromark-factory-label: 2.0.1
@@ -8601,7 +8169,7 @@ snapshots:
 
   micromark-util-decode-string@2.0.1:
     dependencies:
-      decode-named-character-reference: 1.1.0
+      decode-named-character-reference: 1.2.0
       micromark-util-character: 2.1.1
       micromark-util-decode-numeric-character-reference: 2.0.2
       micromark-util-symbol: 2.0.1
@@ -8638,8 +8206,8 @@ snapshots:
   micromark@4.0.2:
     dependencies:
       '@types/debug': 4.1.12
-      debug: 4.4.0
-      decode-named-character-reference: 1.1.0
+      debug: 4.4.1
+      decode-named-character-reference: 1.2.0
       devlop: 1.1.0
       micromark-core-commonmark: 2.0.3
       micromark-factory-space: 2.0.1
@@ -8664,29 +8232,23 @@ snapshots:
 
   mime-db@1.52.0: {}
 
-  mime-db@1.54.0: {}
-
   mime-types@2.1.35:
     dependencies:
       mime-db: 1.52.0
 
-  mime-types@3.0.1:
-    dependencies:
-      mime-db: 1.54.0
-
   min-indent@1.0.1: {}
 
-  minimatch@10.0.1:
+  minimatch@10.0.3:
     dependencies:
-      brace-expansion: 2.0.1
+      '@isaacs/brace-expansion': 5.0.0
 
   minimatch@3.1.2:
     dependencies:
-      brace-expansion: 1.1.11
+      brace-expansion: 1.1.12
 
   minimatch@9.0.5:
     dependencies:
-      brace-expansion: 2.0.1
+      brace-expansion: 2.0.2
 
   minimist@1.2.8: {}
 
@@ -8709,32 +8271,32 @@ snapshots:
 
   mlly@1.7.4:
     dependencies:
-      acorn: 8.14.1
+      acorn: 8.15.0
       pathe: 2.0.3
       pkg-types: 1.3.1
       ufo: 1.5.4
 
   ms@2.1.3: {}
 
-  msw@2.7.6(@types/node@22.15.14)(typescript@5.8.3):
+  msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3):
     dependencies:
       '@bundled-es-modules/cookie': 2.0.1
       '@bundled-es-modules/statuses': 1.0.1
       '@bundled-es-modules/tough-cookie': 0.1.6
-      '@inquirer/confirm': 5.1.8(@types/node@22.15.14)
-      '@mswjs/interceptors': 0.37.6
+      '@inquirer/confirm': 5.1.12(@types/node@24.0.3)
+      '@mswjs/interceptors': 0.39.2
       '@open-draft/deferred-promise': 2.2.0
       '@open-draft/until': 2.1.0
       '@types/cookie': 0.6.0
-      '@types/statuses': 2.0.5
-      graphql: 16.10.0
+      '@types/statuses': 2.0.6
+      graphql: 16.11.0
       headers-polyfill: 4.0.3
       is-node-process: 1.2.0
       outvariant: 1.4.3
       path-to-regexp: 6.3.0
       picocolors: 1.1.1
       strict-event-emitter: 0.5.1
-      type-fest: 4.37.0
+      type-fest: 4.41.0
       yargs: 17.7.2
     optionalDependencies:
       typescript: 5.8.3
@@ -8749,14 +8311,12 @@ snapshots:
 
   natural-orderby@5.0.0: {}
 
-  negotiator@1.0.0: {}
-
   neo-async@2.6.2: {}
 
-  next-themes@0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+  next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
     dependencies:
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
+      react: 19.1.0
+      react-dom: 19.1.0(react@19.1.0)
 
   node-fetch-native@1.6.6: {}
 
@@ -8766,13 +8326,6 @@ snapshots:
 
   node-releases@2.0.19: {}
 
-  normalize-package-data@2.5.0:
-    dependencies:
-      hosted-git-info: 2.8.9
-      resolve: 1.22.10
-      semver: 5.7.2
-      validate-npm-package-license: 3.0.4
-
   normalize-path@3.0.0: {}
 
   nypm@0.5.4:
@@ -8822,14 +8375,6 @@ snapshots:
 
   ohash@1.1.6: {}
 
-  on-finished@2.4.1:
-    dependencies:
-      ee-first: 1.1.1
-
-  once@1.4.0:
-    dependencies:
-      wrappy: 1.0.2
-
   openapi-merge-cli@1.3.2:
     dependencies:
       ajv: 6.12.6
@@ -8864,24 +8409,14 @@ snapshots:
       object-keys: 1.1.1
       safe-push-apply: 1.0.0
 
-  p-limit@2.3.0:
-    dependencies:
-      p-try: 2.2.0
-
   p-limit@3.1.0:
     dependencies:
       yocto-queue: 0.1.0
 
-  p-locate@4.1.0:
-    dependencies:
-      p-limit: 2.3.0
-
   p-locate@5.0.0:
     dependencies:
       p-limit: 3.1.0
 
-  p-try@2.2.0: {}
-
   package-json-from-dist@1.0.1: {}
 
   parent-module@1.0.1:
@@ -8902,20 +8437,18 @@ snapshots:
       '@types/unist': 2.0.11
       character-entities-legacy: 3.0.0
       character-reference-invalid: 2.0.1
-      decode-named-character-reference: 1.1.0
+      decode-named-character-reference: 1.2.0
       is-alphanumerical: 2.0.1
       is-decimal: 2.0.1
       is-hexadecimal: 2.0.1
 
   parse-json@5.2.0:
     dependencies:
-      '@babel/code-frame': 7.26.2
+      '@babel/code-frame': 7.27.1
       error-ex: 1.3.2
       json-parse-even-better-errors: 2.3.1
       lines-and-columns: 1.2.4
 
-  parseurl@1.3.3: {}
-
   path-browserify@1.0.1: {}
 
   path-exists@4.0.0: {}
@@ -8936,8 +8469,6 @@ snapshots:
 
   path-to-regexp@6.3.0: {}
 
-  path-to-regexp@8.2.0: {}
-
   path-type@4.0.0: {}
 
   pathe@1.1.2: {}
@@ -8956,8 +8487,6 @@ snapshots:
 
   picomatch@4.0.2: {}
 
-  pkce-challenge@5.0.0: {}
-
   pkg-types@1.3.1:
     dependencies:
       confbox: 0.1.8
@@ -8968,7 +8497,7 @@ snapshots:
 
   possible-typed-array-names@1.1.0: {}
 
-  postcss@8.5.3:
+  postcss@8.5.6:
     dependencies:
       nanoid: 3.3.11
       picocolors: 1.1.1
@@ -9006,12 +8535,7 @@ snapshots:
     dependencies:
       xtend: 4.0.2
 
-  property-information@7.0.0: {}
-
-  proxy-addr@2.0.7:
-    dependencies:
-      forwarded: 0.2.0
-      ipaddr.js: 1.9.1
+  property-information@7.1.0: {}
 
   proxy-compare@3.0.1: {}
 
@@ -9029,23 +8553,10 @@ snapshots:
 
   pure-color@1.3.0: {}
 
-  qs@6.14.0:
-    dependencies:
-      side-channel: 1.1.0
-
   querystringify@2.2.0: {}
 
   queue-microtask@1.2.3: {}
 
-  range-parser@1.2.1: {}
-
-  raw-body@3.0.0:
-    dependencies:
-      bytes: 3.1.2
-      http-errors: 2.0.0
-      iconv-lite: 0.6.3
-      unpipe: 1.0.0
-
   rc9@2.1.2:
     dependencies:
       defu: 6.1.4
@@ -9058,159 +8569,145 @@ snapshots:
       lodash.flow: 3.5.0
       pure-color: 1.3.0
 
-  react-chartjs-2@5.3.0(chart.js@4.4.9)(react@18.3.1):
+  react-chartjs-2@5.3.0(chart.js@4.5.0)(react@19.1.0):
     dependencies:
-      chart.js: 4.4.9
-      react: 18.3.1
+      chart.js: 4.5.0
+      react: 19.1.0
 
-  react-dom@18.3.1(react@18.3.1):
+  react-dom@19.1.0(react@19.1.0):
     dependencies:
-      loose-envify: 1.4.0
-      react: 18.3.1
-      scheduler: 0.23.2
+      react: 19.1.0
+      scheduler: 0.26.0
 
-  react-hook-form@7.56.2(react@18.3.1):
+  react-hook-form@7.58.1(react@19.1.0):
     dependencies:
-      react: 18.3.1
+      react: 19.1.0
 
-  react-hotkeys-hook@4.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+  react-hotkeys-hook@5.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
     dependencies:
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
+      react: 19.1.0
+      react-dom: 19.1.0(react@19.1.0)
 
-  react-i18next@15.5.1(i18next@25.1.2(typescript@5.8.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3):
+  react-i18next@15.5.3(i18next@25.2.1(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3):
     dependencies:
-      '@babel/runtime': 7.26.10
+      '@babel/runtime': 7.27.6
       html-parse-stringify: 3.0.1
-      i18next: 25.1.2(typescript@5.8.3)
-      react: 18.3.1
+      i18next: 25.2.1(typescript@5.8.3)
+      react: 19.1.0
     optionalDependencies:
-      react-dom: 18.3.1(react@18.3.1)
+      react-dom: 19.1.0(react@19.1.0)
       typescript: 5.8.3
 
-  react-icons@5.5.0(react@18.3.1):
+  react-icons@5.5.0(react@19.1.0):
     dependencies:
-      react: 18.3.1
+      react: 19.1.0
 
-  react-innertext@1.1.5(@types/react@18.3.19)(react@18.3.1):
+  react-innertext@1.1.5(@types/react@19.1.8)(react@19.1.0):
     dependencies:
-      '@types/react': 18.3.19
-      react: 18.3.1
+      '@types/react': 19.1.8
+      react: 19.1.0
 
   react-is@16.13.1: {}
 
   react-is@17.0.2: {}
 
-  react-json-view@1.21.3(@types/react@18.3.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+  react-json-view@1.21.3(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
     dependencies:
-      flux: 4.0.4(react@18.3.1)
-      react: 18.3.1
+      flux: 4.0.4(react@19.1.0)
+      react: 19.1.0
       react-base16-styling: 0.6.0
-      react-dom: 18.3.1(react@18.3.1)
+      react-dom: 19.1.0(react@19.1.0)
       react-lifecycles-compat: 3.0.4
-      react-textarea-autosize: 8.5.8(@types/react@18.3.19)(react@18.3.1)
+      react-textarea-autosize: 8.5.8(@types/react@19.1.8)(react@19.1.0)
     transitivePeerDependencies:
       - '@types/react'
       - encoding
 
   react-lifecycles-compat@3.0.4: {}
 
-  react-markdown@9.1.0(@types/react@18.3.19)(react@18.3.1):
+  react-markdown@10.1.0(@types/react@19.1.8)(react@19.1.0):
     dependencies:
       '@types/hast': 3.0.4
       '@types/mdast': 4.0.4
-      '@types/react': 18.3.19
+      '@types/react': 19.1.8
       devlop: 1.1.0
       hast-util-to-jsx-runtime: 2.3.6
       html-url-attributes: 3.0.1
       mdast-util-to-hast: 13.2.0
-      react: 18.3.1
+      react: 19.1.0
       remark-parse: 11.0.0
-      remark-rehype: 11.1.1
+      remark-rehype: 11.1.2
       unified: 11.0.5
       unist-util-visit: 5.0.0
       vfile: 6.0.3
     transitivePeerDependencies:
       - supports-color
 
-  react-resizable-panels@2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+  react-resizable-panels@3.0.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
     dependencies:
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
+      react: 19.1.0
+      react-dom: 19.1.0(react@19.1.0)
 
-  react-router-dom@6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+  react-router-dom@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
     dependencies:
-      '@remix-run/router': 1.23.0
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
-      react-router: 6.30.0(react@18.3.1)
+      react: 19.1.0
+      react-dom: 19.1.0(react@19.1.0)
+      react-router: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
 
-  react-router@6.30.0(react@18.3.1):
+  react-router@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
     dependencies:
-      '@remix-run/router': 1.23.0
-      react: 18.3.1
+      cookie: 1.0.2
+      react: 19.1.0
+      set-cookie-parser: 2.7.1
+    optionalDependencies:
+      react-dom: 19.1.0(react@19.1.0)
 
-  react-select@5.10.1(@types/react@18.3.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+  react-select@5.10.1(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
     dependencies:
-      '@babel/runtime': 7.26.10
+      '@babel/runtime': 7.27.6
       '@emotion/cache': 11.14.0
-      '@emotion/react': 11.14.0(@types/react@18.3.19)(react@18.3.1)
+      '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0)
       '@floating-ui/dom': 1.6.13
-      '@types/react-transition-group': 4.4.12(@types/react@18.3.19)
+      '@types/react-transition-group': 4.4.12(@types/react@19.1.8)
       memoize-one: 6.0.0
       prop-types: 15.8.1
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
-      react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      use-isomorphic-layout-effect: 1.2.0(@types/react@18.3.19)(react@18.3.1)
+      react: 19.1.0
+      react-dom: 19.1.0(react@19.1.0)
+      react-transition-group: 4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+      use-isomorphic-layout-effect: 1.2.0(@types/react@19.1.8)(react@19.1.0)
     transitivePeerDependencies:
       - '@types/react'
       - supports-color
 
-  react-syntax-highlighter@15.6.1(react@18.3.1):
+  react-syntax-highlighter@15.6.1(react@19.1.0):
     dependencies:
       '@babel/runtime': 7.26.10
       highlight.js: 10.7.3
       highlightjs-vue: 1.0.0
       lowlight: 1.20.0
       prismjs: 1.30.0
-      react: 18.3.1
+      react: 19.1.0
       refractor: 3.6.0
 
-  react-textarea-autosize@8.5.8(@types/react@18.3.19)(react@18.3.1):
+  react-textarea-autosize@8.5.8(@types/react@19.1.8)(react@19.1.0):
     dependencies:
-      '@babel/runtime': 7.26.10
-      react: 18.3.1
-      use-composed-ref: 1.4.0(@types/react@18.3.19)(react@18.3.1)
-      use-latest: 1.3.0(@types/react@18.3.19)(react@18.3.1)
+      '@babel/runtime': 7.27.6
+      react: 19.1.0
+      use-composed-ref: 1.4.0(@types/react@19.1.8)(react@19.1.0)
+      use-latest: 1.3.0(@types/react@19.1.8)(react@19.1.0)
     transitivePeerDependencies:
       - '@types/react'
 
-  react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+  react-transition-group@4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
     dependencies:
-      '@babel/runtime': 7.26.10
+      '@babel/runtime': 7.27.6
       dom-helpers: 5.2.1
       loose-envify: 1.4.0
       prop-types: 15.8.1
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
-
-  react@18.3.1:
-    dependencies:
-      loose-envify: 1.4.0
-
-  read-pkg-up@7.0.1:
-    dependencies:
-      find-up: 4.1.0
-      read-pkg: 5.2.0
-      type-fest: 0.8.1
+      react: 19.1.0
+      react-dom: 19.1.0(react@19.1.0)
 
-  read-pkg@5.2.0:
-    dependencies:
-      '@types/normalize-package-data': 2.4.4
-      normalize-package-data: 2.5.0
-      parse-json: 5.2.0
-      type-fest: 0.6.0
+  react@19.1.0: {}
 
   readdirp@3.6.0:
     dependencies:
@@ -9251,9 +8748,9 @@ snapshots:
       gopd: 1.2.0
       set-function-name: 2.0.2
 
-  regjsparser@0.10.0:
+  regjsparser@0.12.0:
     dependencies:
-      jsesc: 0.5.0
+      jsesc: 3.0.2
 
   remark-gfm@4.0.1:
     dependencies:
@@ -9275,7 +8772,7 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  remark-rehype@11.1.1:
+  remark-rehype@11.1.2:
     dependencies:
       '@types/hast': 3.0.4
       '@types/mdast': 4.0.4
@@ -9313,42 +8810,32 @@ snapshots:
 
   robust-predicates@3.0.2: {}
 
-  rollup@4.40.1:
+  rollup@4.44.0:
     dependencies:
-      '@types/estree': 1.0.7
+      '@types/estree': 1.0.8
     optionalDependencies:
-      '@rollup/rollup-android-arm-eabi': 4.40.1
-      '@rollup/rollup-android-arm64': 4.40.1
-      '@rollup/rollup-darwin-arm64': 4.40.1
-      '@rollup/rollup-darwin-x64': 4.40.1
-      '@rollup/rollup-freebsd-arm64': 4.40.1
-      '@rollup/rollup-freebsd-x64': 4.40.1
-      '@rollup/rollup-linux-arm-gnueabihf': 4.40.1
-      '@rollup/rollup-linux-arm-musleabihf': 4.40.1
-      '@rollup/rollup-linux-arm64-gnu': 4.40.1
-      '@rollup/rollup-linux-arm64-musl': 4.40.1
-      '@rollup/rollup-linux-loongarch64-gnu': 4.40.1
-      '@rollup/rollup-linux-powerpc64le-gnu': 4.40.1
-      '@rollup/rollup-linux-riscv64-gnu': 4.40.1
-      '@rollup/rollup-linux-riscv64-musl': 4.40.1
-      '@rollup/rollup-linux-s390x-gnu': 4.40.1
-      '@rollup/rollup-linux-x64-gnu': 4.40.1
-      '@rollup/rollup-linux-x64-musl': 4.40.1
-      '@rollup/rollup-win32-arm64-msvc': 4.40.1
-      '@rollup/rollup-win32-ia32-msvc': 4.40.1
-      '@rollup/rollup-win32-x64-msvc': 4.40.1
+      '@rollup/rollup-android-arm-eabi': 4.44.0
+      '@rollup/rollup-android-arm64': 4.44.0
+      '@rollup/rollup-darwin-arm64': 4.44.0
+      '@rollup/rollup-darwin-x64': 4.44.0
+      '@rollup/rollup-freebsd-arm64': 4.44.0
+      '@rollup/rollup-freebsd-x64': 4.44.0
+      '@rollup/rollup-linux-arm-gnueabihf': 4.44.0
+      '@rollup/rollup-linux-arm-musleabihf': 4.44.0
+      '@rollup/rollup-linux-arm64-gnu': 4.44.0
+      '@rollup/rollup-linux-arm64-musl': 4.44.0
+      '@rollup/rollup-linux-loongarch64-gnu': 4.44.0
+      '@rollup/rollup-linux-powerpc64le-gnu': 4.44.0
+      '@rollup/rollup-linux-riscv64-gnu': 4.44.0
+      '@rollup/rollup-linux-riscv64-musl': 4.44.0
+      '@rollup/rollup-linux-s390x-gnu': 4.44.0
+      '@rollup/rollup-linux-x64-gnu': 4.44.0
+      '@rollup/rollup-linux-x64-musl': 4.44.0
+      '@rollup/rollup-win32-arm64-msvc': 4.44.0
+      '@rollup/rollup-win32-ia32-msvc': 4.44.0
+      '@rollup/rollup-win32-x64-msvc': 4.44.0
       fsevents: 2.3.3
 
-  router@2.2.0:
-    dependencies:
-      debug: 4.4.0
-      depd: 2.0.0
-      is-promise: 4.0.0
-      parseurl: 1.3.3
-      path-to-regexp: 8.2.0
-    transitivePeerDependencies:
-      - supports-color
-
   run-parallel@1.2.0:
     dependencies:
       queue-microtask: 1.2.3
@@ -9361,8 +8848,6 @@ snapshots:
       has-symbols: 1.1.0
       isarray: 2.0.5
 
-  safe-buffer@5.2.1: {}
-
   safe-push-apply@1.0.0:
     dependencies:
       es-errors: 1.3.0
@@ -9374,42 +8859,15 @@ snapshots:
       es-errors: 1.3.0
       is-regex: 1.2.1
 
-  safer-buffer@2.1.2: {}
-
-  scheduler@0.23.2:
-    dependencies:
-      loose-envify: 1.4.0
-
-  semver@5.7.2: {}
+  scheduler@0.26.0: {}
 
   semver@6.3.1: {}
 
   semver@7.7.1: {}
 
-  send@1.2.0:
-    dependencies:
-      debug: 4.4.0
-      encodeurl: 2.0.0
-      escape-html: 1.0.3
-      etag: 1.8.1
-      fresh: 2.0.0
-      http-errors: 2.0.0
-      mime-types: 3.0.1
-      ms: 2.1.3
-      on-finished: 2.4.1
-      range-parser: 1.2.1
-      statuses: 2.0.1
-    transitivePeerDependencies:
-      - supports-color
+  semver@7.7.2: {}
 
-  serve-static@2.2.0:
-    dependencies:
-      encodeurl: 2.0.0
-      escape-html: 1.0.3
-      parseurl: 1.3.3
-      send: 1.2.0
-    transitivePeerDependencies:
-      - supports-color
+  set-cookie-parser@2.7.1: {}
 
   set-function-length@1.2.2:
     dependencies:
@@ -9435,8 +8893,6 @@ snapshots:
 
   setimmediate@1.0.5: {}
 
-  setprototypeof@1.2.0: {}
-
   shebang-command@2.0.0:
     dependencies:
       shebang-regex: 3.0.0
@@ -9485,27 +8941,13 @@ snapshots:
 
   space-separated-tokens@2.0.2: {}
 
-  spdx-correct@3.2.0:
-    dependencies:
-      spdx-expression-parse: 3.0.1
-      spdx-license-ids: 3.0.21
-
-  spdx-exceptions@2.5.0: {}
-
-  spdx-expression-parse@3.0.1:
-    dependencies:
-      spdx-exceptions: 2.5.0
-      spdx-license-ids: 3.0.21
-
-  spdx-license-ids@3.0.21: {}
-
   sprintf-js@1.0.3: {}
 
   stackback@0.0.2: {}
 
-  statuses@2.0.1: {}
+  statuses@2.0.2: {}
 
-  std-env@3.8.1: {}
+  std-env@3.9.0: {}
 
   strict-event-emitter@0.5.1: {}
 
@@ -9588,15 +9030,23 @@ snapshots:
     dependencies:
       min-indent: 1.0.1
 
+  strip-indent@4.0.0:
+    dependencies:
+      min-indent: 1.0.1
+
   strip-json-comments@3.1.1: {}
 
+  strip-literal@3.0.0:
+    dependencies:
+      js-tokens: 9.0.1
+
   style-mod@4.1.2: {}
 
-  style-to-js@1.1.16:
+  style-to-js@1.1.17:
     dependencies:
-      style-to-object: 1.0.8
+      style-to-object: 1.0.9
 
-  style-to-object@1.0.8:
+  style-to-object@1.0.9:
     dependencies:
       inline-style-parser: 0.2.4
 
@@ -9608,10 +9058,9 @@ snapshots:
 
   supports-preserve-symlinks-flag@1.0.0: {}
 
-  synckit@0.11.4:
+  synckit@0.11.8:
     dependencies:
-      '@pkgr/core': 0.2.4
-      tslib: 2.8.1
+      '@pkgr/core': 0.2.7
 
   tar@6.2.1:
     dependencies:
@@ -9632,20 +9081,21 @@ snapshots:
 
   tinyexec@0.3.2: {}
 
-  tinypool@1.0.2: {}
+  tinyglobby@0.2.14:
+    dependencies:
+      fdir: 6.4.6(picomatch@4.0.2)
+      picomatch: 4.0.2
 
-  tinyrainbow@1.2.0: {}
+  tinypool@1.1.1: {}
 
-  tinyspy@3.0.2: {}
+  tinyrainbow@2.0.0: {}
 
-  to-fast-properties@2.0.0: {}
+  tinyspy@4.0.3: {}
 
   to-regex-range@5.0.1:
     dependencies:
       is-number: 7.0.0
 
-  toidentifier@1.0.1: {}
-
   tough-cookie@4.1.4:
     dependencies:
       psl: 1.15.0
@@ -9678,17 +9128,7 @@ snapshots:
 
   type-fest@0.21.3: {}
 
-  type-fest@0.6.0: {}
-
-  type-fest@0.8.1: {}
-
-  type-fest@4.37.0: {}
-
-  type-is@2.0.1:
-    dependencies:
-      content-type: 1.0.5
-      media-typer: 1.1.0
-      mime-types: 3.0.1
+  type-fest@4.41.0: {}
 
   typed-array-buffer@1.0.3:
     dependencies:
@@ -9723,12 +9163,12 @@ snapshots:
       possible-typed-array-names: 1.1.0
       reflect.getprototypeof: 1.0.10
 
-  typescript-eslint@8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3):
+  typescript-eslint@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3):
     dependencies:
-      '@typescript-eslint/eslint-plugin': 8.32.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
-      '@typescript-eslint/parser': 8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
-      '@typescript-eslint/utils': 8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
-      eslint: 9.26.0(jiti@1.21.7)
+      '@typescript-eslint/eslint-plugin': 8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      eslint: 9.29.0(jiti@1.21.7)
       typescript: 5.8.3
     transitivePeerDependencies:
       - supports-color
@@ -9751,6 +9191,8 @@ snapshots:
 
   undici-types@6.21.0: {}
 
+  undici-types@7.8.0: {}
+
   unified@11.0.5:
     dependencies:
       '@types/unist': 3.0.3
@@ -9786,11 +9228,9 @@ snapshots:
 
   universalify@0.2.0: {}
 
-  unpipe@1.0.0: {}
-
-  update-browserslist-db@1.1.3(browserslist@4.24.4):
+  update-browserslist-db@1.1.3(browserslist@4.25.0):
     dependencies:
-      browserslist: 4.24.4
+      browserslist: 4.25.0
       escalade: 3.2.0
       picocolors: 1.1.1
 
@@ -9807,44 +9247,37 @@ snapshots:
       querystringify: 2.2.0
       requires-port: 1.0.0
 
-  use-composed-ref@1.4.0(@types/react@18.3.19)(react@18.3.1):
+  use-composed-ref@1.4.0(@types/react@19.1.8)(react@19.1.0):
     dependencies:
-      react: 18.3.1
+      react: 19.1.0
     optionalDependencies:
-      '@types/react': 18.3.19
+      '@types/react': 19.1.8
 
-  use-debounce@10.0.4(react@18.3.1):
+  use-debounce@10.0.5(react@19.1.0):
     dependencies:
-      react: 18.3.1
+      react: 19.1.0
 
-  use-isomorphic-layout-effect@1.2.0(@types/react@18.3.19)(react@18.3.1):
+  use-isomorphic-layout-effect@1.2.0(@types/react@19.1.8)(react@19.1.0):
     dependencies:
-      react: 18.3.1
+      react: 19.1.0
     optionalDependencies:
-      '@types/react': 18.3.19
+      '@types/react': 19.1.8
 
-  use-latest@1.3.0(@types/react@18.3.19)(react@18.3.1):
+  use-latest@1.3.0(@types/react@19.1.8)(react@19.1.0):
     dependencies:
-      react: 18.3.1
-      use-isomorphic-layout-effect: 1.2.0(@types/react@18.3.19)(react@18.3.1)
+      react: 19.1.0
+      use-isomorphic-layout-effect: 1.2.0(@types/react@19.1.8)(react@19.1.0)
     optionalDependencies:
-      '@types/react': 18.3.19
+      '@types/react': 19.1.8
 
-  use-sync-external-store@1.4.0(react@18.3.1):
+  use-sync-external-store@1.5.0(react@19.1.0):
     dependencies:
-      react: 18.3.1
+      react: 19.1.0
 
-  usehooks-ts@3.1.1(react@18.3.1):
+  usehooks-ts@3.1.1(react@19.1.0):
     dependencies:
       lodash.debounce: 4.0.8
-      react: 18.3.1
-
-  validate-npm-package-license@3.0.4:
-    dependencies:
-      spdx-correct: 3.2.0
-      spdx-expression-parse: 3.0.1
-
-  vary@1.1.2: {}
+      react: 19.1.0
 
   vfile-message@4.0.2:
     dependencies:
@@ -9856,15 +9289,16 @@ snapshots:
       '@types/unist': 3.0.3
       vfile-message: 4.0.2
 
-  vite-node@2.1.9(@types/node@22.15.14):
+  vite-node@3.2.4(@types/node@24.0.3)(jiti@1.21.7):
     dependencies:
       cac: 6.7.14
-      debug: 4.4.0
-      es-module-lexer: 1.6.0
-      pathe: 1.1.2
-      vite: 5.4.19(@types/node@22.15.14)
+      debug: 4.4.1
+      es-module-lexer: 1.7.0
+      pathe: 2.0.3
+      vite: 6.3.5(@types/node@24.0.3)(jiti@1.21.7)
     transitivePeerDependencies:
       - '@types/node'
+      - jiti
       - less
       - lightningcss
       - sass
@@ -9873,46 +9307,57 @@ snapshots:
       - sugarss
       - supports-color
       - terser
+      - tsx
+      - yaml
 
-  vite-plugin-css-injected-by-js@3.5.2(vite@5.4.19(@types/node@22.15.14)):
+  vite-plugin-css-injected-by-js@3.5.2(vite@6.3.5(@types/node@24.0.3)(jiti@1.21.7)):
     dependencies:
-      vite: 5.4.19(@types/node@22.15.14)
+      vite: 6.3.5(@types/node@24.0.3)(jiti@1.21.7)
 
-  vite@5.4.19(@types/node@22.15.14):
+  vite@6.3.5(@types/node@24.0.3)(jiti@1.21.7):
     dependencies:
-      esbuild: 0.21.5
-      postcss: 8.5.3
-      rollup: 4.40.1
+      esbuild: 0.25.5
+      fdir: 6.4.6(picomatch@4.0.2)
+      picomatch: 4.0.2
+      postcss: 8.5.6
+      rollup: 4.44.0
+      tinyglobby: 0.2.14
     optionalDependencies:
-      '@types/node': 22.15.14
+      '@types/node': 24.0.3
       fsevents: 2.3.3
+      jiti: 1.21.7
 
-  vitest@2.1.9(@types/node@22.15.14)(happy-dom@17.4.6)(msw@2.7.6(@types/node@22.15.14)(typescript@5.8.3)):
+  vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.3)(happy-dom@18.0.1)(jiti@1.21.7)(msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3)):
     dependencies:
-      '@vitest/expect': 2.1.9
-      '@vitest/mocker': 2.1.9(msw@2.7.6(@types/node@22.15.14)(typescript@5.8.3))(vite@5.4.19(@types/node@22.15.14))
-      '@vitest/pretty-format': 2.1.9
-      '@vitest/runner': 2.1.9
-      '@vitest/snapshot': 2.1.9
-      '@vitest/spy': 2.1.9
-      '@vitest/utils': 2.1.9
+      '@types/chai': 5.2.2
+      '@vitest/expect': 3.2.4
+      '@vitest/mocker': 3.2.4(msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3))(vite@6.3.5(@types/node@24.0.3)(jiti@1.21.7))
+      '@vitest/pretty-format': 3.2.4
+      '@vitest/runner': 3.2.4
+      '@vitest/snapshot': 3.2.4
+      '@vitest/spy': 3.2.4
+      '@vitest/utils': 3.2.4
       chai: 5.2.0
-      debug: 4.4.0
-      expect-type: 1.2.0
+      debug: 4.4.1
+      expect-type: 1.2.1
       magic-string: 0.30.17
-      pathe: 1.1.2
-      std-env: 3.8.1
+      pathe: 2.0.3
+      picomatch: 4.0.2
+      std-env: 3.9.0
       tinybench: 2.9.0
       tinyexec: 0.3.2
-      tinypool: 1.0.2
-      tinyrainbow: 1.2.0
-      vite: 5.4.19(@types/node@22.15.14)
-      vite-node: 2.1.9(@types/node@22.15.14)
+      tinyglobby: 0.2.14
+      tinypool: 1.1.1
+      tinyrainbow: 2.0.0
+      vite: 6.3.5(@types/node@24.0.3)(jiti@1.21.7)
+      vite-node: 3.2.4(@types/node@24.0.3)(jiti@1.21.7)
       why-is-node-running: 2.3.0
     optionalDependencies:
-      '@types/node': 22.15.14
-      happy-dom: 17.4.6
+      '@types/debug': 4.1.12
+      '@types/node': 24.0.3
+      happy-dom: 18.0.1
     transitivePeerDependencies:
+      - jiti
       - less
       - lightningcss
       - msw
@@ -9922,6 +9367,8 @@ snapshots:
       - sugarss
       - supports-color
       - terser
+      - tsx
+      - yaml
 
   void-elements@3.1.0: {}
 
@@ -9931,8 +9378,6 @@ snapshots:
 
   webidl-conversions@3.0.1: {}
 
-  webidl-conversions@7.0.0: {}
-
   whatwg-fetch@3.6.20: {}
 
   whatwg-mimetype@3.0.0: {}
@@ -10014,8 +9459,6 @@ snapshots:
       string-width: 5.1.2
       strip-ansi: 7.1.0
 
-  wrappy@1.0.2: {}
-
   xtend@4.0.2: {}
 
   y18n@5.0.8: {}
@@ -10040,23 +9483,17 @@ snapshots:
 
   yoctocolors-cjs@2.1.2: {}
 
-  zod-to-json-schema@3.24.5(zod@3.24.4):
-    dependencies:
-      zod: 3.24.4
-
-  zod@3.24.4: {}
-
-  zustand@4.5.6(@types/react@18.3.19)(react@18.3.1):
+  zustand@4.5.7(@types/react@19.1.8)(react@19.1.0):
     dependencies:
-      use-sync-external-store: 1.4.0(react@18.3.1)
+      use-sync-external-store: 1.5.0(react@19.1.0)
     optionalDependencies:
-      '@types/react': 18.3.19
-      react: 18.3.1
+      '@types/react': 19.1.8
+      react: 19.1.0
 
-  zustand@5.0.4(@types/react@18.3.19)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)):
+  zustand@5.0.5(@types/react@19.1.8)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0)):
     optionalDependencies:
-      '@types/react': 18.3.19
-      react: 18.3.1
-      use-sync-external-store: 1.4.0(react@18.3.1)
+      '@types/react': 19.1.8
+      react: 19.1.0
+      use-sync-external-store: 1.5.0(react@19.1.0)
 
   zwitch@2.0.4: {}

From c27ec6d2eb9dbcdf299f2dc96e2896a5b371ca09 Mon Sep 17 00:00:00 2001
From: Dov Benyomin Sohacheski <b@kloud.email>
Date: Sun, 22 Jun 2025 00:12:27 +0300
Subject: [PATCH 032/381] Document EdgeExecutor migration from
 `internal_api_secret_key` to `jwt_secret` (#51905)

* Document the need for a matching JWT secret

* Update documentation in other sections

* Include docs for older versions
---
 providers/edge3/docs/deployment.rst         | 6 +++++-
 providers/edge3/docs/install_on_windows.rst | 4 ++--
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/providers/edge3/docs/deployment.rst b/providers/edge3/docs/deployment.rst
index b051d6859e012..d07b9c16e39b5 100644
--- a/providers/edge3/docs/deployment.rst
+++ b/providers/edge3/docs/deployment.rst
@@ -44,12 +44,16 @@ Here are a few imperative requirements for your workers:
 
 Minimum Airflow configuration settings for the Edge Worker to make it running is:
 
+- Section ``[api_auth]``
+
+  - ``jwt_secret``: A matching secret to that on the api-server (starting from version 3.0.0).
+
 - Section ``[core]``
 
   - ``executor``: Executor must be set or added to be ``airflow.providers.edge3.executors.EdgeExecutor``
   - ``internal_api_secret_key``: An encryption key must be set on api-server and Edge Worker component as
     shared secret to authenticate traffic. It should be a random string like the fernet key
-    (but preferably not the same).
+    (for versions earlier than 3.0.0).
 
 - Section ``[edge]``
 
diff --git a/providers/edge3/docs/install_on_windows.rst b/providers/edge3/docs/install_on_windows.rst
index 5ac0cf6178406..29bf5b2920b7b 100644
--- a/providers/edge3/docs/install_on_windows.rst
+++ b/providers/edge3/docs/install_on_windows.rst
@@ -39,8 +39,8 @@ To setup a instance of Edge Worker on Windows, you need to follow the steps belo
    (At least the DAG files which should be executed on the edge alongside the dependencies.)
 7. Collect needed parameters from your running Airflow backend, at least the following:
 
+  - ``api_auth`` / ``jwt_token``: The shared secret key between the api-server and the Edge Worker
   - ``edge`` / ``api_url``: The HTTP(s) endpoint where the Edge Worker connects to
-  - ``core`` / ``internal_api_secret_key``: The shared secret key between the api-server and the Edge Worker
   - Any proxy details if applicable for your environment.
 
 8. Create a worker start script to prevent repeated typing. Create a new file ``start_worker.bat`` in
@@ -49,11 +49,11 @@ To setup a instance of Edge Worker on Windows, you need to follow the steps belo
 .. code-block:: bash
 
     @echo off
+    set AIRFLOW__API_AUTH__JWT_SECRET=<matching the api-server...>
     set AIRFLOW__CORE__DAGS_FOLDER=dags
     set AIRFLOW__LOGGING__BASE_LOG_FOLDER=edge_logs
     set AIRFLOW__EDGE__API_URL=https://your-hostname-and-port/edge_worker/v1/rpcapi
     set AIRFLOW__CORE__EXECUTOR=airflow.providers.edge3.executors.edge_executor.EdgeExecutor
-    set AIRFLOW__CORE__INTERNAL_API_SECRET_KEY=<use this as configured centrally in api-server...>
     set AIRFLOW__CORE__LOAD_EXAMPLES=False
     set AIRFLOW_ENABLE_AIP_44=true
     @REM Add if needed: set http_proxy=http://my-company-proxy.com:3128

From 4b82f79d193d3617b0096bcd6a86e578eed23fc6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Filip=20Popi=C4=87?= <filip.popic@gmail.com>
Date: Sun, 22 Jun 2025 08:34:29 +0200
Subject: [PATCH 033/381] Fix gcp auth in hashicorp vault provider. (#51991)

* Fix gcp auth in hashicorp vault provider.

* Fix vault gcp auth.

* Prepare jwt in test.

* Fix gcp auth in hashicorp vault provider.

* Fix failing gcp test_vault_client tests  (#3)

* Fix vault gcp auth.

* Prepare jwt in test.

* Fix gcp auth in hashicorp vault provider.

* remove redundent code

* fix failing tests

---------

Co-authored-by: Mohamed Morsy <messam88@gmail.com>

* Fix typo in gcp auth test.

* fix syntax and linting

* Add missing role_id in VaultHook kwargs

* Refactor gcp tests.

Add missing role_id to test_gcp_init_params.

Refactor gcp tests.

* Fix open in tests assertions.

---------

Co-authored-by: Mohamed Morsy <messam88@gmail.com>
---
 .../_internal_client/vault_client.py          |  43 +++-
 .../_internal_client/test_vault_client.py     | 189 +++++++++++++++---
 .../tests/unit/hashicorp/hooks/test_vault.py  |  89 +++++++--
 3 files changed, 271 insertions(+), 50 deletions(-)

diff --git a/providers/hashicorp/src/airflow/providers/hashicorp/_internal_client/vault_client.py b/providers/hashicorp/src/airflow/providers/hashicorp/_internal_client/vault_client.py
index edc87827857af..aa73ffdc8b7db 100644
--- a/providers/hashicorp/src/airflow/providers/hashicorp/_internal_client/vault_client.py
+++ b/providers/hashicorp/src/airflow/providers/hashicorp/_internal_client/vault_client.py
@@ -153,6 +153,15 @@ def __init__(
                 raise VaultError("The 'radius' authentication type requires 'radius_host'")
             if not radius_secret:
                 raise VaultError("The 'radius' authentication type requires 'radius_secret'")
+        if auth_type == "gcp":
+            if not gcp_scopes:
+                raise VaultError("The 'gcp' authentication type requires 'gcp_scopes'")
+            if not role_id:
+                raise VaultError("The 'gcp' authentication type requires 'role_id'")
+            if not gcp_key_path and not gcp_keyfile_dict:
+                raise VaultError(
+                    "The 'gcp' authentication type requires 'gcp_key_path' or 'gcp_keyfile_dict'"
+                )
 
         self.kv_engine_version = kv_engine_version or 2
         self.url = url
@@ -303,13 +312,41 @@ def _auth_gcp(self, _client: hvac.Client) -> None:
         )
 
         scopes = _get_scopes(self.gcp_scopes)
-        credentials, _ = get_credentials_and_project_id(
+        credentials, project_id = get_credentials_and_project_id(
             key_path=self.gcp_key_path, keyfile_dict=self.gcp_keyfile_dict, scopes=scopes
         )
+
+        import json
+        import time
+
+        import googleapiclient
+
+        if self.gcp_keyfile_dict:
+            creds = self.gcp_keyfile_dict
+        elif self.gcp_key_path:
+            with open(self.gcp_key_path) as f:
+                creds = json.load(f)
+
+        service_account = creds["client_email"]
+
+        # Generate a payload for subsequent "signJwt()" call
+        # Reference: https://googleapis.dev/python/google-auth/latest/reference/google.auth.jwt.html#google.auth.jwt.Credentials
+        now = int(time.time())
+        expires = now + 900  # 15 mins in seconds, can't be longer.
+        payload = {"iat": now, "exp": expires, "sub": credentials, "aud": f"vault/{self.role_id}"}
+        body = {"payload": json.dumps(payload)}
+        name = f"projects/{project_id}/serviceAccounts/{service_account}"
+
+        # Perform the GCP API call
+        iam = googleapiclient.discovery.build("iam", "v1", credentials=credentials)
+        request = iam.projects().serviceAccounts().signJwt(name=name, body=body)
+        resp = request.execute()
+        jwt = resp["signedJwt"]
+
         if self.auth_mount_point:
-            _client.auth.gcp.configure(credentials=credentials, mount_point=self.auth_mount_point)
+            _client.auth.gcp.login(role=self.role_id, jwt=jwt, mount_point=self.auth_mount_point)
         else:
-            _client.auth.gcp.configure(credentials=credentials)
+            _client.auth.gcp.login(role=self.role_id, jwt=jwt)
 
     def _auth_azure(self, _client: hvac.Client) -> None:
         if self.auth_mount_point:
diff --git a/providers/hashicorp/tests/unit/hashicorp/_internal_client/test_vault_client.py b/providers/hashicorp/tests/unit/hashicorp/_internal_client/test_vault_client.py
index 8b98a814394d5..c9239b75a99e4 100644
--- a/providers/hashicorp/tests/unit/hashicorp/_internal_client/test_vault_client.py
+++ b/providers/hashicorp/tests/unit/hashicorp/_internal_client/test_vault_client.py
@@ -16,6 +16,8 @@
 # under the License.
 from __future__ import annotations
 
+import json
+import time
 from unittest import mock
 from unittest.mock import mock_open, patch
 
@@ -253,86 +255,217 @@ def test_azure_missing_tenant_id(self, mock_hvac):
                 secret_id="pass",
             )
 
+    @mock.patch("builtins.open", create=True)
     @mock.patch("airflow.providers.google.cloud.utils.credentials_provider._get_scopes")
     @mock.patch("airflow.providers.google.cloud.utils.credentials_provider.get_credentials_and_project_id")
-    @mock.patch("airflow.providers.hashicorp._internal_client.vault_client.hvac")
-    def test_gcp(self, mock_hvac, mock_get_credentials, mock_get_scopes):
+    @mock.patch("airflow.providers.hashicorp._internal_client.vault_client.hvac.Client")
+    @mock.patch("googleapiclient.discovery.build")
+    def test_gcp(self, mock_google_build, mock_hvac_client, mock_get_credentials, mock_get_scopes, mock_open):
+        # Mock the content of the file 'path.json'
+        mock_file = mock.MagicMock()
+        mock_file.read.return_value = '{"client_email": "service_account_email"}'
+        mock_open.return_value.__enter__.return_value = mock_file
+
         mock_client = mock.MagicMock()
-        mock_hvac.Client.return_value = mock_client
+        mock_hvac_client.return_value = mock_client
         mock_get_scopes.return_value = ["scope1", "scope2"]
         mock_get_credentials.return_value = ("credentials", "project_id")
+
+        # Mock the current time to use for iat and exp
+        current_time = int(time.time())
+        iat = current_time
+        exp = iat + 3600  # 1 hour after iat
+
+        # Mock the signJwt API to return the expected payload
+        mock_sign_jwt = (
+            mock_google_build.return_value.projects.return_value.serviceAccounts.return_value.signJwt
+        )
+        mock_sign_jwt.return_value.execute.return_value = {"signedJwt": "mocked_jwt"}
+
         vault_client = _VaultClient(
             auth_type="gcp",
             gcp_key_path="path.json",
             gcp_scopes="scope1,scope2",
+            role_id="role",
             url="http://localhost:8180",
             session=None,
         )
-        client = vault_client.client
-        mock_hvac.Client.assert_called_with(url="http://localhost:8180", session=None)
+
+        # Preserve the original json.dumps
+        original_json_dumps = json.dumps
+
+        # Inject the mocked payload into the JWT signing process
+        with mock.patch("json.dumps") as mock_json_dumps:
+
+            def mocked_json_dumps(payload):
+                # Override the payload to inject controlled iat and exp values
+                payload["iat"] = iat
+                payload["exp"] = exp
+                return original_json_dumps(payload)  # Use the original json.dumps
+
+            mock_json_dumps.side_effect = mocked_json_dumps
+
+            client = vault_client.client  # Trigger the Vault client creation
+
+        # Validate that the HVAC client and other mocks are called correctly
+        mock_hvac_client.assert_called_with(url="http://localhost:8180", session=None)
         mock_get_scopes.assert_called_with("scope1,scope2")
         mock_get_credentials.assert_called_with(
             key_path="path.json", keyfile_dict=None, scopes=["scope1", "scope2"]
         )
-        mock_hvac.Client.assert_called_with(url="http://localhost:8180", session=None)
-        client.auth.gcp.configure.assert_called_with(
-            credentials="credentials",
-        )
+
+        # Extract the arguments passed to the mocked signJwt API
+        args, kwargs = mock_sign_jwt.call_args
+        payload = json.loads(kwargs["body"]["payload"])
+
+        # Assert iat and exp values are as expected
+        assert payload["iat"] == iat
+        assert payload["exp"] == exp
+        assert abs(payload["exp"] - (payload["iat"] + 3600)) < 10  # Validate exp is 3600 seconds after iat
+
+        client.auth.gcp.login.assert_called_with(role="role", jwt="mocked_jwt")
         client.is_authenticated.assert_called_with()
         assert vault_client.kv_engine_version == 2
 
+    @mock.patch("builtins.open", create=True)
     @mock.patch("airflow.providers.google.cloud.utils.credentials_provider._get_scopes")
     @mock.patch("airflow.providers.google.cloud.utils.credentials_provider.get_credentials_and_project_id")
-    @mock.patch("airflow.providers.hashicorp._internal_client.vault_client.hvac")
-    def test_gcp_different_auth_mount_point(self, mock_hvac, mock_get_credentials, mock_get_scopes):
-        mock_client = mock.MagicMock()
-        mock_hvac.Client.return_value = mock_client
+    @mock.patch("airflow.providers.hashicorp._internal_client.vault_client.hvac.Client")
+    @mock.patch("googleapiclient.discovery.build")
+    def test_gcp_different_auth_mount_point(
+        self, mock_google_build, mock_hvac_client, mock_get_credentials, mock_get_scopes, mock_open
+    ):
+        # Mock the content of the file 'path.json'
+        mock_file = mock.MagicMock()
+        mock_file.read.return_value = '{"client_email": "service_account_email"}'
+        mock_open.return_value.__enter__.return_value = mock_file
+
+        mock_client = mock.MagicMock()
+        mock_hvac_client.return_value = mock_client
         mock_get_scopes.return_value = ["scope1", "scope2"]
         mock_get_credentials.return_value = ("credentials", "project_id")
+
+        mock_sign_jwt = (
+            mock_google_build.return_value.projects.return_value.serviceAccounts.return_value.signJwt
+        )
+        mock_sign_jwt.return_value.execute.return_value = {"signedJwt": "mocked_jwt"}
+
+        # Generate realistic iat and exp values
+        current_time = int(time.time())
+        iat = current_time
+        exp = current_time + 3600  # 1 hour later
+
         vault_client = _VaultClient(
             auth_type="gcp",
             gcp_key_path="path.json",
             gcp_scopes="scope1,scope2",
+            role_id="role",
             url="http://localhost:8180",
             auth_mount_point="other",
             session=None,
         )
-        client = vault_client.client
-        mock_hvac.Client.assert_called_with(url="http://localhost:8180", session=None)
+
+        # Preserve the original json.dumps
+        original_json_dumps = json.dumps
+
+        # Inject the mocked payload into the JWT signing process
+        with mock.patch("json.dumps") as mock_json_dumps:
+
+            def mocked_json_dumps(payload):
+                # Override the payload to inject controlled iat and exp values
+                payload["iat"] = iat
+                payload["exp"] = exp
+                return original_json_dumps(payload)  # Use the original json.dumps
+
+            mock_json_dumps.side_effect = mocked_json_dumps
+
+            client = vault_client.client  # Trigger the Vault client creation
+
+        # Assertions
+        mock_hvac_client.assert_called_with(url="http://localhost:8180", session=None)
         mock_get_scopes.assert_called_with("scope1,scope2")
         mock_get_credentials.assert_called_with(
             key_path="path.json", keyfile_dict=None, scopes=["scope1", "scope2"]
         )
-        mock_hvac.Client.assert_called_with(url="http://localhost:8180", session=None)
-        client.auth.gcp.configure.assert_called_with(credentials="credentials", mount_point="other")
+        # Extract the arguments passed to the mocked signJwt API
+        args, kwargs = mock_sign_jwt.call_args
+        payload = json.loads(kwargs["body"]["payload"])
+
+        # Assert iat and exp values are as expected
+        assert payload["iat"] == iat
+        assert payload["exp"] == exp
+        assert abs(payload["exp"] - (payload["iat"] + 3600)) < 10  # Validate exp is 3600 seconds after iat
+
+        client.auth.gcp.login.assert_called_with(role="role", jwt="mocked_jwt", mount_point="other")
         client.is_authenticated.assert_called_with()
         assert vault_client.kv_engine_version == 2
 
+    @mock.patch(
+        "builtins.open", new_callable=mock_open, read_data='{"client_email": "service_account_email"}'
+    )
     @mock.patch("airflow.providers.google.cloud.utils.credentials_provider._get_scopes")
     @mock.patch("airflow.providers.google.cloud.utils.credentials_provider.get_credentials_and_project_id")
-    @mock.patch("airflow.providers.hashicorp._internal_client.vault_client.hvac")
-    def test_gcp_dict(self, mock_hvac, mock_get_credentials, mock_get_scopes):
+    @mock.patch("airflow.providers.hashicorp._internal_client.vault_client.hvac.Client")
+    @mock.patch("googleapiclient.discovery.build")
+    def test_gcp_dict(
+        self, mock_google_build, mock_hvac_client, mock_get_credentials, mock_get_scopes, mock_file
+    ):
         mock_client = mock.MagicMock()
-        mock_hvac.Client.return_value = mock_client
+        mock_hvac_client.return_value = mock_client
         mock_get_scopes.return_value = ["scope1", "scope2"]
         mock_get_credentials.return_value = ("credentials", "project_id")
+
+        mock_sign_jwt = (
+            mock_google_build.return_value.projects.return_value.serviceAccounts.return_value.signJwt
+        )
+        mock_sign_jwt.return_value.execute.return_value = {"signedJwt": "mocked_jwt"}
+
+        # Generate realistic iat and exp values
+        current_time = int(time.time())
+        iat = current_time
+        exp = current_time + 3600  # 1 hour later
+
         vault_client = _VaultClient(
             auth_type="gcp",
-            gcp_keyfile_dict={"key": "value"},
+            gcp_keyfile_dict={"client_email": "service_account_email"},
             gcp_scopes="scope1,scope2",
+            role_id="role",
             url="http://localhost:8180",
             session=None,
         )
-        client = vault_client.client
-        mock_hvac.Client.assert_called_with(url="http://localhost:8180", session=None)
+
+        # Preserve the original json.dumps
+        original_json_dumps = json.dumps
+
+        # Inject the mocked payload into the JWT signing process
+        with mock.patch("json.dumps") as mock_json_dumps:
+
+            def mocked_json_dumps(payload):
+                # Override the payload to inject controlled iat and exp values
+                payload["iat"] = iat
+                payload["exp"] = exp
+                return original_json_dumps(payload)  # Use the original json.dumps
+
+            mock_json_dumps.side_effect = mocked_json_dumps
+
+            client = vault_client.client  # Trigger the Vault client creation
+
+        # Assertions
+        mock_hvac_client.assert_called_with(url="http://localhost:8180", session=None)
         mock_get_scopes.assert_called_with("scope1,scope2")
         mock_get_credentials.assert_called_with(
-            key_path=None, keyfile_dict={"key": "value"}, scopes=["scope1", "scope2"]
-        )
-        mock_hvac.Client.assert_called_with(url="http://localhost:8180", session=None)
-        client.auth.gcp.configure.assert_called_with(
-            credentials="credentials",
+            key_path=None, keyfile_dict={"client_email": "service_account_email"}, scopes=["scope1", "scope2"]
         )
+        # Extract the arguments passed to the mocked signJwt API
+        args, kwargs = mock_sign_jwt.call_args
+        payload = json.loads(kwargs["body"]["payload"])
+
+        # Assert iat and exp values are as expected
+        assert payload["iat"] == iat
+        assert payload["exp"] == exp
+        assert abs(payload["exp"] - (payload["iat"] + 3600)) < 10  # Validate exp is 3600 seconds after iat
+
+        client.auth.gcp.login.assert_called_with(role="role", jwt="mocked_jwt")
         client.is_authenticated.assert_called_with()
         assert vault_client.kv_engine_version == 2
 
diff --git a/providers/hashicorp/tests/unit/hashicorp/hooks/test_vault.py b/providers/hashicorp/tests/unit/hashicorp/hooks/test_vault.py
index fd0862329e7ef..fa573eb6624a1 100644
--- a/providers/hashicorp/tests/unit/hashicorp/hooks/test_vault.py
+++ b/providers/hashicorp/tests/unit/hashicorp/hooks/test_vault.py
@@ -18,7 +18,7 @@
 
 import re
 from unittest import mock
-from unittest.mock import PropertyMock, mock_open, patch
+from unittest.mock import MagicMock, PropertyMock, mock_open, patch
 
 import pytest
 from hvac.exceptions import VaultError
@@ -431,7 +431,10 @@ def test_azure_dejson(self, mock_hvac, mock_get_connection):
     @mock.patch("airflow.providers.google.cloud.utils.credentials_provider.get_credentials_and_project_id")
     @mock.patch("airflow.providers.hashicorp.hooks.vault.VaultHook.get_connection")
     @mock.patch("airflow.providers.hashicorp._internal_client.vault_client.hvac")
-    def test_gcp_init_params(self, mock_hvac, mock_get_connection, mock_get_credentials, mock_get_scopes):
+    @mock.patch("googleapiclient.discovery.build")
+    def test_gcp_init_params(
+        self, mock_build, mock_hvac, mock_get_connection, mock_get_credentials, mock_get_scopes
+    ):
         mock_client = mock.MagicMock()
         mock_hvac.Client.return_value = mock_client
         mock_connection = self.get_mock_connection()
@@ -439,6 +442,17 @@ def test_gcp_init_params(self, mock_hvac, mock_get_connection, mock_get_credenti
         mock_get_scopes.return_value = ["scope1", "scope2"]
         mock_get_credentials.return_value = ("credentials", "project_id")
 
+        # Mock googleapiclient.discovery.build chain
+        mock_service = MagicMock()
+        mock_projects = MagicMock()
+        mock_service_accounts = MagicMock()
+        mock_sign_jwt = MagicMock()
+        mock_sign_jwt.execute.return_value = {"signedJwt": "mocked_jwt"}
+        mock_service_accounts.signJwt.return_value = mock_sign_jwt
+        mock_projects.serviceAccounts.return_value = mock_service_accounts
+        mock_service.projects.return_value = mock_projects
+        mock_build.return_value = mock_service
+
         connection_dict = {}
 
         mock_connection.extra_dejson.get.side_effect = connection_dict.get
@@ -447,20 +461,24 @@ def test_gcp_init_params(self, mock_hvac, mock_get_connection, mock_get_credenti
             "auth_type": "gcp",
             "gcp_key_path": "path.json",
             "gcp_scopes": "scope1,scope2",
+            "role_id": "role",
             "session": None,
         }
 
-        test_hook = VaultHook(**kwargs)
-        test_client = test_hook.get_conn()
+        with patch(
+            "builtins.open", mock_open(read_data='{"client_email": "service_account_email"}')
+        ) as mock_file:
+            test_hook = VaultHook(**kwargs)
+            test_client = test_hook.get_conn()
+            mock_file.assert_called_with("path.json")
+
         mock_get_connection.assert_called_with("vault_conn_id")
         mock_get_scopes.assert_called_with("scope1,scope2")
         mock_get_credentials.assert_called_with(
             key_path="path.json", keyfile_dict=None, scopes=["scope1", "scope2"]
         )
         mock_hvac.Client.assert_called_with(url="http://localhost:8180", session=None)
-        test_client.auth.gcp.configure.assert_called_with(
-            credentials="credentials",
-        )
+        test_client.auth.gcp.login.assert_called_with(role="role", jwt="mocked_jwt")
         test_client.is_authenticated.assert_called_with()
         assert test_hook.vault_client.kv_engine_version == 2
 
@@ -468,7 +486,10 @@ def test_gcp_init_params(self, mock_hvac, mock_get_connection, mock_get_credenti
     @mock.patch("airflow.providers.google.cloud.utils.credentials_provider.get_credentials_and_project_id")
     @mock.patch("airflow.providers.hashicorp.hooks.vault.VaultHook.get_connection")
     @mock.patch("airflow.providers.hashicorp._internal_client.vault_client.hvac")
-    def test_gcp_dejson(self, mock_hvac, mock_get_connection, mock_get_credentials, mock_get_scopes):
+    @mock.patch("googleapiclient.discovery.build")
+    def test_gcp_dejson(
+        self, mock_build, mock_hvac, mock_get_connection, mock_get_credentials, mock_get_scopes
+    ):
         mock_client = mock.MagicMock()
         mock_hvac.Client.return_value = mock_client
         mock_connection = self.get_mock_connection()
@@ -476,29 +497,45 @@ def test_gcp_dejson(self, mock_hvac, mock_get_connection, mock_get_credentials,
         mock_get_scopes.return_value = ["scope1", "scope2"]
         mock_get_credentials.return_value = ("credentials", "project_id")
 
+        # Mock googleapiclient.discovery.build chain
+        mock_service = MagicMock()
+        mock_projects = MagicMock()
+        mock_service_accounts = MagicMock()
+        mock_sign_jwt = MagicMock()
+        mock_sign_jwt.execute.return_value = {"signedJwt": "mocked_jwt"}
+        mock_service_accounts.signJwt.return_value = mock_sign_jwt
+        mock_projects.serviceAccounts.return_value = mock_service_accounts
+        mock_service.projects.return_value = mock_projects
+        mock_build.return_value = mock_service
+
         connection_dict = {
             "auth_type": "gcp",
             "gcp_key_path": "path.json",
             "gcp_scopes": "scope1,scope2",
+            "role_id": "role",
         }
 
         mock_connection.extra_dejson.get.side_effect = connection_dict.get
         kwargs = {
             "vault_conn_id": "vault_conn_id",
             "session": None,
+            "role_id": "role",
         }
 
-        test_hook = VaultHook(**kwargs)
-        test_client = test_hook.get_conn()
+        with patch(
+            "builtins.open", mock_open(read_data='{"client_email": "service_account_email"}')
+        ) as mock_file:
+            test_hook = VaultHook(**kwargs)
+            test_client = test_hook.get_conn()
+            mock_file.assert_called_with("path.json")
+
         mock_get_connection.assert_called_with("vault_conn_id")
         mock_get_scopes.assert_called_with("scope1,scope2")
         mock_get_credentials.assert_called_with(
             key_path="path.json", keyfile_dict=None, scopes=["scope1", "scope2"]
         )
         mock_hvac.Client.assert_called_with(url="http://localhost:8180", session=None)
-        test_client.auth.gcp.configure.assert_called_with(
-            credentials="credentials",
-        )
+        test_client.auth.gcp.login.assert_called_with(role="role", jwt="mocked_jwt")
         test_client.is_authenticated.assert_called_with()
         assert test_hook.vault_client.kv_engine_version == 2
 
@@ -506,7 +543,10 @@ def test_gcp_dejson(self, mock_hvac, mock_get_connection, mock_get_credentials,
     @mock.patch("airflow.providers.google.cloud.utils.credentials_provider.get_credentials_and_project_id")
     @mock.patch("airflow.providers.hashicorp.hooks.vault.VaultHook.get_connection")
     @mock.patch("airflow.providers.hashicorp._internal_client.vault_client.hvac")
-    def test_gcp_dict_dejson(self, mock_hvac, mock_get_connection, mock_get_credentials, mock_get_scopes):
+    @mock.patch("googleapiclient.discovery.build")
+    def test_gcp_dict_dejson(
+        self, mock_build, mock_hvac, mock_get_connection, mock_get_credentials, mock_get_scopes
+    ):
         mock_client = mock.MagicMock()
         mock_hvac.Client.return_value = mock_client
         mock_connection = self.get_mock_connection()
@@ -514,16 +554,29 @@ def test_gcp_dict_dejson(self, mock_hvac, mock_get_connection, mock_get_credenti
         mock_get_scopes.return_value = ["scope1", "scope2"]
         mock_get_credentials.return_value = ("credentials", "project_id")
 
+        # Mock googleapiclient.discovery.build chain
+        mock_service = MagicMock()
+        mock_projects = MagicMock()
+        mock_service_accounts = MagicMock()
+        mock_sign_jwt = MagicMock()
+        mock_sign_jwt.execute.return_value = {"signedJwt": "mocked_jwt"}
+        mock_service_accounts.signJwt.return_value = mock_sign_jwt
+        mock_projects.serviceAccounts.return_value = mock_service_accounts
+        mock_service.projects.return_value = mock_projects
+        mock_build.return_value = mock_service
+
         connection_dict = {
             "auth_type": "gcp",
-            "gcp_keyfile_dict": '{"key": "value"}',
+            "gcp_keyfile_dict": '{"client_email": "service_account_email"}',
             "gcp_scopes": "scope1,scope2",
+            "role_id": "role",
         }
 
         mock_connection.extra_dejson.get.side_effect = connection_dict.get
         kwargs = {
             "vault_conn_id": "vault_conn_id",
             "session": None,
+            "role_id": "role",
         }
 
         test_hook = VaultHook(**kwargs)
@@ -531,12 +584,10 @@ def test_gcp_dict_dejson(self, mock_hvac, mock_get_connection, mock_get_credenti
         mock_get_connection.assert_called_with("vault_conn_id")
         mock_get_scopes.assert_called_with("scope1,scope2")
         mock_get_credentials.assert_called_with(
-            key_path=None, keyfile_dict={"key": "value"}, scopes=["scope1", "scope2"]
+            key_path=None, keyfile_dict={"client_email": "service_account_email"}, scopes=["scope1", "scope2"]
         )
         mock_hvac.Client.assert_called_with(url="http://localhost:8180", session=None)
-        test_client.auth.gcp.configure.assert_called_with(
-            credentials="credentials",
-        )
+        test_client.auth.gcp.login.assert_called_with(role="role", jwt="mocked_jwt")
         test_client.is_authenticated.assert_called_with()
         assert test_hook.vault_client.kv_engine_version == 2
 

From c87049d4935c101ac2144e0e9f12b575cb78d073 Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Sun, 22 Jun 2025 07:49:12 +0100
Subject: [PATCH 034/381] =?UTF-8?q?Revert=20"Bump=20the=20core-ui-package-?=
 =?UTF-8?q?updates=20group=20across=201=20directory=20with=2044=20upd?=
 =?UTF-8?q?=E2=80=A6"=20(#52007)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This reverts commit cf65598b8d94bb071dc01bc0399ed1eef0972252.
---
 airflow-core/src/airflow/ui/package.json   |   88 +-
 airflow-core/src/airflow/ui/pnpm-lock.yaml | 4811 +++++++++++---------
 2 files changed, 2731 insertions(+), 2168 deletions(-)

diff --git a/airflow-core/src/airflow/ui/package.json b/airflow-core/src/airflow/ui/package.json
index 0ab5b684d2066..2429adc35a0c7 100644
--- a/airflow-core/src/airflow/ui/package.json
+++ b/airflow-core/src/airflow/ui/package.json
@@ -17,84 +17,84 @@
   },
   "dependencies": {
     "@chakra-ui/anatomy": "^2.3.4",
-    "@chakra-ui/react": "^3.21.0",
-    "@codemirror/lang-json": "^6.0.2",
+    "@chakra-ui/react": "^3.20.0",
+    "@codemirror/lang-json": "^6.0.1",
     "@emotion/react": "^11.14.0",
-    "@tanstack/react-query": "^5.80.10",
+    "@tanstack/react-query": "^5.75.1",
     "@tanstack/react-table": "^8.21.3",
-    "@tanstack/react-virtual": "^3.13.10",
+    "@tanstack/react-virtual": "^3.13.8",
     "@types/debounce-promise": "^3.1.9",
-    "@uiw/codemirror-themes-all": "^4.23.13",
-    "@uiw/react-codemirror": "^4.23.13",
+    "@uiw/codemirror-themes-all": "^4.23.12",
+    "@uiw/react-codemirror": "^4.23.12",
     "@visx/group": "^3.12.0",
     "@visx/shape": "^3.12.0",
-    "@xyflow/react": "^12.7.0",
-    "axios": "^1.10.0",
+    "@xyflow/react": "^12.4.4",
+    "axios": "^1.8.4",
     "chakra-react-select": "6.1.0",
-    "chart.js": "^4.5.0",
+    "chart.js": "^4.4.9",
     "chartjs-plugin-annotation": "^3.1.0",
     "dayjs": "^1.11.13",
     "debounce-promise": "^3.1.2",
     "elkjs": "^0.10.0",
     "html-to-image": "^1.11.13",
-    "i18next": "^25.2.1",
-    "i18next-browser-languagedetector": "^8.2.0",
+    "i18next": "^25.1.2",
+    "i18next-browser-languagedetector": "^8.1.0",
     "i18next-http-backend": "^3.0.2",
-    "next-themes": "^0.4.6",
-    "react": "^19.1.0",
+    "next-themes": "^0.3.0",
+    "react": "^18.3.1",
     "react-chartjs-2": "^5.3.0",
-    "react-dom": "^19.1.0",
-    "react-hook-form": "^7.58.1",
-    "react-hotkeys-hook": "^5.1.0",
-    "react-i18next": "^15.5.3",
+    "react-dom": "^18.3.1",
+    "react-hook-form": "^7.56.1",
+    "react-hotkeys-hook": "^4.6.1",
+    "react-i18next": "^15.5.1",
     "react-icons": "^5.5.0",
     "react-innertext": "^1.1.5",
     "react-json-view": "^1.21.3",
-    "react-markdown": "^10.1.0",
-    "react-resizable-panels": "^3.0.3",
-    "react-router-dom": "^7.6.2",
+    "react-markdown": "^9.1.0",
+    "react-resizable-panels": "^2.1.7",
+    "react-router-dom": "^6.30.0",
     "react-syntax-highlighter": "^15.6.1",
     "remark-gfm": "^4.0.1",
-    "use-debounce": "^10.0.5",
+    "use-debounce": "^10.0.4",
     "usehooks-ts": "^3.1.1",
-    "zustand": "^5.0.5"
+    "zustand": "^5.0.4"
   },
   "devDependencies": {
     "@7nohe/openapi-react-query-codegen": "^1.6.2",
-    "@eslint/compat": "^1.3.0",
-    "@eslint/js": "^9.29.0",
-    "@stylistic/eslint-plugin": "^4.4.1",
-    "@tanstack/eslint-plugin-query": "^5.78.0",
+    "@eslint/compat": "^1.2.9",
+    "@eslint/js": "^9.25.1",
+    "@stylistic/eslint-plugin": "^2.13.0",
+    "@tanstack/eslint-plugin-query": "^5.74.7",
     "@testing-library/jest-dom": "^6.6.3",
     "@testing-library/react": "^16.3.0",
-    "@trivago/prettier-plugin-sort-imports": "^5.2.2",
-    "@types/node": "^24.0.3",
-    "@types/react": "^19.1.8",
-    "@types/react-dom": "^19.1.6",
+    "@trivago/prettier-plugin-sort-imports": "^4.3.0",
+    "@types/node": "^22.15.3",
+    "@types/react": "^18.3.19",
+    "@types/react-dom": "^18.3.5",
     "@types/react-syntax-highlighter": "^15.5.13",
-    "@vitejs/plugin-react-swc": "^3.10.2",
-    "@vitest/coverage-v8": "^3.2.4",
-    "eslint": "^9.29.0",
-    "eslint-config-prettier": "^10.1.5",
+    "@vitejs/plugin-react-swc": "^3.9.0",
+    "@vitest/coverage-v8": "^2.1.9",
+    "eslint": "^9.25.1",
+    "eslint-config-prettier": "^10.1.2",
     "eslint-plugin-i18next": "^6.1.1",
     "eslint-plugin-jsx-a11y": "^6.10.2",
-    "eslint-plugin-perfectionist": "^4.15.0",
-    "eslint-plugin-prettier": "^5.5.0",
+    "eslint-plugin-perfectionist": "^4.12.3",
+    "eslint-plugin-prettier": "^5.2.6",
     "eslint-plugin-react": "^7.37.5",
-    "eslint-plugin-react-hooks": "^5.2.0",
+    "eslint-plugin-react-hooks": "^4.6.2",
     "eslint-plugin-react-refresh": "^0.4.20",
-    "eslint-plugin-unicorn": "^59.0.1",
-    "globals": "^16.2.0",
-    "happy-dom": "^18.0.1",
+    "eslint-plugin-unicorn": "^55.0.0",
+    "globals": "^15.15.0",
+    "happy-dom": "^17.4.6",
     "jsonc-eslint-parser": "^2.4.0",
-    "msw": "^2.10.2",
+    "msw": "^2.7.5",
     "openapi-merge-cli": "^1.3.2",
     "prettier": "^3.5.3",
     "typescript": "~5.8.3",
-    "typescript-eslint": "^8.34.1",
-    "vite": "^6.3.5",
+    "typescript-eslint": "^8.31.1",
+    "vite": "^5.4.19",
     "vite-plugin-css-injected-by-js": "^3.5.2",
-    "vitest": "^3.2.4",
+    "vitest": "^2.1.9",
     "web-worker": "^1.5.0"
   },
   "pnpm": {
diff --git a/airflow-core/src/airflow/ui/pnpm-lock.yaml b/airflow-core/src/airflow/ui/pnpm-lock.yaml
index cf1c8812d67a2..04426f880c846 100644
--- a/airflow-core/src/airflow/ui/pnpm-lock.yaml
+++ b/airflow-core/src/airflow/ui/pnpm-lock.yaml
@@ -12,53 +12,53 @@ importers:
         specifier: ^2.3.4
         version: 2.3.4
       '@chakra-ui/react':
-        specifier: ^3.21.0
-        version: 3.21.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+        specifier: ^3.20.0
+        version: 3.20.0(@emotion/react@11.14.0(@types/react@18.3.19)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@codemirror/lang-json':
-        specifier: ^6.0.2
-        version: 6.0.2
+        specifier: ^6.0.1
+        version: 6.0.1
       '@emotion/react':
         specifier: ^11.14.0
-        version: 11.14.0(@types/react@19.1.8)(react@19.1.0)
+        version: 11.14.0(@types/react@18.3.19)(react@18.3.1)
       '@tanstack/react-query':
-        specifier: ^5.80.10
-        version: 5.80.10(react@19.1.0)
+        specifier: ^5.75.1
+        version: 5.75.4(react@18.3.1)
       '@tanstack/react-table':
         specifier: ^8.21.3
-        version: 8.21.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+        version: 8.21.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@tanstack/react-virtual':
-        specifier: ^3.13.10
-        version: 3.13.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+        specifier: ^3.13.8
+        version: 3.13.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@types/debounce-promise':
         specifier: ^3.1.9
         version: 3.1.9
       '@uiw/codemirror-themes-all':
-        specifier: ^4.23.13
-        version: 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+        specifier: ^4.23.12
+        version: 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
       '@uiw/react-codemirror':
-        specifier: ^4.23.13
-        version: 4.23.13(@babel/runtime@7.27.6)(@codemirror/autocomplete@6.18.2(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)(@lezer/common@1.2.3))(@codemirror/language@6.11.1)(@codemirror/lint@6.8.2)(@codemirror/search@6.5.6)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.37.2)(codemirror@6.0.1(@lezer/common@1.2.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+        specifier: ^4.23.12
+        version: 4.23.12(@babel/runtime@7.26.10)(@codemirror/autocomplete@6.18.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)(@lezer/common@1.2.3))(@codemirror/language@6.11.0)(@codemirror/lint@6.8.2)(@codemirror/search@6.5.6)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.36.4)(codemirror@6.0.1(@lezer/common@1.2.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@visx/group':
         specifier: ^3.12.0
-        version: 3.12.0(react@19.1.0)
+        version: 3.12.0(react@18.3.1)
       '@visx/shape':
         specifier: ^3.12.0
-        version: 3.12.0(react@19.1.0)
+        version: 3.12.0(react@18.3.1)
       '@xyflow/react':
-        specifier: ^12.7.0
-        version: 12.7.0(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+        specifier: ^12.4.4
+        version: 12.4.4(@types/react@18.3.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       axios:
-        specifier: ^1.10.0
-        version: 1.10.0
+        specifier: ^1.8.4
+        version: 1.8.4
       chakra-react-select:
         specifier: 6.1.0
-        version: 6.1.0(@chakra-ui/react@3.21.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+        version: 6.1.0(@chakra-ui/react@3.20.0(@emotion/react@11.14.0(@types/react@18.3.19)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.19)(next-themes@0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       chart.js:
-        specifier: ^4.5.0
-        version: 4.5.0
+        specifier: ^4.4.9
+        version: 4.4.9
       chartjs-plugin-annotation:
         specifier: ^3.1.0
-        version: 3.1.0(chart.js@4.5.0)
+        version: 3.1.0(chart.js@4.4.9)
       dayjs:
         specifier: ^1.11.13
         version: 1.11.13
@@ -72,153 +72,153 @@ importers:
         specifier: ^1.11.13
         version: 1.11.13
       i18next:
-        specifier: ^25.2.1
-        version: 25.2.1(typescript@5.8.3)
+        specifier: ^25.1.2
+        version: 25.1.2(typescript@5.8.3)
       i18next-browser-languagedetector:
-        specifier: ^8.2.0
-        version: 8.2.0
+        specifier: ^8.1.0
+        version: 8.1.0
       i18next-http-backend:
         specifier: ^3.0.2
         version: 3.0.2
       next-themes:
-        specifier: ^0.4.6
-        version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+        specifier: ^0.3.0
+        version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       react:
-        specifier: ^19.1.0
-        version: 19.1.0
+        specifier: ^18.3.1
+        version: 18.3.1
       react-chartjs-2:
         specifier: ^5.3.0
-        version: 5.3.0(chart.js@4.5.0)(react@19.1.0)
+        version: 5.3.0(chart.js@4.4.9)(react@18.3.1)
       react-dom:
-        specifier: ^19.1.0
-        version: 19.1.0(react@19.1.0)
+        specifier: ^18.3.1
+        version: 18.3.1(react@18.3.1)
       react-hook-form:
-        specifier: ^7.58.1
-        version: 7.58.1(react@19.1.0)
+        specifier: ^7.56.1
+        version: 7.56.2(react@18.3.1)
       react-hotkeys-hook:
-        specifier: ^5.1.0
-        version: 5.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+        specifier: ^4.6.1
+        version: 4.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       react-i18next:
-        specifier: ^15.5.3
-        version: 15.5.3(i18next@25.2.1(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)
+        specifier: ^15.5.1
+        version: 15.5.1(i18next@25.1.2(typescript@5.8.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)
       react-icons:
         specifier: ^5.5.0
-        version: 5.5.0(react@19.1.0)
+        version: 5.5.0(react@18.3.1)
       react-innertext:
         specifier: ^1.1.5
-        version: 1.1.5(@types/react@19.1.8)(react@19.1.0)
+        version: 1.1.5(@types/react@18.3.19)(react@18.3.1)
       react-json-view:
         specifier: ^1.21.3
-        version: 1.21.3(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+        version: 1.21.3(@types/react@18.3.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       react-markdown:
-        specifier: ^10.1.0
-        version: 10.1.0(@types/react@19.1.8)(react@19.1.0)
+        specifier: ^9.1.0
+        version: 9.1.0(@types/react@18.3.19)(react@18.3.1)
       react-resizable-panels:
-        specifier: ^3.0.3
-        version: 3.0.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+        specifier: ^2.1.7
+        version: 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       react-router-dom:
-        specifier: ^7.6.2
-        version: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+        specifier: ^6.30.0
+        version: 6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       react-syntax-highlighter:
         specifier: ^15.6.1
-        version: 15.6.1(react@19.1.0)
+        version: 15.6.1(react@18.3.1)
       remark-gfm:
         specifier: ^4.0.1
         version: 4.0.1
       use-debounce:
-        specifier: ^10.0.5
-        version: 10.0.5(react@19.1.0)
+        specifier: ^10.0.4
+        version: 10.0.4(react@18.3.1)
       usehooks-ts:
         specifier: ^3.1.1
-        version: 3.1.1(react@19.1.0)
+        version: 3.1.1(react@18.3.1)
       zustand:
-        specifier: ^5.0.5
-        version: 5.0.5(@types/react@19.1.8)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0))
+        specifier: ^5.0.4
+        version: 5.0.4(@types/react@18.3.19)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1))
     devDependencies:
       '@7nohe/openapi-react-query-codegen':
         specifier: ^1.6.2
         version: 1.6.2(commander@12.1.0)(glob@11.0.0)(magicast@0.3.5)(ts-morph@23.0.0)(typescript@5.8.3)
       '@eslint/compat':
-        specifier: ^1.3.0
-        version: 1.3.0(eslint@9.29.0(jiti@1.21.7))
+        specifier: ^1.2.9
+        version: 1.2.9(eslint@9.26.0(jiti@1.21.7))
       '@eslint/js':
-        specifier: ^9.29.0
-        version: 9.29.0
+        specifier: ^9.25.1
+        version: 9.26.0
       '@stylistic/eslint-plugin':
-        specifier: ^4.4.1
-        version: 4.4.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+        specifier: ^2.13.0
+        version: 2.13.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
       '@tanstack/eslint-plugin-query':
-        specifier: ^5.78.0
-        version: 5.78.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+        specifier: ^5.74.7
+        version: 5.74.7(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
       '@testing-library/jest-dom':
         specifier: ^6.6.3
         version: 6.6.3
       '@testing-library/react':
         specifier: ^16.3.0
-        version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+        version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.5(@types/react@18.3.19))(@types/react@18.3.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@trivago/prettier-plugin-sort-imports':
-        specifier: ^5.2.2
-        version: 5.2.2(prettier@3.5.3)
+        specifier: ^4.3.0
+        version: 4.3.0(prettier@3.5.3)
       '@types/node':
-        specifier: ^24.0.3
-        version: 24.0.3
+        specifier: ^22.15.3
+        version: 22.15.14
       '@types/react':
-        specifier: ^19.1.8
-        version: 19.1.8
+        specifier: ^18.3.19
+        version: 18.3.19
       '@types/react-dom':
-        specifier: ^19.1.6
-        version: 19.1.6(@types/react@19.1.8)
+        specifier: ^18.3.5
+        version: 18.3.5(@types/react@18.3.19)
       '@types/react-syntax-highlighter':
         specifier: ^15.5.13
         version: 15.5.13
       '@vitejs/plugin-react-swc':
-        specifier: ^3.10.2
-        version: 3.10.2(@swc/helpers@0.5.17)(vite@6.3.5(@types/node@24.0.3)(jiti@1.21.7))
+        specifier: ^3.9.0
+        version: 3.9.0(vite@5.4.19(@types/node@22.15.14))
       '@vitest/coverage-v8':
-        specifier: ^3.2.4
-        version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.3)(happy-dom@18.0.1)(jiti@1.21.7)(msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3)))
+        specifier: ^2.1.9
+        version: 2.1.9(vitest@2.1.9(@types/node@22.15.14)(happy-dom@17.4.6)(msw@2.7.6(@types/node@22.15.14)(typescript@5.8.3)))
       eslint:
-        specifier: ^9.29.0
-        version: 9.29.0(jiti@1.21.7)
+        specifier: ^9.25.1
+        version: 9.26.0(jiti@1.21.7)
       eslint-config-prettier:
-        specifier: ^10.1.5
-        version: 10.1.5(eslint@9.29.0(jiti@1.21.7))
+        specifier: ^10.1.2
+        version: 10.1.2(eslint@9.26.0(jiti@1.21.7))
       eslint-plugin-i18next:
         specifier: ^6.1.1
         version: 6.1.1
       eslint-plugin-jsx-a11y:
         specifier: ^6.10.2
-        version: 6.10.2(eslint@9.29.0(jiti@1.21.7))
+        version: 6.10.2(eslint@9.26.0(jiti@1.21.7))
       eslint-plugin-perfectionist:
-        specifier: ^4.15.0
-        version: 4.15.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+        specifier: ^4.12.3
+        version: 4.12.3(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
       eslint-plugin-prettier:
-        specifier: ^5.5.0
-        version: 5.5.0(eslint-config-prettier@10.1.5(eslint@9.29.0(jiti@1.21.7)))(eslint@9.29.0(jiti@1.21.7))(prettier@3.5.3)
+        specifier: ^5.2.6
+        version: 5.4.0(eslint-config-prettier@10.1.2(eslint@9.26.0(jiti@1.21.7)))(eslint@9.26.0(jiti@1.21.7))(prettier@3.5.3)
       eslint-plugin-react:
         specifier: ^7.37.5
-        version: 7.37.5(eslint@9.29.0(jiti@1.21.7))
+        version: 7.37.5(eslint@9.26.0(jiti@1.21.7))
       eslint-plugin-react-hooks:
-        specifier: ^5.2.0
-        version: 5.2.0(eslint@9.29.0(jiti@1.21.7))
+        specifier: ^4.6.2
+        version: 4.6.2(eslint@9.26.0(jiti@1.21.7))
       eslint-plugin-react-refresh:
         specifier: ^0.4.20
-        version: 0.4.20(eslint@9.29.0(jiti@1.21.7))
+        version: 0.4.20(eslint@9.26.0(jiti@1.21.7))
       eslint-plugin-unicorn:
-        specifier: ^59.0.1
-        version: 59.0.1(eslint@9.29.0(jiti@1.21.7))
+        specifier: ^55.0.0
+        version: 55.0.0(eslint@9.26.0(jiti@1.21.7))
       globals:
-        specifier: ^16.2.0
-        version: 16.2.0
+        specifier: ^15.15.0
+        version: 15.15.0
       happy-dom:
-        specifier: ^18.0.1
-        version: 18.0.1
+        specifier: ^17.4.6
+        version: 17.4.6
       jsonc-eslint-parser:
         specifier: ^2.4.0
         version: 2.4.0
       msw:
-        specifier: ^2.10.2
-        version: 2.10.2(@types/node@24.0.3)(typescript@5.8.3)
+        specifier: ^2.7.5
+        version: 2.7.6(@types/node@22.15.14)(typescript@5.8.3)
       openapi-merge-cli:
         specifier: ^1.3.2
         version: 1.3.2
@@ -229,17 +229,17 @@ importers:
         specifier: ~5.8.3
         version: 5.8.3
       typescript-eslint:
-        specifier: ^8.34.1
-        version: 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+        specifier: ^8.31.1
+        version: 8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
       vite:
-        specifier: ^6.3.5
-        version: 6.3.5(@types/node@24.0.3)(jiti@1.21.7)
+        specifier: ^5.4.19
+        version: 5.4.19(@types/node@22.15.14)
       vite-plugin-css-injected-by-js:
         specifier: ^3.5.2
-        version: 3.5.2(vite@6.3.5(@types/node@24.0.3)(jiti@1.21.7))
+        version: 3.5.2(vite@5.4.19(@types/node@22.15.14))
       vitest:
-        specifier: ^3.2.4
-        version: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.3)(happy-dom@18.0.1)(jiti@1.21.7)(msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3))
+        specifier: ^2.1.9
+        version: 2.1.9(@types/node@22.15.14)(happy-dom@17.4.6)(msw@2.7.6(@types/node@22.15.14)(typescript@5.8.3))
       web-worker:
         specifier: ^1.5.0
         version: 1.5.0
@@ -267,34 +267,62 @@ packages:
     resolution: {integrity: sha512-9K6xOqeevacvweLGik6LnZCb1fBtCOSIWQs8d096XGeqoLKC33UVMGz9+77Gw44KvbH4pKcQPWo4ZpxkXYj05w==}
     engines: {node: '>= 16'}
 
-  '@ark-ui/react@5.14.0':
-    resolution: {integrity: sha512-7WWlCM3SowtF01e9NouuO4T6SYuKTM1dovR+2NZuuWTlqTBlvZ+1vPHS6BeqzXriwMLU7QUU+Y0i/TcI6/s/Sg==}
+  '@ark-ui/react@5.12.0':
+    resolution: {integrity: sha512-UV89EqyESZoyr6rtvrbFJn/FejpswhvRVcfK44dZDU6h6UY8CxfR/6Ayvrq9UtFdD0dEawqwWrXS22l8Y05Nnw==}
     peerDependencies:
       react: '>=18.0.0'
       react-dom: '>=18.0.0'
 
+  '@babel/code-frame@7.26.2':
+    resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
+    engines: {node: '>=6.9.0'}
+
   '@babel/code-frame@7.27.1':
     resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/generator@7.27.5':
-    resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==}
+  '@babel/generator@7.17.7':
+    resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==}
+    engines: {node: '>=6.9.0'}
+
+  '@babel/generator@7.26.10':
+    resolution: {integrity: sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==}
+    engines: {node: '>=6.9.0'}
+
+  '@babel/helper-environment-visitor@7.24.7':
+    resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==}
+    engines: {node: '>=6.9.0'}
+
+  '@babel/helper-function-name@7.24.7':
+    resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==}
+    engines: {node: '>=6.9.0'}
+
+  '@babel/helper-hoist-variables@7.24.7':
+    resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==}
     engines: {node: '>=6.9.0'}
 
   '@babel/helper-module-imports@7.25.9':
     resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/helper-string-parser@7.27.1':
-    resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+  '@babel/helper-split-export-declaration@7.24.7':
+    resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==}
+    engines: {node: '>=6.9.0'}
+
+  '@babel/helper-string-parser@7.25.9':
+    resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
+    engines: {node: '>=6.9.0'}
+
+  '@babel/helper-validator-identifier@7.25.9':
+    resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
     engines: {node: '>=6.9.0'}
 
   '@babel/helper-validator-identifier@7.27.1':
     resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/parser@7.27.5':
-    resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==}
+  '@babel/parser@7.26.10':
+    resolution: {integrity: sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==}
     engines: {node: '>=6.0.0'}
     hasBin: true
 
@@ -302,25 +330,28 @@ packages:
     resolution: {integrity: sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/runtime@7.27.6':
-    resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==}
+  '@babel/template@7.26.9':
+    resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/template@7.27.2':
-    resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
+  '@babel/traverse@7.23.2':
+    resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/traverse@7.27.4':
-    resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==}
+  '@babel/traverse@7.26.10':
+    resolution: {integrity: sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/types@7.27.6':
-    resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==}
+  '@babel/types@7.17.0':
+    resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==}
     engines: {node: '>=6.9.0'}
 
-  '@bcoe/v8-coverage@1.0.2':
-    resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==}
-    engines: {node: '>=18'}
+  '@babel/types@7.26.10':
+    resolution: {integrity: sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==}
+    engines: {node: '>=6.9.0'}
+
+  '@bcoe/v8-coverage@0.2.3':
+    resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
 
   '@bundled-es-modules/cookie@2.0.1':
     resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==}
@@ -334,8 +365,8 @@ packages:
   '@chakra-ui/anatomy@2.3.4':
     resolution: {integrity: sha512-fFIYN7L276gw0Q7/ikMMlZxP7mvnjRaWJ7f3Jsf9VtDOi6eAYIBRrhQe6+SZ0PGmoOkRaBc7gSE5oeIbgFFyrw==}
 
-  '@chakra-ui/react@3.21.0':
-    resolution: {integrity: sha512-Ajw6GuUhfNhMagTM9cO1Lg/w/HSQUwsv55j2QvvvPw/dk01wHiGi1aihfuCLpa6QY4ElLNs6SS3f78xI9Fwo6A==}
+  '@chakra-ui/react@3.20.0':
+    resolution: {integrity: sha512-zHYQAUqrT2pZZ/Xi+sskRC/An9q4ZelLPJkFHdobftTYkcFo1FtkMbBO0AEBZhb/6mZGyfw3JLflSawkuR++uQ==}
     peerDependencies:
       '@emotion/react': '>=11'
       react: '>=18'
@@ -352,11 +383,11 @@ packages:
   '@codemirror/commands@6.8.1':
     resolution: {integrity: sha512-KlGVYufHMQzxbdQONiLyGQDUW0itrLZwq3CcY7xpv9ZLRHqzkBSoteocBHtMCoY7/Ci4xhzSrToIeLg7FxHuaw==}
 
-  '@codemirror/lang-json@6.0.2':
-    resolution: {integrity: sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==}
+  '@codemirror/lang-json@6.0.1':
+    resolution: {integrity: sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==}
 
-  '@codemirror/language@6.11.1':
-    resolution: {integrity: sha512-5kS1U7emOGV84vxC+ruBty5sUgcD0te6dyupyRVG2zaSjhTDM73LhVKUtVwiqSe6QwmEoA4SCiU8AKPFyumAWQ==}
+  '@codemirror/language@6.11.0':
+    resolution: {integrity: sha512-A7+f++LodNNc1wGgoRDTt78cOwWm9KVezApgjOMp1W4hM0898nsqBXwF+sbePE7ZRcjN7Sa1Z5m2oN27XkmEjQ==}
 
   '@codemirror/lint@6.8.2':
     resolution: {integrity: sha512-PDFG5DjHxSEjOXk9TQYYVjZDqlZTFaDBfhQixHnQOEVDDNHUbEh/hstAjcQJaA6FQdZTD1hquXTK0rVBLADR1g==}
@@ -370,8 +401,8 @@ packages:
   '@codemirror/theme-one-dark@6.1.2':
     resolution: {integrity: sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA==}
 
-  '@codemirror/view@6.37.2':
-    resolution: {integrity: sha512-XD3LdgQpxQs5jhOOZ2HRVT+Rj59O4Suc7g2ULvZ+Yi8eCkickrkZ5JFuoDhs2ST1mNI5zSsNYgR3NGa4OUrbnw==}
+  '@codemirror/view@6.36.4':
+    resolution: {integrity: sha512-ZQ0V5ovw/miKEXTvjgzRyjnrk9TwriUB1k4R5p7uNnHR9Hus+D1SXHGdJshijEzPFjU25xea/7nhIeSqYFKdbA==}
 
   '@emotion/babel-plugin@11.13.5':
     resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==}
@@ -417,156 +448,150 @@ packages:
   '@emotion/weak-memoize@0.4.0':
     resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==}
 
-  '@esbuild/aix-ppc64@0.25.5':
-    resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==}
-    engines: {node: '>=18'}
+  '@esbuild/aix-ppc64@0.21.5':
+    resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
+    engines: {node: '>=12'}
     cpu: [ppc64]
     os: [aix]
 
-  '@esbuild/android-arm64@0.25.5':
-    resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==}
-    engines: {node: '>=18'}
+  '@esbuild/android-arm64@0.21.5':
+    resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
+    engines: {node: '>=12'}
     cpu: [arm64]
     os: [android]
 
-  '@esbuild/android-arm@0.25.5':
-    resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==}
-    engines: {node: '>=18'}
+  '@esbuild/android-arm@0.21.5':
+    resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
+    engines: {node: '>=12'}
     cpu: [arm]
     os: [android]
 
-  '@esbuild/android-x64@0.25.5':
-    resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==}
-    engines: {node: '>=18'}
+  '@esbuild/android-x64@0.21.5':
+    resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
+    engines: {node: '>=12'}
     cpu: [x64]
     os: [android]
 
-  '@esbuild/darwin-arm64@0.25.5':
-    resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==}
-    engines: {node: '>=18'}
+  '@esbuild/darwin-arm64@0.21.5':
+    resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
+    engines: {node: '>=12'}
     cpu: [arm64]
     os: [darwin]
 
-  '@esbuild/darwin-x64@0.25.5':
-    resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==}
-    engines: {node: '>=18'}
+  '@esbuild/darwin-x64@0.21.5':
+    resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
+    engines: {node: '>=12'}
     cpu: [x64]
     os: [darwin]
 
-  '@esbuild/freebsd-arm64@0.25.5':
-    resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==}
-    engines: {node: '>=18'}
+  '@esbuild/freebsd-arm64@0.21.5':
+    resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
+    engines: {node: '>=12'}
     cpu: [arm64]
     os: [freebsd]
 
-  '@esbuild/freebsd-x64@0.25.5':
-    resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==}
-    engines: {node: '>=18'}
+  '@esbuild/freebsd-x64@0.21.5':
+    resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
+    engines: {node: '>=12'}
     cpu: [x64]
     os: [freebsd]
 
-  '@esbuild/linux-arm64@0.25.5':
-    resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==}
-    engines: {node: '>=18'}
+  '@esbuild/linux-arm64@0.21.5':
+    resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
+    engines: {node: '>=12'}
     cpu: [arm64]
     os: [linux]
 
-  '@esbuild/linux-arm@0.25.5':
-    resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==}
-    engines: {node: '>=18'}
+  '@esbuild/linux-arm@0.21.5':
+    resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
+    engines: {node: '>=12'}
     cpu: [arm]
     os: [linux]
 
-  '@esbuild/linux-ia32@0.25.5':
-    resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==}
-    engines: {node: '>=18'}
+  '@esbuild/linux-ia32@0.21.5':
+    resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
+    engines: {node: '>=12'}
     cpu: [ia32]
     os: [linux]
 
-  '@esbuild/linux-loong64@0.25.5':
-    resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==}
-    engines: {node: '>=18'}
+  '@esbuild/linux-loong64@0.21.5':
+    resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
+    engines: {node: '>=12'}
     cpu: [loong64]
     os: [linux]
 
-  '@esbuild/linux-mips64el@0.25.5':
-    resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==}
-    engines: {node: '>=18'}
+  '@esbuild/linux-mips64el@0.21.5':
+    resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
+    engines: {node: '>=12'}
     cpu: [mips64el]
     os: [linux]
 
-  '@esbuild/linux-ppc64@0.25.5':
-    resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==}
-    engines: {node: '>=18'}
+  '@esbuild/linux-ppc64@0.21.5':
+    resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
+    engines: {node: '>=12'}
     cpu: [ppc64]
     os: [linux]
 
-  '@esbuild/linux-riscv64@0.25.5':
-    resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==}
-    engines: {node: '>=18'}
+  '@esbuild/linux-riscv64@0.21.5':
+    resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
+    engines: {node: '>=12'}
     cpu: [riscv64]
     os: [linux]
 
-  '@esbuild/linux-s390x@0.25.5':
-    resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==}
-    engines: {node: '>=18'}
+  '@esbuild/linux-s390x@0.21.5':
+    resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
+    engines: {node: '>=12'}
     cpu: [s390x]
     os: [linux]
 
-  '@esbuild/linux-x64@0.25.5':
-    resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==}
-    engines: {node: '>=18'}
+  '@esbuild/linux-x64@0.21.5':
+    resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
+    engines: {node: '>=12'}
     cpu: [x64]
     os: [linux]
 
-  '@esbuild/netbsd-arm64@0.25.5':
-    resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [netbsd]
-
-  '@esbuild/netbsd-x64@0.25.5':
-    resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==}
-    engines: {node: '>=18'}
+  '@esbuild/netbsd-x64@0.21.5':
+    resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
+    engines: {node: '>=12'}
     cpu: [x64]
     os: [netbsd]
 
-  '@esbuild/openbsd-arm64@0.25.5':
-    resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [openbsd]
-
-  '@esbuild/openbsd-x64@0.25.5':
-    resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==}
-    engines: {node: '>=18'}
+  '@esbuild/openbsd-x64@0.21.5':
+    resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
+    engines: {node: '>=12'}
     cpu: [x64]
     os: [openbsd]
 
-  '@esbuild/sunos-x64@0.25.5':
-    resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==}
-    engines: {node: '>=18'}
+  '@esbuild/sunos-x64@0.21.5':
+    resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
+    engines: {node: '>=12'}
     cpu: [x64]
     os: [sunos]
 
-  '@esbuild/win32-arm64@0.25.5':
-    resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==}
-    engines: {node: '>=18'}
+  '@esbuild/win32-arm64@0.21.5':
+    resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
+    engines: {node: '>=12'}
     cpu: [arm64]
     os: [win32]
 
-  '@esbuild/win32-ia32@0.25.5':
-    resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==}
-    engines: {node: '>=18'}
+  '@esbuild/win32-ia32@0.21.5':
+    resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
+    engines: {node: '>=12'}
     cpu: [ia32]
     os: [win32]
 
-  '@esbuild/win32-x64@0.25.5':
-    resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==}
-    engines: {node: '>=18'}
+  '@esbuild/win32-x64@0.21.5':
+    resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
+    engines: {node: '>=12'}
     cpu: [x64]
     os: [win32]
 
+  '@eslint-community/eslint-utils@4.5.1':
+    resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    peerDependencies:
+      eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+
   '@eslint-community/eslint-utils@4.7.0':
     resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -577,8 +602,8 @@ packages:
     resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
     engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
 
-  '@eslint/compat@1.3.0':
-    resolution: {integrity: sha512-ZBygRBqpDYiIHsN+d1WyHn3TYgzgpzLEcgJUxTATyiInQbKZz6wZb6+ljwdg8xeeOe4v03z6Uh6lELiw0/mVhQ==}
+  '@eslint/compat@1.2.9':
+    resolution: {integrity: sha512-gCdSY54n7k+driCadyMNv8JSPzYLeDVM/ikZRtvtROBpRdFSkS8W9A82MqsaY7lZuwL0wiapgD0NT1xT0hyJsA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       eslint: ^9.10.0
@@ -586,32 +611,24 @@ packages:
       eslint:
         optional: true
 
-  '@eslint/config-array@0.20.1':
-    resolution: {integrity: sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==}
+  '@eslint/config-array@0.20.0':
+    resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@eslint/config-helpers@0.2.3':
-    resolution: {integrity: sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==}
+  '@eslint/config-helpers@0.2.2':
+    resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
   '@eslint/core@0.13.0':
     resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@eslint/core@0.14.0':
-    resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@eslint/core@0.15.0':
-    resolution: {integrity: sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
   '@eslint/eslintrc@3.3.1':
     resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@eslint/js@9.29.0':
-    resolution: {integrity: sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==}
+  '@eslint/js@9.26.0':
+    resolution: {integrity: sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
   '@eslint/object-schema@2.1.6':
@@ -622,10 +639,6 @@ packages:
     resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@eslint/plugin-kit@0.3.2':
-    resolution: {integrity: sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
   '@floating-ui/core@1.6.9':
     resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==}
 
@@ -664,12 +677,12 @@ packages:
     resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
     engines: {node: '>=18.18'}
 
-  '@humanwhocodes/retry@0.4.3':
-    resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
+  '@humanwhocodes/retry@0.4.2':
+    resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==}
     engines: {node: '>=18.18'}
 
-  '@inquirer/confirm@5.1.12':
-    resolution: {integrity: sha512-dpq+ielV9/bqgXRUbNH//KsY6WEw9DrGPmipkpmgC1Y46cwuBTNx7PXFWTjc3MQ+urcc0QxoVHcMI0FW4Ok0hg==}
+  '@inquirer/confirm@5.1.8':
+    resolution: {integrity: sha512-dNLWCYZvXDjO3rnQfk2iuJNL4Ivwz/T2+C3+WnNfJKsNGSuOs3wAo2F6e0p946gtSAk31nZMfW+MRmYaplPKsg==}
     engines: {node: '>=18'}
     peerDependencies:
       '@types/node': '>=18'
@@ -677,8 +690,8 @@ packages:
       '@types/node':
         optional: true
 
-  '@inquirer/core@10.1.13':
-    resolution: {integrity: sha512-1viSxebkYN2nJULlzCxES6G9/stgHSepZ9LqqfdIGPHj5OHhiBUXVS0a6R0bEC2A+VL4D9w6QB66ebCr6HGllA==}
+  '@inquirer/core@10.1.9':
+    resolution: {integrity: sha512-sXhVB8n20NYkUBfDYgizGHlpRVaCRjtuzNZA6xpALIUbkgfd2Hjz+DfEN6+h1BRnuxw0/P4jCIMjMsEOAMwAJw==}
     engines: {node: '>=18'}
     peerDependencies:
       '@types/node': '>=18'
@@ -686,12 +699,12 @@ packages:
       '@types/node':
         optional: true
 
-  '@inquirer/figures@1.0.12':
-    resolution: {integrity: sha512-MJttijd8rMFcKJC8NYmprWr6hD3r9Gd9qUC0XwPNwoEPWSMVJwA2MlXxF+nhZZNMY+HXsWa+o7KY2emWYIn0jQ==}
+  '@inquirer/figures@1.0.11':
+    resolution: {integrity: sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==}
     engines: {node: '>=18'}
 
-  '@inquirer/type@3.0.7':
-    resolution: {integrity: sha512-PfunHQcjwnju84L+ycmcMKB/pTPIngjUJvfnRhKY6FKPuYXlM4aQCb/nIdTFR6BEhMjFvngzvng/vBAJMZpLSA==}
+  '@inquirer/type@3.0.5':
+    resolution: {integrity: sha512-ZJpeIYYueOz/i/ONzrfof8g89kNdO2hjGuvULROo3O8rlB2CRtSseE5KeirnyE4t/thAn/EwvS/vuQeJCn+NZg==}
     engines: {node: '>=18'}
     peerDependencies:
       '@types/node': '>=18'
@@ -699,19 +712,11 @@ packages:
       '@types/node':
         optional: true
 
-  '@internationalized/date@3.8.2':
-    resolution: {integrity: sha512-/wENk7CbvLbkUvX1tu0mwq49CVkkWpkXubGel6birjRPyo6uQ4nQpnq5xZu823zRCwwn82zgHrvgF1vZyvmVgA==}
+  '@internationalized/date@3.8.1':
+    resolution: {integrity: sha512-PgVE6B6eIZtzf9Gu5HvJxRK3ufUFz9DhspELuhW/N0GuMGMTLvPQNRkHP2hTuP9lblOk+f+1xi96sPiPXANXAA==}
 
-  '@internationalized/number@3.6.3':
-    resolution: {integrity: sha512-p+Zh1sb6EfrfVaS86jlHGQ9HA66fJhV9x5LiE5vCbZtXEHAuhcmUZUdZ4WrFpUBfNalr2OkAJI5AcKEQF+Lebw==}
-
-  '@isaacs/balanced-match@4.0.1':
-    resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
-    engines: {node: 20 || >=22}
-
-  '@isaacs/brace-expansion@5.0.0':
-    resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
-    engines: {node: 20 || >=22}
+  '@internationalized/number@3.6.2':
+    resolution: {integrity: sha512-E5QTOlMg9wo5OrKdHD6edo1JJlIoOsylh0+mbf0evi1tHJwMZfJSaBpGtnJV9N7w3jeiioox9EG/EWRWPh82vg==}
 
   '@isaacs/cliui@8.0.2':
     resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
@@ -760,8 +765,12 @@ packages:
   '@marijn/find-cluster-break@1.0.2':
     resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==}
 
-  '@mswjs/interceptors@0.39.2':
-    resolution: {integrity: sha512-RuzCup9Ct91Y7V79xwCb146RaBRHZ7NBbrIUySumd1rpKqHL5OonaqrGIbug5hNwP/fRyxFMA6ISgw4FTtYFYg==}
+  '@modelcontextprotocol/sdk@1.11.0':
+    resolution: {integrity: sha512-k/1pb70eD638anoi0e8wUGAlbMJXyvdV4p62Ko+EZ7eBe1xMx8Uhak1R5DgfoofsK5IBBnRwsYGTaLZl+6/+RQ==}
+    engines: {node: '>=18'}
+
+  '@mswjs/interceptors@0.37.6':
+    resolution: {integrity: sha512-wK+5pLK5XFmgtH3aQ2YVvA3HohS3xqV/OxuVOdNx9Wpnz7VE/fnC+e1A7ln6LFYeck7gOJ/dsZV6OLplOtAJ2w==}
     engines: {node: '>=18'}
 
   '@nodelib/fs.scandir@2.1.5':
@@ -792,181 +801,182 @@ packages:
     resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
     engines: {node: '>=14'}
 
-  '@pkgr/core@0.2.7':
-    resolution: {integrity: sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==}
+  '@pkgr/core@0.2.4':
+    resolution: {integrity: sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==}
     engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
 
-  '@rolldown/pluginutils@1.0.0-beta.11':
-    resolution: {integrity: sha512-L/gAA/hyCSuzTF1ftlzUSI/IKr2POHsv1Dd78GfqkR83KMNuswWD61JxGV2L7nRwBBBSDr6R1gCkdTmoN7W4ag==}
+  '@remix-run/router@1.23.0':
+    resolution: {integrity: sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==}
+    engines: {node: '>=14.0.0'}
 
-  '@rollup/rollup-android-arm-eabi@4.44.0':
-    resolution: {integrity: sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==}
+  '@rollup/rollup-android-arm-eabi@4.40.1':
+    resolution: {integrity: sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==}
     cpu: [arm]
     os: [android]
 
-  '@rollup/rollup-android-arm64@4.44.0':
-    resolution: {integrity: sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw==}
+  '@rollup/rollup-android-arm64@4.40.1':
+    resolution: {integrity: sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw==}
     cpu: [arm64]
     os: [android]
 
-  '@rollup/rollup-darwin-arm64@4.44.0':
-    resolution: {integrity: sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==}
+  '@rollup/rollup-darwin-arm64@4.40.1':
+    resolution: {integrity: sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA==}
     cpu: [arm64]
     os: [darwin]
 
-  '@rollup/rollup-darwin-x64@4.44.0':
-    resolution: {integrity: sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==}
+  '@rollup/rollup-darwin-x64@4.40.1':
+    resolution: {integrity: sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw==}
     cpu: [x64]
     os: [darwin]
 
-  '@rollup/rollup-freebsd-arm64@4.44.0':
-    resolution: {integrity: sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ==}
+  '@rollup/rollup-freebsd-arm64@4.40.1':
+    resolution: {integrity: sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw==}
     cpu: [arm64]
     os: [freebsd]
 
-  '@rollup/rollup-freebsd-x64@4.44.0':
-    resolution: {integrity: sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g==}
+  '@rollup/rollup-freebsd-x64@4.40.1':
+    resolution: {integrity: sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q==}
     cpu: [x64]
     os: [freebsd]
 
-  '@rollup/rollup-linux-arm-gnueabihf@4.44.0':
-    resolution: {integrity: sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==}
+  '@rollup/rollup-linux-arm-gnueabihf@4.40.1':
+    resolution: {integrity: sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==}
     cpu: [arm]
     os: [linux]
 
-  '@rollup/rollup-linux-arm-musleabihf@4.44.0':
-    resolution: {integrity: sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==}
+  '@rollup/rollup-linux-arm-musleabihf@4.40.1':
+    resolution: {integrity: sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==}
     cpu: [arm]
     os: [linux]
 
-  '@rollup/rollup-linux-arm64-gnu@4.44.0':
-    resolution: {integrity: sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==}
+  '@rollup/rollup-linux-arm64-gnu@4.40.1':
+    resolution: {integrity: sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==}
     cpu: [arm64]
     os: [linux]
 
-  '@rollup/rollup-linux-arm64-musl@4.44.0':
-    resolution: {integrity: sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==}
+  '@rollup/rollup-linux-arm64-musl@4.40.1':
+    resolution: {integrity: sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==}
     cpu: [arm64]
     os: [linux]
 
-  '@rollup/rollup-linux-loongarch64-gnu@4.44.0':
-    resolution: {integrity: sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==}
+  '@rollup/rollup-linux-loongarch64-gnu@4.40.1':
+    resolution: {integrity: sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==}
     cpu: [loong64]
     os: [linux]
 
-  '@rollup/rollup-linux-powerpc64le-gnu@4.44.0':
-    resolution: {integrity: sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==}
+  '@rollup/rollup-linux-powerpc64le-gnu@4.40.1':
+    resolution: {integrity: sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==}
     cpu: [ppc64]
     os: [linux]
 
-  '@rollup/rollup-linux-riscv64-gnu@4.44.0':
-    resolution: {integrity: sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==}
+  '@rollup/rollup-linux-riscv64-gnu@4.40.1':
+    resolution: {integrity: sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==}
     cpu: [riscv64]
     os: [linux]
 
-  '@rollup/rollup-linux-riscv64-musl@4.44.0':
-    resolution: {integrity: sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==}
+  '@rollup/rollup-linux-riscv64-musl@4.40.1':
+    resolution: {integrity: sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==}
     cpu: [riscv64]
     os: [linux]
 
-  '@rollup/rollup-linux-s390x-gnu@4.44.0':
-    resolution: {integrity: sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==}
+  '@rollup/rollup-linux-s390x-gnu@4.40.1':
+    resolution: {integrity: sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==}
     cpu: [s390x]
     os: [linux]
 
-  '@rollup/rollup-linux-x64-gnu@4.44.0':
-    resolution: {integrity: sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==}
+  '@rollup/rollup-linux-x64-gnu@4.40.1':
+    resolution: {integrity: sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==}
     cpu: [x64]
     os: [linux]
 
-  '@rollup/rollup-linux-x64-musl@4.44.0':
-    resolution: {integrity: sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==}
+  '@rollup/rollup-linux-x64-musl@4.40.1':
+    resolution: {integrity: sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==}
     cpu: [x64]
     os: [linux]
 
-  '@rollup/rollup-win32-arm64-msvc@4.44.0':
-    resolution: {integrity: sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==}
+  '@rollup/rollup-win32-arm64-msvc@4.40.1':
+    resolution: {integrity: sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==}
     cpu: [arm64]
     os: [win32]
 
-  '@rollup/rollup-win32-ia32-msvc@4.44.0':
-    resolution: {integrity: sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA==}
+  '@rollup/rollup-win32-ia32-msvc@4.40.1':
+    resolution: {integrity: sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA==}
     cpu: [ia32]
     os: [win32]
 
-  '@rollup/rollup-win32-x64-msvc@4.44.0':
-    resolution: {integrity: sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==}
+  '@rollup/rollup-win32-x64-msvc@4.40.1':
+    resolution: {integrity: sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA==}
     cpu: [x64]
     os: [win32]
 
-  '@stylistic/eslint-plugin@4.4.1':
-    resolution: {integrity: sha512-CEigAk7eOLyHvdgmpZsKFwtiqS2wFwI1fn4j09IU9GmD4euFM4jEBAViWeCqaNLlbX2k2+A/Fq9cje4HQBXuJQ==}
+  '@stylistic/eslint-plugin@2.13.0':
+    resolution: {integrity: sha512-RnO1SaiCFHn666wNz2QfZEFxvmiNRqhzaMXHXxXXKt+MEP7aajlPxUSMIQpKAaJfverpovEYqjBOXDq6dDcaOQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
-      eslint: '>=9.0.0'
+      eslint: '>=8.40.0'
 
-  '@swc/core-darwin-arm64@1.12.4':
-    resolution: {integrity: sha512-HihKfeitjZU2ab94Zf893sxzFryLKX0TweGsNXXOLNtkSMLw50auuYfpRM0BOL9/uXXtuCWgRIF6P030SAX5xQ==}
+  '@swc/core-darwin-arm64@1.11.24':
+    resolution: {integrity: sha512-dhtVj0PC1APOF4fl5qT2neGjRLgHAAYfiVP8poJelhzhB/318bO+QCFWAiimcDoyMgpCXOhTp757gnoJJrheWA==}
     engines: {node: '>=10'}
     cpu: [arm64]
     os: [darwin]
 
-  '@swc/core-darwin-x64@1.12.4':
-    resolution: {integrity: sha512-meYCXHyYb6RDdu2N5PNAf0EelyxPBFhRcVo4kBFLuvuNb0m6EUg///VWy8MUMXq9/s9uzGS9kJVXXdRdr/d6FA==}
+  '@swc/core-darwin-x64@1.11.24':
+    resolution: {integrity: sha512-H/3cPs8uxcj2Fe3SoLlofN5JG6Ny5bl8DuZ6Yc2wr7gQFBmyBkbZEz+sPVgsID7IXuz7vTP95kMm1VL74SO5AQ==}
     engines: {node: '>=10'}
     cpu: [x64]
     os: [darwin]
 
-  '@swc/core-linux-arm-gnueabihf@1.12.4':
-    resolution: {integrity: sha512-szfDbf7mE8V64of0q/LSqbk+em+T+TD3uqnH40Z7Qu/aL8vi5CHgyLjWG2SLkLLpyjgkAUF6AKrupgnBYcC2NA==}
+  '@swc/core-linux-arm-gnueabihf@1.11.24':
+    resolution: {integrity: sha512-PHJgWEpCsLo/NGj+A2lXZ2mgGjsr96ULNW3+T3Bj2KTc8XtMUkE8tmY2Da20ItZOvPNC/69KroU7edyo1Flfbw==}
     engines: {node: '>=10'}
     cpu: [arm]
     os: [linux]
 
-  '@swc/core-linux-arm64-gnu@1.12.4':
-    resolution: {integrity: sha512-n0IY76w+Scx8m3HIVRvLkoResuwsQgjDfAk9bxn99dq4leQO+mE0fkPl0Yw/1BIsPh+kxGfopIJH9zsZ1Z2YrA==}
+  '@swc/core-linux-arm64-gnu@1.11.24':
+    resolution: {integrity: sha512-C2FJb08+n5SD4CYWCTZx1uR88BN41ZieoHvI8A55hfVf2woT8+6ZiBzt74qW2g+ntZ535Jts5VwXAKdu41HpBg==}
     engines: {node: '>=10'}
     cpu: [arm64]
     os: [linux]
 
-  '@swc/core-linux-arm64-musl@1.12.4':
-    resolution: {integrity: sha512-wE5jmFi5cEQyLy8WmCWmNwfKETrnzy2D8YNi/xpYWpLPWqPhcelpa6tswkfYlbsMmmOh7hQNoTba1QdGu0jvHQ==}
+  '@swc/core-linux-arm64-musl@1.11.24':
+    resolution: {integrity: sha512-ypXLIdszRo0re7PNNaXN0+2lD454G8l9LPK/rbfRXnhLWDBPURxzKlLlU/YGd2zP98wPcVooMmegRSNOKfvErw==}
     engines: {node: '>=10'}
     cpu: [arm64]
     os: [linux]
 
-  '@swc/core-linux-x64-gnu@1.12.4':
-    resolution: {integrity: sha512-6S50Xd/7ePjEwrXyHMxpKTZ+KBrgUwMA8hQPbArUOwH4S5vHBr51heL0iXbUkppn1bkSr0J0IbOove5hzn+iqQ==}
+  '@swc/core-linux-x64-gnu@1.11.24':
+    resolution: {integrity: sha512-IM7d+STVZD48zxcgo69L0yYptfhaaE9cMZ+9OoMxirNafhKKXwoZuufol1+alEFKc+Wbwp+aUPe/DeWC/Lh3dg==}
     engines: {node: '>=10'}
     cpu: [x64]
     os: [linux]
 
-  '@swc/core-linux-x64-musl@1.12.4':
-    resolution: {integrity: sha512-hbYRyaHhC13vYKuGG5BrAG5fjjWEQFfQetuFp/4QKEoXDzdnabJoixxWTQACDL3m0JW32nJ+gUzsYIPtFYkwXg==}
+  '@swc/core-linux-x64-musl@1.11.24':
+    resolution: {integrity: sha512-DZByJaMVzSfjQKKQn3cqSeqwy6lpMaQDQQ4HPlch9FWtDx/dLcpdIhxssqZXcR2rhaQVIaRQsCqwV6orSDGAGw==}
     engines: {node: '>=10'}
     cpu: [x64]
     os: [linux]
 
-  '@swc/core-win32-arm64-msvc@1.12.4':
-    resolution: {integrity: sha512-e6EbfjPL8GA/bb1lc9Omtxjlz+1ThTsAuBsy4Q3Kpbuh6B3jclg8KzxU/6t91v23wG593mieTyR5f3Pr7X3AWw==}
+  '@swc/core-win32-arm64-msvc@1.11.24':
+    resolution: {integrity: sha512-Q64Ytn23y9aVDKN5iryFi8mRgyHw3/kyjTjT4qFCa8AEb5sGUuSj//AUZ6c0J7hQKMHlg9do5Etvoe61V98/JQ==}
     engines: {node: '>=10'}
     cpu: [arm64]
     os: [win32]
 
-  '@swc/core-win32-ia32-msvc@1.12.4':
-    resolution: {integrity: sha512-RG2FzmllBTUf4EksANlIvLckcBrLZEA0t13LIa6L213UZKQfEuDNHezqESgoVhJMg2S/tWauitATOCFgZNSmjg==}
+  '@swc/core-win32-ia32-msvc@1.11.24':
+    resolution: {integrity: sha512-9pKLIisE/Hh2vJhGIPvSoTK4uBSPxNVyXHmOrtdDot4E1FUUI74Vi8tFdlwNbaj8/vusVnb8xPXsxF1uB0VgiQ==}
     engines: {node: '>=10'}
     cpu: [ia32]
     os: [win32]
 
-  '@swc/core-win32-x64-msvc@1.12.4':
-    resolution: {integrity: sha512-oRHKnZlR83zaMeVUCmHENa4j5uNRAWbmEpjYbzRcfC45LPFNWKGWGAGERLx0u87XMUtTGqnVYxnBTHN/rzDHOw==}
+  '@swc/core-win32-x64-msvc@1.11.24':
+    resolution: {integrity: sha512-sybnXtOsdB+XvzVFlBVGgRHLqp3yRpHK7CrmpuDKszhj/QhmsaZzY/GHSeALlMtLup13M0gqbcQvsTNlAHTg3w==}
     engines: {node: '>=10'}
     cpu: [x64]
     os: [win32]
 
-  '@swc/core@1.12.4':
-    resolution: {integrity: sha512-hn30ebV4njAn0NAUM+3a0qCF+MJgqTNSrfA/hUAbC6TVjOQy2OYGQwkUvCu/V7S2+rZxrUsTpKOnZ7qqECZV9Q==}
+  '@swc/core@1.11.24':
+    resolution: {integrity: sha512-MaQEIpfcEMzx3VWWopbofKJvaraqmL6HbLlw2bFZ7qYqYw3rkhM0cQVEgyzbHtTWwCwPMFZSC2DUbhlZgrMfLg==}
     engines: {node: '>=10'}
     peerDependencies:
       '@swc/helpers': '>=0.5.17'
@@ -977,22 +987,22 @@ packages:
   '@swc/counter@0.1.3':
     resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
 
-  '@swc/helpers@0.5.17':
-    resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+  '@swc/helpers@0.5.15':
+    resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
 
-  '@swc/types@0.1.23':
-    resolution: {integrity: sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==}
+  '@swc/types@0.1.21':
+    resolution: {integrity: sha512-2YEtj5HJVbKivud9N4bpPBAyZhj4S2Ipe5LkUG94alTpr7in/GU/EARgPAd3BwU+YOmFVJC2+kjqhGRi3r0ZpQ==}
 
-  '@tanstack/eslint-plugin-query@5.78.0':
-    resolution: {integrity: sha512-hYkhWr3UP0CkAsn/phBVR98UQawbw8CmTSgWtdgEBUjI60/GBaEIkpgi/Bp/2I8eIDK4+vdY7ac6jZx+GR+hEQ==}
+  '@tanstack/eslint-plugin-query@5.74.7':
+    resolution: {integrity: sha512-EeHuaaYiCOD+XOGyB7LMNEx9OEByAa5lkgP+S3ZggjKJpmIO6iRWeoIYYDKo2F8uc3qXcVhTfC7pn7NddQiNtA==}
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
 
-  '@tanstack/query-core@5.80.10':
-    resolution: {integrity: sha512-mUNQOtzxkjL6jLbyChZoSBP6A5gQDVRUiPvW+/zw/9ftOAz+H754zCj3D8PwnzPKyHzGkQ9JbH48ukhym9LK1Q==}
+  '@tanstack/query-core@5.75.4':
+    resolution: {integrity: sha512-pcqOUgWG9oGlzkfRQQMMsEFmtQu0wq81A414CtELZGq+ztVwSTAaoB3AZRAXQJs88LmNMk2YpUKuQbrvzNDyRg==}
 
-  '@tanstack/react-query@5.80.10':
-    resolution: {integrity: sha512-6zM098J8sLy9oU60XAdzUlAH4wVzoMVsWUWiiE/Iz4fd67PplxeyL4sw/MPcVJJVhbwGGXCsHn9GrQt2mlAzig==}
+  '@tanstack/react-query@5.75.4':
+    resolution: {integrity: sha512-Vf65pzYRkf8fk9SP1ncIZjvaXszBhtsvpf+h45Y/9kOywOrVZfBGUpCdffdsVzbmBzmz6TCFes9bM0d3pRrIsA==}
     peerDependencies:
       react: ^18 || ^19
 
@@ -1003,8 +1013,8 @@ packages:
       react: '>=16.8'
       react-dom: '>=16.8'
 
-  '@tanstack/react-virtual@3.13.10':
-    resolution: {integrity: sha512-nvrzk4E9mWB4124YdJ7/yzwou7IfHxlSef6ugCFcBfRmsnsma3heciiiV97sBNxyc3VuwtZvmwXd0aB5BpucVw==}
+  '@tanstack/react-virtual@3.13.8':
+    resolution: {integrity: sha512-meS2AanUg50f3FBSNoAdBSRAh8uS0ue01qm7zrw65KGJtiXB9QXfybqZwkh4uFpRv2iX/eu5tjcH5wqUpwYLPg==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
@@ -1013,8 +1023,8 @@ packages:
     resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==}
     engines: {node: '>=12'}
 
-  '@tanstack/virtual-core@3.13.10':
-    resolution: {integrity: sha512-sPEDhXREou5HyZYqSWIqdU580rsF6FGeN7vpzijmP3KTiOGjOMZASz4Y6+QKjiFQwhWrR58OP8izYaNGVxvViA==}
+  '@tanstack/virtual-core@3.13.8':
+    resolution: {integrity: sha512-BT6w89Hqy7YKaWewYzmecXQzcJh6HTBbKYJIIkMaNU49DZ06LoTV3z32DWWEdUsgW6n1xTmwTLs4GtWrZC261w==}
 
   '@testing-library/dom@10.4.0':
     resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==}
@@ -1039,21 +1049,14 @@ packages:
       '@types/react-dom':
         optional: true
 
-  '@trivago/prettier-plugin-sort-imports@5.2.2':
-    resolution: {integrity: sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA==}
-    engines: {node: '>18.12'}
+  '@trivago/prettier-plugin-sort-imports@4.3.0':
+    resolution: {integrity: sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ==}
     peerDependencies:
       '@vue/compiler-sfc': 3.x
       prettier: 2.x - 3.x
-      prettier-plugin-svelte: 3.x
-      svelte: 4.x || 5.x
     peerDependenciesMeta:
       '@vue/compiler-sfc':
         optional: true
-      prettier-plugin-svelte:
-        optional: true
-      svelte:
-        optional: true
 
   '@ts-morph/common@0.24.0':
     resolution: {integrity: sha512-c1xMmNHWpNselmpIqursHeOHHBTIsJLbB+NuovbTTRCNiTLEr/U9dbJ8qy0jd/O2x5pc3seWuOUN5R2IoOTp8A==}
@@ -1061,9 +1064,6 @@ packages:
   '@types/aria-query@5.0.4':
     resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==}
 
-  '@types/chai@5.2.2':
-    resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==}
-
   '@types/cookie@0.6.0':
     resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
 
@@ -1124,14 +1124,14 @@ packages:
   '@types/debug@4.1.12':
     resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
 
-  '@types/deep-eql@4.0.2':
-    resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
-
   '@types/estree-jsx@1.0.5':
     resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
 
-  '@types/estree@1.0.8':
-    resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+  '@types/estree@1.0.6':
+    resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
+
+  '@types/estree@1.0.7':
+    resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
 
   '@types/geojson@7946.0.16':
     resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==}
@@ -1154,19 +1154,22 @@ packages:
   '@types/ms@2.1.0':
     resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
 
-  '@types/node@20.19.1':
-    resolution: {integrity: sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA==}
+  '@types/node@22.15.14':
+    resolution: {integrity: sha512-BL1eyu/XWsFGTtDWOYULQEs4KR0qdtYfCxYAUYRoB7JP7h9ETYLgQTww6kH8Sj2C0pFGgrpM0XKv6/kbIzYJ1g==}
 
-  '@types/node@24.0.3':
-    resolution: {integrity: sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==}
+  '@types/normalize-package-data@2.4.4':
+    resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
 
   '@types/parse-json@4.0.2':
     resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
 
-  '@types/react-dom@19.1.6':
-    resolution: {integrity: sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==}
+  '@types/prop-types@15.7.14':
+    resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==}
+
+  '@types/react-dom@18.3.5':
+    resolution: {integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==}
     peerDependencies:
-      '@types/react': ^19.0.0
+      '@types/react': ^18.0.0
 
   '@types/react-syntax-highlighter@15.5.13':
     resolution: {integrity: sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==}
@@ -1176,11 +1179,11 @@ packages:
     peerDependencies:
       '@types/react': '*'
 
-  '@types/react@19.1.8':
-    resolution: {integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==}
+  '@types/react@18.3.19':
+    resolution: {integrity: sha512-fcdJqaHOMDbiAwJnXv6XCzX0jDW77yI3tJqYh1Byn8EL5/S628WRx9b/y3DnNe55zTukUQKrfYxiZls2dHcUMw==}
 
-  '@types/statuses@2.0.6':
-    resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==}
+  '@types/statuses@2.0.5':
+    resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==}
 
   '@types/tough-cookie@4.0.5':
     resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
@@ -1191,70 +1194,105 @@ packages:
   '@types/unist@3.0.3':
     resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
 
-  '@types/whatwg-mimetype@3.0.2':
-    resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==}
-
-  '@typescript-eslint/eslint-plugin@8.34.1':
-    resolution: {integrity: sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==}
+  '@typescript-eslint/eslint-plugin@8.32.0':
+    resolution: {integrity: sha512-/jU9ettcntkBFmWUzzGgsClEi2ZFiikMX5eEQsmxIAWMOn4H3D4rvHssstmAHGVvrYnaMqdWWWg0b5M6IN/MTQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
-      '@typescript-eslint/parser': ^8.34.1
+      '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
       eslint: ^8.57.0 || ^9.0.0
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/parser@8.34.1':
-    resolution: {integrity: sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==}
+  '@typescript-eslint/parser@8.32.0':
+    resolution: {integrity: sha512-B2MdzyWxCE2+SqiZHAjPphft+/2x2FlO9YBx7eKE1BCb+rqBlQdhtAEhzIEdozHd55DXPmxBdpMygFJjfjjA9A==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/project-service@8.34.1':
-    resolution: {integrity: sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==}
+  '@typescript-eslint/scope-manager@8.27.0':
+    resolution: {integrity: sha512-8oI9GwPMQmBryaaxG1tOZdxXVeMDte6NyJA4i7/TWa4fBwgnAXYlIQP+uYOeqAaLJ2JRxlG9CAyL+C+YE9Xknw==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@typescript-eslint/scope-manager@8.28.0':
+    resolution: {integrity: sha512-u2oITX3BJwzWCapoZ/pXw6BCOl8rJP4Ij/3wPoGvY8XwvXflOzd1kLrDUUUAIEdJSFh+ASwdTHqtan9xSg8buw==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@typescript-eslint/scope-manager@8.32.0':
+    resolution: {integrity: sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@typescript-eslint/type-utils@8.32.0':
+    resolution: {integrity: sha512-t2vouuYQKEKSLtJaa5bB4jHeha2HJczQ6E5IXPDPgIty9EqcJxpr1QHQ86YyIPwDwxvUmLfP2YADQ5ZY4qddZg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
+      eslint: ^8.57.0 || ^9.0.0
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/scope-manager@8.34.1':
-    resolution: {integrity: sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==}
+  '@typescript-eslint/types@8.27.0':
+    resolution: {integrity: sha512-/6cp9yL72yUHAYq9g6DsAU+vVfvQmd1a8KyA81uvfDE21O2DwQ/qxlM4AR8TSdAu+kJLBDrEHKC5/W2/nxsY0A==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@typescript-eslint/types@8.28.0':
+    resolution: {integrity: sha512-bn4WS1bkKEjx7HqiwG2JNB3YJdC1q6Ue7GyGlwPHyt0TnVq6TtD/hiOdTZt71sq0s7UzqBFXD8t8o2e63tXgwA==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@typescript-eslint/types@8.32.0':
+    resolution: {integrity: sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@typescript-eslint/tsconfig-utils@8.34.1':
-    resolution: {integrity: sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==}
+  '@typescript-eslint/typescript-estree@8.27.0':
+    resolution: {integrity: sha512-BnKq8cqPVoMw71O38a1tEb6iebEgGA80icSxW7g+kndx0o6ot6696HjG7NdgfuAVmVEtwXUr3L8R9ZuVjoQL6A==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/type-utils@8.34.1':
-    resolution: {integrity: sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==}
+  '@typescript-eslint/typescript-estree@8.28.0':
+    resolution: {integrity: sha512-H74nHEeBGeklctAVUvmDkxB1mk+PAZ9FiOMPFncdqeRBXxk1lWSYraHw8V12b7aa6Sg9HOBNbGdSHobBPuQSuA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/types@8.34.1':
-    resolution: {integrity: sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==}
+  '@typescript-eslint/typescript-estree@8.32.0':
+    resolution: {integrity: sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+    peerDependencies:
+      typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/typescript-estree@8.34.1':
-    resolution: {integrity: sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==}
+  '@typescript-eslint/utils@8.27.0':
+    resolution: {integrity: sha512-njkodcwH1yvmo31YWgRHNb/x1Xhhq4/m81PhtvmRngD8iHPehxffz1SNCO+kwaePhATC+kOa/ggmvPoPza5i0Q==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
+      eslint: ^8.57.0 || ^9.0.0
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/utils@8.34.1':
-    resolution: {integrity: sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==}
+  '@typescript-eslint/utils@8.28.0':
+    resolution: {integrity: sha512-OELa9hbTYciYITqgurT1u/SzpQVtDLmQMFzy/N8pQE+tefOyCWT79jHsav294aTqV1q1u+VzqDGbuujvRYaeSQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/visitor-keys@8.34.1':
-    resolution: {integrity: sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==}
+  '@typescript-eslint/utils@8.32.0':
+    resolution: {integrity: sha512-8S9hXau6nQ/sYVtC3D6ISIDoJzS1NsCK+gluVhLN2YkBPX+/1wkwyUiDKnxRh15579WoOIyVWnoyIf3yGI9REw==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+    peerDependencies:
+      eslint: ^8.57.0 || ^9.0.0
+      typescript: '>=4.8.4 <5.9.0'
+
+  '@typescript-eslint/visitor-keys@8.27.0':
+    resolution: {integrity: sha512-WsXQwMkILJvffP6z4U3FYJPlbf/j07HIxmDjZpbNvBJkMfvwXj5ACRkkHwBDvLBbDbtX5TdU64/rcvKJ/vuInQ==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@typescript-eslint/visitor-keys@8.28.0':
+    resolution: {integrity: sha512-hbn8SZ8w4u2pRwgQ1GlUrPKE+t2XvcCW5tTRF7j6SMYIuYG37XuzIW44JCZPa36evi0Oy2SnM664BlIaAuQcvg==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@typescript-eslint/visitor-keys@8.32.0':
+    resolution: {integrity: sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@uiw/codemirror-extensions-basic-setup@4.23.13':
-    resolution: {integrity: sha512-U1CnDFpq6ydNqrRDS5Bdnvgso8ezwwbrmKvmAD3hmoVyRDsDU6HTtmcV+w0rZ3kElUCkKI5lY0DMvTTQ4+L3RQ==}
+  '@uiw/codemirror-extensions-basic-setup@4.23.12':
+    resolution: {integrity: sha512-l9vuiXOTFDBetYrRLDmz3jDxQHDsrVAZ2Y6dVfmrqi2AsulsDu+y7csW0JsvaMqo79rYkaIZg8yeqmDgMb7VyQ==}
     peerDependencies:
       '@codemirror/autocomplete': '>=6.0.0'
       '@codemirror/commands': '>=6.0.0'
@@ -1264,123 +1302,123 @@ packages:
       '@codemirror/state': '>=6.0.0'
       '@codemirror/view': '>=6.0.0'
 
-  '@uiw/codemirror-theme-abcdef@4.23.13':
-    resolution: {integrity: sha512-n7rcYYitdLSwqirWGTC8MGJRO4esmU1LFLDul1qhKCbQyY6O5t+dzpCNlsH2cgiMhhr2so/XG/FRUGcMcSZQTw==}
+  '@uiw/codemirror-theme-abcdef@4.23.12':
+    resolution: {integrity: sha512-Jd7RpoUIMP01N3MRieVlUlMgh683E84lCGjHsDd4IgosgrZYfHJITJZVgOiRk+ei+lGUdDOQmr/jg3Zug7Lgxg==}
 
-  '@uiw/codemirror-theme-abyss@4.23.13':
-    resolution: {integrity: sha512-7e74zeYPo5n2KqT2PHiX8UVqfCrgu5CXxqycQm6d/66widnGS3AOXXM+utNRjc9j2ESHubtty4JsBfI86Q012Q==}
+  '@uiw/codemirror-theme-abyss@4.23.12':
+    resolution: {integrity: sha512-oQbTTH+YV0os0kXDidhOgNeoMhDF7edF/O04wUO/75DTVcaBT+NHWO2BsR4R/vX8/FylUJEOUAoRYdX2mEfnVw==}
 
-  '@uiw/codemirror-theme-androidstudio@4.23.13':
-    resolution: {integrity: sha512-DcZmRGjFiU0mWCYqlrUPsKe5pWzoHP2Ab/QWckLTrHRDWuRjB+8bydqXupOWqfrxZqYM6dR5ptpwZCrMnMpFVg==}
+  '@uiw/codemirror-theme-androidstudio@4.23.12':
+    resolution: {integrity: sha512-2PDjsaAvPxctvF5+i0eL1ntiZI/Vvi72aHSGIZNFMM5NKSCG6z+n9fn9Ci49Dy2JXkTnO8T20G89/DWhGd36cw==}
 
-  '@uiw/codemirror-theme-andromeda@4.23.13':
-    resolution: {integrity: sha512-KzmSaTEvc1IikN55OfXxaAYNp9puLsy8AjIXD+wUo0nAVhuRQXaw09x2EE7QIX31hOBOwyaCk97KMYkZPKQVrw==}
+  '@uiw/codemirror-theme-andromeda@4.23.12':
+    resolution: {integrity: sha512-XM3WQkHmQr/h/uQlODiP6twa81UDNfNAmGcyWww+3HQIGU8eIRFQ1ZGGgT8tZKgCmdfMOC3p0/qr0d6r3/TfYQ==}
 
-  '@uiw/codemirror-theme-atomone@4.23.13':
-    resolution: {integrity: sha512-k/ebwmO0BPdpCjZDPoei3+9FdbO8ChUgy4lozTtpWQTuG2H1IvGlH6ikLdVKdD3QjsL1IDkGx41Ih07clSZE9Q==}
+  '@uiw/codemirror-theme-atomone@4.23.12':
+    resolution: {integrity: sha512-W4/GOQ5Flw7n59/29UD1uJV2iIVxzr7B/7oPTotn0/2BBArRbJNjOEWYQ1b/OgMl3+mZjNozaYgtr44tHHNSfg==}
 
-  '@uiw/codemirror-theme-aura@4.23.13':
-    resolution: {integrity: sha512-fNEwb8Rq5VSykXmHabKH/JU0OZj4vVgs8Qr4/4xwmxj8t/v1gOIThJNd1/8ZTMFsmZ8aBORIacfwuqEquqDfdA==}
+  '@uiw/codemirror-theme-aura@4.23.12':
+    resolution: {integrity: sha512-BnFsSAH+22CvD3AoQIEzRl8s07CR4SOGcrR2cQJWFLFSb7hlEa0myIEx9H4oEHtE1T40meKTx3pk2dpJTqL+IA==}
 
-  '@uiw/codemirror-theme-basic@4.23.13':
-    resolution: {integrity: sha512-7GYiryQZSZFpKuskc0d//Pn81z0OtnHhEQp3tZ5Jn2GQuMEHdZt9RomLLzqJTqOXOXVm37cKuYbd47XWcgejmw==}
+  '@uiw/codemirror-theme-basic@4.23.12':
+    resolution: {integrity: sha512-KepDYk/yb1DPV733N0UwbngRlHmFjGR5gh4UOXZic9yI14ndx8jEJsa36Em8THNSCqhSpmn1zeCbnXBxhyF4rA==}
 
-  '@uiw/codemirror-theme-bbedit@4.23.13':
-    resolution: {integrity: sha512-7Yc3iQFEecbaQisy5YC+9aov/PVGSKZAEGRR86C+keC/3yxAe6jcg9a/rVuafegm70pKAhO+beGZGjot0k3DVQ==}
+  '@uiw/codemirror-theme-bbedit@4.23.12':
+    resolution: {integrity: sha512-g5kHD1qTKCjINicbgLEi9MXR4r41klmum4kvFyo/SURwmjTDmetUB+MIqb0fvkcG9VzCiitxHVBl8ZNKxF8PWw==}
 
-  '@uiw/codemirror-theme-bespin@4.23.13':
-    resolution: {integrity: sha512-9VQ+utZYQBFTjXPNkWNwVwdjVCznp9q0bq6YCsvN/hH9y1iW5O4RlUqU6cmxJaNndkJS88FtpyO1c+HKxJ08FA==}
+  '@uiw/codemirror-theme-bespin@4.23.12':
+    resolution: {integrity: sha512-XuJlDs5fw2yNUBWRsjamExVlt/EsoZQmlZ97qYhK4CDvc/TjHZysVaMApGcwG56CJhGexf5BAxi8xJCFaDTEdQ==}
 
-  '@uiw/codemirror-theme-console@4.23.13':
-    resolution: {integrity: sha512-EtNsXdi5nVQ7uqHLhfpIlIHyGJfuIf9DkpcjWgLtpWYINGa9BGVwkNlke40tSf3P0J+QKxeFGJL0sdMRe6uhHA==}
+  '@uiw/codemirror-theme-console@4.23.12':
+    resolution: {integrity: sha512-HnTjbG5+9tQf3Q+2GxsbVrrFfTjf0X+kd6npGMuiAzeakbJVQ+/yzGQVAg4mLU0nnGMZtoayTcdWcuacSIi38A==}
 
-  '@uiw/codemirror-theme-copilot@4.23.13':
-    resolution: {integrity: sha512-vr3Ywydm0tV3b3Pty1YEKpvWF0InPuE0tQkynM7DVXxyit7SuSOXXjlZvAGlzUss8oospUpxYBLrSlJFyqxFXQ==}
+  '@uiw/codemirror-theme-copilot@4.23.12':
+    resolution: {integrity: sha512-ZICTJQCaFgJI2pJUHuj2NoEd7PZWsOGta1a5jk2SFwlr9JHPkOqrxZixwcoEMEuqtPGdoW+ezXa21H/mlik83g==}
 
-  '@uiw/codemirror-theme-darcula@4.23.13':
-    resolution: {integrity: sha512-eQbKRuFlxJRgpRfikMQDCyG+bk9iGbCmKnKTDxP9/b0qlRP3dnF5mdAe2VqBNapxju0Cn+cy8Wu8s7z0GiYzWg==}
+  '@uiw/codemirror-theme-darcula@4.23.12':
+    resolution: {integrity: sha512-+TsLGgPrwmjTyTXEOnjtNCsTpE1B6WDESTEeqFtdonLh2xkkT2URwpaRNumVeeTQ9ink/UBTIiGWmtAWiOa+Iw==}
 
-  '@uiw/codemirror-theme-dracula@4.23.13':
-    resolution: {integrity: sha512-Puw9aqYHA/r4iwIo+JMyIZ9taX2xkTAX4jOz8qVwI4x8LE+PvcF4jVLJkdBHmQEQEzZrKq4vrjrLnviZ2LStKw==}
+  '@uiw/codemirror-theme-dracula@4.23.12':
+    resolution: {integrity: sha512-ZTNKHvXCOdvXF62mLOkrumu5UeegK/Iip7lCwzW3ZdV4HgljDbnWshyLY6M8iLrjTI1QbYjVGJzt7J5lg5xgOA==}
 
-  '@uiw/codemirror-theme-duotone@4.23.13':
-    resolution: {integrity: sha512-JZWgBc7i9UBPgVW+35fML7YF8JHSG98PvV1wwa37J2UIQ4csrbgfvh/2g3EPMOPyHZrw9IrNZFLqpIWMJNP4KQ==}
+  '@uiw/codemirror-theme-duotone@4.23.12':
+    resolution: {integrity: sha512-8FUZQyUBJTLaxPU4trS7M658F0NTQ3rAjKCw4jW1N/LlUb9zedgxuGA8Ta/YWg05UbuqHKnMXpFlEXKlLzQqUA==}
 
-  '@uiw/codemirror-theme-eclipse@4.23.13':
-    resolution: {integrity: sha512-773gbWBg740h+YLaS7+78BoIPJzsvHYD6uEvmShMdN3bqUPsPtoLNf/+8SFGoF0PU24n9mrm+H8HH5twbhjd3w==}
+  '@uiw/codemirror-theme-eclipse@4.23.12':
+    resolution: {integrity: sha512-SVyvHPtrmS47IAnREuqG3YcAFJziLoFNtXg4dXX1IGjJzrT1ONGAn9vfMx0KNWOdGHpFUUFjiH8G3igI0VhZZA==}
 
-  '@uiw/codemirror-theme-github@4.23.13':
-    resolution: {integrity: sha512-e75jgCl6Zf7sC63ntyl4r2GU6ekqKbyfIB4g6EnneQlIzJQiDTM+mU0/pDR5hLTyGQdxQpcDs9EmDqfEyejGSQ==}
+  '@uiw/codemirror-theme-github@4.23.12':
+    resolution: {integrity: sha512-yxgycQxA1fNVdrjIZ7H7pq+9Q+BeKLmD5oq5oOlw7kVJrnToOMBylv5oIWplVd2s2LFo47lIhWrVC9Ay3b6Baw==}
 
-  '@uiw/codemirror-theme-gruvbox-dark@4.23.13':
-    resolution: {integrity: sha512-GugvLaFUA2gAvVZtdTfYccm3DmADZZou9VzJMuyLwUCFNKMRTL5nSIRaQZlNTvJYp3tRrPEMoIjqsyxqbB4DBg==}
+  '@uiw/codemirror-theme-gruvbox-dark@4.23.12':
+    resolution: {integrity: sha512-5SHwgUjpqSDpcWGM3xSWYZYZPRxq8XfrXB1XoHMkfz7pR5sXuJQ/sj09XM5vG+NiaCXGTvXITxq4QoixczpOqg==}
 
-  '@uiw/codemirror-theme-kimbie@4.23.13':
-    resolution: {integrity: sha512-ue4lh1z3bnDKYaNRPF0/OYHe5lSnfgpgSsR6uj7z2LcYaMmKIAf8R84SozWot7IN6IjfHLKVC5Zv0Iz0wb8VmA==}
+  '@uiw/codemirror-theme-kimbie@4.23.12':
+    resolution: {integrity: sha512-kr+9nKzPgjVDyfPxRMjbRADrLhYjDsNyQIv4yXEgOdmVBxh6w2yzP0zFB1oEds+xzTsx5uLr1O4m2GfRRJx3xw==}
 
-  '@uiw/codemirror-theme-material@4.23.13':
-    resolution: {integrity: sha512-UrAi2ETtmkf2oblJp1cGiMXl/+S/rsQL/TF6+J/jDN9+fXIsluSm1E5Odg6SCWzdhmNgfeS6OxMcdHfkftapnA==}
+  '@uiw/codemirror-theme-material@4.23.12':
+    resolution: {integrity: sha512-M7yo5mE0QDKjWm02sN6Sw3Ld4/3XvAuJZcEdKYgqmiGI7GKL/nAV8HDfD8iMNm0HGnyozK402WLzb84oB57gAg==}
 
-  '@uiw/codemirror-theme-monokai-dimmed@4.23.13':
-    resolution: {integrity: sha512-lUF1N+faBd4mLHPFpMNT3uxAbT9/LfdyTsGTw1OsI4VcX51D+8GeW1KTcz1cDeHlJ2IVuG8sbJgAd3cSTTMAeA==}
+  '@uiw/codemirror-theme-monokai-dimmed@4.23.12':
+    resolution: {integrity: sha512-cFLtLIR8UT7/32imXsiEONBMHbHsqfXjOXe01PfzvDclghE1TDm/4kn12pG6mjztphnngnxQfYNSn6/eQTOq0Q==}
 
-  '@uiw/codemirror-theme-monokai@4.23.13':
-    resolution: {integrity: sha512-R69hxAvAwhNlP9iOeY9b7Bnk7zCLb1951FWuNMRkMq+tpJJJ9sZ6UdME3Q0dKZwokU+kd2Pzjot2SpZ/Gdd+tA==}
+  '@uiw/codemirror-theme-monokai@4.23.12':
+    resolution: {integrity: sha512-axDkBX+txR4NKZLrEkFd+m50UQS579UEqneHz1cTQ8r0z7OYjAZo+7CwdXF5BliJOgaRTC617fyUqEr4X6UCkQ==}
 
-  '@uiw/codemirror-theme-noctis-lilac@4.23.13':
-    resolution: {integrity: sha512-V/K6yhswPlvKL6pGp5QkaWAzGsxhC50vaUTQlzsm7dGN+ffwE4ufX4NRSJkPisRzM3GlxdYTTi0tu1112Xur+A==}
+  '@uiw/codemirror-theme-noctis-lilac@4.23.12':
+    resolution: {integrity: sha512-iXc9O0AfeiUp4OXRf+u7nLfz5SQpcCVtvbOxb0+18taAsyisikkKcejUwCUk0hVauW9VKL2FErDkOOzn5z1FtQ==}
 
-  '@uiw/codemirror-theme-nord@4.23.13':
-    resolution: {integrity: sha512-khQ4YklsTdeSN+ixF/JiCaig2zpLeqtd+fJdtK1iXH3u6BBWRNzPeTXZ519+9zHjuGeUDgCtuYqUy92YNlM87Q==}
+  '@uiw/codemirror-theme-nord@4.23.12':
+    resolution: {integrity: sha512-U8w3VIuim9H1lEzReeNyv1+uwnPO+gc3gLXCFwxpwF/XDrTQf5TjQFL+c1AGVCYM/Ywf5sflUcF96C3z634r6g==}
 
-  '@uiw/codemirror-theme-okaidia@4.23.13':
-    resolution: {integrity: sha512-0GPJ45l6FaB4mV9gVCbI8WehhfqaG3iB7Bma41fJcBoqTV26ocgzhTMCNs3JrdYu4EMNwVc7uLm7wm839mk5Mw==}
+  '@uiw/codemirror-theme-okaidia@4.23.12':
+    resolution: {integrity: sha512-iunSHnMoCxJMUX1usfEQFIFzKhv807aMArMJ324y49nZLkmwZDuGNLYg2x4MUvdGyD9Ksa9N5eujoq++SekfGg==}
 
-  '@uiw/codemirror-theme-quietlight@4.23.13':
-    resolution: {integrity: sha512-1EgWh1aVAVs9zNeuvGZQMYLHpt3i5kCc02eA5xPc6Ibyu3rc9WWqP1cdSybZ3lw4/GJGQyZxyjL6mNs4jwiitg==}
+  '@uiw/codemirror-theme-quietlight@4.23.12':
+    resolution: {integrity: sha512-p/btvByFWjRGNTQXRySOiInub3njLEoepPGqhU8V099ndmprzl3ef9bO5ANWDM7R8p6uciYUp6hS2u+PJPtu8g==}
 
-  '@uiw/codemirror-theme-red@4.23.13':
-    resolution: {integrity: sha512-JaNXcyGC0KvWsOaPlAiYVdJP52P/3J3/8jizwKU8VAhXHm/YDUyLAnAHzHXL5W2IYHlYxqd7mMOoagY8Lj0k/Q==}
+  '@uiw/codemirror-theme-red@4.23.12':
+    resolution: {integrity: sha512-m9Xu01Ko1WuLThuYDdOQqVS6YgGV5Xz9s0Qv1idIbKNeu/HX8BGeWnjrxjkv6EhIX0zH+uN4wcWELZ7dHZZx6A==}
 
-  '@uiw/codemirror-theme-solarized@4.23.13':
-    resolution: {integrity: sha512-e6sota2PFvAubVlcWJnfFW1fpggZvU7BFtz/5wzSmBDMmZmAL2PQCGf8cv4W0XNVTFm/n8AnSmSTHJZfzCnljA==}
+  '@uiw/codemirror-theme-solarized@4.23.12':
+    resolution: {integrity: sha512-qAh5jS7P/qwLAJ93OP9r4Z3DdZh0SFq0uhwYXckSVVYtuypiYf3ZSpQLuiSQ7I/B9BMPtENt7GgthFIun21PYA==}
 
-  '@uiw/codemirror-theme-sublime@4.23.13':
-    resolution: {integrity: sha512-bdT27xQNNIVKURTdN40mNJYtBYzcdpJInsn7ggs9eZY2RI1b/bFblCJNSyepGBFRt/KewDDu6ih/cmixHGZJwg==}
+  '@uiw/codemirror-theme-sublime@4.23.12':
+    resolution: {integrity: sha512-fblzQo2xIZqznuu26FhkUST0JFdcJS1pWGJfJUpR49/cY1yni7LW5m30oAklJT2NpPW2ZFi4YkhCqkOfEzXYAQ==}
 
-  '@uiw/codemirror-theme-tokyo-night-day@4.23.13':
-    resolution: {integrity: sha512-YqO5w5LTLbZdPRFQNVbDk9VbDxV6QPG5UpDdC2QmeoMGkifxTBcUgTvXUzUS6/KU4/iw4DxMBssTcBnZBTHnBA==}
+  '@uiw/codemirror-theme-tokyo-night-day@4.23.12':
+    resolution: {integrity: sha512-wT/A0SI7aD9j3WQXkLlk3mLk81kZ8ZGD1Okz+YIk+DngH0uD730c5ZMv6AUSHbqAtPePgsjSOHMNS/IQfPOunQ==}
 
-  '@uiw/codemirror-theme-tokyo-night-storm@4.23.13':
-    resolution: {integrity: sha512-bL7NQsYSo7AztsVu0WADft4QMqUhhkhP6GVfEPAzi0fEHn+v7HKTelv9C1ljq2y0OCK2IDxhpd3Biy9To1jX/g==}
+  '@uiw/codemirror-theme-tokyo-night-storm@4.23.12':
+    resolution: {integrity: sha512-vBk7OMWmkNlReajWdApBe009SgE6h1D8GnmaamjLklnzuIjEDyy2HnbvRxK4cwaNBGDDT5SGRWVbiiKssLTQdQ==}
 
-  '@uiw/codemirror-theme-tokyo-night@4.23.13':
-    resolution: {integrity: sha512-FhvtU9RTYVxUwhl8K/6jJKC5IRnBgm76WCEtACsdfgvHS4qTa6m9E66qTbUUkfHi2G19GiO/RQVlU6cXgndiIw==}
+  '@uiw/codemirror-theme-tokyo-night@4.23.12':
+    resolution: {integrity: sha512-4J4+RhN2qXeqNouY79K/0g69xjgTxqefZdfHv7Y7xFh0n76oR387ojHxut+98rcEOX7GKGXn8tXRoyhWWZVcxg==}
 
-  '@uiw/codemirror-theme-tomorrow-night-blue@4.23.13':
-    resolution: {integrity: sha512-opz1ikxFo3LNkYU6TSd9YY7aE7I4dB3tEltJS9VB7zJh4ddrEiaNBVaGdjwVIl1Sqm448e2Uul0Eo5J0si9gzg==}
+  '@uiw/codemirror-theme-tomorrow-night-blue@4.23.12':
+    resolution: {integrity: sha512-84aXg/k5kERu3iri48sGT/8uap2OQKELjt2Hv+js3mZcBUm7rM39NuSvXueSXhCoR4HjA3aV5q3rvUph9peZeg==}
 
-  '@uiw/codemirror-theme-vscode@4.23.13':
-    resolution: {integrity: sha512-Fn79r3NBMPP/hF9ui1e8VCyEjVbZ+rW2MIIGgq/LOkLXZSDXEZRa6NhRt991IuZ6e0R8bprrx3TGVQnkVfODbQ==}
+  '@uiw/codemirror-theme-vscode@4.23.12':
+    resolution: {integrity: sha512-ePBaUQiixrpmSoZJWCGXUStKmcM8G0VBv3UqwPR+kNGBjqDife76Gbhv77izSeEI3zRPzL+683BOdclkvWnsMg==}
 
-  '@uiw/codemirror-theme-white@4.23.13':
-    resolution: {integrity: sha512-objVXKwMYwWmLyUxTxzvmz3IkpLUNrScO2X/5dcNPrkClj7Kc/Tkhc61sreq4DGVYN7jFu9bCOwhDdG6+bht1A==}
+  '@uiw/codemirror-theme-white@4.23.12':
+    resolution: {integrity: sha512-f2pHnI1UWNQQ3d8A+zNveMQMqE7RVFoMcgCAp5owM6EDI+o0RjyqUPDLH9H1mvCPc84qEMG7ZZrxjaG0C7oG1g==}
 
-  '@uiw/codemirror-theme-xcode@4.23.13':
-    resolution: {integrity: sha512-Q57CoaPCC7xr55zOV+502V4GgyNqgz2r8UBeLnOVzfMX2xS5YzsZgah7kUdmliN+PQAveohdmhuhzynhpbAz+g==}
+  '@uiw/codemirror-theme-xcode@4.23.12':
+    resolution: {integrity: sha512-9KnTjhXFqwGphQl18CGRzRc6yB8SZkyv4L7u+j1QOq/nFmk3i44HKuHiuKY+J+XfFq3Cmxg629o3CK4ecMsvUQ==}
 
-  '@uiw/codemirror-themes-all@4.23.13':
-    resolution: {integrity: sha512-VwQQC05fCPp3ev74ceT9gqcHIIBB0LKr8SoiIgmrtGcn+3b+vKxD0ywTL9zPGCJzLq+CTaAwNyDH77q1zZuYmQ==}
+  '@uiw/codemirror-themes-all@4.23.12':
+    resolution: {integrity: sha512-nXBqEfbPUK2BQgPfC/18IlWX/jDKRFLVnSANK+NJBhz6coht+VVXfcGPcahjh+HfTvvWb+Ld6ZQAXBBpHxR6Cw==}
 
-  '@uiw/codemirror-themes@4.23.13':
-    resolution: {integrity: sha512-thk4X8VNl15XPoDiOXdkeMAIIHQOoc5lPfmgOvrhPXHzt4zvH5efLWBw3zgpwuOWF+Uk6sYrS0eumtsSO/kgcA==}
+  '@uiw/codemirror-themes@4.23.12':
+    resolution: {integrity: sha512-8etEByfS9yttFZW0rcWhdZc7/JXJKRWlU5lHmJCI3GydZNGCzydNA+HtK9nWKpJUndVc58Q2sqSC5OIcwq8y6A==}
     peerDependencies:
       '@codemirror/language': '>=6.0.0'
       '@codemirror/state': '>=6.0.0'
       '@codemirror/view': '>=6.0.0'
 
-  '@uiw/react-codemirror@4.23.13':
-    resolution: {integrity: sha512-y65ULzxOAfpxrA/8epoAOeCfmJXu9z0P62BbGOkITJTtU7WI59KfPbbwj35npSsMAkAmDE841qZo2I8jst/THg==}
+  '@uiw/react-codemirror@4.23.12':
+    resolution: {integrity: sha512-yseqWdzoAAGAW7i/NiU8YrfSLVOEBjQvSx1KpDTFVV/nn0AlAZoDVTIPEBgdXrPlVUQoCrwgpEaj3uZCklk9QA==}
     peerDependencies:
       '@babel/runtime': '>=7.11.0'
       '@codemirror/state': '>=6.0.0'
@@ -1412,267 +1450,271 @@ packages:
   '@visx/vendor@3.12.0':
     resolution: {integrity: sha512-SVO+G0xtnL9dsNpGDcjCgoiCnlB3iLSM9KLz1sLbSrV7RaVXwY3/BTm2X9OWN1jH2a9M+eHt6DJ6sE6CXm4cUg==}
 
-  '@vitejs/plugin-react-swc@3.10.2':
-    resolution: {integrity: sha512-xD3Rdvrt5LgANug7WekBn1KhcvLn1H3jNBfJRL3reeOIua/WnZOEV5qi5qIBq5T8R0jUDmRtxuvk4bPhzGHDWw==}
+  '@vitejs/plugin-react-swc@3.9.0':
+    resolution: {integrity: sha512-jYFUSXhwMCYsh/aQTgSGLIN3Foz5wMbH9ahb0Zva//UzwZYbMiZd7oT3AU9jHT9DLswYDswsRwPU9jVF3yA48Q==}
     peerDependencies:
-      vite: ^4 || ^5 || ^6 || ^7.0.0-beta.0
+      vite: ^4 || ^5 || ^6
 
-  '@vitest/coverage-v8@3.2.4':
-    resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==}
+  '@vitest/coverage-v8@2.1.9':
+    resolution: {integrity: sha512-Z2cOr0ksM00MpEfyVE8KXIYPEcBFxdbLSs56L8PO0QQMxt/6bDj45uQfxoc96v05KW3clk7vvgP0qfDit9DmfQ==}
     peerDependencies:
-      '@vitest/browser': 3.2.4
-      vitest: 3.2.4
+      '@vitest/browser': 2.1.9
+      vitest: 2.1.9
     peerDependenciesMeta:
       '@vitest/browser':
         optional: true
 
-  '@vitest/expect@3.2.4':
-    resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==}
+  '@vitest/expect@2.1.9':
+    resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==}
 
-  '@vitest/mocker@3.2.4':
-    resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==}
+  '@vitest/mocker@2.1.9':
+    resolution: {integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==}
     peerDependencies:
       msw: ^2.4.9
-      vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0
+      vite: ^5.0.0
     peerDependenciesMeta:
       msw:
         optional: true
       vite:
         optional: true
 
-  '@vitest/pretty-format@3.2.4':
-    resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==}
+  '@vitest/pretty-format@2.1.9':
+    resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==}
 
-  '@vitest/runner@3.2.4':
-    resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==}
+  '@vitest/runner@2.1.9':
+    resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==}
 
-  '@vitest/snapshot@3.2.4':
-    resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==}
+  '@vitest/snapshot@2.1.9':
+    resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==}
 
-  '@vitest/spy@3.2.4':
-    resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==}
+  '@vitest/spy@2.1.9':
+    resolution: {integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==}
 
-  '@vitest/utils@3.2.4':
-    resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
+  '@vitest/utils@2.1.9':
+    resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==}
 
-  '@xyflow/react@12.7.0':
-    resolution: {integrity: sha512-U6VMEbYjiCg1byHrR7S+b5ZdHTjgCFX4KpBc634G/WtEBUvBLoMQdlCD6uJHqodnOAxpt3+G2wiDeTmXAFJzgQ==}
+  '@xyflow/react@12.4.4':
+    resolution: {integrity: sha512-9RZ9dgKZNJOlbrXXST5HPb5TcXPOIDGondjwcjDro44OQRPl1E0ZRPTeWPGaQtVjbg4WpR4BUYwOeshNI2TuVg==}
     peerDependencies:
       react: '>=17'
       react-dom: '>=17'
 
-  '@xyflow/system@0.0.62':
-    resolution: {integrity: sha512-Z2ufbnvuYxIOCGyzE/8eX8TAEM8Lpzc/JafjD1Tzy6ZJs/E7KGVU17Q1F5WDHVW+dbztJAdyXMG0ejR9bwSUAA==}
+  '@xyflow/system@0.0.52':
+    resolution: {integrity: sha512-pJBMaoh/GEebIABWEIxAai0yf57dm+kH7J/Br+LnLFPuJL87Fhcmm4KFWd/bCUy/kCWUg+2/yFAGY0AUHRPOnQ==}
 
-  '@zag-js/accordion@1.15.2':
-    resolution: {integrity: sha512-4ooxmmnEDeRLPLOCsrQeLHcTj+xTqBHm6pYEdho/pb67lHujAUSnbfEryorBSfvJEWdiUTYts96EfsLfbn5SYA==}
+  '@zag-js/accordion@1.15.0':
+    resolution: {integrity: sha512-EKNeuKx+lOQ/deCe/ApCjVPxpxpDwT2NXvMPL+YvqXmSv7hAnTLs9fDKjbDUQUMmsyx32BsBd8t6d17DL3rPXg==}
 
-  '@zag-js/anatomy@1.15.2':
-    resolution: {integrity: sha512-GiWZk+fqO/W15FIRVhUL237xZmYMm/gcrp8b4VJGLpZE4qaQaBd4kSYObhIl/7AnLC45VjKbV7c8fLxZKd/5kA==}
+  '@zag-js/anatomy@1.15.0':
+    resolution: {integrity: sha512-r0l5I7mSsF35HdwXm22TppNhfVftFuqvKfHvTUw+wQZhni4eUL93HypJD0Fl7mDhtP5zfVGfBwR048OzD0+tCw==}
 
-  '@zag-js/angle-slider@1.15.2':
-    resolution: {integrity: sha512-ItcDlKHJbPFfPGmmiCGcWcd0Y8xC+WH5Dji7+uzBl40L9hh8si7/FrY9EB2cX/qUTDppNyicLPIDnZRGkByTOA==}
+  '@zag-js/angle-slider@1.15.0':
+    resolution: {integrity: sha512-xIZBa9V6d05uK7+XQVhfdsThqbZKimSYVxtMOWJfG0sKn63N9VGPxL1OtOMq7FA4IP3SyvlelsGt+3t82TUiyA==}
 
-  '@zag-js/aria-hidden@1.15.2':
-    resolution: {integrity: sha512-Uwt86QpEaI4qLFS/k4C7rwIfyiH8EdE5a4AWiQ26WsL8VOpjROn65rBEOJ8q3fG5CJXbdcqaYK3lg4ldqf9irQ==}
+  '@zag-js/aria-hidden@1.15.0':
+    resolution: {integrity: sha512-3ogglAasycekTHI34ph16mqwM+VtHCOMtrFHWzPwB16itV5oDEeeMNdQXenHSSyQ/07nJ2QsRGFFjGhPm1kWNg==}
 
-  '@zag-js/auto-resize@1.15.2':
-    resolution: {integrity: sha512-Mg3IN3eIP2wKBFRm5qti/rjKpTj7sfIVNfO9BgWdHDSzli1VwaBX7GaOE3nGc1tZ2nJ8n0SWRvRSzr3b57cwKw==}
+  '@zag-js/auto-resize@1.15.0':
+    resolution: {integrity: sha512-EXgrsU7OWxc7obSOt8Okh0144H8DQi1S84OsOUY04Uni11Dnp5/X8+t6mvBbkw4/Qyz5UBjChjocwBcO+HHV8w==}
 
-  '@zag-js/avatar@1.15.2':
-    resolution: {integrity: sha512-4aG2ETJbdMTALyXwU/DeGfjs/dM0Kllje+t5ov52fQrtkY123JdrvKQkcvsc7Luph1kdN1tC1/2fe/pDMhycCg==}
+  '@zag-js/avatar@1.15.0':
+    resolution: {integrity: sha512-EHGxzXb1mLf3n6x0z/rqFl1mghDB/gyfPAeaFUoA/cacmmMk8YB3aDUXkS9pTgN9stYJBM5f6T4xB1ZUhrP8tg==}
 
-  '@zag-js/carousel@1.15.2':
-    resolution: {integrity: sha512-7bcyEtWIhv7kw+V4H+Fv5rE8I8lf0LQOj+m3HTYzWo+wiLybFfI8/bg1qywjSYKsgZr3gmGVCEZhfx3BSpP3eA==}
+  '@zag-js/carousel@1.15.0':
+    resolution: {integrity: sha512-ZI9H34f2utdJ2Ek6GZa+iuRH4eC99GHD/VEOKLdGani8uadpT2v8M5kUwPGrlAJq9SiPbQ2UuXBmCkmurPQqdA==}
 
-  '@zag-js/checkbox@1.15.2':
-    resolution: {integrity: sha512-Ay/+rpKbxL4jE1pwVw52h0t79PpiifA6QlYnV4E+hWl1yJBkMRIi76Ryhqvqp4yY+2Wyr9OfDA9eHmQjapG4VA==}
+  '@zag-js/checkbox@1.15.0':
+    resolution: {integrity: sha512-6lQvPQNJXt7R0xxdpOuh2qtmAkzdBdqSvFIH7fE6GJzJ/AWiRZh0X+9deLQ76CN4EDUdxizEe7MlQfTI3a56aw==}
 
-  '@zag-js/clipboard@1.15.2':
-    resolution: {integrity: sha512-EE5OlsIYbBklo62qu3A7GiUnsgmoGaoDZvhpYvpNM8StWNeRREcJZXRIizv4aFC46e5eODzSNcebnMLYa8Wcgw==}
+  '@zag-js/clipboard@1.15.0':
+    resolution: {integrity: sha512-Q3kh0fHvOEAJUywQm3zAWyltrYyiI8OpeZQ18k5Mf3/M+bq3gSphZL0+AYsgGbKUg5O2+hJ1SfiErAjyhRtBQA==}
 
-  '@zag-js/collapsible@1.15.2':
-    resolution: {integrity: sha512-vvUXQMFgwsZJphE4Ml5ap4FVhtyLOqK2QXPbt2+F8X8SRwJ3/pqsSsLFdH+ALpNoCK6WF9j+8FZ4lyidr7XPDw==}
+  '@zag-js/collapsible@1.15.0':
+    resolution: {integrity: sha512-GX0kdMlKk4Yk5k/2wN0prudf21k+TfArGr4EHqimTDR0vQE3dSdb3pYyPjw20fLzceKHBBCLsoi2v+YnS75gHA==}
 
-  '@zag-js/collection@1.15.2':
-    resolution: {integrity: sha512-bJ9EtZ1Cpjh/rQFDMPTPrky/eSfaLpHWmMnk/S9b7wi+OhC0Hoqw38lcWzfc0AaE4bJsfru9/FLIsCDOLf7TSg==}
+  '@zag-js/collection@1.15.0':
+    resolution: {integrity: sha512-oC3i6c/oP/FuNPsfgoC1reSXbAvDBGXl0HU3CcvXiNLHbjg2ek8J7kbow6MNuXK6chiksiOHbzKxHl2Oo0Ox7A==}
 
-  '@zag-js/color-picker@1.15.2':
-    resolution: {integrity: sha512-UOYHECq+X6hSrgSxwBt5O4Y6f2IdOGMhe7P/LFev7Yn0x1F9fMxJZCIzvQGaQ2V/hR0eTatiKk5SmOp9+dJA/g==}
+  '@zag-js/color-picker@1.15.0':
+    resolution: {integrity: sha512-DGujS24h1OWkYL+TWyd+xukOO8NBgcSfFCINffa4ivkHtNx3nC28qkwLPRASbl7AK69pbrcuO6bx1Sy/JQJw0Q==}
 
-  '@zag-js/color-utils@1.15.2':
-    resolution: {integrity: sha512-c167QcxiVHgFZ7ca0PSQZ7skhbBOd6u1lIyWYzkZ2uPf0yJndqP9gFYPMbwK6d4WIM9k6y6mLdsWCGpqIJJsIg==}
+  '@zag-js/color-utils@1.15.0':
+    resolution: {integrity: sha512-SKo+p5Fu0TBtdDua8UHVjptOkwLLBFoD499Z1FER/gr0R/97L03Kdir0YTxvKn5pXWXYY1EQn4hpTuTITN16lQ==}
 
-  '@zag-js/combobox@1.15.2':
-    resolution: {integrity: sha512-lZXW99NLnRfLLY1ZOE0oqo4wMDglkUjKV1UZaHyj+yqXsiMtWhKQFQW/JeVBRDe6RCv8wWPPHMycNANMw581gQ==}
+  '@zag-js/combobox@1.15.0':
+    resolution: {integrity: sha512-HBck3wcEeIOa7IQMsUkUKbm9cAU7bjoklIyq2zFGn90k7DcDa++oXK9Z2pmcd4TPoBYiyVuuXucaCcjmLX8V/Q==}
 
-  '@zag-js/core@1.15.2':
-    resolution: {integrity: sha512-yUnh4I0nZ8rlszWgF402F5vGoYw7DNwStYz2TAO+4E08BpKBATw3FEdqAHPm+2xZm5qPqnPbM4iObwUlkBQUEw==}
+  '@zag-js/core@1.15.0':
+    resolution: {integrity: sha512-P/8F3IXabMhpFnc6hC7GDg3rvUnvY27cuZU04hxjUqTH6+SfORIA/Uvqd4ekhC+dIprL9jicnFrmGgcyelyxfQ==}
 
-  '@zag-js/date-picker@1.15.2':
-    resolution: {integrity: sha512-KElAFm3fW4GKGUNUe+jqqUX+P1H+Cigp/eGRgIl0dUjCwHocD1oN0ZCwNYmf7SJoWSgPRc1UJdA4XvpdU0IwPQ==}
+  '@zag-js/date-picker@1.15.0':
+    resolution: {integrity: sha512-IZD0V9MAljp1QhxYbST80AonryuDnyx7hvEy/RrBY/VOx6I4STtKfcSJ5ZZgVIzJfH8Yyaed4+IwcenqG7W5YQ==}
     peerDependencies:
       '@internationalized/date': '>=3.0.0'
 
-  '@zag-js/date-utils@1.15.2':
-    resolution: {integrity: sha512-U+HtfdtHJ5ed2ys8izMhu8gY5jQigCd8ExPN5Cxg5CoIbSkho9NT8o/eO9OW71jc2F4kwBh+q0reyxxLJnTSbw==}
+  '@zag-js/date-utils@1.15.0':
+    resolution: {integrity: sha512-FX9EesJRnUTYTpbXf5EVfCbsXW5vYtZfc635aQzojc9ekk1FGcHpqQs8ZKfCOTPuauZFOX9i6139A4KoPfQOiw==}
     peerDependencies:
       '@internationalized/date': '>=3.0.0'
 
-  '@zag-js/dialog@1.15.2':
-    resolution: {integrity: sha512-LUF+tiiUJj7v24txhC0TOwEgsfj1GCogAmBaiJKxvqrDEDv1B91J0b6SUQ5TuTMLW+hlBEzXZw0QsTxa9OXBew==}
+  '@zag-js/dialog@1.15.0':
+    resolution: {integrity: sha512-Vlt5vySs4u8c8xBEh2JMUvRfPc+aaVEIIUtFVxpc2ORWhBXs9glijyp1yf3rNHJhjj8gqqhF5sEvs3yUTTAk+Q==}
 
-  '@zag-js/dismissable@1.15.2':
-    resolution: {integrity: sha512-+WY8a1L+L8hXPGmWKqOsSg2KCHabVWXEX8mewHamltpSb86+2WMmblpLNgTwbm6V0T6txf1N8lFuzWMojMEWSg==}
+  '@zag-js/dismissable@1.15.0':
+    resolution: {integrity: sha512-yv575KWy8gA1p4aajOiY5l/nBQ3Xw+Mrjpungp1+wiGd/98eNAIKJ6/adldfbE1Ygd/Q4Dx2VQ7D1AmiTdwUSw==}
 
-  '@zag-js/dom-query@1.15.2':
-    resolution: {integrity: sha512-+r9Xj6hiQj9b2ZNkT3E/bDaXgigoAkhtikDXov9duAY14pFFJxazXr0NcVgacik8ytAEt6XOOshLcAftyalRKg==}
+  '@zag-js/dom-query@1.15.0':
+    resolution: {integrity: sha512-z8H/j/Zs0eZEsGpbonScmlKSv0jEXKiAwUCrvQ9Mt6Gz9n0CQRM3MkFclSsM8aeiSv6qKLlhPfkzjl18OLkbgA==}
 
-  '@zag-js/editable@1.15.2':
-    resolution: {integrity: sha512-32v7DXDBnDX1CiFpGRh9uclu48UJQJT2QZPQ0Bys3ZOFgMxsWH6tCKDb7iQTcINIc/XIx/9nclWnV5egzimG9w==}
+  '@zag-js/editable@1.15.0':
+    resolution: {integrity: sha512-F14HKZuDsfkpfIkaF/ZDYPkz/pFf6VHrvoV0rdhj8wb8QJQ4nB+lgBv2APSwkEaFb/gGrnE19v3Ojlt5tqpPsw==}
 
-  '@zag-js/file-upload@1.15.2':
-    resolution: {integrity: sha512-Zgac/da5QrUlE0ItlNy1kyMXfTy4ynTWnq4aZ4wZ9eVHUFQhLXERv8l+hYJetImISnuclmNVxNKP8Xk+5t4+tA==}
+  '@zag-js/file-upload@1.15.0':
+    resolution: {integrity: sha512-2hAlQr9qdT8EH4XnmkNkEIDCCsmp2SMoMAjq6nJKYO8UJNQGRanU2B5S8jV3quJBz0vIY43SwyvqiZ3+1VrJSg==}
 
-  '@zag-js/file-utils@1.15.2':
-    resolution: {integrity: sha512-aNUEBJUeK6G3pyf+zYnIMg0GgJnInddjGRedFeTnfK1UmlSO8wTbxQTCvjWd4Nnr5eCTpQkRq6wTZy8JeIcOpw==}
+  '@zag-js/file-utils@1.15.0':
+    resolution: {integrity: sha512-tahJt3JmrXaOtGiknH5PxIiOyyNvroMfjiBqOqnNksIPzDoWmVNxHOEme/ts7dJlkRD8U2qm2NFC2VS0bKerzg==}
 
-  '@zag-js/floating-panel@1.15.2':
-    resolution: {integrity: sha512-8oG2MRXWWeXws7iVDmJFBqHLHYOGLvYe+vgXI3vgnLhmS4SeX9qAJj6qIOar7htOmEtp1p/KiBo2w2MYtzjuAw==}
+  '@zag-js/floating-panel@1.15.0':
+    resolution: {integrity: sha512-AYYFseA1MeQUZl+zjNoKUu4j0kwz8EyJd4oJjs8uJIR6KG8u8QhpWYIBUny63M6AtZTCSYQAgBEcEh+mrbEyyQ==}
 
-  '@zag-js/focus-trap@1.15.2':
-    resolution: {integrity: sha512-5EU5/Cg80oNO3z83A/33t9SOVYvLqLOuSPxt/7Xzy/L1Vj3vUj+s1ox6IpECmEFJcuql7X5yt6VIVitrLtgbFA==}
+  '@zag-js/focus-trap@1.15.0':
+    resolution: {integrity: sha512-N8m/JpNe1gHUPJlr0hyGUdHg6pAuyJKkBaX0s38cyVntlo2CJhyAWZGuUdocpT2Q3HNPql666FNnH986rYPDKQ==}
 
-  '@zag-js/focus-visible@1.15.2':
-    resolution: {integrity: sha512-zElE5T41p5QaB4856xK2SeERmHrKbA/UMzoyHzrAk/N1r6dNiMOOx1hMyHy7y6pEhC9kjJFwEpXi1QEel6/ELA==}
+  '@zag-js/focus-visible@1.15.0':
+    resolution: {integrity: sha512-TPXBf47tj6L0hhZNl9AWhuLoVzfPaNPM+/Gw8t9l9Whvy6v9rk/rqUCidY5LsrQuPiKTi7s5WI5J+Wod8ib3gw==}
 
-  '@zag-js/highlight-word@1.15.2':
-    resolution: {integrity: sha512-2a49h4k0ISIDydaZZDdASEHJpwxJeuZHSPCE7cM3/BWCR3H5galeC/jbNWRlTJVH4OQTYAR0I2wILQvOWLhSrw==}
+  '@zag-js/highlight-word@1.15.0':
+    resolution: {integrity: sha512-Rwr/rRm8BaF2xW9BAEJeA2wpFVx6HzoezfYQX7GFPPgw3N8nBMAYNjx+i1YIwIEcNyad2rbaBB+pSd2fZLIniA==}
 
-  '@zag-js/hover-card@1.15.2':
-    resolution: {integrity: sha512-FfNmhow8MPMp5RgTeC87x4EStFw+d1137w4QZ+fC5PystRzxGeiyDJyLRYGVeIQO2oP463az70vnxsbFAMu98A==}
+  '@zag-js/hover-card@1.15.0':
+    resolution: {integrity: sha512-j6BsE+metdnv/C/Ls0TZzAMN78rtS2r8M1ccHY5FFTGyUvZnlE8BY/QPNyCSSSCUpynymzMYh3IMYlxbJgfpSQ==}
 
-  '@zag-js/i18n-utils@1.15.2':
-    resolution: {integrity: sha512-1RnqCaxe+l4UR1O3fhn04T+J62yw/SkCByhrhrPSis/H7a65nW0WsoWiJTIgWp/hN9HI2Y3dVFfMEwQUFFHG1g==}
+  '@zag-js/i18n-utils@1.15.0':
+    resolution: {integrity: sha512-anxSbT8kLbJaFJFSb0Ork2j/Lp+XVfMNCIgiBR2BuqUlfX72k23TIJvRxAfwNIkUfs0L8ikaSgLss9OwS4mAnw==}
 
-  '@zag-js/interact-outside@1.15.2':
-    resolution: {integrity: sha512-WbCICcMJHL6yS8vaou0FvKV6shl1Z+CefF7yzn5MEshPLbmy33WGQ2KBzodTkIQFM/C/zdVz5xKl8TbQmi7jUg==}
+  '@zag-js/interact-outside@1.15.0':
+    resolution: {integrity: sha512-OwBf/iesQGU9Oq3xe/tcK7gu7xipiGWsmwl2CcScr0fTp3BIMbQywHS928IgPk1DxA8KTHodY8wBjoY1dskfRA==}
 
-  '@zag-js/listbox@1.15.2':
-    resolution: {integrity: sha512-V6Zbi8HTiyhsV4GhFaiFYL2bJo4lOt24/SA9M/T5D7ZH+bTm3itPUxYddIBi9w6yRTU0gsorosD2GyFkHjchvg==}
+  '@zag-js/listbox@1.15.0':
+    resolution: {integrity: sha512-Gcg76uWZwUAyMFZzGWpHnFCU/aaquNbXmVnyzzBgE3Co2snkv02rK1yG9iBwemZe3e5+VBifMMAtLLPAQJdz+g==}
 
-  '@zag-js/live-region@1.15.2':
-    resolution: {integrity: sha512-dIrfDlKyNz99CQVeHu9RHe/x+yTBm3wFA7H655DXL7CugO9tpTlynkrTG9AB+0Z84JKZTeHh0vGVa2chTWKrNg==}
+  '@zag-js/live-region@1.15.0':
+    resolution: {integrity: sha512-Xy1PqLZD9AKzKuTKCMo9miL1Xizk/N8qFvj64iybBKUYnKr89/af3w7hRFqd2BDX+q3zrNxPp9rZ6L7MlOc7kA==}
 
-  '@zag-js/menu@1.15.2':
-    resolution: {integrity: sha512-54dGUChMLyTrkCGbKGh0R8l/cg0vPFnGZwMG96zYJhkmXdpDMECZgBrN3j7B6RtEIvlAR8fMH5Sya58Amb3lGg==}
+  '@zag-js/menu@1.15.0':
+    resolution: {integrity: sha512-GbEBVYu0w7+88xrGX2GrjXfnwWuX5jLhoLiEcuxvxJQal/nahKrH4AGXJvHXNaRbj+53V3nWAh3u70C9210PWw==}
 
-  '@zag-js/number-input@1.15.2':
-    resolution: {integrity: sha512-qtDAVUdMXBhufBSwAgi8MXm7zHb36ujfWmxCJg6HbjKVF0BEAxeoye5VexgyYul7Hp8+Rr9LkW8X35W4amjJEQ==}
+  '@zag-js/number-input@1.15.0':
+    resolution: {integrity: sha512-+kK8kyXJhIAbEUnswoMDR+DSJUmvDNIOW0ffuZ9pbfukN3p6zaA3/dCp2Dtg3bQS7hGrFWgtrdejJ8l+mVvUAA==}
 
-  '@zag-js/pagination@1.15.2':
-    resolution: {integrity: sha512-k1jT7UWDwgkYVsf83TTUhks6iZ7aQpcEjQ+iWI2LbZu98+bVhX9hpHfxdWbvTbueGk6WjB2xa1X0tsktII1mmQ==}
+  '@zag-js/pagination@1.15.0':
+    resolution: {integrity: sha512-Z62Q41fQPWqk59QyJk+9J0Ad3H9DCqZ0zZutI6iH8DdzT0A0xxmT6zhup6DM/8C8h0OLlaHFTWQnj0RdRNrnXg==}
 
-  '@zag-js/password-input@1.15.2':
-    resolution: {integrity: sha512-9BpQ26Z9XoCiNAHOmx3zwa+62+C6358/az0h3N24P4qS1EdTVWkhG1tsyPhRElg4v1koavZ40RMUppJQBH+DmA==}
+  '@zag-js/password-input@1.15.0':
+    resolution: {integrity: sha512-oHuZKDRJIbycqWpTVznufy4L7K2g8kwcEaZ4runkwO2ocF00zP8HVmOZQzmhkUgTny0azErQydg8XE0VR5OfYg==}
 
-  '@zag-js/pin-input@1.15.2':
-    resolution: {integrity: sha512-1KjGGmyldtEb4RwwdBTKzbgAwpNT6CyY274LvQC8lTCEUYOBkUmS9OUaKUbwkoluCdmXrugpg/XMulisRmMtgg==}
+  '@zag-js/pin-input@1.15.0':
+    resolution: {integrity: sha512-IykjogZBG+BfbFXymSa+KGpOi5CrV9kl8HRm6G2V2Sr3NA5jEwMFaGSd/QrcHS9vh23D1Smx/io4pvF7c3q0kg==}
 
-  '@zag-js/popover@1.15.2':
-    resolution: {integrity: sha512-6cD4eTwwj/bkTCDWVk0dMFqg01iD7qJofRSU3da7nde1Y0TMz8gBlt++GASgCF4p/hPeGLD18GcIF8FKka9IlA==}
+  '@zag-js/popover@1.15.0':
+    resolution: {integrity: sha512-cdzEed3zcGbjSgPQnQnrsuXo2hVVslmSNwQbU5dHcNzG1uxxmtPCIMVeBUmGyJbAFF5XQpKCq/7mIr26dT73vw==}
 
-  '@zag-js/popper@1.15.2':
-    resolution: {integrity: sha512-5uaFW9IU8bj3NdEiyuSp2eVJaPvWoA6/q7Fh423Va8booMYW4k1KFmz2BSxQ3JfK5lt3vPI0X2026gSxTx/vmg==}
+  '@zag-js/popper@1.15.0':
+    resolution: {integrity: sha512-Ra/0Ko423KN+8D4+mIFFkeTn9uaHfpxn6UUNIWwZKoiJQvED8DH4dPbLbmvGEoKp6qmisnRHAzi71NLgEhk0Mw==}
 
-  '@zag-js/presence@1.15.2':
-    resolution: {integrity: sha512-cNPJz3qeXdoYFEefxFixZoMDFzqfHsLgmi2ynmRrFlyHzHtFdvKjvS5ywo9YFGNgwKrEddS43n8gl3w3lgqBCA==}
+  '@zag-js/presence@1.15.0':
+    resolution: {integrity: sha512-hoxXis50pm79PpkY2kA1wdhh4AEo7t7pBv0VsQYZYjmzuFh4V5IMw9oa1EOfBlC6f/A+EMZ9E+xg+EVsB68a8w==}
 
-  '@zag-js/progress@1.15.2':
-    resolution: {integrity: sha512-VPunnrTYiJaHnnCKuh2ZARCnzgTtxYIiNKiUVPWlygsWy2AGg1K3AvVswF2CVfGpwbO4ioyBQO65EZkQiMN/Aw==}
+  '@zag-js/progress@1.15.0':
+    resolution: {integrity: sha512-/Mz26GR2rOAuoErNOiSGRpvwckTmbCD5nWGDE/aYlVRID13HcsmN15Zk2Jfa4LadqK88aIN8Iy0Sk4elG0+Efw==}
 
-  '@zag-js/qr-code@1.15.2':
-    resolution: {integrity: sha512-hFtwGGArxVJo7osbY3R73BHIX3Ldb8G4gtNDZ2fGcKAcp+SQg5GXUIBK17ncxJrOC7A1Wp7sdOoYNNOPWe2fYA==}
+  '@zag-js/qr-code@1.15.0':
+    resolution: {integrity: sha512-GkGy5k5tk6DIui9lGjDO8+e8TsSVOxEGp1lblPiaRm1ggIh10GhIfCQWGe/x78ezdie8WzxlSrma89suTpaiAQ==}
 
-  '@zag-js/radio-group@1.15.2':
-    resolution: {integrity: sha512-+V9Y4EZuNITMbA9iJisysqWW+JB3YdlFF6dAomvXN8nuOuj8HE02JHndIeMflDtW6Tz99JcJLS7lNXN7G5uEuw==}
+  '@zag-js/radio-group@1.15.0':
+    resolution: {integrity: sha512-+KTebHUtMsE/YDyGE8wF5VnWfZQp+f2WoAwwzBjfhPpRxXbOUMDo0pZEEr3yxkSvQ9hgCcBhMKH8pEk0SPxvjQ==}
 
-  '@zag-js/rating-group@1.15.2':
-    resolution: {integrity: sha512-g7F9NyB1MF6ydE9aEr9zLPXGKXZIH2ZsUBXEQ9u6apUhnchhCSHDw6xHVXI1hYGrJHnpf2xMw3Xu1opJge1DQg==}
+  '@zag-js/rating-group@1.15.0':
+    resolution: {integrity: sha512-omGKN97FhplFwBX9J/Mj7BCZuwFXSXssSVTKU7Yp2d1Cmxhez4+Ju7KdSRNnIoWB4OxFCxwZyaAPTcg3E0Pjrg==}
 
-  '@zag-js/react@1.15.2':
-    resolution: {integrity: sha512-T5QPiLbW4DoQ32NS5+Qu9NsIXKKz0d5MOpfEdXXuc6hKZdvV+V9d7EXeHBRohs3P6jqtf8FXpXDdK2trv37YlQ==}
+  '@zag-js/react@1.15.0':
+    resolution: {integrity: sha512-YSp9QBkdeBfZt4nVhJW+CUd5sNEEVAuwkmoZWDFUoDoWSAXwzSKuHCmTm5/8DaXg1IZD2bMrXgMNDqZv2x0hZw==}
     peerDependencies:
       react: '>=18.0.0'
       react-dom: '>=18.0.0'
 
-  '@zag-js/rect-utils@1.15.2':
-    resolution: {integrity: sha512-wPsOM4qYncwOli20MNINgl0ZwmMY11RvrgPvjcMrkJ9dVqU/YrCcXV4rIg8Zig5jxCT+mf7rWQe9aQJlNTVipA==}
+  '@zag-js/rect-utils@1.15.0':
+    resolution: {integrity: sha512-sjAn78x1t3XiDG3NT8SoFfyO0u7/SEJU5RKRhMgjTPoOLXTzZj+lu2d5N4cUw0uZTfeGb/ormObSchMQVhFgYQ==}
 
-  '@zag-js/remove-scroll@1.15.2':
-    resolution: {integrity: sha512-pXVuvFcAQND+C0KAzAve02hGaI/AgEhC7RpgpyUKaUzEccEsxLi40C88j1/2HCfta6GI7nd2e0QwPZiqngUIyA==}
+  '@zag-js/remove-scroll@1.15.0':
+    resolution: {integrity: sha512-vdWSAdgY8wJ7s4YeaKwTMwmZiRMBxCehmdktSxBWvwtAjU1cM3UWvjmZ9E6INJrQXxH9vDpe/rpFSyv1guIQIw==}
 
-  '@zag-js/scroll-snap@1.15.2':
-    resolution: {integrity: sha512-RswpsMHg0aWHsx7xqybnPm8bTL9ow17z9GhYgxSWtIi2U9wgkUHDtEJQcRNUA9PQEGyVd29B39NM0ir64HAhNQ==}
+  '@zag-js/scroll-snap@1.15.0':
+    resolution: {integrity: sha512-/LfBlsjoR4tVL3Djus3k9jKLhwC2ApdHTACxEc72TAewoPe4M8icnSDLXmKHvwwOhzK0HlFz8wGm6ZncAbQbuA==}
 
-  '@zag-js/select@1.15.2':
-    resolution: {integrity: sha512-Y07RlBIc8bVj2WklhS7tiVySZntBv9TE9sfiA8RcLU7KFFGTdS2XUoQV4fziJubUL8XFhNzEC92/bKeBLqpgDw==}
+  '@zag-js/select@1.15.0':
+    resolution: {integrity: sha512-4urUBADzhrsGEO/UsqHdjsgmDdF15Zzeid3ejEbIMTrkt2/mMMcQ1CShuxtsWqm2EUBz/N1kOcZlE6Tq69n7Xg==}
 
-  '@zag-js/signature-pad@1.15.2':
-    resolution: {integrity: sha512-vw7oD7afBfGvUyotJrFl+PjPVYOYZLgQ1eVAosKj54phgKvxheBr8/ySq9vlyTkyvOMjJ8zIkkxlywuqoZzl8g==}
+  '@zag-js/signature-pad@1.15.0':
+    resolution: {integrity: sha512-5Tj8vkrRxEkSV417oR2qdy+TRgDmS3W8dY7xsIjpbBf/kqkt/8Uo4JpaVH2vwQAFw9AwEFogBh9i6dHcXMy0rA==}
 
-  '@zag-js/slider@1.15.2':
-    resolution: {integrity: sha512-Lcrm+h4Vx0stD0ybAqD5tA1qOnrKEfQP9ucQsPUy+fY2em19XC6raOVOhAc6ROx4X0neTI/yEc1ARJQSaxtRZw==}
+  '@zag-js/slider@1.15.0':
+    resolution: {integrity: sha512-NYIsn3GKXIoPmvkDXsQmw9wdYg3QHbYHXnZ8Ewl2fVubN7S5mDlHSZs2iDVsBvX+a4RChWFRO6JHX8E1+BncOg==}
 
-  '@zag-js/splitter@1.15.2':
-    resolution: {integrity: sha512-LIuTTPRaw3inS64f2TLcFIlwjNe9Tx9mSE4VXf7wPhYitNKmyh7MeNE59na+wDzZisVwx9yBewAPfrZtbHDGBA==}
+  '@zag-js/splitter@1.15.0':
+    resolution: {integrity: sha512-Xnedl+cpnD/hv9m+GOYCK5K2xRxbs4xuP/EajYtgVcDw8E1X5cBmxHa1hCrp7BMgb2xYCvZ5et4hnmZfb+1X9g==}
 
-  '@zag-js/steps@1.15.2':
-    resolution: {integrity: sha512-NnS3wYQrFWA5OXu+jnlnPpm49rGpzHCDbN2UuUcMGvbYVETKEXEO9fC1XWh7PstVuNi03E/CrZGHl5cEjf/j8w==}
+  '@zag-js/steps@1.15.0':
+    resolution: {integrity: sha512-VoIDcDIEErZawmW2m0yTGlffqjfRuSwR37K9LdSRy8Q4Qzz3wV7jASaTjMhTya1hlreJ7tJg+Qbjqowvw9GndA==}
 
-  '@zag-js/store@1.15.2':
-    resolution: {integrity: sha512-oDJuRdu8SaGab06UycN96OgvNau1ynawDNNfQNhA7zoOIZlaJH6jP+5YaAPFila+wyjdw7svz5+4ejs8vXcjpw==}
+  '@zag-js/store@1.15.0':
+    resolution: {integrity: sha512-ecqjcy3b1GsULpsT8RVJV9KDaikajRN0XRg48HMvaGkaPIvxI6esyrE6RKnShuqr2eVXIPghgBnCnrJUev4UlA==}
 
-  '@zag-js/switch@1.15.2':
-    resolution: {integrity: sha512-2aEm5HDP/ENcLvoP77CH7DQTPXIMUzVilefHlz6WT0tQxQzOw8uMhUOYYcuNmEq0FNRUOyuMEMyZnZFUYAxqvQ==}
+  '@zag-js/switch@1.15.0':
+    resolution: {integrity: sha512-2CaAUTi7jM4lJjCYoSE1HWlFPCifI5GR+hufWOCYKpanf8VA/LM+t/a2Aq5QoBsWdcQv3B9mHxF/aVTDbnCKPQ==}
 
-  '@zag-js/tabs@1.15.2':
-    resolution: {integrity: sha512-SJMR4K59sxvNZEIgnJfbweLzncmgxRWTBm+FamwMtP8DKQ3RETNdjrn4aA9qLUsCObapk06KT3iTeiCXzuBaFA==}
+  '@zag-js/tabs@1.15.0':
+    resolution: {integrity: sha512-voHWpibC1TKLmbAJfixOesxrCio7wK+gdLRvh7Xh5u+3VSsT2fP2wEw3ySkJbpw3MpEE7R2OWkInbCV/SwPcsA==}
 
-  '@zag-js/tags-input@1.15.2':
-    resolution: {integrity: sha512-/mAuB8emhGoo3eoIgmlT/kQE27ukRlhghgwp3OjvEen+iTpz0XIWM+S+IV3QU6U4DlhwkadQaINht/c9ln6gxQ==}
+  '@zag-js/tags-input@1.15.0':
+    resolution: {integrity: sha512-CB60z+/I/Nso1gwatTO1qrk4XITxDd4qtRD+l6fuuKyOkZGgKm0AP0W+/6qUuOvtWIuY6fas3yZHFmF2eEZ9vQ==}
 
-  '@zag-js/time-picker@1.15.2':
-    resolution: {integrity: sha512-Aoe9GdbrvAMP1fdOEmzCESr/dO+cGnqhCoa0UkZB5wuB4dT3S02hRGSZsHO51Eon2NpzHPG9j+/alncwOe77Tw==}
+  '@zag-js/time-picker@1.15.0':
+    resolution: {integrity: sha512-4S02433X88X3MW/BxaFJiWna4BIRXsAdrmDcBb0PZ8dln29DUmpD8YHcFtONsKvmCAmrbO7Gr65n86nQwK8zeg==}
     peerDependencies:
       '@internationalized/date': '>=3.0.0'
 
-  '@zag-js/timer@1.15.2':
-    resolution: {integrity: sha512-v8RN3cwFuNXxuDMuxxfXKCSd+Z1UT6Ct+ueU3PRZqHqXU9u4k9Mm+vROIqnNzhCCdIHNxsqUt32/2zsRRaubbw==}
+  '@zag-js/timer@1.15.0':
+    resolution: {integrity: sha512-gDsYm4C9yju7g/r5u7n7mRQ2UY7diXXVbbLFr5Ja+0iUXgbD+uoSZEt9HypVc5TL9NWEEwn5/tut36owEeW4rw==}
 
-  '@zag-js/toast@1.15.2':
-    resolution: {integrity: sha512-OohJvGTy+J1MpydJ4eCV36picggfF9VbDW4nK97TT+4bIIRDgW+PGYgB4dd+PvEjRrk9194Kkm93lud95yOyZg==}
+  '@zag-js/toast@1.15.0':
+    resolution: {integrity: sha512-0RupMCXyGr7/La4Zlei7VqBF0VPNJelGd7zimLboe+IKZyy4Ypi/N2IX14rl8JZQDsDEgkLUl33xrSk/9RW2nQ==}
 
-  '@zag-js/toggle-group@1.15.2':
-    resolution: {integrity: sha512-JhWV0GY2NRgDhlzP73ADlG1E4NFXqv1h2q5+m3Rmos+Bi8soOV437jch/wy+M+xYN5vdZCczXJu9BumHNlknhA==}
+  '@zag-js/toggle-group@1.15.0':
+    resolution: {integrity: sha512-992vMz/2sriLrUKI3LpT/01kCGTbPGLgGLibiHRt562i0v9+2tV+GiY2jBctHZjJaKPrzBY3H0l8CCCvDj8gng==}
 
-  '@zag-js/toggle@1.15.2':
-    resolution: {integrity: sha512-wtDeIRhDeVhaUboWQ2GrxlCC4+cLRyZzvZiN84tad7H/sUKq9hNDdROcCnIYBhEkb1Qf4sjR8KszY12YLtJx6A==}
+  '@zag-js/toggle@1.15.0':
+    resolution: {integrity: sha512-mMSQ1+f1hOMp/7gLA7rTeiSNyeZxsCjRxP4XnTBY4BxJ5LswLuhem9CplBwaVthkhY1Y/5f3HHu80LBcfF+BVQ==}
 
-  '@zag-js/tooltip@1.15.2':
-    resolution: {integrity: sha512-Spw5ewga3DNaT5H4AnrtsxJ6ebRoTxy+igwojGTYUCNUoxyQn6W3UpqZpgAAfw8B236bduTRh9MW9CsaM/hnmg==}
+  '@zag-js/tooltip@1.15.0':
+    resolution: {integrity: sha512-sOpVECyfdS4RZBx46mSV+RPc9C5k9JvYQYUfoOVWh0E5RLSEz5bQm5xxctKOHfCOv+vJNTfG5gP596B1r2+Fkw==}
 
-  '@zag-js/tour@1.15.2':
-    resolution: {integrity: sha512-OW+autOwwsVMGwcYCxdCh3Hibeeag6Sg8w02XfmX7E+T2u9a+GGdLOrH7DPM2oHTbZV0iBUqIaKxGPKgRYZNng==}
+  '@zag-js/tour@1.15.0':
+    resolution: {integrity: sha512-EplcxoiE0z9vI0z6675+ABclQ9Mi1YUWhDZOHx7wfjRzpfawmJoBAlNDKzK3wc801d6OxgJx69SPj7ac0BwwwA==}
 
-  '@zag-js/tree-view@1.15.2':
-    resolution: {integrity: sha512-HWDHH3rpGEz3IN5bsj8EHZnU0ttk8uJwBOnH3reYcFQEQskA8cmyzd7y9hdBEn8PzAns+iOjUBj49IVmoYpOIg==}
+  '@zag-js/tree-view@1.15.0':
+    resolution: {integrity: sha512-wqdd+hu1bDOCWtnZ8MarRFHqbZF2t8qKBM3kO42IBq7jTI/93LCkHSlceEPft9dgZ6Ea9km0YJMHhoTqCPZ/fw==}
 
-  '@zag-js/types@1.15.2':
-    resolution: {integrity: sha512-qEHNRA/uOYQjvXzI/ie6vuOD74/p7w6MA4X1VoZEYF2/sbIQjlRn6SzpeV3RyFZBzl6WBO6RqV/XEbgpvGSb5w==}
+  '@zag-js/types@1.15.0':
+    resolution: {integrity: sha512-lV2ov2M07BlmjDUCSwBeHxPApHI3oAiLytG94AqcYvQ0BtsCRo5T60yRQ0syFc6fHf0e9+kwt89uoIgfGFYfmw==}
 
-  '@zag-js/utils@1.15.2':
-    resolution: {integrity: sha512-JdlyGT6yfG2ub2FftrB6BidIlvD04cSwdKYJGb/M+NJ7p7uxnZUZMxAjeBmTLhM1nWbtJPVq3oDTYz/cBBZLng==}
+  '@zag-js/utils@1.15.0':
+    resolution: {integrity: sha512-XctFny5H8C00BsougV40Yp0qVEj9M2d/NRme7B33mon9wG+3hscZwP6miJmF6BYI5Pgu6e2P0Sv45FddQU1Tkg==}
+
+  accepts@2.0.0:
+    resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
+    engines: {node: '>= 0.6'}
 
   acorn-jsx@5.3.2:
     resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
@@ -1684,11 +1726,6 @@ packages:
     engines: {node: '>=0.4.0'}
     hasBin: true
 
-  acorn@8.15.0:
-    resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
-    engines: {node: '>=0.4.0'}
-    hasBin: true
-
   ajv@6.12.6:
     resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
 
@@ -1771,9 +1808,6 @@ packages:
   ast-types-flow@0.0.8:
     resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
 
-  ast-v8-to-istanbul@0.3.3:
-    resolution: {integrity: sha512-MuXMrSLVVoA6sYN/6Hke18vMzrT4TZNbZIj/hvh0fnYFpO+/kFXcLIaiPwXXWaQUPg4yJD8fj+lfJ7/1EBconw==}
-
   async-function@1.0.0:
     resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
     engines: {node: '>= 0.4'}
@@ -1792,8 +1826,8 @@ packages:
     resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==}
     engines: {node: '>=4'}
 
-  axios@1.10.0:
-    resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==}
+  axios@1.8.4:
+    resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==}
 
   axobject-query@4.1.0:
     resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
@@ -1816,24 +1850,32 @@ packages:
     resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
     engines: {node: '>=8'}
 
-  brace-expansion@1.1.12:
-    resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
+  body-parser@2.2.0:
+    resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==}
+    engines: {node: '>=18'}
+
+  brace-expansion@1.1.11:
+    resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
 
-  brace-expansion@2.0.2:
-    resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+  brace-expansion@2.0.1:
+    resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
 
   braces@3.0.3:
     resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
     engines: {node: '>=8'}
 
-  browserslist@4.25.0:
-    resolution: {integrity: sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==}
+  browserslist@4.24.4:
+    resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==}
     engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
     hasBin: true
 
-  builtin-modules@5.0.0:
-    resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==}
-    engines: {node: '>=18.20'}
+  builtin-modules@3.3.0:
+    resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
+    engines: {node: '>=6'}
+
+  bytes@3.1.2:
+    resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+    engines: {node: '>= 0.8'}
 
   c12@1.11.1:
     resolution: {integrity: sha512-KDU0TvSvVdaYcQKQ6iPHATGz/7p/KiVjPg4vQrB6Jg/wX9R0yl5RZxWm9IoZqaIHD2+6PZd81+KMGwRr/lRIUg==}
@@ -1867,8 +1909,8 @@ packages:
     resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==}
     engines: {node: '>=16'}
 
-  caniuse-lite@1.0.30001724:
-    resolution: {integrity: sha512-WqJo7p0TbHDOythNTqYujmaJTvtYRZrjpP8TCvH6Vb9CYJerJNKamKzIWOM4BkQatWj9H2lYulpdAQNBe7QhNA==}
+  caniuse-lite@1.0.30001707:
+    resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==}
 
   ccount@2.0.1:
     resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
@@ -1913,8 +1955,8 @@ packages:
   character-reference-invalid@2.0.1:
     resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
 
-  chart.js@4.5.0:
-    resolution: {integrity: sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ==}
+  chart.js@4.4.9:
+    resolution: {integrity: sha512-EyZ9wWKgpAU0fLJ43YAEIF8sr5F2W3LqbS40ZJyHIner2lY14ufqv2VMp69MAiZ2rpwxEUxEhIH/0U3xyRynxg==}
     engines: {pnpm: '>=8'}
 
   chartjs-plugin-annotation@3.1.0:
@@ -2000,19 +2042,31 @@ packages:
     resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
     engines: {node: ^14.18.0 || >=16.10.0}
 
+  content-disposition@1.0.0:
+    resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==}
+    engines: {node: '>= 0.6'}
+
+  content-type@1.0.5:
+    resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
+    engines: {node: '>= 0.6'}
+
   convert-source-map@1.9.0:
     resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
 
+  cookie-signature@1.2.2:
+    resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==}
+    engines: {node: '>=6.6.0'}
+
   cookie@0.7.2:
     resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
     engines: {node: '>= 0.6'}
 
-  cookie@1.0.2:
-    resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==}
-    engines: {node: '>=18'}
+  core-js-compat@3.41.0:
+    resolution: {integrity: sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==}
 
-  core-js-compat@3.43.0:
-    resolution: {integrity: sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==}
+  cors@2.8.5:
+    resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
+    engines: {node: '>= 0.10'}
 
   cosmiconfig@7.1.0:
     resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
@@ -2130,8 +2184,8 @@ packages:
   debounce-promise@3.1.2:
     resolution: {integrity: sha512-rZHcgBkbYavBeD9ej6sP56XfG53d51CD4dnaw989YX/nZ/ZJfgRx/9ePKmTNiUiyQvh4mtrMoS3OAWW+yoYtpg==}
 
-  debug@4.4.1:
-    resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
+  debug@4.4.0:
+    resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
     engines: {node: '>=6.0'}
     peerDependencies:
       supports-color: '*'
@@ -2139,8 +2193,8 @@ packages:
       supports-color:
         optional: true
 
-  decode-named-character-reference@1.2.0:
-    resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==}
+  decode-named-character-reference@1.1.0:
+    resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==}
 
   deep-eql@5.0.2:
     resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
@@ -2167,6 +2221,10 @@ packages:
     resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
     engines: {node: '>=0.4.0'}
 
+  depd@2.0.0:
+    resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+    engines: {node: '>= 0.8'}
+
   dequal@2.0.3:
     resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
     engines: {node: '>=6'}
@@ -2201,8 +2259,11 @@ packages:
   eastasianwidth@0.2.0:
     resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
 
-  electron-to-chromium@1.5.171:
-    resolution: {integrity: sha512-scWpzXEJEMrGJa4Y6m/tVotb0WuvNmasv3wWVzUAeCgKU0ToFOhUW6Z+xWnRQANMYGxN4ngJXIThgBJOqzVPCQ==}
+  ee-first@1.1.1:
+    resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+
+  electron-to-chromium@1.5.123:
+    resolution: {integrity: sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==}
 
   elkjs@0.10.0:
     resolution: {integrity: sha512-v/3r+3Bl2NMrWmVoRTMBtHtWvRISTix/s9EfnsfEWApNrsmNjqgqJOispCGg46BPwIFdkag3N/HYSxJczvCm6w==}
@@ -2213,6 +2274,10 @@ packages:
   emoji-regex@9.2.2:
     resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
 
+  encodeurl@2.0.0:
+    resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
+    engines: {node: '>= 0.8'}
+
   error-ex@1.3.2:
     resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
 
@@ -2232,8 +2297,8 @@ packages:
     resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==}
     engines: {node: '>= 0.4'}
 
-  es-module-lexer@1.7.0:
-    resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
+  es-module-lexer@1.6.0:
+    resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==}
 
   es-object-atoms@1.1.1:
     resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
@@ -2254,15 +2319,18 @@ packages:
   es6-promise@4.2.8:
     resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
 
-  esbuild@0.25.5:
-    resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==}
-    engines: {node: '>=18'}
+  esbuild@0.21.5:
+    resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
+    engines: {node: '>=12'}
     hasBin: true
 
   escalade@3.2.0:
     resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
     engines: {node: '>=6'}
 
+  escape-html@1.0.3:
+    resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+
   escape-string-regexp@1.0.5:
     resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
     engines: {node: '>=0.8.0'}
@@ -2275,8 +2343,8 @@ packages:
     resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
     engines: {node: '>=12'}
 
-  eslint-config-prettier@10.1.5:
-    resolution: {integrity: sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==}
+  eslint-config-prettier@10.1.2:
+    resolution: {integrity: sha512-Epgp/EofAUeEpIdZkW60MHKvPyru1ruQJxPL+WIycnaPApuseK0Zpkrh/FwL9oIpQvIhJwV7ptOy0DWUjTlCiA==}
     hasBin: true
     peerDependencies:
       eslint: '>=7.0.0'
@@ -2291,14 +2359,14 @@ packages:
     peerDependencies:
       eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9
 
-  eslint-plugin-perfectionist@4.15.0:
-    resolution: {integrity: sha512-pC7PgoXyDnEXe14xvRUhBII8A3zRgggKqJFx2a82fjrItDs1BSI7zdZnQtM2yQvcyod6/ujmzb7ejKPx8lZTnw==}
+  eslint-plugin-perfectionist@4.12.3:
+    resolution: {integrity: sha512-V0dmpq6fBbn0BYofHsiRuuY9wgkKMDkdruM0mIRBIJ8XZ8vEaTAZqFsywm40RuWNVnduWBt5HO1ZZ+flE2yqjg==}
     engines: {node: ^18.0.0 || >=20.0.0}
     peerDependencies:
       eslint: '>=8.45.0'
 
-  eslint-plugin-prettier@5.5.0:
-    resolution: {integrity: sha512-8qsOYwkkGrahrgoUv76NZi23koqXOGiiEzXMrT8Q7VcYaUISR+5MorIUxfWqYXN0fN/31WbSrxCxFkVQ43wwrA==}
+  eslint-plugin-prettier@5.4.0:
+    resolution: {integrity: sha512-BvQOvUhkVQM1i63iMETK9Hjud9QhqBnbtT1Zc642p9ynzBuCe5pybkOnvqZIBypXmMlsGcnU4HZ8sCTPfpAexA==}
     engines: {node: ^14.18.0 || >=16.0.0}
     peerDependencies:
       '@types/eslint': '>=8.0.0'
@@ -2311,11 +2379,11 @@ packages:
       eslint-config-prettier:
         optional: true
 
-  eslint-plugin-react-hooks@5.2.0:
-    resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==}
+  eslint-plugin-react-hooks@4.6.2:
+    resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==}
     engines: {node: '>=10'}
     peerDependencies:
-      eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
+      eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
 
   eslint-plugin-react-refresh@0.4.20:
     resolution: {integrity: sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==}
@@ -2328,26 +2396,26 @@ packages:
     peerDependencies:
       eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
 
-  eslint-plugin-unicorn@59.0.1:
-    resolution: {integrity: sha512-EtNXYuWPUmkgSU2E7Ttn57LbRREQesIP1BiLn7OZLKodopKfDXfBUkC/0j6mpw2JExwf43Uf3qLSvrSvppgy8Q==}
-    engines: {node: ^18.20.0 || ^20.10.0 || >=21.0.0}
+  eslint-plugin-unicorn@55.0.0:
+    resolution: {integrity: sha512-n3AKiVpY2/uDcGrS3+QsYDkjPfaOrNrsfQxU9nt5nitd9KuvVXrfAvgCO9DYPSfap+Gqjw9EOrXIsBp5tlHZjA==}
+    engines: {node: '>=18.18'}
     peerDependencies:
-      eslint: '>=9.22.0'
+      eslint: '>=8.56.0'
 
-  eslint-scope@8.4.0:
-    resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
+  eslint-scope@8.3.0:
+    resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
   eslint-visitor-keys@3.4.3:
     resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 
-  eslint-visitor-keys@4.2.1:
-    resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
+  eslint-visitor-keys@4.2.0:
+    resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  eslint@9.29.0:
-    resolution: {integrity: sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==}
+  eslint@9.26.0:
+    resolution: {integrity: sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     hasBin: true
     peerDependencies:
@@ -2356,8 +2424,8 @@ packages:
       jiti:
         optional: true
 
-  espree@10.4.0:
-    resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
+  espree@10.3.0:
+    resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
   espree@9.6.1:
@@ -2391,10 +2459,32 @@ packages:
     resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
     engines: {node: '>=0.10.0'}
 
-  expect-type@1.2.1:
-    resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==}
+  etag@1.8.1:
+    resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+    engines: {node: '>= 0.6'}
+
+  eventsource-parser@3.0.1:
+    resolution: {integrity: sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==}
+    engines: {node: '>=18.0.0'}
+
+  eventsource@3.0.6:
+    resolution: {integrity: sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA==}
+    engines: {node: '>=18.0.0'}
+
+  expect-type@1.2.0:
+    resolution: {integrity: sha512-80F22aiJ3GLyVnS/B3HzgR6RelZVumzj9jkL0Rhz4h0xYbNW9PjlQz5h3J/SShErbXBc295vseR4/MIbVmUbeA==}
     engines: {node: '>=12.0.0'}
 
+  express-rate-limit@7.5.0:
+    resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==}
+    engines: {node: '>= 16'}
+    peerDependencies:
+      express: ^4.11 || 5 || ^5.0.0-beta.1
+
+  express@5.1.0:
+    resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==}
+    engines: {node: '>= 18'}
+
   extend@3.0.2:
     resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
 
@@ -2432,14 +2522,6 @@ packages:
   fbjs@3.0.5:
     resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==}
 
-  fdir@6.4.6:
-    resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==}
-    peerDependencies:
-      picomatch: ^3 || ^4
-    peerDependenciesMeta:
-      picomatch:
-        optional: true
-
   file-entry-cache@8.0.0:
     resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
     engines: {node: '>=16.0.0'}
@@ -2448,12 +2530,16 @@ packages:
     resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
     engines: {node: '>=8'}
 
+  finalhandler@2.1.0:
+    resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==}
+    engines: {node: '>= 0.8'}
+
   find-root@1.1.0:
     resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
 
-  find-up-simple@1.0.1:
-    resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==}
-    engines: {node: '>=18'}
+  find-up@4.1.0:
+    resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
+    engines: {node: '>=8'}
 
   find-up@5.0.0:
     resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
@@ -2488,14 +2574,22 @@ packages:
     resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
     engines: {node: '>=14'}
 
-  form-data@4.0.3:
-    resolution: {integrity: sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==}
+  form-data@4.0.2:
+    resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==}
     engines: {node: '>= 6'}
 
   format@0.2.2:
     resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
     engines: {node: '>=0.4.x'}
 
+  forwarded@0.2.0:
+    resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
+    engines: {node: '>= 0.6'}
+
+  fresh@2.0.0:
+    resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
+    engines: {node: '>= 0.8'}
+
   fs-minipass@2.1.0:
     resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
     engines: {node: '>= 8'}
@@ -2560,8 +2654,8 @@ packages:
     resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
     engines: {node: '>=18'}
 
-  globals@16.2.0:
-    resolution: {integrity: sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==}
+  globals@15.15.0:
+    resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
     engines: {node: '>=18'}
 
   globalthis@1.0.4:
@@ -2575,8 +2669,8 @@ packages:
   graphemer@1.4.0:
     resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
 
-  graphql@16.11.0:
-    resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==}
+  graphql@16.10.0:
+    resolution: {integrity: sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==}
     engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
 
   handlebars@4.7.8:
@@ -2584,9 +2678,9 @@ packages:
     engines: {node: '>=0.4.7'}
     hasBin: true
 
-  happy-dom@18.0.1:
-    resolution: {integrity: sha512-qn+rKOW7KWpVTtgIUi6RVmTBZJSe2k0Db0vh1f7CWrWclkkc7/Q+FrOfkZIb2eiErLyqu5AXEzE7XthO9JVxRA==}
-    engines: {node: '>=20.0.0'}
+  happy-dom@17.4.6:
+    resolution: {integrity: sha512-OEV1hDe9i2rFr66+WZNiwy1S8rAJy6bRXmXql68YJDjdfHBRbN76om+qVh68vQACf6y5Bcr90e/oK53RQxsDdg==}
+    engines: {node: '>=18.0.0'}
 
   has-bigints@1.1.0:
     resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
@@ -2639,6 +2733,9 @@ packages:
   hoist-non-react-statics@3.3.2:
     resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
 
+  hosted-git-info@2.8.9:
+    resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
+
   html-escaper@2.0.2:
     resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
 
@@ -2651,28 +2748,32 @@ packages:
   html-url-attributes@3.0.1:
     resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==}
 
-  i18next-browser-languagedetector@8.2.0:
-    resolution: {integrity: sha512-P+3zEKLnOF0qmiesW383vsLdtQVyKtCNA9cjSoKCppTKPQVfKd2W8hbVo5ZhNJKDqeM7BOcvNoKJOjpHh4Js9g==}
+  http-errors@2.0.0:
+    resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
+    engines: {node: '>= 0.8'}
+
+  i18next-browser-languagedetector@8.1.0:
+    resolution: {integrity: sha512-mHZxNx1Lq09xt5kCauZ/4bsXOEA2pfpwSoU11/QTJB+pD94iONFwp+ohqi///PwiFvjFOxe1akYCdHyFo1ng5Q==}
 
   i18next-http-backend@3.0.2:
     resolution: {integrity: sha512-PdlvPnvIp4E1sYi46Ik4tBYh/v/NbYfFFgTjkwFl0is8A18s7/bx9aXqsrOax9WUbeNS6mD2oix7Z0yGGf6m5g==}
 
-  i18next@25.2.1:
-    resolution: {integrity: sha512-+UoXK5wh+VlE1Zy5p6MjcvctHXAhRwQKCxiJD8noKZzIXmnAX8gdHX5fLPA3MEVxEN4vbZkQFy8N0LyD9tUqPw==}
+  i18next@25.1.2:
+    resolution: {integrity: sha512-SP63m8LzdjkrAjruH7SCI3ndPSgjt4/wX7ouUUOzCW/eY+HzlIo19IQSfYA9X3qRiRP1SYtaTsg/Oz/PGsfD8w==}
     peerDependencies:
       typescript: ^5
     peerDependenciesMeta:
       typescript:
         optional: true
 
+  iconv-lite@0.6.3:
+    resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+    engines: {node: '>=0.10.0'}
+
   ignore@5.3.2:
     resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
     engines: {node: '>= 4'}
 
-  ignore@7.0.5:
-    resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
-    engines: {node: '>= 4'}
-
   import-fresh@3.3.1:
     resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
     engines: {node: '>=6'}
@@ -2685,9 +2786,8 @@ packages:
     resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
     engines: {node: '>=8'}
 
-  indent-string@5.0.0:
-    resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==}
-    engines: {node: '>=12'}
+  inherits@2.0.4:
+    resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
 
   inline-style-parser@0.2.4:
     resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==}
@@ -2700,6 +2800,10 @@ packages:
     resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
     engines: {node: '>=12'}
 
+  ipaddr.js@1.9.1:
+    resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
+    engines: {node: '>= 0.10'}
+
   is-alphabetical@1.0.4:
     resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==}
 
@@ -2735,9 +2839,9 @@ packages:
     resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
     engines: {node: '>= 0.4'}
 
-  is-builtin-module@5.0.0:
-    resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==}
-    engines: {node: '>=18.20'}
+  is-builtin-module@3.2.1:
+    resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==}
+    engines: {node: '>=6'}
 
   is-callable@1.2.7:
     resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
@@ -2806,6 +2910,9 @@ packages:
     resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
     engines: {node: '>=12'}
 
+  is-promise@4.0.0:
+    resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==}
+
   is-regex@1.2.1:
     resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
     engines: {node: '>= 0.4'}
@@ -2874,8 +2981,8 @@ packages:
   jackspeak@3.4.3:
     resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
 
-  jackspeak@4.1.1:
-    resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==}
+  jackspeak@4.1.0:
+    resolution: {integrity: sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==}
     engines: {node: 20 || >=22}
 
   javascript-natural-sort@0.7.1:
@@ -2888,9 +2995,6 @@ packages:
   js-tokens@4.0.0:
     resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
 
-  js-tokens@9.0.1:
-    resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
-
   js-yaml@3.14.1:
     resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
     hasBin: true
@@ -2899,9 +3003,13 @@ packages:
     resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
     hasBin: true
 
-  jsesc@3.0.2:
-    resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==}
-    engines: {node: '>=6'}
+  jsesc@0.5.0:
+    resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
+    hasBin: true
+
+  jsesc@2.5.2:
+    resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
+    engines: {node: '>=4'}
     hasBin: true
 
   jsesc@3.1.0:
@@ -2950,6 +3058,10 @@ packages:
   lines-and-columns@1.2.4:
     resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
 
+  locate-path@5.0.0:
+    resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
+    engines: {node: '>=8'}
+
   locate-path@6.0.0:
     resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
     engines: {node: '>=10'}
@@ -2976,8 +3088,8 @@ packages:
     resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
     hasBin: true
 
-  loupe@3.1.4:
-    resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==}
+  loupe@3.1.3:
+    resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==}
 
   lowlight@1.20.0:
     resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==}
@@ -3055,9 +3167,17 @@ packages:
   mdast-util-to-string@4.0.0:
     resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
 
+  media-typer@1.1.0:
+    resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==}
+    engines: {node: '>= 0.8'}
+
   memoize-one@6.0.0:
     resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==}
 
+  merge-descriptors@2.0.0:
+    resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==}
+    engines: {node: '>=18'}
+
   merge2@1.4.1:
     resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
     engines: {node: '>= 8'}
@@ -3154,16 +3274,24 @@ packages:
     resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
     engines: {node: '>= 0.6'}
 
+  mime-db@1.54.0:
+    resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
+    engines: {node: '>= 0.6'}
+
   mime-types@2.1.35:
     resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
     engines: {node: '>= 0.6'}
 
+  mime-types@3.0.1:
+    resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==}
+    engines: {node: '>= 0.6'}
+
   min-indent@1.0.1:
     resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
     engines: {node: '>=4'}
 
-  minimatch@10.0.3:
-    resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==}
+  minimatch@10.0.1:
+    resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==}
     engines: {node: 20 || >=22}
 
   minimatch@3.1.2:
@@ -3208,8 +3336,8 @@ packages:
   ms@2.1.3:
     resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
 
-  msw@2.10.2:
-    resolution: {integrity: sha512-RCKM6IZseZQCWcSWlutdf590M8nVfRHG1ImwzOtwz8IYxgT4zhUO0rfTcTvDGiaFE0Rhcc+h43lcF3Jc9gFtwQ==}
+  msw@2.7.6:
+    resolution: {integrity: sha512-P+rwn43ktxN8ghcl8q+hSAUlEi0PbJpDhGmDkw4zeUnRj3hBCVynWD+dTu38yLYKCE9ZF1OYcvpy7CTBRcqkZA==}
     engines: {node: '>=18'}
     hasBin: true
     peerDependencies:
@@ -3234,14 +3362,18 @@ packages:
     resolution: {integrity: sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==}
     engines: {node: '>=18'}
 
+  negotiator@1.0.0:
+    resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
+    engines: {node: '>= 0.6'}
+
   neo-async@2.6.2:
     resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
 
-  next-themes@0.4.6:
-    resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==}
+  next-themes@0.3.0:
+    resolution: {integrity: sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==}
     peerDependencies:
-      react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
+      react: ^16.8 || ^17 || ^18
+      react-dom: ^16.8 || ^17 || ^18
 
   node-fetch-native@1.6.6:
     resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==}
@@ -3258,6 +3390,9 @@ packages:
   node-releases@2.0.19:
     resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
 
+  normalize-package-data@2.5.0:
+    resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
+
   normalize-path@3.0.0:
     resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
     engines: {node: '>=0.10.0'}
@@ -3298,6 +3433,13 @@ packages:
   ohash@1.1.6:
     resolution: {integrity: sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg==}
 
+  on-finished@2.4.1:
+    resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+    engines: {node: '>= 0.8'}
+
+  once@1.4.0:
+    resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
   openapi-merge-cli@1.3.2:
     resolution: {integrity: sha512-f2F5SRwZpcxvEpMm776Lh2XW9XqNuRedMzlCA0usx9JgQmZUhtC24px4zFYc5J/ZYXvNG6mdqdj/D0BnfEy6AA==}
     hasBin: true
@@ -3316,14 +3458,26 @@ packages:
     resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
     engines: {node: '>= 0.4'}
 
+  p-limit@2.3.0:
+    resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
+    engines: {node: '>=6'}
+
   p-limit@3.1.0:
     resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
     engines: {node: '>=10'}
 
+  p-locate@4.1.0:
+    resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
+    engines: {node: '>=8'}
+
   p-locate@5.0.0:
     resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
     engines: {node: '>=10'}
 
+  p-try@2.2.0:
+    resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
+    engines: {node: '>=6'}
+
   package-json-from-dist@1.0.1:
     resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
 
@@ -3341,6 +3495,10 @@ packages:
     resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
     engines: {node: '>=8'}
 
+  parseurl@1.3.3:
+    resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+    engines: {node: '>= 0.8'}
+
   path-browserify@1.0.1:
     resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
 
@@ -3366,6 +3524,10 @@ packages:
   path-to-regexp@6.3.0:
     resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==}
 
+  path-to-regexp@8.2.0:
+    resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==}
+    engines: {node: '>=16'}
+
   path-type@4.0.0:
     resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
     engines: {node: '>=8'}
@@ -3397,6 +3559,10 @@ packages:
     resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
     engines: {node: '>=12'}
 
+  pkce-challenge@5.0.0:
+    resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==}
+    engines: {node: '>=16.20.0'}
+
   pkg-types@1.3.1:
     resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
 
@@ -3408,8 +3574,8 @@ packages:
     resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
     engines: {node: '>= 0.4'}
 
-  postcss@8.5.6:
-    resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
+  postcss@8.5.3:
+    resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
     engines: {node: ^10 || ^12 || >=14}
 
   prelude-ls@1.2.1:
@@ -3446,8 +3612,12 @@ packages:
   property-information@5.6.0:
     resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==}
 
-  property-information@7.1.0:
-    resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
+  property-information@7.0.0:
+    resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==}
+
+  proxy-addr@2.0.7:
+    resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
+    engines: {node: '>= 0.10'}
 
   proxy-compare@3.0.1:
     resolution: {integrity: sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q==}
@@ -3468,12 +3638,24 @@ packages:
   pure-color@1.3.0:
     resolution: {integrity: sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==}
 
+  qs@6.14.0:
+    resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
+    engines: {node: '>=0.6'}
+
   querystringify@2.2.0:
     resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
 
   queue-microtask@1.2.3:
     resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
 
+  range-parser@1.2.1:
+    resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+    engines: {node: '>= 0.6'}
+
+  raw-body@3.0.0:
+    resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==}
+    engines: {node: '>= 0.8'}
+
   rc9@2.1.2:
     resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==}
 
@@ -3486,25 +3668,25 @@ packages:
       chart.js: ^4.1.1
       react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
 
-  react-dom@19.1.0:
-    resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==}
+  react-dom@18.3.1:
+    resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
     peerDependencies:
-      react: ^19.1.0
+      react: ^18.3.1
 
-  react-hook-form@7.58.1:
-    resolution: {integrity: sha512-Lml/KZYEEFfPhUVgE0RdCVpnC4yhW+PndRhbiTtdvSlQTL8IfVR+iQkBjLIvmmc6+GGoVeM11z37ktKFPAb0FA==}
+  react-hook-form@7.56.2:
+    resolution: {integrity: sha512-vpfuHuQMF/L6GpuQ4c3ZDo+pRYxIi40gQqsCmmfUBwm+oqvBhKhwghCuj2o00YCgSfU6bR9KC/xnQGWm3Gr08A==}
     engines: {node: '>=18.0.0'}
     peerDependencies:
       react: ^16.8.0 || ^17 || ^18 || ^19
 
-  react-hotkeys-hook@5.1.0:
-    resolution: {integrity: sha512-GCNGXjBzV9buOS3REoQFmSmE4WTvBhYQ0YrAeeMZI83bhXg3dRWsLHXDutcVDdEjwJqJCxk5iewWYX5LtFUd7g==}
+  react-hotkeys-hook@4.6.1:
+    resolution: {integrity: sha512-XlZpbKUj9tkfgPgT9gA+1p7Ey6vFIZHttUjPqpTdyT5nqQ8mHL7elxvSbaC+dpSiHUSmr21Ya1mDxBZG3aje4Q==}
     peerDependencies:
-      react: '>=16.8.0'
-      react-dom: '>=16.8.0'
+      react: '>=16.8.1'
+      react-dom: '>=16.8.1'
 
-  react-i18next@15.5.3:
-    resolution: {integrity: sha512-ypYmOKOnjqPEJZO4m1BI0kS8kWqkBNsKYyhVUfij0gvjy9xJNoG/VcGkxq5dRlVwzmrmY1BQMAmpbbUBLwC4Kw==}
+  react-i18next@15.5.1:
+    resolution: {integrity: sha512-C8RZ7N7H0L+flitiX6ASjq9p5puVJU1Z8VyL3OgM/QOMRf40BMZX+5TkpxzZVcTmOLPX5zlti4InEX5pFyiVeA==}
     peerDependencies:
       i18next: '>= 23.2.3'
       react: '>= 16.8.0'
@@ -3545,34 +3727,30 @@ packages:
   react-lifecycles-compat@3.0.4:
     resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==}
 
-  react-markdown@10.1.0:
-    resolution: {integrity: sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==}
+  react-markdown@9.1.0:
+    resolution: {integrity: sha512-xaijuJB0kzGiUdG7nc2MOMDUDBWPyGAjZtUrow9XxUeua8IqeP+VlIfAZ3bphpcLTnSZXz6z9jcVC/TCwbfgdw==}
     peerDependencies:
       '@types/react': '>=18'
       react: '>=18'
 
-  react-resizable-panels@3.0.3:
-    resolution: {integrity: sha512-7HA8THVBHTzhDK4ON0tvlGXyMAJN1zBeRpuyyremSikgYh2ku6ltD7tsGQOcXx4NKPrZtYCm/5CBr+dkruTGQw==}
+  react-resizable-panels@2.1.7:
+    resolution: {integrity: sha512-JtT6gI+nURzhMYQYsx8DKkx6bSoOGFp7A3CwMrOb8y5jFHFyqwo9m68UhmXRw57fRVJksFn1TSlm3ywEQ9vMgA==}
     peerDependencies:
       react: ^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
       react-dom: ^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
 
-  react-router-dom@7.6.2:
-    resolution: {integrity: sha512-Q8zb6VlTbdYKK5JJBLQEN06oTUa/RAbG/oQS1auK1I0TbJOXktqm+QENEVJU6QvWynlXPRBXI3fiOQcSEA78rA==}
-    engines: {node: '>=20.0.0'}
+  react-router-dom@6.30.0:
+    resolution: {integrity: sha512-x30B78HV5tFk8ex0ITwzC9TTZMua4jGyA9IUlH1JLQYQTFyxr/ZxwOJq7evg1JX1qGVUcvhsmQSKdPncQrjTgA==}
+    engines: {node: '>=14.0.0'}
     peerDependencies:
-      react: '>=18'
-      react-dom: '>=18'
+      react: '>=16.8'
+      react-dom: '>=16.8'
 
-  react-router@7.6.2:
-    resolution: {integrity: sha512-U7Nv3y+bMimgWjhlT5CRdzHPu2/KVmqPwKUCChW8en5P3znxUqwlYFlbmyj8Rgp1SF6zs5X4+77kBVknkg6a0w==}
-    engines: {node: '>=20.0.0'}
+  react-router@6.30.0:
+    resolution: {integrity: sha512-D3X8FyH9nBcTSHGdEKurK7r8OYE1kKFn3d/CF+CoxbSHkxU7o37+Uh7eAHRXr6k2tSExXYO++07PeXJtA/dEhQ==}
+    engines: {node: '>=14.0.0'}
     peerDependencies:
-      react: '>=18'
-      react-dom: '>=18'
-    peerDependenciesMeta:
-      react-dom:
-        optional: true
+      react: '>=16.8'
 
   react-select@5.10.1:
     resolution: {integrity: sha512-roPEZUL4aRZDx6DcsD+ZNreVl+fM8VsKn0Wtex1v4IazH60ILp5xhdlp464IsEAlJdXeD+BhDAFsBVMfvLQueA==}
@@ -3597,10 +3775,18 @@ packages:
       react: '>=16.6.0'
       react-dom: '>=16.6.0'
 
-  react@19.1.0:
-    resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==}
+  react@18.3.1:
+    resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
     engines: {node: '>=0.10.0'}
 
+  read-pkg-up@7.0.1:
+    resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
+    engines: {node: '>=8'}
+
+  read-pkg@5.2.0:
+    resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
+    engines: {node: '>=8'}
+
   readdirp@3.6.0:
     resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
     engines: {node: '>=8.10.0'}
@@ -3627,8 +3813,8 @@ packages:
     resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
     engines: {node: '>= 0.4'}
 
-  regjsparser@0.12.0:
-    resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==}
+  regjsparser@0.10.0:
+    resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==}
     hasBin: true
 
   remark-gfm@4.0.1:
@@ -3637,8 +3823,8 @@ packages:
   remark-parse@11.0.0:
     resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
 
-  remark-rehype@11.1.2:
-    resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==}
+  remark-rehype@11.1.1:
+    resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==}
 
   remark-stringify@11.0.0:
     resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
@@ -3674,11 +3860,15 @@ packages:
   robust-predicates@3.0.2:
     resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
 
-  rollup@4.44.0:
-    resolution: {integrity: sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA==}
+  rollup@4.40.1:
+    resolution: {integrity: sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==}
     engines: {node: '>=18.0.0', npm: '>=8.0.0'}
     hasBin: true
 
+  router@2.2.0:
+    resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==}
+    engines: {node: '>= 18'}
+
   run-parallel@1.2.0:
     resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
 
@@ -3686,6 +3876,9 @@ packages:
     resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
     engines: {node: '>=0.4'}
 
+  safe-buffer@5.2.1:
+    resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
   safe-push-apply@1.0.0:
     resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
     engines: {node: '>= 0.4'}
@@ -3694,8 +3887,15 @@ packages:
     resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
     engines: {node: '>= 0.4'}
 
-  scheduler@0.26.0:
-    resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==}
+  safer-buffer@2.1.2:
+    resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
+  scheduler@0.23.2:
+    resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+
+  semver@5.7.2:
+    resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
+    hasBin: true
 
   semver@6.3.1:
     resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
@@ -3706,13 +3906,13 @@ packages:
     engines: {node: '>=10'}
     hasBin: true
 
-  semver@7.7.2:
-    resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
-    engines: {node: '>=10'}
-    hasBin: true
+  send@1.2.0:
+    resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==}
+    engines: {node: '>= 18'}
 
-  set-cookie-parser@2.7.1:
-    resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==}
+  serve-static@2.2.0:
+    resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==}
+    engines: {node: '>= 18'}
 
   set-function-length@1.2.2:
     resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
@@ -3729,6 +3929,9 @@ packages:
   setimmediate@1.0.5:
     resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
 
+  setprototypeof@1.2.0:
+    resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+
   shebang-command@2.0.0:
     resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
     engines: {node: '>=8'}
@@ -3778,18 +3981,30 @@ packages:
   space-separated-tokens@2.0.2:
     resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
 
+  spdx-correct@3.2.0:
+    resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
+
+  spdx-exceptions@2.5.0:
+    resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==}
+
+  spdx-expression-parse@3.0.1:
+    resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
+
+  spdx-license-ids@3.0.21:
+    resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==}
+
   sprintf-js@1.0.3:
     resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
 
   stackback@0.0.2:
     resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
 
-  statuses@2.0.2:
-    resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
+  statuses@2.0.1:
+    resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
     engines: {node: '>= 0.8'}
 
-  std-env@3.9.0:
-    resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==}
+  std-env@3.8.1:
+    resolution: {integrity: sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==}
 
   strict-event-emitter@0.5.1:
     resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==}
@@ -3840,25 +4055,18 @@ packages:
     resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
     engines: {node: '>=8'}
 
-  strip-indent@4.0.0:
-    resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==}
-    engines: {node: '>=12'}
-
   strip-json-comments@3.1.1:
     resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
     engines: {node: '>=8'}
 
-  strip-literal@3.0.0:
-    resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==}
-
   style-mod@4.1.2:
     resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==}
 
-  style-to-js@1.1.17:
-    resolution: {integrity: sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==}
+  style-to-js@1.1.16:
+    resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==}
 
-  style-to-object@1.0.9:
-    resolution: {integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==}
+  style-to-object@1.0.8:
+    resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==}
 
   stylis@4.2.0:
     resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==}
@@ -3871,8 +4079,8 @@ packages:
     resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
     engines: {node: '>= 0.4'}
 
-  synckit@0.11.8:
-    resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==}
+  synckit@0.11.4:
+    resolution: {integrity: sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ==}
     engines: {node: ^14.18.0 || >=16.0.0}
 
   tar@6.2.1:
@@ -3889,26 +4097,30 @@ packages:
   tinyexec@0.3.2:
     resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
 
-  tinyglobby@0.2.14:
-    resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
-    engines: {node: '>=12.0.0'}
-
-  tinypool@1.1.1:
-    resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==}
+  tinypool@1.0.2:
+    resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==}
     engines: {node: ^18.0.0 || >=20.0.0}
 
-  tinyrainbow@2.0.0:
-    resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
+  tinyrainbow@1.2.0:
+    resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==}
     engines: {node: '>=14.0.0'}
 
-  tinyspy@4.0.3:
-    resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==}
+  tinyspy@3.0.2:
+    resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
     engines: {node: '>=14.0.0'}
 
+  to-fast-properties@2.0.0:
+    resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
+    engines: {node: '>=4'}
+
   to-regex-range@5.0.1:
     resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
     engines: {node: '>=8.0'}
 
+  toidentifier@1.0.1:
+    resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+    engines: {node: '>=0.6'}
+
   tough-cookie@4.1.4:
     resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==}
     engines: {node: '>=6'}
@@ -3945,10 +4157,22 @@ packages:
     resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
     engines: {node: '>=10'}
 
-  type-fest@4.41.0:
-    resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
+  type-fest@0.6.0:
+    resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
+    engines: {node: '>=8'}
+
+  type-fest@0.8.1:
+    resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
+    engines: {node: '>=8'}
+
+  type-fest@4.37.0:
+    resolution: {integrity: sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==}
     engines: {node: '>=16'}
 
+  type-is@2.0.1:
+    resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==}
+    engines: {node: '>= 0.6'}
+
   typed-array-buffer@1.0.3:
     resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
     engines: {node: '>= 0.4'}
@@ -3965,8 +4189,8 @@ packages:
     resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
     engines: {node: '>= 0.4'}
 
-  typescript-eslint@8.34.1:
-    resolution: {integrity: sha512-XjS+b6Vg9oT1BaIUfkW3M3LvqZE++rbzAMEHuccCfO/YkP43ha6w3jTEMilQxMF92nVOYCcdjv1ZUhAa1D/0ow==}
+  typescript-eslint@8.32.0:
+    resolution: {integrity: sha512-UMq2kxdXCzinFFPsXc9o2ozIpYCCOiEC46MG3yEh5Vipq6BO27otTtEBZA1fQ66DulEUgE97ucQ/3YY66CPg0A==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
@@ -3996,9 +4220,6 @@ packages:
   undici-types@6.21.0:
     resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
 
-  undici-types@7.8.0:
-    resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==}
-
   unified@11.0.5:
     resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
 
@@ -4021,6 +4242,10 @@ packages:
     resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
     engines: {node: '>= 4.0.0'}
 
+  unpipe@1.0.0:
+    resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+    engines: {node: '>= 0.8'}
+
   update-browserslist-db@1.1.3:
     resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
     hasBin: true
@@ -4048,8 +4273,8 @@ packages:
       '@types/react':
         optional: true
 
-  use-debounce@10.0.5:
-    resolution: {integrity: sha512-Q76E3lnIV+4YT9AHcrHEHYmAd9LKwUAbPXDm7FlqVGDHiSOhX3RDjT8dm0AxbJup6WgOb1YEcKyCr11kBJR5KQ==}
+  use-debounce@10.0.4:
+    resolution: {integrity: sha512-6Cf7Yr7Wk7Kdv77nnJMf6de4HuDE4dTxKij+RqE9rufDsI6zsbjyAxcH5y2ueJCQAnfgKbzXbZHYlkFwmBlWkw==}
     engines: {node: '>= 16.0.0'}
     peerDependencies:
       react: '*'
@@ -4072,8 +4297,8 @@ packages:
       '@types/react':
         optional: true
 
-  use-sync-external-store@1.5.0:
-    resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==}
+  use-sync-external-store@1.4.0:
+    resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
 
@@ -4083,15 +4308,22 @@ packages:
     peerDependencies:
       react: ^16.8.0  || ^17 || ^18 || ^19 || ^19.0.0-rc
 
+  validate-npm-package-license@3.0.4:
+    resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
+
+  vary@1.1.2:
+    resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+    engines: {node: '>= 0.8'}
+
   vfile-message@4.0.2:
     resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
 
   vfile@6.0.3:
     resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
 
-  vite-node@3.2.4:
-    resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==}
-    engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+  vite-node@2.1.9:
+    resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==}
+    engines: {node: ^18.0.0 || >=20.0.0}
     hasBin: true
 
   vite-plugin-css-injected-by-js@3.5.2:
@@ -4099,27 +4331,22 @@ packages:
     peerDependencies:
       vite: '>2.0.0-0'
 
-  vite@6.3.5:
-    resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==}
-    engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+  vite@5.4.19:
+    resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==}
+    engines: {node: ^18.0.0 || >=20.0.0}
     hasBin: true
     peerDependencies:
-      '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
-      jiti: '>=1.21.0'
+      '@types/node': ^18.0.0 || >=20.0.0
       less: '*'
       lightningcss: ^1.21.0
       sass: '*'
       sass-embedded: '*'
       stylus: '*'
       sugarss: '*'
-      terser: ^5.16.0
-      tsx: ^4.8.1
-      yaml: ^2.4.2
+      terser: ^5.4.0
     peerDependenciesMeta:
       '@types/node':
         optional: true
-      jiti:
-        optional: true
       less:
         optional: true
       lightningcss:
@@ -4134,28 +4361,21 @@ packages:
         optional: true
       terser:
         optional: true
-      tsx:
-        optional: true
-      yaml:
-        optional: true
 
-  vitest@3.2.4:
-    resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==}
-    engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+  vitest@2.1.9:
+    resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==}
+    engines: {node: ^18.0.0 || >=20.0.0}
     hasBin: true
     peerDependencies:
       '@edge-runtime/vm': '*'
-      '@types/debug': ^4.1.12
-      '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
-      '@vitest/browser': 3.2.4
-      '@vitest/ui': 3.2.4
+      '@types/node': ^18.0.0 || >=20.0.0
+      '@vitest/browser': 2.1.9
+      '@vitest/ui': 2.1.9
       happy-dom: '*'
       jsdom: '*'
     peerDependenciesMeta:
       '@edge-runtime/vm':
         optional: true
-      '@types/debug':
-        optional: true
       '@types/node':
         optional: true
       '@vitest/browser':
@@ -4180,6 +4400,10 @@ packages:
   webidl-conversions@3.0.1:
     resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
 
+  webidl-conversions@7.0.0:
+    resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
+    engines: {node: '>=12'}
+
   whatwg-fetch@3.6.20:
     resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==}
 
@@ -4235,6 +4459,9 @@ packages:
     resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
     engines: {node: '>=12'}
 
+  wrappy@1.0.2:
+    resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
   xtend@4.0.2:
     resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
     engines: {node: '>=0.4'}
@@ -4266,8 +4493,16 @@ packages:
     resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==}
     engines: {node: '>=18'}
 
-  zustand@4.5.7:
-    resolution: {integrity: sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==}
+  zod-to-json-schema@3.24.5:
+    resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==}
+    peerDependencies:
+      zod: ^3.24.1
+
+  zod@3.24.4:
+    resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==}
+
+  zustand@4.5.6:
+    resolution: {integrity: sha512-ibr/n1hBzLLj5Y+yUcU7dYw8p6WnIVzdJbnX+1YpaScvZVF2ziugqHs+LAmHw4lWO9c/zRj+K1ncgWDQuthEdQ==}
     engines: {node: '>=12.7.0'}
     peerDependencies:
       '@types/react': '>=16.8'
@@ -4281,8 +4516,8 @@ packages:
       react:
         optional: true
 
-  zustand@5.0.5:
-    resolution: {integrity: sha512-mILtRfKW9xM47hqxGIxCv12gXusoY/xTSHBYApXozR0HmQv299whhBeeAcRy+KrPPybzosvJBCOmVjq6x12fCg==}
+  zustand@5.0.4:
+    resolution: {integrity: sha512-39VFTN5InDtMd28ZhjLyuTnlytDr9HfwO512Ai4I8ZABCoyAj4F1+sr7sD1jP/+p7k77Iko0Pb5NhgBFDCX0kQ==}
     engines: {node: '>=12.20.0'}
     peerDependencies:
       '@types/react': '>=18.0.0'
@@ -4327,68 +4562,74 @@ snapshots:
       '@types/json-schema': 7.0.15
       js-yaml: 4.1.0
 
-  '@ark-ui/react@5.14.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
-    dependencies:
-      '@internationalized/date': 3.8.2
-      '@zag-js/accordion': 1.15.2
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/angle-slider': 1.15.2
-      '@zag-js/auto-resize': 1.15.2
-      '@zag-js/avatar': 1.15.2
-      '@zag-js/carousel': 1.15.2
-      '@zag-js/checkbox': 1.15.2
-      '@zag-js/clipboard': 1.15.2
-      '@zag-js/collapsible': 1.15.2
-      '@zag-js/collection': 1.15.2
-      '@zag-js/color-picker': 1.15.2
-      '@zag-js/color-utils': 1.15.2
-      '@zag-js/combobox': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/date-picker': 1.15.2(@internationalized/date@3.8.2)
-      '@zag-js/date-utils': 1.15.2(@internationalized/date@3.8.2)
-      '@zag-js/dialog': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/editable': 1.15.2
-      '@zag-js/file-upload': 1.15.2
-      '@zag-js/file-utils': 1.15.2
-      '@zag-js/floating-panel': 1.15.2
-      '@zag-js/focus-trap': 1.15.2
-      '@zag-js/highlight-word': 1.15.2
-      '@zag-js/hover-card': 1.15.2
-      '@zag-js/i18n-utils': 1.15.2
-      '@zag-js/listbox': 1.15.2
-      '@zag-js/menu': 1.15.2
-      '@zag-js/number-input': 1.15.2
-      '@zag-js/pagination': 1.15.2
-      '@zag-js/password-input': 1.15.2
-      '@zag-js/pin-input': 1.15.2
-      '@zag-js/popover': 1.15.2
-      '@zag-js/presence': 1.15.2
-      '@zag-js/progress': 1.15.2
-      '@zag-js/qr-code': 1.15.2
-      '@zag-js/radio-group': 1.15.2
-      '@zag-js/rating-group': 1.15.2
-      '@zag-js/react': 1.15.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
-      '@zag-js/select': 1.15.2
-      '@zag-js/signature-pad': 1.15.2
-      '@zag-js/slider': 1.15.2
-      '@zag-js/splitter': 1.15.2
-      '@zag-js/steps': 1.15.2
-      '@zag-js/switch': 1.15.2
-      '@zag-js/tabs': 1.15.2
-      '@zag-js/tags-input': 1.15.2
-      '@zag-js/time-picker': 1.15.2(@internationalized/date@3.8.2)
-      '@zag-js/timer': 1.15.2
-      '@zag-js/toast': 1.15.2
-      '@zag-js/toggle': 1.15.2
-      '@zag-js/toggle-group': 1.15.2
-      '@zag-js/tooltip': 1.15.2
-      '@zag-js/tour': 1.15.2
-      '@zag-js/tree-view': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
-      react: 19.1.0
-      react-dom: 19.1.0(react@19.1.0)
+  '@ark-ui/react@5.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+    dependencies:
+      '@internationalized/date': 3.8.1
+      '@zag-js/accordion': 1.15.0
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/angle-slider': 1.15.0
+      '@zag-js/auto-resize': 1.15.0
+      '@zag-js/avatar': 1.15.0
+      '@zag-js/carousel': 1.15.0
+      '@zag-js/checkbox': 1.15.0
+      '@zag-js/clipboard': 1.15.0
+      '@zag-js/collapsible': 1.15.0
+      '@zag-js/collection': 1.15.0
+      '@zag-js/color-picker': 1.15.0
+      '@zag-js/color-utils': 1.15.0
+      '@zag-js/combobox': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/date-picker': 1.15.0(@internationalized/date@3.8.1)
+      '@zag-js/date-utils': 1.15.0(@internationalized/date@3.8.1)
+      '@zag-js/dialog': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/editable': 1.15.0
+      '@zag-js/file-upload': 1.15.0
+      '@zag-js/file-utils': 1.15.0
+      '@zag-js/floating-panel': 1.15.0
+      '@zag-js/focus-trap': 1.15.0
+      '@zag-js/highlight-word': 1.15.0
+      '@zag-js/hover-card': 1.15.0
+      '@zag-js/i18n-utils': 1.15.0
+      '@zag-js/listbox': 1.15.0
+      '@zag-js/menu': 1.15.0
+      '@zag-js/number-input': 1.15.0
+      '@zag-js/pagination': 1.15.0
+      '@zag-js/password-input': 1.15.0
+      '@zag-js/pin-input': 1.15.0
+      '@zag-js/popover': 1.15.0
+      '@zag-js/presence': 1.15.0
+      '@zag-js/progress': 1.15.0
+      '@zag-js/qr-code': 1.15.0
+      '@zag-js/radio-group': 1.15.0
+      '@zag-js/rating-group': 1.15.0
+      '@zag-js/react': 1.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@zag-js/select': 1.15.0
+      '@zag-js/signature-pad': 1.15.0
+      '@zag-js/slider': 1.15.0
+      '@zag-js/splitter': 1.15.0
+      '@zag-js/steps': 1.15.0
+      '@zag-js/switch': 1.15.0
+      '@zag-js/tabs': 1.15.0
+      '@zag-js/tags-input': 1.15.0
+      '@zag-js/time-picker': 1.15.0(@internationalized/date@3.8.1)
+      '@zag-js/timer': 1.15.0
+      '@zag-js/toast': 1.15.0
+      '@zag-js/toggle': 1.15.0
+      '@zag-js/toggle-group': 1.15.0
+      '@zag-js/tooltip': 1.15.0
+      '@zag-js/tour': 1.15.0
+      '@zag-js/tree-view': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
+
+  '@babel/code-frame@7.26.2':
+    dependencies:
+      '@babel/helper-validator-identifier': 7.25.9
+      js-tokens: 4.0.0
+      picocolors: 1.1.1
 
   '@babel/code-frame@7.27.1':
     dependencies:
@@ -4396,59 +4637,102 @@ snapshots:
       js-tokens: 4.0.0
       picocolors: 1.1.1
 
-  '@babel/generator@7.27.5':
+  '@babel/generator@7.17.7':
+    dependencies:
+      '@babel/types': 7.17.0
+      jsesc: 2.5.2
+      source-map: 0.5.7
+
+  '@babel/generator@7.26.10':
     dependencies:
-      '@babel/parser': 7.27.5
-      '@babel/types': 7.27.6
+      '@babel/parser': 7.26.10
+      '@babel/types': 7.26.10
       '@jridgewell/gen-mapping': 0.3.8
       '@jridgewell/trace-mapping': 0.3.25
       jsesc: 3.1.0
 
+  '@babel/helper-environment-visitor@7.24.7':
+    dependencies:
+      '@babel/types': 7.26.10
+
+  '@babel/helper-function-name@7.24.7':
+    dependencies:
+      '@babel/template': 7.26.9
+      '@babel/types': 7.26.10
+
+  '@babel/helper-hoist-variables@7.24.7':
+    dependencies:
+      '@babel/types': 7.26.10
+
   '@babel/helper-module-imports@7.25.9':
     dependencies:
-      '@babel/traverse': 7.27.4
-      '@babel/types': 7.27.6
+      '@babel/traverse': 7.26.10
+      '@babel/types': 7.26.10
     transitivePeerDependencies:
       - supports-color
 
-  '@babel/helper-string-parser@7.27.1': {}
+  '@babel/helper-split-export-declaration@7.24.7':
+    dependencies:
+      '@babel/types': 7.26.10
+
+  '@babel/helper-string-parser@7.25.9': {}
+
+  '@babel/helper-validator-identifier@7.25.9': {}
 
   '@babel/helper-validator-identifier@7.27.1': {}
 
-  '@babel/parser@7.27.5':
+  '@babel/parser@7.26.10':
     dependencies:
-      '@babel/types': 7.27.6
+      '@babel/types': 7.26.10
 
   '@babel/runtime@7.26.10':
     dependencies:
       regenerator-runtime: 0.14.1
 
-  '@babel/runtime@7.27.6': {}
+  '@babel/template@7.26.9':
+    dependencies:
+      '@babel/code-frame': 7.26.2
+      '@babel/parser': 7.26.10
+      '@babel/types': 7.26.10
 
-  '@babel/template@7.27.2':
+  '@babel/traverse@7.23.2':
     dependencies:
-      '@babel/code-frame': 7.27.1
-      '@babel/parser': 7.27.5
-      '@babel/types': 7.27.6
+      '@babel/code-frame': 7.26.2
+      '@babel/generator': 7.26.10
+      '@babel/helper-environment-visitor': 7.24.7
+      '@babel/helper-function-name': 7.24.7
+      '@babel/helper-hoist-variables': 7.24.7
+      '@babel/helper-split-export-declaration': 7.24.7
+      '@babel/parser': 7.26.10
+      '@babel/types': 7.26.10
+      debug: 4.4.0
+      globals: 11.12.0
+    transitivePeerDependencies:
+      - supports-color
 
-  '@babel/traverse@7.27.4':
+  '@babel/traverse@7.26.10':
     dependencies:
-      '@babel/code-frame': 7.27.1
-      '@babel/generator': 7.27.5
-      '@babel/parser': 7.27.5
-      '@babel/template': 7.27.2
-      '@babel/types': 7.27.6
-      debug: 4.4.1
+      '@babel/code-frame': 7.26.2
+      '@babel/generator': 7.26.10
+      '@babel/parser': 7.26.10
+      '@babel/template': 7.26.9
+      '@babel/types': 7.26.10
+      debug: 4.4.0
       globals: 11.12.0
     transitivePeerDependencies:
       - supports-color
 
-  '@babel/types@7.27.6':
+  '@babel/types@7.17.0':
     dependencies:
-      '@babel/helper-string-parser': 7.27.1
-      '@babel/helper-validator-identifier': 7.27.1
+      '@babel/helper-validator-identifier': 7.25.9
+      to-fast-properties: 2.0.0
+
+  '@babel/types@7.26.10':
+    dependencies:
+      '@babel/helper-string-parser': 7.25.9
+      '@babel/helper-validator-identifier': 7.25.9
 
-  '@bcoe/v8-coverage@1.0.2': {}
+  '@bcoe/v8-coverage@0.2.3': {}
 
   '@bundled-es-modules/cookie@2.0.1':
     dependencies:
@@ -4456,7 +4740,7 @@ snapshots:
 
   '@bundled-es-modules/statuses@1.0.1':
     dependencies:
-      statuses: 2.0.2
+      statuses: 2.0.1
 
   '@bundled-es-modules/tough-cookie@0.1.6':
     dependencies:
@@ -4465,43 +4749,43 @@ snapshots:
 
   '@chakra-ui/anatomy@2.3.4': {}
 
-  '@chakra-ui/react@3.21.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+  '@chakra-ui/react@3.20.0(@emotion/react@11.14.0(@types/react@18.3.19)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@ark-ui/react': 5.14.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+      '@ark-ui/react': 5.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@emotion/is-prop-valid': 1.3.1
-      '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0)
+      '@emotion/react': 11.14.0(@types/react@18.3.19)(react@18.3.1)
       '@emotion/serialize': 1.3.3
-      '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0)
+      '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1)
       '@emotion/utils': 1.4.2
       '@pandacss/is-valid-prop': 0.53.6
       csstype: 3.1.3
       fast-safe-stringify: 2.1.1
-      react: 19.1.0
-      react-dom: 19.1.0(react@19.1.0)
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
 
-  '@codemirror/autocomplete@6.18.2(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)(@lezer/common@1.2.3)':
+  '@codemirror/autocomplete@6.18.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)(@lezer/common@1.2.3)':
     dependencies:
-      '@codemirror/language': 6.11.1
+      '@codemirror/language': 6.11.0
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.37.2
+      '@codemirror/view': 6.36.4
       '@lezer/common': 1.2.3
 
   '@codemirror/commands@6.8.1':
     dependencies:
-      '@codemirror/language': 6.11.1
+      '@codemirror/language': 6.11.0
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.37.2
+      '@codemirror/view': 6.36.4
       '@lezer/common': 1.2.3
 
-  '@codemirror/lang-json@6.0.2':
+  '@codemirror/lang-json@6.0.1':
     dependencies:
-      '@codemirror/language': 6.11.1
+      '@codemirror/language': 6.11.0
       '@lezer/json': 1.0.3
 
-  '@codemirror/language@6.11.1':
+  '@codemirror/language@6.11.0':
     dependencies:
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.37.2
+      '@codemirror/view': 6.36.4
       '@lezer/common': 1.2.3
       '@lezer/highlight': 1.2.1
       '@lezer/lr': 1.4.2
@@ -4510,13 +4794,13 @@ snapshots:
   '@codemirror/lint@6.8.2':
     dependencies:
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.37.2
+      '@codemirror/view': 6.36.4
       crelt: 1.0.6
 
   '@codemirror/search@6.5.6':
     dependencies:
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.37.2
+      '@codemirror/view': 6.36.4
       crelt: 1.0.6
 
   '@codemirror/state@6.5.2':
@@ -4525,15 +4809,14 @@ snapshots:
 
   '@codemirror/theme-one-dark@6.1.2':
     dependencies:
-      '@codemirror/language': 6.11.1
+      '@codemirror/language': 6.11.0
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.37.2
+      '@codemirror/view': 6.36.4
       '@lezer/highlight': 1.2.1
 
-  '@codemirror/view@6.37.2':
+  '@codemirror/view@6.36.4':
     dependencies:
       '@codemirror/state': 6.5.2
-      crelt: 1.0.6
       style-mod: 4.1.2
       w3c-keyname: 2.2.8
 
@@ -4569,19 +4852,19 @@ snapshots:
 
   '@emotion/memoize@0.9.0': {}
 
-  '@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0)':
+  '@emotion/react@11.14.0(@types/react@18.3.19)(react@18.3.1)':
     dependencies:
       '@babel/runtime': 7.26.10
       '@emotion/babel-plugin': 11.13.5
       '@emotion/cache': 11.14.0
       '@emotion/serialize': 1.3.3
-      '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0)
+      '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1)
       '@emotion/utils': 1.4.2
       '@emotion/weak-memoize': 0.4.0
       hoist-non-react-statics: 3.3.2
-      react: 19.1.0
+      react: 18.3.1
     optionalDependencies:
-      '@types/react': 19.1.8
+      '@types/react': 18.3.19
     transitivePeerDependencies:
       - supports-color
 
@@ -4597,127 +4880,118 @@ snapshots:
 
   '@emotion/unitless@0.10.0': {}
 
-  '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.1.0)':
+  '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@18.3.1)':
     dependencies:
-      react: 19.1.0
+      react: 18.3.1
 
   '@emotion/utils@1.4.2': {}
 
   '@emotion/weak-memoize@0.4.0': {}
 
-  '@esbuild/aix-ppc64@0.25.5':
+  '@esbuild/aix-ppc64@0.21.5':
     optional: true
 
-  '@esbuild/android-arm64@0.25.5':
+  '@esbuild/android-arm64@0.21.5':
     optional: true
 
-  '@esbuild/android-arm@0.25.5':
+  '@esbuild/android-arm@0.21.5':
     optional: true
 
-  '@esbuild/android-x64@0.25.5':
+  '@esbuild/android-x64@0.21.5':
     optional: true
 
-  '@esbuild/darwin-arm64@0.25.5':
+  '@esbuild/darwin-arm64@0.21.5':
     optional: true
 
-  '@esbuild/darwin-x64@0.25.5':
+  '@esbuild/darwin-x64@0.21.5':
     optional: true
 
-  '@esbuild/freebsd-arm64@0.25.5':
+  '@esbuild/freebsd-arm64@0.21.5':
     optional: true
 
-  '@esbuild/freebsd-x64@0.25.5':
+  '@esbuild/freebsd-x64@0.21.5':
     optional: true
 
-  '@esbuild/linux-arm64@0.25.5':
+  '@esbuild/linux-arm64@0.21.5':
     optional: true
 
-  '@esbuild/linux-arm@0.25.5':
+  '@esbuild/linux-arm@0.21.5':
     optional: true
 
-  '@esbuild/linux-ia32@0.25.5':
+  '@esbuild/linux-ia32@0.21.5':
     optional: true
 
-  '@esbuild/linux-loong64@0.25.5':
+  '@esbuild/linux-loong64@0.21.5':
     optional: true
 
-  '@esbuild/linux-mips64el@0.25.5':
+  '@esbuild/linux-mips64el@0.21.5':
     optional: true
 
-  '@esbuild/linux-ppc64@0.25.5':
+  '@esbuild/linux-ppc64@0.21.5':
     optional: true
 
-  '@esbuild/linux-riscv64@0.25.5':
+  '@esbuild/linux-riscv64@0.21.5':
     optional: true
 
-  '@esbuild/linux-s390x@0.25.5':
+  '@esbuild/linux-s390x@0.21.5':
     optional: true
 
-  '@esbuild/linux-x64@0.25.5':
+  '@esbuild/linux-x64@0.21.5':
     optional: true
 
-  '@esbuild/netbsd-arm64@0.25.5':
+  '@esbuild/netbsd-x64@0.21.5':
     optional: true
 
-  '@esbuild/netbsd-x64@0.25.5':
+  '@esbuild/openbsd-x64@0.21.5':
     optional: true
 
-  '@esbuild/openbsd-arm64@0.25.5':
+  '@esbuild/sunos-x64@0.21.5':
     optional: true
 
-  '@esbuild/openbsd-x64@0.25.5':
+  '@esbuild/win32-arm64@0.21.5':
     optional: true
 
-  '@esbuild/sunos-x64@0.25.5':
+  '@esbuild/win32-ia32@0.21.5':
     optional: true
 
-  '@esbuild/win32-arm64@0.25.5':
+  '@esbuild/win32-x64@0.21.5':
     optional: true
 
-  '@esbuild/win32-ia32@0.25.5':
-    optional: true
-
-  '@esbuild/win32-x64@0.25.5':
-    optional: true
+  '@eslint-community/eslint-utils@4.5.1(eslint@9.26.0(jiti@1.21.7))':
+    dependencies:
+      eslint: 9.26.0(jiti@1.21.7)
+      eslint-visitor-keys: 3.4.3
 
-  '@eslint-community/eslint-utils@4.7.0(eslint@9.29.0(jiti@1.21.7))':
+  '@eslint-community/eslint-utils@4.7.0(eslint@9.26.0(jiti@1.21.7))':
     dependencies:
-      eslint: 9.29.0(jiti@1.21.7)
+      eslint: 9.26.0(jiti@1.21.7)
       eslint-visitor-keys: 3.4.3
 
   '@eslint-community/regexpp@4.12.1': {}
 
-  '@eslint/compat@1.3.0(eslint@9.29.0(jiti@1.21.7))':
+  '@eslint/compat@1.2.9(eslint@9.26.0(jiti@1.21.7))':
     optionalDependencies:
-      eslint: 9.29.0(jiti@1.21.7)
+      eslint: 9.26.0(jiti@1.21.7)
 
-  '@eslint/config-array@0.20.1':
+  '@eslint/config-array@0.20.0':
     dependencies:
       '@eslint/object-schema': 2.1.6
-      debug: 4.4.1
+      debug: 4.4.0
       minimatch: 3.1.2
     transitivePeerDependencies:
       - supports-color
 
-  '@eslint/config-helpers@0.2.3': {}
+  '@eslint/config-helpers@0.2.2': {}
 
   '@eslint/core@0.13.0':
     dependencies:
       '@types/json-schema': 7.0.15
 
-  '@eslint/core@0.14.0':
-    dependencies:
-      '@types/json-schema': 7.0.15
-
-  '@eslint/core@0.15.0':
-    dependencies:
-      '@types/json-schema': 7.0.15
-
   '@eslint/eslintrc@3.3.1':
     dependencies:
       ajv: 6.12.6
-      debug: 4.4.1
-      espree: 10.4.0
+      debug: 4.4.0
+      espree: 10.3.0
       globals: 14.0.0
       ignore: 5.3.2
       import-fresh: 3.3.1
@@ -4727,7 +5001,7 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@eslint/js@9.29.0': {}
+  '@eslint/js@9.26.0': {}
 
   '@eslint/object-schema@2.1.6': {}
 
@@ -4736,11 +5010,6 @@ snapshots:
       '@eslint/core': 0.13.0
       levn: 0.4.1
 
-  '@eslint/plugin-kit@0.3.2':
-    dependencies:
-      '@eslint/core': 0.15.0
-      levn: 0.4.1
-
   '@floating-ui/core@1.6.9':
     dependencies:
       '@floating-ui/utils': 0.2.9
@@ -4783,19 +5052,19 @@ snapshots:
 
   '@humanwhocodes/retry@0.3.1': {}
 
-  '@humanwhocodes/retry@0.4.3': {}
+  '@humanwhocodes/retry@0.4.2': {}
 
-  '@inquirer/confirm@5.1.12(@types/node@24.0.3)':
+  '@inquirer/confirm@5.1.8(@types/node@22.15.14)':
     dependencies:
-      '@inquirer/core': 10.1.13(@types/node@24.0.3)
-      '@inquirer/type': 3.0.7(@types/node@24.0.3)
+      '@inquirer/core': 10.1.9(@types/node@22.15.14)
+      '@inquirer/type': 3.0.5(@types/node@22.15.14)
     optionalDependencies:
-      '@types/node': 24.0.3
+      '@types/node': 22.15.14
 
-  '@inquirer/core@10.1.13(@types/node@24.0.3)':
+  '@inquirer/core@10.1.9(@types/node@22.15.14)':
     dependencies:
-      '@inquirer/figures': 1.0.12
-      '@inquirer/type': 3.0.7(@types/node@24.0.3)
+      '@inquirer/figures': 1.0.11
+      '@inquirer/type': 3.0.5(@types/node@22.15.14)
       ansi-escapes: 4.3.2
       cli-width: 4.1.0
       mute-stream: 2.0.0
@@ -4803,27 +5072,21 @@ snapshots:
       wrap-ansi: 6.2.0
       yoctocolors-cjs: 2.1.2
     optionalDependencies:
-      '@types/node': 24.0.3
+      '@types/node': 22.15.14
 
-  '@inquirer/figures@1.0.12': {}
+  '@inquirer/figures@1.0.11': {}
 
-  '@inquirer/type@3.0.7(@types/node@24.0.3)':
+  '@inquirer/type@3.0.5(@types/node@22.15.14)':
     optionalDependencies:
-      '@types/node': 24.0.3
-
-  '@internationalized/date@3.8.2':
-    dependencies:
-      '@swc/helpers': 0.5.17
+      '@types/node': 22.15.14
 
-  '@internationalized/number@3.6.3':
+  '@internationalized/date@3.8.1':
     dependencies:
-      '@swc/helpers': 0.5.17
+      '@swc/helpers': 0.5.15
 
-  '@isaacs/balanced-match@4.0.1': {}
-
-  '@isaacs/brace-expansion@5.0.0':
+  '@internationalized/number@3.6.2':
     dependencies:
-      '@isaacs/balanced-match': 4.0.1
+      '@swc/helpers': 0.5.15
 
   '@isaacs/cliui@8.0.2':
     dependencies:
@@ -4875,7 +5138,22 @@ snapshots:
 
   '@marijn/find-cluster-break@1.0.2': {}
 
-  '@mswjs/interceptors@0.39.2':
+  '@modelcontextprotocol/sdk@1.11.0':
+    dependencies:
+      content-type: 1.0.5
+      cors: 2.8.5
+      cross-spawn: 7.0.6
+      eventsource: 3.0.6
+      express: 5.1.0
+      express-rate-limit: 7.5.0(express@5.1.0)
+      pkce-challenge: 5.0.0
+      raw-body: 3.0.0
+      zod: 3.24.4
+      zod-to-json-schema: 3.24.5(zod@3.24.4)
+    transitivePeerDependencies:
+      - supports-color
+
+  '@mswjs/interceptors@0.37.6':
     dependencies:
       '@open-draft/deferred-promise': 2.2.0
       '@open-draft/logger': 0.3.0
@@ -4910,174 +5188,173 @@ snapshots:
   '@pkgjs/parseargs@0.11.0':
     optional: true
 
-  '@pkgr/core@0.2.7': {}
+  '@pkgr/core@0.2.4': {}
 
-  '@rolldown/pluginutils@1.0.0-beta.11': {}
+  '@remix-run/router@1.23.0': {}
 
-  '@rollup/rollup-android-arm-eabi@4.44.0':
+  '@rollup/rollup-android-arm-eabi@4.40.1':
     optional: true
 
-  '@rollup/rollup-android-arm64@4.44.0':
+  '@rollup/rollup-android-arm64@4.40.1':
     optional: true
 
-  '@rollup/rollup-darwin-arm64@4.44.0':
+  '@rollup/rollup-darwin-arm64@4.40.1':
     optional: true
 
-  '@rollup/rollup-darwin-x64@4.44.0':
+  '@rollup/rollup-darwin-x64@4.40.1':
     optional: true
 
-  '@rollup/rollup-freebsd-arm64@4.44.0':
+  '@rollup/rollup-freebsd-arm64@4.40.1':
     optional: true
 
-  '@rollup/rollup-freebsd-x64@4.44.0':
+  '@rollup/rollup-freebsd-x64@4.40.1':
     optional: true
 
-  '@rollup/rollup-linux-arm-gnueabihf@4.44.0':
+  '@rollup/rollup-linux-arm-gnueabihf@4.40.1':
     optional: true
 
-  '@rollup/rollup-linux-arm-musleabihf@4.44.0':
+  '@rollup/rollup-linux-arm-musleabihf@4.40.1':
     optional: true
 
-  '@rollup/rollup-linux-arm64-gnu@4.44.0':
+  '@rollup/rollup-linux-arm64-gnu@4.40.1':
     optional: true
 
-  '@rollup/rollup-linux-arm64-musl@4.44.0':
+  '@rollup/rollup-linux-arm64-musl@4.40.1':
     optional: true
 
-  '@rollup/rollup-linux-loongarch64-gnu@4.44.0':
+  '@rollup/rollup-linux-loongarch64-gnu@4.40.1':
     optional: true
 
-  '@rollup/rollup-linux-powerpc64le-gnu@4.44.0':
+  '@rollup/rollup-linux-powerpc64le-gnu@4.40.1':
     optional: true
 
-  '@rollup/rollup-linux-riscv64-gnu@4.44.0':
+  '@rollup/rollup-linux-riscv64-gnu@4.40.1':
     optional: true
 
-  '@rollup/rollup-linux-riscv64-musl@4.44.0':
+  '@rollup/rollup-linux-riscv64-musl@4.40.1':
     optional: true
 
-  '@rollup/rollup-linux-s390x-gnu@4.44.0':
+  '@rollup/rollup-linux-s390x-gnu@4.40.1':
     optional: true
 
-  '@rollup/rollup-linux-x64-gnu@4.44.0':
+  '@rollup/rollup-linux-x64-gnu@4.40.1':
     optional: true
 
-  '@rollup/rollup-linux-x64-musl@4.44.0':
+  '@rollup/rollup-linux-x64-musl@4.40.1':
     optional: true
 
-  '@rollup/rollup-win32-arm64-msvc@4.44.0':
+  '@rollup/rollup-win32-arm64-msvc@4.40.1':
     optional: true
 
-  '@rollup/rollup-win32-ia32-msvc@4.44.0':
+  '@rollup/rollup-win32-ia32-msvc@4.40.1':
     optional: true
 
-  '@rollup/rollup-win32-x64-msvc@4.44.0':
+  '@rollup/rollup-win32-x64-msvc@4.40.1':
     optional: true
 
-  '@stylistic/eslint-plugin@4.4.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
+  '@stylistic/eslint-plugin@2.13.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)':
     dependencies:
-      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
-      eslint: 9.29.0(jiti@1.21.7)
-      eslint-visitor-keys: 4.2.1
-      espree: 10.4.0
+      '@typescript-eslint/utils': 8.27.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
+      eslint: 9.26.0(jiti@1.21.7)
+      eslint-visitor-keys: 4.2.0
+      espree: 10.3.0
       estraverse: 5.3.0
       picomatch: 4.0.2
     transitivePeerDependencies:
       - supports-color
       - typescript
 
-  '@swc/core-darwin-arm64@1.12.4':
+  '@swc/core-darwin-arm64@1.11.24':
     optional: true
 
-  '@swc/core-darwin-x64@1.12.4':
+  '@swc/core-darwin-x64@1.11.24':
     optional: true
 
-  '@swc/core-linux-arm-gnueabihf@1.12.4':
+  '@swc/core-linux-arm-gnueabihf@1.11.24':
     optional: true
 
-  '@swc/core-linux-arm64-gnu@1.12.4':
+  '@swc/core-linux-arm64-gnu@1.11.24':
     optional: true
 
-  '@swc/core-linux-arm64-musl@1.12.4':
+  '@swc/core-linux-arm64-musl@1.11.24':
     optional: true
 
-  '@swc/core-linux-x64-gnu@1.12.4':
+  '@swc/core-linux-x64-gnu@1.11.24':
     optional: true
 
-  '@swc/core-linux-x64-musl@1.12.4':
+  '@swc/core-linux-x64-musl@1.11.24':
     optional: true
 
-  '@swc/core-win32-arm64-msvc@1.12.4':
+  '@swc/core-win32-arm64-msvc@1.11.24':
     optional: true
 
-  '@swc/core-win32-ia32-msvc@1.12.4':
+  '@swc/core-win32-ia32-msvc@1.11.24':
     optional: true
 
-  '@swc/core-win32-x64-msvc@1.12.4':
+  '@swc/core-win32-x64-msvc@1.11.24':
     optional: true
 
-  '@swc/core@1.12.4(@swc/helpers@0.5.17)':
+  '@swc/core@1.11.24':
     dependencies:
       '@swc/counter': 0.1.3
-      '@swc/types': 0.1.23
+      '@swc/types': 0.1.21
     optionalDependencies:
-      '@swc/core-darwin-arm64': 1.12.4
-      '@swc/core-darwin-x64': 1.12.4
-      '@swc/core-linux-arm-gnueabihf': 1.12.4
-      '@swc/core-linux-arm64-gnu': 1.12.4
-      '@swc/core-linux-arm64-musl': 1.12.4
-      '@swc/core-linux-x64-gnu': 1.12.4
-      '@swc/core-linux-x64-musl': 1.12.4
-      '@swc/core-win32-arm64-msvc': 1.12.4
-      '@swc/core-win32-ia32-msvc': 1.12.4
-      '@swc/core-win32-x64-msvc': 1.12.4
-      '@swc/helpers': 0.5.17
+      '@swc/core-darwin-arm64': 1.11.24
+      '@swc/core-darwin-x64': 1.11.24
+      '@swc/core-linux-arm-gnueabihf': 1.11.24
+      '@swc/core-linux-arm64-gnu': 1.11.24
+      '@swc/core-linux-arm64-musl': 1.11.24
+      '@swc/core-linux-x64-gnu': 1.11.24
+      '@swc/core-linux-x64-musl': 1.11.24
+      '@swc/core-win32-arm64-msvc': 1.11.24
+      '@swc/core-win32-ia32-msvc': 1.11.24
+      '@swc/core-win32-x64-msvc': 1.11.24
 
   '@swc/counter@0.1.3': {}
 
-  '@swc/helpers@0.5.17':
+  '@swc/helpers@0.5.15':
     dependencies:
       tslib: 2.8.1
 
-  '@swc/types@0.1.23':
+  '@swc/types@0.1.21':
     dependencies:
       '@swc/counter': 0.1.3
 
-  '@tanstack/eslint-plugin-query@5.78.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
+  '@tanstack/eslint-plugin-query@5.74.7(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)':
     dependencies:
-      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
-      eslint: 9.29.0(jiti@1.21.7)
+      '@typescript-eslint/utils': 8.28.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
+      eslint: 9.26.0(jiti@1.21.7)
     transitivePeerDependencies:
       - supports-color
       - typescript
 
-  '@tanstack/query-core@5.80.10': {}
+  '@tanstack/query-core@5.75.4': {}
 
-  '@tanstack/react-query@5.80.10(react@19.1.0)':
+  '@tanstack/react-query@5.75.4(react@18.3.1)':
     dependencies:
-      '@tanstack/query-core': 5.80.10
-      react: 19.1.0
+      '@tanstack/query-core': 5.75.4
+      react: 18.3.1
 
-  '@tanstack/react-table@8.21.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+  '@tanstack/react-table@8.21.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
       '@tanstack/table-core': 8.21.3
-      react: 19.1.0
-      react-dom: 19.1.0(react@19.1.0)
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
 
-  '@tanstack/react-virtual@3.13.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+  '@tanstack/react-virtual@3.13.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@tanstack/virtual-core': 3.13.10
-      react: 19.1.0
-      react-dom: 19.1.0(react@19.1.0)
+      '@tanstack/virtual-core': 3.13.8
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
 
   '@tanstack/table-core@8.21.3': {}
 
-  '@tanstack/virtual-core@3.13.10': {}
+  '@tanstack/virtual-core@3.13.8': {}
 
   '@testing-library/dom@10.4.0':
     dependencies:
       '@babel/code-frame': 7.27.1
-      '@babel/runtime': 7.27.6
+      '@babel/runtime': 7.26.10
       '@types/aria-query': 5.0.4
       aria-query: 5.3.0
       chalk: 4.1.2
@@ -5095,22 +5372,22 @@ snapshots:
       lodash: 4.17.21
       redent: 3.0.0
 
-  '@testing-library/react@16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+  '@testing-library/react@16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.5(@types/react@18.3.19))(@types/react@18.3.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
       '@babel/runtime': 7.26.10
       '@testing-library/dom': 10.4.0
-      react: 19.1.0
-      react-dom: 19.1.0(react@19.1.0)
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
     optionalDependencies:
-      '@types/react': 19.1.8
-      '@types/react-dom': 19.1.6(@types/react@19.1.8)
+      '@types/react': 18.3.19
+      '@types/react-dom': 18.3.5(@types/react@18.3.19)
 
-  '@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.5.3)':
+  '@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.5.3)':
     dependencies:
-      '@babel/generator': 7.27.5
-      '@babel/parser': 7.27.5
-      '@babel/traverse': 7.27.4
-      '@babel/types': 7.27.6
+      '@babel/generator': 7.17.7
+      '@babel/parser': 7.26.10
+      '@babel/traverse': 7.23.2
+      '@babel/types': 7.17.0
       javascript-natural-sort: 0.7.1
       lodash: 4.17.21
       prettier: 3.5.3
@@ -5126,10 +5403,6 @@ snapshots:
 
   '@types/aria-query@5.0.4': {}
 
-  '@types/chai@5.2.2':
-    dependencies:
-      '@types/deep-eql': 4.0.2
-
   '@types/cookie@0.6.0': {}
 
   '@types/d3-array@3.0.3': {}
@@ -5189,13 +5462,13 @@ snapshots:
     dependencies:
       '@types/ms': 2.1.0
 
-  '@types/deep-eql@4.0.2': {}
-
   '@types/estree-jsx@1.0.5':
     dependencies:
-      '@types/estree': 1.0.8
+      '@types/estree': 1.0.7
 
-  '@types/estree@1.0.8': {}
+  '@types/estree@1.0.6': {}
+
+  '@types/estree@1.0.7': {}
 
   '@types/geojson@7946.0.16': {}
 
@@ -5217,33 +5490,34 @@ snapshots:
 
   '@types/ms@2.1.0': {}
 
-  '@types/node@20.19.1':
+  '@types/node@22.15.14':
     dependencies:
       undici-types: 6.21.0
 
-  '@types/node@24.0.3':
-    dependencies:
-      undici-types: 7.8.0
+  '@types/normalize-package-data@2.4.4': {}
 
   '@types/parse-json@4.0.2': {}
 
-  '@types/react-dom@19.1.6(@types/react@19.1.8)':
+  '@types/prop-types@15.7.14': {}
+
+  '@types/react-dom@18.3.5(@types/react@18.3.19)':
     dependencies:
-      '@types/react': 19.1.8
+      '@types/react': 18.3.19
 
   '@types/react-syntax-highlighter@15.5.13':
     dependencies:
-      '@types/react': 19.1.8
+      '@types/react': 18.3.19
 
-  '@types/react-transition-group@4.4.12(@types/react@19.1.8)':
+  '@types/react-transition-group@4.4.12(@types/react@18.3.19)':
     dependencies:
-      '@types/react': 19.1.8
+      '@types/react': 18.3.19
 
-  '@types/react@19.1.8':
+  '@types/react@18.3.19':
     dependencies:
+      '@types/prop-types': 15.7.14
       csstype: 3.1.3
 
-  '@types/statuses@2.0.6': {}
+  '@types/statuses@2.0.5': {}
 
   '@types/tough-cookie@4.0.5': {}
 
@@ -5251,450 +5525,507 @@ snapshots:
 
   '@types/unist@3.0.3': {}
 
-  '@types/whatwg-mimetype@3.0.2': {}
-
-  '@typescript-eslint/eslint-plugin@8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
+  '@typescript-eslint/eslint-plugin@8.32.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)':
     dependencies:
       '@eslint-community/regexpp': 4.12.1
-      '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
-      '@typescript-eslint/scope-manager': 8.34.1
-      '@typescript-eslint/type-utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
-      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
-      '@typescript-eslint/visitor-keys': 8.34.1
-      eslint: 9.29.0(jiti@1.21.7)
+      '@typescript-eslint/parser': 8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
+      '@typescript-eslint/scope-manager': 8.32.0
+      '@typescript-eslint/type-utils': 8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
+      '@typescript-eslint/utils': 8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
+      '@typescript-eslint/visitor-keys': 8.32.0
+      eslint: 9.26.0(jiti@1.21.7)
       graphemer: 1.4.0
-      ignore: 7.0.5
+      ignore: 5.3.2
       natural-compare: 1.4.0
       ts-api-utils: 2.1.0(typescript@5.8.3)
       typescript: 5.8.3
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
+  '@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)':
     dependencies:
-      '@typescript-eslint/scope-manager': 8.34.1
-      '@typescript-eslint/types': 8.34.1
-      '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3)
-      '@typescript-eslint/visitor-keys': 8.34.1
-      debug: 4.4.1
-      eslint: 9.29.0(jiti@1.21.7)
+      '@typescript-eslint/scope-manager': 8.32.0
+      '@typescript-eslint/types': 8.32.0
+      '@typescript-eslint/typescript-estree': 8.32.0(typescript@5.8.3)
+      '@typescript-eslint/visitor-keys': 8.32.0
+      debug: 4.4.0
+      eslint: 9.26.0(jiti@1.21.7)
       typescript: 5.8.3
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/project-service@8.34.1(typescript@5.8.3)':
+  '@typescript-eslint/scope-manager@8.27.0':
+    dependencies:
+      '@typescript-eslint/types': 8.27.0
+      '@typescript-eslint/visitor-keys': 8.27.0
+
+  '@typescript-eslint/scope-manager@8.28.0':
+    dependencies:
+      '@typescript-eslint/types': 8.28.0
+      '@typescript-eslint/visitor-keys': 8.28.0
+
+  '@typescript-eslint/scope-manager@8.32.0':
+    dependencies:
+      '@typescript-eslint/types': 8.32.0
+      '@typescript-eslint/visitor-keys': 8.32.0
+
+  '@typescript-eslint/type-utils@8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)':
     dependencies:
-      '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3)
-      '@typescript-eslint/types': 8.34.1
-      debug: 4.4.1
+      '@typescript-eslint/typescript-estree': 8.32.0(typescript@5.8.3)
+      '@typescript-eslint/utils': 8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
+      debug: 4.4.0
+      eslint: 9.26.0(jiti@1.21.7)
+      ts-api-utils: 2.1.0(typescript@5.8.3)
       typescript: 5.8.3
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/scope-manager@8.34.1':
-    dependencies:
-      '@typescript-eslint/types': 8.34.1
-      '@typescript-eslint/visitor-keys': 8.34.1
+  '@typescript-eslint/types@8.27.0': {}
+
+  '@typescript-eslint/types@8.28.0': {}
 
-  '@typescript-eslint/tsconfig-utils@8.34.1(typescript@5.8.3)':
+  '@typescript-eslint/types@8.32.0': {}
+
+  '@typescript-eslint/typescript-estree@8.27.0(typescript@5.8.3)':
     dependencies:
+      '@typescript-eslint/types': 8.27.0
+      '@typescript-eslint/visitor-keys': 8.27.0
+      debug: 4.4.0
+      fast-glob: 3.3.3
+      is-glob: 4.0.3
+      minimatch: 9.0.5
+      semver: 7.7.1
+      ts-api-utils: 2.1.0(typescript@5.8.3)
       typescript: 5.8.3
+    transitivePeerDependencies:
+      - supports-color
 
-  '@typescript-eslint/type-utils@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
+  '@typescript-eslint/typescript-estree@8.28.0(typescript@5.8.3)':
     dependencies:
-      '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3)
-      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
-      debug: 4.4.1
-      eslint: 9.29.0(jiti@1.21.7)
+      '@typescript-eslint/types': 8.28.0
+      '@typescript-eslint/visitor-keys': 8.28.0
+      debug: 4.4.0
+      fast-glob: 3.3.3
+      is-glob: 4.0.3
+      minimatch: 9.0.5
+      semver: 7.7.1
       ts-api-utils: 2.1.0(typescript@5.8.3)
       typescript: 5.8.3
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/types@8.34.1': {}
-
-  '@typescript-eslint/typescript-estree@8.34.1(typescript@5.8.3)':
+  '@typescript-eslint/typescript-estree@8.32.0(typescript@5.8.3)':
     dependencies:
-      '@typescript-eslint/project-service': 8.34.1(typescript@5.8.3)
-      '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3)
-      '@typescript-eslint/types': 8.34.1
-      '@typescript-eslint/visitor-keys': 8.34.1
-      debug: 4.4.1
+      '@typescript-eslint/types': 8.32.0
+      '@typescript-eslint/visitor-keys': 8.32.0
+      debug: 4.4.0
       fast-glob: 3.3.3
       is-glob: 4.0.3
       minimatch: 9.0.5
-      semver: 7.7.2
+      semver: 7.7.1
       ts-api-utils: 2.1.0(typescript@5.8.3)
       typescript: 5.8.3
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
+  '@typescript-eslint/utils@8.27.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)':
+    dependencies:
+      '@eslint-community/eslint-utils': 4.5.1(eslint@9.26.0(jiti@1.21.7))
+      '@typescript-eslint/scope-manager': 8.27.0
+      '@typescript-eslint/types': 8.27.0
+      '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.8.3)
+      eslint: 9.26.0(jiti@1.21.7)
+      typescript: 5.8.3
+    transitivePeerDependencies:
+      - supports-color
+
+  '@typescript-eslint/utils@8.28.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)':
+    dependencies:
+      '@eslint-community/eslint-utils': 4.5.1(eslint@9.26.0(jiti@1.21.7))
+      '@typescript-eslint/scope-manager': 8.28.0
+      '@typescript-eslint/types': 8.28.0
+      '@typescript-eslint/typescript-estree': 8.28.0(typescript@5.8.3)
+      eslint: 9.26.0(jiti@1.21.7)
+      typescript: 5.8.3
+    transitivePeerDependencies:
+      - supports-color
+
+  '@typescript-eslint/utils@8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)':
     dependencies:
-      '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@1.21.7))
-      '@typescript-eslint/scope-manager': 8.34.1
-      '@typescript-eslint/types': 8.34.1
-      '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3)
-      eslint: 9.29.0(jiti@1.21.7)
+      '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@1.21.7))
+      '@typescript-eslint/scope-manager': 8.32.0
+      '@typescript-eslint/types': 8.32.0
+      '@typescript-eslint/typescript-estree': 8.32.0(typescript@5.8.3)
+      eslint: 9.26.0(jiti@1.21.7)
       typescript: 5.8.3
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/visitor-keys@8.34.1':
+  '@typescript-eslint/visitor-keys@8.27.0':
+    dependencies:
+      '@typescript-eslint/types': 8.27.0
+      eslint-visitor-keys: 4.2.0
+
+  '@typescript-eslint/visitor-keys@8.28.0':
+    dependencies:
+      '@typescript-eslint/types': 8.28.0
+      eslint-visitor-keys: 4.2.0
+
+  '@typescript-eslint/visitor-keys@8.32.0':
     dependencies:
-      '@typescript-eslint/types': 8.34.1
-      eslint-visitor-keys: 4.2.1
+      '@typescript-eslint/types': 8.32.0
+      eslint-visitor-keys: 4.2.0
 
-  '@uiw/codemirror-extensions-basic-setup@4.23.13(@codemirror/autocomplete@6.18.2(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)(@lezer/common@1.2.3))(@codemirror/commands@6.8.1)(@codemirror/language@6.11.1)(@codemirror/lint@6.8.2)(@codemirror/search@6.5.6)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-extensions-basic-setup@4.23.12(@codemirror/autocomplete@6.18.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)(@lezer/common@1.2.3))(@codemirror/commands@6.8.1)(@codemirror/language@6.11.0)(@codemirror/lint@6.8.2)(@codemirror/search@6.5.6)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@codemirror/autocomplete': 6.18.2(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)(@lezer/common@1.2.3)
+      '@codemirror/autocomplete': 6.18.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)(@lezer/common@1.2.3)
       '@codemirror/commands': 6.8.1
-      '@codemirror/language': 6.11.1
+      '@codemirror/language': 6.11.0
       '@codemirror/lint': 6.8.2
       '@codemirror/search': 6.5.6
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.37.2
+      '@codemirror/view': 6.36.4
 
-  '@uiw/codemirror-theme-abcdef@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-abcdef@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-abyss@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-abyss@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-androidstudio@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-androidstudio@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-andromeda@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-andromeda@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-atomone@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-atomone@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-aura@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-aura@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-basic@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-basic@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-bbedit@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-bbedit@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-bespin@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-bespin@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-console@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-console@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-copilot@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-copilot@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-darcula@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-darcula@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-dracula@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-dracula@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-duotone@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-duotone@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-eclipse@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-eclipse@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-github@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-github@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-gruvbox-dark@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-gruvbox-dark@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-kimbie@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-kimbie@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-material@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-material@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-monokai-dimmed@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-monokai-dimmed@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-monokai@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-monokai@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-noctis-lilac@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-noctis-lilac@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-nord@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-nord@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-okaidia@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-okaidia@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-quietlight@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-quietlight@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-red@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-red@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-solarized@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-solarized@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-sublime@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-sublime@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-tokyo-night-day@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-tokyo-night-day@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-tokyo-night-storm@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-tokyo-night-storm@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-tokyo-night@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-tokyo-night@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-tomorrow-night-blue@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-tomorrow-night-blue@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-vscode@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-vscode@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-white@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-white@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-theme-xcode@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-theme-xcode@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-themes-all@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
-    dependencies:
-      '@uiw/codemirror-theme-abcdef': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-abyss': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-androidstudio': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-andromeda': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-atomone': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-aura': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-basic': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-bbedit': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-bespin': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-console': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-copilot': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-darcula': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-dracula': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-duotone': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-eclipse': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-github': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-gruvbox-dark': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-kimbie': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-material': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-monokai': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-monokai-dimmed': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-noctis-lilac': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-nord': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-okaidia': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-quietlight': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-red': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-solarized': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-sublime': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-tokyo-night': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-tokyo-night-day': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-tokyo-night-storm': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-tomorrow-night-blue': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-vscode': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-white': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-theme-xcode': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
-      '@uiw/codemirror-themes': 4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+  '@uiw/codemirror-themes-all@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
+    dependencies:
+      '@uiw/codemirror-theme-abcdef': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-abyss': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-androidstudio': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-andromeda': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-atomone': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-aura': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-basic': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-bbedit': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-bespin': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-console': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-copilot': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-darcula': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-dracula': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-duotone': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-eclipse': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-github': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-gruvbox-dark': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-kimbie': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-material': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-monokai': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-monokai-dimmed': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-noctis-lilac': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-nord': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-okaidia': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-quietlight': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-red': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-solarized': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-sublime': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-tokyo-night': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-tokyo-night-day': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-tokyo-night-storm': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-tomorrow-night-blue': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-vscode': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-white': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-theme-xcode': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
+      '@uiw/codemirror-themes': 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
 
-  '@uiw/codemirror-themes@4.23.13(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)':
+  '@uiw/codemirror-themes@4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)':
     dependencies:
-      '@codemirror/language': 6.11.1
+      '@codemirror/language': 6.11.0
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.37.2
+      '@codemirror/view': 6.36.4
 
-  '@uiw/react-codemirror@4.23.13(@babel/runtime@7.27.6)(@codemirror/autocomplete@6.18.2(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)(@lezer/common@1.2.3))(@codemirror/language@6.11.1)(@codemirror/lint@6.8.2)(@codemirror/search@6.5.6)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.37.2)(codemirror@6.0.1(@lezer/common@1.2.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+  '@uiw/react-codemirror@4.23.12(@babel/runtime@7.26.10)(@codemirror/autocomplete@6.18.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)(@lezer/common@1.2.3))(@codemirror/language@6.11.0)(@codemirror/lint@6.8.2)(@codemirror/search@6.5.6)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.36.4)(codemirror@6.0.1(@lezer/common@1.2.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.27.6
+      '@babel/runtime': 7.26.10
       '@codemirror/commands': 6.8.1
       '@codemirror/state': 6.5.2
       '@codemirror/theme-one-dark': 6.1.2
-      '@codemirror/view': 6.37.2
-      '@uiw/codemirror-extensions-basic-setup': 4.23.13(@codemirror/autocomplete@6.18.2(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)(@lezer/common@1.2.3))(@codemirror/commands@6.8.1)(@codemirror/language@6.11.1)(@codemirror/lint@6.8.2)(@codemirror/search@6.5.6)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)
+      '@codemirror/view': 6.36.4
+      '@uiw/codemirror-extensions-basic-setup': 4.23.12(@codemirror/autocomplete@6.18.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)(@lezer/common@1.2.3))(@codemirror/commands@6.8.1)(@codemirror/language@6.11.0)(@codemirror/lint@6.8.2)(@codemirror/search@6.5.6)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)
       codemirror: 6.0.1(@lezer/common@1.2.3)
-      react: 19.1.0
-      react-dom: 19.1.0(react@19.1.0)
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
     transitivePeerDependencies:
       - '@codemirror/autocomplete'
       - '@codemirror/language'
@@ -5708,32 +6039,32 @@ snapshots:
       '@types/d3-shape': 1.3.12
       d3-shape: 1.3.7
 
-  '@visx/group@3.12.0(react@19.1.0)':
+  '@visx/group@3.12.0(react@18.3.1)':
     dependencies:
-      '@types/react': 19.1.8
+      '@types/react': 18.3.19
       classnames: 2.5.1
       prop-types: 15.8.1
-      react: 19.1.0
+      react: 18.3.1
 
   '@visx/scale@3.12.0':
     dependencies:
       '@visx/vendor': 3.12.0
 
-  '@visx/shape@3.12.0(react@19.1.0)':
+  '@visx/shape@3.12.0(react@18.3.1)':
     dependencies:
       '@types/d3-path': 1.0.11
       '@types/d3-shape': 1.3.12
       '@types/lodash': 4.17.16
-      '@types/react': 19.1.8
+      '@types/react': 18.3.19
       '@visx/curve': 3.12.0
-      '@visx/group': 3.12.0(react@19.1.0)
+      '@visx/group': 3.12.0(react@18.3.1)
       '@visx/scale': 3.12.0
       classnames: 2.5.1
       d3-path: 1.0.9
       d3-shape: 1.3.7
       lodash: 4.17.21
       prop-types: 15.8.1
-      react: 19.1.0
+      react: 18.3.1
 
   '@visx/vendor@3.12.0':
     dependencies:
@@ -5757,610 +6088,603 @@ snapshots:
       d3-time-format: 4.1.0
       internmap: 2.0.3
 
-  '@vitejs/plugin-react-swc@3.10.2(@swc/helpers@0.5.17)(vite@6.3.5(@types/node@24.0.3)(jiti@1.21.7))':
+  '@vitejs/plugin-react-swc@3.9.0(vite@5.4.19(@types/node@22.15.14))':
     dependencies:
-      '@rolldown/pluginutils': 1.0.0-beta.11
-      '@swc/core': 1.12.4(@swc/helpers@0.5.17)
-      vite: 6.3.5(@types/node@24.0.3)(jiti@1.21.7)
+      '@swc/core': 1.11.24
+      vite: 5.4.19(@types/node@22.15.14)
     transitivePeerDependencies:
       - '@swc/helpers'
 
-  '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.3)(happy-dom@18.0.1)(jiti@1.21.7)(msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3)))':
+  '@vitest/coverage-v8@2.1.9(vitest@2.1.9(@types/node@22.15.14)(happy-dom@17.4.6)(msw@2.7.6(@types/node@22.15.14)(typescript@5.8.3)))':
     dependencies:
       '@ampproject/remapping': 2.3.0
-      '@bcoe/v8-coverage': 1.0.2
-      ast-v8-to-istanbul: 0.3.3
-      debug: 4.4.1
+      '@bcoe/v8-coverage': 0.2.3
+      debug: 4.4.0
       istanbul-lib-coverage: 3.2.2
       istanbul-lib-report: 3.0.1
       istanbul-lib-source-maps: 5.0.6
       istanbul-reports: 3.1.7
       magic-string: 0.30.17
       magicast: 0.3.5
-      std-env: 3.9.0
+      std-env: 3.8.1
       test-exclude: 7.0.1
-      tinyrainbow: 2.0.0
-      vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.3)(happy-dom@18.0.1)(jiti@1.21.7)(msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3))
+      tinyrainbow: 1.2.0
+      vitest: 2.1.9(@types/node@22.15.14)(happy-dom@17.4.6)(msw@2.7.6(@types/node@22.15.14)(typescript@5.8.3))
     transitivePeerDependencies:
       - supports-color
 
-  '@vitest/expect@3.2.4':
+  '@vitest/expect@2.1.9':
     dependencies:
-      '@types/chai': 5.2.2
-      '@vitest/spy': 3.2.4
-      '@vitest/utils': 3.2.4
+      '@vitest/spy': 2.1.9
+      '@vitest/utils': 2.1.9
       chai: 5.2.0
-      tinyrainbow: 2.0.0
+      tinyrainbow: 1.2.0
 
-  '@vitest/mocker@3.2.4(msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3))(vite@6.3.5(@types/node@24.0.3)(jiti@1.21.7))':
+  '@vitest/mocker@2.1.9(msw@2.7.6(@types/node@22.15.14)(typescript@5.8.3))(vite@5.4.19(@types/node@22.15.14))':
     dependencies:
-      '@vitest/spy': 3.2.4
+      '@vitest/spy': 2.1.9
       estree-walker: 3.0.3
       magic-string: 0.30.17
     optionalDependencies:
-      msw: 2.10.2(@types/node@24.0.3)(typescript@5.8.3)
-      vite: 6.3.5(@types/node@24.0.3)(jiti@1.21.7)
+      msw: 2.7.6(@types/node@22.15.14)(typescript@5.8.3)
+      vite: 5.4.19(@types/node@22.15.14)
 
-  '@vitest/pretty-format@3.2.4':
+  '@vitest/pretty-format@2.1.9':
     dependencies:
-      tinyrainbow: 2.0.0
+      tinyrainbow: 1.2.0
 
-  '@vitest/runner@3.2.4':
+  '@vitest/runner@2.1.9':
     dependencies:
-      '@vitest/utils': 3.2.4
-      pathe: 2.0.3
-      strip-literal: 3.0.0
+      '@vitest/utils': 2.1.9
+      pathe: 1.1.2
 
-  '@vitest/snapshot@3.2.4':
+  '@vitest/snapshot@2.1.9':
     dependencies:
-      '@vitest/pretty-format': 3.2.4
+      '@vitest/pretty-format': 2.1.9
       magic-string: 0.30.17
-      pathe: 2.0.3
+      pathe: 1.1.2
 
-  '@vitest/spy@3.2.4':
+  '@vitest/spy@2.1.9':
     dependencies:
-      tinyspy: 4.0.3
+      tinyspy: 3.0.2
 
-  '@vitest/utils@3.2.4':
+  '@vitest/utils@2.1.9':
     dependencies:
-      '@vitest/pretty-format': 3.2.4
-      loupe: 3.1.4
-      tinyrainbow: 2.0.0
+      '@vitest/pretty-format': 2.1.9
+      loupe: 3.1.3
+      tinyrainbow: 1.2.0
 
-  '@xyflow/react@12.7.0(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+  '@xyflow/react@12.4.4(@types/react@18.3.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@xyflow/system': 0.0.62
+      '@xyflow/system': 0.0.52
       classcat: 5.0.5
-      react: 19.1.0
-      react-dom: 19.1.0(react@19.1.0)
-      zustand: 4.5.7(@types/react@19.1.8)(react@19.1.0)
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
+      zustand: 4.5.6(@types/react@18.3.19)(react@18.3.1)
     transitivePeerDependencies:
       - '@types/react'
       - immer
 
-  '@xyflow/system@0.0.62':
+  '@xyflow/system@0.0.52':
     dependencies:
       '@types/d3-drag': 3.0.7
-      '@types/d3-interpolate': 3.0.4
       '@types/d3-selection': 3.0.11
       '@types/d3-transition': 3.0.9
       '@types/d3-zoom': 3.0.8
       d3-drag: 3.0.0
-      d3-interpolate: 3.0.1
       d3-selection: 3.0.0
       d3-zoom: 3.0.0
 
-  '@zag-js/accordion@1.15.2':
+  '@zag-js/accordion@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/anatomy@1.15.2': {}
+  '@zag-js/anatomy@1.15.0': {}
 
-  '@zag-js/angle-slider@1.15.2':
+  '@zag-js/angle-slider@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/rect-utils': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/rect-utils': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/aria-hidden@1.15.2': {}
+  '@zag-js/aria-hidden@1.15.0': {}
 
-  '@zag-js/auto-resize@1.15.2':
+  '@zag-js/auto-resize@1.15.0':
     dependencies:
-      '@zag-js/dom-query': 1.15.2
+      '@zag-js/dom-query': 1.15.0
 
-  '@zag-js/avatar@1.15.2':
+  '@zag-js/avatar@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/carousel@1.15.2':
+  '@zag-js/carousel@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/scroll-snap': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/scroll-snap': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/checkbox@1.15.2':
+  '@zag-js/checkbox@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/focus-visible': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/focus-visible': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/clipboard@1.15.2':
+  '@zag-js/clipboard@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/collapsible@1.15.2':
+  '@zag-js/collapsible@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/collection@1.15.2':
+  '@zag-js/collection@1.15.0':
     dependencies:
-      '@zag-js/utils': 1.15.2
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/color-picker@1.15.2':
+  '@zag-js/color-picker@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/color-utils': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dismissable': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/popper': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/color-utils': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dismissable': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/popper': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/color-utils@1.15.2':
+  '@zag-js/color-utils@1.15.0':
     dependencies:
-      '@zag-js/utils': 1.15.2
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/combobox@1.15.2':
+  '@zag-js/combobox@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/aria-hidden': 1.15.2
-      '@zag-js/collection': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dismissable': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/popper': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/aria-hidden': 1.15.0
+      '@zag-js/collection': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dismissable': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/popper': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/core@1.15.2':
+  '@zag-js/core@1.15.0':
     dependencies:
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/date-picker@1.15.2(@internationalized/date@3.8.2)':
+  '@zag-js/date-picker@1.15.0(@internationalized/date@3.8.1)':
     dependencies:
-      '@internationalized/date': 3.8.2
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/date-utils': 1.15.2(@internationalized/date@3.8.2)
-      '@zag-js/dismissable': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/live-region': 1.15.2
-      '@zag-js/popper': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@internationalized/date': 3.8.1
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/date-utils': 1.15.0(@internationalized/date@3.8.1)
+      '@zag-js/dismissable': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/live-region': 1.15.0
+      '@zag-js/popper': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/date-utils@1.15.2(@internationalized/date@3.8.2)':
+  '@zag-js/date-utils@1.15.0(@internationalized/date@3.8.1)':
     dependencies:
-      '@internationalized/date': 3.8.2
+      '@internationalized/date': 3.8.1
 
-  '@zag-js/dialog@1.15.2':
+  '@zag-js/dialog@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/aria-hidden': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dismissable': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/focus-trap': 1.15.2
-      '@zag-js/remove-scroll': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/aria-hidden': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dismissable': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/focus-trap': 1.15.0
+      '@zag-js/remove-scroll': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/dismissable@1.15.2':
+  '@zag-js/dismissable@1.15.0':
     dependencies:
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/interact-outside': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/interact-outside': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/dom-query@1.15.2':
+  '@zag-js/dom-query@1.15.0':
     dependencies:
-      '@zag-js/types': 1.15.2
+      '@zag-js/types': 1.15.0
 
-  '@zag-js/editable@1.15.2':
+  '@zag-js/editable@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/interact-outside': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/interact-outside': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/file-upload@1.15.2':
+  '@zag-js/file-upload@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/file-utils': 1.15.2
-      '@zag-js/i18n-utils': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/file-utils': 1.15.0
+      '@zag-js/i18n-utils': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/file-utils@1.15.2':
+  '@zag-js/file-utils@1.15.0':
     dependencies:
-      '@zag-js/i18n-utils': 1.15.2
+      '@zag-js/i18n-utils': 1.15.0
 
-  '@zag-js/floating-panel@1.15.2':
+  '@zag-js/floating-panel@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dismissable': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/popper': 1.15.2
-      '@zag-js/rect-utils': 1.15.2
-      '@zag-js/store': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dismissable': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/popper': 1.15.0
+      '@zag-js/rect-utils': 1.15.0
+      '@zag-js/store': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/focus-trap@1.15.2':
+  '@zag-js/focus-trap@1.15.0':
     dependencies:
-      '@zag-js/dom-query': 1.15.2
+      '@zag-js/dom-query': 1.15.0
 
-  '@zag-js/focus-visible@1.15.2':
+  '@zag-js/focus-visible@1.15.0':
     dependencies:
-      '@zag-js/dom-query': 1.15.2
+      '@zag-js/dom-query': 1.15.0
 
-  '@zag-js/highlight-word@1.15.2': {}
+  '@zag-js/highlight-word@1.15.0': {}
 
-  '@zag-js/hover-card@1.15.2':
+  '@zag-js/hover-card@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dismissable': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/popper': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dismissable': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/popper': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/i18n-utils@1.15.2':
+  '@zag-js/i18n-utils@1.15.0':
     dependencies:
-      '@zag-js/dom-query': 1.15.2
+      '@zag-js/dom-query': 1.15.0
 
-  '@zag-js/interact-outside@1.15.2':
+  '@zag-js/interact-outside@1.15.0':
     dependencies:
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/listbox@1.15.2':
+  '@zag-js/listbox@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/collection': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/focus-visible': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/collection': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/focus-visible': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/live-region@1.15.2': {}
+  '@zag-js/live-region@1.15.0': {}
 
-  '@zag-js/menu@1.15.2':
+  '@zag-js/menu@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dismissable': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/popper': 1.15.2
-      '@zag-js/rect-utils': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dismissable': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/popper': 1.15.0
+      '@zag-js/rect-utils': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/number-input@1.15.2':
+  '@zag-js/number-input@1.15.0':
     dependencies:
-      '@internationalized/number': 3.6.3
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@internationalized/number': 3.6.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/pagination@1.15.2':
+  '@zag-js/pagination@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/password-input@1.15.2':
+  '@zag-js/password-input@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/pin-input@1.15.2':
+  '@zag-js/pin-input@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/popover@1.15.2':
+  '@zag-js/popover@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/aria-hidden': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dismissable': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/focus-trap': 1.15.2
-      '@zag-js/popper': 1.15.2
-      '@zag-js/remove-scroll': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/aria-hidden': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dismissable': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/focus-trap': 1.15.0
+      '@zag-js/popper': 1.15.0
+      '@zag-js/remove-scroll': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/popper@1.15.2':
+  '@zag-js/popper@1.15.0':
     dependencies:
       '@floating-ui/dom': 1.7.1
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/presence@1.15.2':
+  '@zag-js/presence@1.15.0':
     dependencies:
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/types': 1.15.2
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/types': 1.15.0
 
-  '@zag-js/progress@1.15.2':
+  '@zag-js/progress@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/qr-code@1.15.2':
+  '@zag-js/qr-code@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
       proxy-memoize: 3.0.1
       uqr: 0.1.2
 
-  '@zag-js/radio-group@1.15.2':
+  '@zag-js/radio-group@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/focus-visible': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/focus-visible': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/rating-group@1.15.2':
+  '@zag-js/rating-group@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/react@1.15.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+  '@zag-js/react@1.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@zag-js/core': 1.15.2
-      '@zag-js/store': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
-      react: 19.1.0
-      react-dom: 19.1.0(react@19.1.0)
+      '@zag-js/core': 1.15.0
+      '@zag-js/store': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
 
-  '@zag-js/rect-utils@1.15.2': {}
+  '@zag-js/rect-utils@1.15.0': {}
 
-  '@zag-js/remove-scroll@1.15.2':
+  '@zag-js/remove-scroll@1.15.0':
     dependencies:
-      '@zag-js/dom-query': 1.15.2
+      '@zag-js/dom-query': 1.15.0
 
-  '@zag-js/scroll-snap@1.15.2':
+  '@zag-js/scroll-snap@1.15.0':
     dependencies:
-      '@zag-js/dom-query': 1.15.2
+      '@zag-js/dom-query': 1.15.0
 
-  '@zag-js/select@1.15.2':
+  '@zag-js/select@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/collection': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dismissable': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/popper': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/collection': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dismissable': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/popper': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/signature-pad@1.15.2':
+  '@zag-js/signature-pad@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
       perfect-freehand: 1.2.2
 
-  '@zag-js/slider@1.15.2':
+  '@zag-js/slider@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/splitter@1.15.2':
+  '@zag-js/splitter@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/steps@1.15.2':
+  '@zag-js/steps@1.15.0':
     dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
 
-  '@zag-js/store@1.15.2':
+  '@zag-js/store@1.15.0':
     dependencies:
       proxy-compare: 3.0.1
 
-  '@zag-js/switch@1.15.2':
-    dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/focus-visible': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
-
-  '@zag-js/tabs@1.15.2':
-    dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
-
-  '@zag-js/tags-input@1.15.2':
-    dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/auto-resize': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/interact-outside': 1.15.2
-      '@zag-js/live-region': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
-
-  '@zag-js/time-picker@1.15.2(@internationalized/date@3.8.2)':
-    dependencies:
-      '@internationalized/date': 3.8.2
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dismissable': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/popper': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
-
-  '@zag-js/timer@1.15.2':
-    dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
-
-  '@zag-js/toast@1.15.2':
-    dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dismissable': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
-
-  '@zag-js/toggle-group@1.15.2':
-    dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
-
-  '@zag-js/toggle@1.15.2':
-    dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
-
-  '@zag-js/tooltip@1.15.2':
-    dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/focus-visible': 1.15.2
-      '@zag-js/popper': 1.15.2
-      '@zag-js/store': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
-
-  '@zag-js/tour@1.15.2':
-    dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dismissable': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/focus-trap': 1.15.2
-      '@zag-js/interact-outside': 1.15.2
-      '@zag-js/popper': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
-
-  '@zag-js/tree-view@1.15.2':
-    dependencies:
-      '@zag-js/anatomy': 1.15.2
-      '@zag-js/collection': 1.15.2
-      '@zag-js/core': 1.15.2
-      '@zag-js/dom-query': 1.15.2
-      '@zag-js/types': 1.15.2
-      '@zag-js/utils': 1.15.2
-
-  '@zag-js/types@1.15.2':
+  '@zag-js/switch@1.15.0':
+    dependencies:
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/focus-visible': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
+
+  '@zag-js/tabs@1.15.0':
+    dependencies:
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
+
+  '@zag-js/tags-input@1.15.0':
+    dependencies:
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/auto-resize': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/interact-outside': 1.15.0
+      '@zag-js/live-region': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
+
+  '@zag-js/time-picker@1.15.0(@internationalized/date@3.8.1)':
+    dependencies:
+      '@internationalized/date': 3.8.1
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dismissable': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/popper': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
+
+  '@zag-js/timer@1.15.0':
+    dependencies:
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
+
+  '@zag-js/toast@1.15.0':
+    dependencies:
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dismissable': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
+
+  '@zag-js/toggle-group@1.15.0':
+    dependencies:
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
+
+  '@zag-js/toggle@1.15.0':
+    dependencies:
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
+
+  '@zag-js/tooltip@1.15.0':
+    dependencies:
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/focus-visible': 1.15.0
+      '@zag-js/popper': 1.15.0
+      '@zag-js/store': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
+
+  '@zag-js/tour@1.15.0':
+    dependencies:
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dismissable': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/focus-trap': 1.15.0
+      '@zag-js/interact-outside': 1.15.0
+      '@zag-js/popper': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
+
+  '@zag-js/tree-view@1.15.0':
+    dependencies:
+      '@zag-js/anatomy': 1.15.0
+      '@zag-js/collection': 1.15.0
+      '@zag-js/core': 1.15.0
+      '@zag-js/dom-query': 1.15.0
+      '@zag-js/types': 1.15.0
+      '@zag-js/utils': 1.15.0
+
+  '@zag-js/types@1.15.0':
     dependencies:
       csstype: 3.1.3
 
-  '@zag-js/utils@1.15.2': {}
+  '@zag-js/utils@1.15.0': {}
 
-  acorn-jsx@5.3.2(acorn@8.14.1):
+  accepts@2.0.0:
     dependencies:
-      acorn: 8.14.1
+      mime-types: 3.0.1
+      negotiator: 1.0.0
 
-  acorn-jsx@5.3.2(acorn@8.15.0):
+  acorn-jsx@5.3.2(acorn@8.14.1):
     dependencies:
-      acorn: 8.15.0
+      acorn: 8.14.1
 
   acorn@8.14.1: {}
 
-  acorn@8.15.0: {}
-
   ajv@6.12.6:
     dependencies:
       fast-deep-equal: 3.1.3
@@ -6462,12 +6786,6 @@ snapshots:
 
   ast-types-flow@0.0.8: {}
 
-  ast-v8-to-istanbul@0.3.3:
-    dependencies:
-      '@jridgewell/trace-mapping': 0.3.25
-      estree-walker: 3.0.3
-      js-tokens: 9.0.1
-
   async-function@1.0.0: {}
 
   asynckit@0.4.0: {}
@@ -6483,10 +6801,10 @@ snapshots:
 
   axe-core@4.10.3: {}
 
-  axios@1.10.0:
+  axios@1.8.4:
     dependencies:
       follow-redirects: 1.15.9
-      form-data: 4.0.3
+      form-data: 4.0.2
       proxy-from-env: 1.1.0
     transitivePeerDependencies:
       - debug
@@ -6507,12 +6825,26 @@ snapshots:
 
   binary-extensions@2.3.0: {}
 
-  brace-expansion@1.1.12:
+  body-parser@2.2.0:
+    dependencies:
+      bytes: 3.1.2
+      content-type: 1.0.5
+      debug: 4.4.0
+      http-errors: 2.0.0
+      iconv-lite: 0.6.3
+      on-finished: 2.4.1
+      qs: 6.14.0
+      raw-body: 3.0.0
+      type-is: 2.0.1
+    transitivePeerDependencies:
+      - supports-color
+
+  brace-expansion@1.1.11:
     dependencies:
       balanced-match: 1.0.2
       concat-map: 0.0.1
 
-  brace-expansion@2.0.2:
+  brace-expansion@2.0.1:
     dependencies:
       balanced-match: 1.0.2
 
@@ -6520,14 +6852,16 @@ snapshots:
     dependencies:
       fill-range: 7.1.1
 
-  browserslist@4.25.0:
+  browserslist@4.24.4:
     dependencies:
-      caniuse-lite: 1.0.30001724
-      electron-to-chromium: 1.5.171
+      caniuse-lite: 1.0.30001707
+      electron-to-chromium: 1.5.123
       node-releases: 2.0.19
-      update-browserslist-db: 1.1.3(browserslist@4.25.0)
+      update-browserslist-db: 1.1.3(browserslist@4.24.4)
+
+  builtin-modules@3.3.0: {}
 
-  builtin-modules@5.0.0: {}
+  bytes@3.1.2: {}
 
   c12@1.11.1(magicast@0.3.5):
     dependencies:
@@ -6569,7 +6903,7 @@ snapshots:
 
   camelcase@8.0.0: {}
 
-  caniuse-lite@1.0.30001724: {}
+  caniuse-lite@1.0.30001707: {}
 
   ccount@2.0.1: {}
 
@@ -6578,15 +6912,15 @@ snapshots:
       assertion-error: 2.0.1
       check-error: 2.1.1
       deep-eql: 5.0.2
-      loupe: 3.1.4
+      loupe: 3.1.3
       pathval: 2.0.0
 
-  chakra-react-select@6.1.0(@chakra-ui/react@3.21.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+  chakra-react-select@6.1.0(@chakra-ui/react@3.20.0(@emotion/react@11.14.0(@types/react@18.3.19)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.19)(next-themes@0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
     dependencies:
-      '@chakra-ui/react': 3.21.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
-      next-themes: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
-      react: 19.1.0
-      react-select: 5.10.1(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+      '@chakra-ui/react': 3.20.0(@emotion/react@11.14.0(@types/react@18.3.19)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      next-themes: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      react: 18.3.1
+      react-select: 5.10.1(@types/react@18.3.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
     transitivePeerDependencies:
       - '@types/react'
       - react-dom
@@ -6616,13 +6950,13 @@ snapshots:
 
   character-reference-invalid@2.0.1: {}
 
-  chart.js@4.5.0:
+  chart.js@4.4.9:
     dependencies:
       '@kurkle/color': 0.3.4
 
-  chartjs-plugin-annotation@3.1.0(chart.js@4.5.0):
+  chartjs-plugin-annotation@3.1.0(chart.js@4.4.9):
     dependencies:
-      chart.js: 4.5.0
+      chart.js: 4.4.9
 
   check-error@2.1.1: {}
 
@@ -6666,13 +7000,13 @@ snapshots:
 
   codemirror@6.0.1(@lezer/common@1.2.3):
     dependencies:
-      '@codemirror/autocomplete': 6.18.2(@codemirror/language@6.11.1)(@codemirror/state@6.5.2)(@codemirror/view@6.37.2)(@lezer/common@1.2.3)
+      '@codemirror/autocomplete': 6.18.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)(@lezer/common@1.2.3)
       '@codemirror/commands': 6.8.1
-      '@codemirror/language': 6.11.1
+      '@codemirror/language': 6.11.0
       '@codemirror/lint': 6.8.2
       '@codemirror/search': 6.5.6
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.37.2
+      '@codemirror/view': 6.36.4
     transitivePeerDependencies:
       - '@lezer/common'
 
@@ -6700,15 +7034,26 @@ snapshots:
 
   consola@3.4.2: {}
 
+  content-disposition@1.0.0:
+    dependencies:
+      safe-buffer: 5.2.1
+
+  content-type@1.0.5: {}
+
   convert-source-map@1.9.0: {}
 
+  cookie-signature@1.2.2: {}
+
   cookie@0.7.2: {}
 
-  cookie@1.0.2: {}
+  core-js-compat@3.41.0:
+    dependencies:
+      browserslist: 4.24.4
 
-  core-js-compat@3.43.0:
+  cors@2.8.5:
     dependencies:
-      browserslist: 4.25.0
+      object-assign: 4.1.1
+      vary: 1.1.2
 
   cosmiconfig@7.1.0:
     dependencies:
@@ -6838,11 +7183,11 @@ snapshots:
 
   debounce-promise@3.1.2: {}
 
-  debug@4.4.1:
+  debug@4.4.0:
     dependencies:
       ms: 2.1.3
 
-  decode-named-character-reference@1.2.0:
+  decode-named-character-reference@1.1.0:
     dependencies:
       character-entities: 2.0.2
 
@@ -6870,6 +7215,8 @@ snapshots:
 
   delayed-stream@1.0.0: {}
 
+  depd@2.0.0: {}
+
   dequal@2.0.3: {}
 
   destr@2.0.3: {}
@@ -6888,7 +7235,7 @@ snapshots:
 
   dom-helpers@5.2.1:
     dependencies:
-      '@babel/runtime': 7.27.6
+      '@babel/runtime': 7.26.10
       csstype: 3.1.3
 
   dotenv@16.4.7: {}
@@ -6901,7 +7248,9 @@ snapshots:
 
   eastasianwidth@0.2.0: {}
 
-  electron-to-chromium@1.5.171: {}
+  ee-first@1.1.1: {}
+
+  electron-to-chromium@1.5.123: {}
 
   elkjs@0.10.0: {}
 
@@ -6909,6 +7258,8 @@ snapshots:
 
   emoji-regex@9.2.2: {}
 
+  encodeurl@2.0.0: {}
+
   error-ex@1.3.2:
     dependencies:
       is-arrayish: 0.2.1
@@ -6990,7 +7341,7 @@ snapshots:
       iterator.prototype: 1.1.5
       safe-array-concat: 1.1.3
 
-  es-module-lexer@1.7.0: {}
+  es-module-lexer@1.6.0: {}
 
   es-object-atoms@1.1.1:
     dependencies:
@@ -7015,52 +7366,52 @@ snapshots:
 
   es6-promise@4.2.8: {}
 
-  esbuild@0.25.5:
+  esbuild@0.21.5:
     optionalDependencies:
-      '@esbuild/aix-ppc64': 0.25.5
-      '@esbuild/android-arm': 0.25.5
-      '@esbuild/android-arm64': 0.25.5
-      '@esbuild/android-x64': 0.25.5
-      '@esbuild/darwin-arm64': 0.25.5
-      '@esbuild/darwin-x64': 0.25.5
-      '@esbuild/freebsd-arm64': 0.25.5
-      '@esbuild/freebsd-x64': 0.25.5
-      '@esbuild/linux-arm': 0.25.5
-      '@esbuild/linux-arm64': 0.25.5
-      '@esbuild/linux-ia32': 0.25.5
-      '@esbuild/linux-loong64': 0.25.5
-      '@esbuild/linux-mips64el': 0.25.5
-      '@esbuild/linux-ppc64': 0.25.5
-      '@esbuild/linux-riscv64': 0.25.5
-      '@esbuild/linux-s390x': 0.25.5
-      '@esbuild/linux-x64': 0.25.5
-      '@esbuild/netbsd-arm64': 0.25.5
-      '@esbuild/netbsd-x64': 0.25.5
-      '@esbuild/openbsd-arm64': 0.25.5
-      '@esbuild/openbsd-x64': 0.25.5
-      '@esbuild/sunos-x64': 0.25.5
-      '@esbuild/win32-arm64': 0.25.5
-      '@esbuild/win32-ia32': 0.25.5
-      '@esbuild/win32-x64': 0.25.5
+      '@esbuild/aix-ppc64': 0.21.5
+      '@esbuild/android-arm': 0.21.5
+      '@esbuild/android-arm64': 0.21.5
+      '@esbuild/android-x64': 0.21.5
+      '@esbuild/darwin-arm64': 0.21.5
+      '@esbuild/darwin-x64': 0.21.5
+      '@esbuild/freebsd-arm64': 0.21.5
+      '@esbuild/freebsd-x64': 0.21.5
+      '@esbuild/linux-arm': 0.21.5
+      '@esbuild/linux-arm64': 0.21.5
+      '@esbuild/linux-ia32': 0.21.5
+      '@esbuild/linux-loong64': 0.21.5
+      '@esbuild/linux-mips64el': 0.21.5
+      '@esbuild/linux-ppc64': 0.21.5
+      '@esbuild/linux-riscv64': 0.21.5
+      '@esbuild/linux-s390x': 0.21.5
+      '@esbuild/linux-x64': 0.21.5
+      '@esbuild/netbsd-x64': 0.21.5
+      '@esbuild/openbsd-x64': 0.21.5
+      '@esbuild/sunos-x64': 0.21.5
+      '@esbuild/win32-arm64': 0.21.5
+      '@esbuild/win32-ia32': 0.21.5
+      '@esbuild/win32-x64': 0.21.5
 
   escalade@3.2.0: {}
 
+  escape-html@1.0.3: {}
+
   escape-string-regexp@1.0.5: {}
 
   escape-string-regexp@4.0.0: {}
 
   escape-string-regexp@5.0.0: {}
 
-  eslint-config-prettier@10.1.5(eslint@9.29.0(jiti@1.21.7)):
+  eslint-config-prettier@10.1.2(eslint@9.26.0(jiti@1.21.7)):
     dependencies:
-      eslint: 9.29.0(jiti@1.21.7)
+      eslint: 9.26.0(jiti@1.21.7)
 
   eslint-plugin-i18next@6.1.1:
     dependencies:
       lodash: 4.17.21
       requireindex: 1.1.0
 
-  eslint-plugin-jsx-a11y@6.10.2(eslint@9.29.0(jiti@1.21.7)):
+  eslint-plugin-jsx-a11y@6.10.2(eslint@9.26.0(jiti@1.21.7)):
     dependencies:
       aria-query: 5.3.2
       array-includes: 3.1.8
@@ -7070,7 +7421,7 @@ snapshots:
       axobject-query: 4.1.0
       damerau-levenshtein: 1.0.8
       emoji-regex: 9.2.2
-      eslint: 9.29.0(jiti@1.21.7)
+      eslint: 9.26.0(jiti@1.21.7)
       hasown: 2.0.2
       jsx-ast-utils: 3.3.5
       language-tags: 1.0.9
@@ -7079,34 +7430,34 @@ snapshots:
       safe-regex-test: 1.1.0
       string.prototype.includes: 2.0.1
 
-  eslint-plugin-perfectionist@4.15.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3):
+  eslint-plugin-perfectionist@4.12.3(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3):
     dependencies:
-      '@typescript-eslint/types': 8.34.1
-      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
-      eslint: 9.29.0(jiti@1.21.7)
+      '@typescript-eslint/types': 8.32.0
+      '@typescript-eslint/utils': 8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
+      eslint: 9.26.0(jiti@1.21.7)
       natural-orderby: 5.0.0
     transitivePeerDependencies:
       - supports-color
       - typescript
 
-  eslint-plugin-prettier@5.5.0(eslint-config-prettier@10.1.5(eslint@9.29.0(jiti@1.21.7)))(eslint@9.29.0(jiti@1.21.7))(prettier@3.5.3):
+  eslint-plugin-prettier@5.4.0(eslint-config-prettier@10.1.2(eslint@9.26.0(jiti@1.21.7)))(eslint@9.26.0(jiti@1.21.7))(prettier@3.5.3):
     dependencies:
-      eslint: 9.29.0(jiti@1.21.7)
+      eslint: 9.26.0(jiti@1.21.7)
       prettier: 3.5.3
       prettier-linter-helpers: 1.0.0
-      synckit: 0.11.8
+      synckit: 0.11.4
     optionalDependencies:
-      eslint-config-prettier: 10.1.5(eslint@9.29.0(jiti@1.21.7))
+      eslint-config-prettier: 10.1.2(eslint@9.26.0(jiti@1.21.7))
 
-  eslint-plugin-react-hooks@5.2.0(eslint@9.29.0(jiti@1.21.7)):
+  eslint-plugin-react-hooks@4.6.2(eslint@9.26.0(jiti@1.21.7)):
     dependencies:
-      eslint: 9.29.0(jiti@1.21.7)
+      eslint: 9.26.0(jiti@1.21.7)
 
-  eslint-plugin-react-refresh@0.4.20(eslint@9.29.0(jiti@1.21.7)):
+  eslint-plugin-react-refresh@0.4.20(eslint@9.26.0(jiti@1.21.7)):
     dependencies:
-      eslint: 9.29.0(jiti@1.21.7)
+      eslint: 9.26.0(jiti@1.21.7)
 
-  eslint-plugin-react@7.37.5(eslint@9.29.0(jiti@1.21.7)):
+  eslint-plugin-react@7.37.5(eslint@9.26.0(jiti@1.21.7)):
     dependencies:
       array-includes: 3.1.8
       array.prototype.findlast: 1.2.5
@@ -7114,7 +7465,7 @@ snapshots:
       array.prototype.tosorted: 1.1.4
       doctrine: 2.1.0
       es-iterator-helpers: 1.2.1
-      eslint: 9.29.0(jiti@1.21.7)
+      eslint: 9.26.0(jiti@1.21.7)
       estraverse: 5.3.0
       hasown: 2.0.2
       jsx-ast-utils: 3.3.5
@@ -7128,59 +7479,59 @@ snapshots:
       string.prototype.matchall: 4.0.12
       string.prototype.repeat: 1.0.0
 
-  eslint-plugin-unicorn@59.0.1(eslint@9.29.0(jiti@1.21.7)):
+  eslint-plugin-unicorn@55.0.0(eslint@9.26.0(jiti@1.21.7)):
     dependencies:
-      '@babel/helper-validator-identifier': 7.27.1
-      '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@1.21.7))
-      '@eslint/plugin-kit': 0.2.8
+      '@babel/helper-validator-identifier': 7.25.9
+      '@eslint-community/eslint-utils': 4.5.1(eslint@9.26.0(jiti@1.21.7))
       ci-info: 4.2.0
       clean-regexp: 1.0.0
-      core-js-compat: 3.43.0
-      eslint: 9.29.0(jiti@1.21.7)
+      core-js-compat: 3.41.0
+      eslint: 9.26.0(jiti@1.21.7)
       esquery: 1.6.0
-      find-up-simple: 1.0.1
-      globals: 16.2.0
-      indent-string: 5.0.0
-      is-builtin-module: 5.0.0
+      globals: 15.15.0
+      indent-string: 4.0.0
+      is-builtin-module: 3.2.1
       jsesc: 3.1.0
       pluralize: 8.0.0
+      read-pkg-up: 7.0.1
       regexp-tree: 0.1.27
-      regjsparser: 0.12.0
-      semver: 7.7.2
-      strip-indent: 4.0.0
+      regjsparser: 0.10.0
+      semver: 7.7.1
+      strip-indent: 3.0.0
 
-  eslint-scope@8.4.0:
+  eslint-scope@8.3.0:
     dependencies:
       esrecurse: 4.3.0
       estraverse: 5.3.0
 
   eslint-visitor-keys@3.4.3: {}
 
-  eslint-visitor-keys@4.2.1: {}
+  eslint-visitor-keys@4.2.0: {}
 
-  eslint@9.29.0(jiti@1.21.7):
+  eslint@9.26.0(jiti@1.21.7):
     dependencies:
-      '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@1.21.7))
+      '@eslint-community/eslint-utils': 4.5.1(eslint@9.26.0(jiti@1.21.7))
       '@eslint-community/regexpp': 4.12.1
-      '@eslint/config-array': 0.20.1
-      '@eslint/config-helpers': 0.2.3
-      '@eslint/core': 0.14.0
+      '@eslint/config-array': 0.20.0
+      '@eslint/config-helpers': 0.2.2
+      '@eslint/core': 0.13.0
       '@eslint/eslintrc': 3.3.1
-      '@eslint/js': 9.29.0
-      '@eslint/plugin-kit': 0.3.2
+      '@eslint/js': 9.26.0
+      '@eslint/plugin-kit': 0.2.8
       '@humanfs/node': 0.16.6
       '@humanwhocodes/module-importer': 1.0.1
-      '@humanwhocodes/retry': 0.4.3
-      '@types/estree': 1.0.8
+      '@humanwhocodes/retry': 0.4.2
+      '@modelcontextprotocol/sdk': 1.11.0
+      '@types/estree': 1.0.7
       '@types/json-schema': 7.0.15
       ajv: 6.12.6
       chalk: 4.1.2
       cross-spawn: 7.0.6
-      debug: 4.4.1
+      debug: 4.4.0
       escape-string-regexp: 4.0.0
-      eslint-scope: 8.4.0
-      eslint-visitor-keys: 4.2.1
-      espree: 10.4.0
+      eslint-scope: 8.3.0
+      eslint-visitor-keys: 4.2.0
+      espree: 10.3.0
       esquery: 1.6.0
       esutils: 2.0.3
       fast-deep-equal: 3.1.3
@@ -7195,16 +7546,17 @@ snapshots:
       minimatch: 3.1.2
       natural-compare: 1.4.0
       optionator: 0.9.4
+      zod: 3.24.4
     optionalDependencies:
       jiti: 1.21.7
     transitivePeerDependencies:
       - supports-color
 
-  espree@10.4.0:
+  espree@10.3.0:
     dependencies:
-      acorn: 8.15.0
-      acorn-jsx: 5.3.2(acorn@8.15.0)
-      eslint-visitor-keys: 4.2.1
+      acorn: 8.14.1
+      acorn-jsx: 5.3.2(acorn@8.14.1)
+      eslint-visitor-keys: 4.2.0
 
   espree@9.6.1:
     dependencies:
@@ -7228,11 +7580,55 @@ snapshots:
 
   estree-walker@3.0.3:
     dependencies:
-      '@types/estree': 1.0.8
+      '@types/estree': 1.0.7
 
   esutils@2.0.3: {}
 
-  expect-type@1.2.1: {}
+  etag@1.8.1: {}
+
+  eventsource-parser@3.0.1: {}
+
+  eventsource@3.0.6:
+    dependencies:
+      eventsource-parser: 3.0.1
+
+  expect-type@1.2.0: {}
+
+  express-rate-limit@7.5.0(express@5.1.0):
+    dependencies:
+      express: 5.1.0
+
+  express@5.1.0:
+    dependencies:
+      accepts: 2.0.0
+      body-parser: 2.2.0
+      content-disposition: 1.0.0
+      content-type: 1.0.5
+      cookie: 0.7.2
+      cookie-signature: 1.2.2
+      debug: 4.4.0
+      encodeurl: 2.0.0
+      escape-html: 1.0.3
+      etag: 1.8.1
+      finalhandler: 2.1.0
+      fresh: 2.0.0
+      http-errors: 2.0.0
+      merge-descriptors: 2.0.0
+      mime-types: 3.0.1
+      on-finished: 2.4.1
+      once: 1.4.0
+      parseurl: 1.3.3
+      proxy-addr: 2.0.7
+      qs: 6.14.0
+      range-parser: 1.2.1
+      router: 2.2.0
+      send: 1.2.0
+      serve-static: 2.2.0
+      statuses: 2.0.1
+      type-is: 2.0.1
+      vary: 1.1.2
+    transitivePeerDependencies:
+      - supports-color
 
   extend@3.0.2: {}
 
@@ -7282,10 +7678,6 @@ snapshots:
     transitivePeerDependencies:
       - encoding
 
-  fdir@6.4.6(picomatch@4.0.2):
-    optionalDependencies:
-      picomatch: 4.0.2
-
   file-entry-cache@8.0.0:
     dependencies:
       flat-cache: 4.0.1
@@ -7294,9 +7686,23 @@ snapshots:
     dependencies:
       to-regex-range: 5.0.1
 
+  finalhandler@2.1.0:
+    dependencies:
+      debug: 4.4.0
+      encodeurl: 2.0.0
+      escape-html: 1.0.3
+      on-finished: 2.4.1
+      parseurl: 1.3.3
+      statuses: 2.0.1
+    transitivePeerDependencies:
+      - supports-color
+
   find-root@1.1.0: {}
 
-  find-up-simple@1.0.1: {}
+  find-up@4.1.0:
+    dependencies:
+      locate-path: 5.0.0
+      path-exists: 4.0.0
 
   find-up@5.0.0:
     dependencies:
@@ -7310,11 +7716,11 @@ snapshots:
 
   flatted@3.3.3: {}
 
-  flux@4.0.4(react@19.1.0):
+  flux@4.0.4(react@18.3.1):
     dependencies:
       fbemitter: 3.0.0
       fbjs: 3.0.5
-      react: 19.1.0
+      react: 18.3.1
     transitivePeerDependencies:
       - encoding
 
@@ -7329,16 +7735,19 @@ snapshots:
       cross-spawn: 7.0.6
       signal-exit: 4.1.0
 
-  form-data@4.0.3:
+  form-data@4.0.2:
     dependencies:
       asynckit: 0.4.0
       combined-stream: 1.0.8
       es-set-tostringtag: 2.1.0
-      hasown: 2.0.2
       mime-types: 2.1.35
 
   format@0.2.2: {}
 
+  forwarded@0.2.0: {}
+
+  fresh@2.0.0: {}
+
   fs-minipass@2.1.0:
     dependencies:
       minipass: 3.3.6
@@ -7415,8 +7824,8 @@ snapshots:
   glob@11.0.0:
     dependencies:
       foreground-child: 3.3.1
-      jackspeak: 4.1.1
-      minimatch: 10.0.3
+      jackspeak: 4.1.0
+      minimatch: 10.0.1
       minipass: 7.1.2
       package-json-from-dist: 1.0.1
       path-scurry: 2.0.0
@@ -7425,7 +7834,7 @@ snapshots:
 
   globals@14.0.0: {}
 
-  globals@16.2.0: {}
+  globals@15.15.0: {}
 
   globalthis@1.0.4:
     dependencies:
@@ -7436,7 +7845,7 @@ snapshots:
 
   graphemer@1.4.0: {}
 
-  graphql@16.11.0: {}
+  graphql@16.10.0: {}
 
   handlebars@4.7.8:
     dependencies:
@@ -7447,10 +7856,9 @@ snapshots:
     optionalDependencies:
       uglify-js: 3.19.3
 
-  happy-dom@18.0.1:
+  happy-dom@17.4.6:
     dependencies:
-      '@types/node': 20.19.1
-      '@types/whatwg-mimetype': 3.0.2
+      webidl-conversions: 7.0.0
       whatwg-mimetype: 3.0.0
 
   has-bigints@1.1.0: {}
@@ -7479,7 +7887,7 @@ snapshots:
 
   hast-util-to-jsx-runtime@2.3.6:
     dependencies:
-      '@types/estree': 1.0.8
+      '@types/estree': 1.0.6
       '@types/hast': 3.0.4
       '@types/unist': 3.0.3
       comma-separated-tokens: 2.0.3
@@ -7489,9 +7897,9 @@ snapshots:
       mdast-util-mdx-expression: 2.0.1
       mdast-util-mdx-jsx: 3.2.0
       mdast-util-mdxjs-esm: 2.0.1
-      property-information: 7.1.0
+      property-information: 7.0.0
       space-separated-tokens: 2.0.2
-      style-to-js: 1.1.17
+      style-to-js: 1.1.16
       unist-util-position: 5.0.0
       vfile-message: 4.0.2
     transitivePeerDependencies:
@@ -7519,6 +7927,8 @@ snapshots:
     dependencies:
       react-is: 16.13.1
 
+  hosted-git-info@2.8.9: {}
+
   html-escaper@2.0.2: {}
 
   html-parse-stringify@3.0.1:
@@ -7529,9 +7939,17 @@ snapshots:
 
   html-url-attributes@3.0.1: {}
 
-  i18next-browser-languagedetector@8.2.0:
+  http-errors@2.0.0:
     dependencies:
-      '@babel/runtime': 7.27.6
+      depd: 2.0.0
+      inherits: 2.0.4
+      setprototypeof: 1.2.0
+      statuses: 2.0.1
+      toidentifier: 1.0.1
+
+  i18next-browser-languagedetector@8.1.0:
+    dependencies:
+      '@babel/runtime': 7.26.10
 
   i18next-http-backend@3.0.2:
     dependencies:
@@ -7539,15 +7957,17 @@ snapshots:
     transitivePeerDependencies:
       - encoding
 
-  i18next@25.2.1(typescript@5.8.3):
+  i18next@25.1.2(typescript@5.8.3):
     dependencies:
-      '@babel/runtime': 7.27.6
+      '@babel/runtime': 7.26.10
     optionalDependencies:
       typescript: 5.8.3
 
-  ignore@5.3.2: {}
+  iconv-lite@0.6.3:
+    dependencies:
+      safer-buffer: 2.1.2
 
-  ignore@7.0.5: {}
+  ignore@5.3.2: {}
 
   import-fresh@3.3.1:
     dependencies:
@@ -7558,7 +7978,7 @@ snapshots:
 
   indent-string@4.0.0: {}
 
-  indent-string@5.0.0: {}
+  inherits@2.0.4: {}
 
   inline-style-parser@0.2.4: {}
 
@@ -7570,6 +7990,8 @@ snapshots:
 
   internmap@2.0.3: {}
 
+  ipaddr.js@1.9.1: {}
+
   is-alphabetical@1.0.4: {}
 
   is-alphabetical@2.0.1: {}
@@ -7613,9 +8035,9 @@ snapshots:
       call-bound: 1.0.4
       has-tostringtag: 1.0.2
 
-  is-builtin-module@5.0.0:
+  is-builtin-module@3.2.1:
     dependencies:
-      builtin-modules: 5.0.0
+      builtin-modules: 3.3.0
 
   is-callable@1.2.7: {}
 
@@ -7674,6 +8096,8 @@ snapshots:
 
   is-plain-obj@4.1.0: {}
 
+  is-promise@4.0.0: {}
+
   is-regex@1.2.1:
     dependencies:
       call-bound: 1.0.4
@@ -7735,7 +8159,7 @@ snapshots:
   istanbul-lib-source-maps@5.0.6:
     dependencies:
       '@jridgewell/trace-mapping': 0.3.25
-      debug: 4.4.1
+      debug: 4.4.0
       istanbul-lib-coverage: 3.2.2
     transitivePeerDependencies:
       - supports-color
@@ -7760,7 +8184,7 @@ snapshots:
     optionalDependencies:
       '@pkgjs/parseargs': 0.11.0
 
-  jackspeak@4.1.1:
+  jackspeak@4.1.0:
     dependencies:
       '@isaacs/cliui': 8.0.2
 
@@ -7770,8 +8194,6 @@ snapshots:
 
   js-tokens@4.0.0: {}
 
-  js-tokens@9.0.1: {}
-
   js-yaml@3.14.1:
     dependencies:
       argparse: 1.0.10
@@ -7781,7 +8203,9 @@ snapshots:
     dependencies:
       argparse: 2.0.1
 
-  jsesc@3.0.2: {}
+  jsesc@0.5.0: {}
+
+  jsesc@2.5.2: {}
 
   jsesc@3.1.0: {}
 
@@ -7826,6 +8250,10 @@ snapshots:
 
   lines-and-columns@1.2.4: {}
 
+  locate-path@5.0.0:
+    dependencies:
+      p-locate: 4.1.0
+
   locate-path@6.0.0:
     dependencies:
       p-locate: 5.0.0
@@ -7846,7 +8274,7 @@ snapshots:
     dependencies:
       js-tokens: 4.0.0
 
-  loupe@3.1.4: {}
+  loupe@3.1.3: {}
 
   lowlight@1.20.0:
     dependencies:
@@ -7865,13 +8293,13 @@ snapshots:
 
   magicast@0.3.5:
     dependencies:
-      '@babel/parser': 7.27.5
-      '@babel/types': 7.27.6
+      '@babel/parser': 7.26.10
+      '@babel/types': 7.26.10
       source-map-js: 1.2.1
 
   make-dir@4.0.0:
     dependencies:
-      semver: 7.7.2
+      semver: 7.7.1
 
   markdown-table@3.0.4: {}
 
@@ -7888,7 +8316,7 @@ snapshots:
     dependencies:
       '@types/mdast': 4.0.4
       '@types/unist': 3.0.3
-      decode-named-character-reference: 1.2.0
+      decode-named-character-reference: 1.1.0
       devlop: 1.1.0
       mdast-util-to-string: 4.0.0
       micromark: 4.0.2
@@ -8030,13 +8458,17 @@ snapshots:
     dependencies:
       '@types/mdast': 4.0.4
 
+  media-typer@1.1.0: {}
+
   memoize-one@6.0.0: {}
 
+  merge-descriptors@2.0.0: {}
+
   merge2@1.4.1: {}
 
   micromark-core-commonmark@2.0.3:
     dependencies:
-      decode-named-character-reference: 1.2.0
+      decode-named-character-reference: 1.1.0
       devlop: 1.1.0
       micromark-factory-destination: 2.0.1
       micromark-factory-label: 2.0.1
@@ -8169,7 +8601,7 @@ snapshots:
 
   micromark-util-decode-string@2.0.1:
     dependencies:
-      decode-named-character-reference: 1.2.0
+      decode-named-character-reference: 1.1.0
       micromark-util-character: 2.1.1
       micromark-util-decode-numeric-character-reference: 2.0.2
       micromark-util-symbol: 2.0.1
@@ -8206,8 +8638,8 @@ snapshots:
   micromark@4.0.2:
     dependencies:
       '@types/debug': 4.1.12
-      debug: 4.4.1
-      decode-named-character-reference: 1.2.0
+      debug: 4.4.0
+      decode-named-character-reference: 1.1.0
       devlop: 1.1.0
       micromark-core-commonmark: 2.0.3
       micromark-factory-space: 2.0.1
@@ -8232,23 +8664,29 @@ snapshots:
 
   mime-db@1.52.0: {}
 
+  mime-db@1.54.0: {}
+
   mime-types@2.1.35:
     dependencies:
       mime-db: 1.52.0
 
+  mime-types@3.0.1:
+    dependencies:
+      mime-db: 1.54.0
+
   min-indent@1.0.1: {}
 
-  minimatch@10.0.3:
+  minimatch@10.0.1:
     dependencies:
-      '@isaacs/brace-expansion': 5.0.0
+      brace-expansion: 2.0.1
 
   minimatch@3.1.2:
     dependencies:
-      brace-expansion: 1.1.12
+      brace-expansion: 1.1.11
 
   minimatch@9.0.5:
     dependencies:
-      brace-expansion: 2.0.2
+      brace-expansion: 2.0.1
 
   minimist@1.2.8: {}
 
@@ -8271,32 +8709,32 @@ snapshots:
 
   mlly@1.7.4:
     dependencies:
-      acorn: 8.15.0
+      acorn: 8.14.1
       pathe: 2.0.3
       pkg-types: 1.3.1
       ufo: 1.5.4
 
   ms@2.1.3: {}
 
-  msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3):
+  msw@2.7.6(@types/node@22.15.14)(typescript@5.8.3):
     dependencies:
       '@bundled-es-modules/cookie': 2.0.1
       '@bundled-es-modules/statuses': 1.0.1
       '@bundled-es-modules/tough-cookie': 0.1.6
-      '@inquirer/confirm': 5.1.12(@types/node@24.0.3)
-      '@mswjs/interceptors': 0.39.2
+      '@inquirer/confirm': 5.1.8(@types/node@22.15.14)
+      '@mswjs/interceptors': 0.37.6
       '@open-draft/deferred-promise': 2.2.0
       '@open-draft/until': 2.1.0
       '@types/cookie': 0.6.0
-      '@types/statuses': 2.0.6
-      graphql: 16.11.0
+      '@types/statuses': 2.0.5
+      graphql: 16.10.0
       headers-polyfill: 4.0.3
       is-node-process: 1.2.0
       outvariant: 1.4.3
       path-to-regexp: 6.3.0
       picocolors: 1.1.1
       strict-event-emitter: 0.5.1
-      type-fest: 4.41.0
+      type-fest: 4.37.0
       yargs: 17.7.2
     optionalDependencies:
       typescript: 5.8.3
@@ -8311,12 +8749,14 @@ snapshots:
 
   natural-orderby@5.0.0: {}
 
+  negotiator@1.0.0: {}
+
   neo-async@2.6.2: {}
 
-  next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+  next-themes@0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
     dependencies:
-      react: 19.1.0
-      react-dom: 19.1.0(react@19.1.0)
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
 
   node-fetch-native@1.6.6: {}
 
@@ -8326,6 +8766,13 @@ snapshots:
 
   node-releases@2.0.19: {}
 
+  normalize-package-data@2.5.0:
+    dependencies:
+      hosted-git-info: 2.8.9
+      resolve: 1.22.10
+      semver: 5.7.2
+      validate-npm-package-license: 3.0.4
+
   normalize-path@3.0.0: {}
 
   nypm@0.5.4:
@@ -8375,6 +8822,14 @@ snapshots:
 
   ohash@1.1.6: {}
 
+  on-finished@2.4.1:
+    dependencies:
+      ee-first: 1.1.1
+
+  once@1.4.0:
+    dependencies:
+      wrappy: 1.0.2
+
   openapi-merge-cli@1.3.2:
     dependencies:
       ajv: 6.12.6
@@ -8409,14 +8864,24 @@ snapshots:
       object-keys: 1.1.1
       safe-push-apply: 1.0.0
 
+  p-limit@2.3.0:
+    dependencies:
+      p-try: 2.2.0
+
   p-limit@3.1.0:
     dependencies:
       yocto-queue: 0.1.0
 
+  p-locate@4.1.0:
+    dependencies:
+      p-limit: 2.3.0
+
   p-locate@5.0.0:
     dependencies:
       p-limit: 3.1.0
 
+  p-try@2.2.0: {}
+
   package-json-from-dist@1.0.1: {}
 
   parent-module@1.0.1:
@@ -8437,18 +8902,20 @@ snapshots:
       '@types/unist': 2.0.11
       character-entities-legacy: 3.0.0
       character-reference-invalid: 2.0.1
-      decode-named-character-reference: 1.2.0
+      decode-named-character-reference: 1.1.0
       is-alphanumerical: 2.0.1
       is-decimal: 2.0.1
       is-hexadecimal: 2.0.1
 
   parse-json@5.2.0:
     dependencies:
-      '@babel/code-frame': 7.27.1
+      '@babel/code-frame': 7.26.2
       error-ex: 1.3.2
       json-parse-even-better-errors: 2.3.1
       lines-and-columns: 1.2.4
 
+  parseurl@1.3.3: {}
+
   path-browserify@1.0.1: {}
 
   path-exists@4.0.0: {}
@@ -8469,6 +8936,8 @@ snapshots:
 
   path-to-regexp@6.3.0: {}
 
+  path-to-regexp@8.2.0: {}
+
   path-type@4.0.0: {}
 
   pathe@1.1.2: {}
@@ -8487,6 +8956,8 @@ snapshots:
 
   picomatch@4.0.2: {}
 
+  pkce-challenge@5.0.0: {}
+
   pkg-types@1.3.1:
     dependencies:
       confbox: 0.1.8
@@ -8497,7 +8968,7 @@ snapshots:
 
   possible-typed-array-names@1.1.0: {}
 
-  postcss@8.5.6:
+  postcss@8.5.3:
     dependencies:
       nanoid: 3.3.11
       picocolors: 1.1.1
@@ -8535,7 +9006,12 @@ snapshots:
     dependencies:
       xtend: 4.0.2
 
-  property-information@7.1.0: {}
+  property-information@7.0.0: {}
+
+  proxy-addr@2.0.7:
+    dependencies:
+      forwarded: 0.2.0
+      ipaddr.js: 1.9.1
 
   proxy-compare@3.0.1: {}
 
@@ -8553,10 +9029,23 @@ snapshots:
 
   pure-color@1.3.0: {}
 
+  qs@6.14.0:
+    dependencies:
+      side-channel: 1.1.0
+
   querystringify@2.2.0: {}
 
   queue-microtask@1.2.3: {}
 
+  range-parser@1.2.1: {}
+
+  raw-body@3.0.0:
+    dependencies:
+      bytes: 3.1.2
+      http-errors: 2.0.0
+      iconv-lite: 0.6.3
+      unpipe: 1.0.0
+
   rc9@2.1.2:
     dependencies:
       defu: 6.1.4
@@ -8569,145 +9058,159 @@ snapshots:
       lodash.flow: 3.5.0
       pure-color: 1.3.0
 
-  react-chartjs-2@5.3.0(chart.js@4.5.0)(react@19.1.0):
+  react-chartjs-2@5.3.0(chart.js@4.4.9)(react@18.3.1):
     dependencies:
-      chart.js: 4.5.0
-      react: 19.1.0
+      chart.js: 4.4.9
+      react: 18.3.1
 
-  react-dom@19.1.0(react@19.1.0):
+  react-dom@18.3.1(react@18.3.1):
     dependencies:
-      react: 19.1.0
-      scheduler: 0.26.0
+      loose-envify: 1.4.0
+      react: 18.3.1
+      scheduler: 0.23.2
 
-  react-hook-form@7.58.1(react@19.1.0):
+  react-hook-form@7.56.2(react@18.3.1):
     dependencies:
-      react: 19.1.0
+      react: 18.3.1
 
-  react-hotkeys-hook@5.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+  react-hotkeys-hook@4.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
     dependencies:
-      react: 19.1.0
-      react-dom: 19.1.0(react@19.1.0)
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
 
-  react-i18next@15.5.3(i18next@25.2.1(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3):
+  react-i18next@15.5.1(i18next@25.1.2(typescript@5.8.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3):
     dependencies:
-      '@babel/runtime': 7.27.6
+      '@babel/runtime': 7.26.10
       html-parse-stringify: 3.0.1
-      i18next: 25.2.1(typescript@5.8.3)
-      react: 19.1.0
+      i18next: 25.1.2(typescript@5.8.3)
+      react: 18.3.1
     optionalDependencies:
-      react-dom: 19.1.0(react@19.1.0)
+      react-dom: 18.3.1(react@18.3.1)
       typescript: 5.8.3
 
-  react-icons@5.5.0(react@19.1.0):
+  react-icons@5.5.0(react@18.3.1):
     dependencies:
-      react: 19.1.0
+      react: 18.3.1
 
-  react-innertext@1.1.5(@types/react@19.1.8)(react@19.1.0):
+  react-innertext@1.1.5(@types/react@18.3.19)(react@18.3.1):
     dependencies:
-      '@types/react': 19.1.8
-      react: 19.1.0
+      '@types/react': 18.3.19
+      react: 18.3.1
 
   react-is@16.13.1: {}
 
   react-is@17.0.2: {}
 
-  react-json-view@1.21.3(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+  react-json-view@1.21.3(@types/react@18.3.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
     dependencies:
-      flux: 4.0.4(react@19.1.0)
-      react: 19.1.0
+      flux: 4.0.4(react@18.3.1)
+      react: 18.3.1
       react-base16-styling: 0.6.0
-      react-dom: 19.1.0(react@19.1.0)
+      react-dom: 18.3.1(react@18.3.1)
       react-lifecycles-compat: 3.0.4
-      react-textarea-autosize: 8.5.8(@types/react@19.1.8)(react@19.1.0)
+      react-textarea-autosize: 8.5.8(@types/react@18.3.19)(react@18.3.1)
     transitivePeerDependencies:
       - '@types/react'
       - encoding
 
   react-lifecycles-compat@3.0.4: {}
 
-  react-markdown@10.1.0(@types/react@19.1.8)(react@19.1.0):
+  react-markdown@9.1.0(@types/react@18.3.19)(react@18.3.1):
     dependencies:
       '@types/hast': 3.0.4
       '@types/mdast': 4.0.4
-      '@types/react': 19.1.8
+      '@types/react': 18.3.19
       devlop: 1.1.0
       hast-util-to-jsx-runtime: 2.3.6
       html-url-attributes: 3.0.1
       mdast-util-to-hast: 13.2.0
-      react: 19.1.0
+      react: 18.3.1
       remark-parse: 11.0.0
-      remark-rehype: 11.1.2
+      remark-rehype: 11.1.1
       unified: 11.0.5
       unist-util-visit: 5.0.0
       vfile: 6.0.3
     transitivePeerDependencies:
       - supports-color
 
-  react-resizable-panels@3.0.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+  react-resizable-panels@2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
     dependencies:
-      react: 19.1.0
-      react-dom: 19.1.0(react@19.1.0)
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
 
-  react-router-dom@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+  react-router-dom@6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
     dependencies:
-      react: 19.1.0
-      react-dom: 19.1.0(react@19.1.0)
-      react-router: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+      '@remix-run/router': 1.23.0
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
+      react-router: 6.30.0(react@18.3.1)
 
-  react-router@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+  react-router@6.30.0(react@18.3.1):
     dependencies:
-      cookie: 1.0.2
-      react: 19.1.0
-      set-cookie-parser: 2.7.1
-    optionalDependencies:
-      react-dom: 19.1.0(react@19.1.0)
+      '@remix-run/router': 1.23.0
+      react: 18.3.1
 
-  react-select@5.10.1(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+  react-select@5.10.1(@types/react@18.3.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
     dependencies:
-      '@babel/runtime': 7.27.6
+      '@babel/runtime': 7.26.10
       '@emotion/cache': 11.14.0
-      '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0)
+      '@emotion/react': 11.14.0(@types/react@18.3.19)(react@18.3.1)
       '@floating-ui/dom': 1.6.13
-      '@types/react-transition-group': 4.4.12(@types/react@19.1.8)
+      '@types/react-transition-group': 4.4.12(@types/react@18.3.19)
       memoize-one: 6.0.0
       prop-types: 15.8.1
-      react: 19.1.0
-      react-dom: 19.1.0(react@19.1.0)
-      react-transition-group: 4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
-      use-isomorphic-layout-effect: 1.2.0(@types/react@19.1.8)(react@19.1.0)
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
+      react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      use-isomorphic-layout-effect: 1.2.0(@types/react@18.3.19)(react@18.3.1)
     transitivePeerDependencies:
       - '@types/react'
       - supports-color
 
-  react-syntax-highlighter@15.6.1(react@19.1.0):
+  react-syntax-highlighter@15.6.1(react@18.3.1):
     dependencies:
       '@babel/runtime': 7.26.10
       highlight.js: 10.7.3
       highlightjs-vue: 1.0.0
       lowlight: 1.20.0
       prismjs: 1.30.0
-      react: 19.1.0
+      react: 18.3.1
       refractor: 3.6.0
 
-  react-textarea-autosize@8.5.8(@types/react@19.1.8)(react@19.1.0):
+  react-textarea-autosize@8.5.8(@types/react@18.3.19)(react@18.3.1):
     dependencies:
-      '@babel/runtime': 7.27.6
-      react: 19.1.0
-      use-composed-ref: 1.4.0(@types/react@19.1.8)(react@19.1.0)
-      use-latest: 1.3.0(@types/react@19.1.8)(react@19.1.0)
+      '@babel/runtime': 7.26.10
+      react: 18.3.1
+      use-composed-ref: 1.4.0(@types/react@18.3.19)(react@18.3.1)
+      use-latest: 1.3.0(@types/react@18.3.19)(react@18.3.1)
     transitivePeerDependencies:
       - '@types/react'
 
-  react-transition-group@4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+  react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
     dependencies:
-      '@babel/runtime': 7.27.6
+      '@babel/runtime': 7.26.10
       dom-helpers: 5.2.1
       loose-envify: 1.4.0
       prop-types: 15.8.1
-      react: 19.1.0
-      react-dom: 19.1.0(react@19.1.0)
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
+
+  react@18.3.1:
+    dependencies:
+      loose-envify: 1.4.0
+
+  read-pkg-up@7.0.1:
+    dependencies:
+      find-up: 4.1.0
+      read-pkg: 5.2.0
+      type-fest: 0.8.1
 
-  react@19.1.0: {}
+  read-pkg@5.2.0:
+    dependencies:
+      '@types/normalize-package-data': 2.4.4
+      normalize-package-data: 2.5.0
+      parse-json: 5.2.0
+      type-fest: 0.6.0
 
   readdirp@3.6.0:
     dependencies:
@@ -8748,9 +9251,9 @@ snapshots:
       gopd: 1.2.0
       set-function-name: 2.0.2
 
-  regjsparser@0.12.0:
+  regjsparser@0.10.0:
     dependencies:
-      jsesc: 3.0.2
+      jsesc: 0.5.0
 
   remark-gfm@4.0.1:
     dependencies:
@@ -8772,7 +9275,7 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  remark-rehype@11.1.2:
+  remark-rehype@11.1.1:
     dependencies:
       '@types/hast': 3.0.4
       '@types/mdast': 4.0.4
@@ -8810,32 +9313,42 @@ snapshots:
 
   robust-predicates@3.0.2: {}
 
-  rollup@4.44.0:
+  rollup@4.40.1:
     dependencies:
-      '@types/estree': 1.0.8
+      '@types/estree': 1.0.7
     optionalDependencies:
-      '@rollup/rollup-android-arm-eabi': 4.44.0
-      '@rollup/rollup-android-arm64': 4.44.0
-      '@rollup/rollup-darwin-arm64': 4.44.0
-      '@rollup/rollup-darwin-x64': 4.44.0
-      '@rollup/rollup-freebsd-arm64': 4.44.0
-      '@rollup/rollup-freebsd-x64': 4.44.0
-      '@rollup/rollup-linux-arm-gnueabihf': 4.44.0
-      '@rollup/rollup-linux-arm-musleabihf': 4.44.0
-      '@rollup/rollup-linux-arm64-gnu': 4.44.0
-      '@rollup/rollup-linux-arm64-musl': 4.44.0
-      '@rollup/rollup-linux-loongarch64-gnu': 4.44.0
-      '@rollup/rollup-linux-powerpc64le-gnu': 4.44.0
-      '@rollup/rollup-linux-riscv64-gnu': 4.44.0
-      '@rollup/rollup-linux-riscv64-musl': 4.44.0
-      '@rollup/rollup-linux-s390x-gnu': 4.44.0
-      '@rollup/rollup-linux-x64-gnu': 4.44.0
-      '@rollup/rollup-linux-x64-musl': 4.44.0
-      '@rollup/rollup-win32-arm64-msvc': 4.44.0
-      '@rollup/rollup-win32-ia32-msvc': 4.44.0
-      '@rollup/rollup-win32-x64-msvc': 4.44.0
+      '@rollup/rollup-android-arm-eabi': 4.40.1
+      '@rollup/rollup-android-arm64': 4.40.1
+      '@rollup/rollup-darwin-arm64': 4.40.1
+      '@rollup/rollup-darwin-x64': 4.40.1
+      '@rollup/rollup-freebsd-arm64': 4.40.1
+      '@rollup/rollup-freebsd-x64': 4.40.1
+      '@rollup/rollup-linux-arm-gnueabihf': 4.40.1
+      '@rollup/rollup-linux-arm-musleabihf': 4.40.1
+      '@rollup/rollup-linux-arm64-gnu': 4.40.1
+      '@rollup/rollup-linux-arm64-musl': 4.40.1
+      '@rollup/rollup-linux-loongarch64-gnu': 4.40.1
+      '@rollup/rollup-linux-powerpc64le-gnu': 4.40.1
+      '@rollup/rollup-linux-riscv64-gnu': 4.40.1
+      '@rollup/rollup-linux-riscv64-musl': 4.40.1
+      '@rollup/rollup-linux-s390x-gnu': 4.40.1
+      '@rollup/rollup-linux-x64-gnu': 4.40.1
+      '@rollup/rollup-linux-x64-musl': 4.40.1
+      '@rollup/rollup-win32-arm64-msvc': 4.40.1
+      '@rollup/rollup-win32-ia32-msvc': 4.40.1
+      '@rollup/rollup-win32-x64-msvc': 4.40.1
       fsevents: 2.3.3
 
+  router@2.2.0:
+    dependencies:
+      debug: 4.4.0
+      depd: 2.0.0
+      is-promise: 4.0.0
+      parseurl: 1.3.3
+      path-to-regexp: 8.2.0
+    transitivePeerDependencies:
+      - supports-color
+
   run-parallel@1.2.0:
     dependencies:
       queue-microtask: 1.2.3
@@ -8848,6 +9361,8 @@ snapshots:
       has-symbols: 1.1.0
       isarray: 2.0.5
 
+  safe-buffer@5.2.1: {}
+
   safe-push-apply@1.0.0:
     dependencies:
       es-errors: 1.3.0
@@ -8859,15 +9374,42 @@ snapshots:
       es-errors: 1.3.0
       is-regex: 1.2.1
 
-  scheduler@0.26.0: {}
+  safer-buffer@2.1.2: {}
+
+  scheduler@0.23.2:
+    dependencies:
+      loose-envify: 1.4.0
+
+  semver@5.7.2: {}
 
   semver@6.3.1: {}
 
   semver@7.7.1: {}
 
-  semver@7.7.2: {}
+  send@1.2.0:
+    dependencies:
+      debug: 4.4.0
+      encodeurl: 2.0.0
+      escape-html: 1.0.3
+      etag: 1.8.1
+      fresh: 2.0.0
+      http-errors: 2.0.0
+      mime-types: 3.0.1
+      ms: 2.1.3
+      on-finished: 2.4.1
+      range-parser: 1.2.1
+      statuses: 2.0.1
+    transitivePeerDependencies:
+      - supports-color
 
-  set-cookie-parser@2.7.1: {}
+  serve-static@2.2.0:
+    dependencies:
+      encodeurl: 2.0.0
+      escape-html: 1.0.3
+      parseurl: 1.3.3
+      send: 1.2.0
+    transitivePeerDependencies:
+      - supports-color
 
   set-function-length@1.2.2:
     dependencies:
@@ -8893,6 +9435,8 @@ snapshots:
 
   setimmediate@1.0.5: {}
 
+  setprototypeof@1.2.0: {}
+
   shebang-command@2.0.0:
     dependencies:
       shebang-regex: 3.0.0
@@ -8941,13 +9485,27 @@ snapshots:
 
   space-separated-tokens@2.0.2: {}
 
+  spdx-correct@3.2.0:
+    dependencies:
+      spdx-expression-parse: 3.0.1
+      spdx-license-ids: 3.0.21
+
+  spdx-exceptions@2.5.0: {}
+
+  spdx-expression-parse@3.0.1:
+    dependencies:
+      spdx-exceptions: 2.5.0
+      spdx-license-ids: 3.0.21
+
+  spdx-license-ids@3.0.21: {}
+
   sprintf-js@1.0.3: {}
 
   stackback@0.0.2: {}
 
-  statuses@2.0.2: {}
+  statuses@2.0.1: {}
 
-  std-env@3.9.0: {}
+  std-env@3.8.1: {}
 
   strict-event-emitter@0.5.1: {}
 
@@ -9030,23 +9588,15 @@ snapshots:
     dependencies:
       min-indent: 1.0.1
 
-  strip-indent@4.0.0:
-    dependencies:
-      min-indent: 1.0.1
-
   strip-json-comments@3.1.1: {}
 
-  strip-literal@3.0.0:
-    dependencies:
-      js-tokens: 9.0.1
-
   style-mod@4.1.2: {}
 
-  style-to-js@1.1.17:
+  style-to-js@1.1.16:
     dependencies:
-      style-to-object: 1.0.9
+      style-to-object: 1.0.8
 
-  style-to-object@1.0.9:
+  style-to-object@1.0.8:
     dependencies:
       inline-style-parser: 0.2.4
 
@@ -9058,9 +9608,10 @@ snapshots:
 
   supports-preserve-symlinks-flag@1.0.0: {}
 
-  synckit@0.11.8:
+  synckit@0.11.4:
     dependencies:
-      '@pkgr/core': 0.2.7
+      '@pkgr/core': 0.2.4
+      tslib: 2.8.1
 
   tar@6.2.1:
     dependencies:
@@ -9081,21 +9632,20 @@ snapshots:
 
   tinyexec@0.3.2: {}
 
-  tinyglobby@0.2.14:
-    dependencies:
-      fdir: 6.4.6(picomatch@4.0.2)
-      picomatch: 4.0.2
+  tinypool@1.0.2: {}
 
-  tinypool@1.1.1: {}
+  tinyrainbow@1.2.0: {}
 
-  tinyrainbow@2.0.0: {}
+  tinyspy@3.0.2: {}
 
-  tinyspy@4.0.3: {}
+  to-fast-properties@2.0.0: {}
 
   to-regex-range@5.0.1:
     dependencies:
       is-number: 7.0.0
 
+  toidentifier@1.0.1: {}
+
   tough-cookie@4.1.4:
     dependencies:
       psl: 1.15.0
@@ -9128,7 +9678,17 @@ snapshots:
 
   type-fest@0.21.3: {}
 
-  type-fest@4.41.0: {}
+  type-fest@0.6.0: {}
+
+  type-fest@0.8.1: {}
+
+  type-fest@4.37.0: {}
+
+  type-is@2.0.1:
+    dependencies:
+      content-type: 1.0.5
+      media-typer: 1.1.0
+      mime-types: 3.0.1
 
   typed-array-buffer@1.0.3:
     dependencies:
@@ -9163,12 +9723,12 @@ snapshots:
       possible-typed-array-names: 1.1.0
       reflect.getprototypeof: 1.0.10
 
-  typescript-eslint@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3):
+  typescript-eslint@8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3):
     dependencies:
-      '@typescript-eslint/eslint-plugin': 8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
-      '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
-      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
-      eslint: 9.29.0(jiti@1.21.7)
+      '@typescript-eslint/eslint-plugin': 8.32.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
+      '@typescript-eslint/parser': 8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
+      '@typescript-eslint/utils': 8.32.0(eslint@9.26.0(jiti@1.21.7))(typescript@5.8.3)
+      eslint: 9.26.0(jiti@1.21.7)
       typescript: 5.8.3
     transitivePeerDependencies:
       - supports-color
@@ -9191,8 +9751,6 @@ snapshots:
 
   undici-types@6.21.0: {}
 
-  undici-types@7.8.0: {}
-
   unified@11.0.5:
     dependencies:
       '@types/unist': 3.0.3
@@ -9228,9 +9786,11 @@ snapshots:
 
   universalify@0.2.0: {}
 
-  update-browserslist-db@1.1.3(browserslist@4.25.0):
+  unpipe@1.0.0: {}
+
+  update-browserslist-db@1.1.3(browserslist@4.24.4):
     dependencies:
-      browserslist: 4.25.0
+      browserslist: 4.24.4
       escalade: 3.2.0
       picocolors: 1.1.1
 
@@ -9247,37 +9807,44 @@ snapshots:
       querystringify: 2.2.0
       requires-port: 1.0.0
 
-  use-composed-ref@1.4.0(@types/react@19.1.8)(react@19.1.0):
+  use-composed-ref@1.4.0(@types/react@18.3.19)(react@18.3.1):
     dependencies:
-      react: 19.1.0
+      react: 18.3.1
     optionalDependencies:
-      '@types/react': 19.1.8
+      '@types/react': 18.3.19
 
-  use-debounce@10.0.5(react@19.1.0):
+  use-debounce@10.0.4(react@18.3.1):
     dependencies:
-      react: 19.1.0
+      react: 18.3.1
 
-  use-isomorphic-layout-effect@1.2.0(@types/react@19.1.8)(react@19.1.0):
+  use-isomorphic-layout-effect@1.2.0(@types/react@18.3.19)(react@18.3.1):
     dependencies:
-      react: 19.1.0
+      react: 18.3.1
     optionalDependencies:
-      '@types/react': 19.1.8
+      '@types/react': 18.3.19
 
-  use-latest@1.3.0(@types/react@19.1.8)(react@19.1.0):
+  use-latest@1.3.0(@types/react@18.3.19)(react@18.3.1):
     dependencies:
-      react: 19.1.0
-      use-isomorphic-layout-effect: 1.2.0(@types/react@19.1.8)(react@19.1.0)
+      react: 18.3.1
+      use-isomorphic-layout-effect: 1.2.0(@types/react@18.3.19)(react@18.3.1)
     optionalDependencies:
-      '@types/react': 19.1.8
+      '@types/react': 18.3.19
 
-  use-sync-external-store@1.5.0(react@19.1.0):
+  use-sync-external-store@1.4.0(react@18.3.1):
     dependencies:
-      react: 19.1.0
+      react: 18.3.1
 
-  usehooks-ts@3.1.1(react@19.1.0):
+  usehooks-ts@3.1.1(react@18.3.1):
     dependencies:
       lodash.debounce: 4.0.8
-      react: 19.1.0
+      react: 18.3.1
+
+  validate-npm-package-license@3.0.4:
+    dependencies:
+      spdx-correct: 3.2.0
+      spdx-expression-parse: 3.0.1
+
+  vary@1.1.2: {}
 
   vfile-message@4.0.2:
     dependencies:
@@ -9289,16 +9856,15 @@ snapshots:
       '@types/unist': 3.0.3
       vfile-message: 4.0.2
 
-  vite-node@3.2.4(@types/node@24.0.3)(jiti@1.21.7):
+  vite-node@2.1.9(@types/node@22.15.14):
     dependencies:
       cac: 6.7.14
-      debug: 4.4.1
-      es-module-lexer: 1.7.0
-      pathe: 2.0.3
-      vite: 6.3.5(@types/node@24.0.3)(jiti@1.21.7)
+      debug: 4.4.0
+      es-module-lexer: 1.6.0
+      pathe: 1.1.2
+      vite: 5.4.19(@types/node@22.15.14)
     transitivePeerDependencies:
       - '@types/node'
-      - jiti
       - less
       - lightningcss
       - sass
@@ -9307,57 +9873,46 @@ snapshots:
       - sugarss
       - supports-color
       - terser
-      - tsx
-      - yaml
 
-  vite-plugin-css-injected-by-js@3.5.2(vite@6.3.5(@types/node@24.0.3)(jiti@1.21.7)):
+  vite-plugin-css-injected-by-js@3.5.2(vite@5.4.19(@types/node@22.15.14)):
     dependencies:
-      vite: 6.3.5(@types/node@24.0.3)(jiti@1.21.7)
+      vite: 5.4.19(@types/node@22.15.14)
 
-  vite@6.3.5(@types/node@24.0.3)(jiti@1.21.7):
+  vite@5.4.19(@types/node@22.15.14):
     dependencies:
-      esbuild: 0.25.5
-      fdir: 6.4.6(picomatch@4.0.2)
-      picomatch: 4.0.2
-      postcss: 8.5.6
-      rollup: 4.44.0
-      tinyglobby: 0.2.14
+      esbuild: 0.21.5
+      postcss: 8.5.3
+      rollup: 4.40.1
     optionalDependencies:
-      '@types/node': 24.0.3
+      '@types/node': 22.15.14
       fsevents: 2.3.3
-      jiti: 1.21.7
 
-  vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.3)(happy-dom@18.0.1)(jiti@1.21.7)(msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3)):
+  vitest@2.1.9(@types/node@22.15.14)(happy-dom@17.4.6)(msw@2.7.6(@types/node@22.15.14)(typescript@5.8.3)):
     dependencies:
-      '@types/chai': 5.2.2
-      '@vitest/expect': 3.2.4
-      '@vitest/mocker': 3.2.4(msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3))(vite@6.3.5(@types/node@24.0.3)(jiti@1.21.7))
-      '@vitest/pretty-format': 3.2.4
-      '@vitest/runner': 3.2.4
-      '@vitest/snapshot': 3.2.4
-      '@vitest/spy': 3.2.4
-      '@vitest/utils': 3.2.4
+      '@vitest/expect': 2.1.9
+      '@vitest/mocker': 2.1.9(msw@2.7.6(@types/node@22.15.14)(typescript@5.8.3))(vite@5.4.19(@types/node@22.15.14))
+      '@vitest/pretty-format': 2.1.9
+      '@vitest/runner': 2.1.9
+      '@vitest/snapshot': 2.1.9
+      '@vitest/spy': 2.1.9
+      '@vitest/utils': 2.1.9
       chai: 5.2.0
-      debug: 4.4.1
-      expect-type: 1.2.1
+      debug: 4.4.0
+      expect-type: 1.2.0
       magic-string: 0.30.17
-      pathe: 2.0.3
-      picomatch: 4.0.2
-      std-env: 3.9.0
+      pathe: 1.1.2
+      std-env: 3.8.1
       tinybench: 2.9.0
       tinyexec: 0.3.2
-      tinyglobby: 0.2.14
-      tinypool: 1.1.1
-      tinyrainbow: 2.0.0
-      vite: 6.3.5(@types/node@24.0.3)(jiti@1.21.7)
-      vite-node: 3.2.4(@types/node@24.0.3)(jiti@1.21.7)
+      tinypool: 1.0.2
+      tinyrainbow: 1.2.0
+      vite: 5.4.19(@types/node@22.15.14)
+      vite-node: 2.1.9(@types/node@22.15.14)
       why-is-node-running: 2.3.0
     optionalDependencies:
-      '@types/debug': 4.1.12
-      '@types/node': 24.0.3
-      happy-dom: 18.0.1
+      '@types/node': 22.15.14
+      happy-dom: 17.4.6
     transitivePeerDependencies:
-      - jiti
       - less
       - lightningcss
       - msw
@@ -9367,8 +9922,6 @@ snapshots:
       - sugarss
       - supports-color
       - terser
-      - tsx
-      - yaml
 
   void-elements@3.1.0: {}
 
@@ -9378,6 +9931,8 @@ snapshots:
 
   webidl-conversions@3.0.1: {}
 
+  webidl-conversions@7.0.0: {}
+
   whatwg-fetch@3.6.20: {}
 
   whatwg-mimetype@3.0.0: {}
@@ -9459,6 +10014,8 @@ snapshots:
       string-width: 5.1.2
       strip-ansi: 7.1.0
 
+  wrappy@1.0.2: {}
+
   xtend@4.0.2: {}
 
   y18n@5.0.8: {}
@@ -9483,17 +10040,23 @@ snapshots:
 
   yoctocolors-cjs@2.1.2: {}
 
-  zustand@4.5.7(@types/react@19.1.8)(react@19.1.0):
+  zod-to-json-schema@3.24.5(zod@3.24.4):
+    dependencies:
+      zod: 3.24.4
+
+  zod@3.24.4: {}
+
+  zustand@4.5.6(@types/react@18.3.19)(react@18.3.1):
     dependencies:
-      use-sync-external-store: 1.5.0(react@19.1.0)
+      use-sync-external-store: 1.4.0(react@18.3.1)
     optionalDependencies:
-      '@types/react': 19.1.8
-      react: 19.1.0
+      '@types/react': 18.3.19
+      react: 18.3.1
 
-  zustand@5.0.5(@types/react@19.1.8)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0)):
+  zustand@5.0.4(@types/react@18.3.19)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)):
     optionalDependencies:
-      '@types/react': 19.1.8
-      react: 19.1.0
-      use-sync-external-store: 1.5.0(react@19.1.0)
+      '@types/react': 18.3.19
+      react: 18.3.1
+      use-sync-external-store: 1.4.0(react@18.3.1)
 
   zwitch@2.0.4: {}

From 294cd86e5b42457e135e6c1be045badc45514329 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sun, 22 Jun 2025 09:08:01 +0200
Subject: [PATCH 035/381] When UI files change in PR we build CI image / run
 all static checks (#52009)

Previously when only UI files changed (for example when dependabot
bumped UI dependencies), the CI image was not built and only
basic static checks were run - which did not show error when
dependency upgrade caused different results when compiling ui assets
---
 dev/breeze/src/airflow_breeze/utils/selective_checks.py | 1 +
 dev/breeze/tests/test_selective_checks.py               | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/dev/breeze/src/airflow_breeze/utils/selective_checks.py b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
index 45a3549984a30..0393d39d49b52 100644
--- a/dev/breeze/src/airflow_breeze/utils/selective_checks.py
+++ b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
@@ -834,6 +834,7 @@ def ci_image_build(self) -> bool:
             or self.docs_build
             or self.run_kubernetes_tests
             or self.needs_helm_tests
+            or self.run_ui_tests
             or self.pyproject_toml_changed
             or self.any_provider_yaml_or_pyproject_toml_changed
         )
diff --git a/dev/breeze/tests/test_selective_checks.py b/dev/breeze/tests/test_selective_checks.py
index e2bb068aa8694..9b67138a9a707 100644
--- a/dev/breeze/tests/test_selective_checks.py
+++ b/dev/breeze/tests/test_selective_checks.py
@@ -1167,7 +1167,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                     "all-python-versions-list-as-string": DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
                     "python-versions": f"['{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}']",
                     "python-versions-list-as-string": DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
-                    "ci-image-build": "false",
+                    "ci-image-build": "true",
                     "prod-image-build": "false",
                     "needs-helm-tests": "false",
                     "run-tests": "false",

From 27f772733872df91e36adb45afbeb1919863e05b Mon Sep 17 00:00:00 2001
From: Lucas Roesler <roesler.lucas@gmail.com>
Date: Sun, 22 Jun 2025 09:43:41 +0200
Subject: [PATCH 036/381] fix: allow configmap and secret references in the
 apiServer.env field (#51191)

* fix: allow configmap and secret env references in the API server

The Helm schema validation for `apiServer.env` should allow specifying
static values, values from ConfigMaps, and values from Secrets, the same
as all of the other services.

Update the values.schema.json so that the apiServer env schema matches
the schema from the other services, e.g. the schema for webserver.

Resolves https://github.com/apache/airflow/issues/51190

Signed-off-by: Lucas Roesler <roesler.lucas@gmail.com>

* chore: extend extraEnvs unit test for the api server deployment

Signed-off-by: Lucas Roesler <roesler.lucas@gmail.com>

* Update chart/values.schema.json

* Update helm-tests/tests/helm_tests/airflow_core/test_api_server.py

---------

Signed-off-by: Lucas Roesler <roesler.lucas@gmail.com>
Co-authored-by: rom sharon <33751805+romsharon98@users.noreply.github.com>
---
 chart/values.schema.json                      | 40 ++++++++++++++++++-
 .../airflow_core/test_api_server.py           | 25 ++++++++++--
 2 files changed, 59 insertions(+), 6 deletions(-)

diff --git a/chart/values.schema.json b/chart/values.schema.json
index 9636d3a07e566..2795a342a93c3 100644
--- a/chart/values.schema.json
+++ b/chart/values.schema.json
@@ -5454,11 +5454,47 @@
                             },
                             "value": {
                                 "type": "string"
+                            },
+                            "valueFrom": {
+                                "type": "object",
+                                "properties": {
+                                    "configMapKeyRef": {
+                                        "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMapKeySelector",
+                                        "description": "Selects a key of a ConfigMap."
+                                    },
+                                    "secretKeyRef": {
+                                        "$ref": "#/definitions/io.k8s.api.core.v1.SecretKeySelector",
+                                        "description": "Selects a key of a secret in the pod's namespace"
+                                    }
+                                },
+                                "anyOf": [
+                                    {
+                                        "required": [
+                                            "configMapKeyRef"
+                                        ]
+                                    },
+                                    {
+                                        "required": [
+                                            "secretKeyRef"
+                                        ]
+                                    }
+                                ]
                             }
                         },
                         "required": [
-                            "name",
-                            "value"
+                            "name"
+                        ],
+                        "anyOf": [
+                            {
+                                "required": [
+                                    "value"
+                                ]
+                            },
+                            {
+                                "required": [
+                                    "valueFrom"
+                                ]
+                            }
                         ],
                         "additionalProperties": false
                     }
diff --git a/helm-tests/tests/helm_tests/airflow_core/test_api_server.py b/helm-tests/tests/helm_tests/airflow_core/test_api_server.py
index 97b3b64690e23..77bf475b6b739 100644
--- a/helm-tests/tests/helm_tests/airflow_core/test_api_server.py
+++ b/helm-tests/tests/helm_tests/airflow_core/test_api_server.py
@@ -94,15 +94,32 @@ def test_should_add_extraEnvs(self):
         docs = render_chart(
             values={
                 "apiServer": {
-                    "env": [{"name": "TEST_ENV_1", "value": "test_env_1"}],
+                    "env": [
+                        {"name": "TEST_ENV_1", "value": "test_env_1"},
+                        {
+                            "name": "TEST_ENV_2",
+                            "valueFrom": {"configMapKeyRef": {"name": "test-config", "key": "test-key"}},
+                        },
+                        {
+                            "name": "TEST_ENV_3",
+                            "valueFrom": {"secretKeyRef": {"name": "test-secret", "key": "test-key"}},
+                        },
+                    ],
                 },
             },
             show_only=["templates/api-server/api-server-deployment.yaml"],
         )
 
-        assert {"name": "TEST_ENV_1", "value": "test_env_1"} in jmespath.search(
-            "spec.template.spec.containers[0].env", docs[0]
-        )
+        env_result = jmespath.search("spec.template.spec.containers[0].env", docs[0])
+        assert {"name": "TEST_ENV_1", "value": "test_env_1"} in env_result
+        assert {
+            "name": "TEST_ENV_2",
+            "valueFrom": {"configMapKeyRef": {"name": "test-config", "key": "test-key"}},
+        } in env_result
+        assert {
+            "name": "TEST_ENV_3",
+            "valueFrom": {"secretKeyRef": {"name": "test-secret", "key": "test-key"}},
+        } in env_result
 
     def test_should_add_extra_volume_and_extra_volume_mount(self):
         docs = render_chart(

From 4114c7e42f23bf4e0070d27cb98bd8accbe2e87b Mon Sep 17 00:00:00 2001
From: roach231428 <roach231428@users.noreply.github.com>
Date: Sun, 22 Jun 2025 16:20:05 +0800
Subject: [PATCH 037/381] Fix HDFS remote_base to use path for compatibility
 with hdfs client (#50804)

* Fix: use relative HDFS path instead of full URL for remote_base

* fix: correct mistakenly edited block in remote base log provider
---
 .../src/airflow/config_templates/airflow_local_settings.py      | 2 +-
 .../src/airflow/providers/apache/hdfs/log/hdfs_task_handler.py  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/airflow-core/src/airflow/config_templates/airflow_local_settings.py b/airflow-core/src/airflow/config_templates/airflow_local_settings.py
index 3cade5678261c..cb1cc364e2ca6 100644
--- a/airflow-core/src/airflow/config_templates/airflow_local_settings.py
+++ b/airflow-core/src/airflow/config_templates/airflow_local_settings.py
@@ -250,7 +250,7 @@
             **(
                 {
                     "base_log_folder": BASE_LOG_FOLDER,
-                    "remote_base": remote_base_log_folder,
+                    "remote_base": urlsplit(remote_base_log_folder).path,
                     "delete_local_copy": delete_local_copy,
                 }
                 | remote_task_handler_kwargs
diff --git a/providers/apache/hdfs/src/airflow/providers/apache/hdfs/log/hdfs_task_handler.py b/providers/apache/hdfs/src/airflow/providers/apache/hdfs/log/hdfs_task_handler.py
index 4de610203416c..b0b89aad6c70c 100644
--- a/providers/apache/hdfs/src/airflow/providers/apache/hdfs/log/hdfs_task_handler.py
+++ b/providers/apache/hdfs/src/airflow/providers/apache/hdfs/log/hdfs_task_handler.py
@@ -94,7 +94,7 @@ def __init__(self, base_log_folder: str, hdfs_log_folder: str, **kwargs):
         self.upload_on_close = True
 
         self.io = HdfsRemoteLogIO(
-            remote_base=hdfs_log_folder,
+            remote_base=self.remote_base,
             base_log_folder=base_log_folder,
             delete_local_copy=kwargs.get(
                 "delete_local_copy", conf.getboolean("logging", "delete_local_logs")

From 8e21e7c9d1f5ad46a34f3b0a22e978066765b779 Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Sun, 22 Jun 2025 14:02:50 +0530
Subject: [PATCH 038/381] Introducing fixture to create `Connections` without
 DB in provider tests (#51930)

* Adding a fixture for creating connections

* changing the simpler occurences

* using env backend

* some more occurences, covers all setup_method mostly

* incremental update

* another incremental update

* fixing kafka integration tests

* fixing git provider tests

* fixing smtp provider tests

* attempt 1: fixing telegram tests

* reverting changes to telegram provider

* trying to use as_json instead
---
 .../src/tests_common/pytest_plugin.py         |  17 +++
 .../tests/unit/airbyte/hooks/test_airbyte.py  |   8 +-
 .../unit/airbyte/operators/test_airbyte.py    |   9 +-
 .../unit/airbyte/sensors/test_airbyte.py      |   6 +-
 .../unit/airbyte/triggers/test_airbyte.py     |   8 +-
 .../tests/unit/amazon/aws/hooks/test_chime.py |   8 +-
 .../amazon/aws/notifications/test_chime.py    |   6 +-
 .../aws/transfers/test_google_api_to_s3.py    |   8 +-
 .../amazon/aws/transfers/test_s3_to_sql.py    |   8 +-
 .../apache/cassandra/hooks/test_cassandra.py  |   8 +-
 .../flink/operators/test_flink_kubernetes.py  |   9 +-
 .../flink/sensors/test_flink_kubernetes.py    |  13 +-
 .../apache/kafka/hooks/test_admin_client.py   |   6 +-
 .../apache/kafka/hooks/test_consumer.py       |   6 +-
 .../apache/kafka/hooks/test_producer.py       |   6 +-
 .../apache/kafka/operators/test_consume.py    |  33 ++---
 .../apache/kafka/operators/test_produce.py    |  19 ++-
 .../kafka/triggers/test_await_message.py      |  33 +++--
 .../unit/apache/kafka/hooks/test_client.py    |   8 +-
 .../unit/apache/kafka/hooks/test_consume.py   |   8 +-
 .../unit/apache/kafka/hooks/test_produce.py   |   8 +-
 .../apache/kafka/operators/test_consume.py    |   6 +-
 .../apache/kafka/operators/test_produce.py    |   6 +-
 .../unit/apache/kafka/sensors/test_kafka.py   |   6 +-
 .../kafka/triggers/test_await_message.py      |   6 +-
 .../apache/kafka/triggers/test_msg_queue.py   |   8 +-
 .../tests/unit/apache/livy/hooks/test_livy.py |  57 ++++----
 .../unit/apache/livy/operators/test_livy.py   |   7 +-
 .../unit/apache/livy/sensors/test_livy.py     |   9 +-
 .../apache/spark/decorators/test_pyspark.py   |  11 +-
 .../apache/spark/hooks/test_spark_connect.py  |  10 +-
 .../apache/spark/hooks/test_spark_jdbc.py     |  14 +-
 .../unit/apache/spark/hooks/test_spark_sql.py |   8 +-
 .../apache/spark/hooks/test_spark_submit.py   |  28 ++--
 .../unit/arangodb/hooks/test_arangodb.py      |   6 +-
 .../unit/arangodb/sensors/test_arangodb.py    |   7 +-
 .../unit/asana/operators/test_asana_tasks.py  |   7 +-
 .../cncf/kubernetes/hooks/test_kubernetes.py  |  18 ++-
 .../operators/test_spark_kubernetes.py        |  16 ++-
 .../sensors/test_spark_kubernetes.py          |  11 +-
 .../unit/datadog/sensors/test_datadog.py      |   6 +-
 .../tests/unit/dbt/cloud/hooks/test_dbt.py    |  14 +-
 .../unit/dbt/cloud/operators/test_dbt.py      |  10 +-
 .../tests/unit/dbt/cloud/sensors/test_dbt.py  |  17 +--
 .../unit/dingding/hooks/test_dingding.py      |   6 +-
 .../discord/hooks/test_discord_webhook.py     |   6 +-
 .../discord/notifications/test_discord.py     |   5 +-
 .../ftp/tests/unit/ftp/hooks/test_ftp.py      |  12 +-
 .../git/tests/unit/git/bundles/test_git.py    |  16 ++-
 .../git/tests/unit/git/hooks/test_git.py      |  22 ++--
 .../tests/unit/github/hooks/test_github.py    |   7 +-
 .../unit/github/operators/test_github.py      |  16 ++-
 .../tests/unit/github/sensors/test_github.py  |  16 ++-
 .../google/common/hooks/test_discovery_api.py |  10 +-
 .../imap/tests/unit/imap/hooks/test_imap.py   |  14 +-
 .../jdbc/tests/unit/jdbc/hooks/test_jdbc.py   |   6 +-
 .../unit/mysql/transfers/test_s3_to_mysql.py  |   8 +-
 .../tests/unit/opensearch/conftest.py         |   6 +-
 .../unit/opsgenie/hooks/test_opsgenie.py      |  10 +-
 .../unit/pagerduty/hooks/test_pagerduty.py    |   9 +-
 .../pagerduty/hooks/test_pagerduty_events.py  |   9 +-
 .../smtp/tests/unit/smtp/hooks/test_smtp.py   |  30 +++--
 .../ssh/tests/unit/ssh/hooks/test_ssh.py      | 124 +++++++-----------
 .../tests/unit/tableau/hooks/test_tableau.py  |  12 +-
 .../unit/telegram/hooks/test_telegram.py      |   2 +-
 .../unit/telegram/operators/test_telegram.py  |   8 +-
 .../tests/unit/zendesk/hooks/test_zendesk.py  |   5 +-
 67 files changed, 466 insertions(+), 416 deletions(-)

diff --git a/devel-common/src/tests_common/pytest_plugin.py b/devel-common/src/tests_common/pytest_plugin.py
index be88afa90be38..242723bad583e 100644
--- a/devel-common/src/tests_common/pytest_plugin.py
+++ b/devel-common/src/tests_common/pytest_plugin.py
@@ -2491,3 +2491,20 @@ def testing_dag_bundle():
         if session.query(DagBundleModel).filter(DagBundleModel.name == "testing").count() == 0:
             testing = DagBundleModel(name="testing")
             session.add(testing)
+
+
+@pytest.fixture
+def create_connection_without_db(monkeypatch):
+    """
+    Fixture to create connections for tests without using the database.
+
+    This fixture uses monkeypatch to set the appropriate AIRFLOW_CONN_{conn_id} environment variable.
+    """
+
+    def _create_conn(connection, session=None):
+        """Create connection using environment variable."""
+
+        env_var_name = f"AIRFLOW_CONN_{connection.conn_id.upper()}"
+        monkeypatch.setenv(env_var_name, connection.as_json())
+
+    return _create_conn
diff --git a/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py b/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py
index afbbee65f10c4..1672a373bc8b7 100644
--- a/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py
+++ b/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py
@@ -26,7 +26,6 @@
 from airflow.exceptions import AirflowException
 from airflow.models import Connection
 from airflow.providers.airbyte.hooks.airbyte import AirbyteHook
-from airflow.utils import db
 
 # those tests will not work with database isolation because they mock requests
 pytestmark = pytest.mark.db_test
@@ -55,8 +54,9 @@ class TestAirbyteHook:
     _mock_job_status_success_response_body = {"job": {"status": "succeeded"}}
     _mock_job_cancel_status = "cancelled"
 
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id=self.airbyte_conn_id,
                 conn_type=self.conn_type,
@@ -64,7 +64,7 @@ def setup_method(self):
                 port=self.port,
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id=self.airbyte_conn_id_with_proxy,
                 conn_type=self.conn_type,
diff --git a/providers/airbyte/tests/unit/airbyte/operators/test_airbyte.py b/providers/airbyte/tests/unit/airbyte/operators/test_airbyte.py
index f13cf2fa30c68..b7d6e9f6bdb35 100644
--- a/providers/airbyte/tests/unit/airbyte/operators/test_airbyte.py
+++ b/providers/airbyte/tests/unit/airbyte/operators/test_airbyte.py
@@ -24,7 +24,6 @@
 
 from airflow.models import Connection
 from airflow.providers.airbyte.operators.airbyte import AirbyteTriggerSyncOperator
-from airflow.utils import db
 
 
 @pytest.mark.db_test
@@ -41,9 +40,9 @@ class TestAirbyteTriggerSyncOp:
 
     @mock.patch("airbyte_api.jobs.Jobs.create_job")
     @mock.patch("airflow.providers.airbyte.hooks.airbyte.AirbyteHook.wait_for_job", return_value=None)
-    def test_execute(self, mock_wait_for_job, mock_submit_sync_connection):
+    def test_execute(self, mock_wait_for_job, mock_submit_sync_connection, create_connection_without_db):
         conn = Connection(conn_id=self.airbyte_conn_id, conn_type="airbyte", host="airbyte.com")
-        db.merge_conn(conn)
+        create_connection_without_db(conn)
         mock_response = mock.Mock()
         mock_response.job_response = JobResponse(
             connection_id="connection-mock",
@@ -71,9 +70,9 @@ def test_execute(self, mock_wait_for_job, mock_submit_sync_connection):
         )
 
     @mock.patch("airflow.providers.airbyte.hooks.airbyte.AirbyteHook.cancel_job")
-    def test_on_kill(self, mock_cancel_job):
+    def test_on_kill(self, mock_cancel_job, create_connection_without_db):
         conn = Connection(conn_id=self.airbyte_conn_id, conn_type="airbyte", host="airbyte.com")
-        db.merge_conn(conn)
+        create_connection_without_db(conn)
 
         op = AirbyteTriggerSyncOperator(
             task_id="test_Airbyte_op",
diff --git a/providers/airbyte/tests/unit/airbyte/sensors/test_airbyte.py b/providers/airbyte/tests/unit/airbyte/sensors/test_airbyte.py
index aefa0b568b327..bae1d7c2bc9a2 100644
--- a/providers/airbyte/tests/unit/airbyte/sensors/test_airbyte.py
+++ b/providers/airbyte/tests/unit/airbyte/sensors/test_airbyte.py
@@ -25,7 +25,6 @@
 from airflow.exceptions import AirflowException
 from airflow.models import Connection
 from airflow.providers.airbyte.sensors.airbyte import AirbyteJobSensor
-from airflow.utils import db
 
 
 @pytest.mark.db_test
@@ -46,8 +45,9 @@ def get_job(self, status):
         )
         return response
 
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(conn_id=self.airbyte_conn_id, conn_type="airbyte", host="http://test-airbyte")
         )
 
diff --git a/providers/airbyte/tests/unit/airbyte/triggers/test_airbyte.py b/providers/airbyte/tests/unit/airbyte/triggers/test_airbyte.py
index 1fcbd68459cc8..995da3fc9108e 100644
--- a/providers/airbyte/tests/unit/airbyte/triggers/test_airbyte.py
+++ b/providers/airbyte/tests/unit/airbyte/triggers/test_airbyte.py
@@ -27,7 +27,6 @@
 from airflow.providers.airbyte.hooks.airbyte import AirbyteHook
 from airflow.providers.airbyte.triggers.airbyte import AirbyteSyncTrigger
 from airflow.triggers.base import TriggerEvent
-from airflow.utils import db
 
 
 @pytest.mark.db_test
@@ -39,8 +38,11 @@ class TestAirbyteSyncTrigger:
     END_TIME = time.time() + 60 * 60 * 24 * 7
     POLL_INTERVAL = 3.0
 
-    def setup_method(self):
-        db.merge_conn(Connection(conn_id=self.CONN_ID, conn_type="airbyte", host="http://test-airbyte"))
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(conn_id=self.CONN_ID, conn_type="airbyte", host="http://test-airbyte")
+        )
 
     def test_serialization(self):
         """Assert TestAirbyteSyncTrigger correctly serializes its arguments and classpath."""
diff --git a/providers/amazon/tests/unit/amazon/aws/hooks/test_chime.py b/providers/amazon/tests/unit/amazon/aws/hooks/test_chime.py
index 9a54218a0a40d..83ccf2055182a 100644
--- a/providers/amazon/tests/unit/amazon/aws/hooks/test_chime.py
+++ b/providers/amazon/tests/unit/amazon/aws/hooks/test_chime.py
@@ -24,7 +24,6 @@
 from airflow.exceptions import AirflowException
 from airflow.models import Connection
 from airflow.providers.amazon.aws.hooks.chime import ChimeWebhookHook
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
@@ -42,8 +41,9 @@ class TestChimeWebhookHook:
 
     expected_payload = json.dumps(expected_payload_dict)
 
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="default-chime-webhook",
                 conn_type="chime",
@@ -52,7 +52,7 @@ def setup_method(self):
                 schema="https",
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="chime-bad-url",
                 conn_type="chime",
diff --git a/providers/amazon/tests/unit/amazon/aws/notifications/test_chime.py b/providers/amazon/tests/unit/amazon/aws/notifications/test_chime.py
index 0ed86e561a6ae..9e325ae1e8559 100644
--- a/providers/amazon/tests/unit/amazon/aws/notifications/test_chime.py
+++ b/providers/amazon/tests/unit/amazon/aws/notifications/test_chime.py
@@ -25,15 +25,15 @@
 from airflow.providers.amazon.aws.hooks.chime import ChimeWebhookHook
 from airflow.providers.amazon.aws.notifications.chime import ChimeNotifier, send_chime_notification
 from airflow.providers.standard.operators.empty import EmptyOperator
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
 
 class TestChimeNotifier:
     # Chime webhooks can't really have a default connection, so we need to create one for tests.
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="default-chime-webhook",
                 conn_type="chime",
diff --git a/providers/amazon/tests/unit/amazon/aws/transfers/test_google_api_to_s3.py b/providers/amazon/tests/unit/amazon/aws/transfers/test_google_api_to_s3.py
index 06dd47978753c..e8f97104f392f 100644
--- a/providers/amazon/tests/unit/amazon/aws/transfers/test_google_api_to_s3.py
+++ b/providers/amazon/tests/unit/amazon/aws/transfers/test_google_api_to_s3.py
@@ -24,15 +24,15 @@
 from airflow import models
 from airflow.models.xcom import MAX_XCOM_SIZE
 from airflow.providers.amazon.aws.transfers.google_api_to_s3 import GoogleApiToS3Operator
-from airflow.utils import db
 
 # This test mocks json.dumps so it won't work for database isolation mode
 pytestmark = pytest.mark.db_test
 
 
 class TestGoogleApiToS3:
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             models.Connection(
                 conn_id="google_test",
                 host="google",
@@ -42,7 +42,7 @@ def setup_method(self):
                 password="client_secret",
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             models.Connection(
                 conn_id="s3_test",
                 conn_type="s3",
diff --git a/providers/amazon/tests/unit/amazon/aws/transfers/test_s3_to_sql.py b/providers/amazon/tests/unit/amazon/aws/transfers/test_s3_to_sql.py
index 64a3c13219a05..2fa4c75b6abc8 100644
--- a/providers/amazon/tests/unit/amazon/aws/transfers/test_s3_to_sql.py
+++ b/providers/amazon/tests/unit/amazon/aws/transfers/test_s3_to_sql.py
@@ -24,15 +24,15 @@
 from airflow import models
 from airflow.exceptions import AirflowException
 from airflow.providers.amazon.aws.transfers.s3_to_sql import S3ToSqlOperator
-from airflow.utils import db
 from airflow.utils.session import create_session
 
 pytestmark = pytest.mark.db_test
 
 
 class TestS3ToSqlTransfer:
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             models.Connection(
                 conn_id="s3_test",
                 conn_type="aws",
@@ -41,7 +41,7 @@ def setup_method(self):
                 ' "aws_secret_access_key"}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             models.Connection(
                 conn_id="sql_test",
                 conn_type="postgres",
diff --git a/providers/apache/cassandra/tests/integration/apache/cassandra/hooks/test_cassandra.py b/providers/apache/cassandra/tests/integration/apache/cassandra/hooks/test_cassandra.py
index c27b72d3691b2..fd48d4998db68 100644
--- a/providers/apache/cassandra/tests/integration/apache/cassandra/hooks/test_cassandra.py
+++ b/providers/apache/cassandra/tests/integration/apache/cassandra/hooks/test_cassandra.py
@@ -31,13 +31,13 @@
 
 from airflow.models import Connection
 from airflow.providers.apache.cassandra.hooks.cassandra import CassandraHook
-from airflow.utils import db
 
 
 @pytest.mark.integration("cassandra")
 class TestCassandraHook:
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="cassandra_test",
                 conn_type="cassandra",
@@ -47,7 +47,7 @@ def setup_method(self):
                 extra='{"load_balancing_policy":"TokenAwarePolicy","protocol_version":4}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="cassandra_default_with_schema",
                 conn_type="cassandra",
diff --git a/providers/apache/flink/tests/unit/apache/flink/operators/test_flink_kubernetes.py b/providers/apache/flink/tests/unit/apache/flink/operators/test_flink_kubernetes.py
index 96e03fb0acd58..c9a4a5e8afffa 100644
--- a/providers/apache/flink/tests/unit/apache/flink/operators/test_flink_kubernetes.py
+++ b/providers/apache/flink/tests/unit/apache/flink/operators/test_flink_kubernetes.py
@@ -27,7 +27,7 @@
 from airflow import DAG
 from airflow.models import Connection
 from airflow.providers.apache.flink.operators.flink_kubernetes import FlinkKubernetesOperator
-from airflow.utils import db, timezone
+from airflow.utils import timezone
 
 pytestmark = pytest.mark.db_test
 
@@ -188,11 +188,12 @@
 
 @patch("airflow.providers.cncf.kubernetes.hooks.kubernetes.KubernetesHook.get_conn")
 class TestFlinkKubernetesOperator:
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(conn_id="kubernetes_default_kube_config", conn_type="kubernetes", extra=json.dumps({}))
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="kubernetes_with_namespace",
                 conn_type="kubernetes",
diff --git a/providers/apache/flink/tests/unit/apache/flink/sensors/test_flink_kubernetes.py b/providers/apache/flink/tests/unit/apache/flink/sensors/test_flink_kubernetes.py
index 9354c0ea02339..dfdc399d1e538 100644
--- a/providers/apache/flink/tests/unit/apache/flink/sensors/test_flink_kubernetes.py
+++ b/providers/apache/flink/tests/unit/apache/flink/sensors/test_flink_kubernetes.py
@@ -30,7 +30,7 @@
 from airflow.exceptions import AirflowException
 from airflow.models import Connection
 from airflow.providers.apache.flink.sensors.flink_kubernetes import FlinkKubernetesSensor
-from airflow.utils import db, timezone
+from airflow.utils import timezone
 
 pytestmark = pytest.mark.db_test
 
@@ -866,16 +866,19 @@
 
 @patch("airflow.providers.cncf.kubernetes.hooks.kubernetes.KubernetesHook.get_conn")
 class TestFlinkKubernetesSensor:
-    def setup_method(self):
-        db.merge_conn(Connection(conn_id="kubernetes_default", conn_type="kubernetes", extra=json.dumps({})))
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(conn_id="kubernetes_default", conn_type="kubernetes", extra=json.dumps({}))
+        )
+        create_connection_without_db(
             Connection(
                 conn_id="kubernetes_default",
                 conn_type="kubernetes",
                 extra=json.dumps({}),
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="kubernetes_with_namespace",
                 conn_type="kubernetes",
diff --git a/providers/apache/kafka/tests/integration/apache/kafka/hooks/test_admin_client.py b/providers/apache/kafka/tests/integration/apache/kafka/hooks/test_admin_client.py
index d542b721eba0b..b9b70ffdad7f5 100644
--- a/providers/apache/kafka/tests/integration/apache/kafka/hooks/test_admin_client.py
+++ b/providers/apache/kafka/tests/integration/apache/kafka/hooks/test_admin_client.py
@@ -23,15 +23,15 @@
 
 from airflow.models import Connection
 from airflow.providers.apache.kafka.hooks.client import KafkaAdminClientHook
-from airflow.utils import db
 
 client_config = {"socket.timeout.ms": 1000, "bootstrap.servers": "broker:29092", "group.id": "my-group"}
 
 
 @pytest.mark.integration("kafka")
 class TestKafkaAdminClientHook:
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="kafka_d",
                 conn_type="kafka",
diff --git a/providers/apache/kafka/tests/integration/apache/kafka/hooks/test_consumer.py b/providers/apache/kafka/tests/integration/apache/kafka/hooks/test_consumer.py
index 9cd9527631fb6..2fe41fd21e336 100644
--- a/providers/apache/kafka/tests/integration/apache/kafka/hooks/test_consumer.py
+++ b/providers/apache/kafka/tests/integration/apache/kafka/hooks/test_consumer.py
@@ -26,7 +26,6 @@
 # Import Hook
 from airflow.providers.apache.kafka.hooks.client import KafkaAdminClientHook
 from airflow.providers.apache.kafka.hooks.consume import KafkaConsumerHook
-from airflow.utils import db
 
 TOPIC = "consumer_hook_test_1"
 
@@ -44,8 +43,9 @@ class TestConsumerHook:
     Test consumer hook.
     """
 
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="kafka_d",
                 conn_type="kafka",
diff --git a/providers/apache/kafka/tests/integration/apache/kafka/hooks/test_producer.py b/providers/apache/kafka/tests/integration/apache/kafka/hooks/test_producer.py
index 8efe517b09e27..bc1dbb1472979 100644
--- a/providers/apache/kafka/tests/integration/apache/kafka/hooks/test_producer.py
+++ b/providers/apache/kafka/tests/integration/apache/kafka/hooks/test_producer.py
@@ -24,7 +24,6 @@
 from airflow.models import Connection
 from airflow.providers.apache.kafka.hooks.client import KafkaAdminClientHook
 from airflow.providers.apache.kafka.hooks.produce import KafkaProducerHook
-from airflow.utils import db
 
 log = logging.getLogger(__name__)
 config = {"bootstrap.servers": "broker:29092", "group.id": "hook.producer.integration.test"}
@@ -36,8 +35,9 @@ class TestProducerHook:
     Test consumer hook.
     """
 
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="kafka_default",
                 conn_type="kafka",
diff --git a/providers/apache/kafka/tests/integration/apache/kafka/operators/test_consume.py b/providers/apache/kafka/tests/integration/apache/kafka/operators/test_consume.py
index a069ae66e9fdd..772c9317fafab 100644
--- a/providers/apache/kafka/tests/integration/apache/kafka/operators/test_consume.py
+++ b/providers/apache/kafka/tests/integration/apache/kafka/operators/test_consume.py
@@ -20,6 +20,7 @@
 
 import json
 import logging
+import os
 from typing import Any
 
 import pytest
@@ -29,7 +30,6 @@
 
 # Import Operator
 from airflow.providers.apache.kafka.operators.consume import ConsumeFromTopicOperator
-from airflow.utils import db
 
 log = logging.getLogger(__name__)
 
@@ -58,23 +58,26 @@ class TestConsumeFromTopic:
     """
 
     def setup_method(self):
+        """Set up connections for each test method."""
+        # Create separate connections for each test
         for num in (1, 2, 3):
-            db.merge_conn(
-                Connection(
-                    conn_id=f"operator.consumer.test.integration.test_{num}",
-                    conn_type="kafka",
-                    extra=json.dumps(
-                        {
-                            "socket.timeout.ms": 10,
-                            "bootstrap.servers": "broker:29092",
-                            "group.id": f"operator.consumer.test.integration.test_{num}",
-                            "enable.auto.commit": False,
-                            "auto.offset.reset": "beginning",
-                        }
-                    ),
-                )
+            conn = Connection(
+                conn_id=f"operator.consumer.test.integration.test_{num}",
+                conn_type="kafka",
+                extra=json.dumps(
+                    {
+                        "socket.timeout.ms": 10,
+                        "bootstrap.servers": "broker:29092",
+                        "group.id": f"operator.consumer.test.integration.test_{num}",
+                        "enable.auto.commit": False,
+                        "auto.offset.reset": "beginning",
+                    }
+                ),
             )
 
+            env_var_name = f"AIRFLOW_CONN_{conn.conn_id.upper()}"
+            os.environ[env_var_name] = conn.get_uri()
+
     def test_consumer_operator_test_1(self):
         """test consumer works with string import"""
 
diff --git a/providers/apache/kafka/tests/integration/apache/kafka/operators/test_produce.py b/providers/apache/kafka/tests/integration/apache/kafka/operators/test_produce.py
index 3662d5465a5e6..ee73c133b4195 100644
--- a/providers/apache/kafka/tests/integration/apache/kafka/operators/test_produce.py
+++ b/providers/apache/kafka/tests/integration/apache/kafka/operators/test_produce.py
@@ -18,13 +18,13 @@
 
 import json
 import logging
+import os
 
 import pytest
 from confluent_kafka import Consumer
 
 from airflow.models import Connection
 from airflow.providers.apache.kafka.operators.produce import ProduceToTopicOperator
-from airflow.utils import db
 
 log = logging.getLogger(__name__)
 
@@ -41,21 +41,26 @@ class TestProduceToTopic:
     """
 
     def setup_method(self):
-        GROUP = "operator.producer.test.integration.test_1"
-        db.merge_conn(
-            Connection(
-                conn_id="kafka_default",
+        """Set up connections for each test method."""
+        # Create separate connections for each test
+        for num in (1, 2):
+            group = f"operator.producer.test.integration.test_{num}"
+            conn = Connection(
+                conn_id=f"kafka_default_test_{num}",
                 conn_type="kafka",
                 extra=json.dumps(
                     {
                         "socket.timeout.ms": 10,
                         "message.timeout.ms": 10,
                         "bootstrap.servers": "broker:29092",
-                        "group.id": GROUP,
+                        "group.id": group,
                     }
                 ),
             )
-        )
+
+            # Set environment variable directly (like create_connection_without_db does)
+            env_var_name = f"AIRFLOW_CONN_{conn.conn_id.upper()}"
+            os.environ[env_var_name] = conn.get_uri()
 
     def test_producer_operator_test_1(self):
         GROUP = "operator.producer.test.integration.test_1"
diff --git a/providers/apache/kafka/tests/integration/apache/kafka/triggers/test_await_message.py b/providers/apache/kafka/tests/integration/apache/kafka/triggers/test_await_message.py
index ddf5dd8c3028e..1f239c505c0e6 100644
--- a/providers/apache/kafka/tests/integration/apache/kafka/triggers/test_await_message.py
+++ b/providers/apache/kafka/tests/integration/apache/kafka/triggers/test_await_message.py
@@ -23,7 +23,6 @@
 
 from airflow.models import Connection
 from airflow.providers.apache.kafka.triggers.await_message import AwaitMessageTrigger
-from airflow.utils import db
 
 GROUP = "trigger.await_message.test.integration.test_1"
 TOPIC = "trigger.await_message.test.integration.test_1"
@@ -36,23 +35,23 @@ def _apply_function(message):
 
 @pytest.mark.integration("kafka")
 class TestTrigger:
-    def setup_method(self):
-        for num in [1]:
-            db.merge_conn(
-                Connection(
-                    conn_id=f"trigger.await_message.test.integration.test_{num}",
-                    conn_type="kafka",
-                    extra=json.dumps(
-                        {
-                            "socket.timeout.ms": 10,
-                            "bootstrap.servers": "broker:29092",
-                            "group.id": f"trigger.await_message.test.integration.test_{num}",
-                            "enable.auto.commit": False,
-                            "auto.offset.reset": "beginning",
-                        }
-                    ),
-                )
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(
+                conn_id="trigger.await_message.test.integration.test_1",
+                conn_type="kafka",
+                extra=json.dumps(
+                    {
+                        "socket.timeout.ms": 10,
+                        "bootstrap.servers": "broker:29092",
+                        "group.id": "trigger.await_message.test.integration.test_1",
+                        "enable.auto.commit": False,
+                        "auto.offset.reset": "beginning",
+                    }
+                ),
             )
+        )
 
     @pytest.mark.asyncio
     async def test_trigger_await_message_test_1(self):
diff --git a/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_client.py b/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_client.py
index a56319809b0ee..568032b495798 100644
--- a/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_client.py
+++ b/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_client.py
@@ -26,7 +26,6 @@
 
 from airflow.models import Connection
 from airflow.providers.apache.kafka.hooks.client import KafkaAdminClientHook
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
@@ -34,8 +33,9 @@
 
 
 class TestKafkaAdminClientHook:
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="kafka_d",
                 conn_type="kafka",
@@ -45,7 +45,7 @@ def setup_method(self):
             )
         )
 
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="kafka_bad",
                 conn_type="kafka",
diff --git a/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_consume.py b/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_consume.py
index dbe5470d78a85..cb0b9d0846c50 100644
--- a/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_consume.py
+++ b/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_consume.py
@@ -26,7 +26,6 @@
 
 # Import Hook
 from airflow.providers.apache.kafka.hooks.consume import KafkaConsumerHook
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
@@ -36,8 +35,9 @@ class TestConsumerHook:
     Test consumer hook.
     """
 
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="kafka_d",
                 conn_type="kafka",
@@ -47,7 +47,7 @@ def setup_method(self):
             )
         )
 
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="kafka_bad",
                 conn_type="kafka",
diff --git a/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_produce.py b/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_produce.py
index ed360f7011de5..6e5074bddb1ee 100644
--- a/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_produce.py
+++ b/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_produce.py
@@ -25,7 +25,6 @@
 
 from airflow.models import Connection
 from airflow.providers.apache.kafka.hooks.produce import KafkaProducerHook
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
@@ -38,8 +37,9 @@ class TestProducerHook:
     Test consumer hook.
     """
 
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="kafka_d",
                 conn_type="kafka",
@@ -49,7 +49,7 @@ def setup_method(self):
             )
         )
 
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="kafka_bad",
                 conn_type="kafka",
diff --git a/providers/apache/kafka/tests/unit/apache/kafka/operators/test_consume.py b/providers/apache/kafka/tests/unit/apache/kafka/operators/test_consume.py
index 01a28495d8e65..35221ac38065a 100644
--- a/providers/apache/kafka/tests/unit/apache/kafka/operators/test_consume.py
+++ b/providers/apache/kafka/tests/unit/apache/kafka/operators/test_consume.py
@@ -27,7 +27,6 @@
 
 # Import Operator
 from airflow.providers.apache.kafka.operators.consume import ConsumeFromTopicOperator
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
@@ -49,8 +48,9 @@ class TestConsumeFromTopic:
     Test ConsumeFromTopic
     """
 
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="kafka_d",
                 conn_type="kafka",
diff --git a/providers/apache/kafka/tests/unit/apache/kafka/operators/test_produce.py b/providers/apache/kafka/tests/unit/apache/kafka/operators/test_produce.py
index 614da388ae12a..94017ea962abb 100644
--- a/providers/apache/kafka/tests/unit/apache/kafka/operators/test_produce.py
+++ b/providers/apache/kafka/tests/unit/apache/kafka/operators/test_produce.py
@@ -24,7 +24,6 @@
 
 from airflow.models import Connection
 from airflow.providers.apache.kafka.operators.produce import ProduceToTopicOperator
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
@@ -49,8 +48,9 @@ class TestProduceToTopic:
     Test ConsumeFromTopic
     """
 
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="kafka_d",
                 conn_type="kafka",
diff --git a/providers/apache/kafka/tests/unit/apache/kafka/sensors/test_kafka.py b/providers/apache/kafka/tests/unit/apache/kafka/sensors/test_kafka.py
index 04b50a970feea..a4cc68d512e57 100644
--- a/providers/apache/kafka/tests/unit/apache/kafka/sensors/test_kafka.py
+++ b/providers/apache/kafka/tests/unit/apache/kafka/sensors/test_kafka.py
@@ -25,7 +25,6 @@
 from airflow.exceptions import TaskDeferred
 from airflow.models import Connection
 from airflow.providers.apache.kafka.sensors.kafka import AwaitMessageSensor, AwaitMessageTriggerFunctionSensor
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
@@ -42,8 +41,9 @@ class TestSensors:
     Test Sensors
     """
 
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="kafka_d",
                 conn_type="kafka",
diff --git a/providers/apache/kafka/tests/unit/apache/kafka/triggers/test_await_message.py b/providers/apache/kafka/tests/unit/apache/kafka/triggers/test_await_message.py
index bdd8ea38dede5..194c772a80213 100644
--- a/providers/apache/kafka/tests/unit/apache/kafka/triggers/test_await_message.py
+++ b/providers/apache/kafka/tests/unit/apache/kafka/triggers/test_await_message.py
@@ -24,7 +24,6 @@
 from airflow.models import Connection
 from airflow.providers.apache.kafka.hooks.consume import KafkaConsumerHook
 from airflow.providers.apache.kafka.triggers.await_message import AwaitMessageTrigger
-from airflow.utils import db
 
 from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS, get_base_airflow_version_tuple
 
@@ -59,8 +58,9 @@ def commit(*args, **kwargs):
 
 
 class TestTrigger:
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="kafka_d",
                 conn_type="kafka",
diff --git a/providers/apache/kafka/tests/unit/apache/kafka/triggers/test_msg_queue.py b/providers/apache/kafka/tests/unit/apache/kafka/triggers/test_msg_queue.py
index 591b8577e025c..7e960ca1599e3 100644
--- a/providers/apache/kafka/tests/unit/apache/kafka/triggers/test_msg_queue.py
+++ b/providers/apache/kafka/tests/unit/apache/kafka/triggers/test_msg_queue.py
@@ -23,7 +23,6 @@
 
 from airflow.models import Connection
 from airflow.providers.apache.kafka.hooks.consume import KafkaConsumerHook
-from airflow.utils import db
 
 from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS, get_base_airflow_version_tuple
 
@@ -62,8 +61,9 @@ def commit(*args, **kwargs):
 
 
 class TestMessageQueueTrigger:
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="kafka_d",
                 conn_type="kafka",
@@ -72,7 +72,7 @@ def setup_method(self):
                 ),
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="kafka_multi_bootstraps",
                 conn_type="kafka",
diff --git a/providers/apache/livy/tests/unit/apache/livy/hooks/test_livy.py b/providers/apache/livy/tests/unit/apache/livy/hooks/test_livy.py
index 2a1101ab44e68..c03614b2fa5c1 100644
--- a/providers/apache/livy/tests/unit/apache/livy/hooks/test_livy.py
+++ b/providers/apache/livy/tests/unit/apache/livy/hooks/test_livy.py
@@ -29,7 +29,6 @@
 from airflow.exceptions import AirflowException
 from airflow.models import Connection
 from airflow.providers.apache.livy.hooks.livy import BatchState, LivyAsyncHook, LivyHook
-from airflow.utils import db
 
 from tests_common.test_utils.db import clear_db_connections
 
@@ -58,7 +57,15 @@ class TestLivyDbHook:
     @classmethod
     def setup_class(cls):
         clear_db_connections(add_default_connections_back=False)
-        db.merge_conn(
+
+    @classmethod
+    def teardown_class(cls):
+        clear_db_connections(add_default_connections_back=True)
+
+    # TODO: Potential performance issue, converted setup_class to a setup_connections function level fixture
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id=DEFAULT_CONN_ID,
                 conn_type="http",
@@ -67,25 +74,23 @@ def setup_class(cls):
                 port=DEFAULT_PORT,
             )
         )
-        db.merge_conn(Connection(conn_id="default_port", conn_type="http", host="http://host"))
-        db.merge_conn(Connection(conn_id="default_protocol", conn_type="http", host="host"))
-        db.merge_conn(Connection(conn_id="port_set", host="host", conn_type="http", port=1234))
-        db.merge_conn(Connection(conn_id="schema_set", host="host", conn_type="http", schema="https"))
-        db.merge_conn(
+        create_connection_without_db(Connection(conn_id="default_port", conn_type="http", host="http://host"))
+        create_connection_without_db(Connection(conn_id="default_protocol", conn_type="http", host="host"))
+        create_connection_without_db(Connection(conn_id="port_set", host="host", conn_type="http", port=1234))
+        create_connection_without_db(
+            Connection(conn_id="schema_set", host="host", conn_type="http", schema="https")
+        )
+        create_connection_without_db(
             Connection(conn_id="dont_override_schema", conn_type="http", host="http://host", schema="https")
         )
-        db.merge_conn(Connection(conn_id="missing_host", conn_type="http", port=1234))
-        db.merge_conn(Connection(conn_id="invalid_uri", uri="http://invalid_uri:4321"))
-        db.merge_conn(
+        create_connection_without_db(Connection(conn_id="missing_host", conn_type="http", port=1234))
+        create_connection_without_db(Connection(conn_id="invalid_uri", uri="http://invalid_uri:4321"))
+        create_connection_without_db(
             Connection(
                 conn_id="with_credentials", login="login", password="secret", conn_type="http", host="host"
             )
         )
 
-    @classmethod
-    def teardown_class(cls):
-        clear_db_connections(add_default_connections_back=True)
-
     @pytest.mark.db_test
     @pytest.mark.parametrize(
         "conn_id, expected",
@@ -730,23 +735,25 @@ async def mock_fun(arg1, arg2, arg3, arg4):
         response = await hook._do_api_call_async(GET_RUN_ENDPOINT)
         assert response["status"] == "error"
 
-    def set_conn(self):
-        db.merge_conn(
+    @pytest.fixture
+    def setup_livy_conn(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(conn_id=LIVY_CONN_ID, conn_type="http", host="host", schema="http", port=8998)
         )
-        db.merge_conn(Connection(conn_id="default_port", conn_type="http", host="http://host"))
-        db.merge_conn(Connection(conn_id="default_protocol", conn_type="http", host="host"))
-        db.merge_conn(Connection(conn_id="port_set", host="host", conn_type="http", port=1234))
-        db.merge_conn(Connection(conn_id="schema_set", host="host", conn_type="http", schema="zzz"))
-        db.merge_conn(
+        create_connection_without_db(Connection(conn_id="default_port", conn_type="http", host="http://host"))
+        create_connection_without_db(Connection(conn_id="default_protocol", conn_type="http", host="host"))
+        create_connection_without_db(Connection(conn_id="port_set", host="host", conn_type="http", port=1234))
+        create_connection_without_db(
+            Connection(conn_id="schema_set", host="host", conn_type="http", schema="zzz")
+        )
+        create_connection_without_db(
             Connection(conn_id="dont_override_schema", conn_type="http", host="http://host", schema="zzz")
         )
-        db.merge_conn(Connection(conn_id="missing_host", conn_type="http", port=1234))
-        db.merge_conn(Connection(conn_id="invalid_uri", uri="http://invalid_uri:4321"))
+        create_connection_without_db(Connection(conn_id="missing_host", conn_type="http", port=1234))
+        create_connection_without_db(Connection(conn_id="invalid_uri", uri="http://invalid_uri:4321"))
 
     @pytest.mark.db_test
-    def test_build_get_hook(self):
-        self.set_conn()
+    def test_build_get_hook(self, setup_livy_conn):
         connection_url_mapping = {
             # id, expected
             "default_port": "http://host",
diff --git a/providers/apache/livy/tests/unit/apache/livy/operators/test_livy.py b/providers/apache/livy/tests/unit/apache/livy/operators/test_livy.py
index d4e0034690e18..f808210fbd547 100644
--- a/providers/apache/livy/tests/unit/apache/livy/operators/test_livy.py
+++ b/providers/apache/livy/tests/unit/apache/livy/operators/test_livy.py
@@ -26,7 +26,7 @@
 from airflow.models.dag import DAG
 from airflow.providers.apache.livy.hooks.livy import BatchState
 from airflow.providers.apache.livy.operators.livy import LivyOperator
-from airflow.utils import db, timezone
+from airflow.utils import timezone
 
 pytestmark = pytest.mark.db_test
 
@@ -39,10 +39,11 @@
 
 
 class TestLivyOperator:
-    def setup_method(self):
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
         args = {"owner": "airflow", "start_date": DEFAULT_DATE}
         self.dag = DAG("test_dag_id", schedule=None, default_args=args)
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="livyunittest", conn_type="livy", host="localhost:8998", port="8998", schema="http"
             )
diff --git a/providers/apache/livy/tests/unit/apache/livy/sensors/test_livy.py b/providers/apache/livy/tests/unit/apache/livy/sensors/test_livy.py
index af4ce5fd71bde..5b785fe3bfac4 100644
--- a/providers/apache/livy/tests/unit/apache/livy/sensors/test_livy.py
+++ b/providers/apache/livy/tests/unit/apache/livy/sensors/test_livy.py
@@ -24,7 +24,7 @@
 from airflow.models.dag import DAG
 from airflow.providers.apache.livy.hooks.livy import BatchState, LivyHook
 from airflow.providers.apache.livy.sensors.livy import LivySensor
-from airflow.utils import db, timezone
+from airflow.utils import timezone
 
 pytestmark = pytest.mark.db_test
 
@@ -33,10 +33,13 @@
 
 
 class TestLivySensor:
-    def setup_method(self):
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
         args = {"owner": "airflow", "start_date": DEFAULT_DATE}
         self.dag = DAG("test_dag_id", schedule=None, default_args=args)
-        db.merge_conn(Connection(conn_id="livyunittest", conn_type="livy", host="http://localhost:8998"))
+        create_connection_without_db(
+            Connection(conn_id="livyunittest", conn_type="livy", host="http://localhost:8998")
+        )
 
     @pytest.mark.parametrize(
         "batch_state", [pytest.param(bs, id=bs.name) for bs in BatchState if bs in LivyHook.TERMINAL_STATES]
diff --git a/providers/apache/spark/tests/unit/apache/spark/decorators/test_pyspark.py b/providers/apache/spark/tests/unit/apache/spark/decorators/test_pyspark.py
index e2c9ee9b89954..4cb7816c92cde 100644
--- a/providers/apache/spark/tests/unit/apache/spark/decorators/test_pyspark.py
+++ b/providers/apache/spark/tests/unit/apache/spark/decorators/test_pyspark.py
@@ -23,7 +23,7 @@
 
 from airflow.decorators import task
 from airflow.models import Connection
-from airflow.utils import db, timezone
+from airflow.utils import timezone
 
 DEFAULT_DATE = timezone.datetime(2021, 9, 1)
 
@@ -48,8 +48,9 @@ def set(self, key: str, value: Any) -> None:
 
 
 class TestPysparkDecorator:
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="pyspark_local",
                 conn_type="spark",
@@ -58,7 +59,7 @@ def setup_method(self):
             )
         )
 
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="spark-connect",
                 conn_type="spark",
@@ -67,7 +68,7 @@ def setup_method(self):
             )
         )
 
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="spark-connect-auth",
                 conn_type="spark_connect",
diff --git a/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_connect.py b/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_connect.py
index 936432e955a5c..1174ec2ff4869 100644
--- a/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_connect.py
+++ b/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_connect.py
@@ -21,14 +21,14 @@
 
 from airflow.models import Connection
 from airflow.providers.apache.spark.hooks.spark_connect import SparkConnectHook
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
 
 class TestSparkConnectHook:
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="spark-default",
                 conn_type="spark_connect",
@@ -40,7 +40,7 @@ def setup_method(self):
             )
         )
 
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="spark-test",
                 conn_type="spark_connect",
@@ -49,7 +49,7 @@ def setup_method(self):
             )
         )
 
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="spark-app",
                 conn_type="spark_connect",
diff --git a/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_jdbc.py b/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_jdbc.py
index 9973a56ca959c..9f6e034c62853 100644
--- a/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_jdbc.py
+++ b/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_jdbc.py
@@ -23,7 +23,6 @@
 
 from airflow.models import Connection
 from airflow.providers.apache.spark.hooks.spark_jdbc import SparkJDBCHook
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
@@ -64,8 +63,9 @@ class TestSparkJDBCHook:
         "create_table_column_types": "columnMcColumnFace INTEGER(100), name CHAR(64),comments VARCHAR(1024)",
     }
 
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="spark-default",
                 conn_type="spark",
@@ -73,7 +73,7 @@ def setup_method(self):
                 extra='{"queue": "root.etl", "deploy-mode": "cluster"}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="jdbc-default",
                 conn_type="postgres",
@@ -85,7 +85,7 @@ def setup_method(self):
                 extra='{"conn_prefix":"jdbc:postgresql://"}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="jdbc-invalid-host",
                 conn_type="postgres",
@@ -97,7 +97,7 @@ def setup_method(self):
                 extra='{"conn_prefix":"jdbc:postgresql://"}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="jdbc-invalid-schema",
                 conn_type="postgres",
@@ -109,7 +109,7 @@ def setup_method(self):
                 extra='{"conn_prefix":"jdbc:postgresql://"}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="jdbc-invalid-extra-conn-prefix",
                 conn_type="postgres",
diff --git a/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_sql.py b/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_sql.py
index b6d9bd704c4a0..96e69aaeb9ab7 100644
--- a/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_sql.py
+++ b/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_sql.py
@@ -26,7 +26,6 @@
 from airflow.exceptions import AirflowException
 from airflow.models import Connection
 from airflow.providers.apache.spark.hooks.spark_sql import SparkSqlHook
-from airflow.utils import db
 
 from tests_common.test_utils.db import clear_db_connections
 
@@ -68,7 +67,12 @@ class TestSparkSqlHook:
     @classmethod
     def setup_class(cls) -> None:
         clear_db_connections(add_default_connections_back=False)
-        db.merge_conn(Connection(conn_id="spark_default", conn_type="spark", host="yarn://yarn-master"))
+
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(conn_id="spark_default", conn_type="spark", host="yarn://yarn-master")
+        )
 
     @classmethod
     def teardown_class(cls) -> None:
diff --git a/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_submit.py b/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_submit.py
index cdd2434981419..b41534baa2fd1 100644
--- a/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_submit.py
+++ b/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_submit.py
@@ -28,7 +28,6 @@
 from airflow.exceptions import AirflowException
 from airflow.models import Connection
 from airflow.providers.apache.spark.hooks.spark_submit import SparkSubmitHook
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
@@ -76,8 +75,9 @@ def cmd_args_to_dict(list_cmd):
                 return_dict[arg1] = arg2
         return return_dict
 
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="spark_yarn_cluster",
                 conn_type="spark",
@@ -85,7 +85,7 @@ def setup_method(self):
                 extra='{"queue": "root.etl", "deploy-mode": "cluster"}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="spark_k8s_cluster",
                 conn_type="spark",
@@ -93,7 +93,7 @@ def setup_method(self):
                 extra='{"deploy-mode": "cluster", "namespace": "mynamespace"}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="spark_k8s_client",
                 conn_type="spark",
@@ -101,11 +101,11 @@ def setup_method(self):
                 extra='{"deploy-mode": "client", "namespace": "mynamespace"}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(conn_id="spark_default_mesos", conn_type="spark", host="mesos://host", port=5050)
         )
 
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="spark_binary_set",
                 conn_type="spark",
@@ -113,7 +113,7 @@ def setup_method(self):
                 extra='{"spark-binary": "spark2-submit"}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="spark_binary_set_spark3_submit",
                 conn_type="spark",
@@ -121,7 +121,7 @@ def setup_method(self):
                 extra='{"spark-binary": "spark3-submit"}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="spark_custom_binary_set",
                 conn_type="spark",
@@ -129,7 +129,7 @@ def setup_method(self):
                 extra='{"spark-binary": "spark-other-submit"}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="spark_home_set",
                 conn_type="spark",
@@ -137,7 +137,7 @@ def setup_method(self):
                 extra='{"spark-home": "/custom/spark-home/path"}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="spark_standalone_cluster",
                 conn_type="spark",
@@ -145,7 +145,7 @@ def setup_method(self):
                 extra='{"deploy-mode": "cluster"}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="spark_standalone_cluster_client_mode",
                 conn_type="spark",
@@ -153,7 +153,7 @@ def setup_method(self):
                 extra='{"deploy-mode": "client"}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="spark_principal_set",
                 conn_type="spark",
@@ -161,7 +161,7 @@ def setup_method(self):
                 extra='{"principal": "user/spark@airflow.org"}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="spark_keytab_set",
                 conn_type="spark",
diff --git a/providers/arangodb/tests/unit/arangodb/hooks/test_arangodb.py b/providers/arangodb/tests/unit/arangodb/hooks/test_arangodb.py
index 6a8d2916d95fa..5773b498b5186 100644
--- a/providers/arangodb/tests/unit/arangodb/hooks/test_arangodb.py
+++ b/providers/arangodb/tests/unit/arangodb/hooks/test_arangodb.py
@@ -23,7 +23,6 @@
 
 from airflow.models import Connection
 from airflow.providers.arangodb.hooks.arangodb import ArangoDBHook
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
@@ -32,8 +31,9 @@
 
 
 class TestArangoDBHook:
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="arangodb_default",
                 conn_type="arangodb",
diff --git a/providers/arangodb/tests/unit/arangodb/sensors/test_arangodb.py b/providers/arangodb/tests/unit/arangodb/sensors/test_arangodb.py
index 89615d6cb7f29..4c47cfb6706c9 100644
--- a/providers/arangodb/tests/unit/arangodb/sensors/test_arangodb.py
+++ b/providers/arangodb/tests/unit/arangodb/sensors/test_arangodb.py
@@ -24,7 +24,7 @@
 from airflow.models import Connection
 from airflow.models.dag import DAG
 from airflow.providers.arangodb.sensors.arangodb import AQLSensor
-from airflow.utils import db, timezone
+from airflow.utils import timezone
 
 # The tests do not create dag runs, so db isolation tests are skipped
 pytestmark = pytest.mark.db_test
@@ -35,11 +35,12 @@
 
 
 class TestAQLSensor:
-    def setup_method(self):
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
         args = {"owner": "airflow", "start_date": DEFAULT_DATE}
         dag = DAG("test_dag_id", schedule=None, default_args=args)
         self.dag = dag
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="arangodb_default",
                 conn_type="arangodb",
diff --git a/providers/asana/tests/unit/asana/operators/test_asana_tasks.py b/providers/asana/tests/unit/asana/operators/test_asana_tasks.py
index 0b12f7aa55a03..0e4d02f5ff1b6 100644
--- a/providers/asana/tests/unit/asana/operators/test_asana_tasks.py
+++ b/providers/asana/tests/unit/asana/operators/test_asana_tasks.py
@@ -29,7 +29,7 @@
     AsanaFindTaskOperator,
     AsanaUpdateTaskOperator,
 )
-from airflow.utils import db, timezone
+from airflow.utils import timezone
 
 # The tests do not create dag runs, so db isolation tests are skipped
 pytestmark = pytest.mark.db_test
@@ -45,11 +45,12 @@ class TestAsanaTaskOperators:
     Test that the AsanaTaskOperators are using the python-asana methods as expected.
     """
 
-    def setup_method(self):
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
         args = {"owner": "airflow", "start_date": DEFAULT_DATE}
         dag = DAG(TEST_DAG_ID, schedule=timedelta(days=1), default_args=args)
         self.dag = dag
-        db.merge_conn(Connection(conn_id="asana_test", conn_type="asana", password="test"))
+        create_connection_without_db(Connection(conn_id="asana_test", conn_type="asana", password="test"))
 
     @patch("airflow.providers.asana.hooks.asana.TasksApi", autospec=True, return_value=asana_tasks_api_mock)
     def test_asana_create_task_operator(self, mock_tasks_api):
diff --git a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/hooks/test_kubernetes.py b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/hooks/test_kubernetes.py
index 97d00a5c3b26f..4f28a305cbe2e 100644
--- a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/hooks/test_kubernetes.py
+++ b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/hooks/test_kubernetes.py
@@ -37,7 +37,6 @@
 from airflow.hooks.base import BaseHook
 from airflow.models import Connection
 from airflow.providers.cncf.kubernetes.hooks.kubernetes import AsyncKubernetesHook, KubernetesHook
-from airflow.utils import db
 from airflow.utils.db import merge_conn
 
 from tests_common.test_utils.db import clear_db_connections
@@ -94,9 +93,13 @@ def remove_default_conn(session):
 
 
 class TestKubernetesHook:
-    @classmethod
-    def setup_class(cls) -> None:
-        for conn_id, extra in [
+    # TODO: Potential performance issue, converted setup_class to a setup_connections function level fixture
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        """Create test connections for Kubernetes hook tests."""
+        import json
+
+        connections = [
             ("in_cluster", {"in_cluster": True}),
             ("in_cluster_empty", {"in_cluster": ""}),
             ("kube_config", {"kube_config": '{"test": "kube"}'}),
@@ -128,8 +131,11 @@ def setup_class(cls) -> None:
                 },
             ),
             ("sidecar_container_resources_empty", {"xcom_sidecar_container_resources": ""}),
-        ]:
-            db.merge_conn(Connection(conn_type="kubernetes", conn_id=conn_id, extra=json.dumps(extra)))
+        ]
+        for conn_id, extra in connections:
+            create_connection_without_db(
+                Connection(conn_type="kubernetes", conn_id=conn_id, extra=json.dumps(extra))
+            )
 
     @classmethod
     def teardown_class(cls) -> None:
diff --git a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/operators/test_spark_kubernetes.py b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/operators/test_spark_kubernetes.py
index e0edaf89a6b8a..ff30d9ac79750 100644
--- a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/operators/test_spark_kubernetes.py
+++ b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/operators/test_spark_kubernetes.py
@@ -35,7 +35,7 @@
 from airflow.models import Connection, DagRun, TaskInstance
 from airflow.providers.cncf.kubernetes.operators.spark_kubernetes import SparkKubernetesOperator
 from airflow.providers.cncf.kubernetes.pod_generator import MAX_LABEL_LEN
-from airflow.utils import db, timezone
+from airflow.utils import timezone
 from airflow.utils.types import DagRunType
 
 from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
@@ -231,11 +231,12 @@ def create_context(task):
 @patch("kubernetes.client.api.custom_objects_api.CustomObjectsApi.get_namespaced_custom_object_status")
 @patch("kubernetes.client.api.custom_objects_api.CustomObjectsApi.create_namespaced_custom_object")
 class TestSparkKubernetesOperatorCreateApplication:
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(conn_id="kubernetes_default_kube_config", conn_type="kubernetes", extra=json.dumps({}))
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="kubernetes_with_namespace",
                 conn_type="kubernetes",
@@ -482,11 +483,12 @@ def test_template_spec(
 @patch("kubernetes.client.api.custom_objects_api.CustomObjectsApi.get_namespaced_custom_object_status")
 @patch("kubernetes.client.api.custom_objects_api.CustomObjectsApi.create_namespaced_custom_object")
 class TestSparkKubernetesOperator:
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(conn_id="kubernetes_default_kube_config", conn_type="kubernetes", extra=json.dumps({}))
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="kubernetes_with_namespace",
                 conn_type="kubernetes",
diff --git a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/sensors/test_spark_kubernetes.py b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/sensors/test_spark_kubernetes.py
index cd7ea51fdc6c6..d5cfde025fba6 100644
--- a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/sensors/test_spark_kubernetes.py
+++ b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/sensors/test_spark_kubernetes.py
@@ -27,7 +27,7 @@
 from airflow.exceptions import AirflowException
 from airflow.models import Connection
 from airflow.providers.cncf.kubernetes.sensors.spark_kubernetes import SparkKubernetesSensor
-from airflow.utils import db, timezone
+from airflow.utils import timezone
 
 pytestmark = pytest.mark.db_test
 
@@ -555,9 +555,12 @@
 
 @patch("airflow.providers.cncf.kubernetes.hooks.kubernetes.KubernetesHook.get_conn")
 class TestSparkKubernetesSensor:
-    def setup_method(self):
-        db.merge_conn(Connection(conn_id="kubernetes_default", conn_type="kubernetes", extra=json.dumps({})))
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(conn_id="kubernetes_default", conn_type="kubernetes", extra=json.dumps({}))
+        )
+        create_connection_without_db(
             Connection(
                 conn_id="kubernetes_with_namespace",
                 conn_type="kubernetes",
diff --git a/providers/datadog/tests/unit/datadog/sensors/test_datadog.py b/providers/datadog/tests/unit/datadog/sensors/test_datadog.py
index 4bc28b39bbc8f..2dc81e01a81c8 100644
--- a/providers/datadog/tests/unit/datadog/sensors/test_datadog.py
+++ b/providers/datadog/tests/unit/datadog/sensors/test_datadog.py
@@ -25,7 +25,6 @@
 from airflow.exceptions import AirflowException
 from airflow.models import Connection
 from airflow.providers.datadog.sensors.datadog import DatadogSensor
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
@@ -68,8 +67,9 @@
 
 
 class TestDatadogSensor:
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="datadog_default",
                 conn_type="datadog",
diff --git a/providers/dbt/cloud/tests/unit/dbt/cloud/hooks/test_dbt.py b/providers/dbt/cloud/tests/unit/dbt/cloud/hooks/test_dbt.py
index acf622b8812b4..b32877a7efea5 100644
--- a/providers/dbt/cloud/tests/unit/dbt/cloud/hooks/test_dbt.py
+++ b/providers/dbt/cloud/tests/unit/dbt/cloud/hooks/test_dbt.py
@@ -36,7 +36,7 @@
     TokenAuth,
     fallback_to_default_account,
 )
-from airflow.utils import db, timezone
+from airflow.utils import timezone
 
 pytestmark = pytest.mark.db_test
 
@@ -151,7 +151,9 @@ def test_invalid_terminal_job_run_status(self, statuses):
 
 
 class TestDbtCloudHook:
-    def setup_class(self):
+    # TODO: Potential performance issue, converted setup_class to a setup_connections function level fixture
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
         # Connection with ``account_id`` specified
         account_id_conn = Connection(
             conn_id=ACCOUNT_ID_CONN,
@@ -186,10 +188,10 @@ def setup_class(self):
             extra=EXTRA_PROXIES,
         )
 
-        db.merge_conn(account_id_conn)
-        db.merge_conn(no_account_id_conn)
-        db.merge_conn(host_conn)
-        db.merge_conn(proxy_conn)
+        create_connection_without_db(account_id_conn)
+        create_connection_without_db(no_account_id_conn)
+        create_connection_without_db(host_conn)
+        create_connection_without_db(proxy_conn)
 
     @pytest.mark.parametrize(
         argnames="conn_id, url",
diff --git a/providers/dbt/cloud/tests/unit/dbt/cloud/operators/test_dbt.py b/providers/dbt/cloud/tests/unit/dbt/cloud/operators/test_dbt.py
index 13ed5208030a2..9fe925ec54aa8 100644
--- a/providers/dbt/cloud/tests/unit/dbt/cloud/operators/test_dbt.py
+++ b/providers/dbt/cloud/tests/unit/dbt/cloud/operators/test_dbt.py
@@ -32,7 +32,7 @@
 )
 from airflow.providers.dbt.cloud.triggers.dbt import DbtCloudRunJobTrigger
 from airflow.providers.dbt.cloud.version_compat import AIRFLOW_V_3_0_PLUS
-from airflow.utils import db, timezone
+from airflow.utils import timezone
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
@@ -97,7 +97,9 @@ def mock_response_json(response: dict):
     return run_response
 
 
-def setup_module():
+# TODO: Potential performance issue, converted setup_module to a setup_connections function level fixture
+@pytest.fixture(autouse=True)
+def setup_connections(create_connection_without_db):
     # Connection with ``account_id`` specified
     conn_account_id = Connection(
         conn_id=ACCOUNT_ID_CONN,
@@ -113,8 +115,8 @@ def setup_module():
         password=TOKEN,
     )
 
-    db.merge_conn(conn_account_id)
-    db.merge_conn(conn_no_account_id)
+    create_connection_without_db(conn_account_id)
+    create_connection_without_db(conn_no_account_id)
 
 
 class TestDbtCloudRunJobOperator:
diff --git a/providers/dbt/cloud/tests/unit/dbt/cloud/sensors/test_dbt.py b/providers/dbt/cloud/tests/unit/dbt/cloud/sensors/test_dbt.py
index 14dd82b1eacec..1bec86d4489b9 100644
--- a/providers/dbt/cloud/tests/unit/dbt/cloud/sensors/test_dbt.py
+++ b/providers/dbt/cloud/tests/unit/dbt/cloud/sensors/test_dbt.py
@@ -29,7 +29,6 @@
 from airflow.providers.dbt.cloud.hooks.dbt import DbtCloudHook, DbtCloudJobRunException, DbtCloudJobRunStatus
 from airflow.providers.dbt.cloud.sensors.dbt import DbtCloudJobRunSensor
 from airflow.providers.dbt.cloud.triggers.dbt import DbtCloudRunJobTrigger
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
@@ -45,6 +44,15 @@ class TestDbtCloudJobRunSensor:
     DBT_RUN_ID = 1234
     TIMEOUT = 300
 
+    # TODO: Potential performance issue, converted setup_class to a setup_connections function level fixture
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        # Connection
+        conn = Connection(
+            conn_id="dbt", conn_type=DbtCloudHook.conn_type, login=str(ACCOUNT_ID), password=TOKEN
+        )
+        create_connection_without_db(conn)
+
     def setup_class(self):
         self.sensor = DbtCloudJobRunSensor(
             task_id="job_run_sensor",
@@ -55,13 +63,6 @@ def setup_class(self):
             poke_interval=15,
         )
 
-        # Connection
-        conn = Connection(
-            conn_id="dbt", conn_type=DbtCloudHook.conn_type, login=str(ACCOUNT_ID), password=TOKEN
-        )
-
-        db.merge_conn(conn)
-
     def test_init(self):
         assert self.sensor.dbt_cloud_conn_id == "dbt"
         assert self.sensor.run_id == RUN_ID
diff --git a/providers/dingding/tests/unit/dingding/hooks/test_dingding.py b/providers/dingding/tests/unit/dingding/hooks/test_dingding.py
index c779437caeb3f..0832156a138a8 100644
--- a/providers/dingding/tests/unit/dingding/hooks/test_dingding.py
+++ b/providers/dingding/tests/unit/dingding/hooks/test_dingding.py
@@ -23,7 +23,6 @@
 
 from airflow.models import Connection
 from airflow.providers.dingding.hooks.dingding import DingdingHook
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
@@ -31,8 +30,9 @@
 class TestDingdingHook:
     conn_id = "dingding_conn_id_test"
 
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id=self.conn_id,
                 conn_type="dingding",
diff --git a/providers/discord/tests/unit/discord/hooks/test_discord_webhook.py b/providers/discord/tests/unit/discord/hooks/test_discord_webhook.py
index 3bd019ceffba0..bc61b45dff8b4 100644
--- a/providers/discord/tests/unit/discord/hooks/test_discord_webhook.py
+++ b/providers/discord/tests/unit/discord/hooks/test_discord_webhook.py
@@ -24,7 +24,6 @@
 from airflow.exceptions import AirflowException
 from airflow.models import Connection
 from airflow.providers.discord.hooks.discord_webhook import DiscordWebhookHook
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
@@ -49,8 +48,9 @@ class TestDiscordWebhookHook:
 
     expected_payload = json.dumps(expected_payload_dict)
 
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="default-discord-webhook",
                 conn_type="discord",
diff --git a/providers/discord/tests/unit/discord/notifications/test_discord.py b/providers/discord/tests/unit/discord/notifications/test_discord.py
index dcf426b6c17da..700751d0ceffe 100644
--- a/providers/discord/tests/unit/discord/notifications/test_discord.py
+++ b/providers/discord/tests/unit/discord/notifications/test_discord.py
@@ -23,14 +23,13 @@
 
 from airflow.models import Connection
 from airflow.providers.discord.notifications.discord import DiscordNotifier
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
 
 @pytest.fixture(autouse=True)
-def setup():
-    db.merge_conn(
+def setup_connections(create_connection_without_db):
+    create_connection_without_db(
         Connection(
             conn_id="my_discord_conn_id",
             conn_type="discord",
diff --git a/providers/ftp/tests/unit/ftp/hooks/test_ftp.py b/providers/ftp/tests/unit/ftp/hooks/test_ftp.py
index f0f5c623794ec..c2dd6ee2c9d47 100644
--- a/providers/ftp/tests/unit/ftp/hooks/test_ftp.py
+++ b/providers/ftp/tests/unit/ftp/hooks/test_ftp.py
@@ -143,19 +143,19 @@ def test_connection_failure(self):
 
 @pytest.mark.db_test
 class TestIntegrationFTPHook:
-    def setup_method(self):
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
         from airflow.models import Connection
-        from airflow.utils import db
 
-        db.merge_conn(
+        create_connection_without_db(
             Connection(conn_id="ftp_passive", conn_type="ftp", host="localhost", extra='{"passive": true}')
         )
 
-        db.merge_conn(
+        create_connection_without_db(
             Connection(conn_id="ftp_active", conn_type="ftp", host="localhost", extra='{"passive": false}')
         )
 
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="ftp_custom_port",
                 conn_type="ftp",
@@ -165,7 +165,7 @@ def setup_method(self):
             )
         )
 
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="ftp_custom_port_and_login",
                 conn_type="ftp",
diff --git a/providers/git/tests/unit/git/bundles/test_git.py b/providers/git/tests/unit/git/bundles/test_git.py
index bac3cdb39c1a3..929f790115db9 100644
--- a/providers/git/tests/unit/git/bundles/test_git.py
+++ b/providers/git/tests/unit/git/bundles/test_git.py
@@ -32,7 +32,6 @@
 from airflow.models import Connection
 from airflow.providers.git.bundles.git import GitDagBundle
 from airflow.providers.git.hooks.git import GitHook
-from airflow.utils import db
 
 from tests_common.test_utils.config import conf_vars
 from tests_common.test_utils.db import clear_db_connections
@@ -73,16 +72,21 @@ class TestGitDagBundle:
     def teardown_class(cls) -> None:
         clear_db_connections()
 
-    @classmethod
-    def setup_class(cls) -> None:
-        db.merge_conn(
+    # TODO: Potential performance issue, converted setup_class to a setup_connections function level fixture
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db, request):
+        # Skip setup for tests that need to create their own connections
+        if request.function.__name__ in ["test_view_url", "test_view_url_subdir"]:
+            return
+
+        create_connection_without_db(
             Connection(
                 conn_id="git_default",
                 host="git@github.com:apache/airflow.git",
                 conn_type="git",
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id=CONN_HTTPS,
                 host=AIRFLOW_HTTPS_URL,
@@ -90,7 +94,7 @@ def setup_class(cls) -> None:
                 conn_type="git",
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id=CONN_NO_REPO_URL,
                 conn_type="git",
diff --git a/providers/git/tests/unit/git/hooks/test_git.py b/providers/git/tests/unit/git/hooks/test_git.py
index bdc86830f8ad7..db07f0bf4e349 100644
--- a/providers/git/tests/unit/git/hooks/test_git.py
+++ b/providers/git/tests/unit/git/hooks/test_git.py
@@ -25,7 +25,6 @@
 from airflow.exceptions import AirflowException
 from airflow.models import Connection
 from airflow.providers.git.hooks.git import GitHook
-from airflow.utils import db
 
 from tests_common.test_utils.config import conf_vars
 from tests_common.test_utils.db import clear_db_connections
@@ -70,9 +69,10 @@ class TestGitHook:
     def teardown_class(cls) -> None:
         clear_db_connections()
 
-    @classmethod
-    def setup_class(cls) -> None:
-        db.merge_conn(
+    # TODO: Potential performance issue, converted setup_class to a setup_connections function level fixture
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id=CONN_DEFAULT,
                 host=AIRFLOW_GIT,
@@ -80,7 +80,7 @@ def setup_class(cls) -> None:
                 extra='{"key_file": "/files/pkey.pem"}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id=CONN_HTTPS,
                 host=AIRFLOW_HTTPS_URL,
@@ -88,14 +88,14 @@ def setup_class(cls) -> None:
                 conn_type="git",
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id=CONN_ONLY_PATH,
                 host="path/to/repo",
                 conn_type="git",
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id=CONN_ONLY_INLINE_KEY,
                 host="path/to/repo",
@@ -123,13 +123,13 @@ def test_correct_repo_urls(self, conn_id, hook_kwargs, expected_repo_url):
         hook = GitHook(git_conn_id=conn_id, **hook_kwargs)
         assert hook.repo_url == expected_repo_url
 
-    def test_env_var_with_configure_hook_env(self, session):
+    def test_env_var_with_configure_hook_env(self, session, create_connection_without_db):
         default_hook = GitHook(git_conn_id=CONN_DEFAULT)
         with default_hook.configure_hook_env():
             assert default_hook.env == {
                 "GIT_SSH_COMMAND": "ssh -i /files/pkey.pem -o IdentitiesOnly=yes -o StrictHostKeyChecking=no"
             }
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="my_git_conn_strict",
                 host=AIRFLOW_GIT,
@@ -144,8 +144,8 @@ def test_env_var_with_configure_hook_env(self, session):
                 "GIT_SSH_COMMAND": "ssh -i /files/pkey.pem -o IdentitiesOnly=yes -o StrictHostKeyChecking=yes"
             }
 
-    def test_given_both_private_key_and_key_file(self):
-        db.merge_conn(
+    def test_given_both_private_key_and_key_file(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id=CONN_BOTH_PATH_INLINE,
                 host="path/to/repo",
diff --git a/providers/github/tests/unit/github/hooks/test_github.py b/providers/github/tests/unit/github/hooks/test_github.py
index 61720e07c9474..f94c9b1c91c48 100644
--- a/providers/github/tests/unit/github/hooks/test_github.py
+++ b/providers/github/tests/unit/github/hooks/test_github.py
@@ -24,7 +24,6 @@
 
 from airflow.models import Connection
 from airflow.providers.github.hooks.github import GithubHook
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
@@ -33,8 +32,10 @@
 
 
 class TestGithubHook:
-    def setup_class(self):
-        db.merge_conn(
+    # TODO: Potential performance issue, converted setup_class to a setup_connections function level fixture
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="github_default",
                 conn_type="github",
diff --git a/providers/github/tests/unit/github/operators/test_github.py b/providers/github/tests/unit/github/operators/test_github.py
index 7766eda69bc2a..0738e0ba6648d 100644
--- a/providers/github/tests/unit/github/operators/test_github.py
+++ b/providers/github/tests/unit/github/operators/test_github.py
@@ -24,7 +24,7 @@
 from airflow.models import Connection
 from airflow.models.dag import DAG
 from airflow.providers.github.operators.github import GithubOperator
-from airflow.utils import db, timezone
+from airflow.utils import timezone
 
 pytestmark = pytest.mark.db_test
 
@@ -34,11 +34,10 @@
 
 
 class TestGithubOperator:
-    def setup_class(self):
-        args = {"owner": "airflow", "start_date": DEFAULT_DATE}
-        dag = DAG("test_dag_id", schedule=None, default_args=args)
-        self.dag = dag
-        db.merge_conn(
+    # TODO: Potential performance issue, converted setup_class to a setup_connections function level fixture
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="github_default",
                 conn_type="github",
@@ -47,6 +46,11 @@ def setup_class(self):
             )
         )
 
+    def setup_class(self):
+        args = {"owner": "airflow", "start_date": DEFAULT_DATE}
+        dag = DAG("test_dag_id", schedule=None, default_args=args)
+        self.dag = dag
+
     def test_operator_init_with_optional_args(self):
         github_operator = GithubOperator(
             task_id="github_list_repos",
diff --git a/providers/github/tests/unit/github/sensors/test_github.py b/providers/github/tests/unit/github/sensors/test_github.py
index 6fb679d744ccc..6a4a50fa481da 100644
--- a/providers/github/tests/unit/github/sensors/test_github.py
+++ b/providers/github/tests/unit/github/sensors/test_github.py
@@ -24,7 +24,7 @@
 from airflow.models import Connection
 from airflow.models.dag import DAG
 from airflow.providers.github.sensors.github import GithubTagSensor
-from airflow.utils import db, timezone
+from airflow.utils import timezone
 
 pytestmark = pytest.mark.db_test
 
@@ -34,11 +34,10 @@
 
 
 class TestGithubSensor:
-    def setup_class(self):
-        args = {"owner": "airflow", "start_date": DEFAULT_DATE}
-        dag = DAG("test_dag_id", schedule=None, default_args=args)
-        self.dag = dag
-        db.merge_conn(
+    # TODO: Potential performance issue, converted setup_class to a setup_connections function level fixture
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="github_default",
                 conn_type="github",
@@ -47,6 +46,11 @@ def setup_class(self):
             )
         )
 
+    def setup_class(self):
+        args = {"owner": "airflow", "start_date": DEFAULT_DATE}
+        dag = DAG("test_dag_id", schedule=None, default_args=args)
+        self.dag = dag
+
     @patch(
         "airflow.providers.github.hooks.github.GithubClient",
         autospec=True,
diff --git a/providers/google/tests/unit/google/common/hooks/test_discovery_api.py b/providers/google/tests/unit/google/common/hooks/test_discovery_api.py
index 5cdb0fbc03280..40776fa4932b3 100644
--- a/providers/google/tests/unit/google/common/hooks/test_discovery_api.py
+++ b/providers/google/tests/unit/google/common/hooks/test_discovery_api.py
@@ -21,17 +21,17 @@
 
 import pytest
 
-from airflow import models
+from airflow.models import Connection
 from airflow.providers.google.common.hooks.discovery_api import GoogleDiscoveryApiHook
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
 
 class TestGoogleDiscoveryApiHook:
-    def setup_method(self):
-        db.merge_conn(
-            models.Connection(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(
                 conn_id="google_test",
                 conn_type="google_cloud_platform",
                 host="google",
diff --git a/providers/imap/tests/unit/imap/hooks/test_imap.py b/providers/imap/tests/unit/imap/hooks/test_imap.py
index 51a8721f7a952..a0c6ea4b692e6 100644
--- a/providers/imap/tests/unit/imap/hooks/test_imap.py
+++ b/providers/imap/tests/unit/imap/hooks/test_imap.py
@@ -26,7 +26,6 @@
 from airflow.exceptions import AirflowException
 from airflow.models import Connection
 from airflow.providers.imap.hooks.imap import ImapHook
-from airflow.utils import db
 
 from tests_common.test_utils.config import conf_vars
 
@@ -66,8 +65,9 @@ def _create_fake_imap(mock_imaplib, with_mail=False, attachment_name="test1.csv"
 
 
 class TestImapHook:
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="imap_default",
                 conn_type="imap",
@@ -77,7 +77,7 @@ def setup_method(self):
                 port=1993,
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="imap_nonssl",
                 conn_type="imap",
@@ -120,9 +120,11 @@ def test_connect_and_disconnect_imap_ssl_context_none(self, create_default_conte
 
     @patch(imaplib_string)
     @patch("ssl.create_default_context")
-    def test_connect_and_disconnect_imap_ssl_context_from_extra(self, create_default_context, mock_imaplib):
+    def test_connect_and_disconnect_imap_ssl_context_from_extra(
+        self, create_default_context, mock_imaplib, create_connection_without_db
+    ):
         mock_conn = _create_fake_imap(mock_imaplib)
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="imap_ssl_context_from_extra",
                 conn_type="imap",
diff --git a/providers/jdbc/tests/unit/jdbc/hooks/test_jdbc.py b/providers/jdbc/tests/unit/jdbc/hooks/test_jdbc.py
index 1e8da5760043e..8e75592d83d73 100644
--- a/providers/jdbc/tests/unit/jdbc/hooks/test_jdbc.py
+++ b/providers/jdbc/tests/unit/jdbc/hooks/test_jdbc.py
@@ -32,7 +32,6 @@
 from airflow.exceptions import AirflowException
 from airflow.models import Connection
 from airflow.providers.jdbc.hooks.jdbc import JdbcHook, suppress_and_warn
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
@@ -79,8 +78,9 @@ def get_connection(cls, conn_id: str) -> Connection:
 
 
 class TestJdbcHook:
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="jdbc_default",
                 conn_type="jdbc",
diff --git a/providers/mysql/tests/unit/mysql/transfers/test_s3_to_mysql.py b/providers/mysql/tests/unit/mysql/transfers/test_s3_to_mysql.py
index 57a56f22f5f2e..dca4d4c55088b 100644
--- a/providers/mysql/tests/unit/mysql/transfers/test_s3_to_mysql.py
+++ b/providers/mysql/tests/unit/mysql/transfers/test_s3_to_mysql.py
@@ -23,15 +23,15 @@
 
 from airflow import models
 from airflow.providers.mysql.transfers.s3_to_mysql import S3ToMySqlOperator
-from airflow.utils import db
 from airflow.utils.session import create_session
 
 pytestmark = pytest.mark.db_test
 
 
 class TestS3ToMySqlTransfer:
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             models.Connection(
                 conn_id="s3_test",
                 conn_type="s3",
@@ -40,7 +40,7 @@ def setup_method(self):
                 ' "aws_secret_access_key"}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             models.Connection(
                 conn_id="mysql_test",
                 conn_type="mysql",
diff --git a/providers/opensearch/tests/unit/opensearch/conftest.py b/providers/opensearch/tests/unit/opensearch/conftest.py
index 8edb688068bd1..8882b3e7777b9 100644
--- a/providers/opensearch/tests/unit/opensearch/conftest.py
+++ b/providers/opensearch/tests/unit/opensearch/conftest.py
@@ -22,7 +22,6 @@
 
 from airflow.hooks.base import BaseHook
 from airflow.models import Connection
-from airflow.utils import db
 
 try:
     from opensearchpy import OpenSearch
@@ -178,9 +177,8 @@ def mock_hook(monkeypatch):
 
 
 @pytest.fixture(autouse=True)
-def setup_connection():
-    # We need to set up a Connection into the database for all tests.
-    db.merge_conn(
+def setup_connection(create_connection_without_db):
+    create_connection_without_db(
         Connection(
             conn_id="opensearch_default",
             conn_type="opensearch",
diff --git a/providers/opsgenie/tests/unit/opsgenie/hooks/test_opsgenie.py b/providers/opsgenie/tests/unit/opsgenie/hooks/test_opsgenie.py
index deadb98343b9e..ed166f3c97192 100644
--- a/providers/opsgenie/tests/unit/opsgenie/hooks/test_opsgenie.py
+++ b/providers/opsgenie/tests/unit/opsgenie/hooks/test_opsgenie.py
@@ -25,7 +25,6 @@
 
 from airflow.models import Connection
 from airflow.providers.opsgenie.hooks.opsgenie import OpsgenieAlertHook
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
@@ -68,8 +67,9 @@ class TestOpsgenieAlertHook:
         "request_id": "43a29c5c-3dbf-4fa4-9c26-f4f71023e120",
     }
 
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id=self.conn_id,
                 conn_type="opsgenie",
@@ -87,9 +87,9 @@ def test_get_conn_defaults_host(self):
         hook = OpsgenieAlertHook()
         assert hook.get_conn().api_client.configuration.host == "https://api.opsgenie.com"
 
-    def test_get_conn_custom_host(self):
+    def test_get_conn_custom_host(self, create_connection_without_db):
         conn_id = "custom_host_opsgenie_test"
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id=conn_id,
                 conn_type="opsgenie",
diff --git a/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty.py b/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty.py
index e5aaa66dafa71..e970e3a06b8db 100644
--- a/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty.py
+++ b/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty.py
@@ -21,7 +21,6 @@
 
 from airflow.models import Connection
 from airflow.providers.pagerduty.hooks.pagerduty import PagerdutyHook
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
@@ -29,9 +28,9 @@
 DEFAULT_CONN_ID = "pagerduty_default"
 
 
-@pytest.fixture(scope="class")
-def pagerduty_connections():
-    db.merge_conn(
+@pytest.fixture(autouse=True)
+def pagerduty_connections(create_connection_without_db):
+    create_connection_without_db(
         Connection(
             conn_id=DEFAULT_CONN_ID,
             conn_type="pagerduty",
@@ -39,7 +38,7 @@ def pagerduty_connections():
             extra='{"routing_key": "integration_key"}',
         )
     )
-    db.merge_conn(
+    create_connection_without_db(
         Connection(
             conn_id="pagerduty_no_extra", conn_type="pagerduty", password="pagerduty_token_without_extra"
         ),
diff --git a/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty_events.py b/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty_events.py
index c8037be4afed3..682194b51df0f 100644
--- a/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty_events.py
+++ b/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty_events.py
@@ -21,16 +21,17 @@
 
 from airflow.models import Connection
 from airflow.providers.pagerduty.hooks.pagerduty_events import PagerdutyEventsHook
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
 DEFAULT_CONN_ID = "pagerduty_events_default"
 
 
-@pytest.fixture(scope="class")
-def events_connections():
-    db.merge_conn(Connection(conn_id=DEFAULT_CONN_ID, conn_type="pagerduty_events", password="events_token"))
+@pytest.fixture(autouse=True)
+def events_connections(create_connection_without_db):
+    create_connection_without_db(
+        Connection(conn_id=DEFAULT_CONN_ID, conn_type="pagerduty_events", password="events_token")
+    )
 
 
 class TestPagerdutyEventsHook:
diff --git a/providers/smtp/tests/unit/smtp/hooks/test_smtp.py b/providers/smtp/tests/unit/smtp/hooks/test_smtp.py
index e713b84423102..9c601fdce54f5 100644
--- a/providers/smtp/tests/unit/smtp/hooks/test_smtp.py
+++ b/providers/smtp/tests/unit/smtp/hooks/test_smtp.py
@@ -28,7 +28,6 @@
 
 from airflow.models import Connection
 from airflow.providers.smtp.hooks.smtp import SmtpHook
-from airflow.utils import db
 from airflow.utils.session import create_session
 
 pytestmark = pytest.mark.db_test
@@ -53,8 +52,9 @@ def _create_fake_smtp(mock_smtplib, use_ssl=True):
 
 
 class TestSmtpHook:
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="smtp_default",
                 conn_type="smtp",
@@ -65,7 +65,7 @@ def setup_method(self):
                 extra=json.dumps(dict(from_email="from")),
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="smtp_nonssl",
                 conn_type="smtp",
@@ -221,7 +221,9 @@ def test_send_mime_ssl(self, create_default_context, mock_smtp, mock_smtp_ssl):
     @patch("smtplib.SMTP_SSL")
     @patch("smtplib.SMTP")
     @patch("ssl.create_default_context")
-    def test_send_mime_ssl_extra_none_context(self, create_default_context, mock_smtp, mock_smtp_ssl):
+    def test_send_mime_ssl_extra_none_context(
+        self, create_default_context, mock_smtp, mock_smtp_ssl, create_connection_without_db
+    ):
         mock_smtp_ssl.return_value = Mock()
         conn = Connection(
             conn_id="smtp_ssl_extra",
@@ -232,7 +234,7 @@ def test_send_mime_ssl_extra_none_context(self, create_default_context, mock_smt
             port=465,
             extra=json.dumps(dict(use_ssl=True, ssl_context="none", from_email="from")),
         )
-        db.merge_conn(conn)
+        create_connection_without_db(conn)
         with SmtpHook(smtp_conn_id="smtp_ssl_extra") as smtp_hook:
             smtp_hook.send_email_smtp(to="to", subject="subject", html_content="content", from_email="from")
         assert not mock_smtp.called
@@ -242,7 +244,9 @@ def test_send_mime_ssl_extra_none_context(self, create_default_context, mock_smt
     @patch("smtplib.SMTP_SSL")
     @patch("smtplib.SMTP")
     @patch("ssl.create_default_context")
-    def test_send_mime_ssl_extra_default_context(self, create_default_context, mock_smtp, mock_smtp_ssl):
+    def test_send_mime_ssl_extra_default_context(
+        self, create_default_context, mock_smtp, mock_smtp_ssl, create_connection_without_db
+    ):
         mock_smtp_ssl.return_value = Mock()
         conn = Connection(
             conn_id="smtp_ssl_extra",
@@ -253,7 +257,7 @@ def test_send_mime_ssl_extra_default_context(self, create_default_context, mock_
             port=465,
             extra=json.dumps(dict(use_ssl=True, ssl_context="default", from_email="from")),
         )
-        db.merge_conn(conn)
+        create_connection_without_db(conn)
         with SmtpHook() as smtp_hook:
             smtp_hook.send_email_smtp(to="to", subject="subject", html_content="content", from_email="from")
         assert not mock_smtp.called
@@ -265,7 +269,9 @@ def test_send_mime_ssl_extra_default_context(self, create_default_context, mock_
     @patch("smtplib.SMTP_SSL")
     @patch("smtplib.SMTP")
     @patch("ssl.create_default_context")
-    def test_send_mime_default_context(self, create_default_context, mock_smtp, mock_smtp_ssl):
+    def test_send_mime_default_context(
+        self, create_default_context, mock_smtp, mock_smtp_ssl, create_connection_without_db
+    ):
         mock_smtp_ssl.return_value = Mock()
         conn = Connection(
             conn_id="smtp_ssl_extra",
@@ -276,7 +282,7 @@ def test_send_mime_default_context(self, create_default_context, mock_smtp, mock
             port=465,
             extra=json.dumps(dict(use_ssl=True, from_email="from")),
         )
-        db.merge_conn(conn)
+        create_connection_without_db(conn)
         with SmtpHook() as smtp_hook:
             smtp_hook.send_email_smtp(to="to", subject="subject", html_content="content", from_email="from")
         assert not mock_smtp.called
@@ -295,7 +301,7 @@ def test_send_mime_nossl(self, mock_smtp, mock_smtp_ssl):
         mock_smtp.assert_called_once_with(host="smtp_server_address", port=587, timeout=30)
 
     @patch("smtplib.SMTP")
-    def test_send_mime_noauth(self, mock_smtp):
+    def test_send_mime_noauth(self, mock_smtp, create_connection_without_db):
         mock_smtp.return_value = Mock()
         conn = Connection(
             conn_id="smtp_noauth",
@@ -306,7 +312,7 @@ def test_send_mime_noauth(self, mock_smtp):
             port=587,
             extra=json.dumps(dict(disable_ssl=True, from_email="from")),
         )
-        db.merge_conn(conn)
+        create_connection_without_db(conn)
         with SmtpHook(smtp_conn_id="smtp_noauth") as smtp_hook:
             smtp_hook.send_email_smtp(to="to", subject="subject", html_content="content", from_email="from")
         mock_smtp.assert_called_once_with(host="smtp_server_address", port=587, timeout=30)
diff --git a/providers/ssh/tests/unit/ssh/hooks/test_ssh.py b/providers/ssh/tests/unit/ssh/hooks/test_ssh.py
index d778a46411b88..b6efaa960e54e 100644
--- a/providers/ssh/tests/unit/ssh/hooks/test_ssh.py
+++ b/providers/ssh/tests/unit/ssh/hooks/test_ssh.py
@@ -31,8 +31,6 @@
 from airflow.exceptions import AirflowException
 from airflow.models import Connection
 from airflow.providers.ssh.hooks.ssh import SSHHook
-from airflow.utils import db
-from airflow.utils.session import create_session
 
 pytestmark = pytest.mark.db_test
 
@@ -118,73 +116,45 @@ class TestSSHHook:
         "ssh_with_no_host_key_check_true_and_allow_host_key_changes_false"
     )
 
-    @classmethod
-    def teardown_class(cls) -> None:
-        with create_session() as session:
-            conns_to_reset = [
-                cls.CONN_SSH_WITH_NO_EXTRA,
-                cls.CONN_SSH_WITH_PRIVATE_KEY_EXTRA,
-                cls.CONN_SSH_WITH_PRIVATE_KEY_PASSPHRASE_EXTRA,
-                cls.CONN_SSH_WITH_PRIVATE_KEY_ECDSA_EXTRA,
-                cls.CONN_SSH_WITH_TIMEOUT_EXTRA,
-                cls.CONN_SSH_WITH_CONN_TIMEOUT_EXTRA,
-                cls.CONN_SSH_WITH_CMD_TIMEOUT_EXTRA,
-                cls.CONN_SSH_WITH_NULL_CMD_TIMEOUT_EXTRA,
-                cls.CONN_SSH_WITH_TIMEOUT_AND_CONN_TIMEOUT_EXTRA,
-                cls.CONN_SSH_WITH_EXTRA,
-                cls.CONN_SSH_WITH_HOST_KEY_EXTRA,
-                cls.CONN_SSH_WITH_HOST_KEY_EXTRA_WITH_TYPE,
-                cls.CONN_SSH_WITH_HOST_KEY_AND_NO_HOST_KEY_CHECK_FALSE,
-                cls.CONN_SSH_WITH_HOST_KEY_AND_NO_HOST_KEY_CHECK_TRUE,
-                cls.CONN_SSH_WITH_NO_HOST_KEY_AND_NO_HOST_KEY_CHECK_FALSE,
-                cls.CONN_SSH_WITH_NO_HOST_KEY_AND_NO_HOST_KEY_CHECK_TRUE,
-                cls.CONN_SSH_WITH_EXTRA_DISABLED_ALGORITHMS,
-                cls.CONN_SSH_WITH_EXTRA_CIPHERS,
-                cls.CONN_SSH_WITH_NO_HOST_KEY_CHECK_TRUE_AND_ALLOW_HOST_KEY_CHANGES_TRUE,
-                cls.CONN_SSH_WITH_NO_HOST_KEY_CHECK_TRUE_AND_ALLOW_HOST_KEY_CHANGES_FALSE,
-            ]
-            connections = session.query(Connection).filter(Connection.conn_id.in_(conns_to_reset))
-            connections.delete(synchronize_session=False)
-            session.commit()
-
-    @classmethod
-    def setup_class(cls) -> None:
-        db.merge_conn(
+    # TODO: Potential performance issue, converted setup_class to a setup_connections function level fixture
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
-                conn_id=cls.CONN_SSH_WITH_NO_EXTRA,
+                conn_id=self.CONN_SSH_WITH_NO_EXTRA,
                 host="localhost",
                 conn_type="ssh",
                 extra=None,
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
-                conn_id=cls.CONN_SSH_WITH_EXTRA,
+                conn_id=self.CONN_SSH_WITH_EXTRA,
                 host="localhost",
                 conn_type="ssh",
                 extra='{"compress" : true, "no_host_key_check" : "true", "allow_host_key_change": false}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
-                conn_id=cls.CONN_SSH_WITH_EXTRA_FALSE_LOOK_FOR_KEYS,
+                conn_id=self.CONN_SSH_WITH_EXTRA_FALSE_LOOK_FOR_KEYS,
                 host="localhost",
                 conn_type="ssh",
                 extra='{"compress" : true, "no_host_key_check" : "true", '
                 '"allow_host_key_change": false, "look_for_keys": false}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
-                conn_id=cls.CONN_SSH_WITH_PRIVATE_KEY_EXTRA,
+                conn_id=self.CONN_SSH_WITH_PRIVATE_KEY_EXTRA,
                 host="localhost",
                 conn_type="ssh",
                 extra=json.dumps({"private_key": TEST_PRIVATE_KEY}),
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
-                conn_id=cls.CONN_SSH_WITH_PRIVATE_KEY_PASSPHRASE_EXTRA,
+                conn_id=self.CONN_SSH_WITH_PRIVATE_KEY_PASSPHRASE_EXTRA,
                 host="localhost",
                 conn_type="ssh",
                 extra=json.dumps(
@@ -192,73 +162,73 @@ def setup_class(cls) -> None:
                 ),
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
-                conn_id=cls.CONN_SSH_WITH_PRIVATE_KEY_ECDSA_EXTRA,
+                conn_id=self.CONN_SSH_WITH_PRIVATE_KEY_ECDSA_EXTRA,
                 host="localhost",
                 conn_type="ssh",
                 extra=json.dumps({"private_key": TEST_PRIVATE_KEY_ECDSA}),
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
-                conn_id=cls.CONN_SSH_WITH_TIMEOUT_EXTRA,
+                conn_id=self.CONN_SSH_WITH_TIMEOUT_EXTRA,
                 host="localhost",
                 conn_type="ssh",
                 extra=json.dumps({"timeout": TEST_TIMEOUT}),
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
-                conn_id=cls.CONN_SSH_WITH_CONN_TIMEOUT_EXTRA,
+                conn_id=self.CONN_SSH_WITH_CONN_TIMEOUT_EXTRA,
                 host="localhost",
                 conn_type="ssh",
                 extra=json.dumps({"conn_timeout": TEST_CONN_TIMEOUT}),
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
-                conn_id=cls.CONN_SSH_WITH_TIMEOUT_AND_CONN_TIMEOUT_EXTRA,
+                conn_id=self.CONN_SSH_WITH_TIMEOUT_AND_CONN_TIMEOUT_EXTRA,
                 host="localhost",
                 conn_type="ssh",
                 extra=json.dumps({"conn_timeout": TEST_CONN_TIMEOUT, "timeout": TEST_TIMEOUT}),
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
-                conn_id=cls.CONN_SSH_WITH_CMD_TIMEOUT_EXTRA,
+                conn_id=self.CONN_SSH_WITH_CMD_TIMEOUT_EXTRA,
                 host="localhost",
                 conn_type="ssh",
                 extra=json.dumps({"cmd_timeout": TEST_CMD_TIMEOUT_EXTRA}),
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
-                conn_id=cls.CONN_SSH_WITH_NULL_CMD_TIMEOUT_EXTRA,
+                conn_id=self.CONN_SSH_WITH_NULL_CMD_TIMEOUT_EXTRA,
                 host="localhost",
                 conn_type="ssh",
                 extra=json.dumps({"cmd_timeout": None}),
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
-                conn_id=cls.CONN_SSH_WITH_HOST_KEY_EXTRA,
+                conn_id=self.CONN_SSH_WITH_HOST_KEY_EXTRA,
                 host="localhost",
                 conn_type="ssh",
                 extra=json.dumps({"private_key": TEST_PRIVATE_KEY, "host_key": TEST_HOST_KEY}),
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
-                conn_id=cls.CONN_SSH_WITH_HOST_KEY_EXTRA_WITH_TYPE,
+                conn_id=self.CONN_SSH_WITH_HOST_KEY_EXTRA_WITH_TYPE,
                 host="localhost",
                 conn_type="ssh",
                 extra=json.dumps({"private_key": TEST_PRIVATE_KEY, "host_key": "ssh-rsa " + TEST_HOST_KEY}),
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
-                conn_id=cls.CONN_SSH_WITH_HOST_KEY_AND_NO_HOST_KEY_CHECK_FALSE,
+                conn_id=self.CONN_SSH_WITH_HOST_KEY_AND_NO_HOST_KEY_CHECK_FALSE,
                 host="remote_host",
                 conn_type="ssh",
                 extra=json.dumps(
@@ -266,9 +236,9 @@ def setup_class(cls) -> None:
                 ),
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
-                conn_id=cls.CONN_SSH_WITH_HOST_KEY_AND_NO_HOST_KEY_CHECK_TRUE,
+                conn_id=self.CONN_SSH_WITH_HOST_KEY_AND_NO_HOST_KEY_CHECK_TRUE,
                 host="remote_host",
                 conn_type="ssh",
                 extra=json.dumps(
@@ -276,25 +246,25 @@ def setup_class(cls) -> None:
                 ),
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
-                conn_id=cls.CONN_SSH_WITH_NO_HOST_KEY_AND_NO_HOST_KEY_CHECK_FALSE,
+                conn_id=self.CONN_SSH_WITH_NO_HOST_KEY_AND_NO_HOST_KEY_CHECK_FALSE,
                 host="remote_host",
                 conn_type="ssh",
                 extra=json.dumps({"private_key": TEST_PRIVATE_KEY, "no_host_key_check": False}),
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
-                conn_id=cls.CONN_SSH_WITH_NO_HOST_KEY_AND_NO_HOST_KEY_CHECK_TRUE,
+                conn_id=self.CONN_SSH_WITH_NO_HOST_KEY_AND_NO_HOST_KEY_CHECK_TRUE,
                 host="remote_host",
                 conn_type="ssh",
                 extra=json.dumps({"private_key": TEST_PRIVATE_KEY, "no_host_key_check": True}),
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
-                conn_id=cls.CONN_SSH_WITH_HOST_KEY_AND_ALLOW_HOST_KEY_CHANGES_TRUE,
+                conn_id=self.CONN_SSH_WITH_HOST_KEY_AND_ALLOW_HOST_KEY_CHANGES_TRUE,
                 host="remote_host",
                 conn_type="ssh",
                 extra=json.dumps(
@@ -306,33 +276,33 @@ def setup_class(cls) -> None:
                 ),
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
-                conn_id=cls.CONN_SSH_WITH_EXTRA_DISABLED_ALGORITHMS,
+                conn_id=self.CONN_SSH_WITH_EXTRA_DISABLED_ALGORITHMS,
                 host="localhost",
                 conn_type="ssh",
                 extra=json.dumps({"disabled_algorithms": TEST_DISABLED_ALGORITHMS}),
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
-                conn_id=cls.CONN_SSH_WITH_EXTRA_CIPHERS,
+                conn_id=self.CONN_SSH_WITH_EXTRA_CIPHERS,
                 host="localhost",
                 conn_type="ssh",
                 extra=json.dumps({"ciphers": TEST_CIPHERS}),
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
-                conn_id=cls.CONN_SSH_WITH_NO_HOST_KEY_CHECK_TRUE_AND_ALLOW_HOST_KEY_CHANGES_TRUE,
+                conn_id=self.CONN_SSH_WITH_NO_HOST_KEY_CHECK_TRUE_AND_ALLOW_HOST_KEY_CHANGES_TRUE,
                 host="remote_host",
                 conn_type="ssh",
                 extra=json.dumps({"no_host_key_check": True, "allow_host_key_change": True}),
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
-                conn_id=cls.CONN_SSH_WITH_NO_HOST_KEY_CHECK_TRUE_AND_ALLOW_HOST_KEY_CHANGES_FALSE,
+                conn_id=self.CONN_SSH_WITH_NO_HOST_KEY_CHECK_TRUE_AND_ALLOW_HOST_KEY_CHANGES_FALSE,
                 host="remote_host",
                 conn_type="ssh",
                 extra=json.dumps({"no_host_key_check": True, "allow_host_key_change": False}),
diff --git a/providers/tableau/tests/unit/tableau/hooks/test_tableau.py b/providers/tableau/tests/unit/tableau/hooks/test_tableau.py
index 241367b4f6989..8ea82b4270b06 100644
--- a/providers/tableau/tests/unit/tableau/hooks/test_tableau.py
+++ b/providers/tableau/tests/unit/tableau/hooks/test_tableau.py
@@ -22,7 +22,6 @@
 
 from airflow import configuration, models
 from airflow.providers.tableau.hooks.tableau import TableauHook, TableauJobFinishCode
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
@@ -32,10 +31,11 @@ class TestTableauHook:
     Test class for TableauHook
     """
 
-    def setup_method(self):
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
         configuration.conf.load_test_config()
 
-        db.merge_conn(
+        create_connection_without_db(
             models.Connection(
                 conn_id="tableau_test_password",
                 conn_type="tableau",
@@ -45,7 +45,7 @@ def setup_method(self):
                 extra='{"site_id": "my_site"}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             models.Connection(
                 conn_id="tableau_test_ssl_connection_certificates_path",
                 conn_type="tableau",
@@ -55,7 +55,7 @@ def setup_method(self):
                 extra='{"verify": "my_cert_path", "cert": "my_client_cert_path"}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             models.Connection(
                 conn_id="tableau_test_ssl_false_connection",
                 conn_type="tableau",
@@ -65,7 +65,7 @@ def setup_method(self):
                 extra='{"verify": "False"}',
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             models.Connection(
                 conn_id="tableau_test_ssl_bool_param_connection",
                 conn_type="tableau",
diff --git a/providers/telegram/tests/unit/telegram/hooks/test_telegram.py b/providers/telegram/tests/unit/telegram/hooks/test_telegram.py
index 0702a10e74543..c2e16d4bd8665 100644
--- a/providers/telegram/tests/unit/telegram/hooks/test_telegram.py
+++ b/providers/telegram/tests/unit/telegram/hooks/test_telegram.py
@@ -71,7 +71,7 @@ def test_should_use_default_connection(self):
         hook = TelegramHook()
 
         assert hook.token == TELEGRAM_TOKEN
-        assert hook.chat_id is None
+        assert not hook.chat_id
 
     def test_should_raise_exception_if_conn_id_doesnt_exist(self):
         with pytest.raises(airflow.exceptions.AirflowNotFoundException) as ctx:
diff --git a/providers/telegram/tests/unit/telegram/operators/test_telegram.py b/providers/telegram/tests/unit/telegram/operators/test_telegram.py
index 353f4b1f44aac..6e7732e998c39 100644
--- a/providers/telegram/tests/unit/telegram/operators/test_telegram.py
+++ b/providers/telegram/tests/unit/telegram/operators/test_telegram.py
@@ -25,7 +25,6 @@
 import airflow
 from airflow.models import Connection
 from airflow.providers.telegram.operators.telegram import TelegramOperator
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
@@ -33,15 +32,16 @@
 
 
 class TestTelegramOperator:
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="telegram_default",
                 conn_type="http",
                 password=TELEGRAM_TOKEN,
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="telegram_default-with-chat-id",
                 conn_type="http",
diff --git a/providers/zendesk/tests/unit/zendesk/hooks/test_zendesk.py b/providers/zendesk/tests/unit/zendesk/hooks/test_zendesk.py
index 15d87a846c2a0..677c63413b14b 100644
--- a/providers/zendesk/tests/unit/zendesk/hooks/test_zendesk.py
+++ b/providers/zendesk/tests/unit/zendesk/hooks/test_zendesk.py
@@ -24,7 +24,6 @@
 
 from airflow.models import Connection
 from airflow.providers.zendesk.hooks.zendesk import ZendeskHook
-from airflow.utils import db
 
 pytestmark = pytest.mark.db_test
 
@@ -33,8 +32,8 @@ class TestZendeskHook:
     conn_id = "zendesk_conn_id_test"
 
     @pytest.fixture(autouse=True)
-    def init_connection(self):
-        db.merge_conn(
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id=self.conn_id,
                 conn_type="zendesk",

From dfca82e54fe8a550f36df6bfe1216d52979b319a Mon Sep 17 00:00:00 2001
From: Dov Benyomin Sohacheski <b@kloud.email>
Date: Sun, 22 Jun 2025 11:48:28 +0300
Subject: [PATCH 039/381] Include docs for Windows (#52004)

---
 providers/edge3/docs/install_on_windows.rst | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/providers/edge3/docs/install_on_windows.rst b/providers/edge3/docs/install_on_windows.rst
index 29bf5b2920b7b..850de56ee7cdb 100644
--- a/providers/edge3/docs/install_on_windows.rst
+++ b/providers/edge3/docs/install_on_windows.rst
@@ -49,7 +49,12 @@ To setup a instance of Edge Worker on Windows, you need to follow the steps belo
 .. code-block:: bash
 
     @echo off
+    REM For versions 3.0.0 or later
     set AIRFLOW__API_AUTH__JWT_SECRET=<matching the api-server...>
+    REM for versions earlier than 3.0.0
+    set AIRFLOW__CORE__INTERNAL_API_SECRET_KEY=<use this as configured centrally in api-server...>
+
+    REM For all versions
     set AIRFLOW__CORE__DAGS_FOLDER=dags
     set AIRFLOW__LOGGING__BASE_LOG_FOLDER=edge_logs
     set AIRFLOW__EDGE__API_URL=https://your-hostname-and-port/edge_worker/v1/rpcapi

From 14b00ed5e2cde471a51efa0ebc0730b2446b14d6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Josef=20=C5=A0im=C3=A1nek?= <josef.simanek@gmail.com>
Date: Sun, 22 Jun 2025 11:57:12 +0200
Subject: [PATCH 040/381] Update Dockerfile links. (#51997)

---
 Dockerfile                        | 6 +++---
 scripts/docker/entrypoint_prod.sh | 4 ++--
 scripts/docker/pip                | 2 +-
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index 640c44396426f..a8522ea0139c7 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -673,7 +673,7 @@ if [[ $(id -u) == "0" ]]; then
     echo
     echo "${COLOR_RED}You are running pip as root. Please use 'airflow' user to run pip!${COLOR_RESET}"
     echo
-    echo "${COLOR_YELLOW}See: https://airflow.apache.org/docs/docker-stack/build.html#adding-a-new-pypi-package${COLOR_RESET}"
+    echo "${COLOR_YELLOW}See: https://airflow.apache.org/docs/docker-stack/build.html#adding-new-pypi-packages-individually${COLOR_RESET}"
     echo
     exit 1
 fi
@@ -1313,7 +1313,7 @@ function check_uid_gid() {
         >&2 echo " This is to make sure you can run the image with an arbitrary UID in the future."
         >&2 echo
         >&2 echo " See more about it in the Airflow's docker image documentation"
-        >&2 echo "     http://airflow.apache.org/docs/docker-stack/entrypoint"
+        >&2 echo "     https://airflow.apache.org/docs/docker-stack/entrypoint.html"
         >&2 echo
         # We still allow the image to run with `airflow` user.
         return
@@ -1327,7 +1327,7 @@ function check_uid_gid() {
         >&2 echo " This is to make sure you can run the image with an arbitrary UID."
         >&2 echo
         >&2 echo " See more about it in the Airflow's docker image documentation"
-        >&2 echo "     http://airflow.apache.org/docs/docker-stack/entrypoint"
+        >&2 echo "     https://airflow.apache.org/docs/docker-stack/entrypoint.html"
         # This will not work so we fail hard
         exit 1
     fi
diff --git a/scripts/docker/entrypoint_prod.sh b/scripts/docker/entrypoint_prod.sh
index f36dd15a9dab4..cd7a600641fc0 100755
--- a/scripts/docker/entrypoint_prod.sh
+++ b/scripts/docker/entrypoint_prod.sh
@@ -241,7 +241,7 @@ function check_uid_gid() {
         >&2 echo " This is to make sure you can run the image with an arbitrary UID in the future."
         >&2 echo
         >&2 echo " See more about it in the Airflow's docker image documentation"
-        >&2 echo "     http://airflow.apache.org/docs/docker-stack/entrypoint"
+        >&2 echo "     https://airflow.apache.org/docs/docker-stack/entrypoint.html"
         >&2 echo
         # We still allow the image to run with `airflow` user.
         return
@@ -255,7 +255,7 @@ function check_uid_gid() {
         >&2 echo " This is to make sure you can run the image with an arbitrary UID."
         >&2 echo
         >&2 echo " See more about it in the Airflow's docker image documentation"
-        >&2 echo "     http://airflow.apache.org/docs/docker-stack/entrypoint"
+        >&2 echo "     https://airflow.apache.org/docs/docker-stack/entrypoint.html"
         # This will not work so we fail hard
         exit 1
     fi
diff --git a/scripts/docker/pip b/scripts/docker/pip
index 226adf295663c..7fdca47a52797 100644
--- a/scripts/docker/pip
+++ b/scripts/docker/pip
@@ -23,7 +23,7 @@ if [[ $(id -u) == "0" ]]; then
     echo
     echo "${COLOR_RED}You are running pip as root. Please use 'airflow' user to run pip!${COLOR_RESET}"
     echo
-    echo "${COLOR_YELLOW}See: https://airflow.apache.org/docs/docker-stack/build.html#adding-a-new-pypi-package${COLOR_RESET}"
+    echo "${COLOR_YELLOW}See: https://airflow.apache.org/docs/docker-stack/build.html#adding-new-pypi-packages-individually${COLOR_RESET}"
     echo
     exit 1
 fi

From 3bf83f2afe505f748c7ec4523599e63d8329b25f Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sun, 22 Jun 2025 14:17:30 +0200
Subject: [PATCH 041/381] Remove pytest.mark.db_test: airbyte and amazon
 providers where possible (#52017)

After #51930, we can now remove "pytest.mark.db_test" in all providers
that used db only to create connections. This PR is the "trial" attempt
of doing so and it verifies that it is a viable thing to do. It:

* removes all pytest.mark.db_test markers from airbyte
* removes / reshuffles many pytest.mark.db_tests in amazon
* adds pre-commit that we can use to guard that no new
  pytest.mark.db_test markers will be added in providers that we
  already cleaned up (for example airbyte)

This PR, when merged will be followed up with an issue where we will ask
contributors to apply the same approach to all the remaining providers -
where I will describe in detail the process of removing the markers.

This is part of the #42632 which has the long-term target of making all
the provider tests non-db tests and simplifying our test setup.
---
 .pre-commit-config.yaml                                | 10 ++++++++++
 contributing-docs/08_static_code_checks.rst            |  2 ++
 dev/breeze/doc/images/output_static-checks.svg         |  4 ++--
 dev/breeze/doc/images/output_static-checks.txt         |  2 +-
 dev/breeze/src/airflow_breeze/pre_commit_ids.py        |  1 +
 .../airbyte/tests/unit/airbyte/hooks/test_airbyte.py   |  4 ----
 .../tests/unit/airbyte/operators/test_airbyte.py       |  2 --
 .../airbyte/tests/unit/airbyte/sensors/test_airbyte.py |  1 -
 .../tests/unit/airbyte/triggers/test_airbyte.py        |  1 -
 .../unit/amazon/aws/executors/ecs/test_ecs_executor.py |  2 --
 .../tests/unit/amazon/aws/hooks/test_base_aws.py       |  2 --
 .../amazon/tests/unit/amazon/aws/hooks/test_chime.py   |  2 --
 .../amazon/tests/unit/amazon/aws/hooks/test_emr.py     |  1 -
 .../amazon/tests/unit/amazon/aws/hooks/test_s3.py      |  2 --
 .../amazon/aws/hooks/test_sagemaker_unified_studio.py  |  4 ++--
 .../amazon/tests/unit/amazon/aws/links/test_athena.py  |  4 ++++
 .../tests/unit/amazon/aws/links/test_base_aws.py       |  1 -
 .../amazon/tests/unit/amazon/aws/links/test_batch.py   |  4 ++++
 .../tests/unit/amazon/aws/links/test_comprehend.py     |  4 ++++
 .../tests/unit/amazon/aws/links/test_datasync.py       |  5 +++++
 .../amazon/tests/unit/amazon/aws/links/test_ec2.py     |  4 ++++
 .../amazon/tests/unit/amazon/aws/links/test_emr.py     |  3 +++
 .../amazon/tests/unit/amazon/aws/links/test_glue.py    |  4 ++++
 .../amazon/tests/unit/amazon/aws/links/test_logs.py    |  4 ++++
 .../tests/unit/amazon/aws/links/test_sagemaker.py      |  4 ++++
 .../amazon/aws/links/test_sagemaker_unified_studio.py  |  4 ++++
 .../tests/unit/amazon/aws/links/test_step_function.py  |  2 ++
 .../tests/unit/amazon/aws/sensors/test_dynamodb.py     |  3 ---
 .../unit/amazon/aws/transfers/test_google_api_to_s3.py |  1 -
 .../unit/amazon/aws/triggers/test_serialization.py     |  2 --
 .../tests/unit/amazon/aws/utils/test_suppress.py       |  1 -
 .../amazon/tests/unit/amazon/aws/waiters/test_eks.py   |  2 ++
 32 files changed, 62 insertions(+), 30 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 995e255cf363d..1ae406eb2fd2c 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -570,6 +570,16 @@ repos:
         entry: "pydevd.*settrace\\("
         pass_filenames: true
         files: \.py$
+      - id: check-pytest-mark-db-test-in-providers
+        language: pygrep
+        name: Check pytest.mark.db_test use in providers
+        entry: pytest\.mark\.db_test
+        pass_filenames: true
+        # Here we should add providers that are already free from the pytest.mark.db_test
+        # and we want to keep them clean and only use non-db-tests
+        files: >
+            (?x)
+            ^providers/airbyte/.*\.py$
       - id: check-links-to-example-dags-do-not-use-hardcoded-versions
         name: Verify no hard-coded version in example dags
         description: The links to example dags should use |version| as version specification
diff --git a/contributing-docs/08_static_code_checks.rst b/contributing-docs/08_static_code_checks.rst
index d1b8a7aa4ee62..494fe6a08aa82 100644
--- a/contributing-docs/08_static_code_checks.rst
+++ b/contributing-docs/08_static_code_checks.rst
@@ -221,6 +221,8 @@ require Breeze Docker image to be built locally.
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
 | check-pydevd-left-in-code                                 | Check for pydevd debug statements accidentally left    |         |
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
+| check-pytest-mark-db-test-in-providers                    | Check pytest.mark.db_test use in providers             |         |
++-----------------------------------------------------------+--------------------------------------------------------+---------+
 | check-revision-heads-map                                  | Check that the REVISION_HEADS_MAP is up-to-date        |         |
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
 | check-safe-filter-usage-in-html                           | Don't use safe in templates                            |         |
diff --git a/dev/breeze/doc/images/output_static-checks.svg b/dev/breeze/doc/images/output_static-checks.svg
index beaf498a9e529..cf51d1ab8d4d8 100644
--- a/dev/breeze/doc/images/output_static-checks.svg
+++ b/dev/breeze/doc/images/output_static-checks.svg
@@ -355,8 +355,8 @@
 </text><text class="breeze-static-checks-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-28)">│</text><text class="breeze-static-checks-r7" x="451.4" y="703.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-28)">check-pre-commit-information-consistent&#160;|&#160;check-provide-create-sessions-imports&#160;|</text><text class="breeze-static-checks-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-28)">│</text><text class="breeze-static-checks-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-28)">
 </text><text class="breeze-static-checks-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-29)">│</text><text class="breeze-static-checks-r7" x="451.4" y="727.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-29)">check-provider-docs-valid&#160;|&#160;check-provider-yaml-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-29)">│</text><text class="breeze-static-checks-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-29)">
 </text><text class="breeze-static-checks-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-static-checks-line-30)">│</text><text class="breeze-static-checks-r7" x="451.4" y="752" textLength="988.2" clip-path="url(#breeze-static-checks-line-30)">check-providers-subpackages-init-file-exist&#160;|&#160;check-pydevd-left-in-code&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-static-checks-line-30)">│</text><text class="breeze-static-checks-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-static-checks-line-30)">
-</text><text class="breeze-static-checks-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-31)">│</text><text class="breeze-static-checks-r7" x="451.4" y="776.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-31)">check-revision-heads-map&#160;|&#160;check-safe-filter-usage-in-html&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-31)">│</text><text class="breeze-static-checks-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-31)">
-</text><text class="breeze-static-checks-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-32)">│</text><text class="breeze-static-checks-r7" x="451.4" y="800.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-32)">check-significant-newsfragments-are-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-32)">│</text><text class="breeze-static-checks-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-32)">
+</text><text class="breeze-static-checks-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-31)">│</text><text class="breeze-static-checks-r7" x="451.4" y="776.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-31)">check-pytest-mark-db-test-in-providers&#160;|&#160;check-revision-heads-map&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-31)">│</text><text class="breeze-static-checks-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-31)">
+</text><text class="breeze-static-checks-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-32)">│</text><text class="breeze-static-checks-r7" x="451.4" y="800.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-32)">check-safe-filter-usage-in-html&#160;|&#160;check-significant-newsfragments-are-valid&#160;|&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-32)">│</text><text class="breeze-static-checks-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-32)">
 </text><text class="breeze-static-checks-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-33)">│</text><text class="breeze-static-checks-r7" x="451.4" y="825.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-33)">check-sql-dependency-common-data-structure&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-33)">│</text><text class="breeze-static-checks-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-33)">
 </text><text class="breeze-static-checks-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-34)">│</text><text class="breeze-static-checks-r7" x="451.4" y="849.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-34)">check-start-date-not-used-in-defaults&#160;|&#160;check-system-tests-present&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-34)">│</text><text class="breeze-static-checks-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-34)">
 </text><text class="breeze-static-checks-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-static-checks-line-35)">│</text><text class="breeze-static-checks-r7" x="451.4" y="874" textLength="988.2" clip-path="url(#breeze-static-checks-line-35)">check-system-tests-tocs&#160;|&#160;check-taskinstance-tis-attrs&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="874" textLength="12.2" clip-path="url(#breeze-static-checks-line-35)">│</text><text class="breeze-static-checks-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-static-checks-line-35)">
diff --git a/dev/breeze/doc/images/output_static-checks.txt b/dev/breeze/doc/images/output_static-checks.txt
index a62f2b66d5aa2..0282b0f74e16f 100644
--- a/dev/breeze/doc/images/output_static-checks.txt
+++ b/dev/breeze/doc/images/output_static-checks.txt
@@ -1 +1 @@
-f31561bb0408a8cab278aad420d260b3
+bb6a22bca8cde603acddfad0f073b3c0
diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids.py b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
index de0227170d7fd..ce4f0ec27fe57 100644
--- a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
+++ b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
@@ -74,6 +74,7 @@
     "check-provider-yaml-valid",
     "check-providers-subpackages-init-file-exist",
     "check-pydevd-left-in-code",
+    "check-pytest-mark-db-test-in-providers",
     "check-revision-heads-map",
     "check-safe-filter-usage-in-html",
     "check-significant-newsfragments-are-valid",
diff --git a/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py b/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py
index 1672a373bc8b7..6f19b49c51ec9 100644
--- a/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py
+++ b/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py
@@ -27,11 +27,7 @@
 from airflow.models import Connection
 from airflow.providers.airbyte.hooks.airbyte import AirbyteHook
 
-# those tests will not work with database isolation because they mock requests
-pytestmark = pytest.mark.db_test
 
-
-@pytest.mark.db_test
 class TestAirbyteHook:
     """
     Test all functions from Airbyte Hook
diff --git a/providers/airbyte/tests/unit/airbyte/operators/test_airbyte.py b/providers/airbyte/tests/unit/airbyte/operators/test_airbyte.py
index b7d6e9f6bdb35..0e9fc54c6b883 100644
--- a/providers/airbyte/tests/unit/airbyte/operators/test_airbyte.py
+++ b/providers/airbyte/tests/unit/airbyte/operators/test_airbyte.py
@@ -19,14 +19,12 @@
 
 from unittest import mock
 
-import pytest
 from airbyte_api.models import JobCreateRequest, JobResponse, JobStatusEnum, JobTypeEnum
 
 from airflow.models import Connection
 from airflow.providers.airbyte.operators.airbyte import AirbyteTriggerSyncOperator
 
 
-@pytest.mark.db_test
 class TestAirbyteTriggerSyncOp:
     """
     Test execute function from Airbyte Operator
diff --git a/providers/airbyte/tests/unit/airbyte/sensors/test_airbyte.py b/providers/airbyte/tests/unit/airbyte/sensors/test_airbyte.py
index bae1d7c2bc9a2..abec7b447f8ba 100644
--- a/providers/airbyte/tests/unit/airbyte/sensors/test_airbyte.py
+++ b/providers/airbyte/tests/unit/airbyte/sensors/test_airbyte.py
@@ -27,7 +27,6 @@
 from airflow.providers.airbyte.sensors.airbyte import AirbyteJobSensor
 
 
-@pytest.mark.db_test
 class TestAirbyteJobSensor:
     task_id = "task-id"
     airbyte_conn_id = "airbyte-conn-test"
diff --git a/providers/airbyte/tests/unit/airbyte/triggers/test_airbyte.py b/providers/airbyte/tests/unit/airbyte/triggers/test_airbyte.py
index 995da3fc9108e..55985e971db1c 100644
--- a/providers/airbyte/tests/unit/airbyte/triggers/test_airbyte.py
+++ b/providers/airbyte/tests/unit/airbyte/triggers/test_airbyte.py
@@ -29,7 +29,6 @@
 from airflow.triggers.base import TriggerEvent
 
 
-@pytest.mark.db_test
 class TestAirbyteSyncTrigger:
     DAG_ID = "airbyte_sync_run"
     TASK_ID = "airbyte_sync_run_task_op"
diff --git a/providers/amazon/tests/unit/amazon/aws/executors/ecs/test_ecs_executor.py b/providers/amazon/tests/unit/amazon/aws/executors/ecs/test_ecs_executor.py
index a29cb883a7b42..ff7b9699c98a0 100644
--- a/providers/amazon/tests/unit/amazon/aws/executors/ecs/test_ecs_executor.py
+++ b/providers/amazon/tests/unit/amazon/aws/executors/ecs/test_ecs_executor.py
@@ -61,8 +61,6 @@
 from tests_common.test_utils.config import conf_vars
 from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
-pytestmark = pytest.mark.db_test
-
 airflow_version = VersionInfo(*map(int, airflow_version_str.split(".")[:3]))
 
 ARN1 = "arn1"
diff --git a/providers/amazon/tests/unit/amazon/aws/hooks/test_base_aws.py b/providers/amazon/tests/unit/amazon/aws/hooks/test_base_aws.py
index 3970a766ade64..5aa436903ce9c 100644
--- a/providers/amazon/tests/unit/amazon/aws/hooks/test_base_aws.py
+++ b/providers/amazon/tests/unit/amazon/aws/hooks/test_base_aws.py
@@ -883,7 +883,6 @@ def test_hook_connection_test(self):
         assert result
         assert hook.client_type == "s3"  # Same client_type which defined during initialisation
 
-    @pytest.mark.db_test
     @mock.patch("boto3.session.Session")
     def test_hook_connection_test_failed(self, mock_boto3_session):
         """Test ``test_connection`` failure."""
@@ -1135,7 +1134,6 @@ def test_waiter_config_params_not_provided(waiter_path_mock: MagicMock, caplog):
     assert "PARAM_1" in str(ae.value)
 
 
-@pytest.mark.db_test
 @mock.patch.object(AwsGenericHook, "waiter_path", new_callable=PropertyMock)
 def test_waiter_config_no_params_needed(waiter_path_mock: MagicMock, caplog):
     waiter_path_mock.return_value = TEST_WAITER_CONFIG_LOCATION
diff --git a/providers/amazon/tests/unit/amazon/aws/hooks/test_chime.py b/providers/amazon/tests/unit/amazon/aws/hooks/test_chime.py
index 83ccf2055182a..a44140d21b88c 100644
--- a/providers/amazon/tests/unit/amazon/aws/hooks/test_chime.py
+++ b/providers/amazon/tests/unit/amazon/aws/hooks/test_chime.py
@@ -25,8 +25,6 @@
 from airflow.models import Connection
 from airflow.providers.amazon.aws.hooks.chime import ChimeWebhookHook
 
-pytestmark = pytest.mark.db_test
-
 
 class TestChimeWebhookHook:
     _config = {
diff --git a/providers/amazon/tests/unit/amazon/aws/hooks/test_emr.py b/providers/amazon/tests/unit/amazon/aws/hooks/test_emr.py
index aaa572cc5e4f2..63668a227c04b 100644
--- a/providers/amazon/tests/unit/amazon/aws/hooks/test_emr.py
+++ b/providers/amazon/tests/unit/amazon/aws/hooks/test_emr.py
@@ -154,7 +154,6 @@ def test_add_job_flow_steps_raises_exception_on_failure(self, mock_conn, mock_sl
         assert "test failure details" in caplog.messages[-1]
         mock_conn.get_waiter.assert_called_with("step_complete")
 
-    @pytest.mark.db_test
     @mock_aws
     def test_create_job_flow_extra_args(self):
         """
diff --git a/providers/amazon/tests/unit/amazon/aws/hooks/test_s3.py b/providers/amazon/tests/unit/amazon/aws/hooks/test_s3.py
index 2d69d2c539c6c..31b3a625a3971 100644
--- a/providers/amazon/tests/unit/amazon/aws/hooks/test_s3.py
+++ b/providers/amazon/tests/unit/amazon/aws/hooks/test_s3.py
@@ -1272,7 +1272,6 @@ def test_delete_bucket_if_bucket_not_exist(self, s3_bucket):
             assert mock_hook.delete_bucket(bucket_name="not-exists-bucket-name", force_delete=True)
         assert ctx.value.response["Error"]["Code"] == "NoSuchBucket"
 
-    @pytest.mark.db_test
     def test_provide_bucket_name(self):
         with mock.patch.object(
             S3Hook,
@@ -1728,7 +1727,6 @@ def test_delete_bucket_tagging_with_no_tags(self):
             hook.get_bucket_tagging(bucket_name="new_bucket")
 
 
-@pytest.mark.db_test
 @pytest.mark.parametrize(
     "key_kind, has_conn, has_bucket, precedence, expected",
     [
diff --git a/providers/amazon/tests/unit/amazon/aws/hooks/test_sagemaker_unified_studio.py b/providers/amazon/tests/unit/amazon/aws/hooks/test_sagemaker_unified_studio.py
index 179d997740c58..4d8c7f1995b03 100644
--- a/providers/amazon/tests/unit/amazon/aws/hooks/test_sagemaker_unified_studio.py
+++ b/providers/amazon/tests/unit/amazon/aws/hooks/test_sagemaker_unified_studio.py
@@ -28,8 +28,6 @@
 )
 from airflow.utils.session import create_session
 
-pytestmark = pytest.mark.db_test
-
 
 class TestSageMakerNotebookHook:
     @pytest.fixture(autouse=True)
@@ -174,6 +172,7 @@ def test_handle_unexpected_state(self):
         with pytest.raises(AirflowException, match=error_message):
             self.hook._handle_state(execution_id, status, error_message)
 
+    @pytest.mark.db_test
     @patch(
         "airflow.providers.amazon.aws.hooks.sagemaker_unified_studio.SageMakerNotebookHook._set_xcom_files"
     )
@@ -187,6 +186,7 @@ def test_set_xcom_files_negative_missing_context(self):
         with pytest.raises(AirflowException, match="context is required"):
             self.hook._set_xcom_files(self.files, {})
 
+    @pytest.mark.db_test
     @patch(
         "airflow.providers.amazon.aws.hooks.sagemaker_unified_studio.SageMakerNotebookHook._set_xcom_s3_path"
     )
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_athena.py b/providers/amazon/tests/unit/amazon/aws/links/test_athena.py
index 99a3536d17838..e1d9ba41b5f40 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_athena.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_athena.py
@@ -16,6 +16,8 @@
 # under the License.
 from __future__ import annotations
 
+import pytest
+
 from airflow.providers.amazon.aws.links.athena import AthenaQueryResultsLink
 from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
@@ -24,6 +26,8 @@
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
 
+pytestmark = pytest.mark.db_test
+
 
 class TestAthenaQueryResultsLink(BaseAwsLinksTestCase):
     link_class = AthenaQueryResultsLink
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_base_aws.py b/providers/amazon/tests/unit/amazon/aws/links/test_base_aws.py
index 98ebcde8c92da..6155f1747bff6 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_base_aws.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_base_aws.py
@@ -132,7 +132,6 @@ class OperatorAndTi(NamedTuple):
     task_instance: TaskInstance
 
 
-@pytest.mark.db_test
 @pytest.mark.need_serialized_dag
 class BaseAwsLinksTestCase:
     """Base class for AWS Provider links tests."""
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_batch.py b/providers/amazon/tests/unit/amazon/aws/links/test_batch.py
index 70cd65655bfec..38e6d573d1373 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_batch.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_batch.py
@@ -16,6 +16,8 @@
 # under the License.
 from __future__ import annotations
 
+import pytest
+
 from airflow.providers.amazon.aws.links.batch import (
     BatchJobDefinitionLink,
     BatchJobDetailsLink,
@@ -28,6 +30,8 @@
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
 
+pytestmark = pytest.mark.db_test
+
 
 class TestBatchJobDefinitionLink(BaseAwsLinksTestCase):
     link_class = BatchJobDefinitionLink
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_comprehend.py b/providers/amazon/tests/unit/amazon/aws/links/test_comprehend.py
index 9b88270b5bd30..c945f672949cd 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_comprehend.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_comprehend.py
@@ -27,6 +27,10 @@
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
 
+import pytest
+
+pytestmark = pytest.mark.db_test
+
 
 class TestComprehendPiiEntitiesDetectionLink(BaseAwsLinksTestCase):
     link_class = ComprehendPiiEntitiesDetectionLink
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_datasync.py b/providers/amazon/tests/unit/amazon/aws/links/test_datasync.py
index 79c8469b701f7..983de3b2299bd 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_datasync.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_datasync.py
@@ -24,6 +24,11 @@
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
 
+import pytest
+
+pytestmark = pytest.mark.db_test
+
+
 TASK_ID = "task-0b36221bf94ad2bdd"
 EXECUTION_ID = "exec-00000000000000004"
 
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_ec2.py b/providers/amazon/tests/unit/amazon/aws/links/test_ec2.py
index f451c910058cf..8d5c745230274 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_ec2.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_ec2.py
@@ -24,6 +24,10 @@
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
 
+import pytest
+
+pytestmark = pytest.mark.db_test
+
 
 class TestEC2InstanceLink(BaseAwsLinksTestCase):
     link_class = EC2InstanceLink
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_emr.py b/providers/amazon/tests/unit/amazon/aws/links/test_emr.py
index feda067f7cc7a..fc121d4fff062 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_emr.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_emr.py
@@ -36,6 +36,9 @@
 
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
+pytestmark = pytest.mark.db_test
+
+
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
 
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_glue.py b/providers/amazon/tests/unit/amazon/aws/links/test_glue.py
index 2b1f076e149df..bf49f23ae122a 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_glue.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_glue.py
@@ -24,6 +24,10 @@
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
 
+import pytest
+
+pytestmark = pytest.mark.db_test
+
 
 class TestGlueJobRunDetailsLink(BaseAwsLinksTestCase):
     link_class = GlueJobRunDetailsLink
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_logs.py b/providers/amazon/tests/unit/amazon/aws/links/test_logs.py
index 2c90eecd232ad..bb7a3277d3994 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_logs.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_logs.py
@@ -24,6 +24,10 @@
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
 
+import pytest
+
+pytestmark = pytest.mark.db_test
+
 
 class TestCloudWatchEventsLink(BaseAwsLinksTestCase):
     link_class = CloudWatchEventsLink
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker.py b/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker.py
index f08d7df93d509..7d79d931206ce 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker.py
@@ -25,6 +25,10 @@
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
 
+import pytest
+
+pytestmark = pytest.mark.db_test
+
 
 class TestSageMakerTransformDetailsLink(BaseAwsLinksTestCase):
     link_class = SageMakerTransformJobLink
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker_unified_studio.py b/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker_unified_studio.py
index bb749727323e2..487e116e0c795 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker_unified_studio.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker_unified_studio.py
@@ -24,6 +24,10 @@
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
 
+import pytest
+
+pytestmark = pytest.mark.db_test
+
 
 class TestSageMakerUnifiedStudioLink(BaseAwsLinksTestCase):
     link_class = SageMakerUnifiedStudioLink
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_step_function.py b/providers/amazon/tests/unit/amazon/aws/links/test_step_function.py
index acfad7e98e96c..6526a69011baf 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_step_function.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_step_function.py
@@ -29,6 +29,8 @@
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
 
+pytestmark = pytest.mark.db_test
+
 
 class TestStateMachineDetailsLink(BaseAwsLinksTestCase):
     link_class = StateMachineDetailsLink
diff --git a/providers/amazon/tests/unit/amazon/aws/sensors/test_dynamodb.py b/providers/amazon/tests/unit/amazon/aws/sensors/test_dynamodb.py
index 93ca01d26275d..f34acf3aac400 100644
--- a/providers/amazon/tests/unit/amazon/aws/sensors/test_dynamodb.py
+++ b/providers/amazon/tests/unit/amazon/aws/sensors/test_dynamodb.py
@@ -17,14 +17,11 @@
 
 from __future__ import annotations
 
-import pytest
 from moto import mock_aws
 
 from airflow.providers.amazon.aws.hooks.dynamodb import DynamoDBHook
 from airflow.providers.amazon.aws.sensors.dynamodb import DynamoDBValueSensor
 
-pytestmark = pytest.mark.db_test
-
 
 class TestDynamoDBValueSensor:
     def setup_method(self):
diff --git a/providers/amazon/tests/unit/amazon/aws/transfers/test_google_api_to_s3.py b/providers/amazon/tests/unit/amazon/aws/transfers/test_google_api_to_s3.py
index e8f97104f392f..52a9937344b74 100644
--- a/providers/amazon/tests/unit/amazon/aws/transfers/test_google_api_to_s3.py
+++ b/providers/amazon/tests/unit/amazon/aws/transfers/test_google_api_to_s3.py
@@ -26,7 +26,6 @@
 from airflow.providers.amazon.aws.transfers.google_api_to_s3 import GoogleApiToS3Operator
 
 # This test mocks json.dumps so it won't work for database isolation mode
-pytestmark = pytest.mark.db_test
 
 
 class TestGoogleApiToS3:
diff --git a/providers/amazon/tests/unit/amazon/aws/triggers/test_serialization.py b/providers/amazon/tests/unit/amazon/aws/triggers/test_serialization.py
index 446a799c482ad..8b5149ed343b6 100644
--- a/providers/amazon/tests/unit/amazon/aws/triggers/test_serialization.py
+++ b/providers/amazon/tests/unit/amazon/aws/triggers/test_serialization.py
@@ -64,8 +64,6 @@
 from airflow.providers.amazon.aws.utils.rds import RdsDbType
 from airflow.serialization.serialized_objects import BaseSerialization
 
-pytestmark = pytest.mark.db_test
-
 BATCH_JOB_ID = "job_id"
 
 TEST_CLUSTER_IDENTIFIER = "test-cluster"
diff --git a/providers/amazon/tests/unit/amazon/aws/utils/test_suppress.py b/providers/amazon/tests/unit/amazon/aws/utils/test_suppress.py
index 7323527f65559..744df42b6e6bb 100644
--- a/providers/amazon/tests/unit/amazon/aws/utils/test_suppress.py
+++ b/providers/amazon/tests/unit/amazon/aws/utils/test_suppress.py
@@ -22,7 +22,6 @@
 from airflow.providers.amazon.aws.utils.suppress import return_on_error
 
 
-@pytest.mark.db_test
 def test_suppress_function(caplog):
     @return_on_error("error")
     def fn(value: str, exc: Exception | None = None) -> str:
diff --git a/providers/amazon/tests/unit/amazon/aws/waiters/test_eks.py b/providers/amazon/tests/unit/amazon/aws/waiters/test_eks.py
index 6aad471868e6a..1b70fff4784df 100644
--- a/providers/amazon/tests/unit/amazon/aws/waiters/test_eks.py
+++ b/providers/amazon/tests/unit/amazon/aws/waiters/test_eks.py
@@ -19,6 +19,7 @@
 import json
 
 import boto3
+import pytest
 from moto import mock_aws
 
 from airflow.providers.amazon.aws.hooks.eks import EksHook
@@ -36,6 +37,7 @@ def test_service_waiters(self):
             assert waiter in hook.list_waiters()
             assert waiter in hook._list_custom_waiters()
 
+    @pytest.mark.db_test
     @mock_aws
     def test_existing_waiter_inherited(self):
         """

From d8327be0d3f30b65080e9a550ab94e5fe96710db Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sun, 22 Jun 2025 15:43:53 +0200
Subject: [PATCH 042/381] Add providers that currently do not have
 pytest.mark.db to pre-commit (#52021)

We do not want to add more `db` tests to the providers and there is a
number of providers where db_tests are already not present - so we
should prevent adding db_tests to those providers.
---
 .pre-commit-config.yaml | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 1ae406eb2fd2c..91e5216457944 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -579,7 +579,28 @@ repos:
         # and we want to keep them clean and only use non-db-tests
         files: >
             (?x)
-            ^providers/airbyte/.*\.py$
+            ^providers/airbyte/.*\.py$|
+            ^providers/cohere/.*\.py$|
+            ^providers/facebook/.*\.py$|
+            ^providers/grpc/.*\.py$|
+            ^providers/hashicorp/.*\.py$|
+            ^providers/influxdb/.*\.py$|
+            ^providers/jenkins/.*\.py$|
+            ^providers/neo4j/.*\.py$|
+            ^providers/odbc/.*\.py$|
+            ^providers/openai/.*\.py$|
+            ^providers/openfaas/.*\.py$|
+            ^providers/pgvector/.*\.py$|
+            ^providers/pinecone/.*\.py$|
+            ^providers/postgres/.*\.py$|
+            ^providers/presto/.*\.py$|
+            ^providers/segment/.*\.py$|
+            ^providers/sendgrid/.*\.py$|
+            ^providers/singularity/.*\.py$|
+            ^providers/teradata/.*\.py$|
+            ^providers/trino/.*\.py$|
+            ^providers/vertica/.*\.py$|
+            ^providers/yandex/.*\.py$
       - id: check-links-to-example-dags-do-not-use-hardcoded-versions
         name: Verify no hard-coded version in example dags
         description: The links to example dags should use |version| as version specification

From 57c1a4a52d6a9a3e3c8a8f065c12ed8e21876028 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Josef=20=C5=A0im=C3=A1nek?= <josef.simanek@gmail.com>
Date: Sun, 22 Jun 2025 15:50:51 +0200
Subject: [PATCH 043/381] Enhance ENV vars and conns visibility docs. (#52014)

---
 airflow-core/docs/howto/connection.rst | 11 +++++++++--
 airflow-core/docs/howto/variable.rst   | 14 ++++++++++++--
 2 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/airflow-core/docs/howto/connection.rst b/airflow-core/docs/howto/connection.rst
index c753e1342660f..84aa1648b8224 100644
--- a/airflow-core/docs/howto/connection.rst
+++ b/airflow-core/docs/howto/connection.rst
@@ -115,9 +115,16 @@ If serializing with Airflow URI:
 
 See :ref:`Connection URI format <connection-uri-format>` for more details on how to generate the a valid URI.
 
-.. note::
+Visibility in UI and CLI
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Connections defined through environment variables are **not displayed** in the Airflow UI or listed using ``airflow connections list``.
+
+This is because these connections are **resolved dynamically at runtime**, typically on the **worker** process executing your task. They are not stored in the metadata database or loaded in the webserver or scheduler environment.
+
+This supports secure deployment patterns where environment-based secrets (e.g. via ``.env`` files, Docker, or Kubernetes secrets) are injected only into runtime components like workers — and not into components exposed to users, like the webserver.
 
-    Connections defined in environment variables will not show up in the Airflow UI or using ``airflow connections list``.
+If you need connections to appear in the UI for visibility or editing, define them using the metadata database instead.
 
 
 Storing connections in a Secrets Backend
diff --git a/airflow-core/docs/howto/variable.rst b/airflow-core/docs/howto/variable.rst
index 20c36597c94e6..a07a04a154571 100644
--- a/airflow-core/docs/howto/variable.rst
+++ b/airflow-core/docs/howto/variable.rst
@@ -61,10 +61,20 @@ You can use them in your dags as:
 
     Single underscores surround ``VAR``.  This is in contrast with the way ``airflow.cfg``
     parameters are stored, where double underscores surround the config section name.
-    Variables set using Environment Variables would not appear in the Airflow UI but you will
-    be able to use them in your DAG file. Variables set using Environment Variables will also
+    Variables set using Environment Variables will also
     take precedence over variables defined in the Airflow UI.
 
+Visibility in UI and CLI
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Variables defined through environment variables are **not displayed** in the Airflow UI or listed using ``airflow variables list``.
+
+This is because these variables are **resolved dynamically at runtime**, typically on the **worker** process executing your task. They are not stored in the metadata database or loaded in the webserver or scheduler environment.
+
+This supports secure deployment patterns where environment-based secrets (e.g. via ``.env`` files, Docker, or Kubernetes secrets) are injected only into runtime components like workers — and not into components exposed to users, like the webserver.
+
+If you want variables to appear in the UI for visibility or editing, define them in the metadata database instead.
+
 Securing Variables
 ------------------
 

From 0c845f54b779d4545f55ffd1a1df238ae5b949ba Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sun, 22 Jun 2025 16:05:43 +0200
Subject: [PATCH 044/381] Remove db tests from zendesk provider (#52022)

Part of #52020
---
 .pre-commit-config.yaml                                    | 3 ++-
 providers/zendesk/tests/unit/zendesk/hooks/test_zendesk.py | 2 --
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 91e5216457944..2bc36c3076000 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -600,7 +600,8 @@ repos:
             ^providers/teradata/.*\.py$|
             ^providers/trino/.*\.py$|
             ^providers/vertica/.*\.py$|
-            ^providers/yandex/.*\.py$
+            ^providers/yandex/.*\.py$|
+            ^providers/zendesk/.*\.py$
       - id: check-links-to-example-dags-do-not-use-hardcoded-versions
         name: Verify no hard-coded version in example dags
         description: The links to example dags should use |version| as version specification
diff --git a/providers/zendesk/tests/unit/zendesk/hooks/test_zendesk.py b/providers/zendesk/tests/unit/zendesk/hooks/test_zendesk.py
index 677c63413b14b..6b00eb6268690 100644
--- a/providers/zendesk/tests/unit/zendesk/hooks/test_zendesk.py
+++ b/providers/zendesk/tests/unit/zendesk/hooks/test_zendesk.py
@@ -25,8 +25,6 @@
 from airflow.models import Connection
 from airflow.providers.zendesk.hooks.zendesk import ZendeskHook
 
-pytestmark = pytest.mark.db_test
-
 
 class TestZendeskHook:
     conn_id = "zendesk_conn_id_test"

From 64a03f66842977d0a7f341b146efc85d8edc9110 Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Sun, 22 Jun 2025 19:42:07 +0530
Subject: [PATCH 045/381] Replace usage of os.environ with conf_vars in kafka
 IT (#52025)

---
 .../apache/kafka/operators/test_consume.py    | 43 ++++++++-----------
 .../apache/kafka/operators/test_produce.py    | 38 ++++++----------
 2 files changed, 32 insertions(+), 49 deletions(-)

diff --git a/providers/apache/kafka/tests/integration/apache/kafka/operators/test_consume.py b/providers/apache/kafka/tests/integration/apache/kafka/operators/test_consume.py
index 772c9317fafab..ddca5fc502e17 100644
--- a/providers/apache/kafka/tests/integration/apache/kafka/operators/test_consume.py
+++ b/providers/apache/kafka/tests/integration/apache/kafka/operators/test_consume.py
@@ -18,19 +18,17 @@
 
 from __future__ import annotations
 
-import json
 import logging
-import os
 from typing import Any
 
 import pytest
 from confluent_kafka import Producer
 
-from airflow.models import Connection
-
 # Import Operator
 from airflow.providers.apache.kafka.operators.consume import ConsumeFromTopicOperator
 
+from tests_common.test_utils.config import conf_vars
+
 log = logging.getLogger(__name__)
 
 
@@ -52,32 +50,27 @@ def _basic_message_tester(message, test=None) -> Any:
 
 
 @pytest.mark.integration("kafka")
+@conf_vars(
+    {
+        (
+            "connections",
+            "operator.consumer.test.integration.test_1",
+        ): "kafka://broker:29092?socket.timeout.ms=10&bootstrap.servers=broker:29092&group.id=operator.consumer.test.integration.test_1&enable.auto.commit=False&auto.offset.reset=beginning",
+        (
+            "connections",
+            "operator.consumer.test.integration.test_2",
+        ): "kafka://broker:29092?socket.timeout.ms=10&bootstrap.servers=broker:29092&group.id=operator.consumer.test.integration.test_2&enable.auto.commit=False&auto.offset.reset=beginning",
+        (
+            "connections",
+            "operator.consumer.test.integration.test_3",
+        ): "kafka://broker:29092?socket.timeout.ms=10&bootstrap.servers=broker:29092&group.id=operator.consumer.test.integration.test_3&enable.auto.commit=False&auto.offset.reset=beginning",
+    }
+)
 class TestConsumeFromTopic:
     """
     test ConsumeFromTopicOperator
     """
 
-    def setup_method(self):
-        """Set up connections for each test method."""
-        # Create separate connections for each test
-        for num in (1, 2, 3):
-            conn = Connection(
-                conn_id=f"operator.consumer.test.integration.test_{num}",
-                conn_type="kafka",
-                extra=json.dumps(
-                    {
-                        "socket.timeout.ms": 10,
-                        "bootstrap.servers": "broker:29092",
-                        "group.id": f"operator.consumer.test.integration.test_{num}",
-                        "enable.auto.commit": False,
-                        "auto.offset.reset": "beginning",
-                    }
-                ),
-            )
-
-            env_var_name = f"AIRFLOW_CONN_{conn.conn_id.upper()}"
-            os.environ[env_var_name] = conn.get_uri()
-
     def test_consumer_operator_test_1(self):
         """test consumer works with string import"""
 
diff --git a/providers/apache/kafka/tests/integration/apache/kafka/operators/test_produce.py b/providers/apache/kafka/tests/integration/apache/kafka/operators/test_produce.py
index ee73c133b4195..ada93900ce67d 100644
--- a/providers/apache/kafka/tests/integration/apache/kafka/operators/test_produce.py
+++ b/providers/apache/kafka/tests/integration/apache/kafka/operators/test_produce.py
@@ -18,14 +18,14 @@
 
 import json
 import logging
-import os
 
 import pytest
 from confluent_kafka import Consumer
 
-from airflow.models import Connection
 from airflow.providers.apache.kafka.operators.produce import ProduceToTopicOperator
 
+from tests_common.test_utils.config import conf_vars
+
 log = logging.getLogger(__name__)
 
 
@@ -35,33 +35,23 @@ def _producer_function():
 
 
 @pytest.mark.integration("kafka")
+@conf_vars(
+    {
+        (
+            "connections",
+            "kafka_default_test_1",
+        ): "kafka://broker:29092?socket.timeout.ms=10&message.timeout.ms=10&group.id=operator.producer.test.integration.test_1",
+        (
+            "connections",
+            "kafka_default_test_2",
+        ): "kafka://broker:29092?socket.timeout.ms=10&message.timeout.ms=10&group.id=operator.producer.test.integration.test_2",
+    }
+)
 class TestProduceToTopic:
     """
     test ProduceToTopicOperator
     """
 
-    def setup_method(self):
-        """Set up connections for each test method."""
-        # Create separate connections for each test
-        for num in (1, 2):
-            group = f"operator.producer.test.integration.test_{num}"
-            conn = Connection(
-                conn_id=f"kafka_default_test_{num}",
-                conn_type="kafka",
-                extra=json.dumps(
-                    {
-                        "socket.timeout.ms": 10,
-                        "message.timeout.ms": 10,
-                        "bootstrap.servers": "broker:29092",
-                        "group.id": group,
-                    }
-                ),
-            )
-
-            # Set environment variable directly (like create_connection_without_db does)
-            env_var_name = f"AIRFLOW_CONN_{conn.conn_id.upper()}"
-            os.environ[env_var_name] = conn.get_uri()
-
     def test_producer_operator_test_1(self):
         GROUP = "operator.producer.test.integration.test_1"
         TOPIC = "operator.producer.test.integration.test_1"

From 2e8102a926be699a913f43d44f926bab6b0c52f8 Mon Sep 17 00:00:00 2001
From: Jens Scheffler <95105677+jscheffl@users.noreply.github.com>
Date: Sun, 22 Jun 2025 16:12:44 +0200
Subject: [PATCH 046/381] Revert "Revert "Remove FAB dependency from Edge3
 Provider (#51995)"" (#52000)

* Revert "Revert "Remove FAB dependency from Edge3 Provider (#51995)" (#51998)"

This reverts commit 46385565a7f2589b53c6353f4f8a500a333d364d.

* Attempt to pushup import to remove DB problems in pytests

* Fix lazy loading of DB models in plugin

* Mark test for DB
---
 providers/edge3/pyproject.toml                |   2 -
 .../edge3/plugins/edge_executor_plugin.py     | 362 +++++++++---------
 .../plugins/test_edge_executor_plugin.py      |   7 +-
 3 files changed, 190 insertions(+), 181 deletions(-)

diff --git a/providers/edge3/pyproject.toml b/providers/edge3/pyproject.toml
index c111dd424e901..302d6f2afafd8 100644
--- a/providers/edge3/pyproject.toml
+++ b/providers/edge3/pyproject.toml
@@ -58,7 +58,6 @@ requires-python = "~=3.9"
 # After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
 dependencies = [
     "apache-airflow>=2.10.0",
-    "apache-airflow-providers-fab>=1.5.3",
     "pydantic>=2.11.0",
     "retryhttp>=1.2.0,!=1.3.0",
 ]
@@ -68,7 +67,6 @@ dev = [
     "apache-airflow",
     "apache-airflow-task-sdk",
     "apache-airflow-devel-common",
-    "apache-airflow-providers-fab",
     # Additional devel dependencies (do not remove this line and add extra development dependencies)
 ]
 
diff --git a/providers/edge3/src/airflow/providers/edge3/plugins/edge_executor_plugin.py b/providers/edge3/src/airflow/providers/edge3/plugins/edge_executor_plugin.py
index 2d06f78e7b975..d48bc8d5744be 100644
--- a/providers/edge3/src/airflow/providers/edge3/plugins/edge_executor_plugin.py
+++ b/providers/edge3/src/airflow/providers/edge3/plugins/edge_executor_plugin.py
@@ -17,184 +17,194 @@
 
 from __future__ import annotations
 
-import re
-from datetime import datetime, timedelta
-from pathlib import Path
 from typing import TYPE_CHECKING, Any
 
-from flask import Blueprint, redirect, request, url_for
-from flask_appbuilder import BaseView, expose
-from markupsafe import Markup
-from sqlalchemy import select
-
 from airflow.configuration import conf
 from airflow.exceptions import AirflowConfigException
-from airflow.models.taskinstance import TaskInstanceState
 from airflow.plugins_manager import AirflowPlugin
 from airflow.providers.edge3.version_compat import AIRFLOW_V_3_0_PLUS
-from airflow.utils.state import State
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.api_fastapi.auth.managers.models.resource_details import AccessView
-    from airflow.providers.fab.www.auth import has_access_view
-
-else:
-    from airflow.auth.managers.models.resource_details import AccessView  # type: ignore[no-redef]
-    from airflow.www.auth import has_access_view  # type: ignore[no-redef]
 from airflow.utils.session import NEW_SESSION, provide_session
-from airflow.utils.yaml import safe_load
 
 if TYPE_CHECKING:
     from sqlalchemy.orm import Session
 
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.utils.db import DBLocks, create_global_lock
 
-def _get_airflow_2_api_endpoint() -> Blueprint:
-    from airflow.www.constants import SWAGGER_BUNDLE, SWAGGER_ENABLED
-    from airflow.www.extensions.init_views import _CustomErrorRequestBodyValidator, _LazyResolver
-
-    folder = Path(__file__).parents[1].resolve()  # this is airflow/providers/edge3/
-    with folder.joinpath("openapi", "edge_worker_api_v1.yaml").open() as f:
-        specification = safe_load(f)
-    from connexion import FlaskApi
-
-    bp = FlaskApi(
-        specification=specification,
-        resolver=_LazyResolver(),
-        base_path="/edge_worker/v1",
-        strict_validation=True,
-        options={"swagger_ui": SWAGGER_ENABLED, "swagger_path": SWAGGER_BUNDLE.__fspath__()},
-        validate_responses=True,
-        validator_map={"body": _CustomErrorRequestBodyValidator},
-    ).blueprint
-    # Need to exempt CSRF to make API usable
-    from airflow.www.app import csrf
-
-    csrf.exempt(bp)
-    return bp
-
-
-def _get_api_endpoint() -> dict[str, Any]:
-    from airflow.providers.edge3.worker_api.app import create_edge_worker_api_app
-
-    return {
-        "app": create_edge_worker_api_app(),
-        "url_prefix": "/edge_worker/v1",
-        "name": "Airflow Edge Worker API",
-    }
-
-
-def _state_token(state):
-    """Return a formatted string with HTML for a given State."""
-    color = State.color(state)
-    fg_color = State.color_fg(state)
-    return Markup(
-        """
-        <span class="label" style="color:{fg_color}; background-color:{color};"
-            title="Current State: {state}">{state}</span>
-        """
-    ).format(color=color, state=state, fg_color=fg_color)
-
-
-def modify_maintenance_comment_on_update(maintenance_comment: str | None, username: str) -> str:
-    if maintenance_comment:
-        if re.search(
-            r"^\[[-\d:\s]+\] - .+ put node into maintenance mode\r?\nComment:.*", maintenance_comment
-        ):
-            return re.sub(
-                r"^\[[-\d:\s]+\] - .+ put node into maintenance mode\r?\nComment:",
-                f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment:",
-                maintenance_comment,
-            )
-        if re.search(r"^\[[-\d:\s]+\] - .+ updated maintenance mode\r?\nComment:.*", maintenance_comment):
-            return re.sub(
-                r"^\[[-\d:\s]+\] - .+ updated maintenance mode\r?\nComment:",
-                f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment:",
-                maintenance_comment,
-            )
-        return f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment: {maintenance_comment}"
-    return f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment:"
-
-
-# registers airflow/providers/edge3/plugins/templates as a Jinja template folder
-template_bp = Blueprint(
-    "template_blueprint",
-    __name__,
-    template_folder="templates",
-)
-
-
-class EdgeWorkerJobs(BaseView):
-    """Simple view to show Edge Worker jobs."""
-
-    default_view = "jobs"
-
-    @expose("/jobs")
-    @has_access_view(AccessView.JOBS)
     @provide_session
-    def jobs(self, session: Session = NEW_SESSION):
-        from airflow.providers.edge3.models.edge_job import EdgeJobModel
-
-        jobs = session.scalars(select(EdgeJobModel).order_by(EdgeJobModel.queued_dttm)).all()
-        html_states = {
-            str(state): _state_token(str(state)) for state in TaskInstanceState.__members__.values()
+    def _get_api_endpoint(session: Session = NEW_SESSION) -> dict[str, Any]:
+        # Ensure all required DB modeals are created before starting the API
+        with create_global_lock(session=session, lock=DBLocks.MIGRATIONS):
+            engine = session.get_bind().engine
+            from airflow.providers.edge3.models.edge_job import EdgeJobModel
+            from airflow.providers.edge3.models.edge_logs import EdgeLogsModel
+            from airflow.providers.edge3.models.edge_worker import EdgeWorkerModel
+
+            EdgeJobModel.metadata.create_all(engine)
+            EdgeLogsModel.metadata.create_all(engine)
+            EdgeWorkerModel.metadata.create_all(engine)
+
+        from airflow.providers.edge3.worker_api.app import create_edge_worker_api_app
+
+        return {
+            "app": create_edge_worker_api_app(),
+            "url_prefix": "/edge_worker/v1",
+            "name": "Airflow Edge Worker API",
         }
-        return self.render_template("edge_worker_jobs.html", jobs=jobs, html_states=html_states)
-
-
-class EdgeWorkerHosts(BaseView):
-    """Simple view to show Edge Worker status."""
 
-    default_view = "status"
-
-    @expose("/status")
-    @has_access_view(AccessView.JOBS)
-    @provide_session
-    def status(self, session: Session = NEW_SESSION):
-        from airflow.providers.edge3.models.edge_worker import EdgeWorkerModel
-
-        hosts = session.scalars(select(EdgeWorkerModel).order_by(EdgeWorkerModel.worker_name)).all()
-        five_min_ago = datetime.now() - timedelta(minutes=5)
-        return self.render_template("edge_worker_hosts.html", hosts=hosts, five_min_ago=five_min_ago)
-
-    @expose("/status/maintenance/<string:worker_name>/on", methods=["POST"])
-    @has_access_view(AccessView.JOBS)
-    def worker_to_maintenance(self, worker_name: str):
-        from flask_login import current_user
-
-        from airflow.providers.edge3.models.edge_worker import request_maintenance
-
-        maintenance_comment = request.form.get("maintenance_comment")
-        maintenance_comment = f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {current_user.username} put node into maintenance mode\nComment: {maintenance_comment}"
-        request_maintenance(worker_name, maintenance_comment)
-        return redirect(url_for("EdgeWorkerHosts.status"))
-
-    @expose("/status/maintenance/<string:worker_name>/off", methods=["POST"])
-    @has_access_view(AccessView.JOBS)
-    def remove_worker_from_maintenance(self, worker_name: str):
-        from airflow.providers.edge3.models.edge_worker import exit_maintenance
-
-        exit_maintenance(worker_name)
-        return redirect(url_for("EdgeWorkerHosts.status"))
-
-    @expose("/status/maintenance/<string:worker_name>/remove", methods=["POST"])
-    @has_access_view(AccessView.JOBS)
-    def remove_worker(self, worker_name: str):
-        from airflow.providers.edge3.models.edge_worker import remove_worker
-
-        remove_worker(worker_name)
-        return redirect(url_for("EdgeWorkerHosts.status"))
-
-    @expose("/status/maintenance/<string:worker_name>/change_comment", methods=["POST"])
-    @has_access_view(AccessView.JOBS)
-    def change_maintenance_comment(self, worker_name: str):
-        from flask_login import current_user
-
-        from airflow.providers.edge3.models.edge_worker import change_maintenance_comment
-
-        maintenance_comment = request.form.get("maintenance_comment")
-        maintenance_comment = modify_maintenance_comment_on_update(maintenance_comment, current_user.username)
-        change_maintenance_comment(worker_name, maintenance_comment)
-        return redirect(url_for("EdgeWorkerHosts.status"))
+else:
+    # This is for back-compatability with Airflow 2.x and we only make this
+    # to prevents dependencies and breaking imports in Airflow 3.x
+    import re
+    from datetime import datetime, timedelta
+    from pathlib import Path
+
+    from flask import Blueprint, redirect, request, url_for
+    from flask_appbuilder import BaseView, expose
+    from markupsafe import Markup
+    from sqlalchemy import select
+
+    from airflow.auth.managers.models.resource_details import AccessView
+    from airflow.models.taskinstance import TaskInstanceState
+    from airflow.utils.state import State
+    from airflow.utils.yaml import safe_load
+    from airflow.www.auth import has_access_view
+
+    def _get_airflow_2_api_endpoint() -> Blueprint:
+        from airflow.www.app import csrf
+        from airflow.www.constants import SWAGGER_BUNDLE, SWAGGER_ENABLED
+        from airflow.www.extensions.init_views import _CustomErrorRequestBodyValidator, _LazyResolver
+
+        folder = Path(__file__).parents[1].resolve()  # this is airflow/providers/edge3/
+        with folder.joinpath("openapi", "edge_worker_api_v1.yaml").open() as f:
+            specification = safe_load(f)
+        from connexion import FlaskApi
+
+        bp = FlaskApi(
+            specification=specification,
+            resolver=_LazyResolver(),
+            base_path="/edge_worker/v1",
+            strict_validation=True,
+            options={"swagger_ui": SWAGGER_ENABLED, "swagger_path": SWAGGER_BUNDLE.__fspath__()},
+            validate_responses=True,
+            validator_map={"body": _CustomErrorRequestBodyValidator},
+        ).blueprint
+        # Need to exempt CSRF to make API usable
+        csrf.exempt(bp)
+        return bp
+
+    def _state_token(state):
+        """Return a formatted string with HTML for a given State."""
+        color = State.color(state)
+        fg_color = State.color_fg(state)
+        return Markup(
+            """
+            <span class="label" style="color:{fg_color}; background-color:{color};"
+                title="Current State: {state}">{state}</span>
+            """
+        ).format(color=color, state=state, fg_color=fg_color)
+
+    def modify_maintenance_comment_on_update(maintenance_comment: str | None, username: str) -> str:
+        if maintenance_comment:
+            if re.search(
+                r"^\[[-\d:\s]+\] - .+ put node into maintenance mode\r?\nComment:.*", maintenance_comment
+            ):
+                return re.sub(
+                    r"^\[[-\d:\s]+\] - .+ put node into maintenance mode\r?\nComment:",
+                    f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment:",
+                    maintenance_comment,
+                )
+            if re.search(r"^\[[-\d:\s]+\] - .+ updated maintenance mode\r?\nComment:.*", maintenance_comment):
+                return re.sub(
+                    r"^\[[-\d:\s]+\] - .+ updated maintenance mode\r?\nComment:",
+                    f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment:",
+                    maintenance_comment,
+                )
+            return f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment: {maintenance_comment}"
+        return (
+            f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {username} updated maintenance mode\nComment:"
+        )
+
+    # registers airflow/providers/edge3/plugins/templates as a Jinja template folder
+    template_bp = Blueprint(
+        "template_blueprint",
+        __name__,
+        template_folder="templates",
+    )
+
+    class EdgeWorkerJobs(BaseView):
+        """Simple view to show Edge Worker jobs."""
+
+        default_view = "jobs"
+
+        @expose("/jobs")
+        @has_access_view(AccessView.JOBS)
+        @provide_session
+        def jobs(self, session: Session = NEW_SESSION):
+            from airflow.providers.edge3.models.edge_job import EdgeJobModel
+
+            jobs = session.scalars(select(EdgeJobModel).order_by(EdgeJobModel.queued_dttm)).all()
+            html_states = {
+                str(state): _state_token(str(state)) for state in TaskInstanceState.__members__.values()
+            }
+            return self.render_template("edge_worker_jobs.html", jobs=jobs, html_states=html_states)
+
+    class EdgeWorkerHosts(BaseView):
+        """Simple view to show Edge Worker status."""
+
+        default_view = "status"
+
+        @expose("/status")
+        @has_access_view(AccessView.JOBS)
+        @provide_session
+        def status(self, session: Session = NEW_SESSION):
+            from airflow.providers.edge3.models.edge_worker import EdgeWorkerModel
+
+            hosts = session.scalars(select(EdgeWorkerModel).order_by(EdgeWorkerModel.worker_name)).all()
+            five_min_ago = datetime.now() - timedelta(minutes=5)
+            return self.render_template("edge_worker_hosts.html", hosts=hosts, five_min_ago=five_min_ago)
+
+        @expose("/status/maintenance/<string:worker_name>/on", methods=["POST"])
+        @has_access_view(AccessView.JOBS)
+        def worker_to_maintenance(self, worker_name: str):
+            from flask_login import current_user
+
+            from airflow.providers.edge3.models.edge_worker import request_maintenance
+
+            maintenance_comment = request.form.get("maintenance_comment")
+            maintenance_comment = f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] - {current_user.username} put node into maintenance mode\nComment: {maintenance_comment}"
+            request_maintenance(worker_name, maintenance_comment)
+            return redirect(url_for("EdgeWorkerHosts.status"))
+
+        @expose("/status/maintenance/<string:worker_name>/off", methods=["POST"])
+        @has_access_view(AccessView.JOBS)
+        def remove_worker_from_maintenance(self, worker_name: str):
+            from airflow.providers.edge3.models.edge_worker import exit_maintenance
+
+            exit_maintenance(worker_name)
+            return redirect(url_for("EdgeWorkerHosts.status"))
+
+        @expose("/status/maintenance/<string:worker_name>/remove", methods=["POST"])
+        @has_access_view(AccessView.JOBS)
+        def remove_worker(self, worker_name: str):
+            from airflow.providers.edge3.models.edge_worker import remove_worker
+
+            remove_worker(worker_name)
+            return redirect(url_for("EdgeWorkerHosts.status"))
+
+        @expose("/status/maintenance/<string:worker_name>/change_comment", methods=["POST"])
+        @has_access_view(AccessView.JOBS)
+        def change_maintenance_comment(self, worker_name: str):
+            from flask_login import current_user
+
+            from airflow.providers.edge3.models.edge_worker import change_maintenance_comment
+
+            maintenance_comment = request.form.get("maintenance_comment")
+            maintenance_comment = modify_maintenance_comment_on_update(
+                maintenance_comment, current_user.username
+            )
+            change_maintenance_comment(worker_name, maintenance_comment)
+            return redirect(url_for("EdgeWorkerHosts.status"))
 
 
 # Check if EdgeExecutor is actually loaded
@@ -209,21 +219,19 @@ class EdgeExecutorPlugin(AirflowPlugin):
 
     name = "edge_executor"
     if EDGE_EXECUTOR_ACTIVE:
-        appbuilder_views = [
-            {
-                "name": "Edge Worker Jobs",
-                "category": "Admin",
-                "view": EdgeWorkerJobs(),
-            },
-            {
-                "name": "Edge Worker Hosts",
-                "category": "Admin",
-                "view": EdgeWorkerHosts(),
-            },
-        ]
-
         if AIRFLOW_V_3_0_PLUS:
             fastapi_apps = [_get_api_endpoint()]
-            flask_blueprints = [template_bp]
         else:
+            appbuilder_views = [
+                {
+                    "name": "Edge Worker Jobs",
+                    "category": "Admin",
+                    "view": EdgeWorkerJobs(),
+                },
+                {
+                    "name": "Edge Worker Hosts",
+                    "category": "Admin",
+                    "view": EdgeWorkerHosts(),
+                },
+            ]
             flask_blueprints = [_get_airflow_2_api_endpoint(), template_bp]
diff --git a/providers/edge3/tests/unit/edge3/plugins/test_edge_executor_plugin.py b/providers/edge3/tests/unit/edge3/plugins/test_edge_executor_plugin.py
index 52e837387502e..99e5e24722e77 100644
--- a/providers/edge3/tests/unit/edge3/plugins/test_edge_executor_plugin.py
+++ b/providers/edge3/tests/unit/edge3/plugins/test_edge_executor_plugin.py
@@ -43,6 +43,7 @@ def test_plugin_inactive():
         assert len(rep.appbuilder_views) == 0
 
 
+@pytest.mark.db_test
 def test_plugin_active():
     with conf_vars({("edge", "api_enabled"): "true"}):
         importlib.reload(edge_executor_plugin)
@@ -54,11 +55,12 @@ def test_plugin_active():
 
         rep = EdgeExecutorPlugin()
         assert EDGE_EXECUTOR_ACTIVE
-        assert len(rep.appbuilder_views) == 2
         if AIRFLOW_V_3_0_PLUS:
-            assert len(rep.flask_blueprints) == 1
+            assert len(rep.appbuilder_views) == 0
+            assert len(rep.flask_blueprints) == 0
             assert len(rep.fastapi_apps) == 1
         else:
+            assert len(rep.appbuilder_views) == 2
             assert len(rep.flask_blueprints) == 2
 
 
@@ -73,6 +75,7 @@ def test_plugin_is_airflow_plugin(plugin):
     assert isinstance(plugin, AirflowPlugin)
 
 
+@pytest.mark.skipif(AIRFLOW_V_3_0_PLUS, reason="Plugin endpoint is not used in Airflow 3.0+")
 @pytest.mark.parametrize(
     "initial_comment, expected_comment",
     [

From e6df44857ddfd882a4e2a72f8c4d2e201e0bdfbe Mon Sep 17 00:00:00 2001
From: "Alyssa Mhie M. Matila" <ammmatila@addu.edu.ph>
Date: Sun, 22 Jun 2025 22:15:18 +0800
Subject: [PATCH 047/381] remove directed acyclic graphs (#51982)

* remove directed acyclic graphs

* update dags

Co-authored-by: Wei Lee <weilee.rx@gmail.com>

* update to workflows (Dags)

* capitalization consistency

* Update README.md

Co-authored-by: Wei Lee <weilee.rx@gmail.com>

* with pre-commit

---------

Co-authored-by: Wei Lee <weilee.rx@gmail.com>
---
 README.md                | 2 +-
 generated/PYPI_README.md | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index f58b2747e0642..d3b31364b94cc 100644
--- a/README.md
+++ b/README.md
@@ -48,7 +48,7 @@
 
 When workflows are defined as code, they become more maintainable, versionable, testable, and collaborative.
 
-Use Airflow to author workflows as directed acyclic graphs (DAGs) of tasks. The Airflow scheduler executes your tasks on an array of workers while following the specified dependencies. Rich command line utilities make performing complex surgeries on DAGs a snap. The rich user interface makes it easy to visualize pipelines running in production, monitor progress, and troubleshoot issues when needed.
+Use Airflow to author workflows (Dags) that orchestrate tasks. The Airflow scheduler executes your tasks on an array of workers while following the specified dependencies. Rich command line utilities make performing complex surgeries on DAGs a snap. The rich user interface makes it easy to visualize pipelines running in production, monitor progress, and troubleshoot issues when needed.
 
 <!-- END Apache Airflow, please keep comment here to allow auto update of PyPI readme.md -->
 <!-- START doctoc generated TOC please keep comment here to allow auto update -->
diff --git a/generated/PYPI_README.md b/generated/PYPI_README.md
index 97983ada39bb1..247aca59627da 100644
--- a/generated/PYPI_README.md
+++ b/generated/PYPI_README.md
@@ -50,7 +50,7 @@ PROJECT BY THE `generate-pypi-readme` PRE-COMMIT. YOUR CHANGES HERE WILL BE AUTO
 
 When workflows are defined as code, they become more maintainable, versionable, testable, and collaborative.
 
-Use Airflow to author workflows as directed acyclic graphs (DAGs) of tasks. The Airflow scheduler executes your tasks on an array of workers while following the specified dependencies. Rich command line utilities make performing complex surgeries on DAGs a snap. The rich user interface makes it easy to visualize pipelines running in production, monitor progress, and troubleshoot issues when needed.
+Use Airflow to author workflows (Dags) that orchestrate tasks. The Airflow scheduler executes your tasks on an array of workers while following the specified dependencies. Rich command line utilities make performing complex surgeries on DAGs a snap. The rich user interface makes it easy to visualize pipelines running in production, monitor progress, and troubleshoot issues when needed.
 
 ## Requirements
 

From 28d35bcf261dc1f91858c5f2bbb454b6d178c89e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Josef=20=C5=A0im=C3=A1nek?= <josef.simanek@gmail.com>
Date: Sun, 22 Jun 2025 16:18:25 +0200
Subject: [PATCH 048/381] Fix ENV variable in ui CONTRIBUTING.md, ensure app
 runs on expected port. (#52023)

---
 .../airflow/api_fastapi/auth/managers/simple/ui/package.json    | 2 +-
 airflow-core/src/airflow/ui/CONTRIBUTING.md                     | 2 +-
 airflow-core/src/airflow/ui/package.json                        | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/package.json b/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/package.json
index 00eaa21191f91..f15fc2cad77a0 100644
--- a/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/package.json
+++ b/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/package.json
@@ -4,7 +4,7 @@
   "version": "0.0.0",
   "type": "module",
   "scripts": {
-    "dev": "vite --port 5174",
+    "dev": "vite --port 5174 --strictPort",
     "build": "vite build",
     "lint": "eslint --quiet && tsc --p tsconfig.app.json",
     "lint:fix": "eslint --fix && tsc --p tsconfig.app.json",
diff --git a/airflow-core/src/airflow/ui/CONTRIBUTING.md b/airflow-core/src/airflow/ui/CONTRIBUTING.md
index 43f5ac043be42..a7a2ae9831e1d 100644
--- a/airflow-core/src/airflow/ui/CONTRIBUTING.md
+++ b/airflow-core/src/airflow/ui/CONTRIBUTING.md
@@ -26,7 +26,7 @@ With Breeze:
 
 Manually:
 
-- Have the `dev-mode` environment variable enabled
+- Have the `DEV_MODE` environment variable set to `true` when starting airflow api-server
 - Run `pnpm install && pnpm dev`
 - Note: Make sure to access the UI via the Airflow localhost port (8080 or 28080) and not the vite port (5173)
 
diff --git a/airflow-core/src/airflow/ui/package.json b/airflow-core/src/airflow/ui/package.json
index 2429adc35a0c7..e8eab0f1fd7f2 100644
--- a/airflow-core/src/airflow/ui/package.json
+++ b/airflow-core/src/airflow/ui/package.json
@@ -5,7 +5,7 @@
   "type": "module",
   "homepage": "/ui",
   "scripts": {
-    "dev": "vite",
+    "dev": "vite --port 5173 --strictPort",
     "build": "vite build",
     "lint": "eslint --quiet && tsc --p tsconfig.app.json",
     "lint:fix": "eslint --fix && tsc --p tsconfig.app.json",

From 62d5be96b80ab2be6cec842823381be5dcbea103 Mon Sep 17 00:00:00 2001
From: Dominik <105610163+dominikhei@users.noreply.github.com>
Date: Sun, 22 Jun 2025 17:50:44 +0200
Subject: [PATCH 049/381] Removed pytest.mark_db_test from the docker provider
 completely (#52027)

* Removed pytest.mark_db_test from the docker provider completely

* Adjusted the .pre-commit-config.yaml according to review

* Adjusted the pre-commit-config to remove the docker privider from check-pytest-mark-db-test-in-providers
---
 .../unit/docker/decorators/test_docker.py     | 20 ++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/providers/docker/tests/unit/docker/decorators/test_docker.py b/providers/docker/tests/unit/docker/decorators/test_docker.py
index dba160afab98c..335fbac4cab69 100644
--- a/providers/docker/tests/unit/docker/decorators/test_docker.py
+++ b/providers/docker/tests/unit/docker/decorators/test_docker.py
@@ -36,9 +36,6 @@
 
 from tests_common.test_utils.markers import skip_if_force_lowest_dependencies_marker
 
-pytestmark = pytest.mark.db_test
-
-
 DEFAULT_DATE = timezone.datetime(2021, 9, 1)
 DILL_INSTALLED = find_spec("dill") is not None
 DILL_MARKER = pytest.mark.skipif(not DILL_INSTALLED, reason="`dill` is not installed")
@@ -47,6 +44,7 @@
 
 
 class TestDockerDecorator:
+    @pytest.mark.db_test
     def test_basic_docker_operator(self, dag_maker, session):
         @task.docker(image="python:3.9-slim", auto_remove="force")
         def f():
@@ -63,6 +61,7 @@ def f():
         ti = dr.get_task_instances(session=session)[0]
         assert len(ti.xcom_pull()) == 100
 
+    @pytest.mark.db_test
     def test_basic_docker_operator_with_param(self, dag_maker, session):
         @task.docker(image="python:3.9-slim", auto_remove="force")
         def f(num_results):
@@ -81,6 +80,7 @@ def f(num_results):
         assert isinstance(result, list)
         assert len(result) == 50
 
+    @pytest.mark.db_test
     def test_basic_docker_operator_with_template_fields(self, dag_maker):
         @task.docker(image="python:3.9-slim", container_name="python_{{dag_run.dag_id}}", auto_remove="force")
         def f():
@@ -94,6 +94,7 @@ def f():
         rendered = ti.render_templates()
         assert rendered.container_name == f"python_{dr.dag_id}"
 
+    @pytest.mark.db_test
     def test_basic_docker_operator_multiple_output(self, dag_maker, session):
         @task.docker(image="python:3.9-slim", multiple_outputs=True, auto_remove="force")
         def return_dict(number: int):
@@ -113,6 +114,7 @@ def return_dict(number: int):
         assert ti.xcom_pull(key="43", session=session) == 43
         assert ti.xcom_pull(session=session) == {"number": test_number + 1, "43": 43}
 
+    @pytest.mark.db_test
     def test_no_return(self, dag_maker, session):
         @task.docker(image="python:3.9-slim", auto_remove="force")
         def f():
@@ -143,6 +145,7 @@ def do_run():
         assert len(dag.task_ids) == 21
         assert dag.task_ids[-1] == "do_run__20"
 
+    @pytest.mark.db_test
     @pytest.mark.parametrize(
         "kwargs, actual_exit_code, expected_state",
         [
@@ -183,6 +186,7 @@ def f(exit_code):
             ti = dr.get_task_instances(session=session)[0]
             assert ti.state == expected_state
 
+    @pytest.mark.db_test
     def test_setup_decorator_with_decorated_docker_task(self, dag_maker):
         @setup
         @task.docker(image="python:3.9-slim", auto_remove="force")
@@ -196,6 +200,7 @@ def f():
         setup_task = dag.task_group.children["f"]
         assert setup_task.is_setup
 
+    @pytest.mark.db_test
     def test_teardown_decorator_with_decorated_docker_task(self, dag_maker):
         @teardown
         @task.docker(image="python:3.9-slim", auto_remove="force")
@@ -209,6 +214,7 @@ def f():
         teardown_task = dag.task_group.children["f"]
         assert teardown_task.is_teardown
 
+    @pytest.mark.db_test
     @pytest.mark.parametrize("on_failure_fail_dagrun", [True, False])
     def test_teardown_decorator_with_decorated_docker_task_and_on_failure_fail_arg(
         self, dag_maker, on_failure_fail_dagrun
@@ -226,6 +232,7 @@ def f():
         assert teardown_task.is_teardown
         assert teardown_task.on_failure_fail_dagrun is on_failure_fail_dagrun
 
+    @pytest.mark.db_test
     @pytest.mark.parametrize(
         "serializer",
         [
@@ -277,6 +284,7 @@ def g():
         assert some_task.serializer == clone_of_docker_operator.serializer
         assert some_task.pickling_library is clone_of_docker_operator.pickling_library
 
+    @pytest.mark.db_test
     def test_respect_docker_host_env(self, monkeypatch, dag_maker):
         monkeypatch.setenv("DOCKER_HOST", "tcp://docker-host-from-env:2375")
 
@@ -289,6 +297,7 @@ def f():
 
         assert ret.operator.docker_url == "tcp://docker-host-from-env:2375"
 
+    @pytest.mark.db_test
     def test_docker_host_env_empty(self, monkeypatch, dag_maker):
         monkeypatch.setenv("DOCKER_HOST", "")
 
@@ -303,6 +312,7 @@ def f():
         # We want to ensure the same behavior.
         assert ret.operator.docker_url == "unix://var/run/docker.sock"
 
+    @pytest.mark.db_test
     def test_docker_host_env_unset(self, monkeypatch, dag_maker):
         monkeypatch.delenv("DOCKER_HOST", raising=False)
 
@@ -315,6 +325,7 @@ def f():
 
         assert ret.operator.docker_url == "unix://var/run/docker.sock"
 
+    @pytest.mark.db_test
     def test_failing_task(self, dag_maker, session):
         """Test regression #39319
 
@@ -347,6 +358,7 @@ def f():
         last_line_of_docker_operator_log = log_content.splitlines()[-1]
         assert "ValueError: This task is expected to fail" in last_line_of_docker_operator_log
 
+    @pytest.mark.db_test
     def test_invalid_serializer(self, dag_maker):
         @task.docker(image="python:3.9-slim", auto_remove="force", serializer="airflow")
         def f():
@@ -388,6 +400,7 @@ def f(): ...
                 f()
         assert f"Unable to import `{serializer}` module." in caplog.text
 
+    @pytest.mark.db_test
     @CLOUDPICKLE_MARKER
     def test_add_cloudpickle(self, dag_maker):
         @task.docker(image="python:3.9-slim", auto_remove="force", serializer="cloudpickle")
@@ -398,6 +411,7 @@ def f():
         with dag_maker():
             f()
 
+    @pytest.mark.db_test
     @DILL_MARKER
     def test_add_dill(self, dag_maker):
         @task.docker(image="python:3.9-slim", auto_remove="force", serializer="dill")

From 25b0cb7c138d4ce3d9906a6b28ad87a7e772989e Mon Sep 17 00:00:00 2001
From: Jens Scheffler <95105677+jscheffl@users.noreply.github.com>
Date: Sun, 22 Jun 2025 17:52:09 +0200
Subject: [PATCH 050/381] Clean DB Test flag from SMTP where Connection is used
 (#52029)

---
 providers/smtp/tests/unit/smtp/hooks/test_smtp.py | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/providers/smtp/tests/unit/smtp/hooks/test_smtp.py b/providers/smtp/tests/unit/smtp/hooks/test_smtp.py
index 9c601fdce54f5..c3c33a0b3f372 100644
--- a/providers/smtp/tests/unit/smtp/hooks/test_smtp.py
+++ b/providers/smtp/tests/unit/smtp/hooks/test_smtp.py
@@ -28,10 +28,6 @@
 
 from airflow.models import Connection
 from airflow.providers.smtp.hooks.smtp import SmtpHook
-from airflow.utils.session import create_session
-
-pytestmark = pytest.mark.db_test
-
 
 smtplib_string = "airflow.providers.smtp.hooks.smtp.smtplib"
 
@@ -317,8 +313,6 @@ def test_send_mime_noauth(self, mock_smtp, create_connection_without_db):
             smtp_hook.send_email_smtp(to="to", subject="subject", html_content="content", from_email="from")
         mock_smtp.assert_called_once_with(host="smtp_server_address", port=587, timeout=30)
         assert not mock_smtp.login.called
-        with create_session() as session:
-            session.query(Connection).filter(Connection.id == conn.id).delete()
 
     @patch("smtplib.SMTP_SSL")
     @patch("smtplib.SMTP")

From a227d228b1935111fd84c417a01d9cea3c17a6fd Mon Sep 17 00:00:00 2001
From: Dominik <105610163+dominikhei@users.noreply.github.com>
Date: Sun, 22 Jun 2025 17:55:20 +0200
Subject: [PATCH 051/381] removed usage of pytest.mark.db_test from dbt tests
 (#52031)

---
 providers/dbt/cloud/tests/unit/dbt/cloud/hooks/test_dbt.py     | 2 --
 providers/dbt/cloud/tests/unit/dbt/cloud/operators/test_dbt.py | 3 +--
 providers/dbt/cloud/tests/unit/dbt/cloud/sensors/test_dbt.py   | 3 ---
 3 files changed, 1 insertion(+), 7 deletions(-)

diff --git a/providers/dbt/cloud/tests/unit/dbt/cloud/hooks/test_dbt.py b/providers/dbt/cloud/tests/unit/dbt/cloud/hooks/test_dbt.py
index b32877a7efea5..07f2eaf8f18d3 100644
--- a/providers/dbt/cloud/tests/unit/dbt/cloud/hooks/test_dbt.py
+++ b/providers/dbt/cloud/tests/unit/dbt/cloud/hooks/test_dbt.py
@@ -38,8 +38,6 @@
 )
 from airflow.utils import timezone
 
-pytestmark = pytest.mark.db_test
-
 ACCOUNT_ID_CONN = "account_id_conn"
 NO_ACCOUNT_ID_CONN = "no_account_id_conn"
 SINGLE_TENANT_CONN = "single_tenant_conn"
diff --git a/providers/dbt/cloud/tests/unit/dbt/cloud/operators/test_dbt.py b/providers/dbt/cloud/tests/unit/dbt/cloud/operators/test_dbt.py
index 9fe925ec54aa8..a6b2a0d5ce867 100644
--- a/providers/dbt/cloud/tests/unit/dbt/cloud/operators/test_dbt.py
+++ b/providers/dbt/cloud/tests/unit/dbt/cloud/operators/test_dbt.py
@@ -37,8 +37,6 @@
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
 
-pytestmark = pytest.mark.db_test
-
 DEFAULT_DATE = timezone.datetime(2021, 1, 1)
 TASK_ID = "run_job_op"
 ACCOUNT_ID_CONN = "account_id_conn"
@@ -647,6 +645,7 @@ def test_custom_trigger_reason(self, mock_run_job, conn_id, account_id):
         [(ACCOUNT_ID_CONN, None), (NO_ACCOUNT_ID_CONN, ACCOUNT_ID)],
         ids=["default_account", "explicit_account"],
     )
+    @pytest.mark.db_test
     def test_run_job_operator_link(
         self, conn_id, account_id, create_task_instance_of_operator, request, mock_supervisor_comms
     ):
diff --git a/providers/dbt/cloud/tests/unit/dbt/cloud/sensors/test_dbt.py b/providers/dbt/cloud/tests/unit/dbt/cloud/sensors/test_dbt.py
index 1bec86d4489b9..13be664c78415 100644
--- a/providers/dbt/cloud/tests/unit/dbt/cloud/sensors/test_dbt.py
+++ b/providers/dbt/cloud/tests/unit/dbt/cloud/sensors/test_dbt.py
@@ -30,9 +30,6 @@
 from airflow.providers.dbt.cloud.sensors.dbt import DbtCloudJobRunSensor
 from airflow.providers.dbt.cloud.triggers.dbt import DbtCloudRunJobTrigger
 
-pytestmark = pytest.mark.db_test
-
-
 ACCOUNT_ID = 11111
 RUN_ID = 5555
 TOKEN = "token"

From c8a76496f123474c4f214be6aac839d4b942c1c2 Mon Sep 17 00:00:00 2001
From: Hiroki <59229050+Hiroki-Engineer@users.noreply.github.com>
Date: Mon, 23 Jun 2025 01:33:18 +0900
Subject: [PATCH 052/381] Remove pytest db marker from datadog (#52030)

---
 .pre-commit-config.yaml                                      | 1 +
 providers/datadog/tests/unit/datadog/sensors/test_datadog.py | 2 --
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 2bc36c3076000..fd0216d28c42e 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -581,6 +581,7 @@ repos:
             (?x)
             ^providers/airbyte/.*\.py$|
             ^providers/cohere/.*\.py$|
+            ^providers/datadog/.*\.py$|
             ^providers/facebook/.*\.py$|
             ^providers/grpc/.*\.py$|
             ^providers/hashicorp/.*\.py$|
diff --git a/providers/datadog/tests/unit/datadog/sensors/test_datadog.py b/providers/datadog/tests/unit/datadog/sensors/test_datadog.py
index 2dc81e01a81c8..971f607c8c023 100644
--- a/providers/datadog/tests/unit/datadog/sensors/test_datadog.py
+++ b/providers/datadog/tests/unit/datadog/sensors/test_datadog.py
@@ -26,8 +26,6 @@
 from airflow.models import Connection
 from airflow.providers.datadog.sensors.datadog import DatadogSensor
 
-pytestmark = pytest.mark.db_test
-
 at_least_one_event = [
     {
         "alert_type": "info",

From 5c05b8ae002e926d46037ba862aa54acc2455473 Mon Sep 17 00:00:00 2001
From: Idris Adebisi <104902482+hardeybisey@users.noreply.github.com>
Date: Sun, 22 Jun 2025 17:34:28 +0100
Subject: [PATCH 053/381] Remove pytest.mark.db_test where possible from
 databricks provider. (#52033)

---
 .../tests/unit/databricks/hooks/test_databricks_sql.py        | 2 --
 .../tests/unit/databricks/operators/test_databricks.py        | 4 ----
 .../unit/databricks/operators/test_databricks_workflow.py     | 2 --
 .../tests/unit/databricks/plugins/test_databricks_workflow.py | 4 ----
 4 files changed, 12 deletions(-)

diff --git a/providers/databricks/tests/unit/databricks/hooks/test_databricks_sql.py b/providers/databricks/tests/unit/databricks/hooks/test_databricks_sql.py
index 244ec605a1796..4fd5d80c6521e 100644
--- a/providers/databricks/tests/unit/databricks/hooks/test_databricks_sql.py
+++ b/providers/databricks/tests/unit/databricks/hooks/test_databricks_sql.py
@@ -35,8 +35,6 @@
 from airflow.providers.databricks.hooks.databricks_sql import DatabricksSqlHook, create_timeout_thread
 from airflow.utils.session import provide_session
 
-pytestmark = pytest.mark.db_test
-
 TASK_ID = "databricks-sql-operator"
 DEFAULT_CONN_ID = "databricks_default"
 HOST = "xx.cloud.databricks.com"
diff --git a/providers/databricks/tests/unit/databricks/operators/test_databricks.py b/providers/databricks/tests/unit/databricks/operators/test_databricks.py
index 183f33a7f6629..7c221a4d8f61d 100644
--- a/providers/databricks/tests/unit/databricks/operators/test_databricks.py
+++ b/providers/databricks/tests/unit/databricks/operators/test_databricks.py
@@ -48,8 +48,6 @@
 )
 from airflow.providers.databricks.utils import databricks as utils
 
-pytestmark = pytest.mark.db_test
-
 DATE = "2017-04-20"
 TASK_ID = "databricks-operator"
 DEFAULT_CONN_ID = "databricks_default"
@@ -812,7 +810,6 @@ def test_init_with_merging(self):
         )
         assert expected == utils.normalise_json_content(op.json)
 
-    @pytest.mark.db_test
     def test_init_with_templating(self):
         json = {
             "new_cluster": NEW_CLUSTER,
@@ -1250,7 +1247,6 @@ def test_init_with_merging(self):
 
         assert expected == op.json
 
-    @pytest.mark.db_test
     def test_init_with_templating(self):
         json = {"notebook_params": NOTEBOOK_PARAMS, "jar_params": TEMPLATED_JAR_PARAMS}
 
diff --git a/providers/databricks/tests/unit/databricks/operators/test_databricks_workflow.py b/providers/databricks/tests/unit/databricks/operators/test_databricks_workflow.py
index 60a6d343ba31e..0a4c3ee1f9438 100644
--- a/providers/databricks/tests/unit/databricks/operators/test_databricks_workflow.py
+++ b/providers/databricks/tests/unit/databricks/operators/test_databricks_workflow.py
@@ -34,8 +34,6 @@
 from airflow.providers.standard.operators.empty import EmptyOperator
 from airflow.utils import timezone
 
-pytestmark = pytest.mark.db_test
-
 DEFAULT_DATE = timezone.datetime(2021, 1, 1)
 
 
diff --git a/providers/databricks/tests/unit/databricks/plugins/test_databricks_workflow.py b/providers/databricks/tests/unit/databricks/plugins/test_databricks_workflow.py
index 3c6f57c1d9d5d..f79dbcbcaeb12 100644
--- a/providers/databricks/tests/unit/databricks/plugins/test_databricks_workflow.py
+++ b/providers/databricks/tests/unit/databricks/plugins/test_databricks_workflow.py
@@ -152,7 +152,6 @@ def app():
         yield app
 
 
-@pytest.mark.db_test
 def test_get_task_instance(app):
     with app.app_context():
         operator = Mock()
@@ -170,7 +169,6 @@ def test_get_task_instance(app):
             assert result == dag_run
 
 
-@pytest.mark.db_test
 def test_get_return_url_dag_id_run_id(app):
     dag_id = "example_dag"
     run_id = "example_run"
@@ -182,7 +180,6 @@ def test_get_return_url_dag_id_run_id(app):
     assert actual_url == expected_url, f"Expected {expected_url}, got {actual_url}"
 
 
-@pytest.mark.db_test
 def test_workflow_job_run_link(app):
     with app.app_context():
         link = WorkflowJobRunLink()
@@ -220,7 +217,6 @@ def test_workflow_job_run_link(app):
 @pytest.mark.skipif(
     RUNNING_TESTS_AGAINST_AIRFLOW_PACKAGES, reason="Web plugin test doesn't work when not against sources"
 )
-@pytest.mark.db_test
 def test_workflow_job_repair_single_failed_link(app):
     with app.app_context():
         link = WorkflowJobRepairSingleTaskLink()

From 5a0abaec48d562d3679db3f8af0748c1593ef6b2 Mon Sep 17 00:00:00 2001
From: Bugra Ozturk <bugraoz93@users.noreply.github.com>
Date: Sun, 22 Jun 2025 22:16:27 +0200
Subject: [PATCH 054/381] bugfix(ui): remove Commented Console Log (#52036)

---
 .../src/airflow/ui/src/components/FlexibleForm/FieldRow.tsx     | 2 --
 1 file changed, 2 deletions(-)

diff --git a/airflow-core/src/airflow/ui/src/components/FlexibleForm/FieldRow.tsx b/airflow-core/src/airflow/ui/src/components/FlexibleForm/FieldRow.tsx
index f2596b9ac734e..3125201ceb176 100644
--- a/airflow-core/src/airflow/ui/src/components/FlexibleForm/FieldRow.tsx
+++ b/airflow-core/src/airflow/ui/src/components/FlexibleForm/FieldRow.tsx
@@ -38,8 +38,6 @@ export const FieldRow = ({ name, onUpdate: rowOnUpdate }: FlexibleFormElementPro
   );
   const [isValid, setIsValid] = useState(!(isRequired(param) && param.value === null));
 
-  // console.log(param);
-
   const onUpdate = (value?: string, _error?: unknown) => {
     if (Boolean(_error)) {
       setIsValid(false);

From a3ebc3e294fc27c989769e708d79a0bd99a1f937 Mon Sep 17 00:00:00 2001
From: Aritra Basu <24430013+aritra24@users.noreply.github.com>
Date: Mon, 23 Jun 2025 02:07:00 +0530
Subject: [PATCH 055/381] Remove pytest.mark.db_test: Git (#52035)

* Remove pytest.mark.db_test: Git

Part of: #52020

* Fixed up the db tests in git

One test still remains `test_repo_url_access_missing_connection_doesnt_error`
which checks for non existance of connection, which doesn't
work due to the false check will hit the DB to access a session.

* Update test_git.py
---
 .../git/tests/unit/git/bundles/test_git.py    | 44 +++++++++----------
 .../git/tests/unit/git/hooks/test_git.py      |  7 +--
 2 files changed, 24 insertions(+), 27 deletions(-)

diff --git a/providers/git/tests/unit/git/bundles/test_git.py b/providers/git/tests/unit/git/bundles/test_git.py
index 929f790115db9..b6392d58533e5 100644
--- a/providers/git/tests/unit/git/bundles/test_git.py
+++ b/providers/git/tests/unit/git/bundles/test_git.py
@@ -34,9 +34,6 @@
 from airflow.providers.git.hooks.git import GitHook
 
 from tests_common.test_utils.config import conf_vars
-from tests_common.test_utils.db import clear_db_connections
-
-pytestmark = pytest.mark.db_test
 
 
 @pytest.fixture(autouse=True)
@@ -70,7 +67,7 @@ def git_repo(tmp_path_factory):
 class TestGitDagBundle:
     @classmethod
     def teardown_class(cls) -> None:
-        clear_db_connections()
+        return
 
     # TODO: Potential performance issue, converted setup_class to a setup_connections function level fixture
     @pytest.fixture(autouse=True)
@@ -414,16 +411,17 @@ def test_refresh_with_git_connection(self, mock_gitRepo):
         ],
     )
     @mock.patch("airflow.providers.git.bundles.git.Repo")
-    def test_view_url(self, mock_gitrepo, repo_url, extra_conn_kwargs, expected_url, session):
-        session.query(Connection).delete()
-        conn = Connection(
-            conn_id="my_git_connection",
-            host=repo_url,
-            conn_type="git",
-            **(extra_conn_kwargs or {}),
+    def test_view_url(
+        self, mock_gitrepo, repo_url, extra_conn_kwargs, expected_url, create_connection_without_db
+    ):
+        create_connection_without_db(
+            Connection(
+                conn_id="my_git_connection",
+                host=repo_url,
+                conn_type="git",
+                **(extra_conn_kwargs or {}),
+            )
         )
-        session.add(conn)
-        session.commit()
         bundle = GitDagBundle(
             name="test",
             git_conn_id="my_git_connection",
@@ -501,16 +499,17 @@ def test_view_url(self, mock_gitrepo, repo_url, extra_conn_kwargs, expected_url,
         ],
     )
     @mock.patch("airflow.providers.git.bundles.git.Repo")
-    def test_view_url_subdir(self, mock_gitrepo, repo_url, extra_conn_kwargs, expected_url, session):
-        session.query(Connection).delete()
-        conn = Connection(
-            conn_id="git_default",
-            host=repo_url,
-            conn_type="git",
-            **(extra_conn_kwargs or {}),
+    def test_view_url_subdir(
+        self, mock_gitrepo, repo_url, extra_conn_kwargs, expected_url, create_connection_without_db
+    ):
+        create_connection_without_db(
+            Connection(
+                conn_id="git_default",
+                host=repo_url,
+                conn_type="git",
+                **(extra_conn_kwargs or {}),
+            )
         )
-        session.add(conn)
-        session.commit()
         bundle = GitDagBundle(
             name="test",
             tracking_ref="main",
@@ -558,6 +557,7 @@ def test_clone_repo_no_such_path_error(self, mock_githook):
 
                 assert "Repository path: %s not found" in str(exc_info.value)
 
+    @pytest.mark.db_test
     @patch.dict(os.environ, {"AIRFLOW_CONN_MY_TEST_GIT": '{"host": "something"}'})
     @pytest.mark.parametrize(
         "conn_id, expected_hook_type",
diff --git a/providers/git/tests/unit/git/hooks/test_git.py b/providers/git/tests/unit/git/hooks/test_git.py
index db07f0bf4e349..eb1089f623a5f 100644
--- a/providers/git/tests/unit/git/hooks/test_git.py
+++ b/providers/git/tests/unit/git/hooks/test_git.py
@@ -27,9 +27,6 @@
 from airflow.providers.git.hooks.git import GitHook
 
 from tests_common.test_utils.config import conf_vars
-from tests_common.test_utils.db import clear_db_connections
-
-pytestmark = pytest.mark.db_test
 
 
 @pytest.fixture(autouse=True)
@@ -67,7 +64,7 @@ def git_repo(tmp_path_factory):
 class TestGitHook:
     @classmethod
     def teardown_class(cls) -> None:
-        clear_db_connections()
+        return
 
     # TODO: Potential performance issue, converted setup_class to a setup_connections function level fixture
     @pytest.fixture(autouse=True)
@@ -123,7 +120,7 @@ def test_correct_repo_urls(self, conn_id, hook_kwargs, expected_repo_url):
         hook = GitHook(git_conn_id=conn_id, **hook_kwargs)
         assert hook.repo_url == expected_repo_url
 
-    def test_env_var_with_configure_hook_env(self, session, create_connection_without_db):
+    def test_env_var_with_configure_hook_env(self, create_connection_without_db):
         default_hook = GitHook(git_conn_id=CONN_DEFAULT)
         with default_hook.configure_hook_env():
             assert default_hook.env == {

From 596a1cc83c779f4d276dfdd4d4fe124aab154634 Mon Sep 17 00:00:00 2001
From: "Zhen-Lun (Kevin) Hong" <zhenlun.hong01@gmail.com>
Date: Mon, 23 Jun 2025 04:42:43 +0800
Subject: [PATCH 056/381] tests: remove pytest db markers from google provider
 (#52039)

---
 .../unit/google/cloud/hooks/test_compute_ssh.py    | 14 +++++++++++---
 .../tests/unit/google/cloud/hooks/test_dataflow.py |  1 -
 .../tests/unit/google/cloud/hooks/test_dataform.py |  3 ---
 .../tests/unit/google/cloud/hooks/test_gcs.py      |  1 -
 .../unit/google/cloud/operators/test_bigquery.py   | 11 ++++++++---
 .../unit/google/cloud/operators/test_dataflow.py   | 11 +++++++----
 .../google/cloud/operators/test_datapipeline.py    |  1 -
 .../unit/google/cloud/operators/test_functions.py  |  1 -
 .../google/cloud/secrets/test_secret_manager.py    |  2 --
 .../google/cloud/transfers/test_gcs_to_bigquery.py |  9 ++++++++-
 .../google/cloud/transfers/test_local_to_gcs.py    |  2 --
 .../unit/google/cloud/triggers/test_bigquery.py    |  3 ---
 .../unit/google/cloud/triggers/test_dataproc.py    | 12 +++++++++---
 .../cloud/triggers/test_kubernetes_engine.py       |  1 -
 .../cloud/utils/test_credentials_provider.py       |  1 -
 .../unit/google/common/hooks/test_discovery_api.py |  2 --
 16 files changed, 43 insertions(+), 32 deletions(-)

diff --git a/providers/google/tests/unit/google/cloud/hooks/test_compute_ssh.py b/providers/google/tests/unit/google/cloud/hooks/test_compute_ssh.py
index a11613e6bc734..e069fbf824540 100644
--- a/providers/google/tests/unit/google/cloud/hooks/test_compute_ssh.py
+++ b/providers/google/tests/unit/google/cloud/hooks/test_compute_ssh.py
@@ -30,9 +30,6 @@
 from airflow.providers.google.cloud.hooks.compute_ssh import ComputeEngineSSHHook
 from airflow.providers.google.cloud.hooks.os_login import OSLoginHook
 
-pytestmark = pytest.mark.db_test
-
-
 TEST_PROJECT_ID = "test-project-id"
 
 TEST_INSTANCE_NAME = "test-instance"
@@ -56,6 +53,7 @@ def test_os_login_hook(self, mocker):
         assert ComputeEngineSSHHook(gcp_conn_id="gcpssh")._oslogin_hook
         mock_os_login_hook.assert_called_with(gcp_conn_id="gcpssh")
 
+    @pytest.mark.db_test
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.ComputeEngineHook")
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.paramiko")
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh._GCloudAuthorizedSSHClient")
@@ -112,6 +110,7 @@ def test_get_conn_default_configuration(self, mock_ssh_client, mock_paramiko, mo
             ]
         )
 
+    @pytest.mark.db_test
     @pytest.mark.parametrize(
         "exception_type, error_message",
         [(SSHException, r"Error occurred when establishing SSH connection using Paramiko")],
@@ -156,6 +155,7 @@ def test_get_conn_default_configuration_test_exceptions(
         assert error_message in caplog.text
         assert "Failed establish SSH connection" in caplog.text
 
+    @pytest.mark.db_test
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.ComputeEngineHook")
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.OSLoginHook")
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.paramiko")
@@ -214,6 +214,7 @@ def test_get_conn_authorize_using_instance_metadata(
 
         mock_os_login_hook.return_value.import_ssh_public_key.assert_not_called()
 
+    @pytest.mark.db_test
     @pytest.mark.parametrize(
         "exception_type, error_message",
         [
@@ -257,6 +258,7 @@ def test_get_conn_authorize_using_instance_metadata_test_exception(
         assert error_message in caplog.text
         assert "Failed establish SSH connection" in caplog.text
 
+    @pytest.mark.db_test
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.ComputeEngineHook")
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.OSLoginHook")
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.paramiko")
@@ -287,6 +289,7 @@ def test_get_conn_authorize_using_instance_metadata_append_ssh_keys(
             zone=TEST_ZONE,
         )
 
+    @pytest.mark.db_test
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.ComputeEngineHook")
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.OSLoginHook")
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.paramiko")
@@ -315,6 +318,7 @@ def test_get_conn_private_ip(self, mock_ssh_client, mock_paramiko, mock_os_login
             hostname=INTERNAL_IP, look_for_keys=mock.ANY, pkey=mock.ANY, sock=mock.ANY, username=mock.ANY
         )
 
+    @pytest.mark.db_test
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.ComputeEngineHook")
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.OSLoginHook")
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.paramiko")
@@ -343,6 +347,7 @@ def test_get_conn_custom_hostname(
             username=mock.ANY,
         )
 
+    @pytest.mark.db_test
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.ComputeEngineHook")
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.OSLoginHook")
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.paramiko")
@@ -372,6 +377,7 @@ def test_get_conn_iap_tunnel(self, mock_ssh_client, mock_paramiko, mock_os_login
             f"--zone={TEST_ZONE} --verbosity=warning"
         )
 
+    @pytest.mark.db_test
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.ComputeEngineHook")
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.OSLoginHook")
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.paramiko")
@@ -407,6 +413,7 @@ def test_get_conn_iap_tunnel_with_impersonation_chain(
             f"--zone={TEST_ZONE} --verbosity=warning --impersonate-service-account={IMPERSONATION_CHAIN}"
         )
 
+    @pytest.mark.db_test
     @pytest.mark.parametrize(
         "exception_type, error_message",
         [(SSHException, r"Error occurred when establishing SSH connection using Paramiko")],
@@ -442,6 +449,7 @@ def test_get_conn_iap_tunnel_test_exception(
         assert error_message in caplog.text
         assert "Failed establish SSH connection" in caplog.text
 
+    @pytest.mark.db_test
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.ComputeEngineHook")
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.OSLoginHook")
     @mock.patch("airflow.providers.google.cloud.hooks.compute_ssh.paramiko")
diff --git a/providers/google/tests/unit/google/cloud/hooks/test_dataflow.py b/providers/google/tests/unit/google/cloud/hooks/test_dataflow.py
index 8a13b1d8485c0..fbc09d77cbd3d 100644
--- a/providers/google/tests/unit/google/cloud/hooks/test_dataflow.py
+++ b/providers/google/tests/unit/google/cloud/hooks/test_dataflow.py
@@ -1695,7 +1695,6 @@ def callback(job_id):
         )
         assert found_job_id is None
 
-    @pytest.mark.db_test
     @mock.patch("subprocess.Popen")
     @mock.patch("select.select")
     def test_dataflow_wait_for_done_logging(self, mock_select, mock_popen, caplog):
diff --git a/providers/google/tests/unit/google/cloud/hooks/test_dataform.py b/providers/google/tests/unit/google/cloud/hooks/test_dataform.py
index f96f0d5f6fb44..24607e93a0cd8 100644
--- a/providers/google/tests/unit/google/cloud/hooks/test_dataform.py
+++ b/providers/google/tests/unit/google/cloud/hooks/test_dataform.py
@@ -28,9 +28,6 @@
 
 from unit.google.cloud.utils.base_gcp_mock import mock_base_gcp_hook_default_project_id
 
-pytestmark = pytest.mark.db_test
-
-
 BASE_STRING = "airflow.providers.google.common.hooks.base_google.{}"
 DATAFORM_STRING = "airflow.providers.google.cloud.hooks.dataform.{}"
 
diff --git a/providers/google/tests/unit/google/cloud/hooks/test_gcs.py b/providers/google/tests/unit/google/cloud/hooks/test_gcs.py
index b705c0eb6c280..c4ba58fdb24b8 100644
--- a/providers/google/tests/unit/google/cloud/hooks/test_gcs.py
+++ b/providers/google/tests/unit/google/cloud/hooks/test_gcs.py
@@ -596,7 +596,6 @@ def test_delete_bucket(self, mock_service):
         mock_service.return_value.bucket.assert_called_once_with(test_bucket, user_project=None)
         mock_service.return_value.bucket.return_value.delete.assert_called_once()
 
-    @pytest.mark.db_test
     @mock.patch(GCS_STRING.format("GCSHook.get_conn"))
     def test_delete_nonexisting_bucket(self, mock_service, caplog):
         mock_service.return_value.bucket.return_value.delete.side_effect = exceptions.NotFound(
diff --git a/providers/google/tests/unit/google/cloud/operators/test_bigquery.py b/providers/google/tests/unit/google/cloud/operators/test_bigquery.py
index 6d1007fb79115..114c6f899a595 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_bigquery.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_bigquery.py
@@ -82,9 +82,6 @@
 from airflow.utils.task_group import TaskGroup
 from airflow.utils.timezone import datetime
 
-pytestmark = pytest.mark.db_test
-
-
 TASK_ID = "test-bq-generic-operator"
 TEST_DATASET = "test-dataset"
 TEST_DATASET_LOCATION = "EU"
@@ -1820,6 +1817,7 @@ def test_bigquery_insert_job_operator_async(self, mock_hook, create_task_instanc
             "Trigger is not a BigQueryInsertJobTrigger"
         )
 
+    @pytest.mark.db_test
     @mock.patch("airflow.providers.google.cloud.operators.bigquery.BigQueryHook")
     def test_bigquery_insert_job_operator_async_inherits_hook_project_id_when_non_given(
         self, mock_hook, create_task_instance_of_operator
@@ -2202,6 +2200,7 @@ def test_task_label_too_big(self):
         op._add_job_labels()
         assert "labels" not in configuration
 
+    @pytest.mark.db_test
     def test_dag_label_too_big(self, dag_maker):
         configuration = {
             "query": {
@@ -2219,6 +2218,7 @@ def test_dag_label_too_big(self, dag_maker):
         op._add_job_labels()
         assert "labels" not in configuration
 
+    @pytest.mark.db_test
     def test_labels_lowercase(self, dag_maker):
         configuration = {
             "query": {
@@ -2237,6 +2237,7 @@ def test_labels_lowercase(self, dag_maker):
         assert configuration["labels"]["airflow-dag"] == "yelling_dag_name"
         assert configuration["labels"]["airflow-task"] == "yelling_task_id"
 
+    @pytest.mark.db_test
     def test_labels_starting_with_numbers(self, dag_maker):
         configuration = {
             "query": {
@@ -2255,6 +2256,7 @@ def test_labels_starting_with_numbers(self, dag_maker):
         assert configuration["labels"]["airflow-dag"] == "123_dag"
         assert configuration["labels"]["airflow-task"] == "123_task"
 
+    @pytest.mark.db_test
     def test_labels_starting_with_underscore(self, dag_maker):
         configuration = {
             "query": {
@@ -2274,6 +2276,7 @@ def test_labels_starting_with_underscore(self, dag_maker):
         assert configuration["labels"]["airflow-dag"] == "_dag_starting_with_underscore"
         assert configuration["labels"]["airflow-task"] == "_task_starting_with_underscore"
 
+    @pytest.mark.db_test
     def test_labels_starting_with_hyphen(self, dag_maker):
         configuration = {
             "query": {
@@ -2309,6 +2312,7 @@ def test_labels_invalid_names(self, dag_maker):
         op._add_job_labels()
         assert "labels" not in configuration
 
+    @pytest.mark.db_test
     def test_labels_replace_dots_with_hyphens(self, dag_maker):
         configuration = {
             "query": {
@@ -2341,6 +2345,7 @@ def test_labels_replace_dots_with_hyphens(self, dag_maker):
         assert configuration["labels"]["airflow-dag"] == "dag_with_taskgroup"
         assert configuration["labels"]["airflow-task"] == "task_group-task_name"
 
+    @pytest.mark.db_test
     def test_labels_with_task_group_prefix_group_id(self, dag_maker):
         configuration = {
             "query": {
diff --git a/providers/google/tests/unit/google/cloud/operators/test_dataflow.py b/providers/google/tests/unit/google/cloud/operators/test_dataflow.py
index 89b5f9180838f..a9bc77b02b6d3 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_dataflow.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_dataflow.py
@@ -575,7 +575,6 @@ def test_response_invalid(self):
         with pytest.raises(AirflowException):
             DataflowCreatePipelineOperator(**init_kwargs).execute(mock.MagicMock())
 
-    @pytest.mark.db_test
     @mock.patch("airflow.providers.google.cloud.operators.dataflow.DataflowHook")
     def test_response_409(self, mock_hook, create_operator):
         """
@@ -595,7 +594,6 @@ def test_response_409(self, mock_hook, create_operator):
         )
 
 
-@pytest.mark.db_test
 class TestDataflowRunPipelineOperator:
     @pytest.fixture
     def run_operator(self):
@@ -627,6 +625,7 @@ def test_execute(self, data_pipeline_hook_mock, run_operator):
             location=TEST_LOCATION,
         )
 
+    @pytest.mark.db_test
     def test_invalid_data_pipeline_name(self):
         """
         Test that AirflowException is raised if Run Operator is not given a data pipeline name.
@@ -641,6 +640,7 @@ def test_invalid_data_pipeline_name(self):
         with pytest.raises(AirflowException):
             DataflowRunPipelineOperator(**init_kwargs).execute(mock.MagicMock())
 
+    @pytest.mark.db_test
     def test_invalid_project_id(self):
         """
         Test that AirflowException is raised if Run Operator is not given a project ID.
@@ -655,6 +655,7 @@ def test_invalid_project_id(self):
         with pytest.raises(AirflowException):
             DataflowRunPipelineOperator(**init_kwargs).execute(mock.MagicMock())
 
+    @pytest.mark.db_test
     def test_invalid_location(self):
         """
         Test that AirflowException is raised if Run Operator is not given a location.
@@ -685,7 +686,6 @@ def test_invalid_response(self):
                 "error": {"message": "example error"}
             }
 
-    @pytest.mark.db_test
     @mock.patch("airflow.providers.google.cloud.operators.dataflow.DataflowHook")
     def test_response_404(self, mock_hook, run_operator):
         """
@@ -702,7 +702,6 @@ def test_response_404(self, mock_hook, run_operator):
         )
 
 
-@pytest.mark.db_test
 class TestDataflowDeletePipelineOperator:
     @pytest.fixture
     def run_operator(self):
@@ -736,6 +735,7 @@ def test_execute(self, data_pipeline_hook_mock, run_operator):
             location=TEST_LOCATION,
         )
 
+    @pytest.mark.db_test
     def test_invalid_data_pipeline_name(self):
         """
         Test that AirflowException is raised if Delete Operator is not given a data pipeline name.
@@ -750,6 +750,7 @@ def test_invalid_data_pipeline_name(self):
         with pytest.raises(AirflowException):
             DataflowDeletePipelineOperator(**init_kwargs).execute(mock.MagicMock())
 
+    @pytest.mark.db_test
     def test_invalid_project_id(self):
         """
         Test that AirflowException is raised if Delete Operator is not given a project ID.
@@ -764,6 +765,7 @@ def test_invalid_project_id(self):
         with pytest.raises(AirflowException):
             DataflowDeletePipelineOperator(**init_kwargs).execute(mock.MagicMock())
 
+    @pytest.mark.db_test
     def test_invalid_location(self):
         """
         Test that AirflowException is raised if Delete Operator is not given a location.
@@ -778,6 +780,7 @@ def test_invalid_location(self):
         with pytest.raises(AirflowException):
             DataflowDeletePipelineOperator(**init_kwargs).execute(mock.MagicMock())
 
+    @pytest.mark.db_test
     def test_invalid_response(self):
         """
         Test that AirflowException is raised if Delete Operator fails execution and returns error.
diff --git a/providers/google/tests/unit/google/cloud/operators/test_datapipeline.py b/providers/google/tests/unit/google/cloud/operators/test_datapipeline.py
index c2963d184e1d1..42dae66464433 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_datapipeline.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_datapipeline.py
@@ -84,7 +84,6 @@ def test_execute(self, mock_hook, create_operator):
         )
 
 
-@pytest.mark.db_test
 class TestDataflowRunPipelineOperator:
     @pytest.fixture
     def run_operator(self):
diff --git a/providers/google/tests/unit/google/cloud/operators/test_functions.py b/providers/google/tests/unit/google/cloud/operators/test_functions.py
index fa859894b746e..b075236589364 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_functions.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_functions.py
@@ -342,7 +342,6 @@ def test_invalid_source_code_union_field__execute(self, source_code, message):
         with pytest.raises(AirflowException, match=message):
             op.execute(None)
 
-    @pytest.mark.db_test
     @pytest.mark.parametrize(
         "source_code, message",
         [
diff --git a/providers/google/tests/unit/google/cloud/secrets/test_secret_manager.py b/providers/google/tests/unit/google/cloud/secrets/test_secret_manager.py
index 4740e917b4bf2..3d3cae0029470 100644
--- a/providers/google/tests/unit/google/cloud/secrets/test_secret_manager.py
+++ b/providers/google/tests/unit/google/cloud/secrets/test_secret_manager.py
@@ -28,8 +28,6 @@
 from airflow.models import Connection
 from airflow.providers.google.cloud.secrets.secret_manager import CloudSecretManagerBackend
 
-pytestmark = pytest.mark.db_test
-
 CREDENTIALS = "test-creds"
 KEY_FILE = "test-file.json"
 PROJECT_ID = "test-project-id"
diff --git a/providers/google/tests/unit/google/cloud/transfers/test_gcs_to_bigquery.py b/providers/google/tests/unit/google/cloud/transfers/test_gcs_to_bigquery.py
index c9a033b16d6d2..f27b972d9e44b 100644
--- a/providers/google/tests/unit/google/cloud/transfers/test_gcs_to_bigquery.py
+++ b/providers/google/tests/unit/google/cloud/transfers/test_gcs_to_bigquery.py
@@ -1620,13 +1620,13 @@ def create_task_instance(create_task_instance_of_operator, session):
     )
 
 
-@pytest.mark.db_test
 class TestAsyncGCSToBigQueryOperator:
     def _set_execute_complete(self, session, ti, **next_kwargs):
         ti.next_method = "execute_complete"
         ti.next_kwargs = next_kwargs
         session.flush()
 
+    @pytest.mark.db_test
     @mock.patch(GCS_TO_BQ_PATH.format("BigQueryHook"))
     def test_execute_without_external_table_async_should_execute_successfully(
         self, hook, create_task_instance, session
@@ -1658,6 +1658,7 @@ def test_execute_without_external_table_async_should_execute_successfully(
         trigger_cls = session.scalar(select(Trigger.classpath).where(Trigger.id == ti.trigger_id))
         assert trigger_cls == "airflow.providers.google.cloud.triggers.bigquery.BigQueryInsertJobTrigger"
 
+    @pytest.mark.db_test
     def test_execute_without_external_table_async_should_throw_ex_when_event_status_error(
         self, create_task_instance, session
     ):
@@ -1710,6 +1711,7 @@ def test_execute_logging_without_external_table_async_should_execute_successfull
             "%s completed with response %s ", "test-gcs-to-bq-operator", "Job completed"
         )
 
+    @pytest.mark.db_test
     @mock.patch(GCS_TO_BQ_PATH.format("BigQueryHook"))
     def test_execute_without_external_table_generate_job_id_async_should_execute_successfully(
         self, hook, create_task_instance, session
@@ -1749,6 +1751,7 @@ def test_execute_without_external_table_generate_job_id_async_should_execute_suc
             force_rerun=True,
         )
 
+    @pytest.mark.db_test
     @mock.patch(GCS_TO_BQ_PATH.format("BigQueryHook"))
     def test_execute_without_external_table_reattach_async_should_execute_successfully(
         self, hook, create_task_instance, session
@@ -1788,6 +1791,7 @@ def test_execute_without_external_table_reattach_async_should_execute_successful
             project_id=JOB_PROJECT_ID,
         )
 
+    @pytest.mark.db_test
     @mock.patch(GCS_TO_BQ_PATH.format("BigQueryHook"))
     def test_execute_without_external_table_force_rerun_async_should_execute_successfully(
         self, hook, create_task_instance
@@ -1836,6 +1840,7 @@ def test_execute_without_external_table_force_rerun_async_should_execute_success
             project_id=JOB_PROJECT_ID,
         )
 
+    @pytest.mark.db_test
     @mock.patch(GCS_TO_BQ_PATH.format("GCSHook"))
     @mock.patch(GCS_TO_BQ_PATH.format("BigQueryHook"))
     def test_schema_fields_without_external_table_async_should_execute_successfully(
@@ -1897,6 +1902,7 @@ def test_schema_fields_without_external_table_async_should_execute_successfully(
 
         bq_hook.return_value.insert_job.assert_has_calls(calls)
 
+    @pytest.mark.db_test
     @mock.patch(GCS_TO_BQ_PATH.format("GCSHook"))
     @mock.patch(GCS_TO_BQ_PATH.format("BigQueryHook"))
     def test_schema_fields_int_without_external_table_async_should_execute_successfully(
@@ -1963,6 +1969,7 @@ def test_schema_fields_int_without_external_table_async_should_execute_successfu
 
         bq_hook.return_value.insert_job.assert_has_calls(calls)
 
+    @pytest.mark.db_test
     @mock.patch(GCS_TO_BQ_PATH.format("BigQueryHook"))
     def test_execute_complete_reassigns_job_id(self, bq_hook, create_task_instance, session):
         """Assert that we use job_id from event after deferral."""
diff --git a/providers/google/tests/unit/google/cloud/transfers/test_local_to_gcs.py b/providers/google/tests/unit/google/cloud/transfers/test_local_to_gcs.py
index bf0ad43e1108d..2716ce9a4aab3 100644
--- a/providers/google/tests/unit/google/cloud/transfers/test_local_to_gcs.py
+++ b/providers/google/tests/unit/google/cloud/transfers/test_local_to_gcs.py
@@ -31,8 +31,6 @@
 )
 from airflow.providers.google.cloud.transfers.local_to_gcs import LocalFilesystemToGCSOperator
 
-pytestmark = pytest.mark.db_test
-
 
 class TestFileToGcsOperator:
     _config = {
diff --git a/providers/google/tests/unit/google/cloud/triggers/test_bigquery.py b/providers/google/tests/unit/google/cloud/triggers/test_bigquery.py
index a9552ad2a298d..22f4a17cf54bd 100644
--- a/providers/google/tests/unit/google/cloud/triggers/test_bigquery.py
+++ b/providers/google/tests/unit/google/cloud/triggers/test_bigquery.py
@@ -40,9 +40,6 @@
 )
 from airflow.triggers.base import TriggerEvent
 
-pytestmark = pytest.mark.db_test
-
-
 TEST_CONN_ID = "bq_default"
 TEST_JOB_ID = "1234"
 TEST_GCP_PROJECT_ID = "test-project"
diff --git a/providers/google/tests/unit/google/cloud/triggers/test_dataproc.py b/providers/google/tests/unit/google/cloud/triggers/test_dataproc.py
index 385572e8493ad..40048a4e5d716 100644
--- a/providers/google/tests/unit/google/cloud/triggers/test_dataproc.py
+++ b/providers/google/tests/unit/google/cloud/triggers/test_dataproc.py
@@ -154,7 +154,6 @@ def func(**kwargs):
     return func
 
 
-@pytest.mark.db_test
 class TestDataprocClusterTrigger:
     def test_async_cluster_trigger_serialization_should_execute_successfully(self, cluster_trigger):
         classpath, kwargs = cluster_trigger.serialize()
@@ -169,6 +168,7 @@ def test_async_cluster_trigger_serialization_should_execute_successfully(self, c
             "delete_on_error": True,
         }
 
+    @pytest.mark.db_test
     @pytest.mark.asyncio
     @mock.patch("airflow.providers.google.cloud.hooks.dataproc.DataprocAsyncHook.get_cluster")
     async def test_async_cluster_triggers_on_success_should_execute_successfully(
@@ -193,6 +193,7 @@ async def test_async_cluster_triggers_on_success_should_execute_successfully(
         )
         assert expected_event == actual_event
 
+    @pytest.mark.db_test
     @pytest.mark.asyncio
     @mock.patch("airflow.providers.google.cloud.hooks.dataproc.DataprocAsyncHook.get_cluster")
     @mock.patch(
@@ -227,6 +228,7 @@ async def test_async_cluster_trigger_run_returns_error_event(
         assert trigger_event.payload["cluster_name"] == TEST_CLUSTER_NAME
         assert trigger_event.payload["cluster_state"] == ClusterStatus.State.DELETING
 
+    @pytest.mark.db_test
     @pytest.mark.asyncio
     @mock.patch("airflow.providers.google.cloud.hooks.dataproc.DataprocAsyncHook.get_cluster")
     async def test_cluster_run_loop_is_still_running(
@@ -293,6 +295,7 @@ async def test_cluster_trigger_cancellation_handling(
         except Exception as e:
             pytest.fail(f"Unexpected exception raised: {e}")
 
+    @pytest.mark.db_test
     @pytest.mark.asyncio
     @mock.patch("airflow.providers.google.cloud.hooks.dataproc.DataprocAsyncHook.get_cluster")
     async def test_fetch_cluster_status(self, mock_get_cluster, cluster_trigger, async_get_cluster):
@@ -303,6 +306,7 @@ async def test_fetch_cluster_status(self, mock_get_cluster, cluster_trigger, asy
 
         assert cluster.status.state == ClusterStatus.State.RUNNING, "The cluster state should be RUNNING"
 
+    @pytest.mark.db_test
     @pytest.mark.asyncio
     @mock.patch("airflow.providers.google.cloud.hooks.dataproc.DataprocAsyncHook.delete_cluster")
     async def test_delete_when_error_occurred(self, mock_delete_cluster, cluster_trigger):
@@ -363,7 +367,6 @@ async def test_cluster_trigger_run_cancelled_not_safe_to_cancel(
         mock_delete_cluster.assert_not_called()
 
 
-@pytest.mark.db_test
 class TestDataprocBatchTrigger:
     def test_async_create_batch_trigger_serialization_should_execute_successfully(self, batch_trigger):
         """
@@ -382,6 +385,7 @@ def test_async_create_batch_trigger_serialization_should_execute_successfully(se
             "polling_interval_seconds": TEST_POLL_INTERVAL,
         }
 
+    @pytest.mark.db_test
     @pytest.mark.asyncio
     @mock.patch("airflow.providers.google.cloud.hooks.dataproc.DataprocAsyncHook.get_batch")
     async def test_async_create_batch_trigger_triggers_on_success_should_execute_successfully(
@@ -407,6 +411,7 @@ async def test_async_create_batch_trigger_triggers_on_success_should_execute_suc
         await asyncio.sleep(0.5)
         assert expected_event == actual_event
 
+    @pytest.mark.db_test
     @pytest.mark.asyncio
     @mock.patch("airflow.providers.google.cloud.hooks.dataproc.DataprocAsyncHook.get_batch")
     async def test_async_create_batch_trigger_run_returns_failed_event(
@@ -428,6 +433,7 @@ async def test_async_create_batch_trigger_run_returns_failed_event(
         await asyncio.sleep(0.5)
         assert expected_event == actual_event
 
+    @pytest.mark.db_test
     @pytest.mark.asyncio
     @mock.patch("airflow.providers.google.cloud.hooks.dataproc.DataprocAsyncHook.get_batch")
     async def test_create_batch_run_returns_cancelled_event(self, mock_hook, batch_trigger, async_get_batch):
@@ -447,6 +453,7 @@ async def test_create_batch_run_returns_cancelled_event(self, mock_hook, batch_t
         await asyncio.sleep(0.5)
         assert expected_event == actual_event
 
+    @pytest.mark.db_test
     @pytest.mark.asyncio
     @mock.patch("airflow.providers.google.cloud.hooks.dataproc.DataprocAsyncHook.get_batch")
     async def test_create_batch_run_loop_is_still_running(
@@ -540,7 +547,6 @@ async def test_async_operation_triggers_on_error(self, mock_hook, operation_trig
         assert expected_event == actual_event
 
 
-@pytest.mark.db_test
 class TestDataprocSubmitTrigger:
     def test_submit_trigger_serialization(self, submit_trigger):
         """Test that the trigger serializes its configuration correctly."""
diff --git a/providers/google/tests/unit/google/cloud/triggers/test_kubernetes_engine.py b/providers/google/tests/unit/google/cloud/triggers/test_kubernetes_engine.py
index d1f1dd519c574..ffe749ef397bb 100644
--- a/providers/google/tests/unit/google/cloud/triggers/test_kubernetes_engine.py
+++ b/providers/google/tests/unit/google/cloud/triggers/test_kubernetes_engine.py
@@ -328,7 +328,6 @@ def func(**kwargs):
     return func
 
 
-@pytest.mark.db_test
 class TestGKEOperationTrigger:
     def test_serialize(self, operation_trigger):
         classpath, trigger_init_kwargs = operation_trigger.serialize()
diff --git a/providers/google/tests/unit/google/cloud/utils/test_credentials_provider.py b/providers/google/tests/unit/google/cloud/utils/test_credentials_provider.py
index 4ad9ee8539a22..f258a55fc3cf6 100644
--- a/providers/google/tests/unit/google/cloud/utils/test_credentials_provider.py
+++ b/providers/google/tests/unit/google/cloud/utils/test_credentials_provider.py
@@ -176,7 +176,6 @@ def test_provide_gcp_conn_and_credentials(self, mock_builder):
         assert os.environ[CREDENTIALS] == ENV_VALUE
 
 
-@pytest.mark.db_test
 class TestGetGcpCredentialsAndProjectId:
     test_scopes = _DEFAULT_SCOPES
     test_key_file = "KEY_PATH.json"
diff --git a/providers/google/tests/unit/google/common/hooks/test_discovery_api.py b/providers/google/tests/unit/google/common/hooks/test_discovery_api.py
index 40776fa4932b3..39ff7af766076 100644
--- a/providers/google/tests/unit/google/common/hooks/test_discovery_api.py
+++ b/providers/google/tests/unit/google/common/hooks/test_discovery_api.py
@@ -24,8 +24,6 @@
 from airflow.models import Connection
 from airflow.providers.google.common.hooks.discovery_api import GoogleDiscoveryApiHook
 
-pytestmark = pytest.mark.db_test
-
 
 class TestGoogleDiscoveryApiHook:
     @pytest.fixture(autouse=True)

From 9f58447d2911f42d8e9f9edee9b1c988b652aac2 Mon Sep 17 00:00:00 2001
From: "Zhen-Lun (Kevin) Hong" <zhenlun.hong01@gmail.com>
Date: Mon, 23 Jun 2025 04:53:41 +0800
Subject: [PATCH 057/381] test: remove pytest.mark.db_test from discord
 provider (#52041)

---
 .pre-commit-config.yaml                                         | 1 +
 .../discord/tests/unit/discord/hooks/test_discord_webhook.py    | 2 --
 .../discord/tests/unit/discord/notifications/test_discord.py    | 2 --
 3 files changed, 1 insertion(+), 4 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index fd0216d28c42e..25fb2c19aa8e2 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -582,6 +582,7 @@ repos:
             ^providers/airbyte/.*\.py$|
             ^providers/cohere/.*\.py$|
             ^providers/datadog/.*\.py$|
+            ^providers/discord/.*\.py$|
             ^providers/facebook/.*\.py$|
             ^providers/grpc/.*\.py$|
             ^providers/hashicorp/.*\.py$|
diff --git a/providers/discord/tests/unit/discord/hooks/test_discord_webhook.py b/providers/discord/tests/unit/discord/hooks/test_discord_webhook.py
index bc61b45dff8b4..fbbb2ab722e7e 100644
--- a/providers/discord/tests/unit/discord/hooks/test_discord_webhook.py
+++ b/providers/discord/tests/unit/discord/hooks/test_discord_webhook.py
@@ -25,8 +25,6 @@
 from airflow.models import Connection
 from airflow.providers.discord.hooks.discord_webhook import DiscordWebhookHook
 
-pytestmark = pytest.mark.db_test
-
 
 class TestDiscordWebhookHook:
     _config = {
diff --git a/providers/discord/tests/unit/discord/notifications/test_discord.py b/providers/discord/tests/unit/discord/notifications/test_discord.py
index 700751d0ceffe..84db7713fa591 100644
--- a/providers/discord/tests/unit/discord/notifications/test_discord.py
+++ b/providers/discord/tests/unit/discord/notifications/test_discord.py
@@ -24,8 +24,6 @@
 from airflow.models import Connection
 from airflow.providers.discord.notifications.discord import DiscordNotifier
 
-pytestmark = pytest.mark.db_test
-
 
 @pytest.fixture(autouse=True)
 def setup_connections(create_connection_without_db):

From 51596aa698085bac09cc84ce68c3a51bd65cad82 Mon Sep 17 00:00:00 2001
From: Prithvi <prithvisivasankar@gmail.com>
Date: Mon, 23 Jun 2025 02:25:37 +0530
Subject: [PATCH 058/381] Fixes part of #52020 (#52038)

Co-authored-by: prithvi <prithvi@cloudera.com>
---
 .pre-commit-config.yaml                                     | 1 +
 providers/oracle/tests/unit/oracle/operators/test_oracle.py | 1 -
 2 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 25fb2c19aa8e2..2b7f66fcd033b 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -592,6 +592,7 @@ repos:
             ^providers/odbc/.*\.py$|
             ^providers/openai/.*\.py$|
             ^providers/openfaas/.*\.py$|
+            ^providers/oracle/.*\.py$|
             ^providers/pgvector/.*\.py$|
             ^providers/pinecone/.*\.py$|
             ^providers/postgres/.*\.py$|
diff --git a/providers/oracle/tests/unit/oracle/operators/test_oracle.py b/providers/oracle/tests/unit/oracle/operators/test_oracle.py
index 02bc3f391de11..6fde023ff6639 100644
--- a/providers/oracle/tests/unit/oracle/operators/test_oracle.py
+++ b/providers/oracle/tests/unit/oracle/operators/test_oracle.py
@@ -55,7 +55,6 @@ def test_execute(self, mock_run):
             handler=mock.ANY,
         )
 
-    @pytest.mark.db_test
     @mock.patch.object(OracleHook, "callproc", autospec=OracleHook.callproc)
     def test_push_oracle_exit_to_xcom(self, mock_callproc, request, dag_maker):
         # Test pulls the value previously pushed to xcom and checks if it's the same

From a8a9fc5ead28ab4902a328a6911fe2c95e737776 Mon Sep 17 00:00:00 2001
From: "Zhen-Lun (Kevin) Hong" <zhenlun.hong01@gmail.com>
Date: Mon, 23 Jun 2025 05:02:57 +0800
Subject: [PATCH 059/381] test: remove pytest.mark.db_test from github provider
 (#52043)

---
 providers/github/tests/unit/github/hooks/test_github.py     | 3 ---
 providers/github/tests/unit/github/operators/test_github.py | 4 +---
 providers/github/tests/unit/github/sensors/test_github.py   | 3 ---
 3 files changed, 1 insertion(+), 9 deletions(-)

diff --git a/providers/github/tests/unit/github/hooks/test_github.py b/providers/github/tests/unit/github/hooks/test_github.py
index f94c9b1c91c48..f7e294f9c915e 100644
--- a/providers/github/tests/unit/github/hooks/test_github.py
+++ b/providers/github/tests/unit/github/hooks/test_github.py
@@ -25,9 +25,6 @@
 from airflow.models import Connection
 from airflow.providers.github.hooks.github import GithubHook
 
-pytestmark = pytest.mark.db_test
-
-
 github_client_mock = Mock(name="github_client_for_test")
 
 
diff --git a/providers/github/tests/unit/github/operators/test_github.py b/providers/github/tests/unit/github/operators/test_github.py
index 0738e0ba6648d..cdfc72177e5a2 100644
--- a/providers/github/tests/unit/github/operators/test_github.py
+++ b/providers/github/tests/unit/github/operators/test_github.py
@@ -26,9 +26,6 @@
 from airflow.providers.github.operators.github import GithubOperator
 from airflow.utils import timezone
 
-pytestmark = pytest.mark.db_test
-
-
 DEFAULT_DATE = timezone.datetime(2017, 1, 1)
 github_client_mock = Mock(name="github_client_for_test")
 
@@ -60,6 +57,7 @@ def test_operator_init_with_optional_args(self):
         assert github_operator.github_method_args == {}
         assert github_operator.result_processor is None
 
+    @pytest.mark.db_test
     @patch(
         "airflow.providers.github.hooks.github.GithubClient", autospec=True, return_value=github_client_mock
     )
diff --git a/providers/github/tests/unit/github/sensors/test_github.py b/providers/github/tests/unit/github/sensors/test_github.py
index 6a4a50fa481da..b885be43ddedd 100644
--- a/providers/github/tests/unit/github/sensors/test_github.py
+++ b/providers/github/tests/unit/github/sensors/test_github.py
@@ -26,9 +26,6 @@
 from airflow.providers.github.sensors.github import GithubTagSensor
 from airflow.utils import timezone
 
-pytestmark = pytest.mark.db_test
-
-
 DEFAULT_DATE = timezone.datetime(2017, 1, 1)
 github_client_mock = Mock(name="github_client_for_test")
 

From a00ab7d3ae3b1bc91672c628180d713bb190c5d9 Mon Sep 17 00:00:00 2001
From: "Zhen-Lun (Kevin) Hong" <zhenlun.hong01@gmail.com>
Date: Mon, 23 Jun 2025 10:28:54 +0800
Subject: [PATCH 060/381] Remove pytest.mark.db_test from mongo provider
 (#52047)

---
 .pre-commit-config.yaml                              | 1 +
 providers/mongo/tests/unit/mongo/hooks/test_mongo.py | 2 --
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 2b7f66fcd033b..90458dfac6ca1 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -588,6 +588,7 @@ repos:
             ^providers/hashicorp/.*\.py$|
             ^providers/influxdb/.*\.py$|
             ^providers/jenkins/.*\.py$|
+            ^providers/mongo/.*\.py$|
             ^providers/neo4j/.*\.py$|
             ^providers/odbc/.*\.py$|
             ^providers/openai/.*\.py$|
diff --git a/providers/mongo/tests/unit/mongo/hooks/test_mongo.py b/providers/mongo/tests/unit/mongo/hooks/test_mongo.py
index 126617af88fc9..f281d5d062fd2 100644
--- a/providers/mongo/tests/unit/mongo/hooks/test_mongo.py
+++ b/providers/mongo/tests/unit/mongo/hooks/test_mongo.py
@@ -30,8 +30,6 @@
 
 from tests_common.test_utils.compat import connection_as_json
 
-pytestmark = pytest.mark.db_test
-
 if TYPE_CHECKING:
     from types import ModuleType
 

From d8086e635779cbaabd7aa02af5787008a207eeac Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Josef=20=C5=A0im=C3=A1nek?= <josef.simanek@gmail.com>
Date: Mon, 23 Jun 2025 06:17:13 +0200
Subject: [PATCH 061/381] Include fixed navbar for anchor position calculation.
 (#52016)

---
 devel-common/sphinx_design/static/custom.css | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/devel-common/sphinx_design/static/custom.css b/devel-common/sphinx_design/static/custom.css
index 70356c06a97ca..9671e47b2a28e 100644
--- a/devel-common/sphinx_design/static/custom.css
+++ b/devel-common/sphinx_design/static/custom.css
@@ -45,7 +45,7 @@ div.admonition.warning {
 /* Needs to be cleaned in a follow-up to source this from the origin style in */
 /* https://github.com/apache/airflow-site/blob/main/landing-pages/site/assets/scss/_rst-content.scss */
 .base-layout {
-  padding-top: 123px !important;
+  padding-top: 163px !important; /* banner + navbar + 2px padding */
 }
 
 section {
@@ -66,3 +66,18 @@ a.headerlink::after {
   content: " [link]" !important;  /* Theme image not existing */
   visibility: visible !important;
 }
+
+/* compensate for sticky headers for anchored links */
+:target::before {
+  content: "";
+  display: block;
+  height: 161px; /* 40px banner + 121px navbar */
+  margin: -161px 0 0; /* negative fixed header height */
+}
+
+@media (max-width: 1280px) {
+  :target::before {
+    height: 117px; /* 40px banner + 77px mobile navbar */
+    margin: -117px 0 0; /* negative fixed header height */
+  }
+}

From fab3d5a7351109c2801e65e51fa29b951d92c073 Mon Sep 17 00:00:00 2001
From: "Y. SOMDA" <11819890+yoeo@users.noreply.github.com>
Date: Mon, 23 Jun 2025 06:22:51 +0200
Subject: [PATCH 062/381] Allow Asset decorator to work with any TaskFlow
 operator (#51229)

---
 .../docs/authoring-and-scheduling/assets.rst  | 12 +++
 .../sdk/definitions/asset/decorators.py       | 19 ++++-
 .../definitions/test_asset_decorators.py      | 83 +++++++++++++++++++
 3 files changed, 111 insertions(+), 3 deletions(-)

diff --git a/airflow-core/docs/authoring-and-scheduling/assets.rst b/airflow-core/docs/authoring-and-scheduling/assets.rst
index 4664c51d7f0e8..366a4069ca52b 100644
--- a/airflow-core/docs/authoring-and-scheduling/assets.rst
+++ b/airflow-core/docs/authoring-and-scheduling/assets.rst
@@ -229,6 +229,18 @@ The other way around also applies:
     def process_example_asset(example_asset):
         """Process inlet example_asset..."""
 
+In addition, ``@asset`` can be used with ``@task`` to customize the task that generates the asset,
+utilizing the modern TaskFlow approach described in :doc:`/tutorial/taskflow`.
+
+This combination allows you to set initial arguments for the task and to use various operators, such as the ``BashOperator``:
+
+.. code-block:: python
+
+    @asset(schedule=None)
+    @task.bash(retries=3)
+    def example_asset():
+        """Write to example_asset, from a Bash task with 3 retries..."""
+        return "echo 'run'"
 
 Output to multiple assets in one task
 -------------------------------------
diff --git a/task-sdk/src/airflow/sdk/definitions/asset/decorators.py b/task-sdk/src/airflow/sdk/definitions/asset/decorators.py
index 44479fbb9cd42..daeb6204c3f05 100644
--- a/task-sdk/src/airflow/sdk/definitions/asset/decorators.py
+++ b/task-sdk/src/airflow/sdk/definitions/asset/decorators.py
@@ -18,7 +18,7 @@
 from __future__ import annotations
 
 import inspect
-from typing import TYPE_CHECKING, Any
+from typing import TYPE_CHECKING, Any, cast
 
 import attrs
 
@@ -30,6 +30,7 @@
     from collections.abc import Callable, Collection, Iterator, Mapping
 
     from airflow.sdk import DAG, AssetAlias, ObjectStoragePath
+    from airflow.sdk.bases.decorator import _TaskDecorator
     from airflow.sdk.definitions.asset import AssetUniqueKey
     from airflow.sdk.definitions.dag import DagStateChangeCallback, ScheduleArg
     from airflow.sdk.definitions.param import ParamsDict
@@ -96,6 +97,18 @@ def determine_kwargs(self, context: Mapping[str, Any]) -> Mapping[str, Any]:
         return dict(self._iter_kwargs(context))
 
 
+def _instantiate_task(definition: AssetDefinition | MultiAssetDefinition) -> None:
+    decorated_operator = cast("_TaskDecorator", definition._function)
+    if getattr(decorated_operator, "_airflow_is_task_decorator", False):
+        if "outlets" in decorated_operator.kwargs:
+            raise TypeError("@task decorator with 'outlets' argument is not supported in @asset")
+
+        decorated_operator.kwargs["outlets"] = [v for _, v in definition.iter_assets()]
+        decorated_operator()
+    else:
+        _AssetMainOperator.from_definition(definition)
+
+
 @attrs.define(kw_only=True)
 class AssetDefinition(Asset):
     """
@@ -109,7 +122,7 @@ class AssetDefinition(Asset):
 
     def __attrs_post_init__(self) -> None:
         with self._source.create_dag(default_dag_id=self.name):
-            _AssetMainOperator.from_definition(self)
+            _instantiate_task(self)
 
 
 @attrs.define(kw_only=True)
@@ -129,7 +142,7 @@ class MultiAssetDefinition(BaseAsset):
 
     def __attrs_post_init__(self) -> None:
         with self._source.create_dag(default_dag_id=self._function.__name__):
-            _AssetMainOperator.from_definition(self)
+            _instantiate_task(self)
 
     def iter_assets(self) -> Iterator[tuple[AssetUniqueKey, Asset]]:
         for o in self._source.outlets:
diff --git a/task-sdk/tests/task_sdk/definitions/test_asset_decorators.py b/task-sdk/tests/task_sdk/definitions/test_asset_decorators.py
index 406785cb7964e..3dfc0b44588a0 100644
--- a/task-sdk/tests/task_sdk/definitions/test_asset_decorators.py
+++ b/task-sdk/tests/task_sdk/definitions/test_asset_decorators.py
@@ -22,6 +22,7 @@
 
 from airflow.sdk.definitions.asset import Asset
 from airflow.sdk.definitions.asset.decorators import _AssetMainOperator, asset
+from airflow.sdk.definitions.decorators import task
 from airflow.sdk.execution_time.comms import AssetResult, GetAssetByName
 
 
@@ -159,6 +160,27 @@ def example_asset_func(self, /):
             == "positional-only argument 'self' without a default is not supported in @asset"
         )
 
+    def test_with_task_decorator(self, func_fixer):
+        @task(retries=3)
+        @func_fixer
+        def _example_task_func():
+            return "This is example_task"
+
+        asset_definition = asset(name="asset", dag_id="dag", schedule=None)(_example_task_func)
+        assert asset_definition.name == "asset"
+        assert asset_definition._source.dag_id == "dag"
+        assert asset_definition._function == _example_task_func
+
+    def test_with_task_decorator_and_outlets(self, func_fixer):
+        @task(retries=3, outlets=Asset(name="a"))
+        @func_fixer
+        def _example_task_func():
+            return "This is example_task"
+
+        with pytest.raises(TypeError) as err:
+            asset(schedule=None)(_example_task_func)
+        assert err.value.args[0] == "@task decorator with 'outlets' argument is not supported in @asset"
+
     @pytest.mark.parametrize(
         "provided_uri, expected_uri",
         [
@@ -222,6 +244,36 @@ def test__attrs_post_init__(self, DAG, from_definition, example_asset_func_with_
         )
         from_definition.assert_called_once_with(asset_definition)
 
+    @mock.patch("airflow.sdk.bases.decorator._TaskDecorator.__call__")
+    @mock.patch("airflow.sdk.definitions.dag.DAG")
+    def test_with_task_decorator(self, DAG, __call__, func_fixer):
+        @task(retries=3)
+        @func_fixer
+        def _example_task_func():
+            return "This is example_task"
+
+        asset_definition = asset(schedule=None, uri="s3://bucket/object", group="MLModel", extra={"k": "v"})(
+            _example_task_func
+        )
+
+        DAG.assert_called_once_with(
+            dag_id="example_asset_func",
+            dag_display_name="example_asset_func",
+            description=None,
+            schedule=None,
+            catchup=False,
+            is_paused_upon_creation=None,
+            on_failure_callback=None,
+            on_success_callback=None,
+            params=None,
+            access_control=None,
+            owner_links={},
+            tags=set(),
+            auto_register=True,
+        )
+        __call__.assert_called_once_with()
+        assert asset_definition._function.kwargs["outlets"] == [asset_definition]
+
 
 class TestMultiAssetDefinition:
     @mock.patch("airflow.sdk.definitions.asset.decorators._AssetMainOperator.from_definition")
@@ -249,6 +301,37 @@ def test__attrs_post_init__(self, DAG, from_definition, example_asset_func_with_
         )
         from_definition.assert_called_once_with(definition)
 
+    @mock.patch("airflow.sdk.bases.decorator._TaskDecorator.__call__")
+    @mock.patch("airflow.sdk.definitions.dag.DAG")
+    def test_with_task_decorator(self, DAG, __call__, func_fixer):
+        @task(retries=3)
+        @func_fixer
+        def _example_task_func():
+            return "This is example_task"
+
+        definition = asset.multi(
+            schedule=None,
+            outlets=[Asset(name="a"), Asset(name="b")],
+        )(_example_task_func)
+
+        DAG.assert_called_once_with(
+            dag_id="example_asset_func",
+            dag_display_name="example_asset_func",
+            description=None,
+            schedule=None,
+            catchup=False,
+            is_paused_upon_creation=None,
+            on_failure_callback=None,
+            on_success_callback=None,
+            params=None,
+            access_control=None,
+            owner_links={},
+            tags=set(),
+            auto_register=True,
+        )
+        __call__.assert_called_once_with()
+        assert definition._function.kwargs["outlets"] == [Asset(name="a"), Asset(name="b")]
+
 
 class Test_AssetMainOperator:
     def test_from_definition(self, example_asset_func_with_valid_arg_as_inlet_asset):

From c22c1ef4a42acf2d56a1182fea25fc97dc224253 Mon Sep 17 00:00:00 2001
From: Aaron Chen <nailo2c@gmail.com>
Date: Sun, 22 Jun 2025 21:45:56 -0700
Subject: [PATCH 063/381] Fix HttpOperator(deferrable=True) crash when
 connection has login / password (#52050)

* add serialize and deserialize handle process when using defer

* refactor it to make it more concise

* add unit test for serialised and _resolve_auth_type

* add @pytest.mark.db_test to test function
---
 .../airflow/providers/http/operators/http.py  | 30 ++++++++--
 .../airflow/providers/http/triggers/http.py   | 22 ++++++-
 .../tests/unit/http/operators/test_http.py    | 57 ++++++++++++++++++-
 3 files changed, 101 insertions(+), 8 deletions(-)

diff --git a/providers/http/src/airflow/providers/http/operators/http.py b/providers/http/src/airflow/providers/http/operators/http.py
index ee03180881b80..2c7f260f39e12 100644
--- a/providers/http/src/airflow/providers/http/operators/http.py
+++ b/providers/http/src/airflow/providers/http/operators/http.py
@@ -22,13 +22,14 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING, Any, Callable
 
+from aiohttp import BasicAuth
 from requests import Response
 
 from airflow.configuration import conf
 from airflow.exceptions import AirflowException
 from airflow.hooks.base import BaseHook
 from airflow.models import BaseOperator
-from airflow.providers.http.triggers.http import HttpTrigger
+from airflow.providers.http.triggers.http import HttpTrigger, serialize_auth_type
 from airflow.utils.helpers import merge_dicts
 
 if TYPE_CHECKING:
@@ -122,7 +123,7 @@ def __init__(
         request_kwargs: dict[str, Any] | None = None,
         http_conn_id: str = "http_default",
         log_response: bool = False,
-        auth_type: type[AuthBase] | None = None,
+        auth_type: type[AuthBase] | type[BasicAuth] | None = None,
         tcp_keep_alive: bool = True,
         tcp_keep_alive_idle: int = 120,
         tcp_keep_alive_count: int = 20,
@@ -221,7 +222,7 @@ def execute_async(self, context: Context) -> None:
         self.defer(
             trigger=HttpTrigger(
                 http_conn_id=self.http_conn_id,
-                auth_type=self.auth_type,
+                auth_type=serialize_auth_type(self._resolve_auth_type()),
                 method=self.method,
                 endpoint=self.endpoint,
                 headers=self.headers,
@@ -231,6 +232,27 @@ def execute_async(self, context: Context) -> None:
             method_name="execute_complete",
         )
 
+    def _resolve_auth_type(self) -> type[AuthBase] | type[BasicAuth] | None:
+        """
+        Resolve the authentication type for the HTTP request.
+
+        If auth_type is not explicitly set, attempt to infer it from the connection configuration.
+        For connections with login/password, default to BasicAuth.
+
+        :return: The resolved authentication type class, or None if no auth is needed.
+        """
+        if self.auth_type is not None:
+            return self.auth_type
+
+        try:
+            conn = BaseHook.get_connection(self.http_conn_id)
+            if conn.login or conn.password:
+                return BasicAuth
+        except Exception as e:
+            self.log.warning("Failed to resolve auth type from connection: %s", e)
+
+        return None
+
     def process_response(self, context: Context, response: Response | list[Response]) -> Any:
         """Process the response."""
         from airflow.utils.operator_helpers import determine_kwargs
@@ -291,7 +313,7 @@ def paginate_async(
             self.defer(
                 trigger=HttpTrigger(
                     http_conn_id=self.http_conn_id,
-                    auth_type=self.auth_type,
+                    auth_type=serialize_auth_type(self._resolve_auth_type()),
                     method=self.method,
                     **self._merge_next_page_parameters(next_page_params),
                 ),
diff --git a/providers/http/src/airflow/providers/http/triggers/http.py b/providers/http/src/airflow/providers/http/triggers/http.py
index d25d3a55cfb5b..6c1d13b136334 100644
--- a/providers/http/src/airflow/providers/http/triggers/http.py
+++ b/providers/http/src/airflow/providers/http/triggers/http.py
@@ -20,6 +20,7 @@
 import base64
 import pickle
 from collections.abc import AsyncIterator
+from importlib import import_module
 from typing import TYPE_CHECKING, Any
 
 import aiohttp
@@ -35,6 +36,21 @@
     from aiohttp.client_reqrep import ClientResponse
 
 
+def serialize_auth_type(auth: str | type | None) -> str | None:
+    if auth is None:
+        return None
+    if isinstance(auth, str):
+        return auth
+    return f"{auth.__module__}.{auth.__qualname__}"
+
+
+def deserialize_auth_type(path: str | None) -> type | None:
+    if path is None:
+        return None
+    module_path, cls_name = path.rsplit(".", 1)
+    return getattr(import_module(module_path), cls_name)
+
+
 class HttpTrigger(BaseTrigger):
     """
     HttpTrigger run on the trigger worker.
@@ -56,7 +72,7 @@ class HttpTrigger(BaseTrigger):
     def __init__(
         self,
         http_conn_id: str = "http_default",
-        auth_type: Any = None,
+        auth_type: str | None = None,
         method: str = "POST",
         endpoint: str | None = None,
         headers: dict[str, str] | None = None,
@@ -66,7 +82,7 @@ def __init__(
         super().__init__()
         self.http_conn_id = http_conn_id
         self.method = method
-        self.auth_type = auth_type
+        self.auth_type = deserialize_auth_type(auth_type)
         self.endpoint = endpoint
         self.headers = headers
         self.data = data
@@ -79,7 +95,7 @@ def serialize(self) -> tuple[str, dict[str, Any]]:
             {
                 "http_conn_id": self.http_conn_id,
                 "method": self.method,
-                "auth_type": self.auth_type,
+                "auth_type": serialize_auth_type(self.auth_type),
                 "endpoint": self.endpoint,
                 "headers": self.headers,
                 "data": self.data,
diff --git a/providers/http/tests/unit/http/operators/test_http.py b/providers/http/tests/unit/http/operators/test_http.py
index 82787cb54304c..31be860cef6c0 100644
--- a/providers/http/tests/unit/http/operators/test_http.py
+++ b/providers/http/tests/unit/http/operators/test_http.py
@@ -21,18 +21,21 @@
 import contextlib
 import json
 import pickle
+from types import SimpleNamespace
 from unittest import mock
 from unittest.mock import call, patch
 
 import pytest
 import tenacity
+from aiohttp import BasicAuth
 from requests import Response
 from requests.models import RequestEncodingMixin
 
 from airflow.exceptions import AirflowException, TaskDeferred
+from airflow.hooks import base
 from airflow.providers.http.hooks.http import HttpHook
 from airflow.providers.http.operators.http import HttpOperator
-from airflow.providers.http.triggers.http import HttpTrigger
+from airflow.providers.http.triggers.http import HttpTrigger, serialize_auth_type
 
 
 @mock.patch.dict("os.environ", AIRFLOW_CONN_HTTP_EXAMPLE="http://www.example.com")
@@ -92,6 +95,7 @@ def test_filters_response(self, requests_mock):
         result = operator.execute({})
         assert result == {"value": 5}
 
+    @pytest.mark.db_test
     def test_async_defer_successfully(self, requests_mock):
         operator = HttpOperator(
             task_id="test_HTTP_op",
@@ -186,6 +190,7 @@ def pagination_function(response: Response) -> dict | None:
 
         assert result == [5, 10]
 
+    @pytest.mark.db_test
     def test_async_pagination(self, requests_mock):
         """
         Test that the HttpOperator calls asynchronously and repetitively
@@ -300,3 +305,53 @@ def pagination_function(response: Response) -> dict | None:
         )
 
         assert mock_run_with_advanced_retry.call_count == 2
+
+    def _capture_defer(self, monkeypatch):
+        captured = {}
+
+        def _fake_defer(self, *, trigger, method_name, **kwargs):
+            captured["trigger"] = trigger
+            captured["kwargs"] = kwargs
+
+        monkeypatch.setattr(HttpOperator, "defer", _fake_defer)
+        return captured
+
+    @pytest.mark.parametrize(
+        "login, password, auth_type, expect_cls",
+        [
+            ("user", "password", None, BasicAuth),
+            (None, None, None, type(None)),
+            ("user", "password", BasicAuth, BasicAuth),
+        ],
+    )
+    def test_auth_type_is_serialised_as_string(self, monkeypatch, login, password, auth_type, expect_cls):
+        monkeypatch.setattr(
+            base.BaseHook, "get_connection", lambda _cid: SimpleNamespace(login=login, password=password)
+        )
+        captured = self._capture_defer(monkeypatch)
+
+        HttpOperator(task_id="test_HTTP_op", deferrable=True, auth_type=auth_type).execute(context={})
+
+        trigger = captured["trigger"]
+        kwargs = captured["trigger"].serialize()[1]
+
+        expected_str = serialize_auth_type(expect_cls) if expect_cls is not type(None) else None
+        assert kwargs["auth_type"] == expected_str
+
+        assert trigger.auth_type == expect_cls or (trigger.auth_type is None and expect_cls is type(None))
+
+    def test_resolve_auth_type_variants(self, monkeypatch):
+        monkeypatch.setattr(
+            base.BaseHook, "get_connection", lambda _cid: SimpleNamespace(login="user", password="password")
+        )
+        assert HttpOperator(task_id="test_HTTP_op_1")._resolve_auth_type() is BasicAuth
+
+        class DummyAuth:
+            def __init__(self, *_, **__): ...
+
+        assert HttpOperator(task_id="test_HTTP_op_2", auth_type=DummyAuth)._resolve_auth_type() is DummyAuth
+
+        monkeypatch.setattr(
+            base.BaseHook, "get_connection", lambda _cid: SimpleNamespace(login=None, password=None)
+        )
+        assert HttpOperator(task_id="test_HTTP_op_3")._resolve_auth_type() is None

From 745888473c42ec272113f1922a3c8fedd320ee58 Mon Sep 17 00:00:00 2001
From: Kevin Yang <85313829+sjyangkevin@users.noreply.github.com>
Date: Mon, 23 Jun 2025 00:56:25 -0400
Subject: [PATCH 064/381] Remove db tests from cloudant provider (#52052)

* remove db_test for cloudant

* small fix and update pre-commit
---
 .pre-commit-config.yaml                                       | 1 +
 providers/cloudant/tests/unit/cloudant/hooks/test_cloudant.py | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 90458dfac6ca1..eb3a8377e61e2 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -580,6 +580,7 @@ repos:
         files: >
             (?x)
             ^providers/airbyte/.*\.py$|
+            ^providers/cloudant/.*\.py$|
             ^providers/cohere/.*\.py$|
             ^providers/datadog/.*\.py$|
             ^providers/discord/.*\.py$|
diff --git a/providers/cloudant/tests/unit/cloudant/hooks/test_cloudant.py b/providers/cloudant/tests/unit/cloudant/hooks/test_cloudant.py
index 9580401d98d59..072c93c79528b 100644
--- a/providers/cloudant/tests/unit/cloudant/hooks/test_cloudant.py
+++ b/providers/cloudant/tests/unit/cloudant/hooks/test_cloudant.py
@@ -25,7 +25,7 @@
 from airflow.exceptions import AirflowException
 from airflow.models import Connection
 
-pytestmark = [pytest.mark.db_test]
+pytestmark = []
 
 if sys.version_info < (3, 10):
     pytestmark.append(

From df69dd659b93b954b198df24fbfa49b8e0ddf5e6 Mon Sep 17 00:00:00 2001
From: "Zhen-Lun (Kevin) Hong" <zhenlun.hong01@gmail.com>
Date: Mon, 23 Jun 2025 13:00:56 +0800
Subject: [PATCH 065/381] Remove pytest.mark.db_test from imap provider
 (#52049)

---
 .pre-commit-config.yaml                           | 1 +
 providers/imap/tests/unit/imap/hooks/test_imap.py | 3 ---
 2 files changed, 1 insertion(+), 3 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index eb3a8377e61e2..83cf2bb6859a3 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -587,6 +587,7 @@ repos:
             ^providers/facebook/.*\.py$|
             ^providers/grpc/.*\.py$|
             ^providers/hashicorp/.*\.py$|
+            ^providers/imap/.*\.py$|
             ^providers/influxdb/.*\.py$|
             ^providers/jenkins/.*\.py$|
             ^providers/mongo/.*\.py$|
diff --git a/providers/imap/tests/unit/imap/hooks/test_imap.py b/providers/imap/tests/unit/imap/hooks/test_imap.py
index a0c6ea4b692e6..4649e5eddd275 100644
--- a/providers/imap/tests/unit/imap/hooks/test_imap.py
+++ b/providers/imap/tests/unit/imap/hooks/test_imap.py
@@ -29,9 +29,6 @@
 
 from tests_common.test_utils.config import conf_vars
 
-pytestmark = pytest.mark.db_test
-
-
 imaplib_string = "airflow.providers.imap.hooks.imap.imaplib"
 open_string = "airflow.providers.imap.hooks.imap.open"
 

From 4f3b1f849b992681351edf24f120e37b1842c868 Mon Sep 17 00:00:00 2001
From: "Zhen-Lun (Kevin) Hong" <zhenlun.hong01@gmail.com>
Date: Mon, 23 Jun 2025 13:01:51 +0800
Subject: [PATCH 066/381] test: remove pytest.mark.db_test from tableau
 provider (#52044)

---
 .pre-commit-config.yaml                                    | 1 +
 providers/tableau/tests/unit/tableau/hooks/test_tableau.py | 2 --
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 83cf2bb6859a3..90c00f3c82320 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -603,6 +603,7 @@ repos:
             ^providers/segment/.*\.py$|
             ^providers/sendgrid/.*\.py$|
             ^providers/singularity/.*\.py$|
+            ^providers/tableau/.*\.py$|
             ^providers/teradata/.*\.py$|
             ^providers/trino/.*\.py$|
             ^providers/vertica/.*\.py$|
diff --git a/providers/tableau/tests/unit/tableau/hooks/test_tableau.py b/providers/tableau/tests/unit/tableau/hooks/test_tableau.py
index 8ea82b4270b06..6b47616eabbf8 100644
--- a/providers/tableau/tests/unit/tableau/hooks/test_tableau.py
+++ b/providers/tableau/tests/unit/tableau/hooks/test_tableau.py
@@ -23,8 +23,6 @@
 from airflow import configuration, models
 from airflow.providers.tableau.hooks.tableau import TableauHook, TableauJobFinishCode
 
-pytestmark = pytest.mark.db_test
-
 
 class TestTableauHook:
     """

From 337b2db12635d85aa4f898d29b553429b197c3c2 Mon Sep 17 00:00:00 2001
From: "Zhen-Lun (Kevin) Hong" <zhenlun.hong01@gmail.com>
Date: Mon, 23 Jun 2025 13:02:26 +0800
Subject: [PATCH 067/381] Remove pytest.mark.db_test from samba provider
 (#52045)

---
 providers/samba/tests/unit/samba/hooks/test_samba.py | 2 --
 1 file changed, 2 deletions(-)

diff --git a/providers/samba/tests/unit/samba/hooks/test_samba.py b/providers/samba/tests/unit/samba/hooks/test_samba.py
index b6611a9eda18c..285eadb1ee906 100644
--- a/providers/samba/tests/unit/samba/hooks/test_samba.py
+++ b/providers/samba/tests/unit/samba/hooks/test_samba.py
@@ -28,8 +28,6 @@
 
 PATH_PARAMETER_NAMES = {"path", "src", "dst"}
 
-pytestmark = pytest.mark.db_test
-
 
 class TestSambaHook:
     @pytest.mark.db_test

From d1f759f8516b0375df90d99e0f9ba9607d45ba92 Mon Sep 17 00:00:00 2001
From: Wei-Yu Chen <60685934+Jasperora@users.noreply.github.com>
Date: Mon, 23 Jun 2025 13:03:32 +0800
Subject: [PATCH 068/381] Remove pytest.mark.db_test: dingding (#52054)

---
 .pre-commit-config.yaml                                       | 1 +
 providers/dingding/tests/unit/dingding/hooks/test_dingding.py | 2 --
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 90c00f3c82320..c9a4f3f163929 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -583,6 +583,7 @@ repos:
             ^providers/cloudant/.*\.py$|
             ^providers/cohere/.*\.py$|
             ^providers/datadog/.*\.py$|
+            ^providers/dingding/.*\.py$|
             ^providers/discord/.*\.py$|
             ^providers/facebook/.*\.py$|
             ^providers/grpc/.*\.py$|
diff --git a/providers/dingding/tests/unit/dingding/hooks/test_dingding.py b/providers/dingding/tests/unit/dingding/hooks/test_dingding.py
index 0832156a138a8..3f5f5da085fc2 100644
--- a/providers/dingding/tests/unit/dingding/hooks/test_dingding.py
+++ b/providers/dingding/tests/unit/dingding/hooks/test_dingding.py
@@ -24,8 +24,6 @@
 from airflow.models import Connection
 from airflow.providers.dingding.hooks.dingding import DingdingHook
 
-pytestmark = pytest.mark.db_test
-
 
 class TestDingdingHook:
     conn_id = "dingding_conn_id_test"

From a9d88a81952412cba226daa7820fca357f952c51 Mon Sep 17 00:00:00 2001
From: Wei-Yu Chen <60685934+Jasperora@users.noreply.github.com>
Date: Mon, 23 Jun 2025 13:04:42 +0800
Subject: [PATCH 069/381] Remove pytest.mark.db_test: exasol (#52057)

---
 .pre-commit-config.yaml                              | 1 +
 providers/exasol/tests/unit/exasol/hooks/test_sql.py | 3 ---
 2 files changed, 1 insertion(+), 3 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index c9a4f3f163929..17cf3b8ab4523 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -585,6 +585,7 @@ repos:
             ^providers/datadog/.*\.py$|
             ^providers/dingding/.*\.py$|
             ^providers/discord/.*\.py$|
+            ^providers/exasol/.*\.py$|
             ^providers/facebook/.*\.py$|
             ^providers/grpc/.*\.py$|
             ^providers/hashicorp/.*\.py$|
diff --git a/providers/exasol/tests/unit/exasol/hooks/test_sql.py b/providers/exasol/tests/unit/exasol/hooks/test_sql.py
index 88ead8d196d56..da99da330e567 100644
--- a/providers/exasol/tests/unit/exasol/hooks/test_sql.py
+++ b/providers/exasol/tests/unit/exasol/hooks/test_sql.py
@@ -29,9 +29,6 @@
 from airflow.providers.exasol.hooks.exasol import ExasolHook
 from airflow.utils.session import provide_session
 
-pytestmark = pytest.mark.db_test
-
-
 TASK_ID = "sql-operator"
 HOST = "host"
 DEFAULT_CONN_ID = "exasol_default"

From c6a22ac565a701e1e6f245ac5d9ff0c64e50a72b Mon Sep 17 00:00:00 2001
From: Wei-Yu Chen <60685934+Jasperora@users.noreply.github.com>
Date: Mon, 23 Jun 2025 13:05:26 +0800
Subject: [PATCH 070/381] Remove pytest.mark.db_test: ftp (#52058)

---
 .pre-commit-config.yaml                        | 1 +
 providers/ftp/tests/unit/ftp/hooks/test_ftp.py | 1 -
 2 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 17cf3b8ab4523..66f82827b27d2 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -587,6 +587,7 @@ repos:
             ^providers/discord/.*\.py$|
             ^providers/exasol/.*\.py$|
             ^providers/facebook/.*\.py$|
+            ^providers/ftp/.*\.py$|
             ^providers/grpc/.*\.py$|
             ^providers/hashicorp/.*\.py$|
             ^providers/imap/.*\.py$|
diff --git a/providers/ftp/tests/unit/ftp/hooks/test_ftp.py b/providers/ftp/tests/unit/ftp/hooks/test_ftp.py
index c2dd6ee2c9d47..4a8e63a5184e1 100644
--- a/providers/ftp/tests/unit/ftp/hooks/test_ftp.py
+++ b/providers/ftp/tests/unit/ftp/hooks/test_ftp.py
@@ -141,7 +141,6 @@ def test_connection_failure(self):
             assert msg == "Test"
 
 
-@pytest.mark.db_test
 class TestIntegrationFTPHook:
     @pytest.fixture(autouse=True)
     def setup_connections(self, create_connection_without_db):

From 8e15470d2aeab46af9a66f6a32df610ca6e518f9 Mon Sep 17 00:00:00 2001
From: Ankit Chaurasia <8670962+sunank200@users.noreply.github.com>
Date: Mon, 23 Jun 2025 12:14:13 +0545
Subject: [PATCH 071/381] chore(tests): move doc tests to task-sdk/tests/docs
 (#51876)

---
 task-sdk/tests/task_sdk/docs/__init__.py         | 16 ++++++++++++++++
 .../{ => task_sdk/docs}/test_docs_inventory.py   |  4 ++--
 .../tests/{ => task_sdk/docs}/test_public_api.py |  0
 3 files changed, 18 insertions(+), 2 deletions(-)
 create mode 100644 task-sdk/tests/task_sdk/docs/__init__.py
 rename task-sdk/tests/{ => task_sdk/docs}/test_docs_inventory.py (96%)
 rename task-sdk/tests/{ => task_sdk/docs}/test_public_api.py (100%)

diff --git a/task-sdk/tests/task_sdk/docs/__init__.py b/task-sdk/tests/task_sdk/docs/__init__.py
new file mode 100644
index 0000000000000..13a83393a9124
--- /dev/null
+++ b/task-sdk/tests/task_sdk/docs/__init__.py
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
diff --git a/task-sdk/tests/test_docs_inventory.py b/task-sdk/tests/task_sdk/docs/test_docs_inventory.py
similarity index 96%
rename from task-sdk/tests/test_docs_inventory.py
rename to task-sdk/tests/task_sdk/docs/test_docs_inventory.py
index a1308031d524f..eacbab7f4d742 100644
--- a/task-sdk/tests/test_docs_inventory.py
+++ b/task-sdk/tests/task_sdk/docs/test_docs_inventory.py
@@ -20,7 +20,7 @@
 from pathlib import Path
 
 # Add the SDK src directory to sys.path so that importlib loads our airflow.sdk module
-sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
+sys.path.insert(0, str(Path(__file__).parents[3] / "src"))
 import importlib
 import shutil
 import subprocess
@@ -59,7 +59,7 @@ def test_docs_inventory_matches_public_api(tmp_path):
     """
     Build the HTML docs and compare the generated Sphinx inventory with the public API re-exports.
     """
-    docs_dir = Path(__file__).parent.parent / "docs"
+    docs_dir = Path(__file__).parents[3] / "docs"
     build_dir = tmp_path / "build"
     sphinx = shutil.which("sphinx-build")
     subprocess.run([sphinx, "-b", "html", "-q", str(docs_dir), str(build_dir)], check=True)
diff --git a/task-sdk/tests/test_public_api.py b/task-sdk/tests/task_sdk/docs/test_public_api.py
similarity index 100%
rename from task-sdk/tests/test_public_api.py
rename to task-sdk/tests/task_sdk/docs/test_public_api.py

From 6b5f26a260fae99a9588de00e188e45a11c73087 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Mon, 23 Jun 2025 08:31:07 +0200
Subject: [PATCH 072/381] Bump upper binding on pandas in all providers
 (#52060)

We are limiting pandas to < 2.2, however Pandas is now at 2.4 and
if we limit it to <2.2 it's not possible to have providers that
support python 3.13

We should open up to higher pandas versions, there is no reason to
believe that newer pandas versions might be breaking heavily - we
are using very small subset of pandas APIs that should be stable.
We also should add provisional lower bounds for
Python 3.13, because older versions of Pandas do not compile for
Python 3.13 and sometiems uv or other installers might attempt
to build those older versions if they are not limited.
---
 providers/apache/hdfs/pyproject.toml | 3 ++-
 providers/common/sql/pyproject.toml  | 7 ++-----
 providers/databricks/pyproject.toml  | 3 ++-
 providers/exasol/pyproject.toml      | 7 ++-----
 providers/papermill/pyproject.toml   | 3 ++-
 providers/salesforce/pyproject.toml  | 7 ++-----
 providers/snowflake/pyproject.toml   | 7 ++-----
 providers/weaviate/pyproject.toml    | 7 ++-----
 8 files changed, 16 insertions(+), 28 deletions(-)

diff --git a/providers/apache/hdfs/pyproject.toml b/providers/apache/hdfs/pyproject.toml
index 2f26a7141552c..5c6030d945fa7 100644
--- a/providers/apache/hdfs/pyproject.toml
+++ b/providers/apache/hdfs/pyproject.toml
@@ -60,7 +60,8 @@ dependencies = [
     "apache-airflow>=2.10.0",
     'hdfs[avro,dataframe,kerberos]>=2.5.4;python_version<"3.12"',
     'hdfs[avro,dataframe,kerberos]>=2.7.3;python_version>="3.12"',
-    "pandas>=2.1.2,<2.2",
+    'pandas>=2.1.2; python_version <"3.13"',
+    'pandas>=2.2.3; python_version >="3.13"',
 ]
 
 [dependency-groups]
diff --git a/providers/common/sql/pyproject.toml b/providers/common/sql/pyproject.toml
index 0f44f9b67d773..95d6ac9158ba8 100644
--- a/providers/common/sql/pyproject.toml
+++ b/providers/common/sql/pyproject.toml
@@ -69,11 +69,8 @@ dependencies = [
 # Any change in the dependencies is preserved when the file is regenerated
 [project.optional-dependencies]
 "pandas" = [
-    # In pandas 2.2 minimal version of the sqlalchemy is 2.0
-    # https://pandas.pydata.org/docs/whatsnew/v2.2.0.html#increased-minimum-versions-for-dependencies
-    # However Airflow not fully supports it yet: https://github.com/apache/airflow/issues/28723
-    # In addition FAB also limit sqlalchemy to < 2.0
-    "pandas>=2.1.2,<2.2",
+    'pandas>=2.1.2; python_version <"3.13"',
+    'pandas>=2.2.3; python_version >="3.13"',
 ]
 "openlineage" = [
     "apache-airflow-providers-openlineage"
diff --git a/providers/databricks/pyproject.toml b/providers/databricks/pyproject.toml
index 891ddf4421fed..2da0ace112770 100644
--- a/providers/databricks/pyproject.toml
+++ b/providers/databricks/pyproject.toml
@@ -65,7 +65,8 @@ dependencies = [
     "databricks-sqlalchemy>=1.0.2",
     "aiohttp>=3.9.2, <4",
     "mergedeep>=1.3.4",
-    "pandas>=2.1.2,<2.2",
+    'pandas>=2.1.2; python_version <"3.13"',
+    'pandas>=2.2.3; python_version >="3.13"',
     "pyarrow>=14.0.1",
 ]
 
diff --git a/providers/exasol/pyproject.toml b/providers/exasol/pyproject.toml
index 69ae6d90ad2da..f6987a182cd48 100644
--- a/providers/exasol/pyproject.toml
+++ b/providers/exasol/pyproject.toml
@@ -60,11 +60,8 @@ dependencies = [
     "apache-airflow>=2.10.0",
     "apache-airflow-providers-common-sql>=1.26.0",
     "pyexasol>=0.26.0",
-    # In pandas 2.2 minimal version of the sqlalchemy is 2.0
-    # https://pandas.pydata.org/docs/whatsnew/v2.2.0.html#increased-minimum-versions-for-dependencies
-    # However Airflow not fully supports it yet: https://github.com/apache/airflow/issues/28723
-    # In addition FAB also limit sqlalchemy to < 2.0
-    "pandas>=2.1.2,<2.2",
+    'pandas>=2.1.2; python_version <"3.13"',
+    'pandas>=2.2.3; python_version >="3.13"',
 ]
 
 [dependency-groups]
diff --git a/providers/papermill/pyproject.toml b/providers/papermill/pyproject.toml
index e23f18478858c..48e029356b745 100644
--- a/providers/papermill/pyproject.toml
+++ b/providers/papermill/pyproject.toml
@@ -61,7 +61,8 @@ dependencies = [
     "papermill[all]>=2.6.0",
     "scrapbook[all]>=0.5.0",
     "ipykernel>=6.29.4",
-    "pandas>=2.1.2,<2.2",
+    'pandas>=2.1.2; python_version <"3.13"',
+    'pandas>=2.2.3; python_version >="3.13"',
     "nbconvert>=7.16.1",
 ]
 
diff --git a/providers/salesforce/pyproject.toml b/providers/salesforce/pyproject.toml
index a9ffeaa771c82..c844229839fc0 100644
--- a/providers/salesforce/pyproject.toml
+++ b/providers/salesforce/pyproject.toml
@@ -59,11 +59,8 @@ requires-python = "~=3.9"
 dependencies = [
     "apache-airflow>=2.10.0",
     "simple-salesforce>=1.0.0",
-    # In pandas 2.2 minimal version of the sqlalchemy is 2.0
-    # https://pandas.pydata.org/docs/whatsnew/v2.2.0.html#increased-minimum-versions-for-dependencies
-    # However Airflow not fully supports it yet: https://github.com/apache/airflow/issues/28723
-    # In addition FAB also limit sqlalchemy to < 2.0
-    "pandas>=2.1.2,<2.2",
+    'pandas>=2.1.2; python_version <"3.13"',
+    'pandas>=2.2.3; python_version >="3.13"',
 ]
 
 [dependency-groups]
diff --git a/providers/snowflake/pyproject.toml b/providers/snowflake/pyproject.toml
index 7f2a73587197a..311c2da8b3ea7 100644
--- a/providers/snowflake/pyproject.toml
+++ b/providers/snowflake/pyproject.toml
@@ -60,11 +60,8 @@ dependencies = [
     "apache-airflow>=2.10.0",
     "apache-airflow-providers-common-compat>=1.6.0",
     "apache-airflow-providers-common-sql>=1.21.0",
-    # In pandas 2.2 minimal version of the sqlalchemy is 2.0
-    # https://pandas.pydata.org/docs/whatsnew/v2.2.0.html#increased-minimum-versions-for-dependencies
-    # However Airflow not fully supports it yet: https://github.com/apache/airflow/issues/28723
-    # In addition FAB also limit sqlalchemy to < 2.0
-    "pandas>=2.1.2,<2.2",
+    'pandas>=2.1.2; python_version <"3.13"',
+    'pandas>=2.2.3; python_version >="3.13"',
     "pyarrow>=14.0.1",
     "snowflake-connector-python>=3.7.1",
     "snowflake-sqlalchemy>=1.4.0",
diff --git a/providers/weaviate/pyproject.toml b/providers/weaviate/pyproject.toml
index d38de31595604..0ba26fded488d 100644
--- a/providers/weaviate/pyproject.toml
+++ b/providers/weaviate/pyproject.toml
@@ -60,11 +60,8 @@ dependencies = [
     "apache-airflow>=2.10.0",
     "httpx>=0.25.0",
     "weaviate-client>=4.4.0",
-    # In pandas 2.2 minimal version of the sqlalchemy is 2.0
-    # https://pandas.pydata.org/docs/whatsnew/v2.2.0.html#increased-minimum-versions-for-dependencies
-    # However Airflow not fully supports it yet: https://github.com/apache/airflow/issues/28723
-    # In addition FAB also limit sqlalchemy to < 2.0
-    "pandas>=2.1.2,<2.2",
+    'pandas>=2.1.2; python_version <"3.13"',
+    'pandas>=2.2.3; python_version >="3.13"',
 ]
 
 [dependency-groups]

From b5a632451313567376456103d238d768194f262c Mon Sep 17 00:00:00 2001
From: Wei-Yu Chen <60685934+Jasperora@users.noreply.github.com>
Date: Mon, 23 Jun 2025 14:31:47 +0800
Subject: [PATCH 073/381] Remove pytest.mark.db_test: apache beam (#52059)

---
 .pre-commit-config.yaml                                         | 1 +
 providers/apache/beam/tests/unit/apache/beam/hooks/test_beam.py | 1 -
 2 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 66f82827b27d2..cf05e5b5660ef 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -580,6 +580,7 @@ repos:
         files: >
             (?x)
             ^providers/airbyte/.*\.py$|
+            ^providers/apache/beam/.*\.py$|
             ^providers/cloudant/.*\.py$|
             ^providers/cohere/.*\.py$|
             ^providers/datadog/.*\.py$|
diff --git a/providers/apache/beam/tests/unit/apache/beam/hooks/test_beam.py b/providers/apache/beam/tests/unit/apache/beam/hooks/test_beam.py
index e7bc4b753a5e2..1f5682ddea3fd 100644
--- a/providers/apache/beam/tests/unit/apache/beam/hooks/test_beam.py
+++ b/providers/apache/beam/tests/unit/apache/beam/hooks/test_beam.py
@@ -386,7 +386,6 @@ def test_start_go_pipeline_with_binary(self, mock_runner):
 
 
 class TestBeamRunner:
-    @pytest.mark.db_test
     @mock.patch("subprocess.Popen")
     @mock.patch("select.select")
     def test_beam_wait_for_done_logging(self, mock_select, mock_popen, caplog):

From d46cdffec25353fdd1031e6034f46ccc924c1090 Mon Sep 17 00:00:00 2001
From: Wei-Yu Chen <60685934+Jasperora@users.noreply.github.com>
Date: Mon, 23 Jun 2025 14:33:18 +0800
Subject: [PATCH 074/381] Remove pytest.mark.db_test: jdbc (#52061)

---
 .pre-commit-config.yaml                           | 1 +
 providers/jdbc/tests/unit/jdbc/hooks/test_jdbc.py | 3 ---
 2 files changed, 1 insertion(+), 3 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index cf05e5b5660ef..2642e28ed053a 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -593,6 +593,7 @@ repos:
             ^providers/hashicorp/.*\.py$|
             ^providers/imap/.*\.py$|
             ^providers/influxdb/.*\.py$|
+            ^providers/jdbc/.*\.py$|
             ^providers/jenkins/.*\.py$|
             ^providers/mongo/.*\.py$|
             ^providers/neo4j/.*\.py$|
diff --git a/providers/jdbc/tests/unit/jdbc/hooks/test_jdbc.py b/providers/jdbc/tests/unit/jdbc/hooks/test_jdbc.py
index 8e75592d83d73..0454f8a10c9e3 100644
--- a/providers/jdbc/tests/unit/jdbc/hooks/test_jdbc.py
+++ b/providers/jdbc/tests/unit/jdbc/hooks/test_jdbc.py
@@ -33,9 +33,6 @@
 from airflow.models import Connection
 from airflow.providers.jdbc.hooks.jdbc import JdbcHook, suppress_and_warn
 
-pytestmark = pytest.mark.db_test
-
-
 jdbc_conn_mock = Mock(name="jdbc_conn")
 logger = logging.getLogger(__name__)
 

From 9ff9cc448a4bbc20ccbdc31f87ef5f15dc59efa7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Josef=20=C5=A0im=C3=A1nek?= <josef.simanek@gmail.com>
Date: Mon, 23 Jun 2025 08:36:11 +0200
Subject: [PATCH 075/381] Show info text at empty connections page. (#52032)

---
 .../ui/public/i18n/locales/ar/admin.json      |  4 +-
 .../ui/public/i18n/locales/de/admin.json      |  4 +-
 .../ui/public/i18n/locales/en/admin.json      |  7 ++-
 .../ui/public/i18n/locales/fr/admin.json      |  4 +-
 .../ui/public/i18n/locales/he/admin.json      |  4 +-
 .../ui/public/i18n/locales/ko/admin.json      |  4 +-
 .../ui/public/i18n/locales/pl/admin.json      |  4 +-
 .../ui/public/i18n/locales/zh-TW/admin.json   |  4 +-
 .../ui/src/pages/Connections/Connections.tsx  |  2 +
 .../pages/Connections/NothingFoundInfo.tsx    | 45 +++++++++++++++++++
 10 files changed, 74 insertions(+), 8 deletions(-)
 create mode 100644 airflow-core/src/airflow/ui/src/pages/Connections/NothingFoundInfo.tsx

diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ar/admin.json b/airflow-core/src/airflow/ui/public/i18n/locales/ar/admin.json
index b3396e6c75e14..ae32f5ccd8266 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/ar/admin.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/ar/admin.json
@@ -39,7 +39,9 @@
       "selectConnectionType": "اختر نوع الموَّصل",
       "standardFields": "حقول قياسية"
     },
-    "noRowMessage": "لا توجد موَّصلات متاحة",
+    "nothingFound": {
+        "title": "لا توجد موَّصلات متاحة"
+    },
     "searchPlaceholder": "البحث عن موَّصلات",
     "test": "اختبار الموَّصل",
     "testDisabled": "اختبار الموَّصل معطل. تواصل مع المسؤول لتفعيله.",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/de/admin.json b/airflow-core/src/airflow/ui/public/i18n/locales/de/admin.json
index f8d2194b0b571..03fe6bcf6d7ad 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/de/admin.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/de/admin.json
@@ -39,7 +39,9 @@
       "selectConnectionType": "Verbindungstyp auswählen",
       "standardFields": "Standardfelder"
     },
-    "noRowMessage": "Keine Verbindungen gefunden",
+    "nothingFound": {
+        "title": "Keine Verbindungen gefunden!"
+    },
     "searchPlaceholder": "Verbindungen suchen",
     "test": "Verbindung testen",
     "testDisabled": "Das Testen von Verbindungen ist deaktiviert. Der Administrator kann via Konfiguration das Testen freischalten.",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/en/admin.json b/airflow-core/src/airflow/ui/public/i18n/locales/en/admin.json
index aeb93b92c76fd..8dfc0ec64c635 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/en/admin.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/en/admin.json
@@ -39,7 +39,12 @@
       "selectConnectionType": "Select Connection Type",
       "standardFields": "Standard Fields"
     },
-    "noRowMessage": "No connections found",
+    "nothingFound": {
+        "title": "No connection found!",
+        "description": "Connections defined via environment variables or secrets managers are not listed here.",
+        "learnMore": "These are resolved at runtime and are not visible in the UI.",
+        "documentationLink": "Learn more in the Airflow documentation."
+    },
     "searchPlaceholder": "Search Connections",
     "test": "Test Connection",
     "testDisabled": "Test connection feature is disabled. Please contact an administrator to enable it.",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/fr/admin.json b/airflow-core/src/airflow/ui/public/i18n/locales/fr/admin.json
index 15edd6d9aad58..2c0592320df9c 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/fr/admin.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/fr/admin.json
@@ -39,7 +39,9 @@
       "selectConnectionType": "Sélectionner le Type de Connexion",
       "standardFields": "Champs Standards"
     },
-    "noRowMessage": "Aucune connexion trouvée",
+    "nothingFound": {
+        "title": "Aucune connexion trouvée!"
+    },
     "searchPlaceholder": "Rechercher les connexions",
     "test": "Test la connexion",
     "testDisabled": "Le test de connexion est désactivé. Veuillez contacter un administrateur pour l'activer.",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/he/admin.json b/airflow-core/src/airflow/ui/public/i18n/locales/he/admin.json
index 30bc908225b07..adadffd1961e3 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/he/admin.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/he/admin.json
@@ -39,7 +39,9 @@
       "selectConnectionType": "בחר סוג חיבור",
       "standardFields": "שדות סטנדרטיים"
     },
-    "noRowMessage": "לא נמצאו חיבורים",
+    "nothingFound": {
+        "title": "לא נמצאו חיבורים"
+    },
     "searchPlaceholder": "חפש חיבורים",
     "test": "בדוק חיבור",
     "testDisabled": "אפשרות זו אינה זמינה. פנו למנהל המערכת להפעלתה",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ko/admin.json b/airflow-core/src/airflow/ui/public/i18n/locales/ko/admin.json
index ee6c8a89c03ef..c1fd0f24c7381 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/ko/admin.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/ko/admin.json
@@ -39,7 +39,9 @@
       "selectConnectionType": "연결 유형 선택",
       "standardFields": "기본 필드"
     },
-    "noRowMessage": "연결을 찾을 수 없습니다.",
+    "nothingFound": {
+        "title": "연결을 찾을 수 없습니다."
+    },
     "searchPlaceholder": "연결 검색",
     "test": "연결 테스트",
     "testDisabled": "연결 테스트 기능이 비활성화되어 있습니다. 관리자에게 활성화를 요청하세요.",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/pl/admin.json b/airflow-core/src/airflow/ui/public/i18n/locales/pl/admin.json
index 909a37c294d37..573c185aa126f 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/pl/admin.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pl/admin.json
@@ -39,7 +39,9 @@
       "selectConnectionType": "Wybierz typ połączenia",
       "standardFields": "Standardowe pola"
     },
-    "noRowMessage": "Nie znaleziono połączeń",
+    "nothingFound": {
+        "title": "Nie znaleziono połączeń!"
+    },
     "searchPlaceholder": "Szukaj połączeń",
     "test": "Test połączenia",
     "testDisabled": "Testowanie połączeń wyłączone. Skontaktuj się z administratorem, aby je włączyć.",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/admin.json b/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/admin.json
index e64f103e5bd33..c8b9242d12179 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/admin.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/admin.json
@@ -39,7 +39,9 @@
       "selectConnectionType": "選擇連線類型",
       "standardFields": "標準欄位"
     },
-    "noRowMessage": "找不到連線",
+    "nothingFound": {
+        "title": "找不到連線"
+    },
     "searchPlaceholder": "搜尋連線",
     "test": "測試連線",
     "testDisabled": "測試連線功能已停用。請聯繫管理員以啟用。",
diff --git a/airflow-core/src/airflow/ui/src/pages/Connections/Connections.tsx b/airflow-core/src/airflow/ui/src/pages/Connections/Connections.tsx
index 8145c6744d047..5a33e52975ce7 100644
--- a/airflow-core/src/airflow/ui/src/pages/Connections/Connections.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Connections/Connections.tsx
@@ -40,6 +40,7 @@ import AddConnectionButton from "./AddConnectionButton";
 import DeleteConnectionButton from "./DeleteConnectionButton";
 import DeleteConnectionsButton from "./DeleteConnectionsButton";
 import EditConnectionButton from "./EditConnectionButton";
+import { NothingFoundInfo } from "./NothingFoundInfo";
 import TestConnectionButton from "./TestConnectionButton";
 
 export type ConnectionBody = {
@@ -198,6 +199,7 @@ export const Connections = () => {
           isFetching={isFetching}
           isLoading={isLoading}
           modelName={translate("common:admin.Connections")}
+          noRowsMessage={<NothingFoundInfo />}
           onStateChange={setTableURLState}
           total={data?.total_entries ?? 0}
         />
diff --git a/airflow-core/src/airflow/ui/src/pages/Connections/NothingFoundInfo.tsx b/airflow-core/src/airflow/ui/src/pages/Connections/NothingFoundInfo.tsx
new file mode 100644
index 0000000000000..4d1388c827413
--- /dev/null
+++ b/airflow-core/src/airflow/ui/src/pages/Connections/NothingFoundInfo.tsx
@@ -0,0 +1,45 @@
+/*!
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { Box, Text, Link, Stack } from "@chakra-ui/react";
+import { useTranslation } from "react-i18next";
+
+import { useVersionServiceGetVersion } from "openapi/queries";
+
+export const NothingFoundInfo = () => {
+  const { t: translate } = useTranslation("admin");
+  const { data } = useVersionServiceGetVersion();
+  const docsLink = `https://airflow.apache.org/docs/apache-airflow/${data?.version}/howto/connection.html#visibility-in-ui-and-cli`;
+
+  return (
+    <Box textAlign="center">
+      <Stack>
+        <Text fontSize="2xl" fontWeight="bold">
+          {translate("connections.nothingFound.title")}
+        </Text>
+        <Text>{translate("connections.nothingFound.description")}</Text>
+        <Text>
+          {translate("connections.nothingFound.learnMore")}{" "}
+          <Link href={docsLink} target="blank">
+            {translate("connections.nothingFound.documentationLink")}
+          </Link>
+        </Text>
+      </Stack>
+    </Box>
+  );
+};

From cc1e8c8c0b74406564ccf82e4edf1729180a1f5a Mon Sep 17 00:00:00 2001
From: Ankit Chaurasia <8670962+sunank200@users.noreply.github.com>
Date: Mon, 23 Jun 2025 12:45:20 +0545
Subject: [PATCH 076/381] docs(task-sdk): add and link dynamic task mapping
 docs (#51871)

Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
---
 task-sdk/docs/conf.py                  |  1 +
 task-sdk/docs/dynamic-task-mapping.rst | 99 ++++++++++++++++++++++++++
 task-sdk/docs/index.rst                |  1 +
 3 files changed, 101 insertions(+)
 create mode 100644 task-sdk/docs/dynamic-task-mapping.rst

diff --git a/task-sdk/docs/conf.py b/task-sdk/docs/conf.py
index e3fbacae2ce1a..67cbda55f58f2 100644
--- a/task-sdk/docs/conf.py
+++ b/task-sdk/docs/conf.py
@@ -58,6 +58,7 @@
 autoapi_file_patterns = ["*.pyi", "*.py"]
 
 html_theme = "sphinx_airflow_theme"
+html_sidebars = {"**": ["localtoc.html", "globaltoc.html", "searchbox.html", "relations.html"]}
 
 
 global_substitutions = {
diff --git a/task-sdk/docs/dynamic-task-mapping.rst b/task-sdk/docs/dynamic-task-mapping.rst
new file mode 100644
index 0000000000000..84481bffcac81
--- /dev/null
+++ b/task-sdk/docs/dynamic-task-mapping.rst
@@ -0,0 +1,99 @@
+ .. Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+ ..   http://www.apache.org/licenses/LICENSE-2.0
+
+ .. Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+.. _sdk-dynamic-task-mapping:
+
+Dynamic Task Mapping with Task SDK
+==================================
+
+Dynamic Task Mapping allows tasks defined with the Task SDK to generate
+a variable number of task instances at runtime based on upstream data.
+This is enabled via the ``expand()`` method on tasks, providing a way
+to parallelize execution without knowing the number of tasks ahead of time.
+
+Simple Mapping
+--------------
+
+Map over a Python list directly in the DAG:
+
+.. code-block:: python
+
+   from datetime import datetime
+
+   from airflow.sdk import DAG, task
+
+
+   @task
+   def add_one(x: int):
+       return x + 1
+
+
+   @task
+   def sum_it(values: list[int]):
+       print(f"Total was {sum(values)}")
+
+
+   with DAG(dag_id="dynamic-map-simple", start_date=datetime(2022, 1, 1)) as dag:
+       summed = sum_it(values=add_one.expand(x=[1, 2, 3, 4, 5]))
+
+Task-Generated Mapping
+----------------------
+
+Generate the list at runtime from an upstream task:
+
+.. code-block:: python
+
+   @task
+   def make_list():
+       # This could fetch data from an API, database, etc.
+       return ["a", "b", "c"]
+
+
+   @task
+   def consume(item: str):
+       print(item)
+
+
+   with DAG(dag_id="dynamic-map-generated", start_date=datetime(2022, 1, 1)) as dag:
+       consume.expand(item=make_list())
+
+Details
+-----------
+
+- Only keyword arguments can be passed to ``expand()``.
+- Mapped inputs are provided to tasks as lazy proxy objects. To force
+  evaluation into a concrete list, wrap the proxy in ``list()``.
+- Combine static parameters with mapped ones using ``partial()``:
+
+  .. code-block:: python
+
+     @task
+     def add(x: int, y: int):
+         return x + y
+
+
+     with DAG(dag_id="map-with-partial", start_date=datetime(2022, 1, 1)) as dag:
+         add.partial(y=10).expand(x=[1, 2, 3])
+
+Advanced Usage
+--------------
+
+For advanced patterns—such as repeated mapping, cross-product mapping,
+named mappings (via ``map_index_template``), and handling large
+datasets—see the Airflow Core documentation:
+
+`Dynamic Task Mapping in the Airflow Core docs <https://airflow.apache.org/docs/apache-airflow/stable/authoring-and-scheduling/dynamic-task-mapping.html>`_.
diff --git a/task-sdk/docs/index.rst b/task-sdk/docs/index.rst
index 6ff3650b58711..24410cd4ece45 100644
--- a/task-sdk/docs/index.rst
+++ b/task-sdk/docs/index.rst
@@ -88,4 +88,5 @@ Refer to :doc:`api` for the complete reference of all decorators and classes.
   :hidden:
 
   examples
+  dynamic-task-mapping
   api

From 8d48d53df5736c376abdcdcb8378a2f08d92905b Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung <uranusjr@gmail.com>
Date: Mon, 23 Jun 2025 15:03:54 +0800
Subject: [PATCH 077/381] Add exception to context for task callbacks (#52055)

---
 .../src/airflow/sdk/execution_time/task_runner.py     |  3 ++-
 .../tests/task_sdk/execution_time/test_task_runner.py | 11 +++++++++--
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/task-sdk/src/airflow/sdk/execution_time/task_runner.py b/task-sdk/src/airflow/sdk/execution_time/task_runner.py
index 7ee837915a6f1..6c6e597f65e5c 100644
--- a/task-sdk/src/airflow/sdk/execution_time/task_runner.py
+++ b/task-sdk/src/airflow/sdk/execution_time/task_runner.py
@@ -1295,7 +1295,8 @@ def main():
             bundle_name=ti.bundle_instance.name,
             bundle_version=ti.bundle_instance.version,
         ):
-            state, msg, error = run(ti, context, log)
+            state, _, error = run(ti, context, log)
+            context["exception"] = error
             finalize(ti, state, context, log, error)
     except KeyboardInterrupt:
         log.exception("Ctrl-c hit")
diff --git a/task-sdk/tests/task_sdk/execution_time/test_task_runner.py b/task-sdk/tests/task_sdk/execution_time/test_task_runner.py
index f41442a0c5eff..f2ff89670818b 100644
--- a/task-sdk/tests/task_sdk/execution_time/test_task_runner.py
+++ b/task-sdk/tests/task_sdk/execution_time/test_task_runner.py
@@ -2288,6 +2288,9 @@ def execute(self, context):
 
 @pytest.mark.usefixtures("mock_supervisor_comms")
 class TestTaskRunnerCallsCallbacks:
+    class _Failure(Exception):
+        """Exception raised in a failed execution and received by the failure callback."""
+
     def _execute_success(self, context):
         self.results.append("execute success")
 
@@ -2299,7 +2302,7 @@ def _execute_skipped(self, context):
 
     def _execute_failure(self, context):
         self.results.append("execute failure")
-        raise Exception("sorry!")
+        raise self._Failure("sorry!")
 
     @pytest.mark.parametrize(
         "execute_impl, should_retry, expected_state, expected_results",
@@ -2347,6 +2350,10 @@ def test_task_runner_calls_callback(
         def custom_callback(context, *, kind):
             collected_results.append(f"on-{kind} callback")
 
+        def failure_callback(context):
+            custom_callback(context, kind="failure")
+            assert isinstance(context["exception"], self._Failure)
+
         class CustomOperator(BaseOperator):
             results = collected_results
             execute = execute_impl
@@ -2356,7 +2363,7 @@ class CustomOperator(BaseOperator):
             on_execute_callback=functools.partial(custom_callback, kind="execute"),
             on_skipped_callback=functools.partial(custom_callback, kind="skipped"),
             on_success_callback=functools.partial(custom_callback, kind="success"),
-            on_failure_callback=functools.partial(custom_callback, kind="failure"),
+            on_failure_callback=failure_callback,
             on_retry_callback=functools.partial(custom_callback, kind="retry"),
         )
         runtime_ti = create_runtime_ti(dag_id="dag", task=task, should_retry=should_retry)

From 39e3baf9e17effaabd6fb4f1236b712572f8ddb6 Mon Sep 17 00:00:00 2001
From: Wei-Yu Chen <60685934+Jasperora@users.noreply.github.com>
Date: Mon, 23 Jun 2025 15:25:22 +0800
Subject: [PATCH 078/381] Remove pytest.mark.db_test: apache iceberg (#52063)

Co-authored-by: Jarek Potiuk <jarek@potiuk.com>
---
 .pre-commit-config.yaml                                        | 1 +
 .../iceberg/tests/unit/apache/iceberg/hooks/test_iceberg.py    | 3 ---
 2 files changed, 1 insertion(+), 3 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 2642e28ed053a..5231bd247ebdc 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -580,6 +580,7 @@ repos:
         files: >
             (?x)
             ^providers/airbyte/.*\.py$|
+            ^providers/apache/iceberg/.*\.py$|
             ^providers/apache/beam/.*\.py$|
             ^providers/cloudant/.*\.py$|
             ^providers/cohere/.*\.py$|
diff --git a/providers/apache/iceberg/tests/unit/apache/iceberg/hooks/test_iceberg.py b/providers/apache/iceberg/tests/unit/apache/iceberg/hooks/test_iceberg.py
index f11e1d4ea6297..28ce20d777d31 100644
--- a/providers/apache/iceberg/tests/unit/apache/iceberg/hooks/test_iceberg.py
+++ b/providers/apache/iceberg/tests/unit/apache/iceberg/hooks/test_iceberg.py
@@ -19,13 +19,10 @@
 
 from unittest.mock import Mock, patch
 
-import pytest
 import requests_mock
 
 from airflow.providers.apache.iceberg.hooks.iceberg import IcebergHook
 
-pytestmark = pytest.mark.db_test
-
 
 def test_iceberg_hook():
     access_token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSU"

From 2893be3bf2a54ef60d4a6e7faa8c454ecc7c5fc2 Mon Sep 17 00:00:00 2001
From: Dominik <105610163+dominikhei@users.noreply.github.com>
Date: Mon, 23 Jun 2025 09:32:33 +0200
Subject: [PATCH 079/381] Removed usage of pytest.mark.db_test from the redis
 provider (#52065)

---
 providers/redis/tests/unit/redis/hooks/test_redis.py          | 4 ++--
 .../redis/tests/unit/redis/log/test_redis_task_handler.py     | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/providers/redis/tests/unit/redis/hooks/test_redis.py b/providers/redis/tests/unit/redis/hooks/test_redis.py
index b64ffb909d241..d232537b23ca7 100644
--- a/providers/redis/tests/unit/redis/hooks/test_redis.py
+++ b/providers/redis/tests/unit/redis/hooks/test_redis.py
@@ -24,10 +24,9 @@
 from airflow.models import Connection
 from airflow.providers.redis.hooks.redis import RedisHook
 
-pytestmark = pytest.mark.db_test
-
 
 class TestRedisHook:
+    @pytest.mark.db_test
     def test_get_conn(self):
         hook = RedisHook(redis_conn_id="redis_default")
         assert hook.redis is None
@@ -78,6 +77,7 @@ def test_get_conn_with_extra_config(self, mock_get_connection, mock_redis):
             ssl_check_hostname=connection.extra_dejson["ssl_check_hostname"],
         )
 
+    @pytest.mark.db_test
     def test_get_conn_password_stays_none(self):
         hook = RedisHook(redis_conn_id="redis_default")
         hook.get_conn()
diff --git a/providers/redis/tests/unit/redis/log/test_redis_task_handler.py b/providers/redis/tests/unit/redis/log/test_redis_task_handler.py
index ac3c3a4078ea9..fb845ba48dd45 100644
--- a/providers/redis/tests/unit/redis/log/test_redis_task_handler.py
+++ b/providers/redis/tests/unit/redis/log/test_redis_task_handler.py
@@ -32,8 +32,6 @@
 from tests_common.test_utils.config import conf_vars
 from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
-pytestmark = pytest.mark.db_test
-
 
 class TestRedisTaskHandler:
     @pytest.fixture
@@ -74,6 +72,7 @@ def ti(self):
         with create_session() as session:
             session.query(DagRun).delete()
 
+    @pytest.mark.db_test
     @conf_vars({("logging", "remote_log_conn_id"): "redis_default"})
     def test_write(self, ti):
         handler = RedisTaskHandler("any", max_lines=5, ttl_seconds=2)
@@ -94,6 +93,7 @@ def test_write(self, ti):
         pipeline.return_value.expire.assert_called_once_with(key, time=2)
         pipeline.return_value.execute.assert_called_once_with()
 
+    @pytest.mark.db_test
     @conf_vars({("logging", "remote_log_conn_id"): "redis_default"})
     def test_read(self, ti):
         handler = RedisTaskHandler("any")

From 81cd2a0bbeb2dfdaa6409f728fa00a49e80232f1 Mon Sep 17 00:00:00 2001
From: Jens Scheffler <95105677+jscheffl@users.noreply.github.com>
Date: Mon, 23 Jun 2025 09:46:59 +0200
Subject: [PATCH 080/381] Fix wrong translation of control key in German UI
 (#52046)

---
 .../src/airflow/ui/public/i18n/locales/de/dags.json         | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/de/dags.json b/airflow-core/src/airflow/ui/public/i18n/locales/de/dags.json
index 06e96c85cd90a..d79a944687da3 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/de/dags.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/de/dags.json
@@ -23,7 +23,7 @@
     },
     "clear": {
       "button": "{{type}} zurücksetzen",
-      "buttonTooltip": "STRG+C zum Zurücksetzen tippen",
+      "buttonTooltip": "Umschalttaste+C zum Zurücksetzen tippen",
       "error": "Fehler beim Zurücksetzen von {{type}}",
       "title": "{{type}} bereinigen und neu planen"
     },
@@ -43,8 +43,8 @@
     "markAs": {
       "button": "{{type}} markieren...",
       "buttonTooltip": {
-        "failed": "STRG+F tippen um als fehlgeschlagen zu markieren",
-        "success": "STRG+S tippen um als erfolgreich zu markieren"
+        "failed": "Umschalttaste+F tippen um als fehlgeschlagen zu markieren",
+        "success": "Umschalttaste+S tippen um als erfolgreich zu markieren"
       },
       "title": "{{type}} auf den Status {{state}} setzen"
     },

From d6a05d6798895d9ab05833674d450dae246df809 Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Mon, 23 Jun 2025 13:34:00 +0530
Subject: [PATCH 081/381] Remove residual occurences of 'merge_conn' from cncf
 tests (#52064)

---
 .../tests/unit/cncf/kubernetes/hooks/test_kubernetes.py  | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/hooks/test_kubernetes.py b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/hooks/test_kubernetes.py
index 4f28a305cbe2e..ad1b07ebf4811 100644
--- a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/hooks/test_kubernetes.py
+++ b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/hooks/test_kubernetes.py
@@ -37,7 +37,6 @@
 from airflow.hooks.base import BaseHook
 from airflow.models import Connection
 from airflow.providers.cncf.kubernetes.hooks.kubernetes import AsyncKubernetesHook, KubernetesHook
-from airflow.utils.db import merge_conn
 
 from tests_common.test_utils.db import clear_db_connections
 from tests_common.test_utils.providers import get_provider_min_airflow_version
@@ -840,9 +839,9 @@ def kube_config_loader(self):
 
     @staticmethod
     @pytest.fixture
-    def kubernetes_connection():
+    def kubernetes_connection(create_connection_without_db):
         extra = {"kube_config": '{"test": "kube"}'}
-        merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_type="kubernetes",
                 conn_id=CONN_ID,
@@ -910,12 +909,12 @@ async def test_load_config_with_conn_id(
     @mock.patch(INCLUSTER_CONFIG_LOADER)
     @mock.patch(KUBE_CONFIG_MERGER)
     async def test_load_config_with_conn_id_kube_config_path(
-        self, kube_config_merger, incluster_config, kube_config_loader, tmp_path
+        self, kube_config_merger, incluster_config, kube_config_loader, tmp_path, create_connection_without_db
     ):
         file_name = f"{tmp_path}/config"
         extra = {"kube_config_path": file_name}
         try:
-            merge_conn(
+            create_connection_without_db(
                 Connection(
                     conn_type="kubernetes",
                     conn_id=CONN_ID,

From ab3fec794d7201a2901ed1dcaad18d6062817634 Mon Sep 17 00:00:00 2001
From: Ankit Chaurasia <8670962+sunank200@users.noreply.github.com>
Date: Mon, 23 Jun 2025 13:59:12 +0545
Subject: [PATCH 082/381] Remove unused pytestmark = pytest.mark.db_test
 (#52067)

---
 providers/celery/tests/unit/celery/cli/test_celery_command.py | 2 --
 1 file changed, 2 deletions(-)

diff --git a/providers/celery/tests/unit/celery/cli/test_celery_command.py b/providers/celery/tests/unit/celery/cli/test_celery_command.py
index ae124f56fb63d..41f74c9c4a687 100644
--- a/providers/celery/tests/unit/celery/cli/test_celery_command.py
+++ b/providers/celery/tests/unit/celery/cli/test_celery_command.py
@@ -36,8 +36,6 @@
 from tests_common.test_utils.config import conf_vars
 from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
-pytestmark = pytest.mark.db_test
-
 
 @pytest.mark.backend("mysql", "postgres")
 @conf_vars({("dag_processor", "stale_bundle_cleanup_interval"): 0})

From f9547e49326905a06fed97c381d0ccfcc87000c2 Mon Sep 17 00:00:00 2001
From: Wei-Yu Chen <60685934+Jasperora@users.noreply.github.com>
Date: Mon, 23 Jun 2025 16:31:08 +0800
Subject: [PATCH 083/381] Remove pytest.mark.db_test: apache flink (#52062)

Co-authored-by: Jarek Potiuk <jarek@potiuk.com>
---
 .pre-commit-config.yaml                                        | 3 ++-
 .../tests/unit/apache/flink/operators/test_flink_kubernetes.py | 3 ---
 .../tests/unit/apache/flink/sensors/test_flink_kubernetes.py   | 3 ---
 3 files changed, 2 insertions(+), 7 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 5231bd247ebdc..54e221cac5691 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -580,8 +580,9 @@ repos:
         files: >
             (?x)
             ^providers/airbyte/.*\.py$|
-            ^providers/apache/iceberg/.*\.py$|
             ^providers/apache/beam/.*\.py$|
+            ^providers/apache/flink/.*\.py$|
+            ^providers/apache/iceberg/.*\.py$|
             ^providers/cloudant/.*\.py$|
             ^providers/cohere/.*\.py$|
             ^providers/datadog/.*\.py$|
diff --git a/providers/apache/flink/tests/unit/apache/flink/operators/test_flink_kubernetes.py b/providers/apache/flink/tests/unit/apache/flink/operators/test_flink_kubernetes.py
index c9a4a5e8afffa..ac4c5f04f3829 100644
--- a/providers/apache/flink/tests/unit/apache/flink/operators/test_flink_kubernetes.py
+++ b/providers/apache/flink/tests/unit/apache/flink/operators/test_flink_kubernetes.py
@@ -29,9 +29,6 @@
 from airflow.providers.apache.flink.operators.flink_kubernetes import FlinkKubernetesOperator
 from airflow.utils import timezone
 
-pytestmark = pytest.mark.db_test
-
-
 TEST_VALID_APPLICATION_YAML = """
 apiVersion: flink.apache.org/v1beta1
 kind: FlinkDeployment
diff --git a/providers/apache/flink/tests/unit/apache/flink/sensors/test_flink_kubernetes.py b/providers/apache/flink/tests/unit/apache/flink/sensors/test_flink_kubernetes.py
index dfdc399d1e538..0ac117caa3287 100644
--- a/providers/apache/flink/tests/unit/apache/flink/sensors/test_flink_kubernetes.py
+++ b/providers/apache/flink/tests/unit/apache/flink/sensors/test_flink_kubernetes.py
@@ -32,9 +32,6 @@
 from airflow.providers.apache.flink.sensors.flink_kubernetes import FlinkKubernetesSensor
 from airflow.utils import timezone
 
-pytestmark = pytest.mark.db_test
-
-
 TEST_NO_STATE_CLUSTER = {
     "apiVersion": "flink.apache.org/v1beta1",
     "kind": "FlinkDeployment",

From d65cd6c6ec57854b5d5f6f2b19a4791662a4fa02 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Mon, 23 Jun 2025 11:16:18 +0200
Subject: [PATCH 084/381] Fix compatibility with new numpy and pandas (#52071)

After #52060 some tests started to fail - this PR fixes it:

* test_pandas.py is removed, it makes no sense as we seem to be
  testing if pandas has specific API (which we neither use nor
  guarantee)

* numpy serializers are now compatible with numpy 2
---
 airflow-core/tests/unit/always/test_pandas.py | 59 -------------------
 .../serializers/test_serializers.py           | 10 +++-
 2 files changed, 8 insertions(+), 61 deletions(-)
 delete mode 100644 airflow-core/tests/unit/always/test_pandas.py

diff --git a/airflow-core/tests/unit/always/test_pandas.py b/airflow-core/tests/unit/always/test_pandas.py
deleted file mode 100644
index 5e474392dd8aa..0000000000000
--- a/airflow-core/tests/unit/always/test_pandas.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-from __future__ import annotations
-
-import pytest
-from sqlalchemy import create_engine
-
-from airflow.configuration import conf
-
-pd = pytest.importorskip("pandas")
-pyarrow = pytest.importorskip("pyarrow")
-
-pytestmark = pytest.mark.db_test
-
-
-@pytest.mark.backend("postgres", "mysql")
-class TestPandasSQLAlchemyCompatibility:
-    @pytest.fixture(autouse=True)
-    def _setup_test_cases(self):
-        self.temp_table = "test_to_pandas"
-        uri = conf.get_mandatory_value("database", "sql_alchemy_conn")
-        self.engine = create_engine(uri)
-        yield
-        if self.engine:
-            with self.engine.begin() as conn:
-                conn.execute(f"DROP TABLE IF EXISTS {self.temp_table};")
-            self.engine.dispose()
-
-    def test_write_read_to_db(self):
-        pd.DataFrame({"a": [0, 1, 2, 3]}).to_sql(self.temp_table, self.engine)
-        pd.read_sql(f"SELECT * FROM {self.temp_table}", self.engine)
-
-
-class TestPandasSQLAlchemyCompatibilitySQLite:
-    @pytest.fixture(autouse=True)
-    def _setup_test_cases(self):
-        self.temp_table = "test_to_pandas"
-        self.engine = create_engine("sqlite:///:memory:")
-        yield
-        if self.engine:
-            self.engine.dispose()
-
-    def test_write_read_to_db(self):
-        pd.DataFrame({"a": [0, 1, 2, 3]}).to_sql(self.temp_table, self.engine)
-        pd.read_sql(f"SELECT * FROM {self.temp_table}", self.engine)
diff --git a/airflow-core/tests/unit/serialization/serializers/test_serializers.py b/airflow-core/tests/unit/serialization/serializers/test_serializers.py
index 6cc6505d48b0a..8aa6254816944 100644
--- a/airflow-core/tests/unit/serialization/serializers/test_serializers.py
+++ b/airflow-core/tests/unit/serialization/serializers/test_serializers.py
@@ -222,8 +222,14 @@ def test_numpy(self):
     def test_numpy_serializers(self):
         from airflow.serialization.serializers.numpy import serialize
 
-        assert serialize(np.bool_(False)) == (True, "numpy.bool_", 1, True)
-        assert serialize(np.float32(3.14)) == (float(np.float32(3.14)), "numpy.float32", 1, True)
+        numpy_version = metadata.version("numpy")
+        is_numpy_2 = version.parse(numpy_version).major == 2
+
+        assert serialize(np.bool_(False)) == (True, "numpy.bool" if is_numpy_2 else "numpy.bool_", 1, True)
+        if is_numpy_2:
+            assert serialize(np.float64(3.14)) == (float(np.float64(3.14)), "numpy.float64", 1, True)
+        else:
+            assert serialize(np.float32(3.14)) == (float(np.float32(3.14)), "numpy.float32", 1, True)
         assert serialize(np.array([1, 2, 3])) == ("", "", 0, False)
 
     @pytest.mark.parametrize(

From bf34806f083ef075a1c23a323a77f2a022bba5cb Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Mon, 23 Jun 2025 11:34:22 +0200
Subject: [PATCH 085/381] Some second-level providers are already db-less. We
 should exclude them (#52070)

Part of: #52020
---
 .pre-commit-config.yaml | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 54e221cac5691..89592929a2afb 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -585,6 +585,8 @@ repos:
             ^providers/apache/iceberg/.*\.py$|
             ^providers/cloudant/.*\.py$|
             ^providers/cohere/.*\.py$|
+            ^providers/common/compat/.*\.py$|
+            ^providers/common/messaging/.*\.py$|
             ^providers/datadog/.*\.py$|
             ^providers/dingding/.*\.py$|
             ^providers/discord/.*\.py$|
@@ -598,6 +600,7 @@ repos:
             ^providers/jdbc/.*\.py$|
             ^providers/jenkins/.*\.py$|
             ^providers/mongo/.*\.py$|
+            ^providers/microsoft/psrp/.*\.py$|
             ^providers/neo4j/.*\.py$|
             ^providers/odbc/.*\.py$|
             ^providers/openai/.*\.py$|

From 3698fabb4772d753269eb1e94df2812953845b8c Mon Sep 17 00:00:00 2001
From: Kacper Muda <mudakacper@gmail.com>
Date: Mon, 23 Jun 2025 11:51:11 +0200
Subject: [PATCH 086/381] nit: bump openlineage libraries requirement to 1.34
 (#52075)

---
 providers/openlineage/pyproject.toml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/providers/openlineage/pyproject.toml b/providers/openlineage/pyproject.toml
index 6319f4baa99a2..dfecc87246762 100644
--- a/providers/openlineage/pyproject.toml
+++ b/providers/openlineage/pyproject.toml
@@ -61,8 +61,8 @@ dependencies = [
     "apache-airflow-providers-common-sql>=1.20.0",
     "apache-airflow-providers-common-compat>=1.4.0",
     "attrs>=22.2",
-    "openlineage-integration-common>=1.31.0",
-    "openlineage-python>=1.31.0",
+    "openlineage-integration-common>=1.34.0",
+    "openlineage-python>=1.34.0",
 ]
 
 [dependency-groups]

From 3ee09102e42da9a4951684df267a0c51f579533b Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Mon, 23 Jun 2025 15:47:57 +0530
Subject: [PATCH 087/381] Updating kafka systests to setup connections using
 ENV (#52076)

---
 .../kafka/example_dag_event_listener.py       | 17 +++++-----
 .../apache/kafka/example_dag_hello_kafka.py   | 32 +++++++------------
 2 files changed, 21 insertions(+), 28 deletions(-)

diff --git a/providers/apache/kafka/tests/system/apache/kafka/example_dag_event_listener.py b/providers/apache/kafka/tests/system/apache/kafka/example_dag_event_listener.py
index a0726a5577c95..f120574209364 100644
--- a/providers/apache/kafka/tests/system/apache/kafka/example_dag_event_listener.py
+++ b/providers/apache/kafka/tests/system/apache/kafka/example_dag_event_listener.py
@@ -19,6 +19,7 @@
 from __future__ import annotations
 
 import json
+import os
 
 from pendulum import datetime
 
@@ -32,19 +33,15 @@
 # This is just for setting up connections in the demo - you should use standard
 # methods for setting these connections in production
 from airflow.providers.standard.operators.python import PythonOperator
-from airflow.utils import db
 
 
 def load_connections():
-    db.merge_conn(
+    conns = [
         Connection(
             conn_id="fizz_buzz_1",
             conn_type="kafka",
             extra=json.dumps({"socket.timeout.ms": 10, "bootstrap.servers": "broker:29092"}),
-        )
-    )
-
-    db.merge_conn(
+        ),
         Connection(
             conn_id="fizz_buzz_2",
             conn_type="kafka",
@@ -56,8 +53,12 @@ def load_connections():
                     "auto.offset.reset": "beginning",
                 }
             ),
-        )
-    )
+        ),
+    ]
+
+    for c in conns:
+        envvar = f"AIRFLOW_CONN_{c.conn_id.upper()}"
+        os.environ[envvar] = c.get_uri()
 
 
 def _producer_function():
diff --git a/providers/apache/kafka/tests/system/apache/kafka/example_dag_hello_kafka.py b/providers/apache/kafka/tests/system/apache/kafka/example_dag_hello_kafka.py
index 10eb36cf865d8..377e37a7157a7 100644
--- a/providers/apache/kafka/tests/system/apache/kafka/example_dag_hello_kafka.py
+++ b/providers/apache/kafka/tests/system/apache/kafka/example_dag_hello_kafka.py
@@ -19,6 +19,7 @@
 import functools
 import json
 import logging
+import os
 from datetime import datetime, timedelta
 
 from airflow import DAG
@@ -41,17 +42,13 @@
 def load_connections():
     # Connections needed for this example dag to finish
     from airflow.models import Connection
-    from airflow.utils import db
 
-    db.merge_conn(
+    conns = [
         Connection(
             conn_id="t1-3",
             conn_type="kafka",
             extra=json.dumps({"socket.timeout.ms": 10, "bootstrap.servers": "broker:29092"}),
-        )
-    )
-
-    db.merge_conn(
+        ),
         Connection(
             conn_id="t2",
             conn_type="kafka",
@@ -63,10 +60,7 @@ def load_connections():
                     "auto.offset.reset": "beginning",
                 }
             ),
-        )
-    )
-
-    db.merge_conn(
+        ),
         Connection(
             conn_id="t4",
             conn_type="kafka",
@@ -78,10 +72,7 @@ def load_connections():
                     "auto.offset.reset": "beginning",
                 }
             ),
-        )
-    )
-
-    db.merge_conn(
+        ),
         Connection(
             conn_id="t4b",
             conn_type="kafka",
@@ -93,10 +84,7 @@ def load_connections():
                     "auto.offset.reset": "beginning",
                 }
             ),
-        )
-    )
-
-    db.merge_conn(
+        ),
         Connection(
             conn_id="t5",
             conn_type="kafka",
@@ -108,8 +96,12 @@ def load_connections():
                     "auto.offset.reset": "beginning",
                 }
             ),
-        )
-    )
+        ),
+    ]
+
+    for c in conns:
+        envvar = f"AIRFLOW_CONN_{c.conn_id.upper()}"
+        os.environ[envvar] = c.get_uri()
 
 
 def producer_function():

From b898a3d02a7b08d08ceebc6c95ab0a86e86e9714 Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Mon, 23 Jun 2025 16:22:53 +0530
Subject: [PATCH 088/381] Updating opensearch systest to setup connections
 using ENV (#52077)

---
 .../tests/system/opensearch/example_opensearch.py     | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/providers/opensearch/tests/system/opensearch/example_opensearch.py b/providers/opensearch/tests/system/opensearch/example_opensearch.py
index f0dbc03bb851f..a18e96b5de1eb 100644
--- a/providers/opensearch/tests/system/opensearch/example_opensearch.py
+++ b/providers/opensearch/tests/system/opensearch/example_opensearch.py
@@ -21,6 +21,7 @@
 
 from __future__ import annotations
 
+import os
 from datetime import datetime, timedelta
 
 from opensearchpy import Integer, Text
@@ -61,14 +62,14 @@ def save(self, **kwargs):
 def load_connections():
     # Connections needed for this example dag to finish
     from airflow.models import Connection
-    from airflow.utils import db
 
-    db.merge_conn(
-        Connection(
-            conn_id="opensearch_test", conn_type="opensearch", host="127.0.0.1", login="test", password="test"
-        )
+    c = Connection(
+        conn_id="opensearch_test", conn_type="opensearch", host="127.0.0.1", login="test", password="test"
     )
 
+    envvar = f"AIRFLOW_CONN_{c.conn_id.upper()}"
+    os.environ[envvar] = c.get_uri()
+
 
 with DAG(
     dag_id=DAG_ID,

From 7ec12ee7af841a83740e9d3e51531b7625823995 Mon Sep 17 00:00:00 2001
From: olegkachur-e <qwsqad@gmail.com>
Date: Mon, 23 Jun 2025 12:54:29 +0200
Subject: [PATCH 089/381] Add additional VertexAI Feature Store operators
 (#51958)

- Add operators to create and manage FeatureOnlineStore,
  FeatureStoreView and fetching features data.

- Adjust system tests and documentation.

Co-authored-by: Oleg Kachur <kachur@google.com>
---
 .../google/docs/operators/cloud/vertex_ai.rst |  57 ++
 .../cloud/hooks/vertex_ai/feature_store.py    | 314 ++++++++++-
 .../operators/vertex_ai/feature_store.py      | 531 ++++++++++++++++++
 .../example_vertex_ai_feature_store.py        | 171 +++++-
 .../operators/vertex_ai/test_feature_store.py | 317 ++++++++++-
 5 files changed, 1364 insertions(+), 26 deletions(-)

diff --git a/providers/google/docs/operators/cloud/vertex_ai.rst b/providers/google/docs/operators/cloud/vertex_ai.rst
index 646cb4fee51a0..6e23cd2d934d8 100644
--- a/providers/google/docs/operators/cloud/vertex_ai.rst
+++ b/providers/google/docs/operators/cloud/vertex_ai.rst
@@ -664,6 +664,36 @@ The operator returns the cached content response in :ref:`XCom <concepts:xcom>`
 Interacting with Vertex AI Feature Store
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
+To create feature online store you can use
+:class:`~airflow.providers.google.cloud.operators.vertex_ai.feature_store.CreateFeatureOnlineStoreOperator`.
+The operator creation results in :ref:`XCom <concepts:xcom>` under ``return_value`` key.
+
+.. exampleinclude:: /../../google/tests/system/google/cloud/vertex_ai/example_vertex_ai_feature_store.py
+    :language: python
+    :dedent: 4
+    :start-after: [START how_to_cloud_vertex_ai_create_feature_online_store_operator]
+    :end-before: [END how_to_cloud_vertex_ai_create_feature_online_store_operator]
+
+To create feature store view you can use
+:class:`~airflow.providers.google.cloud.operators.vertex_ai.feature_store.CreateFeatureViewOperator`.
+The operator creation results in :ref:`XCom <concepts:xcom>` under ``return_value`` key.
+
+.. exampleinclude:: /../../google/tests/system/google/cloud/vertex_ai/example_vertex_ai_feature_store.py
+    :language: python
+    :dedent: 4
+    :start-after: [START how_to_cloud_vertex_ai_create_feature_view_store_operator]
+    :end-before: [END how_to_cloud_vertex_ai_create_feature_view_store_operator]
+
+To feature online store you can use
+:class:`~airflow.providers.google.cloud.operators.vertex_ai.feature_store.GetFeatureOnlineStoreOperator`.
+The operator creation results in :ref:`XCom <concepts:xcom>` under ``return_value`` key.
+
+.. exampleinclude:: /../../google/tests/system/google/cloud/vertex_ai/example_vertex_ai_feature_store.py
+    :language: python
+    :dedent: 4
+    :start-after: [START how_to_cloud_vertex_ai_get_feature_online_store_operator]
+    :end-before: [END how_to_cloud_vertex_ai_get_feature_online_store_operator]
+
 To get a feature view sync job you can use
 :class:`~airflow.providers.google.cloud.operators.vertex_ai.feature_store.GetFeatureViewSyncOperator`.
 The operator returns sync job results in :ref:`XCom <concepts:xcom>` under ``return_value`` key.
@@ -693,6 +723,33 @@ To check if Feature View Sync succeeded you can use
     :start-after: [START how_to_cloud_vertex_ai_feature_store_feature_view_sync_sensor]
     :end-before: [END how_to_cloud_vertex_ai_feature_store_feature_view_sync_sensor]
 
+To check feature values data you can use the
+:class:`~airflow.providers.google.cloud.sensors.vertex_ai.FetchFeatureValuesOperator`.
+
+.. exampleinclude:: /../../google/tests/system/google/cloud/vertex_ai/example_vertex_ai_feature_store.py
+    :language: python
+    :dedent: 4
+    :start-after: [START how_to_cloud_vertex_ai_fetch_feature_values_operator]
+    :end-before: [END how_to_cloud_vertex_ai_fetch_feature_values_operator]
+
+To delete the feature view you can use
+:class:`~airflow.providers.google.cloud.sensors.vertex_ai.DeleteFeatureViewOperator`.
+
+.. exampleinclude:: /../../google/tests/system/google/cloud/vertex_ai/example_vertex_ai_feature_store.py
+    :language: python
+    :dedent: 4
+    :start-after: [START how_to_cloud_vertex_ai_delete_feature_view_operator]
+    :end-before: [END how_to_cloud_vertex_ai_delete_feature_view_operator]
+
+To delete the feature online store you can use
+:class:`~airflow.providers.google.cloud.sensors.vertex_ai.DeleteFeatureOnlineStoreOperator`.
+
+.. exampleinclude:: /../../google/tests/system/google/cloud/vertex_ai/example_vertex_ai_feature_store.py
+    :language: python
+    :dedent: 4
+    :start-after: [START how_to_cloud_vertex_ai_delete_feature_online_store_operator]
+    :end-before: [END how_to_cloud_vertex_ai_delete_feature_online_store_operator]
+
 Interacting with Ray on Vertex AI Cluster
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
diff --git a/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/feature_store.py b/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/feature_store.py
index 69c7b69f8dad5..118ea6a864f82 100644
--- a/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/feature_store.py
+++ b/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/feature_store.py
@@ -18,15 +18,32 @@
 
 from __future__ import annotations
 
+from collections.abc import Sequence
+from typing import (
+    TYPE_CHECKING,
+)
+
 from google.api_core.client_options import ClientOptions
+from google.api_core.gapic_v1.method import DEFAULT, _MethodDefault
 from google.cloud.aiplatform_v1beta1 import (
     FeatureOnlineStoreAdminServiceClient,
+    FeatureOnlineStoreServiceClient,
 )
 
 from airflow.exceptions import AirflowException
 from airflow.providers.google.common.consts import CLIENT_INFO
 from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID, GoogleBaseHook
 
+if TYPE_CHECKING:
+    from google.api_core.operation import Operation
+    from google.api_core.retry import Retry
+    from google.cloud.aiplatform_v1beta1.types import (
+        FeatureOnlineStore,
+        FeatureView,
+        FeatureViewDataKey,
+        FetchFeatureValuesResponse,
+    )
+
 
 class FeatureStoreHook(GoogleBaseHook):
     """
@@ -48,6 +65,19 @@ class FeatureStoreHook(GoogleBaseHook):
         originating account.
     """
 
+    @staticmethod
+    def _get_client_options(
+        location: str | None = None,
+        custom_endpoint: str | None = None,
+    ) -> ClientOptions:
+        if custom_endpoint:
+            client_options = ClientOptions(api_endpoint=custom_endpoint)
+        elif location and location != "global":
+            client_options = ClientOptions(api_endpoint=f"{location}-aiplatform.googleapis.com:443")
+        else:
+            client_options = ClientOptions()
+        return client_options
+
     def get_feature_online_store_admin_service_client(
         self,
         location: str | None = None,
@@ -62,12 +92,153 @@ def get_feature_online_store_admin_service_client(
             If provided and not 'global', the client will be configured to use the
             region-specific API endpoint.
         """
-        if location and location != "global":
-            client_options = ClientOptions(api_endpoint=f"{location}-aiplatform.googleapis.com:443")
-        else:
-            client_options = ClientOptions()
         return FeatureOnlineStoreAdminServiceClient(
-            credentials=self.get_credentials(), client_info=CLIENT_INFO, client_options=client_options
+            credentials=self.get_credentials(),
+            client_info=CLIENT_INFO,
+            client_options=self._get_client_options(location),
+        )
+
+    def get_feature_online_store_service_client(
+        self,
+        location: str | None = None,
+        custom_endpoint: str | None = None,
+    ) -> FeatureOnlineStoreServiceClient:
+        return FeatureOnlineStoreServiceClient(
+            credentials=self.get_credentials(),
+            client_info=CLIENT_INFO,
+            client_options=self._get_client_options(location, custom_endpoint),
+        )
+
+    @GoogleBaseHook.fallback_to_default_project_id
+    def create_feature_online_store(
+        self,
+        feature_online_store_id: str,
+        feature_online_store: FeatureOnlineStore,
+        project_id: str = PROVIDE_PROJECT_ID,
+        location: str | None = None,
+        timeout: float | _MethodDefault = DEFAULT,
+        retry: Retry | _MethodDefault | None = DEFAULT,
+        metadata: Sequence[tuple[str, str]] = (),
+    ) -> Operation:
+        """
+        Create and sends request for Feature Online store.
+
+        This method initiates VertexAI Feature Online Store creation request.
+        Feature Online Store aims to serve and manage features data as a part of VertexAI MLOps.
+
+        :param feature_online_store_id: The ID of the online feature store.
+        :param feature_online_store: The configuration of the online repository.
+        :param project_id: The ID of the Google Cloud project that contains the
+            feature store. If not provided, will attempt to determine from the environment.
+        :param location: The Google Cloud region where the feature store is located
+            (e.g., 'us-central1', 'us-east1').
+        :param retry: Designation of what errors, if any, should be retried.
+        :param timeout: The timeout for this request.
+        :param metadata: Strings which should be sent along with the request as metadata.
+        """
+        client = self.get_feature_online_store_admin_service_client(location)
+        return client.create_feature_online_store(
+            request={
+                "parent": f"projects/{project_id}/locations/{location}",
+                "feature_online_store_id": feature_online_store_id,
+                "feature_online_store": feature_online_store,
+            },
+            timeout=timeout,
+            retry=retry,
+            metadata=metadata,
+        )
+
+    @GoogleBaseHook.fallback_to_default_project_id
+    def get_feature_online_store(
+        self,
+        feature_online_store_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
+        location: str | None = None,
+        timeout: float | _MethodDefault = DEFAULT,
+        retry: Retry | _MethodDefault | None = DEFAULT,
+        metadata: Sequence[tuple[str, str]] = (),
+    ) -> FeatureOnlineStore:
+        """
+        Get Feature Online store data.
+
+        Get the FeatureOnlineStore details.
+        Vertex AI Feature Online Store provides a centralized repository for serving ML features
+        and embedding indexes at low latency.
+
+        :param feature_online_store_id: The ID of the online feature store.
+        :param project_id: The ID of the Google Cloud project that contains the
+            feature store. If not provided, will attempt to determine from the environment.
+        :param location: The Google Cloud region where the feature store is located
+            (e.g., 'us-central1', 'us-east1').
+        :param retry: Designation of what errors, if any, should be retried.
+        :param timeout: The timeout for this request.
+        :param metadata: Strings which should be sent along with the request as metadata.
+        """
+        client = self.get_feature_online_store_admin_service_client(location)
+        return client.get_feature_online_store(
+            name=f"projects/{project_id}/locations/{location}/featureOnlineStores/{feature_online_store_id}",
+            timeout=timeout,
+            retry=retry,
+            metadata=metadata,
+        )
+
+    @staticmethod
+    def _get_featurestore_public_endpoint(feature_online_store: FeatureOnlineStore):
+        public_endpoint = None
+        featurestore_data = type(feature_online_store).to_dict(feature_online_store)
+        if "dedicated_serving_endpoint" in featurestore_data:
+            public_endpoint = featurestore_data["dedicated_serving_endpoint"].get(
+                "public_endpoint_domain_name"
+            )
+        return public_endpoint
+
+    @GoogleBaseHook.fallback_to_default_project_id
+    def create_feature_view(
+        self,
+        feature_view_id: str,
+        feature_view: FeatureView,
+        feature_online_store_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
+        run_sync_immediately: bool = False,
+        location: str | None = None,
+        timeout: float | _MethodDefault = DEFAULT,
+        retry: Retry | _MethodDefault | None = DEFAULT,
+        metadata: Sequence[tuple[str, str]] = (),
+    ) -> Operation:
+        """
+        Create request for Feature View creation.
+
+        This method initiates VertexAI Feature View request for the existing Feature Online Store.
+        Feature View represents features and data according to the source provided.
+
+        :param feature_view_id: The ID to use for the FeatureView, which will
+            become the final component of the FeatureView's resource name.
+            This value may be up to 60 characters, and valid characters are ``[a-z0-9_]``.
+            The first character cannot be a number. The value must be unique within a FeatureOnlineStore.
+        :param feature_view: The configuration of the FeatureView to create.
+        :param feature_online_store_id: The ID of the online feature store.
+        :param run_sync_immediately: If set to true, one on demand sync will be run
+            immediately, regardless the FeatureView.sync_config.
+        :param project_id: The ID of the Google Cloud project that contains the
+            feature store. If not provided, will attempt to determine from the environment.
+        :param location: The Google Cloud region where the feature store is located
+            (e.g., 'us-central1', 'us-east1').
+        :param retry: Designation of what errors, if any, should be retried.
+        :param timeout: The timeout for this request.
+        :param metadata: Strings which should be sent along with the request as metadata.
+        """
+        client = self.get_feature_online_store_admin_service_client(location)
+        return client.create_feature_view(
+            request={
+                "parent": f"projects/{project_id}/locations/"
+                f"{location}/featureOnlineStores/{feature_online_store_id}",
+                "feature_view_id": feature_view_id,
+                "feature_view": feature_view,
+                "run_sync_immediately": run_sync_immediately,
+            },
+            timeout=timeout,
+            retry=retry,
+            metadata=metadata,
         )
 
     def get_feature_view_sync(
@@ -135,13 +306,142 @@ def sync_feature_view(
             environment.
         """
         client = self.get_feature_online_store_admin_service_client(location)
-        feature_view = f"projects/{project_id}/locations/{location}/featureOnlineStores/{feature_online_store_id}/featureViews/{feature_view_id}"
+        feature_view = (
+            f"projects/{project_id}/locations/{location}/featureOnlineStores/"
+            f"{feature_online_store_id}/featureViews/{feature_view_id}"
+        )
 
         try:
             response = client.sync_feature_view(feature_view=feature_view)
-
             return str(response.feature_view_sync)
 
         except Exception as e:
             self.log.error("Failed to sync feature view: %s", str(e))
             raise AirflowException(str(e))
+
+    @GoogleBaseHook.fallback_to_default_project_id
+    def fetch_feature_values(
+        self,
+        feature_view_id: str,
+        feature_online_store_id: str,
+        entity_id: str | None = None,
+        project_id: str = PROVIDE_PROJECT_ID,
+        endpoint_domain_name: str | None = None,
+        data_key: FeatureViewDataKey | None = None,
+        data_format: int | None = None,
+        location: str | None = None,
+        timeout: float | _MethodDefault = DEFAULT,
+        retry: Retry | _MethodDefault | None = DEFAULT,
+        metadata: Sequence[tuple[str, str]] = (),
+    ) -> FetchFeatureValuesResponse:
+        """
+        Fetch data from the Feature View provided.
+
+        This method fetches data from existing Feature view, filtered by provided (or default) data_key.
+        Helps to retrieve actual features data hosted in the VertexAI Feature Store.
+
+        :param entity_id: Simple ID to identify Entity to fetch feature values for.
+        :param endpoint_domain_name: Optional. Public domain name, hosting the content of Optimized
+            Feature Online store. Should be omitted, if bigtable configuration provided for the FeatureStore,
+            and default feature store endpoint will be used, based on location provided.
+        :param feature_view_id: The FeatureView ID to fetch data from.
+        :param feature_online_store_id: The ID of the online feature store.
+        :param data_key: Optional. The request key to fetch feature values for.
+        :param data_format: Optional. Response data format. If not set, FeatureViewDataFormat.KEY_VALUE
+            will be used.
+        :param project_id: The ID of the Google Cloud project that contains the
+            feature store. If not provided, will attempt to determine from the
+            environment.
+        :param location: The Google Cloud region where the feature store is located
+            (e.g., 'us-central1', 'us-east1').
+        :param retry: Designation of what errors, if any, should be retried.
+        :param timeout: The timeout for this request.
+        :param metadata: Strings which should be sent along with the request as metadata.
+        """
+        data_client = self.get_feature_online_store_service_client(location, endpoint_domain_name)
+        return data_client.fetch_feature_values(
+            request={
+                "id": entity_id,
+                "feature_view": f"projects/{project_id}/locations/{location}/featureOnlineStores/"
+                f"{feature_online_store_id}/featureViews/{feature_view_id}",
+                "data_key": data_key,
+                "data_format": data_format,
+            },
+            timeout=timeout,
+            retry=retry,
+            metadata=metadata,
+        )
+
+    @GoogleBaseHook.fallback_to_default_project_id
+    def delete_feature_view(
+        self,
+        feature_view_id: str,
+        feature_online_store_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
+        location: str | None = None,
+        timeout: float | _MethodDefault = DEFAULT,
+        retry: Retry | _MethodDefault | None = DEFAULT,
+        metadata: Sequence[tuple[str, str]] = (),
+    ) -> Operation:
+        """
+        Delete the Feature View.
+
+        This method deletes the Feature View from the Feature Online Store.
+
+        :param feature_view_id: The ID to use for the FeatureView, to be deleted.
+        :param feature_online_store_id: The ID of the online feature store.
+        :param project_id: The ID of the Google Cloud project that contains the
+            feature store. If not provided, will attempt to determine from the
+            environment.
+        :param location: The Google Cloud region where the feature store is located
+            (e.g., 'us-central1', 'us-east1').
+        :param retry: Designation of what errors, if any, should be retried.
+        :param timeout: The timeout for this request.
+        :param metadata: Strings which should be sent along with the request as metadata.
+        """
+        client = self.get_feature_online_store_admin_service_client(location)
+        return client.delete_feature_view(
+            name=f"projects/{project_id}/locations/{location}/featureOnlineStores/{feature_online_store_id}"
+            f"/featureViews/{feature_view_id}",
+            timeout=timeout,
+            retry=retry,
+            metadata=metadata,
+        )
+
+    @GoogleBaseHook.fallback_to_default_project_id
+    def delete_feature_online_store(
+        self,
+        feature_online_store_id: str,
+        force: bool = False,
+        project_id: str = PROVIDE_PROJECT_ID,
+        location: str | None = None,
+        timeout: float | _MethodDefault = DEFAULT,
+        retry: Retry | _MethodDefault | None = DEFAULT,
+        metadata: Sequence[tuple[str, str]] = (),
+    ) -> Operation:
+        """
+        Delete the FeatureOnlineStore.
+
+        This method deletes the Feature Online Store and all features data.
+        The FeatureOnlineStore must not contain any FeatureViews.
+
+        :param feature_online_store_id: The ID of the online feature store.
+        :param force:  If set to true, any FeatureViews and Features for this FeatureOnlineStore
+            will also be deleted.
+        :param project_id: The ID of the Google Cloud project that contains the
+            feature store. If not provided, will attempt to determine from the
+            environment.
+        :param location: The Google Cloud region where the feature store is located
+            (e.g., 'us-central1', 'us-east1').
+        :param retry: Designation of what errors, if any, should be retried.
+        :param timeout: The timeout for this request.
+        :param metadata: Strings which should be sent along with the request as metadata.
+        """
+        client = self.get_feature_online_store_admin_service_client(location)
+        return client.delete_feature_online_store(
+            name=f"projects/{project_id}/locations/{location}/featureOnlineStores/{feature_online_store_id}",
+            force=force,
+            timeout=timeout,
+            retry=retry,
+            metadata=metadata,
+        )
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/feature_store.py b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/feature_store.py
index 318ff25a3a915..2fe98b75221d4 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/feature_store.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/feature_store.py
@@ -22,10 +22,23 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING, Any
 
+from google.api_core.exceptions import GoogleAPICallError
+from google.api_core.gapic_v1.method import DEFAULT, _MethodDefault
+from google.cloud.aiplatform_v1beta1.types import FeatureViewDataFormat
+
+from airflow.exceptions import AirflowException
 from airflow.providers.google.cloud.hooks.vertex_ai.feature_store import FeatureStoreHook
 from airflow.providers.google.cloud.operators.cloud_base import GoogleCloudBaseOperator
+from airflow.providers.google.common.hooks.operation_helpers import OperationHelper
 
 if TYPE_CHECKING:
+    from google.api_core.retry import Retry
+    from google.cloud.aiplatform_v1beta1.types import (
+        FeatureOnlineStore,
+        FeatureView,
+        FeatureViewDataKey,
+    )
+
     from airflow.utils.context import Context
 
 
@@ -101,6 +114,257 @@ def execute(self, context: Context) -> str:
         return response
 
 
+class CreateFeatureOnlineStoreOperator(GoogleCloudBaseOperator, OperationHelper):
+    """
+    Create the Feature Online store.
+
+    This method initiates VertexAI Feature Online Store creation request.
+    Feature Online Store aims to serve and manage features data as a part of VertexAI MLOps.
+
+    :param project_id: Required. The ID of the Google Cloud project that contains the feature store.
+        This is used to identify which project's resources to interact with.
+    :param location: Required. The location of the feature store (e.g., 'us-central1', 'us-east1').
+        This specifies the Google Cloud region where the feature store resources are located.
+    :param feature_online_store_id: Required. The ID of the online feature store that contains
+        the feature view to be synchronized. This store serves as the online serving layer.
+    :param feature_online_store: FeatureOnlineStore configuration object of the feature online store
+        to be created.
+    :param gcp_conn_id: The connection ID to use for connecting to Google Cloud Platform.
+        Defaults to 'google_cloud_default'.
+    :param impersonation_chain: Optional service account to impersonate using short-term
+        credentials. Can be either a single account or a chain of accounts required to
+        get the access_token of the last account in the list, which will be impersonated
+        in the request. If set as a string, the account must grant the originating account
+        the Service Account Token Creator IAM role. If set as a sequence, the identities
+        from the list must grant Service Account Token Creator IAM role to the directly
+        preceding identity, with first account from the list granting this role to the
+        originating account.
+    """
+
+    template_fields: Sequence[str] = (
+        "project_id",
+        "location",
+        "feature_online_store_id",
+    )
+
+    def __init__(
+        self,
+        *,
+        project_id: str,
+        location: str,
+        feature_online_store_id: str,
+        feature_online_store: FeatureOnlineStore,
+        timeout: float | _MethodDefault = DEFAULT,
+        retry: Retry | _MethodDefault | None = DEFAULT,
+        metadata: Sequence[tuple[str, str]] = (),
+        gcp_conn_id: str = "google_cloud_default",
+        impersonation_chain: str | Sequence[str] | None = None,
+        **kwargs,
+    ) -> None:
+        super().__init__(**kwargs)
+
+        self.project_id = project_id
+        self.location = location
+        self.feature_online_store_id = feature_online_store_id
+        self.feature_online_store = feature_online_store
+        self.timeout = timeout
+        self.retry = retry
+        self.metadata = metadata
+        self.gcp_conn_id = gcp_conn_id
+        self.impersonation_chain = impersonation_chain
+
+    def execute(self, context: Context) -> dict[str, Any]:
+        """Execute the get feature view sync operation."""
+        hook = FeatureStoreHook(
+            gcp_conn_id=self.gcp_conn_id,
+            impersonation_chain=self.impersonation_chain,
+        )
+        self.log.info("Creating the Feature Online Store...")
+        result_operation = hook.create_feature_online_store(
+            project_id=self.project_id,
+            location=self.location,
+            feature_online_store_id=self.feature_online_store_id,
+            feature_online_store=self.feature_online_store,
+            timeout=self.timeout,
+            retry=self.retry,
+            metadata=self.metadata,
+        )
+        op_result = self.wait_for_operation_result(operation=result_operation)
+        self.log.info("The Feature Online Store has been created: %s", self.feature_online_store_id)
+        result = type(op_result).to_dict(op_result)
+        return result
+
+
+class GetFeatureOnlineStoreOperator(GoogleCloudBaseOperator, OperationHelper):
+    """
+    Get Feature Online store instance.
+
+    This method initiates VertexAI Feature Online Store creation request.
+    Feature Online Store aims to serve and manage features data as a part of VertexAI MLOps.
+
+    :param project_id: Required. The ID of the Google Cloud project that contains the feature store.
+        This is used to identify which project's resources to interact with.
+    :param location: Required. The location of the feature store (e.g., 'us-central1', 'us-east1').
+        This specifies the Google Cloud region where the feature store resources are located.
+    :param feature_online_store_id: Required. The ID of the online feature store that contains
+        the feature view to be synchronized. This store serves as the online serving layer.
+    :param gcp_conn_id: The connection ID to use for connecting to Google Cloud Platform.
+        Defaults to 'google_cloud_default'.
+    :param impersonation_chain: Optional service account to impersonate using short-term
+        credentials. Can be either a single account or a chain of accounts required to
+        get the access_token of the last account in the list, which will be impersonated
+        in the request. If set as a string, the account must grant the originating account
+        the Service Account Token Creator IAM role. If set as a sequence, the identities
+        from the list must grant Service Account Token Creator IAM role to the directly
+        preceding identity, with first account from the list granting this role to the
+        originating account.
+    """
+
+    template_fields: Sequence[str] = (
+        "project_id",
+        "location",
+        "feature_online_store_id",
+    )
+
+    def __init__(
+        self,
+        *,
+        project_id: str,
+        location: str,
+        feature_online_store_id: str,
+        timeout: float | _MethodDefault = DEFAULT,
+        retry: Retry | _MethodDefault | None = DEFAULT,
+        metadata: Sequence[tuple[str, str]] = (),
+        gcp_conn_id: str = "google_cloud_default",
+        impersonation_chain: str | Sequence[str] | None = None,
+        **kwargs,
+    ) -> None:
+        super().__init__(**kwargs)
+
+        self.project_id = project_id
+        self.location = location
+        self.feature_online_store_id = feature_online_store_id
+        self.timeout = timeout
+        self.retry = retry
+        self.metadata = metadata
+        self.gcp_conn_id = gcp_conn_id
+        self.impersonation_chain = impersonation_chain
+
+    def execute(self, context: Context) -> dict[str, Any]:
+        """Execute the get feature view sync operation."""
+        hook = FeatureStoreHook(
+            gcp_conn_id=self.gcp_conn_id,
+            impersonation_chain=self.impersonation_chain,
+        )
+        self.log.info("Get the Feature Online Store id: %s...", self.feature_online_store_id)
+        try:
+            result = hook.get_feature_online_store(
+                project_id=self.project_id,
+                location=self.location,
+                feature_online_store_id=self.feature_online_store_id,
+                timeout=self.timeout,
+                retry=self.retry,
+                metadata=self.metadata,
+            )
+        except GoogleAPICallError as ex:
+            exc_msg = f"Google API error getting {self.feature_online_store_id} Feature Online Store instance"
+            raise AirflowException(exc_msg) from ex
+
+        result = type(result).to_dict(result)
+        self.log.info("The Feature Online Store has been retrieved: %s", self.feature_online_store_id)
+        return result
+
+
+class CreateFeatureViewOperator(GoogleCloudBaseOperator, OperationHelper):
+    """
+    Create request for Feature View creation.
+
+    This method initiates VertexAI Feature View request for the existing Feature Online Store.
+    Feature View represents features and data according to the source provided.
+
+    :param feature_view_id: The ID to use for the FeatureView, which will become the final component
+        of the FeatureView's resource name. This value may be up to 60 characters, and valid characters
+        are ``[a-z0-9_]``. The first character cannot be a number.
+        The value must be unique within a FeatureOnlineStore.
+    :param feature_view: The configuration of the FeatureView to create.
+    :param feature_online_store_id: The ID of the online feature store.
+    :param run_sync_immediately: If set to true, one on demand sync will be run
+        immediately, regardless the FeatureView.sync_config.
+    :param project_id: Required. The ID of the Google Cloud project that contains the feature store.
+        This is used to identify which project's resources to interact with.
+    :param location: Required. The location of the feature store (e.g., 'us-central1', 'us-east1').
+        This specifies the Google Cloud region where the feature store resources are located.
+    :param gcp_conn_id: The connection ID to use for connecting to Google Cloud Platform.
+        Defaults to 'google_cloud_default'.
+    :param impersonation_chain: Optional service account to impersonate using short-term
+        credentials. Can be either a single account or a chain of accounts required to
+        get the access_token of the last account in the list, which will be impersonated
+        in the request. If set as a string, the account must grant the originating account
+        the Service Account Token Creator IAM role. If set as a sequence, the identities
+        from the list must grant Service Account Token Creator IAM role to the directly
+        preceding identity, with first account from the list granting this role to the
+        originating account.
+    """
+
+    template_fields: Sequence[str] = (
+        "project_id",
+        "location",
+        "feature_online_store_id",
+    )
+
+    def __init__(
+        self,
+        *,
+        feature_view_id: str,
+        feature_view: FeatureView,
+        feature_online_store_id: str,
+        run_sync_immediately: bool = False,
+        project_id: str,
+        location: str,
+        timeout: float | _MethodDefault = DEFAULT,
+        retry: Retry | _MethodDefault | None = DEFAULT,
+        metadata: Sequence[tuple[str, str]] = (),
+        gcp_conn_id: str = "google_cloud_default",
+        impersonation_chain: str | Sequence[str] | None = None,
+        **kwargs,
+    ) -> None:
+        super().__init__(**kwargs)
+        self.project_id = project_id
+        self.location = location
+        self.feature_view_id = feature_view_id
+        self.feature_view = feature_view
+        self.run_sync_immediately = run_sync_immediately
+        self.feature_online_store_id = feature_online_store_id
+        self.timeout = timeout
+        self.retry = retry
+        self.metadata = metadata
+        self.gcp_conn_id = gcp_conn_id
+        self.impersonation_chain = impersonation_chain
+
+    def execute(self, context: Context) -> dict[str, Any]:
+        """Execute the get feature view sync operation."""
+        hook = FeatureStoreHook(
+            gcp_conn_id=self.gcp_conn_id,
+            impersonation_chain=self.impersonation_chain,
+        )
+        self.log.info("Creating the Online Store Feature View...")
+        result_operation = hook.create_feature_view(
+            project_id=self.project_id,
+            location=self.location,
+            feature_view_id=self.feature_view_id,
+            feature_view=self.feature_view,
+            feature_online_store_id=self.feature_online_store_id,
+            run_sync_immediately=self.run_sync_immediately,
+            timeout=self.timeout,
+            retry=self.retry,
+            metadata=self.metadata,
+        )
+        op_result = self.wait_for_operation_result(operation=result_operation)
+        self.log.info("The Online Store Feature View has been created: %s", self.feature_online_store_id)
+        result = type(op_result).to_dict(op_result)
+        return result
+
+
 class GetFeatureViewSyncOperator(GoogleCloudBaseOperator):
     """
     Retrieve the status and details of a Feature View synchronization operation.
@@ -161,3 +425,270 @@ def execute(self, context: Context) -> dict[str, Any]:
         self.log.info(response)
 
         return response
+
+
+class FetchFeatureValuesOperator(GoogleCloudBaseOperator, OperationHelper):
+    """
+    Fetch features data from the Feature View provided.
+
+    This method fetches data from existing Feature view, filtered by provided (or default) data_key.
+    Helps to retrieve actual features data hosted in the VertexAI Feature Store.
+
+    :param entity_id: Simple ID to identify Entity to fetch feature values for.
+    :param feature_view_id: The FeatureView ID to fetch data from.
+    :param feature_online_store_id: The ID of the online feature store.
+    :param data_key: The request key to fetch feature values for.
+    :param project_id: Required. The ID of the Google Cloud project that contains the feature store.
+        This is used to identify which project's resources to interact with.
+    :param location: Required. The location of the feature store (e.g., 'us-central1', 'us-east1').
+        This specifies the Google Cloud region where the feature store resources are located.
+    :param gcp_conn_id: The connection ID to use for connecting to Google Cloud Platform.
+        Defaults to 'google_cloud_default'.
+    :param impersonation_chain: Optional service account to impersonate using short-term
+        credentials. Can be either a single account or a chain of accounts required to
+        get the access_token of the last account in the list, which will be impersonated
+        in the request. If set as a string, the account must grant the originating account
+        the Service Account Token Creator IAM role. If set as a sequence, the identities
+        from the list must grant Service Account Token Creator IAM role to the directly
+        preceding identity, with first account from the list granting this role to the
+        originating account.
+    """
+
+    template_fields: Sequence[str] = (
+        "project_id",
+        "location",
+        "feature_online_store_id",
+        "feature_view_id",
+        "entity_id",
+    )
+
+    def __init__(
+        self,
+        *,
+        feature_view_id: str,
+        feature_online_store_id: str,
+        project_id: str,
+        location: str,
+        entity_id: str | None = None,
+        data_key: FeatureViewDataKey | None = None,
+        timeout: float | _MethodDefault = DEFAULT,
+        retry: Retry | _MethodDefault | None = DEFAULT,
+        metadata: Sequence[tuple[str, str]] = (),
+        gcp_conn_id: str = "google_cloud_default",
+        impersonation_chain: str | Sequence[str] | None = None,
+        **kwargs,
+    ) -> None:
+        super().__init__(**kwargs)
+        self.project_id = project_id
+        self.location = location
+        self.entity_id = entity_id
+        self.feature_view_id = feature_view_id
+        self.feature_online_store_id = feature_online_store_id
+        self.data_key = data_key
+        self.timeout = timeout
+        self.retry = retry
+        self.metadata = metadata
+        self.gcp_conn_id = gcp_conn_id
+        self.impersonation_chain = impersonation_chain
+
+    def execute(self, context: Context) -> dict[str, Any]:
+        """Execute the get feature view sync operation."""
+        hook = FeatureStoreHook(
+            gcp_conn_id=self.gcp_conn_id,
+            impersonation_chain=self.impersonation_chain,
+        )
+        try:
+            feature_online_store = hook.get_feature_online_store(
+                feature_online_store_id=self.feature_online_store_id,
+                project_id=self.project_id,
+                location=self.location,
+            )
+            public_domain_name = hook._get_featurestore_public_endpoint(feature_online_store)
+        except GoogleAPICallError as ex:
+            exc_msg = f"Google API error getting {self.feature_online_store_id} Feature Online Store instance"
+            raise AirflowException(exc_msg) from ex
+
+        self.log.info(
+            "Fetching data from the Feature View %s, Online Feature Store %s.",
+            self.feature_view_id,
+            self.feature_online_store_id,
+        )
+        request_result = hook.fetch_feature_values(
+            project_id=self.project_id,
+            location=self.location,
+            endpoint_domain_name=public_domain_name,
+            entity_id=self.entity_id,
+            feature_view_id=self.feature_view_id,
+            feature_online_store_id=self.feature_online_store_id,
+            data_key=self.data_key,
+            data_format=FeatureViewDataFormat.KEY_VALUE,
+            timeout=self.timeout,
+            retry=self.retry,
+            metadata=self.metadata,
+        )
+        self.log.info(
+            "Fetching data from the Feature View %s, Online Feature Store %s. is finished.",
+            self.feature_view_id,
+            self.feature_online_store_id,
+        )
+        result = type(request_result).to_dict(request_result)
+        return result
+
+
+class DeleteFeatureOnlineStoreOperator(GoogleCloudBaseOperator, OperationHelper):
+    """
+    Delete the Feature Online store.
+
+    This method initiates VertexAI Feature Online Store deletion request.
+    There should be no FeatureViews to be deleted successfully.
+
+
+    :param project_id: Required. The ID of the Google Cloud project that contains the feature store.
+        This is used to identify which project's resources to interact with.
+    :param location: Required. The location of the feature store (e.g., 'us-central1', 'us-east1').
+        This specifies the Google Cloud region where the feature store resources are located.
+    :param feature_online_store_id: Required. The ID of the online feature store that contains
+        the feature view to be synchronized. This store serves as the online serving layer.
+    :param force:  If set to true, any FeatureViews and Features for this FeatureOnlineStore
+        will also be deleted.
+    :param gcp_conn_id: The connection ID to use for connecting to Google Cloud Platform.
+        Defaults to 'google_cloud_default'.
+    :param impersonation_chain: Optional service account to impersonate using short-term
+        credentials. Can be either a single account or a chain of accounts required to
+        get the access_token of the last account in the list, which will be impersonated
+        in the request. If set as a string, the account must grant the originating account
+        the Service Account Token Creator IAM role. If set as a sequence, the identities
+        from the list must grant Service Account Token Creator IAM role to the directly
+        preceding identity, with first account from the list granting this role to the
+        originating account.
+    """
+
+    template_fields: Sequence[str] = (
+        "project_id",
+        "location",
+        "feature_online_store_id",
+    )
+
+    def __init__(
+        self,
+        *,
+        project_id: str,
+        location: str,
+        feature_online_store_id: str,
+        force: bool = False,
+        timeout: float | _MethodDefault = DEFAULT,
+        retry: Retry | _MethodDefault | None = DEFAULT,
+        metadata: Sequence[tuple[str, str]] = (),
+        gcp_conn_id: str = "google_cloud_default",
+        impersonation_chain: str | Sequence[str] | None = None,
+        **kwargs,
+    ) -> None:
+        super().__init__(**kwargs)
+        self.project_id = project_id
+        self.location = location
+        self.feature_online_store_id = feature_online_store_id
+        self.force = force
+        self.timeout = timeout
+        self.retry = retry
+        self.metadata = metadata
+        self.gcp_conn_id = gcp_conn_id
+        self.impersonation_chain = impersonation_chain
+
+    def execute(self, context: Context) -> dict[str, Any]:
+        """Execute the get feature view sync operation."""
+        hook = FeatureStoreHook(
+            gcp_conn_id=self.gcp_conn_id,
+            impersonation_chain=self.impersonation_chain,
+        )
+        self.log.info("Deleting the Feature Online Store...")
+
+        result_operation = hook.delete_feature_online_store(
+            project_id=self.project_id,
+            location=self.location,
+            feature_online_store_id=self.feature_online_store_id,
+            force=self.force,
+            timeout=self.timeout,
+            retry=self.retry,
+            metadata=self.metadata,
+        )
+        self.wait_for_operation_result(operation=result_operation)
+        self.log.info("The Feature Online Store deletion has been complete: %s", self.feature_online_store_id)
+
+        return {"result": f"The {self.feature_online_store_id} has been deleted."}
+
+
+class DeleteFeatureViewOperator(GoogleCloudBaseOperator, OperationHelper):
+    """
+    Delete the Feature View.
+
+    This method deletes the Feature View from the Feature Online Store.
+
+    :param project_id: Required. The ID of the Google Cloud project that contains the feature store.
+        This is used to identify which project's resources to interact with.
+    :param location: Required. The location of the feature store (e.g., 'us-central1', 'us-east1').
+        This specifies the Google Cloud region where the feature store resources are located.
+    :param feature_online_store_id: Required. The ID of the online feature store that contains
+        the feature view to be synchronized. This store serves as the online serving layer.
+    :param gcp_conn_id: The connection ID to use for connecting to Google Cloud Platform.
+        Defaults to 'google_cloud_default'.
+    :param impersonation_chain: Optional service account to impersonate using short-term
+        credentials. Can be either a single account or a chain of accounts required to
+        get the access_token of the last account in the list, which will be impersonated
+        in the request. If set as a string, the account must grant the originating account
+        the Service Account Token Creator IAM role. If set as a sequence, the identities
+        from the list must grant Service Account Token Creator IAM role to the directly
+        preceding identity, with first account from the list granting this role to the
+        originating account.
+    """
+
+    template_fields: Sequence[str] = (
+        "project_id",
+        "location",
+        "feature_online_store_id",
+    )
+
+    def __init__(
+        self,
+        *,
+        project_id: str,
+        location: str,
+        feature_online_store_id: str,
+        feature_view_id: str,
+        timeout: float | _MethodDefault = DEFAULT,
+        retry: Retry | _MethodDefault | None = DEFAULT,
+        metadata: Sequence[tuple[str, str]] = (),
+        gcp_conn_id: str = "google_cloud_default",
+        impersonation_chain: str | Sequence[str] | None = None,
+        **kwargs,
+    ) -> None:
+        super().__init__(**kwargs)
+        self.project_id = project_id
+        self.location = location
+        self.feature_online_store_id = feature_online_store_id
+        self.feature_view_id = feature_view_id
+        self.timeout = timeout
+        self.retry = retry
+        self.metadata = metadata
+        self.gcp_conn_id = gcp_conn_id
+        self.impersonation_chain = impersonation_chain
+
+    def execute(self, context: Context) -> dict[str, Any]:
+        """Execute the get feature view sync operation."""
+        hook = FeatureStoreHook(
+            gcp_conn_id=self.gcp_conn_id,
+            impersonation_chain=self.impersonation_chain,
+        )
+        self.log.info("Deleting the Feature View %s ... ", self.feature_view_id)
+        result_operation = hook.delete_feature_view(
+            project_id=self.project_id,
+            location=self.location,
+            feature_online_store_id=self.feature_online_store_id,
+            feature_view_id=self.feature_view_id,
+            timeout=self.timeout,
+            retry=self.retry,
+            metadata=self.metadata,
+        )
+        self.wait_for_operation_result(operation=result_operation)
+        self.log.info("The Feature View deletion has been complete: %s", self.feature_view_id)
+
+        return {"result": f"The {self.feature_view_id} has been deleted."}
diff --git a/providers/google/tests/system/google/cloud/vertex_ai/example_vertex_ai_feature_store.py b/providers/google/tests/system/google/cloud/vertex_ai/example_vertex_ai_feature_store.py
index 3d0794fa85cbd..7a2252d73c182 100644
--- a/providers/google/tests/system/google/cloud/vertex_ai/example_vertex_ai_feature_store.py
+++ b/providers/google/tests/system/google/cloud/vertex_ai/example_vertex_ai_feature_store.py
@@ -23,30 +23,134 @@
 from __future__ import annotations
 
 import os
-from datetime import datetime
+from datetime import datetime, timedelta
+
+from google.cloud.aiplatform_v1beta1 import FeatureOnlineStore, FeatureView, FeatureViewDataKey
 
 from airflow import DAG
+from airflow.providers.google.cloud.operators.bigquery import (
+    BigQueryCreateEmptyDatasetOperator,
+    BigQueryCreateTableOperator,
+    BigQueryDeleteDatasetOperator,
+)
 from airflow.providers.google.cloud.operators.vertex_ai.feature_store import (
+    CreateFeatureOnlineStoreOperator,
+    CreateFeatureViewOperator,
+    DeleteFeatureOnlineStoreOperator,
+    DeleteFeatureViewOperator,
+    FetchFeatureValuesOperator,
+    GetFeatureOnlineStoreOperator,
     GetFeatureViewSyncOperator,
     SyncFeatureViewOperator,
 )
 from airflow.providers.google.cloud.sensors.vertex_ai.feature_store import FeatureViewSyncSensor
+from airflow.utils.trigger_rule import TriggerRule
 
 PROJECT_ID = os.environ.get("SYSTEM_TESTS_GCP_PROJECT", "default")
+ENV_ID = os.environ.get("SYSTEM_TESTS_ENV_ID", "default")
 DAG_ID = "vertex_ai_feature_store_dag"
 REGION = "us-central1"
 
-FEATURE_ONLINE_STORE_ID = "my_feature_online_store_unique"
-FEATURE_VIEW_ID = "feature_view_publications"
+BQ_LOCATION = "US"
+BQ_DATASET_ID = "bq_ds_featurestore_demo"
+BQ_VIEW_ID = "product_features_view"
+BQ_VIEW_FQN = f"{PROJECT_ID}.{BQ_DATASET_ID}.{BQ_VIEW_ID}"
+
+FEATURE_ONLINE_STORE_ID = f"my_feature_online_store_unique_{ENV_ID}"
+FEATURE_VIEW_ID = "feature_view_product"
+FEATURE_VIEW_DATA_KEY = {"key": "28098"}
+
+FEATURE_EXTRACT_QUERY = """
+       WITH
+        product_order_agg AS (
+          SELECT cast(product_id as string) as entity_id,
+            countif(status in ("Shipped", "Complete")) as good_order_count,
+            countif(status in ("Returned", "Cancelled")) as bad_order_count
+          FROM `bigquery-public-data.thelook_ecommerce.order_items`
+          WHERE
+            timestamp_trunc(created_at, day) >= timestamp_trunc(timestamp_sub(CURRENT_TIMESTAMP(), interval 30 day), day) and
+            timestamp_trunc(created_at, day) < timestamp_trunc(CURRENT_TIMESTAMP(), day)
+          group by 1
+          order by entity_id),
+        product_basic AS (
+          SELECT cast(id as string) AS entity_id,
+            lower(name) as name,
+            lower(category) as category,
+            lower(brand) as brand,
+            cost,
+            retail_price
+          FROM   bigquery-public-data.thelook_ecommerce.products)
+       SELECT *, current_timestamp() as feature_timestamp
+       FROM product_basic
+       LEFT OUTER JOIN product_order_agg
+       USING (entity_id)
+       """
+
 
 with DAG(
     dag_id=DAG_ID,
     description="Sample DAG with Vertex AI Feature Store operations.",
     schedule="@once",
-    start_date=datetime(2024, 1, 1),
+    start_date=datetime(2025, 6, 1),
     catchup=False,
     tags=["example", "vertex_ai", "feature_store"],
 ) as dag:
+    create_bq_dataset = BigQueryCreateEmptyDatasetOperator(
+        task_id="create_bq_dataset",
+        dataset_id=BQ_DATASET_ID,
+        project_id=PROJECT_ID,
+        location=BQ_LOCATION,
+    )
+
+    create_bq_table_view = BigQueryCreateTableOperator(
+        task_id="create_bq_table_view",
+        project_id=PROJECT_ID,
+        location=BQ_LOCATION,
+        dataset_id=BQ_DATASET_ID,
+        table_id=BQ_VIEW_ID,
+        table_resource={
+            "view": {
+                "query": FEATURE_EXTRACT_QUERY,
+                "useLegacySql": False,
+            }
+        },
+    )
+    # [START how_to_cloud_vertex_ai_create_feature_online_store_operator]
+    create_feature_online_store = CreateFeatureOnlineStoreOperator(
+        task_id="create_feature_online_store",
+        project_id=PROJECT_ID,
+        location=REGION,
+        feature_online_store_id=FEATURE_ONLINE_STORE_ID,
+        feature_online_store=FeatureOnlineStore(optimized=FeatureOnlineStore.Optimized()),
+    )
+    # [END how_to_cloud_vertex_ai_create_feature_online_store_operator]
+
+    # [START how_to_cloud_vertex_ai_create_feature_view_store_operator]
+    create_feature_view = CreateFeatureViewOperator(
+        task_id="create_feature_view",
+        project_id=PROJECT_ID,
+        location=REGION,
+        feature_online_store_id=FEATURE_ONLINE_STORE_ID,
+        feature_view_id=FEATURE_VIEW_ID,
+        feature_view=FeatureView(
+            big_query_source=FeatureView.BigQuerySource(
+                uri=f"bq://{BQ_VIEW_FQN}",
+                entity_id_columns=["entity_id"],
+            ),
+            sync_config=FeatureView.SyncConfig(cron="TZ=America/Los_Angeles 56 * * * *"),
+        ),
+    )
+    # [END how_to_cloud_vertex_ai_create_feature_view_store_operator]
+
+    # [START how_to_cloud_vertex_ai_get_feature_online_store_operator]
+    get_feature_online_store = GetFeatureOnlineStoreOperator(
+        task_id="get_feature_online_store",
+        project_id=PROJECT_ID,
+        location=REGION,
+        feature_online_store_id=FEATURE_ONLINE_STORE_ID,
+    )
+    # [END how_to_cloud_vertex_ai_get_feature_online_store_operator]
+
     # [START how_to_cloud_vertex_ai_feature_store_sync_feature_view_operator]
     sync_task = SyncFeatureViewOperator(
         task_id="sync_task",
@@ -63,7 +167,7 @@
         location=REGION,
         feature_view_sync_name="{{ task_instance.xcom_pull(task_ids='sync_task', key='return_value')}}",
         poke_interval=60,  # Check every minute
-        timeout=600,  # Timeout after 10 minutes
+        timeout=1200,  # Timeout after 20 minutes
         mode="reschedule",
     )
     # [END how_to_cloud_vertex_ai_feature_store_feature_view_sync_sensor]
@@ -76,7 +180,62 @@
     )
     # [END how_to_cloud_vertex_ai_feature_store_get_feature_view_sync_operator]
 
-    sync_task >> wait_for_sync >> get_task
+    # [START how_to_cloud_vertex_ai_fetch_feature_values_operator]
+    fetch_feature_data = FetchFeatureValuesOperator(
+        task_id="fetch_feature_data",
+        project_id=PROJECT_ID,
+        location=REGION,
+        feature_online_store_id=FEATURE_ONLINE_STORE_ID,
+        feature_view_id=FEATURE_VIEW_ID,
+        data_key=FeatureViewDataKey(FEATURE_VIEW_DATA_KEY),
+        retries=3,
+        retry_delay=timedelta(minutes=3),
+    )
+    # [END how_to_cloud_vertex_ai_fetch_feature_values_operator]
+
+    # [START how_to_cloud_vertex_ai_delete_feature_view_operator]
+    delete_feature_view = DeleteFeatureViewOperator(
+        task_id="delete_feature_view",
+        project_id=PROJECT_ID,
+        location=REGION,
+        feature_online_store_id=FEATURE_ONLINE_STORE_ID,
+        feature_view_id=FEATURE_VIEW_ID,
+    )
+    # [END how_to_cloud_vertex_ai_delete_feature_view_operator]
+
+    # [START how_to_cloud_vertex_ai_delete_feature_online_store_operator]
+    delete_feature_online_store = DeleteFeatureOnlineStoreOperator(
+        task_id="delete_feature_online_store",
+        project_id=PROJECT_ID,
+        location=REGION,
+        feature_online_store_id=FEATURE_ONLINE_STORE_ID,
+    )
+    # [END how_to_cloud_vertex_ai_delete_feature_online_store_operator]
+
+    delete_bq_dataset = BigQueryDeleteDatasetOperator(
+        task_id="delete_bq_dataset",
+        dataset_id=BQ_DATASET_ID,
+        delete_contents=True,
+        trigger_rule=TriggerRule.ALL_DONE,
+    )
+
+    # TEST SETUP
+    (
+        create_bq_dataset
+        >> create_bq_table_view
+        # TEST BODY
+        >> create_feature_online_store
+        >> get_feature_online_store
+        >> create_feature_view
+        >> sync_task
+        >> wait_for_sync
+        >> get_task
+        >> fetch_feature_data
+        # TEST TEARDOWN
+        >> delete_feature_view
+        >> delete_feature_online_store
+        >> delete_bq_dataset
+    )
 
     from tests_common.test_utils.watcher import watcher
 
diff --git a/providers/google/tests/unit/google/cloud/operators/vertex_ai/test_feature_store.py b/providers/google/tests/unit/google/cloud/operators/vertex_ai/test_feature_store.py
index 5340b69d72009..4443a23ace1ea 100644
--- a/providers/google/tests/unit/google/cloud/operators/vertex_ai/test_feature_store.py
+++ b/providers/google/tests/unit/google/cloud/operators/vertex_ai/test_feature_store.py
@@ -19,7 +19,21 @@
 
 from unittest import mock
 
+from google.cloud.aiplatform_v1beta1.types import (
+    FeatureOnlineStore,
+    FeatureView,
+    FeatureViewDataFormat,
+    FeatureViewDataKey,
+    FetchFeatureValuesResponse,
+)
+
 from airflow.providers.google.cloud.operators.vertex_ai.feature_store import (
+    CreateFeatureOnlineStoreOperator,
+    CreateFeatureViewOperator,
+    DeleteFeatureOnlineStoreOperator,
+    DeleteFeatureViewOperator,
+    FetchFeatureValuesOperator,
+    GetFeatureOnlineStoreOperator,
     GetFeatureViewSyncOperator,
     SyncFeatureViewOperator,
 )
@@ -33,7 +47,17 @@
 IMPERSONATION_CHAIN = ["ACCOUNT_1", "ACCOUNT_2", "ACCOUNT_3"]
 FEATURE_ONLINE_STORE_ID = "test-store"
 FEATURE_VIEW_ID = "test-view"
-FEATURE_VIEW_SYNC_NAME = f"projects/{GCP_PROJECT}/locations/{GCP_LOCATION}/featureOnlineStores/{FEATURE_ONLINE_STORE_ID}/featureViews/{FEATURE_VIEW_ID}/featureViewSyncs/sync123"
+FEATURE_ONLINE_STORE_NAME = (
+    f"projects/{GCP_PROJECT}/locations/{GCP_LOCATION}/featureOnlineStores/{FEATURE_ONLINE_STORE_ID}"
+)
+FEATURE_VIEW_SYNC_NAME = (
+    f"projects/{GCP_PROJECT}/locations/{GCP_LOCATION}/featureOnlineStores/"
+    f"{FEATURE_ONLINE_STORE_ID}/featureViews/{FEATURE_VIEW_ID}/featureViewSyncs/sync123"
+)
+FEATURE_VIEW_NAME = (
+    f"projects/{GCP_PROJECT}/locations/{GCP_LOCATION}/featureOnlineStores/"
+    f"{FEATURE_ONLINE_STORE_ID}/featureViews/{FEATURE_VIEW_ID}"
+)
 
 
 class TestSyncFeatureViewOperator:
@@ -42,10 +66,8 @@ def test_execute(self, mock_hook_class):
         # Create the mock hook and set up its return value
         mock_hook = mock.MagicMock()
         mock_hook_class.return_value = mock_hook
-
         # Set up the return value for sync_feature_view to match the hook implementation
         mock_hook.sync_feature_view.return_value = FEATURE_VIEW_SYNC_NAME
-
         op = SyncFeatureViewOperator(
             task_id=TASK_ID,
             project_id=GCP_PROJECT,
@@ -57,13 +79,11 @@ def test_execute(self, mock_hook_class):
         )
 
         response = op.execute(context={"ti": mock.MagicMock()})
-
         # Verify hook initialization
         mock_hook_class.assert_called_once_with(
             gcp_conn_id=GCP_CONN_ID,
             impersonation_chain=IMPERSONATION_CHAIN,
         )
-
         # Verify hook method call
         mock_hook.sync_feature_view.assert_called_once_with(
             project_id=GCP_PROJECT,
@@ -71,7 +91,6 @@ def test_execute(self, mock_hook_class):
             feature_online_store_id=FEATURE_ONLINE_STORE_ID,
             feature_view_id=FEATURE_VIEW_ID,
         )
-
         # Verify response matches expected value
         assert response == FEATURE_VIEW_SYNC_NAME
 
@@ -82,17 +101,14 @@ def test_execute(self, mock_hook_class):
         # Create the mock hook and set up expected response
         mock_hook = mock.MagicMock()
         mock_hook_class.return_value = mock_hook
-
         expected_response = {
             "name": FEATURE_VIEW_SYNC_NAME,
             "start_time": 1000,
             "end_time": 2000,
             "sync_summary": {"row_synced": 500, "total_slot": 4},
         }
-
         # Set up the return value for get_feature_view_sync to match the hook implementation
         mock_hook.get_feature_view_sync.return_value = expected_response
-
         op = GetFeatureViewSyncOperator(
             task_id=TASK_ID,
             location=GCP_LOCATION,
@@ -100,20 +116,295 @@ def test_execute(self, mock_hook_class):
             gcp_conn_id=GCP_CONN_ID,
             impersonation_chain=IMPERSONATION_CHAIN,
         )
-
         response = op.execute(context={"ti": mock.MagicMock()})
-
         # Verify hook initialization
         mock_hook_class.assert_called_once_with(
             gcp_conn_id=GCP_CONN_ID,
             impersonation_chain=IMPERSONATION_CHAIN,
         )
-
         # Verify hook method call
         mock_hook.get_feature_view_sync.assert_called_once_with(
             location=GCP_LOCATION,
             feature_view_sync_name=FEATURE_VIEW_SYNC_NAME,
         )
-
         # Verify response matches expected structure
         assert response == expected_response
+
+
+class TestCreateFeatureOnlineStoreOperator:
+    @mock.patch(VERTEX_AI_PATH.format("feature_store.FeatureStoreHook"))
+    def test_execute(self, mock_hook_class):
+        FEATURE_ONLINE_STORE_CONF = FeatureOnlineStore({"name": FEATURE_ONLINE_STORE_NAME, "optimized": {}})
+        sample_result = {
+            "etag": "",
+            "labels": {},
+            "name": FEATURE_ONLINE_STORE_NAME,
+            "optimized": {},
+            "satisfies_pzi": False,
+            "satisfies_pzs": False,
+            "state": 0,
+        }
+        mock_hook = mock.MagicMock()
+        mock_hook_class.return_value = mock_hook
+        # Set up the return value for hook method to match the hook implementation
+        sample_operation = mock.MagicMock()
+        sample_operation.result.return_value = FEATURE_ONLINE_STORE_CONF
+        mock_hook.create_feature_online_store.return_value = sample_operation
+        mock_hook.return_value.wait_for_operation_result.side_effect = lambda operation: operation.result()
+        common_kwargs = {
+            "project_id": GCP_PROJECT,
+            "location": GCP_LOCATION,
+            "feature_online_store_id": FEATURE_ONLINE_STORE_ID,
+            "feature_online_store": FEATURE_ONLINE_STORE_CONF,
+            "metadata": (),
+            "timeout": 100,
+            "retry": None,
+        }
+        op = CreateFeatureOnlineStoreOperator(
+            task_id=TASK_ID,
+            gcp_conn_id=GCP_CONN_ID,
+            impersonation_chain=IMPERSONATION_CHAIN,
+            **common_kwargs,
+        )
+        result = op.execute(context={"ti": mock.MagicMock()})
+        # Verify hook initialization
+        mock_hook_class.assert_called_once_with(
+            gcp_conn_id=GCP_CONN_ID,
+            impersonation_chain=IMPERSONATION_CHAIN,
+        )
+        # Verify hook method call
+        mock_hook.create_feature_online_store.assert_called_once_with(**common_kwargs)
+        # Verify result matches expected value
+        assert result == sample_result
+
+
+class TestCreateFeatureViewOperator:
+    @mock.patch(VERTEX_AI_PATH.format("feature_store.FeatureStoreHook"))
+    def test_execute(self, mock_hook_class):
+        feature_view_conf_params = {
+            "big_query_source": FeatureView.BigQuerySource(
+                uri="bq://{BQ_TABLE}",
+                entity_id_columns=["entity_id"],
+            ),
+            "sync_config": FeatureView.SyncConfig(cron="TZ=Europe/London 56 * * * *"),
+        }
+        FEATURE_VIEW_CONF = FeatureView(**feature_view_conf_params)
+
+        sample_result = {
+            "big_query_source": {"entity_id_columns": ["entity_id"], "uri": "bq://{BQ_TABLE}"},
+            "etag": "",
+            "labels": {},
+            "name": "projects/test-project/locations/us-central1/featureOnlineStores/test-store"
+            "/featureViews/test-view",
+            "satisfies_pzi": False,
+            "satisfies_pzs": False,
+            "service_account_email": "",
+            "service_agent_type": 0,
+            "sync_config": {"cron": "TZ=Europe/London 56 * * * *"},
+        }
+        mock_hook = mock.MagicMock()
+        mock_hook_class.return_value = mock_hook
+        # Set up the return value for hook method to match the hook implementation
+        sample_operation = mock.MagicMock()
+        sample_operation.result.return_value = FeatureView(
+            {**feature_view_conf_params, **{"name": FEATURE_VIEW_NAME}}
+        )
+        mock_hook.create_feature_view.return_value = sample_operation
+        mock_hook.return_value.wait_for_operation_result.side_effect = lambda operation: operation.result()
+        common_kwargs = {
+            "project_id": GCP_PROJECT,
+            "location": GCP_LOCATION,
+            "feature_online_store_id": FEATURE_ONLINE_STORE_ID,
+            "feature_view_id": FEATURE_VIEW_ID,
+            "feature_view": FEATURE_VIEW_CONF,
+            "run_sync_immediately": False,
+            "metadata": (),
+            "timeout": 100,
+            "retry": None,
+        }
+        op = CreateFeatureViewOperator(
+            task_id=TASK_ID,
+            gcp_conn_id=GCP_CONN_ID,
+            impersonation_chain=IMPERSONATION_CHAIN,
+            **common_kwargs,
+        )
+        result = op.execute(context={"ti": mock.MagicMock()})
+        # Verify hook initialization
+        mock_hook_class.assert_called_once_with(
+            gcp_conn_id=GCP_CONN_ID,
+            impersonation_chain=IMPERSONATION_CHAIN,
+        )
+        # Verify hook method call
+        mock_hook.create_feature_view.assert_called_once_with(**common_kwargs)
+        # Verify result matches expected value
+        assert result == sample_result
+
+
+class TestFetchFeatureValuesOperator:
+    @mock.patch(VERTEX_AI_PATH.format("feature_store.FeatureStoreHook"))
+    def test_execute(self, mock_hook_class):
+        ENTITY_ID = "entity-id"
+        FEATURE_VIEW_DATA_KEY = {"key": "28098"}
+        sample_result = {
+            "key_values": {
+                "features": [
+                    {"name": "brand", "value": {"string_value": "rip curl"}},
+                    {"name": "cost", "value": {"double_value": 36.56684834767282}},
+                    {"name": "feature_timestamp", "value": {"int64_value": "1750151356612667"}},
+                ]
+            }
+        }
+        mock_hook = mock.MagicMock()
+        mock_hook_class.return_value = mock_hook
+        # Set up the return value for hook method to match the hook implementation
+        mock_hook.get_feature_online_store = mock.MagicMock()
+        PUBLIC_DOMAIN_NAME = "public.domain.url"
+        get_public_domain_mock = mock.MagicMock()
+        get_public_domain_mock.return_value = PUBLIC_DOMAIN_NAME
+        mock_hook._get_featurestore_public_endpoint = get_public_domain_mock
+        mock_hook.fetch_feature_values.return_value = FetchFeatureValuesResponse(sample_result)
+        common_kwargs = {
+            "project_id": GCP_PROJECT,
+            "location": GCP_LOCATION,
+            "feature_online_store_id": FEATURE_ONLINE_STORE_ID,
+            "feature_view_id": FEATURE_VIEW_ID,
+            "entity_id": ENTITY_ID,
+            "data_key": FeatureViewDataKey(FEATURE_VIEW_DATA_KEY),
+            "metadata": (),
+            "timeout": 100,
+            "retry": None,
+        }
+        op = FetchFeatureValuesOperator(
+            task_id=TASK_ID,
+            gcp_conn_id=GCP_CONN_ID,
+            impersonation_chain=IMPERSONATION_CHAIN,
+            **common_kwargs,
+        )
+        result = op.execute(context={"ti": mock.MagicMock()})
+        # Verify hook initialization
+        mock_hook_class.assert_called_once_with(
+            gcp_conn_id=GCP_CONN_ID,
+            impersonation_chain=IMPERSONATION_CHAIN,
+        )
+        # Verify hook method call
+        mock_hook.fetch_feature_values.assert_called_once_with(
+            data_format=FeatureViewDataFormat.KEY_VALUE,
+            endpoint_domain_name=PUBLIC_DOMAIN_NAME,
+            **common_kwargs,
+        )
+        # Verify result matches expected value
+        assert result == sample_result
+
+
+class TestGetFeatureOnlineStoreOperator:
+    @mock.patch(VERTEX_AI_PATH.format("feature_store.FeatureStoreHook"))
+    def test_execute(self, mock_hook_class):
+        # Create the mock hook and set up its return value
+        mock_hook = mock.MagicMock()
+        mock_hook_class.return_value = mock_hook
+        # Set up the return value for get_feature_online_store to match the hook implementation
+        SAMPLE_RESPONSE = {
+            "etag": "",
+            "labels": {},
+            "name": FEATURE_ONLINE_STORE_ID,
+            "satisfies_pzi": False,
+            "satisfies_pzs": False,
+            "state": 0,
+        }
+        mock_hook.get_feature_online_store.return_value = FeatureOnlineStore(SAMPLE_RESPONSE)
+        common_kwargs = {
+            "project_id": GCP_PROJECT,
+            "location": GCP_LOCATION,
+            "feature_online_store_id": FEATURE_ONLINE_STORE_ID,
+            "metadata": (),
+            "timeout": 100,
+            "retry": None,
+        }
+        op = GetFeatureOnlineStoreOperator(
+            task_id=TASK_ID,
+            gcp_conn_id=GCP_CONN_ID,
+            impersonation_chain=IMPERSONATION_CHAIN,
+            **common_kwargs,
+        )
+        response = op.execute(context={"ti": mock.MagicMock()})
+        # Verify hook initialization
+        mock_hook_class.assert_called_once_with(
+            gcp_conn_id=GCP_CONN_ID,
+            impersonation_chain=IMPERSONATION_CHAIN,
+        )
+        # Verify hook method call
+        mock_hook.get_feature_online_store.assert_called_once_with(**common_kwargs)
+        # Verify response matches expected value
+        assert response == SAMPLE_RESPONSE
+
+
+class TestDeleteFeatureOnlineStoreOperator:
+    @mock.patch(VERTEX_AI_PATH.format("feature_store.FeatureStoreHook"))
+    def test_execute(self, mock_hook_class):
+        # Create the mock hook and set up its return value
+        mock_hook = mock.MagicMock()
+        mock_hook_class.return_value = mock_hook
+        sample_operation = mock.MagicMock()
+        mock_hook.delete_feature_online_store.return_value = sample_operation
+        mock_hook.return_value.wait_for_operation_result.side_effect = lambda operation: operation.result()
+        common_kwargs = {
+            "project_id": GCP_PROJECT,
+            "location": GCP_LOCATION,
+            "feature_online_store_id": FEATURE_ONLINE_STORE_ID,
+            "force": False,
+            "metadata": (),
+            "timeout": 100,
+            "retry": None,
+        }
+        op = DeleteFeatureOnlineStoreOperator(
+            task_id=TASK_ID,
+            gcp_conn_id=GCP_CONN_ID,
+            impersonation_chain=IMPERSONATION_CHAIN,
+            **common_kwargs,
+        )
+        response = op.execute(context={"ti": mock.MagicMock()})
+        # Verify hook initialization
+        mock_hook_class.assert_called_once_with(
+            gcp_conn_id=GCP_CONN_ID,
+            impersonation_chain=IMPERSONATION_CHAIN,
+        )
+        # Verify hook method call
+        mock_hook.delete_feature_online_store.assert_called_once_with(**common_kwargs)
+        # Verify response matches expected value
+        assert response == {"result": f"The {FEATURE_ONLINE_STORE_ID} has been deleted."}
+
+
+class TestDeleteFeatureViewOperator:
+    @mock.patch(VERTEX_AI_PATH.format("feature_store.FeatureStoreHook"))
+    def test_execute(self, mock_hook_class):
+        # Create the mock hook and set up its return value
+        mock_hook = mock.MagicMock()
+        mock_hook_class.return_value = mock_hook
+        sample_operation = mock.MagicMock()
+        mock_hook.delete_feature_view.return_value = sample_operation
+        mock_hook.return_value.wait_for_operation_result.side_effect = lambda operation: operation.result()
+        common_kwargs = {
+            "project_id": GCP_PROJECT,
+            "location": GCP_LOCATION,
+            "feature_online_store_id": FEATURE_ONLINE_STORE_ID,
+            "feature_view_id": FEATURE_VIEW_ID,
+            "metadata": (),
+            "timeout": 100,
+            "retry": None,
+        }
+        op = DeleteFeatureViewOperator(
+            task_id=TASK_ID,
+            gcp_conn_id=GCP_CONN_ID,
+            impersonation_chain=IMPERSONATION_CHAIN,
+            **common_kwargs,
+        )
+        response = op.execute(context={"ti": mock.MagicMock()})
+        # Verify hook initialization
+        mock_hook_class.assert_called_once_with(
+            gcp_conn_id=GCP_CONN_ID,
+            impersonation_chain=IMPERSONATION_CHAIN,
+        )
+        # Verify hook method call
+        mock_hook.delete_feature_view.assert_called_once_with(**common_kwargs)
+        # Verify response matches expected value
+        assert response == {"result": f"The {FEATURE_VIEW_ID} has been deleted."}

From 0bc84bf3af4bce7c07a783ba97dcd8c8f7e826d4 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Mon, 23 Jun 2025 12:55:00 +0200
Subject: [PATCH 090/381] Add new translations in Polish. (#52078)

---
 .../src/airflow/ui/public/i18n/locales/pl/admin.json         | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/pl/admin.json b/airflow-core/src/airflow/ui/public/i18n/locales/pl/admin.json
index 573c185aa126f..9bf2504ec9f41 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/pl/admin.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pl/admin.json
@@ -40,7 +40,10 @@
       "standardFields": "Standardowe pola"
     },
     "nothingFound": {
-        "title": "Nie znaleziono połączeń!"
+      "description": "Połączenia zdefiniowane za pomocą zmiennych środowiskowych lub menedżerów sekretów nie są tutaj wyświetlane.",
+      "documentationLink": "Dowiedz się więcej w dokumentacji Airflow.",
+      "learnMore": "Są one rozwiązywane w czasie wykonywania i nie są widoczne w interfejsie użytkownika.",
+      "title": "Nie znaleziono połączeń!"
     },
     "searchPlaceholder": "Szukaj połączeń",
     "test": "Test połączenia",

From 130e9600443e06c08acc1b28c69a62c858d6e6a2 Mon Sep 17 00:00:00 2001
From: Dominik <105610163+dominikhei@users.noreply.github.com>
Date: Mon, 23 Jun 2025 12:57:01 +0200
Subject: [PATCH 091/381] Removed pytestmark db_test from the spark provider
 (#52081)

---
 .../unit/apache/spark/hooks/test_spark_connect.py |  2 --
 .../unit/apache/spark/hooks/test_spark_jdbc.py    |  8 ++++++--
 .../unit/apache/spark/hooks/test_spark_sql.py     |  8 ++++++--
 .../unit/apache/spark/hooks/test_spark_submit.py  | 15 +++++++++++++--
 4 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_connect.py b/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_connect.py
index 1174ec2ff4869..27d8e8f6d7d33 100644
--- a/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_connect.py
+++ b/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_connect.py
@@ -22,8 +22,6 @@
 from airflow.models import Connection
 from airflow.providers.apache.spark.hooks.spark_connect import SparkConnectHook
 
-pytestmark = pytest.mark.db_test
-
 
 class TestSparkConnectHook:
     @pytest.fixture(autouse=True)
diff --git a/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_jdbc.py b/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_jdbc.py
index 9f6e034c62853..be2b6523bf972 100644
--- a/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_jdbc.py
+++ b/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_jdbc.py
@@ -24,8 +24,6 @@
 from airflow.models import Connection
 from airflow.providers.apache.spark.hooks.spark_jdbc import SparkJDBCHook
 
-pytestmark = pytest.mark.db_test
-
 
 class TestSparkJDBCHook:
     _config = {
@@ -122,6 +120,7 @@ def setup_connections(self, create_connection_without_db):
             )
         )
 
+    @pytest.mark.db_test
     def test_resolve_jdbc_connection(self):
         # Given
         hook = SparkJDBCHook(jdbc_conn_id="jdbc-default")
@@ -139,6 +138,7 @@ def test_resolve_jdbc_connection(self):
         # Then
         assert connection == expected_connection
 
+    @pytest.mark.db_test
     def test_build_jdbc_arguments(self):
         # Given
         hook = SparkJDBCHook(**self._config)
@@ -183,6 +183,7 @@ def test_build_jdbc_arguments(self):
         ]
         assert expected_jdbc_arguments == cmd
 
+    @pytest.mark.db_test
     def test_build_jdbc_arguments_invalid(self):
         # Given
         hook = SparkJDBCHook(**self._invalid_config)
@@ -190,14 +191,17 @@ def test_build_jdbc_arguments_invalid(self):
         # Expect Exception
         hook._build_jdbc_application_arguments(hook._resolve_jdbc_connection())
 
+    @pytest.mark.db_test
     def test_invalid_host(self):
         with pytest.raises(ValueError, match="host should not contain a"):
             SparkJDBCHook(jdbc_conn_id="jdbc-invalid-host", **self._config)
 
+    @pytest.mark.db_test
     def test_invalid_schema(self):
         with pytest.raises(ValueError, match="schema should not contain a"):
             SparkJDBCHook(jdbc_conn_id="jdbc-invalid-schema", **self._config)
 
+    @pytest.mark.db_test
     @patch("airflow.providers.apache.spark.hooks.spark_submit.SparkSubmitHook.submit")
     def test_invalid_extra_conn_prefix(self, mock_submit):
         hook = SparkJDBCHook(jdbc_conn_id="jdbc-invalid-extra-conn-prefix", **self._config)
diff --git a/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_sql.py b/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_sql.py
index 96e69aaeb9ab7..301ccd730fa81 100644
--- a/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_sql.py
+++ b/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_sql.py
@@ -29,8 +29,6 @@
 
 from tests_common.test_utils.db import clear_db_connections
 
-pytestmark = pytest.mark.db_test
-
 
 def get_after(sentinel, iterable):
     """Get the value after `sentinel` in an `iterable`"""
@@ -78,6 +76,7 @@ def setup_connections(self, create_connection_without_db):
     def teardown_class(cls) -> None:
         clear_db_connections(add_default_connections_back=True)
 
+    @pytest.mark.db_test
     def test_build_command(self):
         hook = SparkSqlHook(**self._config)
 
@@ -100,6 +99,7 @@ def test_build_command(self):
         if self._config["verbose"]:
             assert "--verbose" in cmd
 
+    @pytest.mark.db_test
     def test_build_command_with_str_conf(self):
         hook = SparkSqlHook(**self._config_str)
 
@@ -123,6 +123,7 @@ def test_build_command_with_str_conf(self):
         if self._config["verbose"]:
             assert "--verbose" in cmd
 
+    @pytest.mark.db_test
     @patch("airflow.providers.apache.spark.hooks.spark_sql.subprocess.Popen")
     def test_spark_process_runcmd(self, mock_popen):
         # Given
@@ -171,6 +172,7 @@ def test_spark_process_runcmd(self, mock_popen):
             universal_newlines=True,
         )
 
+    @pytest.mark.db_test
     @patch("airflow.providers.apache.spark.hooks.spark_sql.subprocess.Popen")
     def test_spark_process_runcmd_with_str(self, mock_popen):
         # Given
@@ -201,6 +203,7 @@ def test_spark_process_runcmd_with_str(self, mock_popen):
             universal_newlines=True,
         )
 
+    @pytest.mark.db_test
     @patch("airflow.providers.apache.spark.hooks.spark_sql.subprocess.Popen")
     def test_spark_process_runcmd_with_list(self, mock_popen):
         # Given
@@ -231,6 +234,7 @@ def test_spark_process_runcmd_with_list(self, mock_popen):
             universal_newlines=True,
         )
 
+    @pytest.mark.db_test
     @patch("airflow.providers.apache.spark.hooks.spark_sql.subprocess.Popen")
     def test_spark_process_runcmd_and_fail(self, mock_popen):
         # Given
diff --git a/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_submit.py b/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_submit.py
index b41534baa2fd1..06a04e5573159 100644
--- a/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_submit.py
+++ b/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_submit.py
@@ -29,8 +29,6 @@
 from airflow.models import Connection
 from airflow.providers.apache.spark.hooks.spark_submit import SparkSubmitHook
 
-pytestmark = pytest.mark.db_test
-
 
 class TestSparkSubmitHook:
     _spark_job_file = "test_application.py"
@@ -170,6 +168,7 @@ def setup_connections(self, create_connection_without_db):
             )
         )
 
+    @pytest.mark.db_test
     @patch(
         "airflow.providers.apache.spark.hooks.spark_submit.os.getenv", return_value="/tmp/airflow_krb5_ccache"
     )
@@ -290,6 +289,7 @@ def test_build_track_driver_status_command(self):
         assert expected_spark_standalone_cluster == build_track_driver_status_spark_standalone_cluster
         assert expected_spark_yarn_cluster == build_track_driver_status_spark_yarn_cluster
 
+    @pytest.mark.db_test
     @patch("airflow.providers.apache.spark.hooks.spark_submit.subprocess.Popen")
     def test_spark_process_runcmd(self, mock_popen):
         # Given
@@ -310,6 +310,7 @@ def test_spark_process_runcmd(self, mock_popen):
             bufsize=-1,
         )
 
+    @pytest.mark.db_test
     def test_resolve_should_track_driver_status(self):
         # Given
         hook_default = SparkSubmitHook(conn_id="")
@@ -345,6 +346,7 @@ def test_resolve_should_track_driver_status(self):
         assert should_track_driver_status_spark_binary_set is False
         assert should_track_driver_status_spark_standalone_cluster is True
 
+    @pytest.mark.db_test
     def test_resolve_connection_yarn_default(self):
         # Given
         hook = SparkSubmitHook(conn_id="")
@@ -367,6 +369,7 @@ def test_resolve_connection_yarn_default(self):
         assert connection == expected_spark_connection
         assert dict_cmd["--master"] == "yarn"
 
+    @pytest.mark.db_test
     def test_resolve_connection_yarn_default_connection(self):
         # Given
         hook = SparkSubmitHook(conn_id="spark_default")
@@ -560,6 +563,7 @@ def test_resolve_connection_spark_binary_default_value_override(self):
         assert connection == expected_spark_connection
         assert cmd[0] == "spark3-submit"
 
+    @pytest.mark.db_test
     def test_resolve_connection_spark_binary_default_value(self):
         # Given
         hook = SparkSubmitHook(conn_id="spark_default")
@@ -1044,6 +1048,7 @@ def test_k8s_process_on_kill(self, mock_popen, mock_client_method):
             ),
         ],
     )
+    @pytest.mark.db_test
     def test_masks_passwords(self, command: str, expected: str) -> None:
         # Given
         hook = SparkSubmitHook()
@@ -1054,6 +1059,7 @@ def test_masks_passwords(self, command: str, expected: str) -> None:
         # Then
         assert command_masked == expected
 
+    @pytest.mark.db_test
     def test_create_keytab_path_from_base64_keytab_with_decode_exception(self):
         hook = SparkSubmitHook()
         invalid_base64 = "invalid_base64"
@@ -1061,6 +1067,7 @@ def test_create_keytab_path_from_base64_keytab_with_decode_exception(self):
         with pytest.raises(AirflowException, match="Failed to decode base64 keytab"):
             hook._create_keytab_path_from_base64_keytab(invalid_base64, None)
 
+    @pytest.mark.db_test
     @patch("pathlib.Path.exists")
     @patch("builtins.open", new_callable=mock_open)
     def test_create_keytab_path_from_base64_keytab_with_write_exception(
@@ -1084,6 +1091,7 @@ def test_create_keytab_path_from_base64_keytab_with_write_exception(
         # Then
         assert mock_exists.call_count == 2  # called twice (before write, after write)
 
+    @pytest.mark.db_test
     @patch("airflow.providers.apache.spark.hooks.spark_submit.shutil.move")
     @patch("pathlib.Path.exists")
     @patch("builtins.open", new_callable=mock_open)
@@ -1110,6 +1118,7 @@ def test_create_keytab_path_from_base64_keytab_with_move_exception(
         mock_move.assert_called_once()
         assert mock_exists.call_count == 2  # called twice (before write, after write)
 
+    @pytest.mark.db_test
     @patch("airflow.providers.apache.spark.hooks.spark_submit.uuid.uuid4")
     @patch("pathlib.Path.resolve")
     @patch("airflow.providers.apache.spark.hooks.spark_submit.shutil.move")
@@ -1140,6 +1149,7 @@ def test_create_keytab_path_from_base64_keytab_with_new_keytab(
         mock_open().write.assert_called_once_with(keytab_value)
         mock_move.assert_called_once()
 
+    @pytest.mark.db_test
     @patch("pathlib.Path.resolve")
     @patch("airflow.providers.apache.spark.hooks.spark_submit.shutil.move")
     @patch("pathlib.Path.exists")
@@ -1168,6 +1178,7 @@ def test_create_keytab_path_from_base64_keytab_with_new_keytab_with_principal(
         mock_open().write.assert_called_once_with(keytab_value)
         mock_move.assert_called_once()
 
+    @pytest.mark.db_test
     @patch("pathlib.Path.resolve")
     @patch("pathlib.Path.exists")
     @patch("builtins.open", new_callable=mock_open)

From 6a731652cfcf2a0725257e3bbdaac61a4780dea3 Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Mon, 23 Jun 2025 16:49:43 +0530
Subject: [PATCH 092/381] Update numpy serializer for np 2 compat (remove
 np.float_ and np.complex_) (#52084)

---
 airflow-core/src/airflow/serialization/serializers/numpy.py | 6 ++----
 .../unit/serialization/serializers/test_serializers.py      | 2 +-
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/airflow-core/src/airflow/serialization/serializers/numpy.py b/airflow-core/src/airflow/serialization/serializers/numpy.py
index 603f4df44a44c..c31244c587844 100644
--- a/airflow-core/src/airflow/serialization/serializers/numpy.py
+++ b/airflow-core/src/airflow/serialization/serializers/numpy.py
@@ -72,11 +72,9 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
         return int(o), name, __version__, True
 
     if isinstance(o, np.bool_):
-        return bool(np), name, __version__, True
+        return bool(o), name, __version__, True
 
-    if isinstance(
-        o, (np.float_, np.float16, np.float32, np.float64, np.complex_, np.complex64, np.complex128)
-    ):
+    if isinstance(o, (np.float16, np.float32, np.float64, np.complex64, np.complex128)):
         return float(o), name, __version__, True
 
     return "", "", 0, False
diff --git a/airflow-core/tests/unit/serialization/serializers/test_serializers.py b/airflow-core/tests/unit/serialization/serializers/test_serializers.py
index 8aa6254816944..53eb160ec1aff 100644
--- a/airflow-core/tests/unit/serialization/serializers/test_serializers.py
+++ b/airflow-core/tests/unit/serialization/serializers/test_serializers.py
@@ -225,7 +225,7 @@ def test_numpy_serializers(self):
         numpy_version = metadata.version("numpy")
         is_numpy_2 = version.parse(numpy_version).major == 2
 
-        assert serialize(np.bool_(False)) == (True, "numpy.bool" if is_numpy_2 else "numpy.bool_", 1, True)
+        assert serialize(np.bool_(False)) == (False, "numpy.bool" if is_numpy_2 else "numpy.bool_", 1, True)
         if is_numpy_2:
             assert serialize(np.float64(3.14)) == (float(np.float64(3.14)), "numpy.float64", 1, True)
         else:

From bd1883dba81c91c63d7f10d15232b59e9c213c87 Mon Sep 17 00:00:00 2001
From: "Guan Ming(Wesley) Chiu"
 <105915352+guan404ming@users.noreply.github.com>
Date: Mon, 23 Jun 2025 21:18:47 +0800
Subject: [PATCH 093/381] i18n: add jsoncRules to handle translation key sort
 (#51968)

* Add jsoncRules to handle json key sort

* Fix `ko` common key sort
---
 airflow-core/src/airflow/ui/eslint.config.js  |  2 +
 airflow-core/src/airflow/ui/package.json      |  1 +
 airflow-core/src/airflow/ui/pnpm-lock.yaml    | 59 +++++++++++++++++++
 .../ui/public/i18n/locales/ko/common.json     | 12 ++--
 airflow-core/src/airflow/ui/rules/i18n.js     |  3 -
 airflow-core/src/airflow/ui/rules/jsonc.js    | 45 ++++++++++++++
 6 files changed, 113 insertions(+), 9 deletions(-)
 create mode 100644 airflow-core/src/airflow/ui/rules/jsonc.js

diff --git a/airflow-core/src/airflow/ui/eslint.config.js b/airflow-core/src/airflow/ui/eslint.config.js
index e9edfa5ace783..ae71d9ac0b2df 100644
--- a/airflow-core/src/airflow/ui/eslint.config.js
+++ b/airflow-core/src/airflow/ui/eslint.config.js
@@ -23,6 +23,7 @@
 import { coreRules } from "./rules/core.js";
 import { i18nRules } from "./rules/i18n.js";
 import { i18nextRules } from "./rules/i18next.js";
+import { jsoncRules } from "./rules/jsonc.js";
 import { perfectionistRules } from "./rules/perfectionist.js";
 import { prettierRules } from "./rules/prettier.js";
 import { reactRules } from "./rules/react.js";
@@ -48,4 +49,5 @@ export default /** @type {const} @satisfies {ReadonlyArray<FlatConfig.Config>} *
   unicornRules,
   i18nextRules,
   i18nRules,
+  jsoncRules,
 ]);
diff --git a/airflow-core/src/airflow/ui/package.json b/airflow-core/src/airflow/ui/package.json
index e8eab0f1fd7f2..6835f54581f1d 100644
--- a/airflow-core/src/airflow/ui/package.json
+++ b/airflow-core/src/airflow/ui/package.json
@@ -77,6 +77,7 @@
     "eslint": "^9.25.1",
     "eslint-config-prettier": "^10.1.2",
     "eslint-plugin-i18next": "^6.1.1",
+    "eslint-plugin-jsonc": "^2.20.1",
     "eslint-plugin-jsx-a11y": "^6.10.2",
     "eslint-plugin-perfectionist": "^4.12.3",
     "eslint-plugin-prettier": "^5.2.6",
diff --git a/airflow-core/src/airflow/ui/pnpm-lock.yaml b/airflow-core/src/airflow/ui/pnpm-lock.yaml
index 04426f880c846..8e0903acea395 100644
--- a/airflow-core/src/airflow/ui/pnpm-lock.yaml
+++ b/airflow-core/src/airflow/ui/pnpm-lock.yaml
@@ -186,6 +186,9 @@ importers:
       eslint-plugin-i18next:
         specifier: ^6.1.1
         version: 6.1.1
+      eslint-plugin-jsonc:
+        specifier: ^2.20.1
+        version: 2.20.1(eslint@9.26.0(jiti@1.21.7))
       eslint-plugin-jsx-a11y:
         specifier: ^6.10.2
         version: 6.10.2(eslint@9.26.0(jiti@1.21.7))
@@ -2343,16 +2346,39 @@ packages:
     resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
     engines: {node: '>=12'}
 
+  eslint-compat-utils@0.6.5:
+    resolution: {integrity: sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ==}
+    engines: {node: '>=12'}
+    peerDependencies:
+      eslint: '>=6.0.0'
+
   eslint-config-prettier@10.1.2:
     resolution: {integrity: sha512-Epgp/EofAUeEpIdZkW60MHKvPyru1ruQJxPL+WIycnaPApuseK0Zpkrh/FwL9oIpQvIhJwV7ptOy0DWUjTlCiA==}
     hasBin: true
     peerDependencies:
       eslint: '>=7.0.0'
 
+  eslint-json-compat-utils@0.2.1:
+    resolution: {integrity: sha512-YzEodbDyW8DX8bImKhAcCeu/L31Dd/70Bidx2Qex9OFUtgzXLqtfWL4Hr5fM/aCCB8QUZLuJur0S9k6UfgFkfg==}
+    engines: {node: '>=12'}
+    peerDependencies:
+      '@eslint/json': '*'
+      eslint: '*'
+      jsonc-eslint-parser: ^2.4.0
+    peerDependenciesMeta:
+      '@eslint/json':
+        optional: true
+
   eslint-plugin-i18next@6.1.1:
     resolution: {integrity: sha512-/Vy6BfX44njxpRnbJm7bbph0KaNJF2eillqN5W+u03hHuxmh9BjtjdPSrI9HPtyoEbG4j5nBn9gXm/dg99mz3Q==}
     engines: {node: '>=0.10.0'}
 
+  eslint-plugin-jsonc@2.20.1:
+    resolution: {integrity: sha512-gUzIwQHXx7ZPypUoadcyRi4WbHW2TPixDr0kqQ4miuJBU0emJmyGTlnaT3Og9X2a8R1CDayN9BFSq5weGWbTng==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    peerDependencies:
+      eslint: '>=6.0.0'
+
   eslint-plugin-jsx-a11y@6.10.2:
     resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==}
     engines: {node: '>=4.0'}
@@ -4083,6 +4109,10 @@ packages:
     resolution: {integrity: sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ==}
     engines: {node: ^14.18.0 || >=16.0.0}
 
+  synckit@0.11.8:
+    resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==}
+    engines: {node: ^14.18.0 || >=16.0.0}
+
   tar@6.2.1:
     resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
     engines: {node: '>=10'}
@@ -7402,15 +7432,40 @@ snapshots:
 
   escape-string-regexp@5.0.0: {}
 
+  eslint-compat-utils@0.6.5(eslint@9.26.0(jiti@1.21.7)):
+    dependencies:
+      eslint: 9.26.0(jiti@1.21.7)
+      semver: 7.7.1
+
   eslint-config-prettier@10.1.2(eslint@9.26.0(jiti@1.21.7)):
     dependencies:
       eslint: 9.26.0(jiti@1.21.7)
 
+  eslint-json-compat-utils@0.2.1(eslint@9.26.0(jiti@1.21.7))(jsonc-eslint-parser@2.4.0):
+    dependencies:
+      eslint: 9.26.0(jiti@1.21.7)
+      esquery: 1.6.0
+      jsonc-eslint-parser: 2.4.0
+
   eslint-plugin-i18next@6.1.1:
     dependencies:
       lodash: 4.17.21
       requireindex: 1.1.0
 
+  eslint-plugin-jsonc@2.20.1(eslint@9.26.0(jiti@1.21.7)):
+    dependencies:
+      '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@1.21.7))
+      eslint: 9.26.0(jiti@1.21.7)
+      eslint-compat-utils: 0.6.5(eslint@9.26.0(jiti@1.21.7))
+      eslint-json-compat-utils: 0.2.1(eslint@9.26.0(jiti@1.21.7))(jsonc-eslint-parser@2.4.0)
+      espree: 10.3.0
+      graphemer: 1.4.0
+      jsonc-eslint-parser: 2.4.0
+      natural-compare: 1.4.0
+      synckit: 0.11.8
+    transitivePeerDependencies:
+      - '@eslint/json'
+
   eslint-plugin-jsx-a11y@6.10.2(eslint@9.26.0(jiti@1.21.7)):
     dependencies:
       aria-query: 5.3.2
@@ -9613,6 +9668,10 @@ snapshots:
       '@pkgr/core': 0.2.4
       tslib: 2.8.1
 
+  synckit@0.11.8:
+    dependencies:
+      '@pkgr/core': 0.2.4
+
   tar@6.2.1:
     dependencies:
       chownr: 2.0.0
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ko/common.json b/airflow-core/src/airflow/ui/public/i18n/locales/ko/common.json
index b8b120f578dfa..9fabd0e1e4911 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/ko/common.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/ko/common.json
@@ -7,10 +7,10 @@
     "Providers": "제공자들",
     "Variables": "변수들"
   },
-  "assetEvent_one": "에셋 이벤트",
-  "assetEvent_other": "에셋 이벤트들",
   "asset_one": "에셋",
   "asset_other": "에셋들",
+  "assetEvent_one": "에셋 이벤트",
+  "assetEvent_other": "에셋 이벤트들",
   "backfill_one": "백필",
   "backfill_other": "백필들",
   "browse": {
@@ -19,6 +19,8 @@
   },
   "createdAssetEvent_one": "생성된 에셋 이벤트",
   "createdAssetEvent_other": "생성된 에셋 이벤트들",
+  "dag_one": "Dag",
+  "dag_other": "Dags",
   "dagDetails": {
     "catchup": "캐치업",
     "concurrency": "동시 샐행 수",
@@ -57,8 +59,6 @@
   "dagRun_one": "Dag 실행",
   "dagRun_other": "Dag 실행들",
   "dagWarnings": "Dag 경고/오류",
-  "dag_one": "Dag",
-  "dag_other": "Dags",
   "defaultToGraphView": "그래프 뷰 기본 보기",
   "defaultToGridView": "그리드 뷰 기본 보기",
   "direction": "방향",
@@ -182,6 +182,8 @@
     "operator": "연산자",
     "triggerRule": "트리거 규칙"
   },
+  "task_one": "작업",
+  "task_other": "작업들",
   "taskId": "작업 ID",
   "taskInstance": {
     "dagVersion": "Dag 버전",
@@ -208,8 +210,6 @@
   },
   "taskInstance_one": "작업 인스턴스",
   "taskInstance_other": "작업 인스턴스들",
-  "task_one": "작업",
-  "task_other": "작업들",
   "timeRange": {
     "last12Hours": "지난 12 시간",
     "last24Hours": "지난 24 시간",
diff --git a/airflow-core/src/airflow/ui/rules/i18n.js b/airflow-core/src/airflow/ui/rules/i18n.js
index be2fbac79e7de..309e7e65eaada 100644
--- a/airflow-core/src/airflow/ui/rules/i18n.js
+++ b/airflow-core/src/airflow/ui/rules/i18n.js
@@ -26,7 +26,6 @@ import path from "node:path";
 import { fileURLToPath } from "node:url";
 
 export const i18nNamespace = "i18n";
-
 /**
  * Extract all nested keys from translation object
  * @param {Record<string, any>} obj
@@ -167,8 +166,6 @@ export const i18nRules = {
     [i18nNamespace]: i18nPlugin,
   },
   rules: {
-    "@typescript-eslint/no-unused-expressions": "off",
     [`${i18nNamespace}/check-translation-completeness`]: "warn",
-    "no-unused-expressions": "off",
   },
 };
diff --git a/airflow-core/src/airflow/ui/rules/jsonc.js b/airflow-core/src/airflow/ui/rules/jsonc.js
new file mode 100644
index 0000000000000..a39418eb31ce6
--- /dev/null
+++ b/airflow-core/src/airflow/ui/rules/jsonc.js
@@ -0,0 +1,45 @@
+/*!
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import jsonc from "eslint-plugin-jsonc";
+
+import { ERROR } from "./levels.js";
+
+export const jsoncNamespace = "jsonc";
+
+/** @type {import("@typescript-eslint/utils/ts-eslint").FlatConfig.Config} */
+export const jsoncRules = {
+  files: ["public/i18n/locales/**/*.json"],
+  plugins: {
+    [jsoncNamespace]: jsonc,
+  },
+  rules: {
+    /**
+     * Enforce sorted keys.
+     *
+     * @see [jsonc/sort-keys](https://ota-meshi.github.io/eslint-plugin-jsonc/rules/sort-keys.html)
+     */
+    [`${jsoncNamespace}/sort-keys`]: [
+      ERROR,
+      "asc",
+      {
+        natural: true,
+      },
+    ],
+  },
+};

From 40437f1408cb28ed8983eec04a7b3648223f4786 Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Mon, 23 Jun 2025 18:55:38 +0530
Subject: [PATCH 094/381] Updating AWS systest to do connection setup using ENV
 (#52073)

---
 .../amazon/aws/example_hive_to_dynamodb.py    | 23 +++++++++++--------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/providers/amazon/tests/system/amazon/aws/example_hive_to_dynamodb.py b/providers/amazon/tests/system/amazon/aws/example_hive_to_dynamodb.py
index 0d49404f5609c..56b4fee8dedcb 100644
--- a/providers/amazon/tests/system/amazon/aws/example_hive_to_dynamodb.py
+++ b/providers/amazon/tests/system/amazon/aws/example_hive_to_dynamodb.py
@@ -22,6 +22,7 @@
 
 from __future__ import annotations
 
+import os
 from datetime import datetime
 
 from airflow.decorators import task
@@ -30,7 +31,6 @@
 from airflow.models.dag import DAG
 from airflow.providers.amazon.aws.hooks.dynamodb import DynamoDBHook
 from airflow.providers.amazon.aws.transfers.hive_to_dynamodb import HiveToDynamoDBOperator
-from airflow.utils import db
 from airflow.utils.trigger_rule import TriggerRule
 
 from system.amazon.aws.utils import SystemTestContextBuilder
@@ -102,16 +102,21 @@ def delete_dynamodb_table(table_name):
 # is hosted on EMR.  You must set the host name of the connection
 # to match your EMR cluster's hostname.
 @task
-def configure_hive_connection(connection_id, hostname):
-    db.merge_conn(
-        Connection(
-            conn_id=connection_id,
-            conn_type="hiveserver2",
-            host=hostname,
-            port=10000,
-        )
+def configure_hive_connection(connection_id: str, hostname: str):
+    """
+    Setup Hive connection using environment variables instead of database operations.
+    This approach is cleaner and compatible with Airflow 3.
+    """
+    c = Connection(
+        conn_id=connection_id,
+        conn_type="hiveserver2",
+        host=hostname,
+        port=10000,
     )
 
+    envvar = f"AIRFLOW_CONN_{c.conn_id.upper()}"
+    os.environ[envvar] = c.get_uri()
+
 
 with DAG(
     dag_id=DAG_ID,

From 4877df7b4fdb165a1c4a8fa3dd9835035728de92 Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Mon, 23 Jun 2025 14:36:20 +0100
Subject: [PATCH 095/381] Remove pytest db marker from Telegram (#52028)

* Remove pytest db marker from Telegram

* fix tests
---
 .../tests/unit/telegram/hooks/test_telegram.py     | 14 ++++++--------
 .../tests/unit/telegram/operators/test_telegram.py |  2 --
 2 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/providers/telegram/tests/unit/telegram/hooks/test_telegram.py b/providers/telegram/tests/unit/telegram/hooks/test_telegram.py
index c2e16d4bd8665..a4e231df5e5b9 100644
--- a/providers/telegram/tests/unit/telegram/hooks/test_telegram.py
+++ b/providers/telegram/tests/unit/telegram/hooks/test_telegram.py
@@ -26,10 +26,6 @@
 import airflow
 from airflow.models import Connection
 from airflow.providers.telegram.hooks.telegram import TelegramHook
-from airflow.utils import db
-
-pytestmark = pytest.mark.db_test
-
 
 TELEGRAM_TOKEN = "dummy token"
 
@@ -44,21 +40,22 @@ def telegram_error_side_effect(*args, **kwargs):
 
 
 class TestTelegramHook:
-    def setup_method(self):
-        db.merge_conn(
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
             Connection(
                 conn_id="telegram-webhook-without-token",
                 conn_type="http",
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="telegram_default",
                 conn_type="http",
                 password=TELEGRAM_TOKEN,
             )
         )
-        db.merge_conn(
+        create_connection_without_db(
             Connection(
                 conn_id="telegram-webhook-with-chat_id",
                 conn_type="http",
@@ -73,6 +70,7 @@ def test_should_use_default_connection(self):
         assert hook.token == TELEGRAM_TOKEN
         assert not hook.chat_id
 
+    @pytest.mark.db_test
     def test_should_raise_exception_if_conn_id_doesnt_exist(self):
         with pytest.raises(airflow.exceptions.AirflowNotFoundException) as ctx:
             TelegramHook(telegram_conn_id="telegram-webhook-non-existent")
diff --git a/providers/telegram/tests/unit/telegram/operators/test_telegram.py b/providers/telegram/tests/unit/telegram/operators/test_telegram.py
index 6e7732e998c39..d5c41bca997cc 100644
--- a/providers/telegram/tests/unit/telegram/operators/test_telegram.py
+++ b/providers/telegram/tests/unit/telegram/operators/test_telegram.py
@@ -26,8 +26,6 @@
 from airflow.models import Connection
 from airflow.providers.telegram.operators.telegram import TelegramOperator
 
-pytestmark = pytest.mark.db_test
-
 TELEGRAM_TOKEN = "xxx:xxx"
 
 

From 93a6dbf85ca455224535e365dfd97d4b87717b26 Mon Sep 17 00:00:00 2001
From: Pratiksha <128999446+Prab-27@users.noreply.github.com>
Date: Mon, 23 Jun 2025 19:25:50 +0530
Subject: [PATCH 096/381] Add Pre-Commit Hook To Prevent Usage of session.query
 (#52083)

* add pre-commit hook to prevent usage of session.query

* Add proper name in pre-commit hook id and name

* rename pre-commit-python file

* chnage file name from pre-commit hook
---
 .pre-commit-config.yaml                       | 10 ++
 contributing-docs/08_static_code_checks.rst   |  2 +
 .../doc/images/output_static-checks.svg       | 92 ++++++++++---------
 .../doc/images/output_static-checks.txt       |  2 +-
 .../src/airflow_breeze/pre_commit_ids.py      |  1 +
 .../prevent_deprecated_sqlalchemy_usage.py    | 56 +++++++++++
 6 files changed, 118 insertions(+), 45 deletions(-)
 create mode 100755 scripts/ci/pre_commit/prevent_deprecated_sqlalchemy_usage.py

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 89592929a2afb..19d84650118e0 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -537,6 +537,16 @@ repos:
         pass_filenames: false
         require_serial: true
         additional_dependencies: ['rich>=12.4.4']
+      - id: prevent-deprecated-sqlalchemy-usage
+        name: Prevent deprecated sqlalchemy usage
+        entry: ./scripts/ci/pre_commit/prevent_deprecated_sqlalchemy_usage.py
+        language: python
+        additional_dependencies: ['rich>=12.4.4']
+        files: >
+            (?x)
+            ^airflow-ctl.*\.py$|
+            ^task_sdk.*\.py$
+        pass_filenames: true
       - id: update-supported-versions
         name: Updates supported versions in documentation
         entry: ./scripts/ci/pre_commit/supported_versions.py
diff --git a/contributing-docs/08_static_code_checks.rst b/contributing-docs/08_static_code_checks.rst
index 494fe6a08aa82..86c64c6781ed1 100644
--- a/contributing-docs/08_static_code_checks.rst
+++ b/contributing-docs/08_static_code_checks.rst
@@ -354,6 +354,8 @@ require Breeze Docker image to be built locally.
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
 | pretty-format-json                                        | Format JSON files                                      |         |
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
+| prevent-deprecated-sqlalchemy-usage                       | Prevent deprecated sqlalchemy usage                    |         |
++-----------------------------------------------------------+--------------------------------------------------------+---------+
 | pylint                                                    | pylint                                                 |         |
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
 | python-no-log-warn                                        | Check if there are no deprecate log warn               |         |
diff --git a/dev/breeze/doc/images/output_static-checks.svg b/dev/breeze/doc/images/output_static-checks.svg
index cf51d1ab8d4d8..d7ef8a1294667 100644
--- a/dev/breeze/doc/images/output_static-checks.svg
+++ b/dev/breeze/doc/images/output_static-checks.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 2246.0" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 2270.4" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-static-checks-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="2195.0" />
+      <rect x="0" y="0" width="1463.0" height="2219.4" />
     </clipPath>
     <clipPath id="breeze-static-checks-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -312,9 +312,12 @@
 <clipPath id="breeze-static-checks-line-88">
     <rect x="0" y="2148.7" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-static-checks-line-89">
+    <rect x="0" y="2173.1" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2244" rx="8"/><text class="breeze-static-checks-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;static-checks</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2268.4" rx="8"/><text class="breeze-static-checks-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;static-checks</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -373,47 +376,48 @@
 </text><text class="breeze-static-checks-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1142.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-46)">insert-license&#160;|&#160;kubeconform&#160;|&#160;lint-chart-schema&#160;|&#160;lint-dockerfile&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1142.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">│</text><text class="breeze-static-checks-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">
 </text><text class="breeze-static-checks-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1166.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-47)">lint-helm-chart&#160;|&#160;lint-json-schema&#160;|&#160;lint-markdown&#160;|&#160;mixed-line-ending&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1166.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">│</text><text class="breeze-static-checks-r1" x="1464" y="1166.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">
 </text><text class="breeze-static-checks-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1191.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-48)">mypy-airflow-core&#160;|&#160;mypy-airflow-ctl&#160;|&#160;mypy-dev&#160;|&#160;mypy-devel-common&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1191.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">│</text><text class="breeze-static-checks-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">
-</text><text class="breeze-static-checks-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1215.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-49)">mypy-providers&#160;|&#160;mypy-task-sdk&#160;|&#160;pretty-format-json&#160;|&#160;pylint&#160;|&#160;python-no-log-warn</text><text class="breeze-static-checks-r5" x="1451.8" y="1215.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">│</text><text class="breeze-static-checks-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">
-</text><text class="breeze-static-checks-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-static-checks-line-50)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1240" textLength="988.2" clip-path="url(#breeze-static-checks-line-50)">|&#160;replace-bad-characters&#160;|&#160;rst-backticks&#160;|&#160;ruff&#160;|&#160;ruff-format&#160;|&#160;shellcheck&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1240" textLength="12.2" clip-path="url(#breeze-static-checks-line-50)">│</text><text class="breeze-static-checks-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-static-checks-line-50)">
-</text><text class="breeze-static-checks-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1264.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-51)">trailing-whitespace&#160;|&#160;ts-compile-lint-simple-auth-manager-ui&#160;|&#160;ts-compile-lint-ui</text><text class="breeze-static-checks-r5" x="1451.8" y="1264.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">│</text><text class="breeze-static-checks-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">
-</text><text class="breeze-static-checks-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1288.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-52)">|&#160;update-black-version&#160;|&#160;update-breeze-cmd-output&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1288.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">│</text><text class="breeze-static-checks-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">
-</text><text class="breeze-static-checks-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1313.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-53)">update-breeze-readme-config-hash&#160;|&#160;update-chart-dependencies&#160;|&#160;update-er-diagram&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1313.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">│</text><text class="breeze-static-checks-r1" x="1464" y="1313.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">
-</text><text class="breeze-static-checks-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1337.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-54)">|&#160;update-in-the-wild-to-be-sorted&#160;|&#160;update-inlined-dockerfile-scripts&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1337.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">│</text><text class="breeze-static-checks-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">
-</text><text class="breeze-static-checks-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-static-checks-line-55)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1362" textLength="988.2" clip-path="url(#breeze-static-checks-line-55)">update-installed-providers-to-be-sorted&#160;|&#160;update-installers-and-pre-commit&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1362" textLength="12.2" clip-path="url(#breeze-static-checks-line-55)">│</text><text class="breeze-static-checks-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#breeze-static-checks-line-55)">
-</text><text class="breeze-static-checks-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1386.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-56)">update-local-yml-file&#160;|&#160;update-migration-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1386.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">│</text><text class="breeze-static-checks-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">
-</text><text class="breeze-static-checks-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1410.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-57)">update-providers-build-files&#160;|&#160;update-providers-dependencies&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1410.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text class="breeze-static-checks-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">
-</text><text class="breeze-static-checks-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1435.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-58)">update-pyproject-toml&#160;|&#160;update-reproducible-source-date-epoch&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text class="breeze-static-checks-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">
-</text><text class="breeze-static-checks-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1459.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-59)">update-spelling-wordlist-to-be-sorted&#160;|&#160;update-supported-versions&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1459.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">│</text><text class="breeze-static-checks-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">
-</text><text class="breeze-static-checks-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1484" textLength="988.2" clip-path="url(#breeze-static-checks-line-60)">update-vendored-in-k8s-json-schema&#160;|&#160;update-version&#160;|&#160;validate-operators-init&#160;|&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">│</text><text class="breeze-static-checks-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">
-</text><text class="breeze-static-checks-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1508.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-61)">yamllint&#160;|&#160;zizmor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text class="breeze-static-checks-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">
-</text><text class="breeze-static-checks-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1532.8" textLength="268.4" clip-path="url(#breeze-static-checks-line-62)">--show-diff-on-failure</text><text class="breeze-static-checks-r6" x="402.6" y="1532.8" textLength="24.4" clip-path="url(#breeze-static-checks-line-62)">-s</text><text class="breeze-static-checks-r1" x="451.4" y="1532.8" textLength="524.6" clip-path="url(#breeze-static-checks-line-62)">Show&#160;diff&#160;for&#160;files&#160;modified&#160;by&#160;the&#160;checks.</text><text class="breeze-static-checks-r5" x="1451.8" y="1532.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">│</text><text class="breeze-static-checks-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">
-</text><text class="breeze-static-checks-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1557.2" textLength="292.8" clip-path="url(#breeze-static-checks-line-63)">--initialize-environment</text><text class="breeze-static-checks-r1" x="451.4" y="1557.2" textLength="549" clip-path="url(#breeze-static-checks-line-63)">Initialize&#160;environment&#160;before&#160;running&#160;checks.</text><text class="breeze-static-checks-r5" x="1451.8" y="1557.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">│</text><text class="breeze-static-checks-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">
-</text><text class="breeze-static-checks-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1581.6" textLength="353.8" clip-path="url(#breeze-static-checks-line-64)">--max-initialization-attempts</text><text class="breeze-static-checks-r1" x="451.4" y="1581.6" textLength="854" clip-path="url(#breeze-static-checks-line-64)">Maximum&#160;number&#160;of&#160;attempts&#160;to&#160;initialize&#160;environment&#160;before&#160;giving&#160;up.</text><text class="breeze-static-checks-r5" x="1451.8" y="1581.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">│</text><text class="breeze-static-checks-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">
-</text><text class="breeze-static-checks-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-static-checks-line-65)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1606" textLength="854" clip-path="url(#breeze-static-checks-line-65)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1606" textLength="12.2" clip-path="url(#breeze-static-checks-line-65)">│</text><text class="breeze-static-checks-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-static-checks-line-65)">
-</text><text class="breeze-static-checks-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">│</text><text class="breeze-static-checks-r5" x="451.4" y="1630.4" textLength="854" clip-path="url(#breeze-static-checks-line-66)">[default:&#160;3;&#160;1&lt;=x&lt;=10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1630.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">│</text><text class="breeze-static-checks-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">
-</text><text class="breeze-static-checks-r5" x="0" y="1654.8" textLength="1464" clip-path="url(#breeze-static-checks-line-67)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-67)">
-</text><text class="breeze-static-checks-r5" x="0" y="1679.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-68)">╭─</text><text class="breeze-static-checks-r5" x="24.4" y="1679.2" textLength="463.6" clip-path="url(#breeze-static-checks-line-68)">&#160;Selecting&#160;files&#160;to&#160;run&#160;the&#160;checks&#160;on&#160;</text><text class="breeze-static-checks-r5" x="488" y="1679.2" textLength="951.6" clip-path="url(#breeze-static-checks-line-68)">──────────────────────────────────────────────────────────────────────────────</text><text class="breeze-static-checks-r5" x="1439.6" y="1679.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-68)">─╮</text><text class="breeze-static-checks-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-68)">
-</text><text class="breeze-static-checks-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-69)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1703.6" textLength="73.2" clip-path="url(#breeze-static-checks-line-69)">--file</text><text class="breeze-static-checks-r6" x="256.2" y="1703.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-69)">-f</text><text class="breeze-static-checks-r1" x="305" y="1703.6" textLength="427" clip-path="url(#breeze-static-checks-line-69)">List&#160;of&#160;files&#160;to&#160;run&#160;the&#160;checks&#160;on.</text><text class="breeze-static-checks-r7" x="744.2" y="1703.6" textLength="73.2" clip-path="url(#breeze-static-checks-line-69)">(PATH)</text><text class="breeze-static-checks-r5" x="1451.8" y="1703.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-69)">│</text><text class="breeze-static-checks-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-69)">
-</text><text class="breeze-static-checks-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-static-checks-line-70)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1728" textLength="134.2" clip-path="url(#breeze-static-checks-line-70)">--all-files</text><text class="breeze-static-checks-r6" x="256.2" y="1728" textLength="24.4" clip-path="url(#breeze-static-checks-line-70)">-a</text><text class="breeze-static-checks-r1" x="305" y="1728" textLength="292.8" clip-path="url(#breeze-static-checks-line-70)">Run&#160;checks&#160;on&#160;all&#160;files.</text><text class="breeze-static-checks-r5" x="1451.8" y="1728" textLength="12.2" clip-path="url(#breeze-static-checks-line-70)">│</text><text class="breeze-static-checks-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-static-checks-line-70)">
-</text><text class="breeze-static-checks-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1752.4" textLength="146.4" clip-path="url(#breeze-static-checks-line-71)">--commit-ref</text><text class="breeze-static-checks-r6" x="256.2" y="1752.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-71)">-r</text><text class="breeze-static-checks-r1" x="305" y="1752.4" textLength="1134.6" clip-path="url(#breeze-static-checks-line-71)">Run&#160;checks&#160;for&#160;this&#160;commit&#160;reference&#160;only&#160;(can&#160;be&#160;any&#160;git&#160;commit-ish&#160;reference).&#160;Mutually&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1752.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">│</text><text class="breeze-static-checks-r1" x="1464" y="1752.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">
-</text><text class="breeze-static-checks-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">│</text><text class="breeze-static-checks-r1" x="305" y="1776.8" textLength="183" clip-path="url(#breeze-static-checks-line-72)">exclusive&#160;with&#160;</text><text class="breeze-static-checks-r4" x="488" y="1776.8" textLength="158.6" clip-path="url(#breeze-static-checks-line-72)">--last-commit</text><text class="breeze-static-checks-r1" x="646.6" y="1776.8" textLength="793" clip-path="url(#breeze-static-checks-line-72)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1776.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">│</text><text class="breeze-static-checks-r1" x="1464" y="1776.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">
-</text><text class="breeze-static-checks-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">│</text><text class="breeze-static-checks-r7" x="305" y="1801.2" textLength="1134.6" clip-path="url(#breeze-static-checks-line-73)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1801.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">│</text><text class="breeze-static-checks-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">
-</text><text class="breeze-static-checks-r5" x="0" y="1825.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1825.6" textLength="158.6" clip-path="url(#breeze-static-checks-line-74)">--last-commit</text><text class="breeze-static-checks-r6" x="256.2" y="1825.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-74)">-c</text><text class="breeze-static-checks-r1" x="305" y="1825.6" textLength="793" clip-path="url(#breeze-static-checks-line-74)">Run&#160;checks&#160;for&#160;all&#160;files&#160;in&#160;last&#160;commit.&#160;Mutually&#160;exclusive&#160;with&#160;</text><text class="breeze-static-checks-r4" x="1098" y="1825.6" textLength="146.4" clip-path="url(#breeze-static-checks-line-74)">--commit-ref</text><text class="breeze-static-checks-r1" x="1244.4" y="1825.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">.</text><text class="breeze-static-checks-r5" x="1451.8" y="1825.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">│</text><text class="breeze-static-checks-r1" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">
-</text><text class="breeze-static-checks-r5" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-static-checks-line-75)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1850" textLength="207.4" clip-path="url(#breeze-static-checks-line-75)">--only-my-changes</text><text class="breeze-static-checks-r6" x="256.2" y="1850" textLength="24.4" clip-path="url(#breeze-static-checks-line-75)">-m</text><text class="breeze-static-checks-r1" x="305" y="1850" textLength="1134.6" clip-path="url(#breeze-static-checks-line-75)">Run&#160;checks&#160;for&#160;commits&#160;belonging&#160;to&#160;my&#160;PR&#160;only:&#160;for&#160;all&#160;commits&#160;between&#160;merge&#160;base&#160;to&#160;`main`&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1850" textLength="12.2" clip-path="url(#breeze-static-checks-line-75)">│</text><text class="breeze-static-checks-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-static-checks-line-75)">
-</text><text class="breeze-static-checks-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">│</text><text class="breeze-static-checks-r1" x="305" y="1874.4" textLength="1134.6" clip-path="url(#breeze-static-checks-line-76)">branch&#160;and&#160;HEAD&#160;of&#160;your&#160;branch.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1874.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">│</text><text class="breeze-static-checks-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">
-</text><text class="breeze-static-checks-r5" x="0" y="1898.8" textLength="1464" clip-path="url(#breeze-static-checks-line-77)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-77)">
-</text><text class="breeze-static-checks-r5" x="0" y="1923.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-78)">╭─</text><text class="breeze-static-checks-r5" x="24.4" y="1923.2" textLength="463.6" clip-path="url(#breeze-static-checks-line-78)">&#160;Building&#160;image&#160;before&#160;running&#160;checks&#160;</text><text class="breeze-static-checks-r5" x="488" y="1923.2" textLength="951.6" clip-path="url(#breeze-static-checks-line-78)">──────────────────────────────────────────────────────────────────────────────</text><text class="breeze-static-checks-r5" x="1439.6" y="1923.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-78)">─╮</text><text class="breeze-static-checks-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-78)">
-</text><text class="breeze-static-checks-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-79)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1947.6" textLength="317.2" clip-path="url(#breeze-static-checks-line-79)">--skip-image-upgrade-check</text><text class="breeze-static-checks-r1" x="414.8" y="1947.6" textLength="536.8" clip-path="url(#breeze-static-checks-line-79)">Skip&#160;checking&#160;if&#160;the&#160;CI&#160;image&#160;is&#160;up&#160;to&#160;date.</text><text class="breeze-static-checks-r5" x="1451.8" y="1947.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-79)">│</text><text class="breeze-static-checks-r1" x="1464" y="1947.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-79)">
-</text><text class="breeze-static-checks-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-static-checks-line-80)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1972" textLength="158.6" clip-path="url(#breeze-static-checks-line-80)">--force-build</text><text class="breeze-static-checks-r1" x="414.8" y="1972" textLength="707.6" clip-path="url(#breeze-static-checks-line-80)">Force&#160;image&#160;build&#160;no&#160;matter&#160;if&#160;it&#160;is&#160;determined&#160;as&#160;needed.</text><text class="breeze-static-checks-r5" x="1451.8" y="1972" textLength="12.2" clip-path="url(#breeze-static-checks-line-80)">│</text><text class="breeze-static-checks-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-static-checks-line-80)">
-</text><text class="breeze-static-checks-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1996.4" textLength="231.8" clip-path="url(#breeze-static-checks-line-81)">--github-repository</text><text class="breeze-static-checks-r6" x="366" y="1996.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-81)">-g</text><text class="breeze-static-checks-r1" x="414.8" y="1996.4" textLength="585.6" clip-path="url(#breeze-static-checks-line-81)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-static-checks-r7" x="1012.6" y="1996.4" textLength="73.2" clip-path="url(#breeze-static-checks-line-81)">(TEXT)</text><text class="breeze-static-checks-r5" x="1098" y="1996.4" textLength="305" clip-path="url(#breeze-static-checks-line-81)">[default:&#160;apache/airflow]</text><text class="breeze-static-checks-r5" x="1451.8" y="1996.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">│</text><text class="breeze-static-checks-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">
-</text><text class="breeze-static-checks-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2020.8" textLength="109.8" clip-path="url(#breeze-static-checks-line-82)">--builder</text><text class="breeze-static-checks-r1" x="414.8" y="2020.8" textLength="756.4" clip-path="url(#breeze-static-checks-line-82)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build`&#160;commands.</text><text class="breeze-static-checks-r7" x="1183.4" y="2020.8" textLength="73.2" clip-path="url(#breeze-static-checks-line-82)">(TEXT)</text><text class="breeze-static-checks-r5" x="1451.8" y="2020.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">│</text><text class="breeze-static-checks-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">
-</text><text class="breeze-static-checks-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">│</text><text class="breeze-static-checks-r5" x="414.8" y="2045.2" textLength="756.4" clip-path="url(#breeze-static-checks-line-83)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="2045.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">│</text><text class="breeze-static-checks-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">
-</text><text class="breeze-static-checks-r5" x="0" y="2069.6" textLength="1464" clip-path="url(#breeze-static-checks-line-84)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-84)">
-</text><text class="breeze-static-checks-r5" x="0" y="2094" textLength="24.4" clip-path="url(#breeze-static-checks-line-85)">╭─</text><text class="breeze-static-checks-r5" x="24.4" y="2094" textLength="195.2" clip-path="url(#breeze-static-checks-line-85)">&#160;Common&#160;options&#160;</text><text class="breeze-static-checks-r5" x="219.6" y="2094" textLength="1220" clip-path="url(#breeze-static-checks-line-85)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-static-checks-r5" x="1439.6" y="2094" textLength="24.4" clip-path="url(#breeze-static-checks-line-85)">─╮</text><text class="breeze-static-checks-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-static-checks-line-85)">
-</text><text class="breeze-static-checks-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-86)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2118.4" textLength="109.8" clip-path="url(#breeze-static-checks-line-86)">--dry-run</text><text class="breeze-static-checks-r6" x="158.6" y="2118.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-86)">-D</text><text class="breeze-static-checks-r1" x="207.4" y="2118.4" textLength="719.8" clip-path="url(#breeze-static-checks-line-86)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-static-checks-r5" x="1451.8" y="2118.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-86)">│</text><text class="breeze-static-checks-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-86)">
-</text><text class="breeze-static-checks-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-87)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2142.8" textLength="109.8" clip-path="url(#breeze-static-checks-line-87)">--verbose</text><text class="breeze-static-checks-r6" x="158.6" y="2142.8" textLength="24.4" clip-path="url(#breeze-static-checks-line-87)">-v</text><text class="breeze-static-checks-r1" x="207.4" y="2142.8" textLength="585.6" clip-path="url(#breeze-static-checks-line-87)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-static-checks-r5" x="1451.8" y="2142.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-87)">│</text><text class="breeze-static-checks-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-87)">
-</text><text class="breeze-static-checks-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2167.2" textLength="73.2" clip-path="url(#breeze-static-checks-line-88)">--help</text><text class="breeze-static-checks-r6" x="158.6" y="2167.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-88)">-h</text><text class="breeze-static-checks-r1" x="207.4" y="2167.2" textLength="329.4" clip-path="url(#breeze-static-checks-line-88)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-static-checks-r5" x="1451.8" y="2167.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">│</text><text class="breeze-static-checks-r1" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">
-</text><text class="breeze-static-checks-r5" x="0" y="2191.6" textLength="1464" clip-path="url(#breeze-static-checks-line-89)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="2191.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-89)">
+</text><text class="breeze-static-checks-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1215.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-49)">mypy-providers&#160;|&#160;mypy-task-sdk&#160;|&#160;pretty-format-json&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1215.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">│</text><text class="breeze-static-checks-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">
+</text><text class="breeze-static-checks-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-static-checks-line-50)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1240" textLength="988.2" clip-path="url(#breeze-static-checks-line-50)">prevent-deprecated-sqlalchemy-usage&#160;|&#160;pylint&#160;|&#160;python-no-log-warn&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1240" textLength="12.2" clip-path="url(#breeze-static-checks-line-50)">│</text><text class="breeze-static-checks-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-static-checks-line-50)">
+</text><text class="breeze-static-checks-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1264.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-51)">replace-bad-characters&#160;|&#160;rst-backticks&#160;|&#160;ruff&#160;|&#160;ruff-format&#160;|&#160;shellcheck&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1264.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">│</text><text class="breeze-static-checks-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">
+</text><text class="breeze-static-checks-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1288.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-52)">trailing-whitespace&#160;|&#160;ts-compile-lint-simple-auth-manager-ui&#160;|&#160;ts-compile-lint-ui</text><text class="breeze-static-checks-r5" x="1451.8" y="1288.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">│</text><text class="breeze-static-checks-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">
+</text><text class="breeze-static-checks-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1313.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-53)">|&#160;update-black-version&#160;|&#160;update-breeze-cmd-output&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1313.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">│</text><text class="breeze-static-checks-r1" x="1464" y="1313.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">
+</text><text class="breeze-static-checks-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1337.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-54)">update-breeze-readme-config-hash&#160;|&#160;update-chart-dependencies&#160;|&#160;update-er-diagram&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1337.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">│</text><text class="breeze-static-checks-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">
+</text><text class="breeze-static-checks-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-static-checks-line-55)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1362" textLength="988.2" clip-path="url(#breeze-static-checks-line-55)">|&#160;update-in-the-wild-to-be-sorted&#160;|&#160;update-inlined-dockerfile-scripts&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1362" textLength="12.2" clip-path="url(#breeze-static-checks-line-55)">│</text><text class="breeze-static-checks-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#breeze-static-checks-line-55)">
+</text><text class="breeze-static-checks-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1386.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-56)">update-installed-providers-to-be-sorted&#160;|&#160;update-installers-and-pre-commit&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1386.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">│</text><text class="breeze-static-checks-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">
+</text><text class="breeze-static-checks-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1410.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-57)">update-local-yml-file&#160;|&#160;update-migration-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1410.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text class="breeze-static-checks-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">
+</text><text class="breeze-static-checks-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1435.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-58)">update-providers-build-files&#160;|&#160;update-providers-dependencies&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text class="breeze-static-checks-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">
+</text><text class="breeze-static-checks-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1459.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-59)">update-pyproject-toml&#160;|&#160;update-reproducible-source-date-epoch&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1459.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">│</text><text class="breeze-static-checks-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">
+</text><text class="breeze-static-checks-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1484" textLength="988.2" clip-path="url(#breeze-static-checks-line-60)">update-spelling-wordlist-to-be-sorted&#160;|&#160;update-supported-versions&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">│</text><text class="breeze-static-checks-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">
+</text><text class="breeze-static-checks-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1508.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-61)">update-vendored-in-k8s-json-schema&#160;|&#160;update-version&#160;|&#160;validate-operators-init&#160;|&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text class="breeze-static-checks-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">
+</text><text class="breeze-static-checks-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1532.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-62)">yamllint&#160;|&#160;zizmor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1532.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">│</text><text class="breeze-static-checks-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">
+</text><text class="breeze-static-checks-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1557.2" textLength="268.4" clip-path="url(#breeze-static-checks-line-63)">--show-diff-on-failure</text><text class="breeze-static-checks-r6" x="402.6" y="1557.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-63)">-s</text><text class="breeze-static-checks-r1" x="451.4" y="1557.2" textLength="524.6" clip-path="url(#breeze-static-checks-line-63)">Show&#160;diff&#160;for&#160;files&#160;modified&#160;by&#160;the&#160;checks.</text><text class="breeze-static-checks-r5" x="1451.8" y="1557.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">│</text><text class="breeze-static-checks-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">
+</text><text class="breeze-static-checks-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1581.6" textLength="292.8" clip-path="url(#breeze-static-checks-line-64)">--initialize-environment</text><text class="breeze-static-checks-r1" x="451.4" y="1581.6" textLength="549" clip-path="url(#breeze-static-checks-line-64)">Initialize&#160;environment&#160;before&#160;running&#160;checks.</text><text class="breeze-static-checks-r5" x="1451.8" y="1581.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">│</text><text class="breeze-static-checks-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">
+</text><text class="breeze-static-checks-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-static-checks-line-65)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1606" textLength="353.8" clip-path="url(#breeze-static-checks-line-65)">--max-initialization-attempts</text><text class="breeze-static-checks-r1" x="451.4" y="1606" textLength="854" clip-path="url(#breeze-static-checks-line-65)">Maximum&#160;number&#160;of&#160;attempts&#160;to&#160;initialize&#160;environment&#160;before&#160;giving&#160;up.</text><text class="breeze-static-checks-r5" x="1451.8" y="1606" textLength="12.2" clip-path="url(#breeze-static-checks-line-65)">│</text><text class="breeze-static-checks-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-static-checks-line-65)">
+</text><text class="breeze-static-checks-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1630.4" textLength="854" clip-path="url(#breeze-static-checks-line-66)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1630.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">│</text><text class="breeze-static-checks-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">
+</text><text class="breeze-static-checks-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-67)">│</text><text class="breeze-static-checks-r5" x="451.4" y="1654.8" textLength="854" clip-path="url(#breeze-static-checks-line-67)">[default:&#160;3;&#160;1&lt;=x&lt;=10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1654.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-67)">│</text><text class="breeze-static-checks-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-67)">
+</text><text class="breeze-static-checks-r5" x="0" y="1679.2" textLength="1464" clip-path="url(#breeze-static-checks-line-68)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-68)">
+</text><text class="breeze-static-checks-r5" x="0" y="1703.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-69)">╭─</text><text class="breeze-static-checks-r5" x="24.4" y="1703.6" textLength="463.6" clip-path="url(#breeze-static-checks-line-69)">&#160;Selecting&#160;files&#160;to&#160;run&#160;the&#160;checks&#160;on&#160;</text><text class="breeze-static-checks-r5" x="488" y="1703.6" textLength="951.6" clip-path="url(#breeze-static-checks-line-69)">──────────────────────────────────────────────────────────────────────────────</text><text class="breeze-static-checks-r5" x="1439.6" y="1703.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-69)">─╮</text><text class="breeze-static-checks-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-69)">
+</text><text class="breeze-static-checks-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-static-checks-line-70)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1728" textLength="73.2" clip-path="url(#breeze-static-checks-line-70)">--file</text><text class="breeze-static-checks-r6" x="256.2" y="1728" textLength="24.4" clip-path="url(#breeze-static-checks-line-70)">-f</text><text class="breeze-static-checks-r1" x="305" y="1728" textLength="427" clip-path="url(#breeze-static-checks-line-70)">List&#160;of&#160;files&#160;to&#160;run&#160;the&#160;checks&#160;on.</text><text class="breeze-static-checks-r7" x="744.2" y="1728" textLength="73.2" clip-path="url(#breeze-static-checks-line-70)">(PATH)</text><text class="breeze-static-checks-r5" x="1451.8" y="1728" textLength="12.2" clip-path="url(#breeze-static-checks-line-70)">│</text><text class="breeze-static-checks-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-static-checks-line-70)">
+</text><text class="breeze-static-checks-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1752.4" textLength="134.2" clip-path="url(#breeze-static-checks-line-71)">--all-files</text><text class="breeze-static-checks-r6" x="256.2" y="1752.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-71)">-a</text><text class="breeze-static-checks-r1" x="305" y="1752.4" textLength="292.8" clip-path="url(#breeze-static-checks-line-71)">Run&#160;checks&#160;on&#160;all&#160;files.</text><text class="breeze-static-checks-r5" x="1451.8" y="1752.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">│</text><text class="breeze-static-checks-r1" x="1464" y="1752.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">
+</text><text class="breeze-static-checks-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1776.8" textLength="146.4" clip-path="url(#breeze-static-checks-line-72)">--commit-ref</text><text class="breeze-static-checks-r6" x="256.2" y="1776.8" textLength="24.4" clip-path="url(#breeze-static-checks-line-72)">-r</text><text class="breeze-static-checks-r1" x="305" y="1776.8" textLength="1134.6" clip-path="url(#breeze-static-checks-line-72)">Run&#160;checks&#160;for&#160;this&#160;commit&#160;reference&#160;only&#160;(can&#160;be&#160;any&#160;git&#160;commit-ish&#160;reference).&#160;Mutually&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1776.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">│</text><text class="breeze-static-checks-r1" x="1464" y="1776.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">
+</text><text class="breeze-static-checks-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">│</text><text class="breeze-static-checks-r1" x="305" y="1801.2" textLength="183" clip-path="url(#breeze-static-checks-line-73)">exclusive&#160;with&#160;</text><text class="breeze-static-checks-r4" x="488" y="1801.2" textLength="158.6" clip-path="url(#breeze-static-checks-line-73)">--last-commit</text><text class="breeze-static-checks-r1" x="646.6" y="1801.2" textLength="793" clip-path="url(#breeze-static-checks-line-73)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1801.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">│</text><text class="breeze-static-checks-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">
+</text><text class="breeze-static-checks-r5" x="0" y="1825.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">│</text><text class="breeze-static-checks-r7" x="305" y="1825.6" textLength="1134.6" clip-path="url(#breeze-static-checks-line-74)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1825.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">│</text><text class="breeze-static-checks-r1" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">
+</text><text class="breeze-static-checks-r5" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-static-checks-line-75)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1850" textLength="158.6" clip-path="url(#breeze-static-checks-line-75)">--last-commit</text><text class="breeze-static-checks-r6" x="256.2" y="1850" textLength="24.4" clip-path="url(#breeze-static-checks-line-75)">-c</text><text class="breeze-static-checks-r1" x="305" y="1850" textLength="793" clip-path="url(#breeze-static-checks-line-75)">Run&#160;checks&#160;for&#160;all&#160;files&#160;in&#160;last&#160;commit.&#160;Mutually&#160;exclusive&#160;with&#160;</text><text class="breeze-static-checks-r4" x="1098" y="1850" textLength="146.4" clip-path="url(#breeze-static-checks-line-75)">--commit-ref</text><text class="breeze-static-checks-r1" x="1244.4" y="1850" textLength="12.2" clip-path="url(#breeze-static-checks-line-75)">.</text><text class="breeze-static-checks-r5" x="1451.8" y="1850" textLength="12.2" clip-path="url(#breeze-static-checks-line-75)">│</text><text class="breeze-static-checks-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-static-checks-line-75)">
+</text><text class="breeze-static-checks-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1874.4" textLength="207.4" clip-path="url(#breeze-static-checks-line-76)">--only-my-changes</text><text class="breeze-static-checks-r6" x="256.2" y="1874.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-76)">-m</text><text class="breeze-static-checks-r1" x="305" y="1874.4" textLength="1134.6" clip-path="url(#breeze-static-checks-line-76)">Run&#160;checks&#160;for&#160;commits&#160;belonging&#160;to&#160;my&#160;PR&#160;only:&#160;for&#160;all&#160;commits&#160;between&#160;merge&#160;base&#160;to&#160;`main`&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1874.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">│</text><text class="breeze-static-checks-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">
+</text><text class="breeze-static-checks-r5" x="0" y="1898.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-77)">│</text><text class="breeze-static-checks-r1" x="305" y="1898.8" textLength="1134.6" clip-path="url(#breeze-static-checks-line-77)">branch&#160;and&#160;HEAD&#160;of&#160;your&#160;branch.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1898.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-77)">│</text><text class="breeze-static-checks-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-77)">
+</text><text class="breeze-static-checks-r5" x="0" y="1923.2" textLength="1464" clip-path="url(#breeze-static-checks-line-78)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-78)">
+</text><text class="breeze-static-checks-r5" x="0" y="1947.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-79)">╭─</text><text class="breeze-static-checks-r5" x="24.4" y="1947.6" textLength="463.6" clip-path="url(#breeze-static-checks-line-79)">&#160;Building&#160;image&#160;before&#160;running&#160;checks&#160;</text><text class="breeze-static-checks-r5" x="488" y="1947.6" textLength="951.6" clip-path="url(#breeze-static-checks-line-79)">──────────────────────────────────────────────────────────────────────────────</text><text class="breeze-static-checks-r5" x="1439.6" y="1947.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-79)">─╮</text><text class="breeze-static-checks-r1" x="1464" y="1947.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-79)">
+</text><text class="breeze-static-checks-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-static-checks-line-80)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1972" textLength="317.2" clip-path="url(#breeze-static-checks-line-80)">--skip-image-upgrade-check</text><text class="breeze-static-checks-r1" x="414.8" y="1972" textLength="536.8" clip-path="url(#breeze-static-checks-line-80)">Skip&#160;checking&#160;if&#160;the&#160;CI&#160;image&#160;is&#160;up&#160;to&#160;date.</text><text class="breeze-static-checks-r5" x="1451.8" y="1972" textLength="12.2" clip-path="url(#breeze-static-checks-line-80)">│</text><text class="breeze-static-checks-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-static-checks-line-80)">
+</text><text class="breeze-static-checks-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1996.4" textLength="158.6" clip-path="url(#breeze-static-checks-line-81)">--force-build</text><text class="breeze-static-checks-r1" x="414.8" y="1996.4" textLength="707.6" clip-path="url(#breeze-static-checks-line-81)">Force&#160;image&#160;build&#160;no&#160;matter&#160;if&#160;it&#160;is&#160;determined&#160;as&#160;needed.</text><text class="breeze-static-checks-r5" x="1451.8" y="1996.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">│</text><text class="breeze-static-checks-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">
+</text><text class="breeze-static-checks-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2020.8" textLength="231.8" clip-path="url(#breeze-static-checks-line-82)">--github-repository</text><text class="breeze-static-checks-r6" x="366" y="2020.8" textLength="24.4" clip-path="url(#breeze-static-checks-line-82)">-g</text><text class="breeze-static-checks-r1" x="414.8" y="2020.8" textLength="585.6" clip-path="url(#breeze-static-checks-line-82)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-static-checks-r7" x="1012.6" y="2020.8" textLength="73.2" clip-path="url(#breeze-static-checks-line-82)">(TEXT)</text><text class="breeze-static-checks-r5" x="1098" y="2020.8" textLength="305" clip-path="url(#breeze-static-checks-line-82)">[default:&#160;apache/airflow]</text><text class="breeze-static-checks-r5" x="1451.8" y="2020.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">│</text><text class="breeze-static-checks-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">
+</text><text class="breeze-static-checks-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2045.2" textLength="109.8" clip-path="url(#breeze-static-checks-line-83)">--builder</text><text class="breeze-static-checks-r1" x="414.8" y="2045.2" textLength="756.4" clip-path="url(#breeze-static-checks-line-83)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build`&#160;commands.</text><text class="breeze-static-checks-r7" x="1183.4" y="2045.2" textLength="73.2" clip-path="url(#breeze-static-checks-line-83)">(TEXT)</text><text class="breeze-static-checks-r5" x="1451.8" y="2045.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">│</text><text class="breeze-static-checks-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">
+</text><text class="breeze-static-checks-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-84)">│</text><text class="breeze-static-checks-r5" x="414.8" y="2069.6" textLength="756.4" clip-path="url(#breeze-static-checks-line-84)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="2069.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-84)">│</text><text class="breeze-static-checks-r1" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-84)">
+</text><text class="breeze-static-checks-r5" x="0" y="2094" textLength="1464" clip-path="url(#breeze-static-checks-line-85)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-static-checks-line-85)">
+</text><text class="breeze-static-checks-r5" x="0" y="2118.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-86)">╭─</text><text class="breeze-static-checks-r5" x="24.4" y="2118.4" textLength="195.2" clip-path="url(#breeze-static-checks-line-86)">&#160;Common&#160;options&#160;</text><text class="breeze-static-checks-r5" x="219.6" y="2118.4" textLength="1220" clip-path="url(#breeze-static-checks-line-86)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-static-checks-r5" x="1439.6" y="2118.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-86)">─╮</text><text class="breeze-static-checks-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-86)">
+</text><text class="breeze-static-checks-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-87)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2142.8" textLength="109.8" clip-path="url(#breeze-static-checks-line-87)">--dry-run</text><text class="breeze-static-checks-r6" x="158.6" y="2142.8" textLength="24.4" clip-path="url(#breeze-static-checks-line-87)">-D</text><text class="breeze-static-checks-r1" x="207.4" y="2142.8" textLength="719.8" clip-path="url(#breeze-static-checks-line-87)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-static-checks-r5" x="1451.8" y="2142.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-87)">│</text><text class="breeze-static-checks-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-87)">
+</text><text class="breeze-static-checks-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2167.2" textLength="109.8" clip-path="url(#breeze-static-checks-line-88)">--verbose</text><text class="breeze-static-checks-r6" x="158.6" y="2167.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-88)">-v</text><text class="breeze-static-checks-r1" x="207.4" y="2167.2" textLength="585.6" clip-path="url(#breeze-static-checks-line-88)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-static-checks-r5" x="1451.8" y="2167.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">│</text><text class="breeze-static-checks-r1" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">
+</text><text class="breeze-static-checks-r5" x="0" y="2191.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-89)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2191.6" textLength="73.2" clip-path="url(#breeze-static-checks-line-89)">--help</text><text class="breeze-static-checks-r6" x="158.6" y="2191.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-89)">-h</text><text class="breeze-static-checks-r1" x="207.4" y="2191.6" textLength="329.4" clip-path="url(#breeze-static-checks-line-89)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-static-checks-r5" x="1451.8" y="2191.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-89)">│</text><text class="breeze-static-checks-r1" x="1464" y="2191.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-89)">
+</text><text class="breeze-static-checks-r5" x="0" y="2216" textLength="1464" clip-path="url(#breeze-static-checks-line-90)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="2216" textLength="12.2" clip-path="url(#breeze-static-checks-line-90)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_static-checks.txt b/dev/breeze/doc/images/output_static-checks.txt
index 0282b0f74e16f..cf3bedd858f59 100644
--- a/dev/breeze/doc/images/output_static-checks.txt
+++ b/dev/breeze/doc/images/output_static-checks.txt
@@ -1 +1 @@
-bb6a22bca8cde603acddfad0f073b3c0
+95021976bf6a2815709538bf791ccdc8
diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids.py b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
index ce4f0ec27fe57..f2ce310cc5046 100644
--- a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
+++ b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
@@ -129,6 +129,7 @@
     "mypy-providers",
     "mypy-task-sdk",
     "pretty-format-json",
+    "prevent-deprecated-sqlalchemy-usage",
     "pylint",
     "python-no-log-warn",
     "replace-bad-characters",
diff --git a/scripts/ci/pre_commit/prevent_deprecated_sqlalchemy_usage.py b/scripts/ci/pre_commit/prevent_deprecated_sqlalchemy_usage.py
new file mode 100755
index 0000000000000..a6357978426e0
--- /dev/null
+++ b/scripts/ci/pre_commit/prevent_deprecated_sqlalchemy_usage.py
@@ -0,0 +1,56 @@
+#!/usr/bin/env python
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import ast
+import sys
+from pathlib import Path
+
+from rich.console import Console
+
+console = Console(color_system="standard", width=200)
+
+
+def check_session_query(mod: ast.Module) -> int:
+    errors = False
+    for node in ast.walk(mod):
+        if isinstance(node, ast.Call) and isinstance(node.func, ast.Attribute):
+            if (
+                node.func.attr == "query"
+                and isinstance(node.func.value, ast.Name)
+                and node.func.value.id == "session"
+            ):
+                console.print(
+                    f"\nUse of legacy `session.query` detected on line {node.lineno}. "
+                    f"\nSQLAlchemy 2.0 deprecates the `Query` object"
+                    f"use the `select()` construct instead."
+                )
+                errors = True
+    return errors
+
+
+def main():
+    for file in sys.argv[1:]:
+        file_path = Path(file)
+        ast_module = ast.parse(file_path.read_text(encoding="utf-8"), file)
+        errors = check_session_query(ast_module)
+        return 1 if errors else 0
+
+
+if __name__ == "__main__":
+    sys.exit(main())

From 6b547f9b611c65e98b301125cc5227c1bdd02d00 Mon Sep 17 00:00:00 2001
From: Pierre Jeambrun <pierrejbrun@gmail.com>
Date: Mon, 23 Jun 2025 15:57:46 +0200
Subject: [PATCH 097/381] Fix yarn lint command (#52090)

---
 airflow-core/src/airflow/ui/eslint.config.js | 2 +-
 scripts/ci/pre_commit/ts_compile_lint_ui.py  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/airflow-core/src/airflow/ui/eslint.config.js b/airflow-core/src/airflow/ui/eslint.config.js
index ae71d9ac0b2df..c7d2363724a95 100644
--- a/airflow-core/src/airflow/ui/eslint.config.js
+++ b/airflow-core/src/airflow/ui/eslint.config.js
@@ -37,7 +37,7 @@ import { unicornRules } from "./rules/unicorn.js";
  */
 export default /** @type {const} @satisfies {ReadonlyArray<FlatConfig.Config>} */ ([
   // Global ignore of dist directory
-  { ignores: ["**/dist/", "**coverage/"] },
+  { ignores: ["**/dist/", "**coverage/", "**/openapi-gen/"] },
   // Base rules
   coreRules,
   typescriptRules,
diff --git a/scripts/ci/pre_commit/ts_compile_lint_ui.py b/scripts/ci/pre_commit/ts_compile_lint_ui.py
index 57791df7dc076..3e817285e2230 100755
--- a/scripts/ci/pre_commit/ts_compile_lint_ui.py
+++ b/scripts/ci/pre_commit/ts_compile_lint_ui.py
@@ -42,7 +42,7 @@
     files = [
         file[len(relative_dir.as_posix()) + 1 :]
         for file in original_files
-        if Path(file).is_relative_to(relative_dir) and "openapi-gen/" not in file
+        if Path(file).is_relative_to(relative_dir)
     ]
     all_non_yaml_files = [file for file in files if not file.endswith(".yaml")]
     print("All non-YAML files:", all_non_yaml_files)

From e30936634a4008e88a6c2f1fa9b29d355f560f1d Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Mon, 23 Jun 2025 16:07:48 +0200
Subject: [PATCH 098/381] Automatically add `fab` extra for --use-airflow and
 FABAuthManager (#52092)

Similarly to CeleryExecutor, when --use-airflow is set we should
add `fab` as extra when FABAuthManager is specified. By default,
when `--use-airflow-version` is used, no extras are used - in order
to install airflow "quickly" - you can specify them as
`--airflow-extras`, but in case you want to use FABAuthManager and
installl (for example) Airflow 3.0.2, you **know** you need fab
extra to use the manager, so we should add it automatically, otherwise
user sees errors about FABAuthManager missing.
---
 dev/breeze/src/airflow_breeze/params/shell_params.py | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/dev/breeze/src/airflow_breeze/params/shell_params.py b/dev/breeze/src/airflow_breeze/params/shell_params.py
index bee407009c902..8abb7181560a7 100644
--- a/dev/breeze/src/airflow_breeze/params/shell_params.py
+++ b/dev/breeze/src/airflow_breeze/params/shell_params.py
@@ -347,6 +347,16 @@ def compose_file(self) -> str:
                     self.airflow_extras = (
                         ",".join(current_extras.split(",") + ["celery"]) if current_extras else "celery"
                     )
+        if self.auth_manager == FAB_AUTH_MANAGER:
+            if self.use_airflow_version:
+                current_extras = self.airflow_extras
+                if "fab" not in current_extras.split(","):
+                    get_console().print(
+                        "[warning]Adding `fab` extras as it is implicitly needed by FAB auth manager"
+                    )
+                    self.airflow_extras = (
+                        ",".join(current_extras.split(",") + ["fab"]) if current_extras else "fab"
+                    )
 
         compose_file_list.append(DOCKER_COMPOSE_DIR / "base.yml")
         self.add_docker_in_docker(compose_file_list)

From 4f50f38d836d70b7ef84569ba58411a8a8227631 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kanto=28=EC=B9=B8=ED=86=A0=29?= <joshuaisland@gmail.com>
Date: Mon, 23 Jun 2025 23:57:43 +0900
Subject: [PATCH 099/381] Remove pytest.mark.db_test where possible from asana
 provider (#52093)

* Remove pytest.mark.db_test where possible from asana provider

* Update .pre-commit-config.yaml

---------

Co-authored-by: Jarek Potiuk <jarek@potiuk.com>
---
 .../asana/tests/unit/asana/operators/test_asana_tasks.py    | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/providers/asana/tests/unit/asana/operators/test_asana_tasks.py b/providers/asana/tests/unit/asana/operators/test_asana_tasks.py
index 0e4d02f5ff1b6..7549405781b52 100644
--- a/providers/asana/tests/unit/asana/operators/test_asana_tasks.py
+++ b/providers/asana/tests/unit/asana/operators/test_asana_tasks.py
@@ -32,8 +32,6 @@
 from airflow.utils import timezone
 
 # The tests do not create dag runs, so db isolation tests are skipped
-pytestmark = pytest.mark.db_test
-
 
 DEFAULT_DATE = timezone.datetime(2015, 1, 1)
 TEST_DAG_ID = "unit_test_dag"
@@ -52,6 +50,7 @@ def setup_connections(self, create_connection_without_db):
         self.dag = dag
         create_connection_without_db(Connection(conn_id="asana_test", conn_type="asana", password="test"))
 
+    @pytest.mark.db_test
     @patch("airflow.providers.asana.hooks.asana.TasksApi", autospec=True, return_value=asana_tasks_api_mock)
     def test_asana_create_task_operator(self, mock_tasks_api):
         """
@@ -69,6 +68,7 @@ def test_asana_create_task_operator(self, mock_tasks_api):
         create_task.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
         assert mock_tasks_api.return_value.create_task.called
 
+    @pytest.mark.db_test
     @patch("airflow.providers.asana.hooks.asana.TasksApi", autospec=True, return_value=asana_tasks_api_mock)
     def test_asana_find_task_operator(self, mock_tasks_api):
         """
@@ -84,6 +84,7 @@ def test_asana_find_task_operator(self, mock_tasks_api):
         find_task.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
         assert mock_tasks_api.return_value.get_tasks.called
 
+    @pytest.mark.db_test
     @patch("airflow.providers.asana.hooks.asana.TasksApi", autospec=True, return_value=asana_tasks_api_mock)
     def test_asana_update_task_operator(self, mock_tasks_api):
         """
@@ -99,6 +100,7 @@ def test_asana_update_task_operator(self, mock_tasks_api):
         update_task.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
         assert mock_tasks_api.return_value.update_task.called
 
+    @pytest.mark.db_test
     @patch("airflow.providers.asana.hooks.asana.TasksApi", autospec=True, return_value=asana_tasks_api_mock)
     def test_asana_delete_task_operator(self, mock_tasks_api):
         """

From 8d10db96d34e44fc379c2f37ad6d427667aee6ec Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Mon, 23 Jun 2025 17:18:38 +0200
Subject: [PATCH 100/381] Fix sorting in admin.json (#52101)

---
 airflow-core/src/airflow/ui/public/i18n/locales/en/admin.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/en/admin.json b/airflow-core/src/airflow/ui/public/i18n/locales/en/admin.json
index 8dfc0ec64c635..5012117276db9 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/en/admin.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/en/admin.json
@@ -40,10 +40,10 @@
       "standardFields": "Standard Fields"
     },
     "nothingFound": {
-        "title": "No connection found!",
         "description": "Connections defined via environment variables or secrets managers are not listed here.",
+        "documentationLink": "Learn more in the Airflow documentation.",
         "learnMore": "These are resolved at runtime and are not visible in the UI.",
-        "documentationLink": "Learn more in the Airflow documentation."
+        "title": "No connection found!"
     },
     "searchPlaceholder": "Search Connections",
     "test": "Test Connection",

From 86ee9cabb202798b6a5d3be48d2197a6e82fb1d8 Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Mon, 23 Jun 2025 20:48:50 +0530
Subject: [PATCH 101/381] Replacing older `np.NaN` with `np.nan` (#52100)

* Handling np.nan for salesforce provider

* other occurecnes
---
 providers/oracle/tests/unit/oracle/hooks/test_oracle.py       | 4 ++--
 .../src/airflow/providers/salesforce/hooks/salesforce.py      | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/providers/oracle/tests/unit/oracle/hooks/test_oracle.py b/providers/oracle/tests/unit/oracle/hooks/test_oracle.py
index 94d9364253aab..8608b5ebc18e1 100644
--- a/providers/oracle/tests/unit/oracle/hooks/test_oracle.py
+++ b/providers/oracle/tests/unit/oracle/hooks/test_oracle.py
@@ -343,7 +343,7 @@ def test_insert_rows_with_fields(self):
             (
                 "'basestr_with_quote",
                 None,
-                np.NAN,
+                np.nan,
                 np.datetime64("2019-01-24T01:02:03"),
                 datetime(2019, 1, 24),
                 1,
@@ -374,7 +374,7 @@ def test_insert_rows_without_fields(self):
             (
                 "'basestr_with_quote",
                 None,
-                np.NAN,
+                np.nan,
                 np.datetime64("2019-01-24T01:02:03"),
                 datetime(2019, 1, 24),
                 1,
diff --git a/providers/salesforce/src/airflow/providers/salesforce/hooks/salesforce.py b/providers/salesforce/src/airflow/providers/salesforce/hooks/salesforce.py
index d7105acdf41f4..4eb2822945bc5 100644
--- a/providers/salesforce/src/airflow/providers/salesforce/hooks/salesforce.py
+++ b/providers/salesforce/src/airflow/providers/salesforce/hooks/salesforce.py
@@ -268,7 +268,7 @@ def _to_timestamp(cls, column: pd.Series) -> pd.Series:
             try:
                 converted.append(value.timestamp())
             except (ValueError, AttributeError):
-                converted.append(np.NaN)
+                converted.append(np.nan)
 
         return pd.Series(converted, index=column.index)
 

From 2579bbf0c1bd93c2c700a40331659dcdec485222 Mon Sep 17 00:00:00 2001
From: "Guan Ming(Wesley) Chiu"
 <105915352+guan404ming@users.noreply.github.com>
Date: Mon, 23 Jun 2025 23:56:50 +0800
Subject: [PATCH 102/381] Add scrollTo buttons in TaskLogContent (#51943)

* Add scrollTo buttons in TaskLogContent

* Update visibility logic, keyboard shortcuts and position issues

* Add parsedLogs in useMemo dep list

* Update hotkey display with meta key
---
 .../ui/public/i18n/locales/en/common.json     |  7 ++
 .../ui/public/i18n/locales/zh-TW/common.json  |  9 +-
 .../TaskInstance/Logs/TaskLogContent.tsx      | 96 +++++++++++++++----
 3 files changed, 92 insertions(+), 20 deletions(-)

diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/en/common.json b/airflow-core/src/airflow/ui/public/i18n/locales/en/common.json
index 6cebff264bdd7..cb83efcedb9d1 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/en/common.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/en/common.json
@@ -128,6 +128,13 @@
     "manual": "Manual",
     "scheduled": "Scheduled"
   },
+  "scroll": {
+    "direction": {
+      "bottom": "bottom",
+      "top": "top"
+    },
+    "tooltip": "Press {{hotkey}} to scroll to {{direction}}"
+  },
   "seconds": "{{count}}s",
   "security": {
     "actions": "Actions",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/common.json b/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/common.json
index 1b94813361e1a..7df78a954dd47 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/common.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/common.json
@@ -128,6 +128,13 @@
     "manual": "手動觸發",
     "scheduled": "已排程"
   },
+  "scroll": {
+    "direction": {
+      "bottom": "最下方",
+      "top": "最上方"
+    },
+    "tooltip": "按 {{hotkey}} 捲動到{{direction}}"
+  },
   "seconds": "{{count}} 秒",
   "security": {
     "actions": "操作",
@@ -223,7 +230,7 @@
     "title": "選擇時區",
     "utc": "UTC"
   },
-    "toaster": {
+  "toaster": {
     "bulkDelete": {
       "error": "批次刪除 {{resourceName}} 請求失敗",
       "success": {
diff --git a/airflow-core/src/airflow/ui/src/pages/TaskInstance/Logs/TaskLogContent.tsx b/airflow-core/src/airflow/ui/src/pages/TaskInstance/Logs/TaskLogContent.tsx
index c6a1e5a793213..c70ed7bc7c7ec 100644
--- a/airflow-core/src/airflow/ui/src/pages/TaskInstance/Logs/TaskLogContent.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/TaskInstance/Logs/TaskLogContent.tsx
@@ -16,12 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { Box, Code, VStack, useToken } from "@chakra-ui/react";
+import { Box, Code, VStack, IconButton } from "@chakra-ui/react";
 import { useVirtualizer } from "@tanstack/react-virtual";
-import { useLayoutEffect, useRef } from "react";
+import { useLayoutEffect, useMemo, useRef } from "react";
+import { useHotkeys } from "react-hotkeys-hook";
+import { useTranslation } from "react-i18next";
+import { FiChevronDown, FiChevronUp } from "react-icons/fi";
 
 import { ErrorAlert } from "src/components/ErrorAlert";
-import { ProgressBar } from "src/components/ui";
+import { ProgressBar, Tooltip } from "src/components/ui";
+import { getMetaKey } from "src/utils";
 
 type Props = {
   readonly error: unknown;
@@ -31,8 +35,50 @@ type Props = {
   readonly wrap: boolean;
 };
 
+const ScrollToButton = ({
+  direction,
+  onClick,
+}: {
+  readonly direction: "bottom" | "top";
+  readonly onClick: () => void;
+}) => {
+  const { t: translate } = useTranslation("common");
+
+  return (
+    <Tooltip
+      closeDelay={100}
+      content={translate("scroll.tooltip", {
+        direction: translate(`scroll.direction.${direction}`),
+        hotkey: `${getMetaKey()}+${direction === "bottom" ? "↓" : "↑"}`,
+      })}
+      openDelay={100}
+    >
+      <IconButton
+        _ltr={{
+          left: "auto",
+          right: 4,
+        }}
+        _rtl={{
+          left: 4,
+          right: "auto",
+        }}
+        aria-label={translate(`scroll.direction.${direction}`)}
+        bg="bg.panel"
+        bottom={direction === "bottom" ? 4 : 14}
+        onClick={onClick}
+        position="absolute"
+        rounded="full"
+        size="xs"
+        variant="outline"
+      >
+        {direction === "bottom" ? <FiChevronDown /> : <FiChevronUp />}
+      </IconButton>
+    </Tooltip>
+  );
+};
+
 export const TaskLogContent = ({ error, isLoading, logError, parsedLogs, wrap }: Props) => {
-  const [bgLine] = useToken("colors", ["blue.emphasized"]);
+  const hash = location.hash.replace("#", "");
   const parentRef = useRef(null);
   const rowVirtualizer = useVirtualizer({
     count: parsedLogs.length,
@@ -41,26 +87,30 @@ export const TaskLogContent = ({ error, isLoading, logError, parsedLogs, wrap }:
     overscan: 10,
   });
 
-  useLayoutEffect(() => {
-    if (location.hash) {
-      const hash = location.hash.replace("#", "");
+  const showScrollButtons = useMemo(() => {
+    const contentHeight = rowVirtualizer.getTotalSize();
+    const containerHeight = rowVirtualizer.scrollElement?.clientHeight ?? 0;
 
-      setTimeout(() => {
-        const element = document.querySelector<HTMLElement>(`[id='${hash}']`);
+    return parsedLogs.length > 0 && contentHeight > containerHeight;
+  }, [rowVirtualizer, parsedLogs]);
 
-        if (element !== null) {
-          element.style.background = bgLine as string;
-        }
-        element?.scrollIntoView({
-          behavior: "smooth",
-          block: "center",
-        });
-      }, 100);
+  useLayoutEffect(() => {
+    if (location.hash && !isLoading) {
+      rowVirtualizer.scrollToIndex(Math.min(Number(hash) + 5, parsedLogs.length - 1));
     }
-  }, [isLoading, bgLine]);
+  }, [isLoading, rowVirtualizer, hash, parsedLogs]);
+
+  const handleScrollTo = (to: "bottom" | "top") => {
+    if (parsedLogs.length > 0) {
+      rowVirtualizer.scrollToIndex(to === "bottom" ? parsedLogs.length - 1 : 0);
+    }
+  };
+
+  useHotkeys("mod+ArrowDown", () => handleScrollTo("bottom"), { enabled: !isLoading });
+  useHotkeys("mod+ArrowUp", () => handleScrollTo("top"), { enabled: !isLoading });
 
   return (
-    <Box display="flex" flexDirection="column" flexGrow={1} h="100%" minHeight={0}>
+    <Box display="flex" flexDirection="column" flexGrow={1} h="100%" minHeight={0} position="relative">
       <ErrorAlert error={error ?? logError} />
       <ProgressBar size="xs" visibility={isLoading ? "visible" : "hidden"} />
       <Code
@@ -90,6 +140,7 @@ export const TaskLogContent = ({ error, isLoading, logError, parsedLogs, wrap }:
                 left: "auto",
                 right: 0,
               }}
+              bgColor={virtualRow.index === Number(hash) ? "blue.emphasized" : "transparent"}
               data-index={virtualRow.index}
               data-testid={`virtualized-item-${virtualRow.index}`}
               key={virtualRow.key}
@@ -104,6 +155,13 @@ export const TaskLogContent = ({ error, isLoading, logError, parsedLogs, wrap }:
           ))}
         </VStack>
       </Code>
+
+      {showScrollButtons ? (
+        <>
+          <ScrollToButton direction="top" onClick={() => handleScrollTo("top")} />
+          <ScrollToButton direction="bottom" onClick={() => handleScrollTo("bottom")} />
+        </>
+      ) : undefined}
     </Box>
   );
 };

From 61ae6603f5d6b8a6787bb061cecbfef101fbfe94 Mon Sep 17 00:00:00 2001
From: "Zhen-Lun (Kevin) Hong" <zhenlun.hong01@gmail.com>
Date: Mon, 23 Jun 2025 23:57:14 +0800
Subject: [PATCH 103/381] Remove pytest db markers from apache hive provider
 (#52097)

---
 .../unit/apache/hive/sensors/test_named_hive_partition.py      | 3 +--
 .../hive/tests/unit/apache/hive/transfers/test_s3_to_hive.py   | 3 ++-
 .../tests/unit/apache/hive/transfers/test_vertica_to_hive.py   | 3 +--
 3 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/providers/apache/hive/tests/unit/apache/hive/sensors/test_named_hive_partition.py b/providers/apache/hive/tests/unit/apache/hive/sensors/test_named_hive_partition.py
index a67013fa10edb..2a1a66df04cec 100644
--- a/providers/apache/hive/tests/unit/apache/hive/sensors/test_named_hive_partition.py
+++ b/providers/apache/hive/tests/unit/apache/hive/sensors/test_named_hive_partition.py
@@ -34,9 +34,8 @@
 DEFAULT_DATE_ISO = DEFAULT_DATE.isoformat()
 DEFAULT_DATE_DS = DEFAULT_DATE_ISO[:10]
 
-pytestmark = pytest.mark.db_test
-
 
+@pytest.mark.db_test
 class TestNamedHivePartitionSensor:
     def setup_method(self):
         args = {"owner": "airflow", "start_date": DEFAULT_DATE}
diff --git a/providers/apache/hive/tests/unit/apache/hive/transfers/test_s3_to_hive.py b/providers/apache/hive/tests/unit/apache/hive/transfers/test_s3_to_hive.py
index 5ec2f02fca411..174b5096ac66d 100644
--- a/providers/apache/hive/tests/unit/apache/hive/transfers/test_s3_to_hive.py
+++ b/providers/apache/hive/tests/unit/apache/hive/transfers/test_s3_to_hive.py
@@ -39,7 +39,6 @@
 logger = logging.getLogger(__name__)
 
 
-@pytest.mark.db_test
 class TestS3ToHiveTransfer:
     @pytest.fixture(autouse=True)
     def setup_attrs(self):
@@ -196,6 +195,7 @@ def test__delete_top_row_and_compress(self):
         fn_bz2 = self._get_fn(".bz2", False)
         assert self._check_file_equality(bz2_txt_nh, fn_bz2, ".bz2"), "bz2 Compressed file not as expected"
 
+    @pytest.mark.db_test
     @mock.patch("airflow.providers.apache.hive.transfers.s3_to_hive.HiveCliHook")
     @moto.mock_aws
     def test_execute(self, mock_hiveclihook):
@@ -229,6 +229,7 @@ def test_execute(self, mock_hiveclihook):
             s32hive = S3ToHiveOperator(**self.kwargs)
             s32hive.execute(None)
 
+    @pytest.mark.db_test
     @mock.patch("airflow.providers.apache.hive.transfers.s3_to_hive.HiveCliHook")
     @moto.mock_aws
     def test_execute_with_select_expression(self, mock_hiveclihook):
diff --git a/providers/apache/hive/tests/unit/apache/hive/transfers/test_vertica_to_hive.py b/providers/apache/hive/tests/unit/apache/hive/transfers/test_vertica_to_hive.py
index 9a368db2f7a56..9af3a9a87590e 100644
--- a/providers/apache/hive/tests/unit/apache/hive/transfers/test_vertica_to_hive.py
+++ b/providers/apache/hive/tests/unit/apache/hive/transfers/test_vertica_to_hive.py
@@ -25,8 +25,6 @@
 from airflow.models.dag import DAG
 from airflow.providers.apache.hive.transfers.vertica_to_hive import VerticaToHiveOperator
 
-pytestmark = pytest.mark.db_test
-
 
 def mock_get_conn():
     commit_mock = mock.MagicMock()
@@ -48,6 +46,7 @@ def setup_method(self):
         args = {"owner": "airflow", "start_date": datetime.datetime(2017, 1, 1)}
         self.dag = DAG("test_dag_id", schedule=None, default_args=args)
 
+    @pytest.mark.db_test
     @mock.patch(
         "airflow.providers.apache.hive.transfers.vertica_to_hive.VerticaHook.get_conn",
         side_effect=mock_get_conn,

From 2e909262193fe069a348644e8a623f3eb8cdf758 Mon Sep 17 00:00:00 2001
From: "Zhen-Lun (Kevin) Hong" <zhenlun.hong01@gmail.com>
Date: Mon, 23 Jun 2025 23:58:50 +0800
Subject: [PATCH 104/381] Remove pytest db marker apache kafka (#52098)

* Remove pytest db markers from apache kafka provider

* Update pre-commit
---
 .pre-commit-config.yaml                                        | 1 +
 .../apache/kafka/tests/unit/apache/kafka/hooks/test_client.py  | 2 --
 .../apache/kafka/tests/unit/apache/kafka/hooks/test_consume.py | 2 --
 .../apache/kafka/tests/unit/apache/kafka/hooks/test_produce.py | 3 ---
 .../kafka/tests/unit/apache/kafka/operators/test_consume.py    | 3 ---
 .../kafka/tests/unit/apache/kafka/operators/test_produce.py    | 3 ---
 .../apache/kafka/tests/unit/apache/kafka/sensors/test_kafka.py | 3 ---
 .../tests/unit/apache/kafka/triggers/test_await_message.py     | 2 --
 .../kafka/tests/unit/apache/kafka/triggers/test_msg_queue.py   | 2 --
 9 files changed, 1 insertion(+), 20 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 19d84650118e0..213494c1390c6 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -593,6 +593,7 @@ repos:
             ^providers/apache/beam/.*\.py$|
             ^providers/apache/flink/.*\.py$|
             ^providers/apache/iceberg/.*\.py$|
+            ^providers/apache/kafka/.*\.py$|
             ^providers/cloudant/.*\.py$|
             ^providers/cohere/.*\.py$|
             ^providers/common/compat/.*\.py$|
diff --git a/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_client.py b/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_client.py
index 568032b495798..d56bc17b20707 100644
--- a/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_client.py
+++ b/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_client.py
@@ -27,8 +27,6 @@
 from airflow.models import Connection
 from airflow.providers.apache.kafka.hooks.client import KafkaAdminClientHook
 
-pytestmark = pytest.mark.db_test
-
 log = logging.getLogger(__name__)
 
 
diff --git a/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_consume.py b/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_consume.py
index cb0b9d0846c50..0bad37aeac32c 100644
--- a/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_consume.py
+++ b/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_consume.py
@@ -27,8 +27,6 @@
 # Import Hook
 from airflow.providers.apache.kafka.hooks.consume import KafkaConsumerHook
 
-pytestmark = pytest.mark.db_test
-
 
 class TestConsumerHook:
     """
diff --git a/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_produce.py b/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_produce.py
index 6e5074bddb1ee..7b48026a47613 100644
--- a/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_produce.py
+++ b/providers/apache/kafka/tests/unit/apache/kafka/hooks/test_produce.py
@@ -26,9 +26,6 @@
 from airflow.models import Connection
 from airflow.providers.apache.kafka.hooks.produce import KafkaProducerHook
 
-pytestmark = pytest.mark.db_test
-
-
 log = logging.getLogger(__name__)
 
 
diff --git a/providers/apache/kafka/tests/unit/apache/kafka/operators/test_consume.py b/providers/apache/kafka/tests/unit/apache/kafka/operators/test_consume.py
index 35221ac38065a..facd0be92c976 100644
--- a/providers/apache/kafka/tests/unit/apache/kafka/operators/test_consume.py
+++ b/providers/apache/kafka/tests/unit/apache/kafka/operators/test_consume.py
@@ -28,9 +28,6 @@
 # Import Operator
 from airflow.providers.apache.kafka.operators.consume import ConsumeFromTopicOperator
 
-pytestmark = pytest.mark.db_test
-
-
 log = logging.getLogger(__name__)
 
 
diff --git a/providers/apache/kafka/tests/unit/apache/kafka/operators/test_produce.py b/providers/apache/kafka/tests/unit/apache/kafka/operators/test_produce.py
index 94017ea962abb..92f408408aa58 100644
--- a/providers/apache/kafka/tests/unit/apache/kafka/operators/test_produce.py
+++ b/providers/apache/kafka/tests/unit/apache/kafka/operators/test_produce.py
@@ -25,9 +25,6 @@
 from airflow.models import Connection
 from airflow.providers.apache.kafka.operators.produce import ProduceToTopicOperator
 
-pytestmark = pytest.mark.db_test
-
-
 log = logging.getLogger(__name__)
 
 
diff --git a/providers/apache/kafka/tests/unit/apache/kafka/sensors/test_kafka.py b/providers/apache/kafka/tests/unit/apache/kafka/sensors/test_kafka.py
index a4cc68d512e57..817b8bdb2fe4d 100644
--- a/providers/apache/kafka/tests/unit/apache/kafka/sensors/test_kafka.py
+++ b/providers/apache/kafka/tests/unit/apache/kafka/sensors/test_kafka.py
@@ -26,9 +26,6 @@
 from airflow.models import Connection
 from airflow.providers.apache.kafka.sensors.kafka import AwaitMessageSensor, AwaitMessageTriggerFunctionSensor
 
-pytestmark = pytest.mark.db_test
-
-
 log = logging.getLogger(__name__)
 
 
diff --git a/providers/apache/kafka/tests/unit/apache/kafka/triggers/test_await_message.py b/providers/apache/kafka/tests/unit/apache/kafka/triggers/test_await_message.py
index 194c772a80213..cd9380e530893 100644
--- a/providers/apache/kafka/tests/unit/apache/kafka/triggers/test_await_message.py
+++ b/providers/apache/kafka/tests/unit/apache/kafka/triggers/test_await_message.py
@@ -27,8 +27,6 @@
 
 from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS, get_base_airflow_version_tuple
 
-pytestmark = pytest.mark.db_test
-
 
 def apply_function_false(message):
     return False
diff --git a/providers/apache/kafka/tests/unit/apache/kafka/triggers/test_msg_queue.py b/providers/apache/kafka/tests/unit/apache/kafka/triggers/test_msg_queue.py
index 7e960ca1599e3..8b3ae12344630 100644
--- a/providers/apache/kafka/tests/unit/apache/kafka/triggers/test_msg_queue.py
+++ b/providers/apache/kafka/tests/unit/apache/kafka/triggers/test_msg_queue.py
@@ -30,8 +30,6 @@
     from airflow.providers.apache.kafka.triggers.msg_queue import KafkaMessageQueueTrigger
     from airflow.providers.common.messaging.triggers.msg_queue import MessageQueueTrigger
 
-pytestmark = pytest.mark.db_test
-
 
 def apply_function_false(message):
     return False

From c5e97736f3eed6d9ba51fbbf522ecf45289b17f1 Mon Sep 17 00:00:00 2001
From: "Zhen-Lun (Kevin) Hong" <zhenlun.hong01@gmail.com>
Date: Mon, 23 Jun 2025 23:59:46 +0800
Subject: [PATCH 105/381] Remove pytest db markers from apache livy provider
 (#52099)

---
 .../apache/livy/tests/unit/apache/livy/hooks/test_livy.py      | 2 --
 .../apache/livy/tests/unit/apache/livy/operators/test_livy.py  | 3 ---
 .../apache/livy/tests/unit/apache/livy/sensors/test_livy.py    | 3 ---
 3 files changed, 8 deletions(-)

diff --git a/providers/apache/livy/tests/unit/apache/livy/hooks/test_livy.py b/providers/apache/livy/tests/unit/apache/livy/hooks/test_livy.py
index c03614b2fa5c1..ab60c70f4e838 100644
--- a/providers/apache/livy/tests/unit/apache/livy/hooks/test_livy.py
+++ b/providers/apache/livy/tests/unit/apache/livy/hooks/test_livy.py
@@ -91,7 +91,6 @@ def setup_connections(self, create_connection_without_db):
             )
         )
 
-    @pytest.mark.db_test
     @pytest.mark.parametrize(
         "conn_id, expected",
         [
@@ -752,7 +751,6 @@ def setup_livy_conn(self, create_connection_without_db):
         create_connection_without_db(Connection(conn_id="missing_host", conn_type="http", port=1234))
         create_connection_without_db(Connection(conn_id="invalid_uri", uri="http://invalid_uri:4321"))
 
-    @pytest.mark.db_test
     def test_build_get_hook(self, setup_livy_conn):
         connection_url_mapping = {
             # id, expected
diff --git a/providers/apache/livy/tests/unit/apache/livy/operators/test_livy.py b/providers/apache/livy/tests/unit/apache/livy/operators/test_livy.py
index f808210fbd547..2987796dcd362 100644
--- a/providers/apache/livy/tests/unit/apache/livy/operators/test_livy.py
+++ b/providers/apache/livy/tests/unit/apache/livy/operators/test_livy.py
@@ -28,9 +28,6 @@
 from airflow.providers.apache.livy.operators.livy import LivyOperator
 from airflow.utils import timezone
 
-pytestmark = pytest.mark.db_test
-
-
 DEFAULT_DATE = timezone.datetime(2017, 1, 1)
 BATCH_ID = 100
 APP_ID = "application_1433865536131_34483"
diff --git a/providers/apache/livy/tests/unit/apache/livy/sensors/test_livy.py b/providers/apache/livy/tests/unit/apache/livy/sensors/test_livy.py
index 5b785fe3bfac4..2bc44b35750fa 100644
--- a/providers/apache/livy/tests/unit/apache/livy/sensors/test_livy.py
+++ b/providers/apache/livy/tests/unit/apache/livy/sensors/test_livy.py
@@ -26,9 +26,6 @@
 from airflow.providers.apache.livy.sensors.livy import LivySensor
 from airflow.utils import timezone
 
-pytestmark = pytest.mark.db_test
-
-
 DEFAULT_DATE = timezone.datetime(2017, 1, 1)
 
 

From 9d18ddd6ac1ad74ec567839dcae4801f27cd3570 Mon Sep 17 00:00:00 2001
From: "Zhen-Lun (Kevin) Hong" <zhenlun.hong01@gmail.com>
Date: Tue, 24 Jun 2025 00:17:01 +0800
Subject: [PATCH 106/381] Remove pytest db markers from common sql provider
 (#52105)

---
 .../sql/tests/unit/common/sql/operators/test_sql.py      | 9 ---------
 1 file changed, 9 deletions(-)

diff --git a/providers/common/sql/tests/unit/common/sql/operators/test_sql.py b/providers/common/sql/tests/unit/common/sql/operators/test_sql.py
index 7f56b34f70304..c576037630440 100644
--- a/providers/common/sql/tests/unit/common/sql/operators/test_sql.py
+++ b/providers/common/sql/tests/unit/common/sql/operators/test_sql.py
@@ -375,7 +375,6 @@ def test_generate_sql_query_with_partitions(self, monkeypatch):
             == self.correct_generate_sql_query_with_partition.lstrip()
         )
 
-    @pytest.mark.db_test
     def test_generate_sql_query_with_templated_partitions(self, monkeypatch):
         checks = self.short_valid_column_mapping["X"]
         operator = self._construct_operator(monkeypatch, self.short_valid_column_mapping, ())
@@ -407,7 +406,6 @@ def test_generate_sql_query_with_check_partition(self, monkeypatch):
         )
         del self.short_valid_column_mapping["X"]["distinct_check"]["partition_clause"]
 
-    @pytest.mark.db_test
     @mock.patch.object(SQLColumnCheckOperator, "get_db_hook")
     def test_generated_sql_respects_templated_partitions(self, mock_get_db_hook):
         records = [
@@ -433,7 +431,6 @@ def test_generated_sql_respects_templated_partitions(self, mock_get_db_hook):
             self._full_check_sql(self.correct_generate_sql_query_with_partition),
         )
 
-    @pytest.mark.db_test
     @mock.patch.object(SQLColumnCheckOperator, "get_db_hook")
     def test_generated_sql_respects_templated_table(self, mock_get_db_hook):
         records = [
@@ -620,7 +617,6 @@ def test_generate_sql_query_with_partitions(self, monkeypatch):
             operator._generate_sql_query().lstrip() == self.correct_generate_sql_query_with_partition.lstrip()
         )
 
-    @pytest.mark.db_test
     def test_generate_sql_query_with_templated_partitions(self, monkeypatch):
         operator = self._construct_operator(monkeypatch, self.checks, ())
         operator.partition_clause = "{{ params.col }} > 10"
@@ -629,7 +625,6 @@ def test_generate_sql_query_with_templated_partitions(self, monkeypatch):
             operator._generate_sql_query().lstrip() == self.correct_generate_sql_query_with_partition.lstrip()
         )
 
-    @pytest.mark.db_test
     def test_generate_sql_query_with_templated_table(self, monkeypatch):
         operator = self._construct_operator(monkeypatch, self.checks, ())
         operator.table = "{{ params.table }}"
@@ -811,7 +806,6 @@ def _construct_operator(self, sql, pass_value, tolerance=None):
             tolerance=tolerance,
         )
 
-    @pytest.mark.db_test
     def test_pass_value_template_string(self):
         pass_value_str = "2018-03-22"
         operator = self._construct_operator("select date from tab1;", "{{ ds }}")
@@ -821,7 +815,6 @@ def test_pass_value_template_string(self):
         assert operator.task_id == self.task_id
         assert operator.pass_value == pass_value_str
 
-    @pytest.mark.db_test
     def test_pass_value_template_string_float(self):
         pass_value_float = 4.0
         operator = self._construct_operator("select date from tab1;", pass_value_float)
@@ -1080,7 +1073,6 @@ def test_fail_if_query_returns_no_rows(self, mock_get_db_hook):
             operator.execute(context=MagicMock())
 
 
-@pytest.mark.db_test
 class TestSqlBranch:
     """
     Test for SQL Branch Operator
@@ -1120,7 +1112,6 @@ def branch_op(self):
             dag=self.dag,
         )
 
-    @pytest.mark.db_test
     def test_unsupported_conn_type(self):
         """Check if BranchSQLOperator throws an exception for unsupported connection type"""
         op = BranchSQLOperator(

From 20c487bdbffb533c8ab0fa4617bbdd27d0750a23 Mon Sep 17 00:00:00 2001
From: "Zhen-Lun (Kevin) Hong" <zhenlun.hong01@gmail.com>
Date: Tue, 24 Jun 2025 00:18:32 +0800
Subject: [PATCH 107/381] Remove pytest db markers from arangodb provider
 (#52102)

* Remove pytest db markers from arangodb provider

* Update pre-commit
---
 .pre-commit-config.yaml                                        | 1 +
 providers/arangodb/tests/unit/arangodb/hooks/test_arangodb.py  | 3 ---
 .../arangodb/tests/unit/arangodb/sensors/test_arangodb.py      | 2 --
 3 files changed, 1 insertion(+), 5 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 213494c1390c6..f59a13a3b4bdc 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -594,6 +594,7 @@ repos:
             ^providers/apache/flink/.*\.py$|
             ^providers/apache/iceberg/.*\.py$|
             ^providers/apache/kafka/.*\.py$|
+            ^providers/arangodb/.*\.py$|
             ^providers/cloudant/.*\.py$|
             ^providers/cohere/.*\.py$|
             ^providers/common/compat/.*\.py$|
diff --git a/providers/arangodb/tests/unit/arangodb/hooks/test_arangodb.py b/providers/arangodb/tests/unit/arangodb/hooks/test_arangodb.py
index 5773b498b5186..02fc22559ed32 100644
--- a/providers/arangodb/tests/unit/arangodb/hooks/test_arangodb.py
+++ b/providers/arangodb/tests/unit/arangodb/hooks/test_arangodb.py
@@ -24,9 +24,6 @@
 from airflow.models import Connection
 from airflow.providers.arangodb.hooks.arangodb import ArangoDBHook
 
-pytestmark = pytest.mark.db_test
-
-
 arangodb_client_mock = Mock(name="arangodb_client_for_test")
 
 
diff --git a/providers/arangodb/tests/unit/arangodb/sensors/test_arangodb.py b/providers/arangodb/tests/unit/arangodb/sensors/test_arangodb.py
index 4c47cfb6706c9..71e9707b3895e 100644
--- a/providers/arangodb/tests/unit/arangodb/sensors/test_arangodb.py
+++ b/providers/arangodb/tests/unit/arangodb/sensors/test_arangodb.py
@@ -27,8 +27,6 @@
 from airflow.utils import timezone
 
 # The tests do not create dag runs, so db isolation tests are skipped
-pytestmark = pytest.mark.db_test
-
 
 DEFAULT_DATE = timezone.datetime(2017, 1, 1)
 arangodb_hook_mock = Mock(name="arangodb_hook_for_test", **{"query.return_value.count.return_value": 1})

From 1b9765b821d592c8cb12f7ad30f85a5ebc5d6ff0 Mon Sep 17 00:00:00 2001
From: "Guan Ming(Wesley) Chiu"
 <105915352+guan404ming@users.noreply.github.com>
Date: Tue, 24 Jun 2025 00:28:38 +0800
Subject: [PATCH 108/381] Remove pytest db markers from microsoft winrm
 provider (#52104)

---
 .pre-commit-config.yaml                                         | 1 +
 .../winrm/tests/unit/microsoft/winrm/hooks/test_winrm.py        | 2 --
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index f59a13a3b4bdc..af6164f0c7fa9 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -613,6 +613,7 @@ repos:
             ^providers/jenkins/.*\.py$|
             ^providers/mongo/.*\.py$|
             ^providers/microsoft/psrp/.*\.py$|
+            ^providers/microsoft/winrm/.*\.py$|
             ^providers/neo4j/.*\.py$|
             ^providers/odbc/.*\.py$|
             ^providers/openai/.*\.py$|
diff --git a/providers/microsoft/winrm/tests/unit/microsoft/winrm/hooks/test_winrm.py b/providers/microsoft/winrm/tests/unit/microsoft/winrm/hooks/test_winrm.py
index f2140e3a188bf..b4ff975b7eb7c 100644
--- a/providers/microsoft/winrm/tests/unit/microsoft/winrm/hooks/test_winrm.py
+++ b/providers/microsoft/winrm/tests/unit/microsoft/winrm/hooks/test_winrm.py
@@ -25,8 +25,6 @@
 from airflow.models import Connection
 from airflow.providers.microsoft.winrm.hooks.winrm import WinRMHook
 
-pytestmark = pytest.mark.db_test
-
 
 class TestWinRMHook:
     def test_get_conn_missing_remote_host(self):

From 85b4512e81e7a50fa4fc6794e03f31ae6ede69ca Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Mon, 23 Jun 2025 18:33:23 +0200
Subject: [PATCH 109/381] Add octopin to automatically convert github actions
 to hash commits (#52089)

Apache Software Foundation security team is going to introduce the rule
that all actions should be pinned to hash commit (because security)
and recommends to use eclipse's octopin to automatically make sure
that your actions are pinned to commit rather than version (adding
version as a comment).

This PR integrates octopin and converts all our actions to use
hashes (even the standard ones that we considered as "safe" so far.
---
 .github/.pre-commit-config.yaml               | 28 +++++++++++
 .github/actions/install-pre-commit/action.yml |  8 ++-
 .../workflows/additional-ci-image-checks.yml  |  2 +-
 .../workflows/additional-prod-image-tests.yml |  4 +-
 .../workflows/airflow-distributions-tests.yml |  2 +-
 .github/workflows/automatic-backport.yml      |  2 +-
 .github/workflows/backport-cli.yml            |  2 +-
 .github/workflows/basic-tests.yml             | 26 +++++-----
 .github/workflows/ci-amd.yml                  | 49 +++++++++++++++----
 .github/workflows/ci-arm.yml                  | 10 ++--
 .github/workflows/ci-image-build.yml          |  2 +-
 .github/workflows/ci-image-checks.yml         | 20 ++++----
 .github/workflows/codeql-analysis.yml         |  8 +--
 .github/workflows/finalize-tests.yml          |  6 +--
 .github/workflows/generate-constraints.yml    |  4 +-
 .github/workflows/helm-tests.yml              |  6 +--
 .../workflows/integration-system-tests.yml    |  6 +--
 .github/workflows/k8s-tests.yml               |  4 +-
 .github/workflows/news-fragment.yml           |  2 +-
 .github/workflows/prod-image-build.yml        | 10 ++--
 .github/workflows/publish-docs-to-s3.yml      | 12 ++---
 .github/workflows/push-image-cache.yml        |  6 +--
 .github/workflows/recheck-old-bug-report.yml  |  2 +-
 .github/workflows/release_dockerhub_image.yml |  2 +-
 .../release_single_dockerhub_image.yml        |  8 +--
 .github/workflows/run-unit-tests.yml          |  2 +-
 .github/workflows/stale.yml                   |  2 +-
 .github/workflows/test-providers.yml          |  4 +-
 .pre-commit-config.yaml                       |  6 ++-
 Dockerfile                                    |  4 +-
 Dockerfile.ci                                 |  4 +-
 contributing-docs/08_static_code_checks.rst   | 18 +++++++
 dev/breeze/doc/ci/02_images.md                |  2 +-
 .../commands/release_management_commands.py   |  2 +-
 .../src/airflow_breeze/global_constants.py    |  2 +-
 pyproject.toml                                |  2 +-
 scripts/ci/install_breeze.sh                  |  2 +-
 .../update_installers_and_pre_commit.py       |  7 +--
 scripts/tools/setup_breeze                    |  2 +-
 yamllint-config.yml                           |  4 ++
 40 files changed, 195 insertions(+), 99 deletions(-)
 create mode 100644 .github/.pre-commit-config.yaml

diff --git a/.github/.pre-commit-config.yaml b/.github/.pre-commit-config.yaml
new file mode 100644
index 0000000000000..23f8d57648977
--- /dev/null
+++ b/.github/.pre-commit-config.yaml
@@ -0,0 +1,28 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+---
+default_stages: [manual]
+default_language_version:
+  python: python311
+minimum_pre_commit_version: '3.2.0'
+repos:
+  - repo: https://github.com/eclipse-csi/octopin
+    rev: 1700a65f632fd29f328232775ceb6c54554287ce
+    hooks:
+      - id: pin-versions
+        name: Pin versions of dependencies in CI workflows (manual)
+        stages: ['manual']
diff --git a/.github/actions/install-pre-commit/action.yml b/.github/actions/install-pre-commit/action.yml
index 5289389930c15..7cf34a02db913 100644
--- a/.github/actions/install-pre-commit/action.yml
+++ b/.github/actions/install-pre-commit/action.yml
@@ -24,13 +24,16 @@ inputs:
     default: "3.9"
   uv-version:
     description: 'uv version to use'
-    default: "0.7.8"  # Keep this comment to allow automatic replacement of uv version
+    default: "0.7.13"  # Keep this comment to allow automatic replacement of uv version
   pre-commit-version:
     description: 'pre-commit version to use'
     default: "4.2.0"  # Keep this comment to allow automatic replacement of pre-commit version
   pre-commit-uv-version:
     description: 'pre-commit-uv version to use'
     default: "4.1.4"  # Keep this comment to allow automatic replacement of pre-commit-uv version
+  skip-pre-commits:
+    description: "Skip some pre-commits from installation"
+    default: ""
 runs:
   using: "composite"
   steps:
@@ -40,6 +43,7 @@ runs:
         UV_VERSION: ${{inputs.uv-version}}
         PRE_COMMIT_VERSION: ${{inputs.pre-commit-version}}
         PRE_COMMIT_UV_VERSION: ${{inputs.pre-commit-uv-version}}
+        SKIP: ${{ inputs.skip-pre-commits }}
       run: |
         pip install uv==${UV_VERSION} || true
         uv tool install pre-commit==${PRE_COMMIT_VERSION} --with uv==${UV_VERSION} \
@@ -86,3 +90,5 @@ runs:
       shell: bash
       run: pre-commit install-hooks || (cat ~/.cache/pre-commit/pre-commit.log && exit 1)
       working-directory: ${{ github.workspace }}
+      env:
+        SKIP: ${{ inputs.skip-pre-commits }}
diff --git a/.github/workflows/additional-ci-image-checks.yml b/.github/workflows/additional-ci-image-checks.yml
index 9e7edaee0ee85..cfbc5030fa883 100644
--- a/.github/workflows/additional-ci-image-checks.yml
+++ b/.github/workflows/additional-ci-image-checks.yml
@@ -135,7 +135,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
diff --git a/.github/workflows/additional-prod-image-tests.yml b/.github/workflows/additional-prod-image-tests.yml
index a2e9deed6df5c..3a323115aa50d 100644
--- a/.github/workflows/additional-prod-image-tests.yml
+++ b/.github/workflows/additional-prod-image-tests.yml
@@ -107,7 +107,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           fetch-depth: 2
           persist-credentials: false
@@ -144,7 +144,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           fetch-depth: 2
           persist-credentials: false
diff --git a/.github/workflows/airflow-distributions-tests.yml b/.github/workflows/airflow-distributions-tests.yml
index 8399839afd1d5..14fefbf294802 100644
--- a/.github/workflows/airflow-distributions-tests.yml
+++ b/.github/workflows/airflow-distributions-tests.yml
@@ -84,7 +84,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ matrix.python-version }}"
diff --git a/.github/workflows/automatic-backport.yml b/.github/workflows/automatic-backport.yml
index 4c72401a5d317..56e430602b4fc 100644
--- a/.github/workflows/automatic-backport.yml
+++ b/.github/workflows/automatic-backport.yml
@@ -37,7 +37,7 @@ jobs:
 
       - name: Find PR information
         id: pr-info
-        uses: actions/github-script@v7
+        uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
         with:
diff --git a/.github/workflows/backport-cli.yml b/.github/workflows/backport-cli.yml
index 673607027496d..3f5ce494f3f31 100644
--- a/.github/workflows/backport-cli.yml
+++ b/.github/workflows/backport-cli.yml
@@ -53,7 +53,7 @@ jobs:
     steps:
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
         id: checkout-for-backport
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: true
           fetch-depth: 0
diff --git a/.github/workflows/basic-tests.yml b/.github/workflows/basic-tests.yml
index 52983ad65d559..65286fb73d2f2 100644
--- a/.github/workflows/basic-tests.yml
+++ b/.github/workflows/basic-tests.yml
@@ -71,7 +71,7 @@ jobs:
       - name: "Cleanup repo"
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
-      - uses: actions/checkout@v4
+      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           # Need to fetch all history for selective checks tests
           fetch-depth: 0
@@ -94,18 +94,18 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
         run: ./scripts/ci/prepare_and_cleanup_runner.sh
       - name: Setup pnpm
-        uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2  # v4.0.0
+        uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0
         with:
           version: 9
           run_install: false
       - name: "Setup node"
-        uses: actions/setup-node@v4
+        uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
         with:
           node-version: 21
           cache: 'pnpm'
@@ -158,12 +158,13 @@ jobs:
     runs-on: ${{ fromJSON(inputs.runners) }}
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
+      SKIP: ${{ inputs.skip-pre-commits }}
     steps:
       - name: "Cleanup repo"
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Install Breeze"
@@ -176,6 +177,7 @@ jobs:
         id: pre-commit
         with:
           python-version: ${{steps.breeze.outputs.host-python-version}}
+          skip-pre-commits: ${{ inputs.skip-pre-commits }}
 
   # Those checks are run if no image needs to be built for checks. This is for simple changes that
   # Do not touch any of the python code or any of the important files that might require building
@@ -191,7 +193,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -205,9 +207,10 @@ jobs:
         uses: ./.github/actions/install-pre-commit
         id: pre-commit
         with:
-          python-version: ${{steps.breeze.outputs.host-python-version}}
+          python-version: ${{ steps.breeze.outputs.host-python-version }}
+          skip-pre-commits: ${{ inputs.skip-pre-commits }}
       - name: Fetch incoming commit ${{ github.sha }} with its parent
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           ref: ${{ github.sha }}
           fetch-depth: 2
@@ -228,7 +231,7 @@ jobs:
     runs-on: ["windows-latest"]
     steps:
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           fetch-depth: 2
           persist-credentials: false
@@ -246,7 +249,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -261,6 +264,7 @@ jobs:
         id: pre-commit
         with:
           python-version: ${{steps.breeze.outputs.host-python-version}}
+          skip-pre-commits: ${{ inputs.skip-pre-commits }}
       - name: "Autoupdate all pre-commits"
         run: pre-commit autoupdate
       - name: "Run automated upgrade for black"
@@ -319,7 +323,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
diff --git a/.github/workflows/ci-amd.yml b/.github/workflows/ci-amd.yml
index 8a8e654127ca9..86a921e0d017e 100644
--- a/.github/workflows/ci-amd.yml
+++ b/.github/workflows/ci-amd.yml
@@ -135,13 +135,13 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
         run: ./scripts/ci/prepare_and_cleanup_runner.sh
       - name: Fetch incoming commit ${{ github.sha }} with its parent
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           ref: ${{ github.sha }}
           fetch-depth: 2
@@ -169,6 +169,37 @@ jobs:
           PR_LABELS: ${{ steps.source-run-info.outputs.pr-labels }}
           GITHUB_CONTEXT: ${{ toJson(github) }}
 
+  run-pin-versions-pre-commit:
+    name: "Run pin-versions pre-commit"
+    needs: [build-info]
+    runs-on: ${{ fromJSON(needs.build-info.outputs.amd-runners) }}
+    steps:
+      - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        with:
+          persist-credentials: false
+      - name: "Install Python 3.11 as 3.11+ is needed by pin-versions pre-commit"
+        uses: actions/setup-python@7f4fc3e22c37d6ff65e88745f38bd3157c663f7c # v4.9.1
+        with:
+          python-version: 3.11
+          cache: "pip"
+      - name: Install pre-commit, uv, and pre-commit-uv
+        shell: bash
+        env:
+          UV_VERSION: "0.7.13"  # Keep this comment to allow automatic replacement of uv version
+          PRE_COMMIT_VERSION: "4.2.0"  # Keep this comment to allow automatic replacement of pre-commit version
+          PRE_COMMIT_UV_VERSION: "4.1.4"  # Keep this comment to allow automatic replacement of pre-commit-uv version
+        run: |
+          pip install uv==${UV_VERSION} || true
+          uv tool install pre-commit==${PRE_COMMIT_VERSION} --with uv==${UV_VERSION} \
+          --with pre-commit-uv==${PRE_COMMIT_UV_VERSION}
+      - name: "Run pin-versions pre-commit"
+        run: >
+          pre-commit run -c .github/.pre-commit-config.yaml --all-files --verbose --hook-stage manual
+          pin-versions
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
   basic-tests:
     name: "Basic tests"
     needs: [build-info]
@@ -777,13 +808,13 @@ jobs:
       VERBOSE: "true"
     steps:
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
 
       # keep this in sync with go.mod in go-sdk/
       - name: Setup Go
-        uses: actions/setup-go@v5
+        uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
         with:
           go-version: 1.24
           cache-dependency-path: go-sdk/go.sum
@@ -876,7 +907,7 @@ jobs:
     steps:
       - name: Notify Slack
         id: slack
-        uses: slackapi/slack-github-action@485a9d42d3a73031f12ec201c457e2162c45d02d  # v2.0.0
+        uses: slackapi/slack-github-action@485a9d42d3a73031f12ec201c457e2162c45d02d # v2.0.0
         with:
           method: chat.postMessage
           token: ${{ env.SLACK_BOT_TOKEN }}
@@ -901,7 +932,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -910,12 +941,12 @@ jobs:
         shell: bash
         run: ./scripts/tools/free_up_disk_space.sh
       - name: "Download all test warning artifacts from the current build"
-        uses: actions/download-artifact@v4
+        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
         with:
           path: ./artifacts
           pattern: test-warnings-*
       - name: "Setup python"
-        uses: actions/setup-python@v5
+        uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
         with:
           python-version: ${{ inputs.default-python-version }}
       - name: "Summarize all warnings"
@@ -924,7 +955,7 @@ jobs:
             --pattern "**/warnings-*.txt" \
             --output ./files
       - name: "Upload artifact for summarized warnings"
-        uses: actions/upload-artifact@v4
+        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
         with:
           name: test-summarized-amd-runner-warnings
           path: ./files/warn-summary-*.txt
diff --git a/.github/workflows/ci-arm.yml b/.github/workflows/ci-arm.yml
index 0500106b94792..1333694f3bb80 100644
--- a/.github/workflows/ci-arm.yml
+++ b/.github/workflows/ci-arm.yml
@@ -128,13 +128,13 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
         run: ./scripts/ci/prepare_and_cleanup_runner.sh
       - name: Fetch incoming commit ${{ github.sha }} with its parent
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           ref: ${{ github.sha }}
           fetch-depth: 2
@@ -527,13 +527,13 @@ jobs:
       VERBOSE: "true"
     steps:
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
 
       # keep this in sync with go.mod in go-sdk/
       - name: Setup Go
-        uses: actions/setup-go@v5
+        uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
         with:
           go-version: 1.24
           cache-dependency-path: go-sdk/go.sum
@@ -594,7 +594,7 @@ jobs:
     steps:
       - name: Notify Slack
         id: slack
-        uses: slackapi/slack-github-action@485a9d42d3a73031f12ec201c457e2162c45d02d  # v2.0.0
+        uses: slackapi/slack-github-action@485a9d42d3a73031f12ec201c457e2162c45d02d # v2.0.0
         with:
           method: chat.postMessage
           token: ${{ env.SLACK_BOT_TOKEN }}
diff --git a/.github/workflows/ci-image-build.yml b/.github/workflows/ci-image-build.yml
index b52fdb906fa2e..c589b7728d668 100644
--- a/.github/workflows/ci-image-build.yml
+++ b/.github/workflows/ci-image-build.yml
@@ -117,7 +117,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout target branch"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
diff --git a/.github/workflows/ci-image-checks.yml b/.github/workflows/ci-image-checks.yml
index 2cc5f690df83f..1f0cc812ce9cf 100644
--- a/.github/workflows/ci-image-checks.yml
+++ b/.github/workflows/ci-image-checks.yml
@@ -127,7 +127,7 @@ jobs:
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
         if: inputs.canary-run == 'true'
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
         if: inputs.canary-run == 'true'
@@ -173,7 +173,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ inputs.default-python-version }}"
@@ -216,7 +216,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ inputs.default-python-version }}"
@@ -264,7 +264,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ inputs.default-python-version }}"
@@ -295,7 +295,7 @@ jobs:
         # to be responsible for updating it. https://github.com/actions/upload-artifact/issues/506
         if: steps.restore-docs-inventory-cache != 'true' && matrix.flag == '--docs-only'
       - name: "Upload build docs"
-        uses: actions/upload-artifact@v4
+        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
         with:
           name: airflow-docs
           path: './generated/_build'
@@ -327,7 +327,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ inputs.default-python-version }}"
@@ -337,7 +337,7 @@ jobs:
           python: ${{ inputs.default-python-version }}
           use-uv: ${{ inputs.use-uv }}
       - name: "Download docs prepared as artifacts"
-        uses: actions/download-artifact@v4
+        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
         with:
           name: airflow-docs
           path: './generated/_build'
@@ -373,7 +373,7 @@ jobs:
           sudo /tmp/aws/install --update
           rm -rf /tmp/aws/
       - name: Configure AWS credentials
-        uses: aws-actions/configure-aws-credentials@010d0da01d0b5a38af31e9c3470dbfdabdecca3a  # v4.0.1
+        uses: aws-actions/configure-aws-credentials@010d0da01d0b5a38af31e9c3470dbfdabdecca3a # v4.0.1
         with:
           aws-access-key-id: ${{ secrets.DOCS_AWS_ACCESS_KEY_ID }}
           aws-secret-access-key: ${{ secrets.DOCS_AWS_SECRET_ACCESS_KEY }}
@@ -402,12 +402,12 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           fetch-depth: 2
           persist-credentials: false
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           repository: "apache/airflow-client-python"
           fetch-depth: 1
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 1fcf81a84fd5b..59c555da56a27 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -47,17 +47,17 @@ jobs:
       security-events: write
     steps:
       - name: Checkout repository
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
 
       - name: Initialize CodeQL
-        uses: github/codeql-action/init@v3
+        uses: github/codeql-action/init@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
         with:
           languages: ${{ matrix.language }}
 
       - name: Autobuild
-        uses: github/codeql-action/autobuild@v3
+        uses: github/codeql-action/autobuild@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
 
       - name: Perform CodeQL Analysis
-        uses: github/codeql-action/analyze@v3
+        uses: github/codeql-action/analyze@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
diff --git a/.github/workflows/finalize-tests.yml b/.github/workflows/finalize-tests.yml
index 6afcbd0812219..d3e2f86435212 100644
--- a/.github/workflows/finalize-tests.yml
+++ b/.github/workflows/finalize-tests.yml
@@ -99,7 +99,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           # Needed to perform push action
           persist-credentials: false
@@ -109,14 +109,14 @@ jobs:
         id: constraints-branch
         run: ./scripts/ci/constraints/ci_branch_constraints.sh >> ${GITHUB_OUTPUT}
       - name: Checkout ${{ steps.constraints-branch.outputs.branch }}
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           path: "constraints"
           ref: ${{ steps.constraints-branch.outputs.branch }}
           persist-credentials: true
           fetch-depth: 0
       - name: "Download constraints from the constraints generated by build CI image"
-        uses: actions/download-artifact@v4
+        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
         with:
           name: constraints
           path: ./files
diff --git a/.github/workflows/generate-constraints.yml b/.github/workflows/generate-constraints.yml
index 35b31db98e575..70aa59ebf2f0c 100644
--- a/.github/workflows/generate-constraints.yml
+++ b/.github/workflows/generate-constraints.yml
@@ -64,7 +64,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -130,7 +130,7 @@ jobs:
             df -H
           done
       - name: "Upload constraint artifacts"
-        uses: actions/upload-artifact@v4
+        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
         with:
           name: constraints
           path: ./files/constraints-*/constraints-*.txt
diff --git a/.github/workflows/helm-tests.yml b/.github/workflows/helm-tests.yml
index 26bf28cce1beb..c704745e5cf32 100644
--- a/.github/workflows/helm-tests.yml
+++ b/.github/workflows/helm-tests.yml
@@ -68,7 +68,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ inputs.default-python-version }}"
@@ -93,7 +93,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -136,7 +136,7 @@ jobs:
           breeze release-management generate-issue-content-helm-chart --limit-pr-count 10
           --latest --verbose
       - name: "Upload Helm artifacts"
-        uses: actions/upload-artifact@v4
+        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
         with:
           name: Helm artifacts
           path: ./dist/airflow-*
diff --git a/.github/workflows/integration-system-tests.yml b/.github/workflows/integration-system-tests.yml
index bf75cc87f31a3..8649044650c90 100644
--- a/.github/workflows/integration-system-tests.yml
+++ b/.github/workflows/integration-system-tests.yml
@@ -97,7 +97,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ inputs.default-python-version }}"
@@ -146,7 +146,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ inputs.default-python-version }}"
@@ -190,7 +190,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ inputs.default-python-version }}"
diff --git a/.github/workflows/k8s-tests.yml b/.github/workflows/k8s-tests.yml
index 6ed0c79d187c5..57342fba4873d 100644
--- a/.github/workflows/k8s-tests.yml
+++ b/.github/workflows/k8s-tests.yml
@@ -80,7 +80,7 @@ jobs:
           echo "PYTHON_MAJOR_MINOR_VERSION=${KUBERNETES_COMBO}" | sed 's/-.*//' >> $GITHUB_ENV
           echo "KUBERNETES_VERSION=${KUBERNETES_COMBO}" | sed 's/=[^-]*-/=/'  >> $GITHUB_ENV
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       # env.PYTHON_MAJOR_MINOR_VERSION, env.KUBERNETES_VERSION are set in the previous
@@ -115,7 +115,7 @@ jobs:
       - name: "\
           Upload KinD logs ${{ matrix.executor }}-${{ matrix.kubernetes-combo }}-\
           ${{ matrix.use-standard-naming }}"
-        uses: actions/upload-artifact@v4
+        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
         with:
           name: "\
             kind-logs-${{ matrix.kubernetes-combo }}-${{ matrix.executor }}-\
diff --git a/.github/workflows/news-fragment.yml b/.github/workflows/news-fragment.yml
index f6f68d1288a35..0a2a996c6c513 100644
--- a/.github/workflows/news-fragment.yml
+++ b/.github/workflows/news-fragment.yml
@@ -30,7 +30,7 @@ jobs:
     if: "contains(github.event.pull_request.labels.*.name, 'airflow3.0:breaking')"
 
     steps:
-      - uses: actions/checkout@v4
+      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
           # `towncrier check` runs `git diff --name-only origin/main...`, which
diff --git a/.github/workflows/prod-image-build.yml b/.github/workflows/prod-image-build.yml
index c5cf5cd5cef96..6e5ae3561d20b 100644
--- a/.github/workflows/prod-image-build.yml
+++ b/.github/workflows/prod-image-build.yml
@@ -124,7 +124,7 @@ jobs:
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
         if: inputs.upload-package-artifact == 'true'
       - name: "Checkout target branch"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -171,7 +171,7 @@ jobs:
           breeze release-management prepare-airflow-ctl-distributions --distribution-format wheel
         if: inputs.upload-package-artifact == 'true'
       - name: "Upload prepared packages as artifacts"
-        uses: actions/upload-artifact@v4
+        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
         with:
           name: prod-packages
           path: ./dist
@@ -211,7 +211,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout target branch"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -224,14 +224,14 @@ jobs:
         shell: bash
         run: rm -fv ./dist/* ./docker-context-files/*
       - name: "Download packages prepared as artifacts"
-        uses: actions/download-artifact@v4
+        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
         with:
           name: prod-packages
           path: ./docker-context-files
       - name: "Show downloaded packages"
         run: ls -la ./docker-context-files
       - name: "Download constraints"
-        uses: actions/download-artifact@v4
+        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
         with:
           name: constraints
           path: ./docker-context-files
diff --git a/.github/workflows/publish-docs-to-s3.yml b/.github/workflows/publish-docs-to-s3.yml
index 22ba4b3e97af4..b9eb26ae86760 100644
--- a/.github/workflows/publish-docs-to-s3.yml
+++ b/.github/workflows/publish-docs-to-s3.yml
@@ -127,7 +127,7 @@ jobs:
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       # Check out the repo first to run cleanup - in sub-folder
       - name: "Checkout current version first to clean-up stuff"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
           path: current-version
@@ -138,7 +138,7 @@ jobs:
         # This will take longer as we need to rebuild CI image and it will not use cache
         # but it will build the CI image from the version of Airflow that is used to check out things
       - name: "Checkout ${{ inputs.ref }} "
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
           ref: ${{ inputs.ref }}
@@ -167,7 +167,7 @@ jobs:
         run: >
           breeze release-management publish-docs --override-versioned --run-in-parallel ${INCLUDE_DOCS}
       - name: "Upload build docs"
-        uses: actions/upload-artifact@v4
+        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
         with:
           name: airflow-docs
           path: /mnt/airflow-site
@@ -197,7 +197,7 @@ jobs:
         # This will take longer as we need to rebuild CI image and it will not use cache
         # but it will build the CI image from the version of Airflow that is used to check out things
       - name: "Checkout ${{ inputs.ref }} "
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -207,7 +207,7 @@ jobs:
         with:
           use-uv: ${{ inputs.use-uv }}
       - name: "Download docs prepared as artifacts"
-        uses: actions/download-artifact@v4
+        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
         with:
           name: airflow-docs
           path: /mnt/airflow-site
@@ -234,7 +234,7 @@ jobs:
           sudo /tmp/aws/install --update
           rm -rf /tmp/aws/
       - name: Configure AWS credentials
-        uses: aws-actions/configure-aws-credentials@010d0da01d0b5a38af31e9c3470dbfdabdecca3a  # v4.0.1
+        uses: aws-actions/configure-aws-credentials@010d0da01d0b5a38af31e9c3470dbfdabdecca3a # v4.0.1
         with:
           aws-access-key-id: ${{ secrets.DOCS_AWS_ACCESS_KEY_ID }}
           aws-secret-access-key: ${{ secrets.DOCS_AWS_SECRET_ACCESS_KEY }}
diff --git a/.github/workflows/push-image-cache.yml b/.github/workflows/push-image-cache.yml
index f2258c13b77a9..01bbbeb16b3fa 100644
--- a/.github/workflows/push-image-cache.yml
+++ b/.github/workflows/push-image-cache.yml
@@ -113,7 +113,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -184,7 +184,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -196,7 +196,7 @@ jobs:
       - name: "Cleanup dist and context file"
         run: rm -fv ./dist/* ./docker-context-files/*
       - name: "Download packages prepared as artifacts"
-        uses: actions/download-artifact@v4
+        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
         with:
           name: prod-packages
           path: ./docker-context-files
diff --git a/.github/workflows/recheck-old-bug-report.yml b/.github/workflows/recheck-old-bug-report.yml
index 217092b86f87e..61a2691c087fb 100644
--- a/.github/workflows/recheck-old-bug-report.yml
+++ b/.github/workflows/recheck-old-bug-report.yml
@@ -28,7 +28,7 @@ jobs:
   recheck-old-bug-report:
     runs-on: ["ubuntu-22.04"]
     steps:
-      - uses: actions/stale@v9
+      - uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # v9.1.0
         with:
           only-issue-labels: 'kind:bug'
           stale-issue-label: 'Stale Bug Report'
diff --git a/.github/workflows/release_dockerhub_image.yml b/.github/workflows/release_dockerhub_image.yml
index fe1ce300fbf4f..45c477d9eff54 100644
--- a/.github/workflows/release_dockerhub_image.yml
+++ b/.github/workflows/release_dockerhub_image.yml
@@ -83,7 +83,7 @@ jobs:
           docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
 
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
diff --git a/.github/workflows/release_single_dockerhub_image.yml b/.github/workflows/release_single_dockerhub_image.yml
index 55a8c2cc00429..8ddbef95270f7 100644
--- a/.github/workflows/release_single_dockerhub_image.yml
+++ b/.github/workflows/release_single_dockerhub_image.yml
@@ -76,7 +76,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -148,7 +148,7 @@ jobs:
         shell: bash
         run: find ./dist -name '*.json'
       - name: "Upload metadata artifact ${{ env.ARTIFACT_NAME }}"
-        uses: actions/upload-artifact@v4
+        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
         with:
           name: ${{ env.ARTIFACT_NAME }}
           path: ./dist/metadata-*
@@ -174,7 +174,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -197,7 +197,7 @@ jobs:
           ACTOR: ${{ github.actor }}
         run: echo "${GITHUB_TOKEN}" | docker login ghcr.io -u ${ACTOR} --password-stdin
       - name: "Download metadata artifacts"
-        uses: actions/download-artifact@v4
+        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
         with:
           path: ./dist
           pattern: metadata-${{ inputs.pythonVersion }}-*
diff --git a/.github/workflows/run-unit-tests.yml b/.github/workflows/run-unit-tests.yml
index 4b99ac6031137..da2b40eaa945d 100644
--- a/.github/workflows/run-unit-tests.yml
+++ b/.github/workflows/run-unit-tests.yml
@@ -167,7 +167,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ matrix.python-version }}"
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
index 2e03e9f33b120..49987b11feef6 100644
--- a/.github/workflows/stale.yml
+++ b/.github/workflows/stale.yml
@@ -29,7 +29,7 @@ jobs:
   stale:
     runs-on: ["ubuntu-22.04"]
     steps:
-      - uses: actions/stale@v9
+      - uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # v9.1.0
         with:
           stale-pr-message: >
             This pull request has been automatically marked as stale because it has not had
diff --git a/.github/workflows/test-providers.yml b/.github/workflows/test-providers.yml
index 411b18daaa7b4..88a54be3c9d6b 100644
--- a/.github/workflows/test-providers.yml
+++ b/.github/workflows/test-providers.yml
@@ -89,7 +89,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ inputs.default-python-version }}"
@@ -187,7 +187,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ matrix.compat.python-version }}"
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index af6164f0c7fa9..73265015836b6 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -206,7 +206,11 @@ repos:
         entry: ./scripts/ci/pre_commit/update_installers_and_pre_commit.py
         stages: ['manual']
         language: python
-        files: ^\.pre-commit-config\.yaml$|^scripts/ci/pre_commit/update_installers_and_pre_commit\.py$
+        files: >
+          (?x)
+          ^\.pre-commit-config\.yaml$|
+          ^\.github/\.pre-commit-config\.yaml$|
+          ^scripts/ci/pre_commit/update_installers_and_pre_commit\.py$
         pass_filenames: false
         require_serial: true
         additional_dependencies: ['pyyaml>=6.0.2', 'rich>=12.4.4', 'requests>=2.31.0']
diff --git a/Dockerfile b/Dockerfile
index a8522ea0139c7..32f8cc97dfa83 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -56,8 +56,8 @@ ARG PYTHON_BASE_IMAGE="python:3.9-slim-bookworm"
 # Also use `force pip` label on your PR to swap all places we use `uv` to `pip`
 ARG AIRFLOW_PIP_VERSION=25.1.1
 # ARG AIRFLOW_PIP_VERSION="git+https://github.com/pypa/pip.git@main"
-ARG AIRFLOW_SETUPTOOLS_VERSION=80.8.0
-ARG AIRFLOW_UV_VERSION=0.7.8
+ARG AIRFLOW_SETUPTOOLS_VERSION=80.9.0
+ARG AIRFLOW_UV_VERSION=0.7.13
 ARG AIRFLOW_USE_UV="false"
 ARG UV_HTTP_TIMEOUT="300"
 ARG AIRFLOW_IMAGE_REPOSITORY="https://github.com/apache/airflow"
diff --git a/Dockerfile.ci b/Dockerfile.ci
index 8474f24855f73..65907e3e4cee8 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -1388,8 +1388,8 @@ COPY --from=scripts common.sh install_packaging_tools.sh install_additional_depe
 # Also use `force pip` label on your PR to swap all places we use `uv` to `pip`
 ARG AIRFLOW_PIP_VERSION=25.1.1
 # ARG AIRFLOW_PIP_VERSION="git+https://github.com/pypa/pip.git@main"
-ARG AIRFLOW_SETUPTOOLS_VERSION=80.8.0
-ARG AIRFLOW_UV_VERSION=0.7.8
+ARG AIRFLOW_SETUPTOOLS_VERSION=80.9.0
+ARG AIRFLOW_UV_VERSION=0.7.13
 # TODO(potiuk): automate with upgrade check (possibly)
 ARG AIRFLOW_PRE_COMMIT_VERSION="4.2.0"
 ARG AIRFLOW_PRE_COMMIT_UV_VERSION="4.1.4"
diff --git a/contributing-docs/08_static_code_checks.rst b/contributing-docs/08_static_code_checks.rst
index 86c64c6781ed1..1ce799ad6f38e 100644
--- a/contributing-docs/08_static_code_checks.rst
+++ b/contributing-docs/08_static_code_checks.rst
@@ -533,6 +533,24 @@ there are some checks that are not run automatically and you need to run them ma
 checks are marked with ``manual`` in the ``Description`` column in the table below. You can run
 them manually by running ``pre-commit run --hook-stage manual <hook-id>``.
 
+Special pin-versions pre-commit
+-------------------------------
+
+There is a separate pre-commit ``pin-versions`` pre-commit which is used to pin versions of
+GitHub Actions in the CI workflows.
+
+This action requires ``GITHUB_TOKEN`` to be set, otherwise you might hit the rate limits with GitHub API, it
+is also configured in a separate ``.pre-commit-config.yaml`` file in the
+``.github`` directory as it requires Python 3.11 to run. It is not run automatically
+when you commit the code but in runs as a separate job in the CI. However, you can run it
+manually by running:
+
+.. code-block:: bash
+
+    export GITHUB_TOKEN=YOUR_GITHUB_TOKEN
+    pre-commit run -c .github/.pre-commit-config.yaml --all-files --hook-stage manual
+
+
 Mypy checks
 -----------
 
diff --git a/dev/breeze/doc/ci/02_images.md b/dev/breeze/doc/ci/02_images.md
index c651558fc18d8..51e20718ff201 100644
--- a/dev/breeze/doc/ci/02_images.md
+++ b/dev/breeze/doc/ci/02_images.md
@@ -443,7 +443,7 @@ can be used for CI images:
 | `ADDITIONAL_DEV_APT_DEPS`         |                            | Additional apt dev dependencies installed in the first part of the image                                          |
 | `ADDITIONAL_DEV_APT_ENV`          |                            | Additional env variables defined when installing dev deps                                                         |
 | `AIRFLOW_PIP_VERSION`             | `25.1.1`                   | `pip` version used.                                                                                               |
-| `AIRFLOW_UV_VERSION`              | `0.7.8`                    | `uv` version used.                                                                                                |
+| `AIRFLOW_UV_VERSION`              | `0.7.13`                   | `uv` version used.                                                                                                |
 | `AIRFLOW_PRE_COMMIT_VERSION`      | `4.2.0`                    | `pre-commit` version used.                                                                                        |
 | `AIRFLOW_PRE_COMMIT_UV_VERSION`   | `4.1.4`                    | `pre-commit-uv` version used.                                                                                     |
 | `AIRFLOW_USE_UV`                  | `true`                     | Whether to use UV for installation.                                                                               |
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index f4121b1c29f46..f9cf24bae709c 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -242,7 +242,7 @@ class VersionedFile(NamedTuple):
 
 
 AIRFLOW_PIP_VERSION = "25.1.1"
-AIRFLOW_UV_VERSION = "0.7.8"
+AIRFLOW_UV_VERSION = "0.7.13"
 AIRFLOW_USE_UV = False
 # TODO(potiuk): automate upgrades of these versions (likely via requirements.txt file)
 GITPYTHON_VERSION = "3.1.44"
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py b/dev/breeze/src/airflow_breeze/global_constants.py
index 541016c20cc3d..8d280006f1db3 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -194,7 +194,7 @@
 ALLOWED_INSTALL_MYSQL_CLIENT_TYPES = ["mariadb", "mysql"]
 
 PIP_VERSION = "25.1.1"
-UV_VERSION = "0.7.8"
+UV_VERSION = "0.7.13"
 
 DEFAULT_UV_HTTP_TIMEOUT = 300
 DEFAULT_WSL2_HTTP_TIMEOUT = 900
diff --git a/pyproject.toml b/pyproject.toml
index 9576ddf015a45..ba2820ccd59d4 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -529,7 +529,7 @@ packages = []
     "apache-airflow-providers-amazon[s3fs]",
 ]
 "uv" = [
-    "uv>=0.7.8",
+    "uv>=0.7.13",
 ]
 
 
diff --git a/scripts/ci/install_breeze.sh b/scripts/ci/install_breeze.sh
index c3b987b67976a..e52c58263229f 100755
--- a/scripts/ci/install_breeze.sh
+++ b/scripts/ci/install_breeze.sh
@@ -22,7 +22,7 @@ cd "$( dirname "${BASH_SOURCE[0]}" )/../../"
 PYTHON_ARG=""
 
 PIP_VERSION="25.1.1"
-UV_VERSION="0.7.8"
+UV_VERSION="0.7.13"
 if [[ ${PYTHON_VERSION=} != "" ]]; then
     PYTHON_ARG="--python=$(which python"${PYTHON_VERSION}") "
 fi
diff --git a/scripts/ci/pre_commit/update_installers_and_pre_commit.py b/scripts/ci/pre_commit/update_installers_and_pre_commit.py
index ccc75e13ebc1e..ef1b745f9fe5d 100755
--- a/scripts/ci/pre_commit/update_installers_and_pre_commit.py
+++ b/scripts/ci/pre_commit/update_installers_and_pre_commit.py
@@ -50,6 +50,7 @@
     (AIRFLOW_ROOT_PATH / ".github" / "actions" / "install-pre-commit" / "action.yml", False),
     (AIRFLOW_ROOT_PATH / "dev/" / "breeze" / "doc" / "ci" / "02_images.md", True),
     (AIRFLOW_ROOT_PATH / ".pre-commit-config.yaml", False),
+    (AIRFLOW_ROOT_PATH / ".github" / "workflows" / "ci-amd.yml", False),
     (AIRFLOW_CORE_ROOT_PATH / "pyproject.toml", False),
 ]
 
@@ -100,7 +101,7 @@ class Quoting(Enum):
     (re.compile(r"(\| *`AIRFLOW_UV_VERSION` *\| *)(`[0-9.]+`)( *\|)"), Quoting.REVERSE_SINGLE_QUOTED),
     (
         re.compile(
-            r"(default: \")([0-9.]+)(\"  # Keep this comment to "
+            r"(\")([0-9.]+)(\"  # Keep this comment to "
             r"allow automatic replacement of uv version)"
         ),
         Quoting.UNQUOTED,
@@ -123,7 +124,7 @@ class Quoting(Enum):
     ),
     (
         re.compile(
-            r"(default: \")([0-9.]+)(\"  # Keep this comment to allow automatic "
+            r"(\")([0-9.]+)(\"  # Keep this comment to allow automatic "
             r"replacement of pre-commit version)"
         ),
         Quoting.UNQUOTED,
@@ -142,7 +143,7 @@ class Quoting(Enum):
     ),
     (
         re.compile(
-            r"(default: \")([0-9.]+)(\"  # Keep this comment to allow automatic "
+            r"(\")([0-9.]+)(\"  # Keep this comment to allow automatic "
             r"replacement of pre-commit-uv version)"
         ),
         Quoting.UNQUOTED,
diff --git a/scripts/tools/setup_breeze b/scripts/tools/setup_breeze
index a7358f2a3315b..4dd4ff6ade0ec 100755
--- a/scripts/tools/setup_breeze
+++ b/scripts/tools/setup_breeze
@@ -27,7 +27,7 @@ COLOR_YELLOW=$'\e[33m'
 COLOR_BLUE=$'\e[34m'
 COLOR_RESET=$'\e[0m'
 
-UV_VERSION="0.7.8"
+UV_VERSION="0.7.13"
 
 function manual_instructions() {
     echo
diff --git a/yamllint-config.yml b/yamllint-config.yml
index a88c0eab9fe16..8c4bd087ecee6 100644
--- a/yamllint-config.yml
+++ b/yamllint-config.yml
@@ -21,3 +21,7 @@ extends: default
 rules:
   line-length:
     max: 110
+
+  comments:
+    ignore:
+      - /.github/workflows/*.yml

From 94a2afe0638b45943783693f520da4d56448d220 Mon Sep 17 00:00:00 2001
From: Pierre Jeambrun <pierrejbrun@gmail.com>
Date: Mon, 23 Jun 2025 18:53:41 +0200
Subject: [PATCH 110/381] Move useDagTagsInfinite (#52088)

---
 .../DagsList/DagsFilters/DagsFilters.tsx      |  2 +-
 .../queries/useDagTagsInfinite.ts}            | 25 +++++++++----------
 2 files changed, 13 insertions(+), 14 deletions(-)
 rename airflow-core/src/airflow/ui/{openapi-gen/queries/useDagsInfinite.ts => src/queries/useDagTagsInfinite.ts} (71%)

diff --git a/airflow-core/src/airflow/ui/src/pages/DagsList/DagsFilters/DagsFilters.tsx b/airflow-core/src/airflow/ui/src/pages/DagsList/DagsFilters/DagsFilters.tsx
index 86113680952b0..958f3d68997b4 100644
--- a/airflow-core/src/airflow/ui/src/pages/DagsList/DagsFilters/DagsFilters.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/DagsList/DagsFilters/DagsFilters.tsx
@@ -21,10 +21,10 @@ import type { MultiValue } from "chakra-react-select";
 import { useCallback, useState } from "react";
 import { useSearchParams } from "react-router-dom";
 
-import { useDagTagsInfinite } from "openapi/queries/useDagsInfinite";
 import { useTableURLState } from "src/components/DataTable/useTableUrlState";
 import { SearchParamsKeys, type SearchParamsKeysType } from "src/constants/searchParams";
 import { useConfig } from "src/queries/useConfig";
+import { useDagTagsInfinite } from "src/queries/useDagTagsInfinite";
 
 import { PausedFilter } from "./PausedFilter";
 import { ResetButton } from "./ResetButton";
diff --git a/airflow-core/src/airflow/ui/openapi-gen/queries/useDagsInfinite.ts b/airflow-core/src/airflow/ui/src/queries/useDagTagsInfinite.ts
similarity index 71%
rename from airflow-core/src/airflow/ui/openapi-gen/queries/useDagsInfinite.ts
rename to airflow-core/src/airflow/ui/src/queries/useDagTagsInfinite.ts
index 2776977ce46d3..40a779734f5c0 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/queries/useDagsInfinite.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useDagTagsInfinite.ts
@@ -16,14 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { InfiniteData, useInfiniteQuery, UseInfiniteQueryOptions } from "@tanstack/react-query";
+import { type InfiniteData, useInfiniteQuery, type UseInfiniteQueryOptions } from "@tanstack/react-query";
 
+import { UseDagServiceGetDagTagsKeyFn } from "openapi/queries";
 import { DagService } from "openapi/requests/services.gen";
-import { DAGTagCollectionResponse } from "openapi/requests/types.gen";
+import type { DAGTagCollectionResponse } from "openapi/requests/types.gen";
 
-import * as Common from "./common";
-
-export const useDagTagsInfinite = <TError = unknown, TQueryKey extends Array<unknown> = unknown[]>(
+export const useDagTagsInfinite = <TError = unknown>(
   {
     limit,
     orderBy,
@@ -33,26 +32,26 @@ export const useDagTagsInfinite = <TError = unknown, TQueryKey extends Array<unk
     orderBy?: string;
     tagNamePattern?: string;
   } = {},
-  queryKey?: TQueryKey,
+  queryKey?: Array<unknown>,
   options?: Omit<
     UseInfiniteQueryOptions<
       DAGTagCollectionResponse,
       TError,
       InfiniteData<DAGTagCollectionResponse>,
       DAGTagCollectionResponse,
-      unknown[],
+      Array<unknown>,
       number
     >,
-    "queryKey" | "queryFn"
+    "queryFn" | "queryKey"
   >,
 ) =>
   useInfiniteQuery({
-    queryKey: Common.UseDagServiceGetDagTagsKeyFn({ limit, orderBy, tagNamePattern }, queryKey),
-    queryFn: ({ pageParam }) => DagService.getDagTags({ limit, offset: pageParam, orderBy, tagNamePattern }),
-    initialPageParam: 0,
-    getNextPageParam: (lastPage, _allPages, lastPageParam, _allPageParams) =>
+    getNextPageParam: (lastPage, _allPages, lastPageParam) =>
       lastPageParam < lastPage.total_entries ? lastPage.tags.length + lastPageParam : undefined,
-    getPreviousPageParam: (firstPage, _allPages, firstPageParam, _allPageParams) =>
+    getPreviousPageParam: (firstPage, _allPages, firstPageParam) =>
       firstPageParam > 0 ? -firstPage.tags.length + firstPageParam : undefined,
+    initialPageParam: 0,
+    queryFn: ({ pageParam }) => DagService.getDagTags({ limit, offset: pageParam, orderBy, tagNamePattern }),
+    queryKey: UseDagServiceGetDagTagsKeyFn({ limit, orderBy, tagNamePattern }, queryKey),
     ...options,
   });

From f738e848e2d6a572c5ca393694e99d76c2b603f7 Mon Sep 17 00:00:00 2001
From: "Guan Ming(Wesley) Chiu"
 <105915352+guan404ming@users.noreply.github.com>
Date: Tue, 24 Jun 2025 01:11:12 +0800
Subject: [PATCH 111/381] Remove pytest db markers from microsoft azure
 provider (#52107)

---
 .../tests/unit/microsoft/azure/hooks/test_msgraph.py     | 1 -
 .../tests/unit/microsoft/azure/operators/test_adx.py     | 2 --
 .../tests/unit/microsoft/azure/operators/test_msgraph.py | 9 ---------
 3 files changed, 12 deletions(-)

diff --git a/providers/microsoft/azure/tests/unit/microsoft/azure/hooks/test_msgraph.py b/providers/microsoft/azure/tests/unit/microsoft/azure/hooks/test_msgraph.py
index 1f5e1f8d10ae6..a81e4df2e5a95 100644
--- a/providers/microsoft/azure/tests/unit/microsoft/azure/hooks/test_msgraph.py
+++ b/providers/microsoft/azure/tests/unit/microsoft/azure/hooks/test_msgraph.py
@@ -401,7 +401,6 @@ def test_handle_response_async_when_internal_server_error(self):
     # TODO: Elad: review this after merging the bump 2.10 PR
     # We should not have specific provider test block the release
     @pytest.mark.xfail(reason="TODO: Remove")
-    @pytest.mark.db_test
     def test_when_provider_min_airflow_version_is_2_10_or_higher_remove_obsolete_code(self):
         """
         Once this test starts failing due to the fact that the minimum Airflow version is now 2.10.0 or higher
diff --git a/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_adx.py b/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_adx.py
index ec83ed1863f6c..0161338f86384 100644
--- a/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_adx.py
+++ b/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_adx.py
@@ -19,7 +19,6 @@
 
 from unittest import mock
 
-import pytest
 from azure.kusto.data._models import KustoResultTable
 
 from airflow.models import DAG
@@ -82,7 +81,6 @@ def test_run_query(self, mock_conn, mock_run_query):
         )
 
 
-@pytest.mark.db_test
 @mock.patch.object(AzureDataExplorerHook, "run_query", return_value=MockResponse())
 @mock.patch.object(AzureDataExplorerHook, "get_conn")
 def test_azure_data_explorer_query_operator_xcom_push_and_pull(
diff --git a/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_msgraph.py b/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_msgraph.py
index 6ae597ba0e31c..d6a9fae4bdcaf 100644
--- a/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_msgraph.py
+++ b/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_msgraph.py
@@ -44,7 +44,6 @@
 
 
 class TestMSGraphAsyncOperator(Base):
-    @pytest.mark.db_test
     def test_execute_with_old_result_processor_signature(self):
         users = load_json_from_resources(dirname(__file__), "..", "resources", "users.json")
         next_users = load_json_from_resources(dirname(__file__), "..", "resources", "next_users.json")
@@ -76,7 +75,6 @@ def test_execute_with_old_result_processor_signature(self):
                 assert events[1].payload["type"] == "builtins.dict"
                 assert events[1].payload["response"] == json.dumps(next_users)
 
-    @pytest.mark.db_test
     def test_execute_with_new_result_processor_signature(self):
         users = load_json_from_resources(dirname(__file__), "..", "resources", "users.json")
         next_users = load_json_from_resources(dirname(__file__), "..", "resources", "next_users.json")
@@ -104,7 +102,6 @@ def test_execute_with_new_result_processor_signature(self):
             assert events[1].payload["type"] == "builtins.dict"
             assert events[1].payload["response"] == json.dumps(next_users)
 
-    @pytest.mark.db_test
     def test_execute_with_old_paginate_function_signature(self):
         users = load_json_from_resources(dirname(__file__), "..", "resources", "users.json")
         next_users = load_json_from_resources(dirname(__file__), "..", "resources", "next_users.json")
@@ -139,7 +136,6 @@ def test_execute_with_old_paginate_function_signature(self):
                 assert events[1].payload["type"] == "builtins.dict"
                 assert events[1].payload["response"] == json.dumps(next_users)
 
-    @pytest.mark.db_test
     def test_execute_when_do_xcom_push_is_false(self):
         users = load_json_from_resources(dirname(__file__), "..", "resources", "users.json")
         users.pop("@odata.nextLink")
@@ -162,7 +158,6 @@ def test_execute_when_do_xcom_push_is_false(self):
             assert events[0].payload["type"] == "builtins.dict"
             assert events[0].payload["response"] == json.dumps(users)
 
-    @pytest.mark.db_test
     def test_execute_when_an_exception_occurs(self):
         with self.patch_hook_and_request_adapter(AirflowException()):
             operator = MSGraphAsyncOperator(
@@ -175,7 +170,6 @@ def test_execute_when_an_exception_occurs(self):
             with pytest.raises(AirflowException):
                 execute_operator(operator)
 
-    @pytest.mark.db_test
     def test_execute_when_an_exception_occurs_on_custom_event_handler_with_old_signature(self):
         with self.patch_hook_and_request_adapter(AirflowException("An error occurred")):
 
@@ -205,7 +199,6 @@ def custom_event_handler(context: Context, event: dict[Any, Any] | None = None):
                 assert events[0].payload["status"] == "failure"
                 assert events[0].payload["message"] == "An error occurred"
 
-    @pytest.mark.db_test
     def test_execute_when_an_exception_occurs_on_custom_event_handler_with_new_signature(self):
         with self.patch_hook_and_request_adapter(AirflowException("An error occurred")):
 
@@ -231,7 +224,6 @@ def custom_event_handler(event: dict[Any, Any] | None = None, **context):
             assert events[0].payload["status"] == "failure"
             assert events[0].payload["message"] == "An error occurred"
 
-    @pytest.mark.db_test
     def test_execute_when_response_is_bytes(self):
         content = load_file_from_resources(
             dirname(__file__), "..", "resources", "dummy.pdf", mode="rb", encoding=None
@@ -259,7 +251,6 @@ def test_execute_when_response_is_bytes(self):
             assert events[0].payload["type"] == "builtins.bytes"
             assert events[0].payload["response"] == base64_encoded_content
 
-    @pytest.mark.db_test
     def test_execute_with_lambda_parameter_when_response_is_bytes(self):
         content = load_file_from_resources(
             dirname(__file__), "..", "resources", "dummy.pdf", mode="rb", encoding=None

From 50665617630a91cc8bd6554519af2e210dcf8d4c Mon Sep 17 00:00:00 2001
From: ihnokim <ihnokim58@gmail.com>
Date: Tue, 24 Jun 2025 03:38:51 +0900
Subject: [PATCH 112/381] Change default executor in pod template to support
 executor parameter in task (#49433)

---
 chart/files/pod-template-file.kubernetes-helm-yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/chart/files/pod-template-file.kubernetes-helm-yaml b/chart/files/pod-template-file.kubernetes-helm-yaml
index b5c8f01fb7a7d..e62d0ea8bb7d5 100644
--- a/chart/files/pod-template-file.kubernetes-helm-yaml
+++ b/chart/files/pod-template-file.kubernetes-helm-yaml
@@ -95,7 +95,7 @@ spec:
     - envFrom: {{- include "custom_airflow_environment_from" . | default "\n  []" | indent 6 }}
       env:
         - name: AIRFLOW__CORE__EXECUTOR
-          value: LocalExecutor
+          value: {{ .Values.executor | quote }}
         {{- if or .Values.workers.kerberosSidecar.enabled .Values.workers.kerberosInitContainer.enabled}}
         - name: KRB5_CONFIG
           value:  {{ .Values.kerberos.configPath | quote }}

From d95ff20af43965e3c248d48e214b5a051deca98c Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 23 Jun 2025 16:05:55 -0400
Subject: [PATCH 113/381] Bump the core-ui-package-updates group across 1
 directory with 15 updates (#52110)

---
updated-dependencies:
- dependency-name: "@chakra-ui/react"
  dependency-version: 3.21.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: "@tanstack/react-query"
  dependency-version: 5.81.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: axios
  dependency-version: 1.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: react-hook-form
  dependency-version: 7.58.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: "@eslint/compat"
  dependency-version: 1.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: "@eslint/js"
  dependency-version: 9.29.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: "@stylistic/eslint-plugin"
  dependency-version: 5.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
- dependency-name: "@types/react"
  dependency-version: 19.1.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: core-ui-package-updates
- dependency-name: eslint
  dependency-version: 9.29.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: eslint-plugin-perfectionist
  dependency-version: 4.15.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: eslint-plugin-prettier
  dependency-version: 5.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: happy-dom
  dependency-version: 18.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
- dependency-name: prettier
  dependency-version: 3.6.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: typescript-eslint
  dependency-version: 8.34.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: core-ui-package-updates
- dependency-name: vitest
  dependency-version: 3.2.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: core-ui-package-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
 .../auth/managers/simple/ui/package-lock.json | 1564 +++++++-------
 .../auth/managers/simple/ui/package.json      |   30 +-
 .../auth/managers/simple/ui/pnpm-lock.yaml    | 1904 ++++++++---------
 3 files changed, 1721 insertions(+), 1777 deletions(-)

diff --git a/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/package-lock.json b/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/package-lock.json
index 34694dc89ee12..1f2181114601e 100644
--- a/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/package-lock.json
+++ b/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/package-lock.json
@@ -8,43 +8,43 @@
       "name": "simple-auth-manager-ui",
       "version": "0.0.0",
       "dependencies": {
-        "@chakra-ui/react": "^3.20.0",
-        "@tanstack/react-query": "^5.80.6",
-        "axios": "^1.9.0",
+        "@chakra-ui/react": "^3.21.0",
+        "@tanstack/react-query": "^5.81.2",
+        "axios": "^1.10.0",
         "next-themes": "^0.4.6",
         "react": "^19.1.0",
         "react-cookie": "^8.0.1",
         "react-dom": "^19.1.0",
-        "react-hook-form": "^7.57.0",
+        "react-hook-form": "^7.58.1",
         "react-router-dom": "^7.6.2"
       },
       "devDependencies": {
         "@7nohe/openapi-react-query-codegen": "^1.6.2",
-        "@eslint/compat": "^1.2.9",
-        "@eslint/js": "^9.28.0",
-        "@stylistic/eslint-plugin": "^4.4.1",
+        "@eslint/compat": "^1.3.0",
+        "@eslint/js": "^9.29.0",
+        "@stylistic/eslint-plugin": "^5.0.0",
         "@testing-library/jest-dom": "^6.6.3",
         "@testing-library/react": "^16.3.0",
         "@trivago/prettier-plugin-sort-imports": "^5.2.2",
-        "@types/react": "^19.1.7",
+        "@types/react": "^19.1.8",
         "@types/react-dom": "^19.1.6",
         "@vitejs/plugin-react-swc": "^3.10.2",
-        "eslint": "^9.28.0",
+        "eslint": "^9.29.0",
         "eslint-config-prettier": "^10.1.5",
         "eslint-plugin-jsx-a11y": "^6.10.2",
-        "eslint-plugin-perfectionist": "^4.14.0",
-        "eslint-plugin-prettier": "^5.4.1",
+        "eslint-plugin-perfectionist": "^4.15.0",
+        "eslint-plugin-prettier": "^5.5.0",
         "eslint-plugin-react": "^7.37.5",
         "eslint-plugin-react-hooks": "^5.2.0",
         "eslint-plugin-react-refresh": "^0.4.20",
         "eslint-plugin-unicorn": "^59.0.1",
-        "happy-dom": "^17.6.3",
-        "prettier": "^3.5.3",
+        "happy-dom": "^18.0.1",
+        "prettier": "^3.6.0",
         "typescript": "~5.8.3",
-        "typescript-eslint": "^8.34.0",
+        "typescript-eslint": "^8.34.1",
         "vite": "^6.3.5",
         "vite-plugin-css-injected-by-js": "^3.5.2",
-        "vitest": "^3.2.3"
+        "vitest": "^3.2.4"
       }
     },
     "node_modules/@7nohe/openapi-react-query-codegen": {
@@ -97,69 +97,69 @@
       }
     },
     "node_modules/@ark-ui/react": {
-      "version": "5.12.0",
-      "resolved": "https://registry.npmjs.org/@ark-ui/react/-/react-5.12.0.tgz",
-      "integrity": "sha512-UV89EqyESZoyr6rtvrbFJn/FejpswhvRVcfK44dZDU6h6UY8CxfR/6Ayvrq9UtFdD0dEawqwWrXS22l8Y05Nnw==",
-      "license": "MIT",
-      "dependencies": {
-        "@internationalized/date": "3.8.1",
-        "@zag-js/accordion": "1.15.0",
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/angle-slider": "1.15.0",
-        "@zag-js/auto-resize": "1.15.0",
-        "@zag-js/avatar": "1.15.0",
-        "@zag-js/carousel": "1.15.0",
-        "@zag-js/checkbox": "1.15.0",
-        "@zag-js/clipboard": "1.15.0",
-        "@zag-js/collapsible": "1.15.0",
-        "@zag-js/collection": "1.15.0",
-        "@zag-js/color-picker": "1.15.0",
-        "@zag-js/color-utils": "1.15.0",
-        "@zag-js/combobox": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/date-picker": "1.15.0",
-        "@zag-js/date-utils": "1.15.0",
-        "@zag-js/dialog": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/editable": "1.15.0",
-        "@zag-js/file-upload": "1.15.0",
-        "@zag-js/file-utils": "1.15.0",
-        "@zag-js/floating-panel": "1.15.0",
-        "@zag-js/focus-trap": "1.15.0",
-        "@zag-js/highlight-word": "1.15.0",
-        "@zag-js/hover-card": "1.15.0",
-        "@zag-js/i18n-utils": "1.15.0",
-        "@zag-js/listbox": "1.15.0",
-        "@zag-js/menu": "1.15.0",
-        "@zag-js/number-input": "1.15.0",
-        "@zag-js/pagination": "1.15.0",
-        "@zag-js/password-input": "1.15.0",
-        "@zag-js/pin-input": "1.15.0",
-        "@zag-js/popover": "1.15.0",
-        "@zag-js/presence": "1.15.0",
-        "@zag-js/progress": "1.15.0",
-        "@zag-js/qr-code": "1.15.0",
-        "@zag-js/radio-group": "1.15.0",
-        "@zag-js/rating-group": "1.15.0",
-        "@zag-js/react": "1.15.0",
-        "@zag-js/select": "1.15.0",
-        "@zag-js/signature-pad": "1.15.0",
-        "@zag-js/slider": "1.15.0",
-        "@zag-js/splitter": "1.15.0",
-        "@zag-js/steps": "1.15.0",
-        "@zag-js/switch": "1.15.0",
-        "@zag-js/tabs": "1.15.0",
-        "@zag-js/tags-input": "1.15.0",
-        "@zag-js/time-picker": "1.15.0",
-        "@zag-js/timer": "1.15.0",
-        "@zag-js/toast": "1.15.0",
-        "@zag-js/toggle": "1.15.0",
-        "@zag-js/toggle-group": "1.15.0",
-        "@zag-js/tooltip": "1.15.0",
-        "@zag-js/tour": "1.15.0",
-        "@zag-js/tree-view": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+      "version": "5.14.0",
+      "resolved": "https://registry.npmjs.org/@ark-ui/react/-/react-5.14.0.tgz",
+      "integrity": "sha512-7WWlCM3SowtF01e9NouuO4T6SYuKTM1dovR+2NZuuWTlqTBlvZ+1vPHS6BeqzXriwMLU7QUU+Y0i/TcI6/s/Sg==",
+      "license": "MIT",
+      "dependencies": {
+        "@internationalized/date": "3.8.2",
+        "@zag-js/accordion": "1.15.2",
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/angle-slider": "1.15.2",
+        "@zag-js/auto-resize": "1.15.2",
+        "@zag-js/avatar": "1.15.2",
+        "@zag-js/carousel": "1.15.2",
+        "@zag-js/checkbox": "1.15.2",
+        "@zag-js/clipboard": "1.15.2",
+        "@zag-js/collapsible": "1.15.2",
+        "@zag-js/collection": "1.15.2",
+        "@zag-js/color-picker": "1.15.2",
+        "@zag-js/color-utils": "1.15.2",
+        "@zag-js/combobox": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/date-picker": "1.15.2",
+        "@zag-js/date-utils": "1.15.2",
+        "@zag-js/dialog": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/editable": "1.15.2",
+        "@zag-js/file-upload": "1.15.2",
+        "@zag-js/file-utils": "1.15.2",
+        "@zag-js/floating-panel": "1.15.2",
+        "@zag-js/focus-trap": "1.15.2",
+        "@zag-js/highlight-word": "1.15.2",
+        "@zag-js/hover-card": "1.15.2",
+        "@zag-js/i18n-utils": "1.15.2",
+        "@zag-js/listbox": "1.15.2",
+        "@zag-js/menu": "1.15.2",
+        "@zag-js/number-input": "1.15.2",
+        "@zag-js/pagination": "1.15.2",
+        "@zag-js/password-input": "1.15.2",
+        "@zag-js/pin-input": "1.15.2",
+        "@zag-js/popover": "1.15.2",
+        "@zag-js/presence": "1.15.2",
+        "@zag-js/progress": "1.15.2",
+        "@zag-js/qr-code": "1.15.2",
+        "@zag-js/radio-group": "1.15.2",
+        "@zag-js/rating-group": "1.15.2",
+        "@zag-js/react": "1.15.2",
+        "@zag-js/select": "1.15.2",
+        "@zag-js/signature-pad": "1.15.2",
+        "@zag-js/slider": "1.15.2",
+        "@zag-js/splitter": "1.15.2",
+        "@zag-js/steps": "1.15.2",
+        "@zag-js/switch": "1.15.2",
+        "@zag-js/tabs": "1.15.2",
+        "@zag-js/tags-input": "1.15.2",
+        "@zag-js/time-picker": "1.15.2",
+        "@zag-js/timer": "1.15.2",
+        "@zag-js/toast": "1.15.2",
+        "@zag-js/toggle": "1.15.2",
+        "@zag-js/toggle-group": "1.15.2",
+        "@zag-js/tooltip": "1.15.2",
+        "@zag-js/tour": "1.15.2",
+        "@zag-js/tree-view": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       },
       "peerDependencies": {
         "react": ">=18.0.0",
@@ -300,12 +300,12 @@
       }
     },
     "node_modules/@chakra-ui/react": {
-      "version": "3.20.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react/-/react-3.20.0.tgz",
-      "integrity": "sha512-zHYQAUqrT2pZZ/Xi+sskRC/An9q4ZelLPJkFHdobftTYkcFo1FtkMbBO0AEBZhb/6mZGyfw3JLflSawkuR++uQ==",
+      "version": "3.21.0",
+      "resolved": "https://registry.npmjs.org/@chakra-ui/react/-/react-3.21.0.tgz",
+      "integrity": "sha512-Ajw6GuUhfNhMagTM9cO1Lg/w/HSQUwsv55j2QvvvPw/dk01wHiGi1aihfuCLpa6QY4ElLNs6SS3f78xI9Fwo6A==",
       "license": "MIT",
       "dependencies": {
-        "@ark-ui/react": "5.12.0",
+        "@ark-ui/react": "5.14.0",
         "@emotion/is-prop-valid": "1.3.1",
         "@emotion/serialize": "1.3.3",
         "@emotion/use-insertion-effect-with-fallbacks": "1.2.0",
@@ -902,9 +902,9 @@
       }
     },
     "node_modules/@eslint/compat": {
-      "version": "1.2.9",
-      "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.2.9.tgz",
-      "integrity": "sha512-gCdSY54n7k+driCadyMNv8JSPzYLeDVM/ikZRtvtROBpRdFSkS8W9A82MqsaY7lZuwL0wiapgD0NT1xT0hyJsA==",
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.3.0.tgz",
+      "integrity": "sha512-ZBygRBqpDYiIHsN+d1WyHn3TYgzgpzLEcgJUxTATyiInQbKZz6wZb6+ljwdg8xeeOe4v03z6Uh6lELiw0/mVhQ==",
       "dev": true,
       "license": "Apache-2.0",
       "engines": {
@@ -920,9 +920,9 @@
       }
     },
     "node_modules/@eslint/config-array": {
-      "version": "0.20.0",
-      "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz",
-      "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==",
+      "version": "0.20.1",
+      "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz",
+      "integrity": "sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==",
       "dev": true,
       "license": "Apache-2.0",
       "dependencies": {
@@ -995,9 +995,9 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "9.28.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.28.0.tgz",
-      "integrity": "sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==",
+      "version": "9.29.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.29.0.tgz",
+      "integrity": "sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -1141,18 +1141,18 @@
       }
     },
     "node_modules/@internationalized/date": {
-      "version": "3.8.1",
-      "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.8.1.tgz",
-      "integrity": "sha512-PgVE6B6eIZtzf9Gu5HvJxRK3ufUFz9DhspELuhW/N0GuMGMTLvPQNRkHP2hTuP9lblOk+f+1xi96sPiPXANXAA==",
+      "version": "3.8.2",
+      "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.8.2.tgz",
+      "integrity": "sha512-/wENk7CbvLbkUvX1tu0mwq49CVkkWpkXubGel6birjRPyo6uQ4nQpnq5xZu823zRCwwn82zgHrvgF1vZyvmVgA==",
       "license": "Apache-2.0",
       "dependencies": {
         "@swc/helpers": "^0.5.0"
       }
     },
     "node_modules/@internationalized/number": {
-      "version": "3.6.2",
-      "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.2.tgz",
-      "integrity": "sha512-E5QTOlMg9wo5OrKdHD6edo1JJlIoOsylh0+mbf0evi1tHJwMZfJSaBpGtnJV9N7w3jeiioox9EG/EWRWPh82vg==",
+      "version": "3.6.3",
+      "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.3.tgz",
+      "integrity": "sha512-p+Zh1sb6EfrfVaS86jlHGQ9HA66fJhV9x5LiE5vCbZtXEHAuhcmUZUdZ4WrFpUBfNalr2OkAJI5AcKEQF+Lebw==",
       "license": "Apache-2.0",
       "dependencies": {
         "@swc/helpers": "^0.5.0"
@@ -1577,15 +1577,16 @@
       ]
     },
     "node_modules/@stylistic/eslint-plugin": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-4.4.1.tgz",
-      "integrity": "sha512-CEigAk7eOLyHvdgmpZsKFwtiqS2wFwI1fn4j09IU9GmD4euFM4jEBAViWeCqaNLlbX2k2+A/Fq9cje4HQBXuJQ==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.0.0.tgz",
+      "integrity": "sha512-nVV2FSzeTJ3oFKw+3t9gQYQcrgbopgCASSY27QOtkhEGgSfdQQjDmzZd41NeT1myQ8Wc6l+pZllST9qIu4NKzg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/utils": "^8.32.1",
-        "eslint-visitor-keys": "^4.2.0",
-        "espree": "^10.3.0",
+        "@eslint-community/eslint-utils": "^4.7.0",
+        "@typescript-eslint/types": "^8.34.1",
+        "eslint-visitor-keys": "^4.2.1",
+        "espree": "^10.4.0",
         "estraverse": "^5.3.0",
         "picomatch": "^4.0.2"
       },
@@ -1845,9 +1846,9 @@
       }
     },
     "node_modules/@tanstack/query-core": {
-      "version": "5.80.6",
-      "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.80.6.tgz",
-      "integrity": "sha512-nl7YxT/TAU+VTf+e2zTkObGTyY8YZBMnbgeA1ee66lIVqzKlYursAII6z5t0e6rXgwUMJSV4dshBTNacNpZHbQ==",
+      "version": "5.81.2",
+      "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.81.2.tgz",
+      "integrity": "sha512-QLYkPdrudoMATDFa3MiLEwRhNnAlzHWDf0LKaXUqJd0/+QxN8uTPi7bahRlxoAyH0UbLMBdeDbYzWALj7THOtw==",
       "license": "MIT",
       "funding": {
         "type": "github",
@@ -1855,12 +1856,12 @@
       }
     },
     "node_modules/@tanstack/react-query": {
-      "version": "5.80.6",
-      "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.80.6.tgz",
-      "integrity": "sha512-izX+5CnkpON3NQGcEm3/d7LfFQNo9ZpFtX2QsINgCYK9LT2VCIdi8D3bMaMSNhrAJCznRoAkFic76uvLroALBw==",
+      "version": "5.81.2",
+      "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.81.2.tgz",
+      "integrity": "sha512-pe8kFlTrL2zFLlcAj2kZk9UaYYHDk9/1hg9EBaoO3cxDhOZf1FRGJeziSXKrVZyxIfs7b3aoOj/bw7Lie0mDUg==",
       "license": "MIT",
       "dependencies": {
-        "@tanstack/query-core": "5.80.6"
+        "@tanstack/query-core": "5.81.2"
       },
       "funding": {
         "type": "github",
@@ -2094,6 +2095,16 @@
       "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
       "dev": true
     },
+    "node_modules/@types/node": {
+      "version": "20.19.1",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.1.tgz",
+      "integrity": "sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "undici-types": "~6.21.0"
+      }
+    },
     "node_modules/@types/parse-json": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
@@ -2101,9 +2112,9 @@
       "peer": true
     },
     "node_modules/@types/react": {
-      "version": "19.1.7",
-      "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.7.tgz",
-      "integrity": "sha512-BnsPLV43ddr05N71gaGzyZ5hzkCmGwhMvYc8zmvI8Ci1bRkkDSzDDVfAXfN2tk748OwI7ediiPX6PfT9p0QGVg==",
+      "version": "19.1.8",
+      "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz",
+      "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==",
       "license": "MIT",
       "dependencies": {
         "csstype": "^3.0.2"
@@ -2119,18 +2130,25 @@
         "@types/react": "^19.0.0"
       }
     },
+    "node_modules/@types/whatwg-mimetype": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@types/whatwg-mimetype/-/whatwg-mimetype-3.0.2.tgz",
+      "integrity": "sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "8.34.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.0.tgz",
-      "integrity": "sha512-QXwAlHlbcAwNlEEMKQS2RCgJsgXrTJdjXT08xEgbPFa2yYQgVjBymxP5DrfrE7X7iodSzd9qBUHUycdyVJTW1w==",
+      "version": "8.34.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.1.tgz",
+      "integrity": "sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint-community/regexpp": "^4.10.0",
-        "@typescript-eslint/scope-manager": "8.34.0",
-        "@typescript-eslint/type-utils": "8.34.0",
-        "@typescript-eslint/utils": "8.34.0",
-        "@typescript-eslint/visitor-keys": "8.34.0",
+        "@typescript-eslint/scope-manager": "8.34.1",
+        "@typescript-eslint/type-utils": "8.34.1",
+        "@typescript-eslint/utils": "8.34.1",
+        "@typescript-eslint/visitor-keys": "8.34.1",
         "graphemer": "^1.4.0",
         "ignore": "^7.0.0",
         "natural-compare": "^1.4.0",
@@ -2144,7 +2162,7 @@
         "url": "https://opencollective.com/typescript-eslint"
       },
       "peerDependencies": {
-        "@typescript-eslint/parser": "^8.34.0",
+        "@typescript-eslint/parser": "^8.34.1",
         "eslint": "^8.57.0 || ^9.0.0",
         "typescript": ">=4.8.4 <5.9.0"
       }
@@ -2160,16 +2178,16 @@
       }
     },
     "node_modules/@typescript-eslint/parser": {
-      "version": "8.34.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.0.tgz",
-      "integrity": "sha512-vxXJV1hVFx3IXz/oy2sICsJukaBrtDEQSBiV48/YIV5KWjX1dO+bcIr/kCPrW6weKXvsaGKFNlwH0v2eYdRRbA==",
+      "version": "8.34.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.1.tgz",
+      "integrity": "sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/scope-manager": "8.34.0",
-        "@typescript-eslint/types": "8.34.0",
-        "@typescript-eslint/typescript-estree": "8.34.0",
-        "@typescript-eslint/visitor-keys": "8.34.0",
+        "@typescript-eslint/scope-manager": "8.34.1",
+        "@typescript-eslint/types": "8.34.1",
+        "@typescript-eslint/typescript-estree": "8.34.1",
+        "@typescript-eslint/visitor-keys": "8.34.1",
         "debug": "^4.3.4"
       },
       "engines": {
@@ -2185,14 +2203,14 @@
       }
     },
     "node_modules/@typescript-eslint/project-service": {
-      "version": "8.34.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.0.tgz",
-      "integrity": "sha512-iEgDALRf970/B2YExmtPMPF54NenZUf4xpL3wsCRx/lgjz6ul/l13R81ozP/ZNuXfnLCS+oPmG7JIxfdNYKELw==",
+      "version": "8.34.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.1.tgz",
+      "integrity": "sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/tsconfig-utils": "^8.34.0",
-        "@typescript-eslint/types": "^8.34.0",
+        "@typescript-eslint/tsconfig-utils": "^8.34.1",
+        "@typescript-eslint/types": "^8.34.1",
         "debug": "^4.3.4"
       },
       "engines": {
@@ -2207,14 +2225,14 @@
       }
     },
     "node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.34.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.0.tgz",
-      "integrity": "sha512-9Ac0X8WiLykl0aj1oYQNcLZjHgBojT6cW68yAgZ19letYu+Hxd0rE0veI1XznSSst1X5lwnxhPbVdwjDRIomRw==",
+      "version": "8.34.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz",
+      "integrity": "sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "8.34.0",
-        "@typescript-eslint/visitor-keys": "8.34.0"
+        "@typescript-eslint/types": "8.34.1",
+        "@typescript-eslint/visitor-keys": "8.34.1"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2225,9 +2243,9 @@
       }
     },
     "node_modules/@typescript-eslint/tsconfig-utils": {
-      "version": "8.34.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.0.tgz",
-      "integrity": "sha512-+W9VYHKFIzA5cBeooqQxqNriAP0QeQ7xTiDuIOr71hzgffm3EL2hxwWBIIj4GuofIbKxGNarpKqIq6Q6YrShOA==",
+      "version": "8.34.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.1.tgz",
+      "integrity": "sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2242,14 +2260,14 @@
       }
     },
     "node_modules/@typescript-eslint/type-utils": {
-      "version": "8.34.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.34.0.tgz",
-      "integrity": "sha512-n7zSmOcUVhcRYC75W2pnPpbO1iwhJY3NLoHEtbJwJSNlVAZuwqu05zY3f3s2SDWWDSo9FdN5szqc73DCtDObAg==",
+      "version": "8.34.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.34.1.tgz",
+      "integrity": "sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "8.34.0",
-        "@typescript-eslint/utils": "8.34.0",
+        "@typescript-eslint/typescript-estree": "8.34.1",
+        "@typescript-eslint/utils": "8.34.1",
         "debug": "^4.3.4",
         "ts-api-utils": "^2.1.0"
       },
@@ -2266,9 +2284,9 @@
       }
     },
     "node_modules/@typescript-eslint/types": {
-      "version": "8.34.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.0.tgz",
-      "integrity": "sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==",
+      "version": "8.34.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.1.tgz",
+      "integrity": "sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2280,16 +2298,16 @@
       }
     },
     "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.34.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.0.tgz",
-      "integrity": "sha512-rOi4KZxI7E0+BMqG7emPSK1bB4RICCpF7QD3KCLXn9ZvWoESsOMlHyZPAHyG04ujVplPaHbmEvs34m+wjgtVtg==",
+      "version": "8.34.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz",
+      "integrity": "sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/project-service": "8.34.0",
-        "@typescript-eslint/tsconfig-utils": "8.34.0",
-        "@typescript-eslint/types": "8.34.0",
-        "@typescript-eslint/visitor-keys": "8.34.0",
+        "@typescript-eslint/project-service": "8.34.1",
+        "@typescript-eslint/tsconfig-utils": "8.34.1",
+        "@typescript-eslint/types": "8.34.1",
+        "@typescript-eslint/visitor-keys": "8.34.1",
         "debug": "^4.3.4",
         "fast-glob": "^3.3.2",
         "is-glob": "^4.0.3",
@@ -2309,9 +2327,9 @@
       }
     },
     "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+      "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -2335,16 +2353,16 @@
       }
     },
     "node_modules/@typescript-eslint/utils": {
-      "version": "8.34.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.0.tgz",
-      "integrity": "sha512-8L4tWatGchV9A1cKbjaavS6mwYwp39jql8xUmIIKJdm+qiaeHy5KMKlBrf30akXAWBzn2SqKsNOtSENWUwg7XQ==",
+      "version": "8.34.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.1.tgz",
+      "integrity": "sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.7.0",
-        "@typescript-eslint/scope-manager": "8.34.0",
-        "@typescript-eslint/types": "8.34.0",
-        "@typescript-eslint/typescript-estree": "8.34.0"
+        "@typescript-eslint/scope-manager": "8.34.1",
+        "@typescript-eslint/types": "8.34.1",
+        "@typescript-eslint/typescript-estree": "8.34.1"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2359,14 +2377,14 @@
       }
     },
     "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.34.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.0.tgz",
-      "integrity": "sha512-qHV7pW7E85A0x6qyrFn+O+q1k1p3tQCsqIZ1KZ5ESLXY57aTvUd3/a4rdPTeXisvhXn2VQG0VSKUqs8KHF2zcA==",
+      "version": "8.34.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz",
+      "integrity": "sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "8.34.0",
-        "eslint-visitor-keys": "^4.2.0"
+        "@typescript-eslint/types": "8.34.1",
+        "eslint-visitor-keys": "^4.2.1"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2391,15 +2409,15 @@
       }
     },
     "node_modules/@vitest/expect": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.3.tgz",
-      "integrity": "sha512-W2RH2TPWVHA1o7UmaFKISPvdicFJH+mjykctJFoAkUw+SPTJTGjUNdKscFBrqM7IPnCVu6zihtKYa7TkZS1dkQ==",
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz",
+      "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@types/chai": "^5.2.2",
-        "@vitest/spy": "3.2.3",
-        "@vitest/utils": "3.2.3",
+        "@vitest/spy": "3.2.4",
+        "@vitest/utils": "3.2.4",
         "chai": "^5.2.0",
         "tinyrainbow": "^2.0.0"
       },
@@ -2408,13 +2426,13 @@
       }
     },
     "node_modules/@vitest/mocker": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.3.tgz",
-      "integrity": "sha512-cP6fIun+Zx8he4rbWvi+Oya6goKQDZK+Yq4hhlggwQBbrlOQ4qtZ+G4nxB6ZnzI9lyIb+JnvyiJnPC2AGbKSPA==",
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz",
+      "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vitest/spy": "3.2.3",
+        "@vitest/spy": "3.2.4",
         "estree-walker": "^3.0.3",
         "magic-string": "^0.30.17"
       },
@@ -2435,9 +2453,9 @@
       }
     },
     "node_modules/@vitest/pretty-format": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.3.tgz",
-      "integrity": "sha512-yFglXGkr9hW/yEXngO+IKMhP0jxyFw2/qys/CK4fFUZnSltD+MU7dVYGrH8rvPcK/O6feXQA+EU33gjaBBbAng==",
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz",
+      "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -2448,13 +2466,13 @@
       }
     },
     "node_modules/@vitest/runner": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.3.tgz",
-      "integrity": "sha512-83HWYisT3IpMaU9LN+VN+/nLHVBCSIUKJzGxC5RWUOsK1h3USg7ojL+UXQR3b4o4UBIWCYdD2fxuzM7PQQ1u8w==",
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz",
+      "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vitest/utils": "3.2.3",
+        "@vitest/utils": "3.2.4",
         "pathe": "^2.0.3",
         "strip-literal": "^3.0.0"
       },
@@ -2470,13 +2488,13 @@
       "license": "MIT"
     },
     "node_modules/@vitest/snapshot": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.3.tgz",
-      "integrity": "sha512-9gIVWx2+tysDqUmmM1L0hwadyumqssOL1r8KJipwLx5JVYyxvVRfxvMq7DaWbZZsCqZnu/dZedaZQh4iYTtneA==",
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz",
+      "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vitest/pretty-format": "3.2.3",
+        "@vitest/pretty-format": "3.2.4",
         "magic-string": "^0.30.17",
         "pathe": "^2.0.3"
       },
@@ -2492,9 +2510,9 @@
       "license": "MIT"
     },
     "node_modules/@vitest/spy": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.3.tgz",
-      "integrity": "sha512-JHu9Wl+7bf6FEejTCREy+DmgWe+rQKbK+y32C/k5f4TBIAlijhJbRBIRIOCEpVevgRsCQR2iHRUH2/qKVM/plw==",
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz",
+      "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -2505,14 +2523,14 @@
       }
     },
     "node_modules/@vitest/utils": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.3.tgz",
-      "integrity": "sha512-4zFBCU5Pf+4Z6v+rwnZ1HU1yzOKKvDkMXZrymE2PBlbjKJRlrOxbvpfPSvJTGRIwGoahaOGvp+kbCoxifhzJ1Q==",
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz",
+      "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vitest/pretty-format": "3.2.3",
-        "loupe": "^3.1.3",
+        "@vitest/pretty-format": "3.2.4",
+        "loupe": "^3.1.4",
         "tinyrainbow": "^2.0.0"
       },
       "funding": {
@@ -2520,555 +2538,555 @@
       }
     },
     "node_modules/@zag-js/accordion": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/accordion/-/accordion-1.15.0.tgz",
-      "integrity": "sha512-EKNeuKx+lOQ/deCe/ApCjVPxpxpDwT2NXvMPL+YvqXmSv7hAnTLs9fDKjbDUQUMmsyx32BsBd8t6d17DL3rPXg==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/accordion/-/accordion-1.15.2.tgz",
+      "integrity": "sha512-4ooxmmnEDeRLPLOCsrQeLHcTj+xTqBHm6pYEdho/pb67lHujAUSnbfEryorBSfvJEWdiUTYts96EfsLfbn5SYA==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/anatomy": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/anatomy/-/anatomy-1.15.0.tgz",
-      "integrity": "sha512-r0l5I7mSsF35HdwXm22TppNhfVftFuqvKfHvTUw+wQZhni4eUL93HypJD0Fl7mDhtP5zfVGfBwR048OzD0+tCw==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/anatomy/-/anatomy-1.15.2.tgz",
+      "integrity": "sha512-GiWZk+fqO/W15FIRVhUL237xZmYMm/gcrp8b4VJGLpZE4qaQaBd4kSYObhIl/7AnLC45VjKbV7c8fLxZKd/5kA==",
       "license": "MIT"
     },
     "node_modules/@zag-js/angle-slider": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/angle-slider/-/angle-slider-1.15.0.tgz",
-      "integrity": "sha512-xIZBa9V6d05uK7+XQVhfdsThqbZKimSYVxtMOWJfG0sKn63N9VGPxL1OtOMq7FA4IP3SyvlelsGt+3t82TUiyA==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/angle-slider/-/angle-slider-1.15.2.tgz",
+      "integrity": "sha512-ItcDlKHJbPFfPGmmiCGcWcd0Y8xC+WH5Dji7+uzBl40L9hh8si7/FrY9EB2cX/qUTDppNyicLPIDnZRGkByTOA==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/rect-utils": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/rect-utils": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/aria-hidden": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/aria-hidden/-/aria-hidden-1.15.0.tgz",
-      "integrity": "sha512-3ogglAasycekTHI34ph16mqwM+VtHCOMtrFHWzPwB16itV5oDEeeMNdQXenHSSyQ/07nJ2QsRGFFjGhPm1kWNg==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/aria-hidden/-/aria-hidden-1.15.2.tgz",
+      "integrity": "sha512-Uwt86QpEaI4qLFS/k4C7rwIfyiH8EdE5a4AWiQ26WsL8VOpjROn65rBEOJ8q3fG5CJXbdcqaYK3lg4ldqf9irQ==",
       "license": "MIT"
     },
     "node_modules/@zag-js/auto-resize": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/auto-resize/-/auto-resize-1.15.0.tgz",
-      "integrity": "sha512-EXgrsU7OWxc7obSOt8Okh0144H8DQi1S84OsOUY04Uni11Dnp5/X8+t6mvBbkw4/Qyz5UBjChjocwBcO+HHV8w==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/auto-resize/-/auto-resize-1.15.2.tgz",
+      "integrity": "sha512-Mg3IN3eIP2wKBFRm5qti/rjKpTj7sfIVNfO9BgWdHDSzli1VwaBX7GaOE3nGc1tZ2nJ8n0SWRvRSzr3b57cwKw==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/dom-query": "1.15.0"
+        "@zag-js/dom-query": "1.15.2"
       }
     },
     "node_modules/@zag-js/avatar": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/avatar/-/avatar-1.15.0.tgz",
-      "integrity": "sha512-EHGxzXb1mLf3n6x0z/rqFl1mghDB/gyfPAeaFUoA/cacmmMk8YB3aDUXkS9pTgN9stYJBM5f6T4xB1ZUhrP8tg==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/avatar/-/avatar-1.15.2.tgz",
+      "integrity": "sha512-4aG2ETJbdMTALyXwU/DeGfjs/dM0Kllje+t5ov52fQrtkY123JdrvKQkcvsc7Luph1kdN1tC1/2fe/pDMhycCg==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/carousel": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/carousel/-/carousel-1.15.0.tgz",
-      "integrity": "sha512-ZI9H34f2utdJ2Ek6GZa+iuRH4eC99GHD/VEOKLdGani8uadpT2v8M5kUwPGrlAJq9SiPbQ2UuXBmCkmurPQqdA==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/carousel/-/carousel-1.15.2.tgz",
+      "integrity": "sha512-7bcyEtWIhv7kw+V4H+Fv5rE8I8lf0LQOj+m3HTYzWo+wiLybFfI8/bg1qywjSYKsgZr3gmGVCEZhfx3BSpP3eA==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/scroll-snap": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/scroll-snap": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/checkbox": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/checkbox/-/checkbox-1.15.0.tgz",
-      "integrity": "sha512-6lQvPQNJXt7R0xxdpOuh2qtmAkzdBdqSvFIH7fE6GJzJ/AWiRZh0X+9deLQ76CN4EDUdxizEe7MlQfTI3a56aw==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/checkbox/-/checkbox-1.15.2.tgz",
+      "integrity": "sha512-Ay/+rpKbxL4jE1pwVw52h0t79PpiifA6QlYnV4E+hWl1yJBkMRIi76Ryhqvqp4yY+2Wyr9OfDA9eHmQjapG4VA==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/focus-visible": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/focus-visible": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/clipboard": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/clipboard/-/clipboard-1.15.0.tgz",
-      "integrity": "sha512-Q3kh0fHvOEAJUywQm3zAWyltrYyiI8OpeZQ18k5Mf3/M+bq3gSphZL0+AYsgGbKUg5O2+hJ1SfiErAjyhRtBQA==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/clipboard/-/clipboard-1.15.2.tgz",
+      "integrity": "sha512-EE5OlsIYbBklo62qu3A7GiUnsgmoGaoDZvhpYvpNM8StWNeRREcJZXRIizv4aFC46e5eODzSNcebnMLYa8Wcgw==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/collapsible": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/collapsible/-/collapsible-1.15.0.tgz",
-      "integrity": "sha512-GX0kdMlKk4Yk5k/2wN0prudf21k+TfArGr4EHqimTDR0vQE3dSdb3pYyPjw20fLzceKHBBCLsoi2v+YnS75gHA==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/collapsible/-/collapsible-1.15.2.tgz",
+      "integrity": "sha512-vvUXQMFgwsZJphE4Ml5ap4FVhtyLOqK2QXPbt2+F8X8SRwJ3/pqsSsLFdH+ALpNoCK6WF9j+8FZ4lyidr7XPDw==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/collection": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/collection/-/collection-1.15.0.tgz",
-      "integrity": "sha512-oC3i6c/oP/FuNPsfgoC1reSXbAvDBGXl0HU3CcvXiNLHbjg2ek8J7kbow6MNuXK6chiksiOHbzKxHl2Oo0Ox7A==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/collection/-/collection-1.15.2.tgz",
+      "integrity": "sha512-bJ9EtZ1Cpjh/rQFDMPTPrky/eSfaLpHWmMnk/S9b7wi+OhC0Hoqw38lcWzfc0AaE4bJsfru9/FLIsCDOLf7TSg==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/color-picker": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/color-picker/-/color-picker-1.15.0.tgz",
-      "integrity": "sha512-DGujS24h1OWkYL+TWyd+xukOO8NBgcSfFCINffa4ivkHtNx3nC28qkwLPRASbl7AK69pbrcuO6bx1Sy/JQJw0Q==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/color-picker/-/color-picker-1.15.2.tgz",
+      "integrity": "sha512-UOYHECq+X6hSrgSxwBt5O4Y6f2IdOGMhe7P/LFev7Yn0x1F9fMxJZCIzvQGaQ2V/hR0eTatiKk5SmOp9+dJA/g==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/color-utils": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dismissable": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/popper": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/color-utils": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dismissable": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/popper": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/color-utils": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/color-utils/-/color-utils-1.15.0.tgz",
-      "integrity": "sha512-SKo+p5Fu0TBtdDua8UHVjptOkwLLBFoD499Z1FER/gr0R/97L03Kdir0YTxvKn5pXWXYY1EQn4hpTuTITN16lQ==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/color-utils/-/color-utils-1.15.2.tgz",
+      "integrity": "sha512-c167QcxiVHgFZ7ca0PSQZ7skhbBOd6u1lIyWYzkZ2uPf0yJndqP9gFYPMbwK6d4WIM9k6y6mLdsWCGpqIJJsIg==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/combobox": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/combobox/-/combobox-1.15.0.tgz",
-      "integrity": "sha512-HBck3wcEeIOa7IQMsUkUKbm9cAU7bjoklIyq2zFGn90k7DcDa++oXK9Z2pmcd4TPoBYiyVuuXucaCcjmLX8V/Q==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/combobox/-/combobox-1.15.2.tgz",
+      "integrity": "sha512-lZXW99NLnRfLLY1ZOE0oqo4wMDglkUjKV1UZaHyj+yqXsiMtWhKQFQW/JeVBRDe6RCv8wWPPHMycNANMw581gQ==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/aria-hidden": "1.15.0",
-        "@zag-js/collection": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dismissable": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/popper": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/aria-hidden": "1.15.2",
+        "@zag-js/collection": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dismissable": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/popper": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/core": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/core/-/core-1.15.0.tgz",
-      "integrity": "sha512-P/8F3IXabMhpFnc6hC7GDg3rvUnvY27cuZU04hxjUqTH6+SfORIA/Uvqd4ekhC+dIprL9jicnFrmGgcyelyxfQ==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/core/-/core-1.15.2.tgz",
+      "integrity": "sha512-yUnh4I0nZ8rlszWgF402F5vGoYw7DNwStYz2TAO+4E08BpKBATw3FEdqAHPm+2xZm5qPqnPbM4iObwUlkBQUEw==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/date-picker": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/date-picker/-/date-picker-1.15.0.tgz",
-      "integrity": "sha512-IZD0V9MAljp1QhxYbST80AonryuDnyx7hvEy/RrBY/VOx6I4STtKfcSJ5ZZgVIzJfH8Yyaed4+IwcenqG7W5YQ==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/date-picker/-/date-picker-1.15.2.tgz",
+      "integrity": "sha512-KElAFm3fW4GKGUNUe+jqqUX+P1H+Cigp/eGRgIl0dUjCwHocD1oN0ZCwNYmf7SJoWSgPRc1UJdA4XvpdU0IwPQ==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/date-utils": "1.15.0",
-        "@zag-js/dismissable": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/live-region": "1.15.0",
-        "@zag-js/popper": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/date-utils": "1.15.2",
+        "@zag-js/dismissable": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/live-region": "1.15.2",
+        "@zag-js/popper": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       },
       "peerDependencies": {
         "@internationalized/date": ">=3.0.0"
       }
     },
     "node_modules/@zag-js/date-utils": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/date-utils/-/date-utils-1.15.0.tgz",
-      "integrity": "sha512-FX9EesJRnUTYTpbXf5EVfCbsXW5vYtZfc635aQzojc9ekk1FGcHpqQs8ZKfCOTPuauZFOX9i6139A4KoPfQOiw==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/date-utils/-/date-utils-1.15.2.tgz",
+      "integrity": "sha512-U+HtfdtHJ5ed2ys8izMhu8gY5jQigCd8ExPN5Cxg5CoIbSkho9NT8o/eO9OW71jc2F4kwBh+q0reyxxLJnTSbw==",
       "license": "MIT",
       "peerDependencies": {
         "@internationalized/date": ">=3.0.0"
       }
     },
     "node_modules/@zag-js/dialog": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/dialog/-/dialog-1.15.0.tgz",
-      "integrity": "sha512-Vlt5vySs4u8c8xBEh2JMUvRfPc+aaVEIIUtFVxpc2ORWhBXs9glijyp1yf3rNHJhjj8gqqhF5sEvs3yUTTAk+Q==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/dialog/-/dialog-1.15.2.tgz",
+      "integrity": "sha512-LUF+tiiUJj7v24txhC0TOwEgsfj1GCogAmBaiJKxvqrDEDv1B91J0b6SUQ5TuTMLW+hlBEzXZw0QsTxa9OXBew==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/aria-hidden": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dismissable": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/focus-trap": "1.15.0",
-        "@zag-js/remove-scroll": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/aria-hidden": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dismissable": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/focus-trap": "1.15.2",
+        "@zag-js/remove-scroll": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/dismissable": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/dismissable/-/dismissable-1.15.0.tgz",
-      "integrity": "sha512-yv575KWy8gA1p4aajOiY5l/nBQ3Xw+Mrjpungp1+wiGd/98eNAIKJ6/adldfbE1Ygd/Q4Dx2VQ7D1AmiTdwUSw==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/dismissable/-/dismissable-1.15.2.tgz",
+      "integrity": "sha512-+WY8a1L+L8hXPGmWKqOsSg2KCHabVWXEX8mewHamltpSb86+2WMmblpLNgTwbm6V0T6txf1N8lFuzWMojMEWSg==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/interact-outside": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/interact-outside": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/dom-query": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-1.15.0.tgz",
-      "integrity": "sha512-z8H/j/Zs0eZEsGpbonScmlKSv0jEXKiAwUCrvQ9Mt6Gz9n0CQRM3MkFclSsM8aeiSv6qKLlhPfkzjl18OLkbgA==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-1.15.2.tgz",
+      "integrity": "sha512-+r9Xj6hiQj9b2ZNkT3E/bDaXgigoAkhtikDXov9duAY14pFFJxazXr0NcVgacik8ytAEt6XOOshLcAftyalRKg==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/types": "1.15.0"
+        "@zag-js/types": "1.15.2"
       }
     },
     "node_modules/@zag-js/editable": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/editable/-/editable-1.15.0.tgz",
-      "integrity": "sha512-F14HKZuDsfkpfIkaF/ZDYPkz/pFf6VHrvoV0rdhj8wb8QJQ4nB+lgBv2APSwkEaFb/gGrnE19v3Ojlt5tqpPsw==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/editable/-/editable-1.15.2.tgz",
+      "integrity": "sha512-32v7DXDBnDX1CiFpGRh9uclu48UJQJT2QZPQ0Bys3ZOFgMxsWH6tCKDb7iQTcINIc/XIx/9nclWnV5egzimG9w==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/interact-outside": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/interact-outside": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/file-upload": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/file-upload/-/file-upload-1.15.0.tgz",
-      "integrity": "sha512-2hAlQr9qdT8EH4XnmkNkEIDCCsmp2SMoMAjq6nJKYO8UJNQGRanU2B5S8jV3quJBz0vIY43SwyvqiZ3+1VrJSg==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/file-upload/-/file-upload-1.15.2.tgz",
+      "integrity": "sha512-Zgac/da5QrUlE0ItlNy1kyMXfTy4ynTWnq4aZ4wZ9eVHUFQhLXERv8l+hYJetImISnuclmNVxNKP8Xk+5t4+tA==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/file-utils": "1.15.0",
-        "@zag-js/i18n-utils": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/file-utils": "1.15.2",
+        "@zag-js/i18n-utils": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/file-utils": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/file-utils/-/file-utils-1.15.0.tgz",
-      "integrity": "sha512-tahJt3JmrXaOtGiknH5PxIiOyyNvroMfjiBqOqnNksIPzDoWmVNxHOEme/ts7dJlkRD8U2qm2NFC2VS0bKerzg==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/file-utils/-/file-utils-1.15.2.tgz",
+      "integrity": "sha512-aNUEBJUeK6G3pyf+zYnIMg0GgJnInddjGRedFeTnfK1UmlSO8wTbxQTCvjWd4Nnr5eCTpQkRq6wTZy8JeIcOpw==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/i18n-utils": "1.15.0"
+        "@zag-js/i18n-utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/floating-panel": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/floating-panel/-/floating-panel-1.15.0.tgz",
-      "integrity": "sha512-AYYFseA1MeQUZl+zjNoKUu4j0kwz8EyJd4oJjs8uJIR6KG8u8QhpWYIBUny63M6AtZTCSYQAgBEcEh+mrbEyyQ==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/floating-panel/-/floating-panel-1.15.2.tgz",
+      "integrity": "sha512-8oG2MRXWWeXws7iVDmJFBqHLHYOGLvYe+vgXI3vgnLhmS4SeX9qAJj6qIOar7htOmEtp1p/KiBo2w2MYtzjuAw==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dismissable": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/popper": "1.15.0",
-        "@zag-js/rect-utils": "1.15.0",
-        "@zag-js/store": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dismissable": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/popper": "1.15.2",
+        "@zag-js/rect-utils": "1.15.2",
+        "@zag-js/store": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/focus-trap": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/focus-trap/-/focus-trap-1.15.0.tgz",
-      "integrity": "sha512-N8m/JpNe1gHUPJlr0hyGUdHg6pAuyJKkBaX0s38cyVntlo2CJhyAWZGuUdocpT2Q3HNPql666FNnH986rYPDKQ==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/focus-trap/-/focus-trap-1.15.2.tgz",
+      "integrity": "sha512-5EU5/Cg80oNO3z83A/33t9SOVYvLqLOuSPxt/7Xzy/L1Vj3vUj+s1ox6IpECmEFJcuql7X5yt6VIVitrLtgbFA==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/dom-query": "1.15.0"
+        "@zag-js/dom-query": "1.15.2"
       }
     },
     "node_modules/@zag-js/focus-visible": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/focus-visible/-/focus-visible-1.15.0.tgz",
-      "integrity": "sha512-TPXBf47tj6L0hhZNl9AWhuLoVzfPaNPM+/Gw8t9l9Whvy6v9rk/rqUCidY5LsrQuPiKTi7s5WI5J+Wod8ib3gw==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/focus-visible/-/focus-visible-1.15.2.tgz",
+      "integrity": "sha512-zElE5T41p5QaB4856xK2SeERmHrKbA/UMzoyHzrAk/N1r6dNiMOOx1hMyHy7y6pEhC9kjJFwEpXi1QEel6/ELA==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/dom-query": "1.15.0"
+        "@zag-js/dom-query": "1.15.2"
       }
     },
     "node_modules/@zag-js/highlight-word": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/highlight-word/-/highlight-word-1.15.0.tgz",
-      "integrity": "sha512-Rwr/rRm8BaF2xW9BAEJeA2wpFVx6HzoezfYQX7GFPPgw3N8nBMAYNjx+i1YIwIEcNyad2rbaBB+pSd2fZLIniA==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/highlight-word/-/highlight-word-1.15.2.tgz",
+      "integrity": "sha512-2a49h4k0ISIDydaZZDdASEHJpwxJeuZHSPCE7cM3/BWCR3H5galeC/jbNWRlTJVH4OQTYAR0I2wILQvOWLhSrw==",
       "license": "MIT"
     },
     "node_modules/@zag-js/hover-card": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/hover-card/-/hover-card-1.15.0.tgz",
-      "integrity": "sha512-j6BsE+metdnv/C/Ls0TZzAMN78rtS2r8M1ccHY5FFTGyUvZnlE8BY/QPNyCSSSCUpynymzMYh3IMYlxbJgfpSQ==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/hover-card/-/hover-card-1.15.2.tgz",
+      "integrity": "sha512-FfNmhow8MPMp5RgTeC87x4EStFw+d1137w4QZ+fC5PystRzxGeiyDJyLRYGVeIQO2oP463az70vnxsbFAMu98A==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dismissable": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/popper": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dismissable": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/popper": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/i18n-utils": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/i18n-utils/-/i18n-utils-1.15.0.tgz",
-      "integrity": "sha512-anxSbT8kLbJaFJFSb0Ork2j/Lp+XVfMNCIgiBR2BuqUlfX72k23TIJvRxAfwNIkUfs0L8ikaSgLss9OwS4mAnw==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/i18n-utils/-/i18n-utils-1.15.2.tgz",
+      "integrity": "sha512-1RnqCaxe+l4UR1O3fhn04T+J62yw/SkCByhrhrPSis/H7a65nW0WsoWiJTIgWp/hN9HI2Y3dVFfMEwQUFFHG1g==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/dom-query": "1.15.0"
+        "@zag-js/dom-query": "1.15.2"
       }
     },
     "node_modules/@zag-js/interact-outside": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/interact-outside/-/interact-outside-1.15.0.tgz",
-      "integrity": "sha512-OwBf/iesQGU9Oq3xe/tcK7gu7xipiGWsmwl2CcScr0fTp3BIMbQywHS928IgPk1DxA8KTHodY8wBjoY1dskfRA==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/interact-outside/-/interact-outside-1.15.2.tgz",
+      "integrity": "sha512-WbCICcMJHL6yS8vaou0FvKV6shl1Z+CefF7yzn5MEshPLbmy33WGQ2KBzodTkIQFM/C/zdVz5xKl8TbQmi7jUg==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/listbox": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/listbox/-/listbox-1.15.0.tgz",
-      "integrity": "sha512-Gcg76uWZwUAyMFZzGWpHnFCU/aaquNbXmVnyzzBgE3Co2snkv02rK1yG9iBwemZe3e5+VBifMMAtLLPAQJdz+g==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/listbox/-/listbox-1.15.2.tgz",
+      "integrity": "sha512-V6Zbi8HTiyhsV4GhFaiFYL2bJo4lOt24/SA9M/T5D7ZH+bTm3itPUxYddIBi9w6yRTU0gsorosD2GyFkHjchvg==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/collection": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/focus-visible": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/collection": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/focus-visible": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/live-region": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/live-region/-/live-region-1.15.0.tgz",
-      "integrity": "sha512-Xy1PqLZD9AKzKuTKCMo9miL1Xizk/N8qFvj64iybBKUYnKr89/af3w7hRFqd2BDX+q3zrNxPp9rZ6L7MlOc7kA==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/live-region/-/live-region-1.15.2.tgz",
+      "integrity": "sha512-dIrfDlKyNz99CQVeHu9RHe/x+yTBm3wFA7H655DXL7CugO9tpTlynkrTG9AB+0Z84JKZTeHh0vGVa2chTWKrNg==",
       "license": "MIT"
     },
     "node_modules/@zag-js/menu": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/menu/-/menu-1.15.0.tgz",
-      "integrity": "sha512-GbEBVYu0w7+88xrGX2GrjXfnwWuX5jLhoLiEcuxvxJQal/nahKrH4AGXJvHXNaRbj+53V3nWAh3u70C9210PWw==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/menu/-/menu-1.15.2.tgz",
+      "integrity": "sha512-54dGUChMLyTrkCGbKGh0R8l/cg0vPFnGZwMG96zYJhkmXdpDMECZgBrN3j7B6RtEIvlAR8fMH5Sya58Amb3lGg==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dismissable": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/popper": "1.15.0",
-        "@zag-js/rect-utils": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dismissable": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/popper": "1.15.2",
+        "@zag-js/rect-utils": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/number-input": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/number-input/-/number-input-1.15.0.tgz",
-      "integrity": "sha512-+kK8kyXJhIAbEUnswoMDR+DSJUmvDNIOW0ffuZ9pbfukN3p6zaA3/dCp2Dtg3bQS7hGrFWgtrdejJ8l+mVvUAA==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/number-input/-/number-input-1.15.2.tgz",
+      "integrity": "sha512-qtDAVUdMXBhufBSwAgi8MXm7zHb36ujfWmxCJg6HbjKVF0BEAxeoye5VexgyYul7Hp8+Rr9LkW8X35W4amjJEQ==",
       "license": "MIT",
       "dependencies": {
-        "@internationalized/number": "3.6.2",
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@internationalized/number": "3.6.3",
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/pagination": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/pagination/-/pagination-1.15.0.tgz",
-      "integrity": "sha512-Z62Q41fQPWqk59QyJk+9J0Ad3H9DCqZ0zZutI6iH8DdzT0A0xxmT6zhup6DM/8C8h0OLlaHFTWQnj0RdRNrnXg==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/pagination/-/pagination-1.15.2.tgz",
+      "integrity": "sha512-k1jT7UWDwgkYVsf83TTUhks6iZ7aQpcEjQ+iWI2LbZu98+bVhX9hpHfxdWbvTbueGk6WjB2xa1X0tsktII1mmQ==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/password-input": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/password-input/-/password-input-1.15.0.tgz",
-      "integrity": "sha512-oHuZKDRJIbycqWpTVznufy4L7K2g8kwcEaZ4runkwO2ocF00zP8HVmOZQzmhkUgTny0azErQydg8XE0VR5OfYg==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/password-input/-/password-input-1.15.2.tgz",
+      "integrity": "sha512-9BpQ26Z9XoCiNAHOmx3zwa+62+C6358/az0h3N24P4qS1EdTVWkhG1tsyPhRElg4v1koavZ40RMUppJQBH+DmA==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/pin-input": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/pin-input/-/pin-input-1.15.0.tgz",
-      "integrity": "sha512-IykjogZBG+BfbFXymSa+KGpOi5CrV9kl8HRm6G2V2Sr3NA5jEwMFaGSd/QrcHS9vh23D1Smx/io4pvF7c3q0kg==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/pin-input/-/pin-input-1.15.2.tgz",
+      "integrity": "sha512-1KjGGmyldtEb4RwwdBTKzbgAwpNT6CyY274LvQC8lTCEUYOBkUmS9OUaKUbwkoluCdmXrugpg/XMulisRmMtgg==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/popover": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/popover/-/popover-1.15.0.tgz",
-      "integrity": "sha512-cdzEed3zcGbjSgPQnQnrsuXo2hVVslmSNwQbU5dHcNzG1uxxmtPCIMVeBUmGyJbAFF5XQpKCq/7mIr26dT73vw==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/popover/-/popover-1.15.2.tgz",
+      "integrity": "sha512-6cD4eTwwj/bkTCDWVk0dMFqg01iD7qJofRSU3da7nde1Y0TMz8gBlt++GASgCF4p/hPeGLD18GcIF8FKka9IlA==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/aria-hidden": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dismissable": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/focus-trap": "1.15.0",
-        "@zag-js/popper": "1.15.0",
-        "@zag-js/remove-scroll": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/aria-hidden": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dismissable": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/focus-trap": "1.15.2",
+        "@zag-js/popper": "1.15.2",
+        "@zag-js/remove-scroll": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/popper": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/popper/-/popper-1.15.0.tgz",
-      "integrity": "sha512-Ra/0Ko423KN+8D4+mIFFkeTn9uaHfpxn6UUNIWwZKoiJQvED8DH4dPbLbmvGEoKp6qmisnRHAzi71NLgEhk0Mw==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/popper/-/popper-1.15.2.tgz",
+      "integrity": "sha512-5uaFW9IU8bj3NdEiyuSp2eVJaPvWoA6/q7Fh423Va8booMYW4k1KFmz2BSxQ3JfK5lt3vPI0X2026gSxTx/vmg==",
       "license": "MIT",
       "dependencies": {
         "@floating-ui/dom": "1.7.1",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/presence": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/presence/-/presence-1.15.0.tgz",
-      "integrity": "sha512-hoxXis50pm79PpkY2kA1wdhh4AEo7t7pBv0VsQYZYjmzuFh4V5IMw9oa1EOfBlC6f/A+EMZ9E+xg+EVsB68a8w==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/presence/-/presence-1.15.2.tgz",
+      "integrity": "sha512-cNPJz3qeXdoYFEefxFixZoMDFzqfHsLgmi2ynmRrFlyHzHtFdvKjvS5ywo9YFGNgwKrEddS43n8gl3w3lgqBCA==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/types": "1.15.0"
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/types": "1.15.2"
       }
     },
     "node_modules/@zag-js/progress": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/progress/-/progress-1.15.0.tgz",
-      "integrity": "sha512-/Mz26GR2rOAuoErNOiSGRpvwckTmbCD5nWGDE/aYlVRID13HcsmN15Zk2Jfa4LadqK88aIN8Iy0Sk4elG0+Efw==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/progress/-/progress-1.15.2.tgz",
+      "integrity": "sha512-VPunnrTYiJaHnnCKuh2ZARCnzgTtxYIiNKiUVPWlygsWy2AGg1K3AvVswF2CVfGpwbO4ioyBQO65EZkQiMN/Aw==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/qr-code": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/qr-code/-/qr-code-1.15.0.tgz",
-      "integrity": "sha512-GkGy5k5tk6DIui9lGjDO8+e8TsSVOxEGp1lblPiaRm1ggIh10GhIfCQWGe/x78ezdie8WzxlSrma89suTpaiAQ==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/qr-code/-/qr-code-1.15.2.tgz",
+      "integrity": "sha512-hFtwGGArxVJo7osbY3R73BHIX3Ldb8G4gtNDZ2fGcKAcp+SQg5GXUIBK17ncxJrOC7A1Wp7sdOoYNNOPWe2fYA==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0",
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2",
         "proxy-memoize": "3.0.1",
         "uqr": "0.1.2"
       }
     },
     "node_modules/@zag-js/radio-group": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/radio-group/-/radio-group-1.15.0.tgz",
-      "integrity": "sha512-+KTebHUtMsE/YDyGE8wF5VnWfZQp+f2WoAwwzBjfhPpRxXbOUMDo0pZEEr3yxkSvQ9hgCcBhMKH8pEk0SPxvjQ==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/radio-group/-/radio-group-1.15.2.tgz",
+      "integrity": "sha512-+V9Y4EZuNITMbA9iJisysqWW+JB3YdlFF6dAomvXN8nuOuj8HE02JHndIeMflDtW6Tz99JcJLS7lNXN7G5uEuw==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/focus-visible": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/focus-visible": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/rating-group": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/rating-group/-/rating-group-1.15.0.tgz",
-      "integrity": "sha512-omGKN97FhplFwBX9J/Mj7BCZuwFXSXssSVTKU7Yp2d1Cmxhez4+Ju7KdSRNnIoWB4OxFCxwZyaAPTcg3E0Pjrg==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/rating-group/-/rating-group-1.15.2.tgz",
+      "integrity": "sha512-g7F9NyB1MF6ydE9aEr9zLPXGKXZIH2ZsUBXEQ9u6apUhnchhCSHDw6xHVXI1hYGrJHnpf2xMw3Xu1opJge1DQg==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/react": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/react/-/react-1.15.0.tgz",
-      "integrity": "sha512-YSp9QBkdeBfZt4nVhJW+CUd5sNEEVAuwkmoZWDFUoDoWSAXwzSKuHCmTm5/8DaXg1IZD2bMrXgMNDqZv2x0hZw==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/react/-/react-1.15.2.tgz",
+      "integrity": "sha512-T5QPiLbW4DoQ32NS5+Qu9NsIXKKz0d5MOpfEdXXuc6hKZdvV+V9d7EXeHBRohs3P6jqtf8FXpXDdK2trv37YlQ==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/core": "1.15.0",
-        "@zag-js/store": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/core": "1.15.2",
+        "@zag-js/store": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       },
       "peerDependencies": {
         "react": ">=18.0.0",
@@ -3076,288 +3094,289 @@
       }
     },
     "node_modules/@zag-js/rect-utils": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/rect-utils/-/rect-utils-1.15.0.tgz",
-      "integrity": "sha512-sjAn78x1t3XiDG3NT8SoFfyO0u7/SEJU5RKRhMgjTPoOLXTzZj+lu2d5N4cUw0uZTfeGb/ormObSchMQVhFgYQ==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/rect-utils/-/rect-utils-1.15.2.tgz",
+      "integrity": "sha512-wPsOM4qYncwOli20MNINgl0ZwmMY11RvrgPvjcMrkJ9dVqU/YrCcXV4rIg8Zig5jxCT+mf7rWQe9aQJlNTVipA==",
       "license": "MIT"
     },
     "node_modules/@zag-js/remove-scroll": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/remove-scroll/-/remove-scroll-1.15.0.tgz",
-      "integrity": "sha512-vdWSAdgY8wJ7s4YeaKwTMwmZiRMBxCehmdktSxBWvwtAjU1cM3UWvjmZ9E6INJrQXxH9vDpe/rpFSyv1guIQIw==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/remove-scroll/-/remove-scroll-1.15.2.tgz",
+      "integrity": "sha512-pXVuvFcAQND+C0KAzAve02hGaI/AgEhC7RpgpyUKaUzEccEsxLi40C88j1/2HCfta6GI7nd2e0QwPZiqngUIyA==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/dom-query": "1.15.0"
+        "@zag-js/dom-query": "1.15.2"
       }
     },
     "node_modules/@zag-js/scroll-snap": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/scroll-snap/-/scroll-snap-1.15.0.tgz",
-      "integrity": "sha512-/LfBlsjoR4tVL3Djus3k9jKLhwC2ApdHTACxEc72TAewoPe4M8icnSDLXmKHvwwOhzK0HlFz8wGm6ZncAbQbuA==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/scroll-snap/-/scroll-snap-1.15.2.tgz",
+      "integrity": "sha512-RswpsMHg0aWHsx7xqybnPm8bTL9ow17z9GhYgxSWtIi2U9wgkUHDtEJQcRNUA9PQEGyVd29B39NM0ir64HAhNQ==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/dom-query": "1.15.0"
+        "@zag-js/dom-query": "1.15.2"
       }
     },
     "node_modules/@zag-js/select": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/select/-/select-1.15.0.tgz",
-      "integrity": "sha512-4urUBADzhrsGEO/UsqHdjsgmDdF15Zzeid3ejEbIMTrkt2/mMMcQ1CShuxtsWqm2EUBz/N1kOcZlE6Tq69n7Xg==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/select/-/select-1.15.2.tgz",
+      "integrity": "sha512-Y07RlBIc8bVj2WklhS7tiVySZntBv9TE9sfiA8RcLU7KFFGTdS2XUoQV4fziJubUL8XFhNzEC92/bKeBLqpgDw==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/collection": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dismissable": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/popper": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/collection": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dismissable": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/popper": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/signature-pad": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/signature-pad/-/signature-pad-1.15.0.tgz",
-      "integrity": "sha512-5Tj8vkrRxEkSV417oR2qdy+TRgDmS3W8dY7xsIjpbBf/kqkt/8Uo4JpaVH2vwQAFw9AwEFogBh9i6dHcXMy0rA==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/signature-pad/-/signature-pad-1.15.2.tgz",
+      "integrity": "sha512-vw7oD7afBfGvUyotJrFl+PjPVYOYZLgQ1eVAosKj54phgKvxheBr8/ySq9vlyTkyvOMjJ8zIkkxlywuqoZzl8g==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0",
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2",
         "perfect-freehand": "^1.2.2"
       }
     },
     "node_modules/@zag-js/slider": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/slider/-/slider-1.15.0.tgz",
-      "integrity": "sha512-NYIsn3GKXIoPmvkDXsQmw9wdYg3QHbYHXnZ8Ewl2fVubN7S5mDlHSZs2iDVsBvX+a4RChWFRO6JHX8E1+BncOg==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/slider/-/slider-1.15.2.tgz",
+      "integrity": "sha512-Lcrm+h4Vx0stD0ybAqD5tA1qOnrKEfQP9ucQsPUy+fY2em19XC6raOVOhAc6ROx4X0neTI/yEc1ARJQSaxtRZw==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/splitter": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/splitter/-/splitter-1.15.0.tgz",
-      "integrity": "sha512-Xnedl+cpnD/hv9m+GOYCK5K2xRxbs4xuP/EajYtgVcDw8E1X5cBmxHa1hCrp7BMgb2xYCvZ5et4hnmZfb+1X9g==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/splitter/-/splitter-1.15.2.tgz",
+      "integrity": "sha512-LIuTTPRaw3inS64f2TLcFIlwjNe9Tx9mSE4VXf7wPhYitNKmyh7MeNE59na+wDzZisVwx9yBewAPfrZtbHDGBA==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/steps": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/steps/-/steps-1.15.0.tgz",
-      "integrity": "sha512-VoIDcDIEErZawmW2m0yTGlffqjfRuSwR37K9LdSRy8Q4Qzz3wV7jASaTjMhTya1hlreJ7tJg+Qbjqowvw9GndA==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/steps/-/steps-1.15.2.tgz",
+      "integrity": "sha512-NnS3wYQrFWA5OXu+jnlnPpm49rGpzHCDbN2UuUcMGvbYVETKEXEO9fC1XWh7PstVuNi03E/CrZGHl5cEjf/j8w==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/store": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/store/-/store-1.15.0.tgz",
-      "integrity": "sha512-ecqjcy3b1GsULpsT8RVJV9KDaikajRN0XRg48HMvaGkaPIvxI6esyrE6RKnShuqr2eVXIPghgBnCnrJUev4UlA==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/store/-/store-1.15.2.tgz",
+      "integrity": "sha512-oDJuRdu8SaGab06UycN96OgvNau1ynawDNNfQNhA7zoOIZlaJH6jP+5YaAPFila+wyjdw7svz5+4ejs8vXcjpw==",
       "license": "MIT",
       "dependencies": {
         "proxy-compare": "3.0.1"
       }
     },
     "node_modules/@zag-js/switch": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/switch/-/switch-1.15.0.tgz",
-      "integrity": "sha512-2CaAUTi7jM4lJjCYoSE1HWlFPCifI5GR+hufWOCYKpanf8VA/LM+t/a2Aq5QoBsWdcQv3B9mHxF/aVTDbnCKPQ==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/switch/-/switch-1.15.2.tgz",
+      "integrity": "sha512-2aEm5HDP/ENcLvoP77CH7DQTPXIMUzVilefHlz6WT0tQxQzOw8uMhUOYYcuNmEq0FNRUOyuMEMyZnZFUYAxqvQ==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/focus-visible": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/focus-visible": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/tabs": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/tabs/-/tabs-1.15.0.tgz",
-      "integrity": "sha512-voHWpibC1TKLmbAJfixOesxrCio7wK+gdLRvh7Xh5u+3VSsT2fP2wEw3ySkJbpw3MpEE7R2OWkInbCV/SwPcsA==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/tabs/-/tabs-1.15.2.tgz",
+      "integrity": "sha512-SJMR4K59sxvNZEIgnJfbweLzncmgxRWTBm+FamwMtP8DKQ3RETNdjrn4aA9qLUsCObapk06KT3iTeiCXzuBaFA==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/tags-input": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/tags-input/-/tags-input-1.15.0.tgz",
-      "integrity": "sha512-CB60z+/I/Nso1gwatTO1qrk4XITxDd4qtRD+l6fuuKyOkZGgKm0AP0W+/6qUuOvtWIuY6fas3yZHFmF2eEZ9vQ==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/tags-input/-/tags-input-1.15.2.tgz",
+      "integrity": "sha512-/mAuB8emhGoo3eoIgmlT/kQE27ukRlhghgwp3OjvEen+iTpz0XIWM+S+IV3QU6U4DlhwkadQaINht/c9ln6gxQ==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/auto-resize": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/interact-outside": "1.15.0",
-        "@zag-js/live-region": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/auto-resize": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/interact-outside": "1.15.2",
+        "@zag-js/live-region": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/time-picker": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/time-picker/-/time-picker-1.15.0.tgz",
-      "integrity": "sha512-4S02433X88X3MW/BxaFJiWna4BIRXsAdrmDcBb0PZ8dln29DUmpD8YHcFtONsKvmCAmrbO7Gr65n86nQwK8zeg==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/time-picker/-/time-picker-1.15.2.tgz",
+      "integrity": "sha512-Aoe9GdbrvAMP1fdOEmzCESr/dO+cGnqhCoa0UkZB5wuB4dT3S02hRGSZsHO51Eon2NpzHPG9j+/alncwOe77Tw==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dismissable": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/popper": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dismissable": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/popper": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       },
       "peerDependencies": {
         "@internationalized/date": ">=3.0.0"
       }
     },
     "node_modules/@zag-js/timer": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/timer/-/timer-1.15.0.tgz",
-      "integrity": "sha512-gDsYm4C9yju7g/r5u7n7mRQ2UY7diXXVbbLFr5Ja+0iUXgbD+uoSZEt9HypVc5TL9NWEEwn5/tut36owEeW4rw==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/timer/-/timer-1.15.2.tgz",
+      "integrity": "sha512-v8RN3cwFuNXxuDMuxxfXKCSd+Z1UT6Ct+ueU3PRZqHqXU9u4k9Mm+vROIqnNzhCCdIHNxsqUt32/2zsRRaubbw==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/toast": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/toast/-/toast-1.15.0.tgz",
-      "integrity": "sha512-0RupMCXyGr7/La4Zlei7VqBF0VPNJelGd7zimLboe+IKZyy4Ypi/N2IX14rl8JZQDsDEgkLUl33xrSk/9RW2nQ==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/toast/-/toast-1.15.2.tgz",
+      "integrity": "sha512-OohJvGTy+J1MpydJ4eCV36picggfF9VbDW4nK97TT+4bIIRDgW+PGYgB4dd+PvEjRrk9194Kkm93lud95yOyZg==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dismissable": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dismissable": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/toggle": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/toggle/-/toggle-1.15.0.tgz",
-      "integrity": "sha512-mMSQ1+f1hOMp/7gLA7rTeiSNyeZxsCjRxP4XnTBY4BxJ5LswLuhem9CplBwaVthkhY1Y/5f3HHu80LBcfF+BVQ==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/toggle/-/toggle-1.15.2.tgz",
+      "integrity": "sha512-wtDeIRhDeVhaUboWQ2GrxlCC4+cLRyZzvZiN84tad7H/sUKq9hNDdROcCnIYBhEkb1Qf4sjR8KszY12YLtJx6A==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/toggle-group": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/toggle-group/-/toggle-group-1.15.0.tgz",
-      "integrity": "sha512-992vMz/2sriLrUKI3LpT/01kCGTbPGLgGLibiHRt562i0v9+2tV+GiY2jBctHZjJaKPrzBY3H0l8CCCvDj8gng==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/toggle-group/-/toggle-group-1.15.2.tgz",
+      "integrity": "sha512-JhWV0GY2NRgDhlzP73ADlG1E4NFXqv1h2q5+m3Rmos+Bi8soOV437jch/wy+M+xYN5vdZCczXJu9BumHNlknhA==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/tooltip": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/tooltip/-/tooltip-1.15.0.tgz",
-      "integrity": "sha512-sOpVECyfdS4RZBx46mSV+RPc9C5k9JvYQYUfoOVWh0E5RLSEz5bQm5xxctKOHfCOv+vJNTfG5gP596B1r2+Fkw==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/tooltip/-/tooltip-1.15.2.tgz",
+      "integrity": "sha512-Spw5ewga3DNaT5H4AnrtsxJ6ebRoTxy+igwojGTYUCNUoxyQn6W3UpqZpgAAfw8B236bduTRh9MW9CsaM/hnmg==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/focus-visible": "1.15.0",
-        "@zag-js/popper": "1.15.0",
-        "@zag-js/store": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/focus-visible": "1.15.2",
+        "@zag-js/popper": "1.15.2",
+        "@zag-js/store": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/tour": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/tour/-/tour-1.15.0.tgz",
-      "integrity": "sha512-EplcxoiE0z9vI0z6675+ABclQ9Mi1YUWhDZOHx7wfjRzpfawmJoBAlNDKzK3wc801d6OxgJx69SPj7ac0BwwwA==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/tour/-/tour-1.15.2.tgz",
+      "integrity": "sha512-OW+autOwwsVMGwcYCxdCh3Hibeeag6Sg8w02XfmX7E+T2u9a+GGdLOrH7DPM2oHTbZV0iBUqIaKxGPKgRYZNng==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dismissable": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/focus-trap": "1.15.0",
-        "@zag-js/interact-outside": "1.15.0",
-        "@zag-js/popper": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dismissable": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/focus-trap": "1.15.2",
+        "@zag-js/interact-outside": "1.15.2",
+        "@zag-js/popper": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/tree-view": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/tree-view/-/tree-view-1.15.0.tgz",
-      "integrity": "sha512-wqdd+hu1bDOCWtnZ8MarRFHqbZF2t8qKBM3kO42IBq7jTI/93LCkHSlceEPft9dgZ6Ea9km0YJMHhoTqCPZ/fw==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/tree-view/-/tree-view-1.15.2.tgz",
+      "integrity": "sha512-HWDHH3rpGEz3IN5bsj8EHZnU0ttk8uJwBOnH3reYcFQEQskA8cmyzd7y9hdBEn8PzAns+iOjUBj49IVmoYpOIg==",
       "license": "MIT",
       "dependencies": {
-        "@zag-js/anatomy": "1.15.0",
-        "@zag-js/collection": "1.15.0",
-        "@zag-js/core": "1.15.0",
-        "@zag-js/dom-query": "1.15.0",
-        "@zag-js/types": "1.15.0",
-        "@zag-js/utils": "1.15.0"
+        "@zag-js/anatomy": "1.15.2",
+        "@zag-js/collection": "1.15.2",
+        "@zag-js/core": "1.15.2",
+        "@zag-js/dom-query": "1.15.2",
+        "@zag-js/types": "1.15.2",
+        "@zag-js/utils": "1.15.2"
       }
     },
     "node_modules/@zag-js/types": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/types/-/types-1.15.0.tgz",
-      "integrity": "sha512-lV2ov2M07BlmjDUCSwBeHxPApHI3oAiLytG94AqcYvQ0BtsCRo5T60yRQ0syFc6fHf0e9+kwt89uoIgfGFYfmw==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/types/-/types-1.15.2.tgz",
+      "integrity": "sha512-qEHNRA/uOYQjvXzI/ie6vuOD74/p7w6MA4X1VoZEYF2/sbIQjlRn6SzpeV3RyFZBzl6WBO6RqV/XEbgpvGSb5w==",
       "license": "MIT",
       "dependencies": {
         "csstype": "3.1.3"
       }
     },
     "node_modules/@zag-js/utils": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/utils/-/utils-1.15.0.tgz",
-      "integrity": "sha512-XctFny5H8C00BsougV40Yp0qVEj9M2d/NRme7B33mon9wG+3hscZwP6miJmF6BYI5Pgu6e2P0Sv45FddQU1Tkg==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/@zag-js/utils/-/utils-1.15.2.tgz",
+      "integrity": "sha512-JdlyGT6yfG2ub2FftrB6BidIlvD04cSwdKYJGb/M+NJ7p7uxnZUZMxAjeBmTLhM1nWbtJPVq3oDTYz/cBBZLng==",
       "license": "MIT"
     },
     "node_modules/acorn": {
-      "version": "8.14.0",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
-      "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+      "version": "8.15.0",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+      "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
       "dev": true,
+      "license": "MIT",
       "bin": {
         "acorn": "bin/acorn"
       },
@@ -3640,9 +3659,9 @@
       }
     },
     "node_modules/axios": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz",
-      "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==",
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz",
+      "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==",
       "license": "MIT",
       "dependencies": {
         "follow-redirects": "^1.15.6",
@@ -4653,19 +4672,19 @@
       }
     },
     "node_modules/eslint": {
-      "version": "9.28.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.28.0.tgz",
-      "integrity": "sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==",
+      "version": "9.29.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz",
+      "integrity": "sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.2.0",
         "@eslint-community/regexpp": "^4.12.1",
-        "@eslint/config-array": "^0.20.0",
+        "@eslint/config-array": "^0.20.1",
         "@eslint/config-helpers": "^0.2.1",
         "@eslint/core": "^0.14.0",
         "@eslint/eslintrc": "^3.3.1",
-        "@eslint/js": "9.28.0",
+        "@eslint/js": "9.29.0",
         "@eslint/plugin-kit": "^0.3.1",
         "@humanfs/node": "^0.16.6",
         "@humanwhocodes/module-importer": "^1.0.1",
@@ -4677,9 +4696,9 @@
         "cross-spawn": "^7.0.6",
         "debug": "^4.3.2",
         "escape-string-regexp": "^4.0.0",
-        "eslint-scope": "^8.3.0",
-        "eslint-visitor-keys": "^4.2.0",
-        "espree": "^10.3.0",
+        "eslint-scope": "^8.4.0",
+        "eslint-visitor-keys": "^4.2.1",
+        "espree": "^10.4.0",
         "esquery": "^1.5.0",
         "esutils": "^2.0.2",
         "fast-deep-equal": "^3.1.3",
@@ -4770,14 +4789,14 @@
       }
     },
     "node_modules/eslint-plugin-perfectionist": {
-      "version": "4.14.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-4.14.0.tgz",
-      "integrity": "sha512-BkhiOqzdum8vQSFgj1/q5+6UUWPMn4GELdxuX7uIsGegmAeH/+LnWsiVxgMrxalD0p68sYfMeKaHF1NfrpI/mg==",
+      "version": "4.15.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-4.15.0.tgz",
+      "integrity": "sha512-pC7PgoXyDnEXe14xvRUhBII8A3zRgggKqJFx2a82fjrItDs1BSI7zdZnQtM2yQvcyod6/ujmzb7ejKPx8lZTnw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "^8.33.1",
-        "@typescript-eslint/utils": "^8.33.1",
+        "@typescript-eslint/types": "^8.34.1",
+        "@typescript-eslint/utils": "^8.34.1",
         "natural-orderby": "^5.0.0"
       },
       "engines": {
@@ -4788,9 +4807,9 @@
       }
     },
     "node_modules/eslint-plugin-prettier": {
-      "version": "5.4.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.1.tgz",
-      "integrity": "sha512-9dF+KuU/Ilkq27A8idRP7N2DH8iUR6qXcjF3FR2wETY21PZdBrIjwCau8oboyGj9b7etWmTGEeM8e7oOed6ZWg==",
+      "version": "5.5.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.0.tgz",
+      "integrity": "sha512-8qsOYwkkGrahrgoUv76NZi23koqXOGiiEzXMrT8Q7VcYaUISR+5MorIUxfWqYXN0fN/31WbSrxCxFkVQ43wwrA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4980,9 +4999,9 @@
       }
     },
     "node_modules/eslint-scope": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
-      "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
+      "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
@@ -4997,9 +5016,9 @@
       }
     },
     "node_modules/eslint-visitor-keys": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
-      "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+      "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
       "dev": true,
       "license": "Apache-2.0",
       "engines": {
@@ -5037,15 +5056,15 @@
       }
     },
     "node_modules/espree": {
-      "version": "10.3.0",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
-      "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
+      "version": "10.4.0",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+      "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "acorn": "^8.14.0",
+        "acorn": "^8.15.0",
         "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^4.2.0"
+        "eslint-visitor-keys": "^4.2.1"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5653,13 +5672,14 @@
       }
     },
     "node_modules/happy-dom": {
-      "version": "17.6.3",
-      "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-17.6.3.tgz",
-      "integrity": "sha512-UVIHeVhxmxedbWPCfgS55Jg2rDfwf2BCKeylcPSqazLz5w3Kri7Q4xdBJubsr/+VUzFLh0VjIvh13RaDA2/Xug==",
+      "version": "18.0.1",
+      "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-18.0.1.tgz",
+      "integrity": "sha512-qn+rKOW7KWpVTtgIUi6RVmTBZJSe2k0Db0vh1f7CWrWclkkc7/Q+FrOfkZIb2eiErLyqu5AXEzE7XthO9JVxRA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "webidl-conversions": "^7.0.0",
+        "@types/node": "^20.0.0",
+        "@types/whatwg-mimetype": "^3.0.2",
         "whatwg-mimetype": "^3.0.0"
       },
       "engines": {
@@ -6482,9 +6502,9 @@
       }
     },
     "node_modules/loupe": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz",
-      "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==",
+      "version": "3.1.4",
+      "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.4.tgz",
+      "integrity": "sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==",
       "dev": true,
       "license": "MIT"
     },
@@ -7212,9 +7232,9 @@
       }
     },
     "node_modules/prettier": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
-      "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.0.tgz",
+      "integrity": "sha512-ujSB9uXHJKzM/2GBuE0hBOUgC77CN3Bnpqa+g80bkv3T3A93wL/xlzDATHhnhkzifz/UE2SNOvmbTz5hSkDlHw==",
       "dev": true,
       "license": "MIT",
       "bin": {
@@ -7383,9 +7403,9 @@
       }
     },
     "node_modules/react-hook-form": {
-      "version": "7.57.0",
-      "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.57.0.tgz",
-      "integrity": "sha512-RbEks3+cbvTP84l/VXGUZ+JMrKOS8ykQCRYdm5aYsxnDquL0vspsyNhGRO7pcH6hsZqWlPOjLye7rJqdtdAmlg==",
+      "version": "7.58.1",
+      "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.58.1.tgz",
+      "integrity": "sha512-Lml/KZYEEFfPhUVgE0RdCVpnC4yhW+PndRhbiTtdvSlQTL8IfVR+iQkBjLIvmmc6+GGoVeM11z37ktKFPAb0FA==",
       "license": "MIT",
       "engines": {
         "node": ">=18.0.0"
@@ -8324,9 +8344,9 @@
       }
     },
     "node_modules/tinypool": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.0.tgz",
-      "integrity": "sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz",
+      "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -8500,15 +8520,15 @@
       }
     },
     "node_modules/typescript-eslint": {
-      "version": "8.34.0",
-      "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.34.0.tgz",
-      "integrity": "sha512-MRpfN7uYjTrTGigFCt8sRyNqJFhjN0WwZecldaqhWm+wy0gaRt8Edb/3cuUy0zdq2opJWT6iXINKAtewnDOltQ==",
+      "version": "8.34.1",
+      "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.34.1.tgz",
+      "integrity": "sha512-XjS+b6Vg9oT1BaIUfkW3M3LvqZE++rbzAMEHuccCfO/YkP43ha6w3jTEMilQxMF92nVOYCcdjv1ZUhAa1D/0ow==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/eslint-plugin": "8.34.0",
-        "@typescript-eslint/parser": "8.34.0",
-        "@typescript-eslint/utils": "8.34.0"
+        "@typescript-eslint/eslint-plugin": "8.34.1",
+        "@typescript-eslint/parser": "8.34.1",
+        "@typescript-eslint/utils": "8.34.1"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -8560,6 +8580,13 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/undici-types": {
+      "version": "6.21.0",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+      "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/universal-cookie": {
       "version": "8.0.1",
       "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-8.0.1.tgz",
@@ -8692,9 +8719,9 @@
       }
     },
     "node_modules/vite-node": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.3.tgz",
-      "integrity": "sha512-gc8aAifGuDIpZHrPjuHyP4dpQmYXqWw7D1GmDnWeNWP654UEXzVfQ5IHPSK5HaHkwB/+p1atpYpSdw/2kOv8iQ==",
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz",
+      "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -8759,20 +8786,20 @@
       }
     },
     "node_modules/vitest": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.3.tgz",
-      "integrity": "sha512-E6U2ZFXe3N/t4f5BwUaVCKRLHqUpk1CBWeMh78UT4VaTPH/2dyvH6ALl29JTovEPu9dVKr/K/J4PkXgrMbw4Ww==",
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz",
+      "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@types/chai": "^5.2.2",
-        "@vitest/expect": "3.2.3",
-        "@vitest/mocker": "3.2.3",
-        "@vitest/pretty-format": "^3.2.3",
-        "@vitest/runner": "3.2.3",
-        "@vitest/snapshot": "3.2.3",
-        "@vitest/spy": "3.2.3",
-        "@vitest/utils": "3.2.3",
+        "@vitest/expect": "3.2.4",
+        "@vitest/mocker": "3.2.4",
+        "@vitest/pretty-format": "^3.2.4",
+        "@vitest/runner": "3.2.4",
+        "@vitest/snapshot": "3.2.4",
+        "@vitest/spy": "3.2.4",
+        "@vitest/utils": "3.2.4",
         "chai": "^5.2.0",
         "debug": "^4.4.1",
         "expect-type": "^1.2.1",
@@ -8783,10 +8810,10 @@
         "tinybench": "^2.9.0",
         "tinyexec": "^0.3.2",
         "tinyglobby": "^0.2.14",
-        "tinypool": "^1.1.0",
+        "tinypool": "^1.1.1",
         "tinyrainbow": "^2.0.0",
         "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0",
-        "vite-node": "3.2.3",
+        "vite-node": "3.2.4",
         "why-is-node-running": "^2.3.0"
       },
       "bin": {
@@ -8802,8 +8829,8 @@
         "@edge-runtime/vm": "*",
         "@types/debug": "^4.1.12",
         "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
-        "@vitest/browser": "3.2.3",
-        "@vitest/ui": "3.2.3",
+        "@vitest/browser": "3.2.4",
+        "@vitest/ui": "3.2.4",
         "happy-dom": "*",
         "jsdom": "*"
       },
@@ -8851,15 +8878,6 @@
         "url": "https://github.com/sponsors/jonschlinkert"
       }
     },
-    "node_modules/webidl-conversions": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
-      "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
-      "dev": true,
-      "engines": {
-        "node": ">=12"
-      }
-    },
     "node_modules/whatwg-mimetype": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz",
diff --git a/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/package.json b/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/package.json
index f15fc2cad77a0..02e02d336671e 100644
--- a/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/package.json
+++ b/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/package.json
@@ -15,42 +15,42 @@
     "coverage": "vitest run --coverage"
   },
   "dependencies": {
-    "@chakra-ui/react": "^3.20.0",
-    "@tanstack/react-query": "^5.80.6",
-    "axios": "^1.9.0",
+    "@chakra-ui/react": "^3.21.0",
+    "@tanstack/react-query": "^5.81.2",
+    "axios": "^1.10.0",
     "next-themes": "^0.4.6",
     "react": "^19.1.0",
     "react-cookie": "^8.0.1",
     "react-dom": "^19.1.0",
-    "react-hook-form": "^7.57.0",
+    "react-hook-form": "^7.58.1",
     "react-router-dom": "^7.6.2"
   },
   "devDependencies": {
     "@7nohe/openapi-react-query-codegen": "^1.6.2",
-    "@eslint/compat": "^1.2.9",
-    "@eslint/js": "^9.28.0",
-    "@stylistic/eslint-plugin": "^4.4.1",
+    "@eslint/compat": "^1.3.0",
+    "@eslint/js": "^9.29.0",
+    "@stylistic/eslint-plugin": "^5.0.0",
     "@testing-library/jest-dom": "^6.6.3",
     "@testing-library/react": "^16.3.0",
     "@trivago/prettier-plugin-sort-imports": "^5.2.2",
-    "@types/react": "^19.1.7",
+    "@types/react": "^19.1.8",
     "@types/react-dom": "^19.1.6",
     "@vitejs/plugin-react-swc": "^3.10.2",
-    "eslint": "^9.28.0",
+    "eslint": "^9.29.0",
     "eslint-config-prettier": "^10.1.5",
     "eslint-plugin-jsx-a11y": "^6.10.2",
-    "eslint-plugin-perfectionist": "^4.14.0",
-    "eslint-plugin-prettier": "^5.4.1",
+    "eslint-plugin-perfectionist": "^4.15.0",
+    "eslint-plugin-prettier": "^5.5.0",
     "eslint-plugin-react": "^7.37.5",
     "eslint-plugin-react-hooks": "^5.2.0",
     "eslint-plugin-react-refresh": "^0.4.20",
     "eslint-plugin-unicorn": "^59.0.1",
-    "happy-dom": "^17.6.3",
-    "prettier": "^3.5.3",
+    "happy-dom": "^18.0.1",
+    "prettier": "^3.6.0",
     "typescript": "~5.8.3",
-    "typescript-eslint": "^8.34.0",
+    "typescript-eslint": "^8.34.1",
     "vite": "^6.3.5",
     "vite-plugin-css-injected-by-js": "^3.5.2",
-    "vitest": "^3.2.3"
+    "vitest": "^3.2.4"
   }
 }
diff --git a/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/pnpm-lock.yaml b/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/pnpm-lock.yaml
index 824b7750660ac..3302c76ba18c6 100644
--- a/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/pnpm-lock.yaml
+++ b/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/pnpm-lock.yaml
@@ -9,14 +9,14 @@ importers:
   .:
     dependencies:
       '@chakra-ui/react':
-        specifier: ^3.20.0
-        version: 3.20.0(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+        specifier: ^3.21.0
+        version: 3.21.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
       '@tanstack/react-query':
-        specifier: ^5.80.6
-        version: 5.80.6(react@19.1.0)
+        specifier: ^5.81.2
+        version: 5.81.2(react@19.1.0)
       axios:
-        specifier: ^1.9.0
-        version: 1.9.0
+        specifier: ^1.10.0
+        version: 1.10.0
       next-themes:
         specifier: ^0.4.6
         version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
@@ -30,8 +30,8 @@ importers:
         specifier: ^19.1.0
         version: 19.1.0(react@19.1.0)
       react-hook-form:
-        specifier: ^7.57.0
-        version: 7.57.0(react@19.1.0)
+        specifier: ^7.58.1
+        version: 7.58.1(react@19.1.0)
       react-router-dom:
         specifier: ^7.6.2
         version: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
@@ -40,80 +40,80 @@ importers:
         specifier: ^1.6.2
         version: 1.6.2(commander@12.1.0)(glob@10.4.5)(magicast@0.3.5)(ts-morph@22.0.0)(typescript@5.8.3)
       '@eslint/compat':
-        specifier: ^1.2.9
-        version: 1.2.9(eslint@9.28.0(jiti@1.21.7))
+        specifier: ^1.3.0
+        version: 1.3.0(eslint@9.29.0(jiti@1.21.7))
       '@eslint/js':
-        specifier: ^9.28.0
-        version: 9.28.0
+        specifier: ^9.29.0
+        version: 9.29.0
       '@stylistic/eslint-plugin':
-        specifier: ^4.4.1
-        version: 4.4.1(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3)
+        specifier: ^5.0.0
+        version: 5.0.0(eslint@9.29.0(jiti@1.21.7))
       '@testing-library/jest-dom':
         specifier: ^6.6.3
         version: 6.6.3
       '@testing-library/react':
         specifier: ^16.3.0
-        version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+        version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
       '@trivago/prettier-plugin-sort-imports':
         specifier: ^5.2.2
-        version: 5.2.2(prettier@3.5.3)
+        version: 5.2.2(prettier@3.6.0)
       '@types/react':
-        specifier: ^19.1.7
-        version: 19.1.7
+        specifier: ^19.1.8
+        version: 19.1.8
       '@types/react-dom':
         specifier: ^19.1.6
-        version: 19.1.6(@types/react@19.1.7)
+        version: 19.1.6(@types/react@19.1.8)
       '@vitejs/plugin-react-swc':
         specifier: ^3.10.2
-        version: 3.10.2(@swc/helpers@0.5.17)(vite@6.3.5(jiti@1.21.7))
+        version: 3.10.2(@swc/helpers@0.5.17)(vite@6.3.5(@types/node@20.19.1)(jiti@1.21.7))
       eslint:
-        specifier: ^9.28.0
-        version: 9.28.0(jiti@1.21.7)
+        specifier: ^9.29.0
+        version: 9.29.0(jiti@1.21.7)
       eslint-config-prettier:
         specifier: ^10.1.5
-        version: 10.1.5(eslint@9.28.0(jiti@1.21.7))
+        version: 10.1.5(eslint@9.29.0(jiti@1.21.7))
       eslint-plugin-jsx-a11y:
         specifier: ^6.10.2
-        version: 6.10.2(eslint@9.28.0(jiti@1.21.7))
+        version: 6.10.2(eslint@9.29.0(jiti@1.21.7))
       eslint-plugin-perfectionist:
-        specifier: ^4.14.0
-        version: 4.14.0(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3)
+        specifier: ^4.15.0
+        version: 4.15.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
       eslint-plugin-prettier:
-        specifier: ^5.4.1
-        version: 5.4.1(eslint-config-prettier@10.1.5(eslint@9.28.0(jiti@1.21.7)))(eslint@9.28.0(jiti@1.21.7))(prettier@3.5.3)
+        specifier: ^5.5.0
+        version: 5.5.0(eslint-config-prettier@10.1.5(eslint@9.29.0(jiti@1.21.7)))(eslint@9.29.0(jiti@1.21.7))(prettier@3.6.0)
       eslint-plugin-react:
         specifier: ^7.37.5
-        version: 7.37.5(eslint@9.28.0(jiti@1.21.7))
+        version: 7.37.5(eslint@9.29.0(jiti@1.21.7))
       eslint-plugin-react-hooks:
         specifier: ^5.2.0
-        version: 5.2.0(eslint@9.28.0(jiti@1.21.7))
+        version: 5.2.0(eslint@9.29.0(jiti@1.21.7))
       eslint-plugin-react-refresh:
         specifier: ^0.4.20
-        version: 0.4.20(eslint@9.28.0(jiti@1.21.7))
+        version: 0.4.20(eslint@9.29.0(jiti@1.21.7))
       eslint-plugin-unicorn:
         specifier: ^59.0.1
-        version: 59.0.1(eslint@9.28.0(jiti@1.21.7))
+        version: 59.0.1(eslint@9.29.0(jiti@1.21.7))
       happy-dom:
-        specifier: ^17.6.3
-        version: 17.6.3
+        specifier: ^18.0.1
+        version: 18.0.1
       prettier:
-        specifier: ^3.5.3
-        version: 3.5.3
+        specifier: ^3.6.0
+        version: 3.6.0
       typescript:
         specifier: ~5.8.3
         version: 5.8.3
       typescript-eslint:
-        specifier: ^8.34.0
-        version: 8.34.0(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3)
+        specifier: ^8.34.1
+        version: 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
       vite:
         specifier: ^6.3.5
-        version: 6.3.5(jiti@1.21.7)
+        version: 6.3.5(@types/node@20.19.1)(jiti@1.21.7)
       vite-plugin-css-injected-by-js:
         specifier: ^3.5.2
-        version: 3.5.2(vite@6.3.5(jiti@1.21.7))
+        version: 3.5.2(vite@6.3.5(@types/node@20.19.1)(jiti@1.21.7))
       vitest:
-        specifier: ^3.2.3
-        version: 3.2.3(happy-dom@17.6.3)(jiti@1.21.7)
+        specifier: ^3.2.4
+        version: 3.2.4(@types/node@20.19.1)(happy-dom@18.0.1)(jiti@1.21.7)
 
 packages:
 
@@ -134,8 +134,8 @@ packages:
     resolution: {integrity: sha512-9K6xOqeevacvweLGik6LnZCb1fBtCOSIWQs8d096XGeqoLKC33UVMGz9+77Gw44KvbH4pKcQPWo4ZpxkXYj05w==}
     engines: {node: '>= 16'}
 
-  '@ark-ui/react@5.12.0':
-    resolution: {integrity: sha512-UV89EqyESZoyr6rtvrbFJn/FejpswhvRVcfK44dZDU6h6UY8CxfR/6Ayvrq9UtFdD0dEawqwWrXS22l8Y05Nnw==}
+  '@ark-ui/react@5.14.0':
+    resolution: {integrity: sha512-7WWlCM3SowtF01e9NouuO4T6SYuKTM1dovR+2NZuuWTlqTBlvZ+1vPHS6BeqzXriwMLU7QUU+Y0i/TcI6/s/Sg==}
     peerDependencies:
       react: '>=18.0.0'
       react-dom: '>=18.0.0'
@@ -206,8 +206,8 @@ packages:
     resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==}
     engines: {node: '>=6.9.0'}
 
-  '@chakra-ui/react@3.20.0':
-    resolution: {integrity: sha512-zHYQAUqrT2pZZ/Xi+sskRC/An9q4ZelLPJkFHdobftTYkcFo1FtkMbBO0AEBZhb/6mZGyfw3JLflSawkuR++uQ==}
+  '@chakra-ui/react@3.21.0':
+    resolution: {integrity: sha512-Ajw6GuUhfNhMagTM9cO1Lg/w/HSQUwsv55j2QvvvPw/dk01wHiGi1aihfuCLpa6QY4ElLNs6SS3f78xI9Fwo6A==}
     peerDependencies:
       '@emotion/react': '>=11'
       react: '>=18'
@@ -417,8 +417,8 @@ packages:
     resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
     engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
 
-  '@eslint/compat@1.2.9':
-    resolution: {integrity: sha512-gCdSY54n7k+driCadyMNv8JSPzYLeDVM/ikZRtvtROBpRdFSkS8W9A82MqsaY7lZuwL0wiapgD0NT1xT0hyJsA==}
+  '@eslint/compat@1.3.0':
+    resolution: {integrity: sha512-ZBygRBqpDYiIHsN+d1WyHn3TYgzgpzLEcgJUxTATyiInQbKZz6wZb6+ljwdg8xeeOe4v03z6Uh6lELiw0/mVhQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       eslint: ^9.10.0
@@ -426,12 +426,12 @@ packages:
       eslint:
         optional: true
 
-  '@eslint/config-array@0.20.0':
-    resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==}
+  '@eslint/config-array@0.20.1':
+    resolution: {integrity: sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@eslint/config-helpers@0.2.2':
-    resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==}
+  '@eslint/config-helpers@0.2.3':
+    resolution: {integrity: sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
   '@eslint/core@0.13.0':
@@ -442,12 +442,16 @@ packages:
     resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
+  '@eslint/core@0.15.0':
+    resolution: {integrity: sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
   '@eslint/eslintrc@3.3.1':
     resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@eslint/js@9.28.0':
-    resolution: {integrity: sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==}
+  '@eslint/js@9.29.0':
+    resolution: {integrity: sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
   '@eslint/object-schema@2.1.6':
@@ -458,8 +462,8 @@ packages:
     resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@eslint/plugin-kit@0.3.1':
-    resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==}
+  '@eslint/plugin-kit@0.3.2':
+    resolution: {integrity: sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
   '@floating-ui/core@1.7.1':
@@ -498,11 +502,11 @@ packages:
     resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
     engines: {node: '>=18.18'}
 
-  '@internationalized/date@3.8.1':
-    resolution: {integrity: sha512-PgVE6B6eIZtzf9Gu5HvJxRK3ufUFz9DhspELuhW/N0GuMGMTLvPQNRkHP2hTuP9lblOk+f+1xi96sPiPXANXAA==}
+  '@internationalized/date@3.8.2':
+    resolution: {integrity: sha512-/wENk7CbvLbkUvX1tu0mwq49CVkkWpkXubGel6birjRPyo6uQ4nQpnq5xZu823zRCwwn82zgHrvgF1vZyvmVgA==}
 
-  '@internationalized/number@3.6.2':
-    resolution: {integrity: sha512-E5QTOlMg9wo5OrKdHD6edo1JJlIoOsylh0+mbf0evi1tHJwMZfJSaBpGtnJV9N7w3jeiioox9EG/EWRWPh82vg==}
+  '@internationalized/number@3.6.3':
+    resolution: {integrity: sha512-p+Zh1sb6EfrfVaS86jlHGQ9HA66fJhV9x5LiE5vCbZtXEHAuhcmUZUdZ4WrFpUBfNalr2OkAJI5AcKEQF+Lebw==}
 
   '@isaacs/cliui@8.0.2':
     resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
@@ -655,8 +659,8 @@ packages:
     cpu: [x64]
     os: [win32]
 
-  '@stylistic/eslint-plugin@4.4.1':
-    resolution: {integrity: sha512-CEigAk7eOLyHvdgmpZsKFwtiqS2wFwI1fn4j09IU9GmD4euFM4jEBAViWeCqaNLlbX2k2+A/Fq9cje4HQBXuJQ==}
+  '@stylistic/eslint-plugin@5.0.0':
+    resolution: {integrity: sha512-nVV2FSzeTJ3oFKw+3t9gQYQcrgbopgCASSY27QOtkhEGgSfdQQjDmzZd41NeT1myQ8Wc6l+pZllST9qIu4NKzg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       eslint: '>=9.0.0'
@@ -739,11 +743,11 @@ packages:
   '@swc/types@0.1.22':
     resolution: {integrity: sha512-D13mY/ZA4PPEFSy6acki9eBT/3WgjMoRqNcdpIvjaYLQ44Xk5BdaL7UkDxAh6Z9UOe7tCCp67BVmZCojYp9owg==}
 
-  '@tanstack/query-core@5.80.6':
-    resolution: {integrity: sha512-nl7YxT/TAU+VTf+e2zTkObGTyY8YZBMnbgeA1ee66lIVqzKlYursAII6z5t0e6rXgwUMJSV4dshBTNacNpZHbQ==}
+  '@tanstack/query-core@5.81.2':
+    resolution: {integrity: sha512-QLYkPdrudoMATDFa3MiLEwRhNnAlzHWDf0LKaXUqJd0/+QxN8uTPi7bahRlxoAyH0UbLMBdeDbYzWALj7THOtw==}
 
-  '@tanstack/react-query@5.80.6':
-    resolution: {integrity: sha512-izX+5CnkpON3NQGcEm3/d7LfFQNo9ZpFtX2QsINgCYK9LT2VCIdi8D3bMaMSNhrAJCznRoAkFic76uvLroALBw==}
+  '@tanstack/react-query@5.81.2':
+    resolution: {integrity: sha512-pe8kFlTrL2zFLlcAj2kZk9UaYYHDk9/1hg9EBaoO3cxDhOZf1FRGJeziSXKrVZyxIfs7b3aoOj/bw7Lie0mDUg==}
     peerDependencies:
       react: ^18 || ^19
 
@@ -810,6 +814,9 @@ packages:
   '@types/json-schema@7.0.15':
     resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
 
+  '@types/node@20.19.1':
+    resolution: {integrity: sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA==}
+
   '@types/parse-json@4.0.2':
     resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
 
@@ -818,103 +825,69 @@ packages:
     peerDependencies:
       '@types/react': ^19.0.0
 
-  '@types/react@19.1.7':
-    resolution: {integrity: sha512-BnsPLV43ddr05N71gaGzyZ5hzkCmGwhMvYc8zmvI8Ci1bRkkDSzDDVfAXfN2tk748OwI7ediiPX6PfT9p0QGVg==}
+  '@types/react@19.1.8':
+    resolution: {integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==}
 
-  '@typescript-eslint/eslint-plugin@8.34.0':
-    resolution: {integrity: sha512-QXwAlHlbcAwNlEEMKQS2RCgJsgXrTJdjXT08xEgbPFa2yYQgVjBymxP5DrfrE7X7iodSzd9qBUHUycdyVJTW1w==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      '@typescript-eslint/parser': ^8.34.0
-      eslint: ^8.57.0 || ^9.0.0
-      typescript: '>=4.8.4 <5.9.0'
+  '@types/whatwg-mimetype@3.0.2':
+    resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==}
 
-  '@typescript-eslint/parser@8.34.0':
-    resolution: {integrity: sha512-vxXJV1hVFx3IXz/oy2sICsJukaBrtDEQSBiV48/YIV5KWjX1dO+bcIr/kCPrW6weKXvsaGKFNlwH0v2eYdRRbA==}
+  '@typescript-eslint/eslint-plugin@8.34.1':
+    resolution: {integrity: sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
+      '@typescript-eslint/parser': ^8.34.1
       eslint: ^8.57.0 || ^9.0.0
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/project-service@8.33.1':
-    resolution: {integrity: sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw==}
+  '@typescript-eslint/parser@8.34.1':
+    resolution: {integrity: sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
+      eslint: ^8.57.0 || ^9.0.0
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/project-service@8.34.0':
-    resolution: {integrity: sha512-iEgDALRf970/B2YExmtPMPF54NenZUf4xpL3wsCRx/lgjz6ul/l13R81ozP/ZNuXfnLCS+oPmG7JIxfdNYKELw==}
+  '@typescript-eslint/project-service@8.34.1':
+    resolution: {integrity: sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/scope-manager@8.33.1':
-    resolution: {integrity: sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==}
+  '@typescript-eslint/scope-manager@8.34.1':
+    resolution: {integrity: sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@typescript-eslint/scope-manager@8.34.0':
-    resolution: {integrity: sha512-9Ac0X8WiLykl0aj1oYQNcLZjHgBojT6cW68yAgZ19letYu+Hxd0rE0veI1XznSSst1X5lwnxhPbVdwjDRIomRw==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@typescript-eslint/tsconfig-utils@8.33.1':
-    resolution: {integrity: sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==}
+  '@typescript-eslint/tsconfig-utils@8.34.1':
+    resolution: {integrity: sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/tsconfig-utils@8.34.0':
-    resolution: {integrity: sha512-+W9VYHKFIzA5cBeooqQxqNriAP0QeQ7xTiDuIOr71hzgffm3EL2hxwWBIIj4GuofIbKxGNarpKqIq6Q6YrShOA==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      typescript: '>=4.8.4 <5.9.0'
-
-  '@typescript-eslint/type-utils@8.34.0':
-    resolution: {integrity: sha512-n7zSmOcUVhcRYC75W2pnPpbO1iwhJY3NLoHEtbJwJSNlVAZuwqu05zY3f3s2SDWWDSo9FdN5szqc73DCtDObAg==}
+  '@typescript-eslint/type-utils@8.34.1':
+    resolution: {integrity: sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/types@8.33.1':
-    resolution: {integrity: sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@typescript-eslint/types@8.34.0':
-    resolution: {integrity: sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==}
+  '@typescript-eslint/types@8.34.1':
+    resolution: {integrity: sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@typescript-eslint/typescript-estree@8.33.1':
-    resolution: {integrity: sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==}
+  '@typescript-eslint/typescript-estree@8.34.1':
+    resolution: {integrity: sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/typescript-estree@8.34.0':
-    resolution: {integrity: sha512-rOi4KZxI7E0+BMqG7emPSK1bB4RICCpF7QD3KCLXn9ZvWoESsOMlHyZPAHyG04ujVplPaHbmEvs34m+wjgtVtg==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      typescript: '>=4.8.4 <5.9.0'
-
-  '@typescript-eslint/utils@8.33.1':
-    resolution: {integrity: sha512-52HaBiEQUaRYqAXpfzWSR2U3gxk92Kw006+xZpElaPMg3C4PgM+A5LqwoQI1f9E5aZ/qlxAZxzm42WX+vn92SQ==}
+  '@typescript-eslint/utils@8.34.1':
+    resolution: {integrity: sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/utils@8.34.0':
-    resolution: {integrity: sha512-8L4tWatGchV9A1cKbjaavS6mwYwp39jql8xUmIIKJdm+qiaeHy5KMKlBrf30akXAWBzn2SqKsNOtSENWUwg7XQ==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0
-      typescript: '>=4.8.4 <5.9.0'
-
-  '@typescript-eslint/visitor-keys@8.33.1':
-    resolution: {integrity: sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@typescript-eslint/visitor-keys@8.34.0':
-    resolution: {integrity: sha512-qHV7pW7E85A0x6qyrFn+O+q1k1p3tQCsqIZ1KZ5ESLXY57aTvUd3/a4rdPTeXisvhXn2VQG0VSKUqs8KHF2zcA==}
+  '@typescript-eslint/visitor-keys@8.34.1':
+    resolution: {integrity: sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
   '@vitejs/plugin-react-swc@3.10.2':
@@ -922,11 +895,11 @@ packages:
     peerDependencies:
       vite: ^4 || ^5 || ^6 || ^7.0.0-beta.0
 
-  '@vitest/expect@3.2.3':
-    resolution: {integrity: sha512-W2RH2TPWVHA1o7UmaFKISPvdicFJH+mjykctJFoAkUw+SPTJTGjUNdKscFBrqM7IPnCVu6zihtKYa7TkZS1dkQ==}
+  '@vitest/expect@3.2.4':
+    resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==}
 
-  '@vitest/mocker@3.2.3':
-    resolution: {integrity: sha512-cP6fIun+Zx8he4rbWvi+Oya6goKQDZK+Yq4hhlggwQBbrlOQ4qtZ+G4nxB6ZnzI9lyIb+JnvyiJnPC2AGbKSPA==}
+  '@vitest/mocker@3.2.4':
+    resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==}
     peerDependencies:
       msw: ^2.4.9
       vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0
@@ -936,238 +909,238 @@ packages:
       vite:
         optional: true
 
-  '@vitest/pretty-format@3.2.3':
-    resolution: {integrity: sha512-yFglXGkr9hW/yEXngO+IKMhP0jxyFw2/qys/CK4fFUZnSltD+MU7dVYGrH8rvPcK/O6feXQA+EU33gjaBBbAng==}
+  '@vitest/pretty-format@3.2.4':
+    resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==}
 
-  '@vitest/runner@3.2.3':
-    resolution: {integrity: sha512-83HWYisT3IpMaU9LN+VN+/nLHVBCSIUKJzGxC5RWUOsK1h3USg7ojL+UXQR3b4o4UBIWCYdD2fxuzM7PQQ1u8w==}
+  '@vitest/runner@3.2.4':
+    resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==}
 
-  '@vitest/snapshot@3.2.3':
-    resolution: {integrity: sha512-9gIVWx2+tysDqUmmM1L0hwadyumqssOL1r8KJipwLx5JVYyxvVRfxvMq7DaWbZZsCqZnu/dZedaZQh4iYTtneA==}
+  '@vitest/snapshot@3.2.4':
+    resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==}
 
-  '@vitest/spy@3.2.3':
-    resolution: {integrity: sha512-JHu9Wl+7bf6FEejTCREy+DmgWe+rQKbK+y32C/k5f4TBIAlijhJbRBIRIOCEpVevgRsCQR2iHRUH2/qKVM/plw==}
+  '@vitest/spy@3.2.4':
+    resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==}
 
-  '@vitest/utils@3.2.3':
-    resolution: {integrity: sha512-4zFBCU5Pf+4Z6v+rwnZ1HU1yzOKKvDkMXZrymE2PBlbjKJRlrOxbvpfPSvJTGRIwGoahaOGvp+kbCoxifhzJ1Q==}
+  '@vitest/utils@3.2.4':
+    resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
 
-  '@zag-js/accordion@1.15.0':
-    resolution: {integrity: sha512-EKNeuKx+lOQ/deCe/ApCjVPxpxpDwT2NXvMPL+YvqXmSv7hAnTLs9fDKjbDUQUMmsyx32BsBd8t6d17DL3rPXg==}
+  '@zag-js/accordion@1.15.2':
+    resolution: {integrity: sha512-4ooxmmnEDeRLPLOCsrQeLHcTj+xTqBHm6pYEdho/pb67lHujAUSnbfEryorBSfvJEWdiUTYts96EfsLfbn5SYA==}
 
-  '@zag-js/anatomy@1.15.0':
-    resolution: {integrity: sha512-r0l5I7mSsF35HdwXm22TppNhfVftFuqvKfHvTUw+wQZhni4eUL93HypJD0Fl7mDhtP5zfVGfBwR048OzD0+tCw==}
+  '@zag-js/anatomy@1.15.2':
+    resolution: {integrity: sha512-GiWZk+fqO/W15FIRVhUL237xZmYMm/gcrp8b4VJGLpZE4qaQaBd4kSYObhIl/7AnLC45VjKbV7c8fLxZKd/5kA==}
 
-  '@zag-js/angle-slider@1.15.0':
-    resolution: {integrity: sha512-xIZBa9V6d05uK7+XQVhfdsThqbZKimSYVxtMOWJfG0sKn63N9VGPxL1OtOMq7FA4IP3SyvlelsGt+3t82TUiyA==}
+  '@zag-js/angle-slider@1.15.2':
+    resolution: {integrity: sha512-ItcDlKHJbPFfPGmmiCGcWcd0Y8xC+WH5Dji7+uzBl40L9hh8si7/FrY9EB2cX/qUTDppNyicLPIDnZRGkByTOA==}
 
-  '@zag-js/aria-hidden@1.15.0':
-    resolution: {integrity: sha512-3ogglAasycekTHI34ph16mqwM+VtHCOMtrFHWzPwB16itV5oDEeeMNdQXenHSSyQ/07nJ2QsRGFFjGhPm1kWNg==}
+  '@zag-js/aria-hidden@1.15.2':
+    resolution: {integrity: sha512-Uwt86QpEaI4qLFS/k4C7rwIfyiH8EdE5a4AWiQ26WsL8VOpjROn65rBEOJ8q3fG5CJXbdcqaYK3lg4ldqf9irQ==}
 
-  '@zag-js/auto-resize@1.15.0':
-    resolution: {integrity: sha512-EXgrsU7OWxc7obSOt8Okh0144H8DQi1S84OsOUY04Uni11Dnp5/X8+t6mvBbkw4/Qyz5UBjChjocwBcO+HHV8w==}
+  '@zag-js/auto-resize@1.15.2':
+    resolution: {integrity: sha512-Mg3IN3eIP2wKBFRm5qti/rjKpTj7sfIVNfO9BgWdHDSzli1VwaBX7GaOE3nGc1tZ2nJ8n0SWRvRSzr3b57cwKw==}
 
-  '@zag-js/avatar@1.15.0':
-    resolution: {integrity: sha512-EHGxzXb1mLf3n6x0z/rqFl1mghDB/gyfPAeaFUoA/cacmmMk8YB3aDUXkS9pTgN9stYJBM5f6T4xB1ZUhrP8tg==}
+  '@zag-js/avatar@1.15.2':
+    resolution: {integrity: sha512-4aG2ETJbdMTALyXwU/DeGfjs/dM0Kllje+t5ov52fQrtkY123JdrvKQkcvsc7Luph1kdN1tC1/2fe/pDMhycCg==}
 
-  '@zag-js/carousel@1.15.0':
-    resolution: {integrity: sha512-ZI9H34f2utdJ2Ek6GZa+iuRH4eC99GHD/VEOKLdGani8uadpT2v8M5kUwPGrlAJq9SiPbQ2UuXBmCkmurPQqdA==}
+  '@zag-js/carousel@1.15.2':
+    resolution: {integrity: sha512-7bcyEtWIhv7kw+V4H+Fv5rE8I8lf0LQOj+m3HTYzWo+wiLybFfI8/bg1qywjSYKsgZr3gmGVCEZhfx3BSpP3eA==}
 
-  '@zag-js/checkbox@1.15.0':
-    resolution: {integrity: sha512-6lQvPQNJXt7R0xxdpOuh2qtmAkzdBdqSvFIH7fE6GJzJ/AWiRZh0X+9deLQ76CN4EDUdxizEe7MlQfTI3a56aw==}
+  '@zag-js/checkbox@1.15.2':
+    resolution: {integrity: sha512-Ay/+rpKbxL4jE1pwVw52h0t79PpiifA6QlYnV4E+hWl1yJBkMRIi76Ryhqvqp4yY+2Wyr9OfDA9eHmQjapG4VA==}
 
-  '@zag-js/clipboard@1.15.0':
-    resolution: {integrity: sha512-Q3kh0fHvOEAJUywQm3zAWyltrYyiI8OpeZQ18k5Mf3/M+bq3gSphZL0+AYsgGbKUg5O2+hJ1SfiErAjyhRtBQA==}
+  '@zag-js/clipboard@1.15.2':
+    resolution: {integrity: sha512-EE5OlsIYbBklo62qu3A7GiUnsgmoGaoDZvhpYvpNM8StWNeRREcJZXRIizv4aFC46e5eODzSNcebnMLYa8Wcgw==}
 
-  '@zag-js/collapsible@1.15.0':
-    resolution: {integrity: sha512-GX0kdMlKk4Yk5k/2wN0prudf21k+TfArGr4EHqimTDR0vQE3dSdb3pYyPjw20fLzceKHBBCLsoi2v+YnS75gHA==}
+  '@zag-js/collapsible@1.15.2':
+    resolution: {integrity: sha512-vvUXQMFgwsZJphE4Ml5ap4FVhtyLOqK2QXPbt2+F8X8SRwJ3/pqsSsLFdH+ALpNoCK6WF9j+8FZ4lyidr7XPDw==}
 
-  '@zag-js/collection@1.15.0':
-    resolution: {integrity: sha512-oC3i6c/oP/FuNPsfgoC1reSXbAvDBGXl0HU3CcvXiNLHbjg2ek8J7kbow6MNuXK6chiksiOHbzKxHl2Oo0Ox7A==}
+  '@zag-js/collection@1.15.2':
+    resolution: {integrity: sha512-bJ9EtZ1Cpjh/rQFDMPTPrky/eSfaLpHWmMnk/S9b7wi+OhC0Hoqw38lcWzfc0AaE4bJsfru9/FLIsCDOLf7TSg==}
 
-  '@zag-js/color-picker@1.15.0':
-    resolution: {integrity: sha512-DGujS24h1OWkYL+TWyd+xukOO8NBgcSfFCINffa4ivkHtNx3nC28qkwLPRASbl7AK69pbrcuO6bx1Sy/JQJw0Q==}
+  '@zag-js/color-picker@1.15.2':
+    resolution: {integrity: sha512-UOYHECq+X6hSrgSxwBt5O4Y6f2IdOGMhe7P/LFev7Yn0x1F9fMxJZCIzvQGaQ2V/hR0eTatiKk5SmOp9+dJA/g==}
 
-  '@zag-js/color-utils@1.15.0':
-    resolution: {integrity: sha512-SKo+p5Fu0TBtdDua8UHVjptOkwLLBFoD499Z1FER/gr0R/97L03Kdir0YTxvKn5pXWXYY1EQn4hpTuTITN16lQ==}
+  '@zag-js/color-utils@1.15.2':
+    resolution: {integrity: sha512-c167QcxiVHgFZ7ca0PSQZ7skhbBOd6u1lIyWYzkZ2uPf0yJndqP9gFYPMbwK6d4WIM9k6y6mLdsWCGpqIJJsIg==}
 
-  '@zag-js/combobox@1.15.0':
-    resolution: {integrity: sha512-HBck3wcEeIOa7IQMsUkUKbm9cAU7bjoklIyq2zFGn90k7DcDa++oXK9Z2pmcd4TPoBYiyVuuXucaCcjmLX8V/Q==}
+  '@zag-js/combobox@1.15.2':
+    resolution: {integrity: sha512-lZXW99NLnRfLLY1ZOE0oqo4wMDglkUjKV1UZaHyj+yqXsiMtWhKQFQW/JeVBRDe6RCv8wWPPHMycNANMw581gQ==}
 
-  '@zag-js/core@1.15.0':
-    resolution: {integrity: sha512-P/8F3IXabMhpFnc6hC7GDg3rvUnvY27cuZU04hxjUqTH6+SfORIA/Uvqd4ekhC+dIprL9jicnFrmGgcyelyxfQ==}
+  '@zag-js/core@1.15.2':
+    resolution: {integrity: sha512-yUnh4I0nZ8rlszWgF402F5vGoYw7DNwStYz2TAO+4E08BpKBATw3FEdqAHPm+2xZm5qPqnPbM4iObwUlkBQUEw==}
 
-  '@zag-js/date-picker@1.15.0':
-    resolution: {integrity: sha512-IZD0V9MAljp1QhxYbST80AonryuDnyx7hvEy/RrBY/VOx6I4STtKfcSJ5ZZgVIzJfH8Yyaed4+IwcenqG7W5YQ==}
+  '@zag-js/date-picker@1.15.2':
+    resolution: {integrity: sha512-KElAFm3fW4GKGUNUe+jqqUX+P1H+Cigp/eGRgIl0dUjCwHocD1oN0ZCwNYmf7SJoWSgPRc1UJdA4XvpdU0IwPQ==}
     peerDependencies:
       '@internationalized/date': '>=3.0.0'
 
-  '@zag-js/date-utils@1.15.0':
-    resolution: {integrity: sha512-FX9EesJRnUTYTpbXf5EVfCbsXW5vYtZfc635aQzojc9ekk1FGcHpqQs8ZKfCOTPuauZFOX9i6139A4KoPfQOiw==}
+  '@zag-js/date-utils@1.15.2':
+    resolution: {integrity: sha512-U+HtfdtHJ5ed2ys8izMhu8gY5jQigCd8ExPN5Cxg5CoIbSkho9NT8o/eO9OW71jc2F4kwBh+q0reyxxLJnTSbw==}
     peerDependencies:
       '@internationalized/date': '>=3.0.0'
 
-  '@zag-js/dialog@1.15.0':
-    resolution: {integrity: sha512-Vlt5vySs4u8c8xBEh2JMUvRfPc+aaVEIIUtFVxpc2ORWhBXs9glijyp1yf3rNHJhjj8gqqhF5sEvs3yUTTAk+Q==}
+  '@zag-js/dialog@1.15.2':
+    resolution: {integrity: sha512-LUF+tiiUJj7v24txhC0TOwEgsfj1GCogAmBaiJKxvqrDEDv1B91J0b6SUQ5TuTMLW+hlBEzXZw0QsTxa9OXBew==}
 
-  '@zag-js/dismissable@1.15.0':
-    resolution: {integrity: sha512-yv575KWy8gA1p4aajOiY5l/nBQ3Xw+Mrjpungp1+wiGd/98eNAIKJ6/adldfbE1Ygd/Q4Dx2VQ7D1AmiTdwUSw==}
+  '@zag-js/dismissable@1.15.2':
+    resolution: {integrity: sha512-+WY8a1L+L8hXPGmWKqOsSg2KCHabVWXEX8mewHamltpSb86+2WMmblpLNgTwbm6V0T6txf1N8lFuzWMojMEWSg==}
 
-  '@zag-js/dom-query@1.15.0':
-    resolution: {integrity: sha512-z8H/j/Zs0eZEsGpbonScmlKSv0jEXKiAwUCrvQ9Mt6Gz9n0CQRM3MkFclSsM8aeiSv6qKLlhPfkzjl18OLkbgA==}
+  '@zag-js/dom-query@1.15.2':
+    resolution: {integrity: sha512-+r9Xj6hiQj9b2ZNkT3E/bDaXgigoAkhtikDXov9duAY14pFFJxazXr0NcVgacik8ytAEt6XOOshLcAftyalRKg==}
 
-  '@zag-js/editable@1.15.0':
-    resolution: {integrity: sha512-F14HKZuDsfkpfIkaF/ZDYPkz/pFf6VHrvoV0rdhj8wb8QJQ4nB+lgBv2APSwkEaFb/gGrnE19v3Ojlt5tqpPsw==}
+  '@zag-js/editable@1.15.2':
+    resolution: {integrity: sha512-32v7DXDBnDX1CiFpGRh9uclu48UJQJT2QZPQ0Bys3ZOFgMxsWH6tCKDb7iQTcINIc/XIx/9nclWnV5egzimG9w==}
 
-  '@zag-js/file-upload@1.15.0':
-    resolution: {integrity: sha512-2hAlQr9qdT8EH4XnmkNkEIDCCsmp2SMoMAjq6nJKYO8UJNQGRanU2B5S8jV3quJBz0vIY43SwyvqiZ3+1VrJSg==}
+  '@zag-js/file-upload@1.15.2':
+    resolution: {integrity: sha512-Zgac/da5QrUlE0ItlNy1kyMXfTy4ynTWnq4aZ4wZ9eVHUFQhLXERv8l+hYJetImISnuclmNVxNKP8Xk+5t4+tA==}
 
-  '@zag-js/file-utils@1.15.0':
-    resolution: {integrity: sha512-tahJt3JmrXaOtGiknH5PxIiOyyNvroMfjiBqOqnNksIPzDoWmVNxHOEme/ts7dJlkRD8U2qm2NFC2VS0bKerzg==}
+  '@zag-js/file-utils@1.15.2':
+    resolution: {integrity: sha512-aNUEBJUeK6G3pyf+zYnIMg0GgJnInddjGRedFeTnfK1UmlSO8wTbxQTCvjWd4Nnr5eCTpQkRq6wTZy8JeIcOpw==}
 
-  '@zag-js/floating-panel@1.15.0':
-    resolution: {integrity: sha512-AYYFseA1MeQUZl+zjNoKUu4j0kwz8EyJd4oJjs8uJIR6KG8u8QhpWYIBUny63M6AtZTCSYQAgBEcEh+mrbEyyQ==}
+  '@zag-js/floating-panel@1.15.2':
+    resolution: {integrity: sha512-8oG2MRXWWeXws7iVDmJFBqHLHYOGLvYe+vgXI3vgnLhmS4SeX9qAJj6qIOar7htOmEtp1p/KiBo2w2MYtzjuAw==}
 
-  '@zag-js/focus-trap@1.15.0':
-    resolution: {integrity: sha512-N8m/JpNe1gHUPJlr0hyGUdHg6pAuyJKkBaX0s38cyVntlo2CJhyAWZGuUdocpT2Q3HNPql666FNnH986rYPDKQ==}
+  '@zag-js/focus-trap@1.15.2':
+    resolution: {integrity: sha512-5EU5/Cg80oNO3z83A/33t9SOVYvLqLOuSPxt/7Xzy/L1Vj3vUj+s1ox6IpECmEFJcuql7X5yt6VIVitrLtgbFA==}
 
-  '@zag-js/focus-visible@1.15.0':
-    resolution: {integrity: sha512-TPXBf47tj6L0hhZNl9AWhuLoVzfPaNPM+/Gw8t9l9Whvy6v9rk/rqUCidY5LsrQuPiKTi7s5WI5J+Wod8ib3gw==}
+  '@zag-js/focus-visible@1.15.2':
+    resolution: {integrity: sha512-zElE5T41p5QaB4856xK2SeERmHrKbA/UMzoyHzrAk/N1r6dNiMOOx1hMyHy7y6pEhC9kjJFwEpXi1QEel6/ELA==}
 
-  '@zag-js/highlight-word@1.15.0':
-    resolution: {integrity: sha512-Rwr/rRm8BaF2xW9BAEJeA2wpFVx6HzoezfYQX7GFPPgw3N8nBMAYNjx+i1YIwIEcNyad2rbaBB+pSd2fZLIniA==}
+  '@zag-js/highlight-word@1.15.2':
+    resolution: {integrity: sha512-2a49h4k0ISIDydaZZDdASEHJpwxJeuZHSPCE7cM3/BWCR3H5galeC/jbNWRlTJVH4OQTYAR0I2wILQvOWLhSrw==}
 
-  '@zag-js/hover-card@1.15.0':
-    resolution: {integrity: sha512-j6BsE+metdnv/C/Ls0TZzAMN78rtS2r8M1ccHY5FFTGyUvZnlE8BY/QPNyCSSSCUpynymzMYh3IMYlxbJgfpSQ==}
+  '@zag-js/hover-card@1.15.2':
+    resolution: {integrity: sha512-FfNmhow8MPMp5RgTeC87x4EStFw+d1137w4QZ+fC5PystRzxGeiyDJyLRYGVeIQO2oP463az70vnxsbFAMu98A==}
 
-  '@zag-js/i18n-utils@1.15.0':
-    resolution: {integrity: sha512-anxSbT8kLbJaFJFSb0Ork2j/Lp+XVfMNCIgiBR2BuqUlfX72k23TIJvRxAfwNIkUfs0L8ikaSgLss9OwS4mAnw==}
+  '@zag-js/i18n-utils@1.15.2':
+    resolution: {integrity: sha512-1RnqCaxe+l4UR1O3fhn04T+J62yw/SkCByhrhrPSis/H7a65nW0WsoWiJTIgWp/hN9HI2Y3dVFfMEwQUFFHG1g==}
 
-  '@zag-js/interact-outside@1.15.0':
-    resolution: {integrity: sha512-OwBf/iesQGU9Oq3xe/tcK7gu7xipiGWsmwl2CcScr0fTp3BIMbQywHS928IgPk1DxA8KTHodY8wBjoY1dskfRA==}
+  '@zag-js/interact-outside@1.15.2':
+    resolution: {integrity: sha512-WbCICcMJHL6yS8vaou0FvKV6shl1Z+CefF7yzn5MEshPLbmy33WGQ2KBzodTkIQFM/C/zdVz5xKl8TbQmi7jUg==}
 
-  '@zag-js/listbox@1.15.0':
-    resolution: {integrity: sha512-Gcg76uWZwUAyMFZzGWpHnFCU/aaquNbXmVnyzzBgE3Co2snkv02rK1yG9iBwemZe3e5+VBifMMAtLLPAQJdz+g==}
+  '@zag-js/listbox@1.15.2':
+    resolution: {integrity: sha512-V6Zbi8HTiyhsV4GhFaiFYL2bJo4lOt24/SA9M/T5D7ZH+bTm3itPUxYddIBi9w6yRTU0gsorosD2GyFkHjchvg==}
 
-  '@zag-js/live-region@1.15.0':
-    resolution: {integrity: sha512-Xy1PqLZD9AKzKuTKCMo9miL1Xizk/N8qFvj64iybBKUYnKr89/af3w7hRFqd2BDX+q3zrNxPp9rZ6L7MlOc7kA==}
+  '@zag-js/live-region@1.15.2':
+    resolution: {integrity: sha512-dIrfDlKyNz99CQVeHu9RHe/x+yTBm3wFA7H655DXL7CugO9tpTlynkrTG9AB+0Z84JKZTeHh0vGVa2chTWKrNg==}
 
-  '@zag-js/menu@1.15.0':
-    resolution: {integrity: sha512-GbEBVYu0w7+88xrGX2GrjXfnwWuX5jLhoLiEcuxvxJQal/nahKrH4AGXJvHXNaRbj+53V3nWAh3u70C9210PWw==}
+  '@zag-js/menu@1.15.2':
+    resolution: {integrity: sha512-54dGUChMLyTrkCGbKGh0R8l/cg0vPFnGZwMG96zYJhkmXdpDMECZgBrN3j7B6RtEIvlAR8fMH5Sya58Amb3lGg==}
 
-  '@zag-js/number-input@1.15.0':
-    resolution: {integrity: sha512-+kK8kyXJhIAbEUnswoMDR+DSJUmvDNIOW0ffuZ9pbfukN3p6zaA3/dCp2Dtg3bQS7hGrFWgtrdejJ8l+mVvUAA==}
+  '@zag-js/number-input@1.15.2':
+    resolution: {integrity: sha512-qtDAVUdMXBhufBSwAgi8MXm7zHb36ujfWmxCJg6HbjKVF0BEAxeoye5VexgyYul7Hp8+Rr9LkW8X35W4amjJEQ==}
 
-  '@zag-js/pagination@1.15.0':
-    resolution: {integrity: sha512-Z62Q41fQPWqk59QyJk+9J0Ad3H9DCqZ0zZutI6iH8DdzT0A0xxmT6zhup6DM/8C8h0OLlaHFTWQnj0RdRNrnXg==}
+  '@zag-js/pagination@1.15.2':
+    resolution: {integrity: sha512-k1jT7UWDwgkYVsf83TTUhks6iZ7aQpcEjQ+iWI2LbZu98+bVhX9hpHfxdWbvTbueGk6WjB2xa1X0tsktII1mmQ==}
 
-  '@zag-js/password-input@1.15.0':
-    resolution: {integrity: sha512-oHuZKDRJIbycqWpTVznufy4L7K2g8kwcEaZ4runkwO2ocF00zP8HVmOZQzmhkUgTny0azErQydg8XE0VR5OfYg==}
+  '@zag-js/password-input@1.15.2':
+    resolution: {integrity: sha512-9BpQ26Z9XoCiNAHOmx3zwa+62+C6358/az0h3N24P4qS1EdTVWkhG1tsyPhRElg4v1koavZ40RMUppJQBH+DmA==}
 
-  '@zag-js/pin-input@1.15.0':
-    resolution: {integrity: sha512-IykjogZBG+BfbFXymSa+KGpOi5CrV9kl8HRm6G2V2Sr3NA5jEwMFaGSd/QrcHS9vh23D1Smx/io4pvF7c3q0kg==}
+  '@zag-js/pin-input@1.15.2':
+    resolution: {integrity: sha512-1KjGGmyldtEb4RwwdBTKzbgAwpNT6CyY274LvQC8lTCEUYOBkUmS9OUaKUbwkoluCdmXrugpg/XMulisRmMtgg==}
 
-  '@zag-js/popover@1.15.0':
-    resolution: {integrity: sha512-cdzEed3zcGbjSgPQnQnrsuXo2hVVslmSNwQbU5dHcNzG1uxxmtPCIMVeBUmGyJbAFF5XQpKCq/7mIr26dT73vw==}
+  '@zag-js/popover@1.15.2':
+    resolution: {integrity: sha512-6cD4eTwwj/bkTCDWVk0dMFqg01iD7qJofRSU3da7nde1Y0TMz8gBlt++GASgCF4p/hPeGLD18GcIF8FKka9IlA==}
 
-  '@zag-js/popper@1.15.0':
-    resolution: {integrity: sha512-Ra/0Ko423KN+8D4+mIFFkeTn9uaHfpxn6UUNIWwZKoiJQvED8DH4dPbLbmvGEoKp6qmisnRHAzi71NLgEhk0Mw==}
+  '@zag-js/popper@1.15.2':
+    resolution: {integrity: sha512-5uaFW9IU8bj3NdEiyuSp2eVJaPvWoA6/q7Fh423Va8booMYW4k1KFmz2BSxQ3JfK5lt3vPI0X2026gSxTx/vmg==}
 
-  '@zag-js/presence@1.15.0':
-    resolution: {integrity: sha512-hoxXis50pm79PpkY2kA1wdhh4AEo7t7pBv0VsQYZYjmzuFh4V5IMw9oa1EOfBlC6f/A+EMZ9E+xg+EVsB68a8w==}
+  '@zag-js/presence@1.15.2':
+    resolution: {integrity: sha512-cNPJz3qeXdoYFEefxFixZoMDFzqfHsLgmi2ynmRrFlyHzHtFdvKjvS5ywo9YFGNgwKrEddS43n8gl3w3lgqBCA==}
 
-  '@zag-js/progress@1.15.0':
-    resolution: {integrity: sha512-/Mz26GR2rOAuoErNOiSGRpvwckTmbCD5nWGDE/aYlVRID13HcsmN15Zk2Jfa4LadqK88aIN8Iy0Sk4elG0+Efw==}
+  '@zag-js/progress@1.15.2':
+    resolution: {integrity: sha512-VPunnrTYiJaHnnCKuh2ZARCnzgTtxYIiNKiUVPWlygsWy2AGg1K3AvVswF2CVfGpwbO4ioyBQO65EZkQiMN/Aw==}
 
-  '@zag-js/qr-code@1.15.0':
-    resolution: {integrity: sha512-GkGy5k5tk6DIui9lGjDO8+e8TsSVOxEGp1lblPiaRm1ggIh10GhIfCQWGe/x78ezdie8WzxlSrma89suTpaiAQ==}
+  '@zag-js/qr-code@1.15.2':
+    resolution: {integrity: sha512-hFtwGGArxVJo7osbY3R73BHIX3Ldb8G4gtNDZ2fGcKAcp+SQg5GXUIBK17ncxJrOC7A1Wp7sdOoYNNOPWe2fYA==}
 
-  '@zag-js/radio-group@1.15.0':
-    resolution: {integrity: sha512-+KTebHUtMsE/YDyGE8wF5VnWfZQp+f2WoAwwzBjfhPpRxXbOUMDo0pZEEr3yxkSvQ9hgCcBhMKH8pEk0SPxvjQ==}
+  '@zag-js/radio-group@1.15.2':
+    resolution: {integrity: sha512-+V9Y4EZuNITMbA9iJisysqWW+JB3YdlFF6dAomvXN8nuOuj8HE02JHndIeMflDtW6Tz99JcJLS7lNXN7G5uEuw==}
 
-  '@zag-js/rating-group@1.15.0':
-    resolution: {integrity: sha512-omGKN97FhplFwBX9J/Mj7BCZuwFXSXssSVTKU7Yp2d1Cmxhez4+Ju7KdSRNnIoWB4OxFCxwZyaAPTcg3E0Pjrg==}
+  '@zag-js/rating-group@1.15.2':
+    resolution: {integrity: sha512-g7F9NyB1MF6ydE9aEr9zLPXGKXZIH2ZsUBXEQ9u6apUhnchhCSHDw6xHVXI1hYGrJHnpf2xMw3Xu1opJge1DQg==}
 
-  '@zag-js/react@1.15.0':
-    resolution: {integrity: sha512-YSp9QBkdeBfZt4nVhJW+CUd5sNEEVAuwkmoZWDFUoDoWSAXwzSKuHCmTm5/8DaXg1IZD2bMrXgMNDqZv2x0hZw==}
+  '@zag-js/react@1.15.2':
+    resolution: {integrity: sha512-T5QPiLbW4DoQ32NS5+Qu9NsIXKKz0d5MOpfEdXXuc6hKZdvV+V9d7EXeHBRohs3P6jqtf8FXpXDdK2trv37YlQ==}
     peerDependencies:
       react: '>=18.0.0'
       react-dom: '>=18.0.0'
 
-  '@zag-js/rect-utils@1.15.0':
-    resolution: {integrity: sha512-sjAn78x1t3XiDG3NT8SoFfyO0u7/SEJU5RKRhMgjTPoOLXTzZj+lu2d5N4cUw0uZTfeGb/ormObSchMQVhFgYQ==}
+  '@zag-js/rect-utils@1.15.2':
+    resolution: {integrity: sha512-wPsOM4qYncwOli20MNINgl0ZwmMY11RvrgPvjcMrkJ9dVqU/YrCcXV4rIg8Zig5jxCT+mf7rWQe9aQJlNTVipA==}
 
-  '@zag-js/remove-scroll@1.15.0':
-    resolution: {integrity: sha512-vdWSAdgY8wJ7s4YeaKwTMwmZiRMBxCehmdktSxBWvwtAjU1cM3UWvjmZ9E6INJrQXxH9vDpe/rpFSyv1guIQIw==}
+  '@zag-js/remove-scroll@1.15.2':
+    resolution: {integrity: sha512-pXVuvFcAQND+C0KAzAve02hGaI/AgEhC7RpgpyUKaUzEccEsxLi40C88j1/2HCfta6GI7nd2e0QwPZiqngUIyA==}
 
-  '@zag-js/scroll-snap@1.15.0':
-    resolution: {integrity: sha512-/LfBlsjoR4tVL3Djus3k9jKLhwC2ApdHTACxEc72TAewoPe4M8icnSDLXmKHvwwOhzK0HlFz8wGm6ZncAbQbuA==}
+  '@zag-js/scroll-snap@1.15.2':
+    resolution: {integrity: sha512-RswpsMHg0aWHsx7xqybnPm8bTL9ow17z9GhYgxSWtIi2U9wgkUHDtEJQcRNUA9PQEGyVd29B39NM0ir64HAhNQ==}
 
-  '@zag-js/select@1.15.0':
-    resolution: {integrity: sha512-4urUBADzhrsGEO/UsqHdjsgmDdF15Zzeid3ejEbIMTrkt2/mMMcQ1CShuxtsWqm2EUBz/N1kOcZlE6Tq69n7Xg==}
+  '@zag-js/select@1.15.2':
+    resolution: {integrity: sha512-Y07RlBIc8bVj2WklhS7tiVySZntBv9TE9sfiA8RcLU7KFFGTdS2XUoQV4fziJubUL8XFhNzEC92/bKeBLqpgDw==}
 
-  '@zag-js/signature-pad@1.15.0':
-    resolution: {integrity: sha512-5Tj8vkrRxEkSV417oR2qdy+TRgDmS3W8dY7xsIjpbBf/kqkt/8Uo4JpaVH2vwQAFw9AwEFogBh9i6dHcXMy0rA==}
+  '@zag-js/signature-pad@1.15.2':
+    resolution: {integrity: sha512-vw7oD7afBfGvUyotJrFl+PjPVYOYZLgQ1eVAosKj54phgKvxheBr8/ySq9vlyTkyvOMjJ8zIkkxlywuqoZzl8g==}
 
-  '@zag-js/slider@1.15.0':
-    resolution: {integrity: sha512-NYIsn3GKXIoPmvkDXsQmw9wdYg3QHbYHXnZ8Ewl2fVubN7S5mDlHSZs2iDVsBvX+a4RChWFRO6JHX8E1+BncOg==}
+  '@zag-js/slider@1.15.2':
+    resolution: {integrity: sha512-Lcrm+h4Vx0stD0ybAqD5tA1qOnrKEfQP9ucQsPUy+fY2em19XC6raOVOhAc6ROx4X0neTI/yEc1ARJQSaxtRZw==}
 
-  '@zag-js/splitter@1.15.0':
-    resolution: {integrity: sha512-Xnedl+cpnD/hv9m+GOYCK5K2xRxbs4xuP/EajYtgVcDw8E1X5cBmxHa1hCrp7BMgb2xYCvZ5et4hnmZfb+1X9g==}
+  '@zag-js/splitter@1.15.2':
+    resolution: {integrity: sha512-LIuTTPRaw3inS64f2TLcFIlwjNe9Tx9mSE4VXf7wPhYitNKmyh7MeNE59na+wDzZisVwx9yBewAPfrZtbHDGBA==}
 
-  '@zag-js/steps@1.15.0':
-    resolution: {integrity: sha512-VoIDcDIEErZawmW2m0yTGlffqjfRuSwR37K9LdSRy8Q4Qzz3wV7jASaTjMhTya1hlreJ7tJg+Qbjqowvw9GndA==}
+  '@zag-js/steps@1.15.2':
+    resolution: {integrity: sha512-NnS3wYQrFWA5OXu+jnlnPpm49rGpzHCDbN2UuUcMGvbYVETKEXEO9fC1XWh7PstVuNi03E/CrZGHl5cEjf/j8w==}
 
-  '@zag-js/store@1.15.0':
-    resolution: {integrity: sha512-ecqjcy3b1GsULpsT8RVJV9KDaikajRN0XRg48HMvaGkaPIvxI6esyrE6RKnShuqr2eVXIPghgBnCnrJUev4UlA==}
+  '@zag-js/store@1.15.2':
+    resolution: {integrity: sha512-oDJuRdu8SaGab06UycN96OgvNau1ynawDNNfQNhA7zoOIZlaJH6jP+5YaAPFila+wyjdw7svz5+4ejs8vXcjpw==}
 
-  '@zag-js/switch@1.15.0':
-    resolution: {integrity: sha512-2CaAUTi7jM4lJjCYoSE1HWlFPCifI5GR+hufWOCYKpanf8VA/LM+t/a2Aq5QoBsWdcQv3B9mHxF/aVTDbnCKPQ==}
+  '@zag-js/switch@1.15.2':
+    resolution: {integrity: sha512-2aEm5HDP/ENcLvoP77CH7DQTPXIMUzVilefHlz6WT0tQxQzOw8uMhUOYYcuNmEq0FNRUOyuMEMyZnZFUYAxqvQ==}
 
-  '@zag-js/tabs@1.15.0':
-    resolution: {integrity: sha512-voHWpibC1TKLmbAJfixOesxrCio7wK+gdLRvh7Xh5u+3VSsT2fP2wEw3ySkJbpw3MpEE7R2OWkInbCV/SwPcsA==}
+  '@zag-js/tabs@1.15.2':
+    resolution: {integrity: sha512-SJMR4K59sxvNZEIgnJfbweLzncmgxRWTBm+FamwMtP8DKQ3RETNdjrn4aA9qLUsCObapk06KT3iTeiCXzuBaFA==}
 
-  '@zag-js/tags-input@1.15.0':
-    resolution: {integrity: sha512-CB60z+/I/Nso1gwatTO1qrk4XITxDd4qtRD+l6fuuKyOkZGgKm0AP0W+/6qUuOvtWIuY6fas3yZHFmF2eEZ9vQ==}
+  '@zag-js/tags-input@1.15.2':
+    resolution: {integrity: sha512-/mAuB8emhGoo3eoIgmlT/kQE27ukRlhghgwp3OjvEen+iTpz0XIWM+S+IV3QU6U4DlhwkadQaINht/c9ln6gxQ==}
 
-  '@zag-js/time-picker@1.15.0':
-    resolution: {integrity: sha512-4S02433X88X3MW/BxaFJiWna4BIRXsAdrmDcBb0PZ8dln29DUmpD8YHcFtONsKvmCAmrbO7Gr65n86nQwK8zeg==}
+  '@zag-js/time-picker@1.15.2':
+    resolution: {integrity: sha512-Aoe9GdbrvAMP1fdOEmzCESr/dO+cGnqhCoa0UkZB5wuB4dT3S02hRGSZsHO51Eon2NpzHPG9j+/alncwOe77Tw==}
     peerDependencies:
       '@internationalized/date': '>=3.0.0'
 
-  '@zag-js/timer@1.15.0':
-    resolution: {integrity: sha512-gDsYm4C9yju7g/r5u7n7mRQ2UY7diXXVbbLFr5Ja+0iUXgbD+uoSZEt9HypVc5TL9NWEEwn5/tut36owEeW4rw==}
+  '@zag-js/timer@1.15.2':
+    resolution: {integrity: sha512-v8RN3cwFuNXxuDMuxxfXKCSd+Z1UT6Ct+ueU3PRZqHqXU9u4k9Mm+vROIqnNzhCCdIHNxsqUt32/2zsRRaubbw==}
 
-  '@zag-js/toast@1.15.0':
-    resolution: {integrity: sha512-0RupMCXyGr7/La4Zlei7VqBF0VPNJelGd7zimLboe+IKZyy4Ypi/N2IX14rl8JZQDsDEgkLUl33xrSk/9RW2nQ==}
+  '@zag-js/toast@1.15.2':
+    resolution: {integrity: sha512-OohJvGTy+J1MpydJ4eCV36picggfF9VbDW4nK97TT+4bIIRDgW+PGYgB4dd+PvEjRrk9194Kkm93lud95yOyZg==}
 
-  '@zag-js/toggle-group@1.15.0':
-    resolution: {integrity: sha512-992vMz/2sriLrUKI3LpT/01kCGTbPGLgGLibiHRt562i0v9+2tV+GiY2jBctHZjJaKPrzBY3H0l8CCCvDj8gng==}
+  '@zag-js/toggle-group@1.15.2':
+    resolution: {integrity: sha512-JhWV0GY2NRgDhlzP73ADlG1E4NFXqv1h2q5+m3Rmos+Bi8soOV437jch/wy+M+xYN5vdZCczXJu9BumHNlknhA==}
 
-  '@zag-js/toggle@1.15.0':
-    resolution: {integrity: sha512-mMSQ1+f1hOMp/7gLA7rTeiSNyeZxsCjRxP4XnTBY4BxJ5LswLuhem9CplBwaVthkhY1Y/5f3HHu80LBcfF+BVQ==}
+  '@zag-js/toggle@1.15.2':
+    resolution: {integrity: sha512-wtDeIRhDeVhaUboWQ2GrxlCC4+cLRyZzvZiN84tad7H/sUKq9hNDdROcCnIYBhEkb1Qf4sjR8KszY12YLtJx6A==}
 
-  '@zag-js/tooltip@1.15.0':
-    resolution: {integrity: sha512-sOpVECyfdS4RZBx46mSV+RPc9C5k9JvYQYUfoOVWh0E5RLSEz5bQm5xxctKOHfCOv+vJNTfG5gP596B1r2+Fkw==}
+  '@zag-js/tooltip@1.15.2':
+    resolution: {integrity: sha512-Spw5ewga3DNaT5H4AnrtsxJ6ebRoTxy+igwojGTYUCNUoxyQn6W3UpqZpgAAfw8B236bduTRh9MW9CsaM/hnmg==}
 
-  '@zag-js/tour@1.15.0':
-    resolution: {integrity: sha512-EplcxoiE0z9vI0z6675+ABclQ9Mi1YUWhDZOHx7wfjRzpfawmJoBAlNDKzK3wc801d6OxgJx69SPj7ac0BwwwA==}
+  '@zag-js/tour@1.15.2':
+    resolution: {integrity: sha512-OW+autOwwsVMGwcYCxdCh3Hibeeag6Sg8w02XfmX7E+T2u9a+GGdLOrH7DPM2oHTbZV0iBUqIaKxGPKgRYZNng==}
 
-  '@zag-js/tree-view@1.15.0':
-    resolution: {integrity: sha512-wqdd+hu1bDOCWtnZ8MarRFHqbZF2t8qKBM3kO42IBq7jTI/93LCkHSlceEPft9dgZ6Ea9km0YJMHhoTqCPZ/fw==}
+  '@zag-js/tree-view@1.15.2':
+    resolution: {integrity: sha512-HWDHH3rpGEz3IN5bsj8EHZnU0ttk8uJwBOnH3reYcFQEQskA8cmyzd7y9hdBEn8PzAns+iOjUBj49IVmoYpOIg==}
 
-  '@zag-js/types@1.15.0':
-    resolution: {integrity: sha512-lV2ov2M07BlmjDUCSwBeHxPApHI3oAiLytG94AqcYvQ0BtsCRo5T60yRQ0syFc6fHf0e9+kwt89uoIgfGFYfmw==}
+  '@zag-js/types@1.15.2':
+    resolution: {integrity: sha512-qEHNRA/uOYQjvXzI/ie6vuOD74/p7w6MA4X1VoZEYF2/sbIQjlRn6SzpeV3RyFZBzl6WBO6RqV/XEbgpvGSb5w==}
 
-  '@zag-js/utils@1.15.0':
-    resolution: {integrity: sha512-XctFny5H8C00BsougV40Yp0qVEj9M2d/NRme7B33mon9wG+3hscZwP6miJmF6BYI5Pgu6e2P0Sv45FddQU1Tkg==}
+  '@zag-js/utils@1.15.2':
+    resolution: {integrity: sha512-JdlyGT6yfG2ub2FftrB6BidIlvD04cSwdKYJGb/M+NJ7p7uxnZUZMxAjeBmTLhM1nWbtJPVq3oDTYz/cBBZLng==}
 
   acorn-jsx@5.3.2:
     resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
     peerDependencies:
       acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
 
-  acorn@8.14.1:
-    resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==}
+  acorn@8.15.0:
+    resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
     engines: {node: '>=0.4.0'}
     hasBin: true
 
@@ -1258,8 +1231,8 @@ packages:
     resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==}
     engines: {node: '>=4'}
 
-  axios@1.9.0:
-    resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==}
+  axios@1.10.0:
+    resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==}
 
   axobject-query@4.1.0:
     resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
@@ -1276,11 +1249,11 @@ packages:
     resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
     engines: {node: '>=8'}
 
-  brace-expansion@1.1.11:
-    resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+  brace-expansion@1.1.12:
+    resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
 
-  brace-expansion@2.0.1:
-    resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+  brace-expansion@2.0.2:
+    resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
 
   braces@3.0.3:
     resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
@@ -1567,14 +1540,14 @@ packages:
     peerDependencies:
       eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9
 
-  eslint-plugin-perfectionist@4.14.0:
-    resolution: {integrity: sha512-BkhiOqzdum8vQSFgj1/q5+6UUWPMn4GELdxuX7uIsGegmAeH/+LnWsiVxgMrxalD0p68sYfMeKaHF1NfrpI/mg==}
+  eslint-plugin-perfectionist@4.15.0:
+    resolution: {integrity: sha512-pC7PgoXyDnEXe14xvRUhBII8A3zRgggKqJFx2a82fjrItDs1BSI7zdZnQtM2yQvcyod6/ujmzb7ejKPx8lZTnw==}
     engines: {node: ^18.0.0 || >=20.0.0}
     peerDependencies:
       eslint: '>=8.45.0'
 
-  eslint-plugin-prettier@5.4.1:
-    resolution: {integrity: sha512-9dF+KuU/Ilkq27A8idRP7N2DH8iUR6qXcjF3FR2wETY21PZdBrIjwCau8oboyGj9b7etWmTGEeM8e7oOed6ZWg==}
+  eslint-plugin-prettier@5.5.0:
+    resolution: {integrity: sha512-8qsOYwkkGrahrgoUv76NZi23koqXOGiiEzXMrT8Q7VcYaUISR+5MorIUxfWqYXN0fN/31WbSrxCxFkVQ43wwrA==}
     engines: {node: ^14.18.0 || >=16.0.0}
     peerDependencies:
       '@types/eslint': '>=8.0.0'
@@ -1610,24 +1583,20 @@ packages:
     peerDependencies:
       eslint: '>=9.22.0'
 
-  eslint-scope@8.3.0:
-    resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==}
+  eslint-scope@8.4.0:
+    resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
   eslint-visitor-keys@3.4.3:
     resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 
-  eslint-visitor-keys@4.2.0:
-    resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
   eslint-visitor-keys@4.2.1:
     resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  eslint@9.28.0:
-    resolution: {integrity: sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==}
+  eslint@9.29.0:
+    resolution: {integrity: sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     hasBin: true
     peerDependencies:
@@ -1636,8 +1605,8 @@ packages:
       jiti:
         optional: true
 
-  espree@10.3.0:
-    resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
+  espree@10.4.0:
+    resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
   esquery@1.6.0:
@@ -1744,8 +1713,8 @@ packages:
     resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
     engines: {node: '>=14'}
 
-  form-data@4.0.2:
-    resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==}
+  form-data@4.0.3:
+    resolution: {integrity: sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==}
     engines: {node: '>= 6'}
 
   fs-minipass@2.1.0:
@@ -1823,8 +1792,8 @@ packages:
     engines: {node: '>=0.4.7'}
     hasBin: true
 
-  happy-dom@17.6.3:
-    resolution: {integrity: sha512-UVIHeVhxmxedbWPCfgS55Jg2rDfwf2BCKeylcPSqazLz5w3Kri7Q4xdBJubsr/+VUzFLh0VjIvh13RaDA2/Xug==}
+  happy-dom@18.0.1:
+    resolution: {integrity: sha512-qn+rKOW7KWpVTtgIUi6RVmTBZJSe2k0Db0vh1f7CWrWclkkc7/Q+FrOfkZIb2eiErLyqu5AXEzE7XthO9JVxRA==}
     engines: {node: '>=20.0.0'}
 
   has-bigints@1.1.0:
@@ -2083,8 +2052,8 @@ packages:
     resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
     hasBin: true
 
-  loupe@3.1.3:
-    resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==}
+  loupe@3.1.4:
+    resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==}
 
   lru-cache@10.4.3:
     resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
@@ -2331,8 +2300,8 @@ packages:
     resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
     engines: {node: '>=6.0.0'}
 
-  prettier@3.5.3:
-    resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==}
+  prettier@3.6.0:
+    resolution: {integrity: sha512-ujSB9uXHJKzM/2GBuE0hBOUgC77CN3Bnpqa+g80bkv3T3A93wL/xlzDATHhnhkzifz/UE2SNOvmbTz5hSkDlHw==}
     engines: {node: '>=14'}
     hasBin: true
 
@@ -2372,8 +2341,8 @@ packages:
     peerDependencies:
       react: ^19.1.0
 
-  react-hook-form@7.57.0:
-    resolution: {integrity: sha512-RbEks3+cbvTP84l/VXGUZ+JMrKOS8ykQCRYdm5aYsxnDquL0vspsyNhGRO7pcH6hsZqWlPOjLye7rJqdtdAmlg==}
+  react-hook-form@7.58.1:
+    resolution: {integrity: sha512-Lml/KZYEEFfPhUVgE0RdCVpnC4yhW+PndRhbiTtdvSlQTL8IfVR+iQkBjLIvmmc6+GGoVeM11z37ktKFPAb0FA==}
     engines: {node: '>=18.0.0'}
     peerDependencies:
       react: ^16.8.0 || ^17 || ^18 || ^19
@@ -2634,8 +2603,8 @@ packages:
     resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
     engines: {node: '>=12.0.0'}
 
-  tinypool@1.1.0:
-    resolution: {integrity: sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==}
+  tinypool@1.1.1:
+    resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==}
     engines: {node: ^18.0.0 || >=20.0.0}
 
   tinyrainbow@2.0.0:
@@ -2682,8 +2651,8 @@ packages:
     resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
     engines: {node: '>= 0.4'}
 
-  typescript-eslint@8.34.0:
-    resolution: {integrity: sha512-MRpfN7uYjTrTGigFCt8sRyNqJFhjN0WwZecldaqhWm+wy0gaRt8Edb/3cuUy0zdq2opJWT6iXINKAtewnDOltQ==}
+  typescript-eslint@8.34.1:
+    resolution: {integrity: sha512-XjS+b6Vg9oT1BaIUfkW3M3LvqZE++rbzAMEHuccCfO/YkP43ha6w3jTEMilQxMF92nVOYCcdjv1ZUhAa1D/0ow==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
@@ -2706,6 +2675,9 @@ packages:
     resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
     engines: {node: '>= 0.4'}
 
+  undici-types@6.21.0:
+    resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
   universal-cookie@8.0.1:
     resolution: {integrity: sha512-B6ks9FLLnP1UbPPcveOidfvB9pHjP+wekP2uRYB9YDfKVpvcjKgy1W5Zj+cEXJ9KTPnqOKGfVDQBmn8/YCQfRg==}
 
@@ -2721,8 +2693,8 @@ packages:
   uri-js@4.4.1:
     resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
 
-  vite-node@3.2.3:
-    resolution: {integrity: sha512-gc8aAifGuDIpZHrPjuHyP4dpQmYXqWw7D1GmDnWeNWP654UEXzVfQ5IHPSK5HaHkwB/+p1atpYpSdw/2kOv8iQ==}
+  vite-node@3.2.4:
+    resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==}
     engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
     hasBin: true
 
@@ -2771,16 +2743,16 @@ packages:
       yaml:
         optional: true
 
-  vitest@3.2.3:
-    resolution: {integrity: sha512-E6U2ZFXe3N/t4f5BwUaVCKRLHqUpk1CBWeMh78UT4VaTPH/2dyvH6ALl29JTovEPu9dVKr/K/J4PkXgrMbw4Ww==}
+  vitest@3.2.4:
+    resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==}
     engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
     hasBin: true
     peerDependencies:
       '@edge-runtime/vm': '*'
       '@types/debug': ^4.1.12
       '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
-      '@vitest/browser': 3.2.3
-      '@vitest/ui': 3.2.3
+      '@vitest/browser': 3.2.4
+      '@vitest/ui': 3.2.4
       happy-dom: '*'
       jsdom: '*'
     peerDependenciesMeta:
@@ -2799,10 +2771,6 @@ packages:
       jsdom:
         optional: true
 
-  webidl-conversions@7.0.0:
-    resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
-    engines: {node: '>=12'}
-
   whatwg-mimetype@3.0.0:
     resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
     engines: {node: '>=12'}
@@ -2879,66 +2847,66 @@ snapshots:
       '@types/json-schema': 7.0.15
       js-yaml: 4.1.0
 
-  '@ark-ui/react@5.12.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
-    dependencies:
-      '@internationalized/date': 3.8.1
-      '@zag-js/accordion': 1.15.0
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/angle-slider': 1.15.0
-      '@zag-js/auto-resize': 1.15.0
-      '@zag-js/avatar': 1.15.0
-      '@zag-js/carousel': 1.15.0
-      '@zag-js/checkbox': 1.15.0
-      '@zag-js/clipboard': 1.15.0
-      '@zag-js/collapsible': 1.15.0
-      '@zag-js/collection': 1.15.0
-      '@zag-js/color-picker': 1.15.0
-      '@zag-js/color-utils': 1.15.0
-      '@zag-js/combobox': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/date-picker': 1.15.0(@internationalized/date@3.8.1)
-      '@zag-js/date-utils': 1.15.0(@internationalized/date@3.8.1)
-      '@zag-js/dialog': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/editable': 1.15.0
-      '@zag-js/file-upload': 1.15.0
-      '@zag-js/file-utils': 1.15.0
-      '@zag-js/floating-panel': 1.15.0
-      '@zag-js/focus-trap': 1.15.0
-      '@zag-js/highlight-word': 1.15.0
-      '@zag-js/hover-card': 1.15.0
-      '@zag-js/i18n-utils': 1.15.0
-      '@zag-js/listbox': 1.15.0
-      '@zag-js/menu': 1.15.0
-      '@zag-js/number-input': 1.15.0
-      '@zag-js/pagination': 1.15.0
-      '@zag-js/password-input': 1.15.0
-      '@zag-js/pin-input': 1.15.0
-      '@zag-js/popover': 1.15.0
-      '@zag-js/presence': 1.15.0
-      '@zag-js/progress': 1.15.0
-      '@zag-js/qr-code': 1.15.0
-      '@zag-js/radio-group': 1.15.0
-      '@zag-js/rating-group': 1.15.0
-      '@zag-js/react': 1.15.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
-      '@zag-js/select': 1.15.0
-      '@zag-js/signature-pad': 1.15.0
-      '@zag-js/slider': 1.15.0
-      '@zag-js/splitter': 1.15.0
-      '@zag-js/steps': 1.15.0
-      '@zag-js/switch': 1.15.0
-      '@zag-js/tabs': 1.15.0
-      '@zag-js/tags-input': 1.15.0
-      '@zag-js/time-picker': 1.15.0(@internationalized/date@3.8.1)
-      '@zag-js/timer': 1.15.0
-      '@zag-js/toast': 1.15.0
-      '@zag-js/toggle': 1.15.0
-      '@zag-js/toggle-group': 1.15.0
-      '@zag-js/tooltip': 1.15.0
-      '@zag-js/tour': 1.15.0
-      '@zag-js/tree-view': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+  '@ark-ui/react@5.14.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+    dependencies:
+      '@internationalized/date': 3.8.2
+      '@zag-js/accordion': 1.15.2
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/angle-slider': 1.15.2
+      '@zag-js/auto-resize': 1.15.2
+      '@zag-js/avatar': 1.15.2
+      '@zag-js/carousel': 1.15.2
+      '@zag-js/checkbox': 1.15.2
+      '@zag-js/clipboard': 1.15.2
+      '@zag-js/collapsible': 1.15.2
+      '@zag-js/collection': 1.15.2
+      '@zag-js/color-picker': 1.15.2
+      '@zag-js/color-utils': 1.15.2
+      '@zag-js/combobox': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/date-picker': 1.15.2(@internationalized/date@3.8.2)
+      '@zag-js/date-utils': 1.15.2(@internationalized/date@3.8.2)
+      '@zag-js/dialog': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/editable': 1.15.2
+      '@zag-js/file-upload': 1.15.2
+      '@zag-js/file-utils': 1.15.2
+      '@zag-js/floating-panel': 1.15.2
+      '@zag-js/focus-trap': 1.15.2
+      '@zag-js/highlight-word': 1.15.2
+      '@zag-js/hover-card': 1.15.2
+      '@zag-js/i18n-utils': 1.15.2
+      '@zag-js/listbox': 1.15.2
+      '@zag-js/menu': 1.15.2
+      '@zag-js/number-input': 1.15.2
+      '@zag-js/pagination': 1.15.2
+      '@zag-js/password-input': 1.15.2
+      '@zag-js/pin-input': 1.15.2
+      '@zag-js/popover': 1.15.2
+      '@zag-js/presence': 1.15.2
+      '@zag-js/progress': 1.15.2
+      '@zag-js/qr-code': 1.15.2
+      '@zag-js/radio-group': 1.15.2
+      '@zag-js/rating-group': 1.15.2
+      '@zag-js/react': 1.15.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+      '@zag-js/select': 1.15.2
+      '@zag-js/signature-pad': 1.15.2
+      '@zag-js/slider': 1.15.2
+      '@zag-js/splitter': 1.15.2
+      '@zag-js/steps': 1.15.2
+      '@zag-js/switch': 1.15.2
+      '@zag-js/tabs': 1.15.2
+      '@zag-js/tags-input': 1.15.2
+      '@zag-js/time-picker': 1.15.2(@internationalized/date@3.8.2)
+      '@zag-js/timer': 1.15.2
+      '@zag-js/toast': 1.15.2
+      '@zag-js/toggle': 1.15.2
+      '@zag-js/toggle-group': 1.15.2
+      '@zag-js/tooltip': 1.15.2
+      '@zag-js/tour': 1.15.2
+      '@zag-js/tree-view': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
       react: 19.1.0
       react-dom: 19.1.0(react@19.1.0)
 
@@ -3033,11 +3001,11 @@ snapshots:
       '@babel/helper-string-parser': 7.27.1
       '@babel/helper-validator-identifier': 7.27.1
 
-  '@chakra-ui/react@3.20.0(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+  '@chakra-ui/react@3.21.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
     dependencies:
-      '@ark-ui/react': 5.12.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+      '@ark-ui/react': 5.14.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
       '@emotion/is-prop-valid': 1.3.1
-      '@emotion/react': 11.14.0(@types/react@19.1.7)(react@19.1.0)
+      '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0)
       '@emotion/serialize': 1.3.3
       '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0)
       '@emotion/utils': 1.4.2
@@ -3079,7 +3047,7 @@ snapshots:
 
   '@emotion/memoize@0.9.0': {}
 
-  '@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0)':
+  '@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0)':
     dependencies:
       '@babel/runtime': 7.27.6
       '@emotion/babel-plugin': 11.13.5
@@ -3091,7 +3059,7 @@ snapshots:
       hoist-non-react-statics: 3.3.2
       react: 19.1.0
     optionalDependencies:
-      '@types/react': 19.1.7
+      '@types/react': 19.1.8
     transitivePeerDependencies:
       - supports-color
 
@@ -3190,18 +3158,18 @@ snapshots:
   '@esbuild/win32-x64@0.25.4':
     optional: true
 
-  '@eslint-community/eslint-utils@4.7.0(eslint@9.28.0(jiti@1.21.7))':
+  '@eslint-community/eslint-utils@4.7.0(eslint@9.29.0(jiti@1.21.7))':
     dependencies:
-      eslint: 9.28.0(jiti@1.21.7)
+      eslint: 9.29.0(jiti@1.21.7)
       eslint-visitor-keys: 3.4.3
 
   '@eslint-community/regexpp@4.12.1': {}
 
-  '@eslint/compat@1.2.9(eslint@9.28.0(jiti@1.21.7))':
+  '@eslint/compat@1.3.0(eslint@9.29.0(jiti@1.21.7))':
     optionalDependencies:
-      eslint: 9.28.0(jiti@1.21.7)
+      eslint: 9.29.0(jiti@1.21.7)
 
-  '@eslint/config-array@0.20.0':
+  '@eslint/config-array@0.20.1':
     dependencies:
       '@eslint/object-schema': 2.1.6
       debug: 4.4.1
@@ -3209,7 +3177,7 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@eslint/config-helpers@0.2.2': {}
+  '@eslint/config-helpers@0.2.3': {}
 
   '@eslint/core@0.13.0':
     dependencies:
@@ -3219,11 +3187,15 @@ snapshots:
     dependencies:
       '@types/json-schema': 7.0.15
 
+  '@eslint/core@0.15.0':
+    dependencies:
+      '@types/json-schema': 7.0.15
+
   '@eslint/eslintrc@3.3.1':
     dependencies:
       ajv: 6.12.6
       debug: 4.4.1
-      espree: 10.3.0
+      espree: 10.4.0
       globals: 14.0.0
       ignore: 5.3.2
       import-fresh: 3.3.1
@@ -3233,7 +3205,7 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@eslint/js@9.28.0': {}
+  '@eslint/js@9.29.0': {}
 
   '@eslint/object-schema@2.1.6': {}
 
@@ -3242,9 +3214,9 @@ snapshots:
       '@eslint/core': 0.13.0
       levn: 0.4.1
 
-  '@eslint/plugin-kit@0.3.1':
+  '@eslint/plugin-kit@0.3.2':
     dependencies:
-      '@eslint/core': 0.14.0
+      '@eslint/core': 0.15.0
       levn: 0.4.1
 
   '@floating-ui/core@1.7.1':
@@ -3282,11 +3254,11 @@ snapshots:
 
   '@humanwhocodes/retry@0.4.3': {}
 
-  '@internationalized/date@3.8.1':
+  '@internationalized/date@3.8.2':
     dependencies:
       '@swc/helpers': 0.5.17
 
-  '@internationalized/number@3.6.2':
+  '@internationalized/number@3.6.3':
     dependencies:
       '@swc/helpers': 0.5.17
 
@@ -3399,17 +3371,15 @@ snapshots:
   '@rollup/rollup-win32-x64-msvc@4.40.2':
     optional: true
 
-  '@stylistic/eslint-plugin@4.4.1(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3)':
+  '@stylistic/eslint-plugin@5.0.0(eslint@9.29.0(jiti@1.21.7))':
     dependencies:
-      '@typescript-eslint/utils': 8.33.1(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3)
-      eslint: 9.28.0(jiti@1.21.7)
-      eslint-visitor-keys: 4.2.0
-      espree: 10.3.0
+      '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@1.21.7))
+      '@typescript-eslint/types': 8.34.1
+      eslint: 9.29.0(jiti@1.21.7)
+      eslint-visitor-keys: 4.2.1
+      espree: 10.4.0
       estraverse: 5.3.0
       picomatch: 4.0.2
-    transitivePeerDependencies:
-      - supports-color
-      - typescript
 
   '@swc/core-darwin-arm64@1.11.31':
     optional: true
@@ -3468,11 +3438,11 @@ snapshots:
     dependencies:
       '@swc/counter': 0.1.3
 
-  '@tanstack/query-core@5.80.6': {}
+  '@tanstack/query-core@5.81.2': {}
 
-  '@tanstack/react-query@5.80.6(react@19.1.0)':
+  '@tanstack/react-query@5.81.2(react@19.1.0)':
     dependencies:
-      '@tanstack/query-core': 5.80.6
+      '@tanstack/query-core': 5.81.2
       react: 19.1.0
 
   '@testing-library/dom@10.4.0':
@@ -3496,17 +3466,17 @@ snapshots:
       lodash: 4.17.21
       redent: 3.0.0
 
-  '@testing-library/react@16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+  '@testing-library/react@16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
     dependencies:
       '@babel/runtime': 7.27.1
       '@testing-library/dom': 10.4.0
       react: 19.1.0
       react-dom: 19.1.0(react@19.1.0)
     optionalDependencies:
-      '@types/react': 19.1.7
-      '@types/react-dom': 19.1.6(@types/react@19.1.7)
+      '@types/react': 19.1.8
+      '@types/react-dom': 19.1.6(@types/react@19.1.8)
 
-  '@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.5.3)':
+  '@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.6.0)':
     dependencies:
       '@babel/generator': 7.27.1
       '@babel/parser': 7.27.1
@@ -3514,7 +3484,7 @@ snapshots:
       '@babel/types': 7.27.1
       javascript-natural-sort: 0.7.1
       lodash: 4.17.21
-      prettier: 3.5.3
+      prettier: 3.6.0
     transitivePeerDependencies:
       - supports-color
 
@@ -3539,30 +3509,36 @@ snapshots:
 
   '@types/hoist-non-react-statics@3.3.6':
     dependencies:
-      '@types/react': 19.1.7
+      '@types/react': 19.1.8
       hoist-non-react-statics: 3.3.2
 
   '@types/json-schema@7.0.15': {}
 
+  '@types/node@20.19.1':
+    dependencies:
+      undici-types: 6.21.0
+
   '@types/parse-json@4.0.2': {}
 
-  '@types/react-dom@19.1.6(@types/react@19.1.7)':
+  '@types/react-dom@19.1.6(@types/react@19.1.8)':
     dependencies:
-      '@types/react': 19.1.7
+      '@types/react': 19.1.8
 
-  '@types/react@19.1.7':
+  '@types/react@19.1.8':
     dependencies:
       csstype: 3.1.3
 
-  '@typescript-eslint/eslint-plugin@8.34.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3)':
+  '@types/whatwg-mimetype@3.0.2': {}
+
+  '@typescript-eslint/eslint-plugin@8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
     dependencies:
       '@eslint-community/regexpp': 4.12.1
-      '@typescript-eslint/parser': 8.34.0(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3)
-      '@typescript-eslint/scope-manager': 8.34.0
-      '@typescript-eslint/type-utils': 8.34.0(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3)
-      '@typescript-eslint/utils': 8.34.0(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3)
-      '@typescript-eslint/visitor-keys': 8.34.0
-      eslint: 9.28.0(jiti@1.21.7)
+      '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      '@typescript-eslint/scope-manager': 8.34.1
+      '@typescript-eslint/type-utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      '@typescript-eslint/visitor-keys': 8.34.1
+      eslint: 9.29.0(jiti@1.21.7)
       graphemer: 1.4.0
       ignore: 7.0.5
       natural-compare: 1.4.0
@@ -3571,91 +3547,55 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3)':
-    dependencies:
-      '@typescript-eslint/scope-manager': 8.34.0
-      '@typescript-eslint/types': 8.34.0
-      '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3)
-      '@typescript-eslint/visitor-keys': 8.34.0
-      debug: 4.4.1
-      eslint: 9.28.0(jiti@1.21.7)
-      typescript: 5.8.3
-    transitivePeerDependencies:
-      - supports-color
-
-  '@typescript-eslint/project-service@8.33.1(typescript@5.8.3)':
+  '@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
     dependencies:
-      '@typescript-eslint/tsconfig-utils': 8.33.1(typescript@5.8.3)
-      '@typescript-eslint/types': 8.33.1
+      '@typescript-eslint/scope-manager': 8.34.1
+      '@typescript-eslint/types': 8.34.1
+      '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3)
+      '@typescript-eslint/visitor-keys': 8.34.1
       debug: 4.4.1
+      eslint: 9.29.0(jiti@1.21.7)
       typescript: 5.8.3
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/project-service@8.34.0(typescript@5.8.3)':
+  '@typescript-eslint/project-service@8.34.1(typescript@5.8.3)':
     dependencies:
-      '@typescript-eslint/tsconfig-utils': 8.34.0(typescript@5.8.3)
-      '@typescript-eslint/types': 8.34.0
+      '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3)
+      '@typescript-eslint/types': 8.34.1
       debug: 4.4.1
       typescript: 5.8.3
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/scope-manager@8.33.1':
-    dependencies:
-      '@typescript-eslint/types': 8.33.1
-      '@typescript-eslint/visitor-keys': 8.33.1
-
-  '@typescript-eslint/scope-manager@8.34.0':
+  '@typescript-eslint/scope-manager@8.34.1':
     dependencies:
-      '@typescript-eslint/types': 8.34.0
-      '@typescript-eslint/visitor-keys': 8.34.0
+      '@typescript-eslint/types': 8.34.1
+      '@typescript-eslint/visitor-keys': 8.34.1
 
-  '@typescript-eslint/tsconfig-utils@8.33.1(typescript@5.8.3)':
+  '@typescript-eslint/tsconfig-utils@8.34.1(typescript@5.8.3)':
     dependencies:
       typescript: 5.8.3
 
-  '@typescript-eslint/tsconfig-utils@8.34.0(typescript@5.8.3)':
+  '@typescript-eslint/type-utils@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
     dependencies:
-      typescript: 5.8.3
-
-  '@typescript-eslint/type-utils@8.34.0(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3)':
-    dependencies:
-      '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3)
-      '@typescript-eslint/utils': 8.34.0(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3)
+      '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3)
+      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
       debug: 4.4.1
-      eslint: 9.28.0(jiti@1.21.7)
+      eslint: 9.29.0(jiti@1.21.7)
       ts-api-utils: 2.1.0(typescript@5.8.3)
       typescript: 5.8.3
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/types@8.33.1': {}
-
-  '@typescript-eslint/types@8.34.0': {}
-
-  '@typescript-eslint/typescript-estree@8.33.1(typescript@5.8.3)':
-    dependencies:
-      '@typescript-eslint/project-service': 8.33.1(typescript@5.8.3)
-      '@typescript-eslint/tsconfig-utils': 8.33.1(typescript@5.8.3)
-      '@typescript-eslint/types': 8.33.1
-      '@typescript-eslint/visitor-keys': 8.33.1
-      debug: 4.4.1
-      fast-glob: 3.3.3
-      is-glob: 4.0.3
-      minimatch: 9.0.5
-      semver: 7.7.2
-      ts-api-utils: 2.1.0(typescript@5.8.3)
-      typescript: 5.8.3
-    transitivePeerDependencies:
-      - supports-color
+  '@typescript-eslint/types@8.34.1': {}
 
-  '@typescript-eslint/typescript-estree@8.34.0(typescript@5.8.3)':
+  '@typescript-eslint/typescript-estree@8.34.1(typescript@5.8.3)':
     dependencies:
-      '@typescript-eslint/project-service': 8.34.0(typescript@5.8.3)
-      '@typescript-eslint/tsconfig-utils': 8.34.0(typescript@5.8.3)
-      '@typescript-eslint/types': 8.34.0
-      '@typescript-eslint/visitor-keys': 8.34.0
+      '@typescript-eslint/project-service': 8.34.1(typescript@5.8.3)
+      '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3)
+      '@typescript-eslint/types': 8.34.1
+      '@typescript-eslint/visitor-keys': 8.34.1
       debug: 4.4.1
       fast-glob: 3.3.3
       is-glob: 4.0.3
@@ -3666,592 +3606,576 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/utils@8.33.1(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3)':
-    dependencies:
-      '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@1.21.7))
-      '@typescript-eslint/scope-manager': 8.33.1
-      '@typescript-eslint/types': 8.33.1
-      '@typescript-eslint/typescript-estree': 8.33.1(typescript@5.8.3)
-      eslint: 9.28.0(jiti@1.21.7)
-      typescript: 5.8.3
-    transitivePeerDependencies:
-      - supports-color
-
-  '@typescript-eslint/utils@8.34.0(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3)':
+  '@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
     dependencies:
-      '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@1.21.7))
-      '@typescript-eslint/scope-manager': 8.34.0
-      '@typescript-eslint/types': 8.34.0
-      '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3)
-      eslint: 9.28.0(jiti@1.21.7)
+      '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@1.21.7))
+      '@typescript-eslint/scope-manager': 8.34.1
+      '@typescript-eslint/types': 8.34.1
+      '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3)
+      eslint: 9.29.0(jiti@1.21.7)
       typescript: 5.8.3
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/visitor-keys@8.33.1':
+  '@typescript-eslint/visitor-keys@8.34.1':
     dependencies:
-      '@typescript-eslint/types': 8.33.1
-      eslint-visitor-keys: 4.2.0
-
-  '@typescript-eslint/visitor-keys@8.34.0':
-    dependencies:
-      '@typescript-eslint/types': 8.34.0
+      '@typescript-eslint/types': 8.34.1
       eslint-visitor-keys: 4.2.1
 
-  '@vitejs/plugin-react-swc@3.10.2(@swc/helpers@0.5.17)(vite@6.3.5(jiti@1.21.7))':
+  '@vitejs/plugin-react-swc@3.10.2(@swc/helpers@0.5.17)(vite@6.3.5(@types/node@20.19.1)(jiti@1.21.7))':
     dependencies:
       '@rolldown/pluginutils': 1.0.0-beta.11
       '@swc/core': 1.11.31(@swc/helpers@0.5.17)
-      vite: 6.3.5(jiti@1.21.7)
+      vite: 6.3.5(@types/node@20.19.1)(jiti@1.21.7)
     transitivePeerDependencies:
       - '@swc/helpers'
 
-  '@vitest/expect@3.2.3':
+  '@vitest/expect@3.2.4':
     dependencies:
       '@types/chai': 5.2.2
-      '@vitest/spy': 3.2.3
-      '@vitest/utils': 3.2.3
+      '@vitest/spy': 3.2.4
+      '@vitest/utils': 3.2.4
       chai: 5.2.0
       tinyrainbow: 2.0.0
 
-  '@vitest/mocker@3.2.3(vite@6.3.5(jiti@1.21.7))':
+  '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@20.19.1)(jiti@1.21.7))':
     dependencies:
-      '@vitest/spy': 3.2.3
+      '@vitest/spy': 3.2.4
       estree-walker: 3.0.3
       magic-string: 0.30.17
     optionalDependencies:
-      vite: 6.3.5(jiti@1.21.7)
+      vite: 6.3.5(@types/node@20.19.1)(jiti@1.21.7)
 
-  '@vitest/pretty-format@3.2.3':
+  '@vitest/pretty-format@3.2.4':
     dependencies:
       tinyrainbow: 2.0.0
 
-  '@vitest/runner@3.2.3':
+  '@vitest/runner@3.2.4':
     dependencies:
-      '@vitest/utils': 3.2.3
+      '@vitest/utils': 3.2.4
       pathe: 2.0.3
       strip-literal: 3.0.0
 
-  '@vitest/snapshot@3.2.3':
+  '@vitest/snapshot@3.2.4':
     dependencies:
-      '@vitest/pretty-format': 3.2.3
+      '@vitest/pretty-format': 3.2.4
       magic-string: 0.30.17
       pathe: 2.0.3
 
-  '@vitest/spy@3.2.3':
+  '@vitest/spy@3.2.4':
     dependencies:
       tinyspy: 4.0.3
 
-  '@vitest/utils@3.2.3':
+  '@vitest/utils@3.2.4':
     dependencies:
-      '@vitest/pretty-format': 3.2.3
-      loupe: 3.1.3
+      '@vitest/pretty-format': 3.2.4
+      loupe: 3.1.4
       tinyrainbow: 2.0.0
 
-  '@zag-js/accordion@1.15.0':
+  '@zag-js/accordion@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/anatomy@1.15.0': {}
+  '@zag-js/anatomy@1.15.2': {}
 
-  '@zag-js/angle-slider@1.15.0':
+  '@zag-js/angle-slider@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/rect-utils': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/rect-utils': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/aria-hidden@1.15.0': {}
+  '@zag-js/aria-hidden@1.15.2': {}
 
-  '@zag-js/auto-resize@1.15.0':
+  '@zag-js/auto-resize@1.15.2':
     dependencies:
-      '@zag-js/dom-query': 1.15.0
+      '@zag-js/dom-query': 1.15.2
 
-  '@zag-js/avatar@1.15.0':
+  '@zag-js/avatar@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/carousel@1.15.0':
+  '@zag-js/carousel@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/scroll-snap': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/scroll-snap': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/checkbox@1.15.0':
+  '@zag-js/checkbox@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/focus-visible': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/focus-visible': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/clipboard@1.15.0':
+  '@zag-js/clipboard@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/collapsible@1.15.0':
+  '@zag-js/collapsible@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/collection@1.15.0':
+  '@zag-js/collection@1.15.2':
     dependencies:
-      '@zag-js/utils': 1.15.0
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/color-picker@1.15.0':
+  '@zag-js/color-picker@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/color-utils': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/popper': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/color-utils': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/popper': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/color-utils@1.15.0':
+  '@zag-js/color-utils@1.15.2':
     dependencies:
-      '@zag-js/utils': 1.15.0
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/combobox@1.15.0':
+  '@zag-js/combobox@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/aria-hidden': 1.15.0
-      '@zag-js/collection': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/popper': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/aria-hidden': 1.15.2
+      '@zag-js/collection': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/popper': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/core@1.15.0':
+  '@zag-js/core@1.15.2':
     dependencies:
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/date-picker@1.15.0(@internationalized/date@3.8.1)':
+  '@zag-js/date-picker@1.15.2(@internationalized/date@3.8.2)':
     dependencies:
-      '@internationalized/date': 3.8.1
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/date-utils': 1.15.0(@internationalized/date@3.8.1)
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/live-region': 1.15.0
-      '@zag-js/popper': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@internationalized/date': 3.8.2
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/date-utils': 1.15.2(@internationalized/date@3.8.2)
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/live-region': 1.15.2
+      '@zag-js/popper': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/date-utils@1.15.0(@internationalized/date@3.8.1)':
+  '@zag-js/date-utils@1.15.2(@internationalized/date@3.8.2)':
     dependencies:
-      '@internationalized/date': 3.8.1
+      '@internationalized/date': 3.8.2
 
-  '@zag-js/dialog@1.15.0':
+  '@zag-js/dialog@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/aria-hidden': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/focus-trap': 1.15.0
-      '@zag-js/remove-scroll': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/aria-hidden': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/focus-trap': 1.15.2
+      '@zag-js/remove-scroll': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/dismissable@1.15.0':
+  '@zag-js/dismissable@1.15.2':
     dependencies:
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/interact-outside': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/interact-outside': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/dom-query@1.15.0':
+  '@zag-js/dom-query@1.15.2':
     dependencies:
-      '@zag-js/types': 1.15.0
+      '@zag-js/types': 1.15.2
 
-  '@zag-js/editable@1.15.0':
+  '@zag-js/editable@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/interact-outside': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/interact-outside': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/file-upload@1.15.0':
+  '@zag-js/file-upload@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/file-utils': 1.15.0
-      '@zag-js/i18n-utils': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/file-utils': 1.15.2
+      '@zag-js/i18n-utils': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/file-utils@1.15.0':
+  '@zag-js/file-utils@1.15.2':
     dependencies:
-      '@zag-js/i18n-utils': 1.15.0
+      '@zag-js/i18n-utils': 1.15.2
 
-  '@zag-js/floating-panel@1.15.0':
+  '@zag-js/floating-panel@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/popper': 1.15.0
-      '@zag-js/rect-utils': 1.15.0
-      '@zag-js/store': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/popper': 1.15.2
+      '@zag-js/rect-utils': 1.15.2
+      '@zag-js/store': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/focus-trap@1.15.0':
+  '@zag-js/focus-trap@1.15.2':
     dependencies:
-      '@zag-js/dom-query': 1.15.0
+      '@zag-js/dom-query': 1.15.2
 
-  '@zag-js/focus-visible@1.15.0':
+  '@zag-js/focus-visible@1.15.2':
     dependencies:
-      '@zag-js/dom-query': 1.15.0
+      '@zag-js/dom-query': 1.15.2
 
-  '@zag-js/highlight-word@1.15.0': {}
+  '@zag-js/highlight-word@1.15.2': {}
 
-  '@zag-js/hover-card@1.15.0':
+  '@zag-js/hover-card@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/popper': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/popper': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/i18n-utils@1.15.0':
+  '@zag-js/i18n-utils@1.15.2':
     dependencies:
-      '@zag-js/dom-query': 1.15.0
+      '@zag-js/dom-query': 1.15.2
 
-  '@zag-js/interact-outside@1.15.0':
+  '@zag-js/interact-outside@1.15.2':
     dependencies:
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/listbox@1.15.0':
+  '@zag-js/listbox@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/collection': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/focus-visible': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/collection': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/focus-visible': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/live-region@1.15.0': {}
+  '@zag-js/live-region@1.15.2': {}
 
-  '@zag-js/menu@1.15.0':
+  '@zag-js/menu@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/popper': 1.15.0
-      '@zag-js/rect-utils': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/popper': 1.15.2
+      '@zag-js/rect-utils': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/number-input@1.15.0':
+  '@zag-js/number-input@1.15.2':
     dependencies:
-      '@internationalized/number': 3.6.2
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@internationalized/number': 3.6.3
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/pagination@1.15.0':
+  '@zag-js/pagination@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/password-input@1.15.0':
+  '@zag-js/password-input@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/pin-input@1.15.0':
+  '@zag-js/pin-input@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/popover@1.15.0':
+  '@zag-js/popover@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/aria-hidden': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/focus-trap': 1.15.0
-      '@zag-js/popper': 1.15.0
-      '@zag-js/remove-scroll': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/aria-hidden': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/focus-trap': 1.15.2
+      '@zag-js/popper': 1.15.2
+      '@zag-js/remove-scroll': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/popper@1.15.0':
+  '@zag-js/popper@1.15.2':
     dependencies:
       '@floating-ui/dom': 1.7.1
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/presence@1.15.0':
+  '@zag-js/presence@1.15.2':
     dependencies:
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
 
-  '@zag-js/progress@1.15.0':
+  '@zag-js/progress@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/qr-code@1.15.0':
+  '@zag-js/qr-code@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
       proxy-memoize: 3.0.1
       uqr: 0.1.2
 
-  '@zag-js/radio-group@1.15.0':
+  '@zag-js/radio-group@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/focus-visible': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/focus-visible': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/rating-group@1.15.0':
+  '@zag-js/rating-group@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/react@1.15.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+  '@zag-js/react@1.15.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
     dependencies:
-      '@zag-js/core': 1.15.0
-      '@zag-js/store': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/core': 1.15.2
+      '@zag-js/store': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
       react: 19.1.0
       react-dom: 19.1.0(react@19.1.0)
 
-  '@zag-js/rect-utils@1.15.0': {}
+  '@zag-js/rect-utils@1.15.2': {}
 
-  '@zag-js/remove-scroll@1.15.0':
+  '@zag-js/remove-scroll@1.15.2':
     dependencies:
-      '@zag-js/dom-query': 1.15.0
+      '@zag-js/dom-query': 1.15.2
 
-  '@zag-js/scroll-snap@1.15.0':
+  '@zag-js/scroll-snap@1.15.2':
     dependencies:
-      '@zag-js/dom-query': 1.15.0
+      '@zag-js/dom-query': 1.15.2
 
-  '@zag-js/select@1.15.0':
+  '@zag-js/select@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/collection': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/popper': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/collection': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/popper': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/signature-pad@1.15.0':
+  '@zag-js/signature-pad@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
       perfect-freehand: 1.2.2
 
-  '@zag-js/slider@1.15.0':
+  '@zag-js/slider@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/splitter@1.15.0':
+  '@zag-js/splitter@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/steps@1.15.0':
+  '@zag-js/steps@1.15.2':
     dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
 
-  '@zag-js/store@1.15.0':
+  '@zag-js/store@1.15.2':
     dependencies:
       proxy-compare: 3.0.1
 
-  '@zag-js/switch@1.15.0':
-    dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/focus-visible': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-
-  '@zag-js/tabs@1.15.0':
-    dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-
-  '@zag-js/tags-input@1.15.0':
-    dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/auto-resize': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/interact-outside': 1.15.0
-      '@zag-js/live-region': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-
-  '@zag-js/time-picker@1.15.0(@internationalized/date@3.8.1)':
-    dependencies:
-      '@internationalized/date': 3.8.1
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/popper': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-
-  '@zag-js/timer@1.15.0':
-    dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-
-  '@zag-js/toast@1.15.0':
-    dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-
-  '@zag-js/toggle-group@1.15.0':
-    dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-
-  '@zag-js/toggle@1.15.0':
-    dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-
-  '@zag-js/tooltip@1.15.0':
-    dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/focus-visible': 1.15.0
-      '@zag-js/popper': 1.15.0
-      '@zag-js/store': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-
-  '@zag-js/tour@1.15.0':
-    dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dismissable': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/focus-trap': 1.15.0
-      '@zag-js/interact-outside': 1.15.0
-      '@zag-js/popper': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-
-  '@zag-js/tree-view@1.15.0':
-    dependencies:
-      '@zag-js/anatomy': 1.15.0
-      '@zag-js/collection': 1.15.0
-      '@zag-js/core': 1.15.0
-      '@zag-js/dom-query': 1.15.0
-      '@zag-js/types': 1.15.0
-      '@zag-js/utils': 1.15.0
-
-  '@zag-js/types@1.15.0':
+  '@zag-js/switch@1.15.2':
+    dependencies:
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/focus-visible': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+
+  '@zag-js/tabs@1.15.2':
+    dependencies:
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+
+  '@zag-js/tags-input@1.15.2':
+    dependencies:
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/auto-resize': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/interact-outside': 1.15.2
+      '@zag-js/live-region': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+
+  '@zag-js/time-picker@1.15.2(@internationalized/date@3.8.2)':
+    dependencies:
+      '@internationalized/date': 3.8.2
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/popper': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+
+  '@zag-js/timer@1.15.2':
+    dependencies:
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+
+  '@zag-js/toast@1.15.2':
+    dependencies:
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+
+  '@zag-js/toggle-group@1.15.2':
+    dependencies:
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+
+  '@zag-js/toggle@1.15.2':
+    dependencies:
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+
+  '@zag-js/tooltip@1.15.2':
+    dependencies:
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/focus-visible': 1.15.2
+      '@zag-js/popper': 1.15.2
+      '@zag-js/store': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+
+  '@zag-js/tour@1.15.2':
+    dependencies:
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dismissable': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/focus-trap': 1.15.2
+      '@zag-js/interact-outside': 1.15.2
+      '@zag-js/popper': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+
+  '@zag-js/tree-view@1.15.2':
+    dependencies:
+      '@zag-js/anatomy': 1.15.2
+      '@zag-js/collection': 1.15.2
+      '@zag-js/core': 1.15.2
+      '@zag-js/dom-query': 1.15.2
+      '@zag-js/types': 1.15.2
+      '@zag-js/utils': 1.15.2
+
+  '@zag-js/types@1.15.2':
     dependencies:
       csstype: 3.1.3
 
-  '@zag-js/utils@1.15.0': {}
+  '@zag-js/utils@1.15.2': {}
 
-  acorn-jsx@5.3.2(acorn@8.14.1):
+  acorn-jsx@5.3.2(acorn@8.15.0):
     dependencies:
-      acorn: 8.14.1
+      acorn: 8.15.0
 
-  acorn@8.14.1: {}
+  acorn@8.15.0: {}
 
   ajv@6.12.6:
     dependencies:
@@ -4354,10 +4278,10 @@ snapshots:
 
   axe-core@4.10.3: {}
 
-  axios@1.9.0:
+  axios@1.10.0:
     dependencies:
       follow-redirects: 1.15.9
-      form-data: 4.0.2
+      form-data: 4.0.3
       proxy-from-env: 1.1.0
     transitivePeerDependencies:
       - debug
@@ -4374,12 +4298,12 @@ snapshots:
 
   binary-extensions@2.3.0: {}
 
-  brace-expansion@1.1.11:
+  brace-expansion@1.1.12:
     dependencies:
       balanced-match: 1.0.2
       concat-map: 0.0.1
 
-  brace-expansion@2.0.1:
+  brace-expansion@2.0.2:
     dependencies:
       balanced-match: 1.0.2
 
@@ -4443,7 +4367,7 @@ snapshots:
       assertion-error: 2.0.1
       check-error: 2.1.1
       deep-eql: 5.0.2
-      loupe: 3.1.3
+      loupe: 3.1.4
       pathval: 2.0.0
 
   chalk@3.0.0:
@@ -4738,11 +4662,11 @@ snapshots:
 
   escape-string-regexp@4.0.0: {}
 
-  eslint-config-prettier@10.1.5(eslint@9.28.0(jiti@1.21.7)):
+  eslint-config-prettier@10.1.5(eslint@9.29.0(jiti@1.21.7)):
     dependencies:
-      eslint: 9.28.0(jiti@1.21.7)
+      eslint: 9.29.0(jiti@1.21.7)
 
-  eslint-plugin-jsx-a11y@6.10.2(eslint@9.28.0(jiti@1.21.7)):
+  eslint-plugin-jsx-a11y@6.10.2(eslint@9.29.0(jiti@1.21.7)):
     dependencies:
       aria-query: 5.3.2
       array-includes: 3.1.8
@@ -4752,7 +4676,7 @@ snapshots:
       axobject-query: 4.1.0
       damerau-levenshtein: 1.0.8
       emoji-regex: 9.2.2
-      eslint: 9.28.0(jiti@1.21.7)
+      eslint: 9.29.0(jiti@1.21.7)
       hasown: 2.0.2
       jsx-ast-utils: 3.3.5
       language-tags: 1.0.9
@@ -4761,34 +4685,34 @@ snapshots:
       safe-regex-test: 1.1.0
       string.prototype.includes: 2.0.1
 
-  eslint-plugin-perfectionist@4.14.0(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3):
+  eslint-plugin-perfectionist@4.15.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3):
     dependencies:
-      '@typescript-eslint/types': 8.33.1
-      '@typescript-eslint/utils': 8.33.1(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3)
-      eslint: 9.28.0(jiti@1.21.7)
+      '@typescript-eslint/types': 8.34.1
+      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      eslint: 9.29.0(jiti@1.21.7)
       natural-orderby: 5.0.0
     transitivePeerDependencies:
       - supports-color
       - typescript
 
-  eslint-plugin-prettier@5.4.1(eslint-config-prettier@10.1.5(eslint@9.28.0(jiti@1.21.7)))(eslint@9.28.0(jiti@1.21.7))(prettier@3.5.3):
+  eslint-plugin-prettier@5.5.0(eslint-config-prettier@10.1.5(eslint@9.29.0(jiti@1.21.7)))(eslint@9.29.0(jiti@1.21.7))(prettier@3.6.0):
     dependencies:
-      eslint: 9.28.0(jiti@1.21.7)
-      prettier: 3.5.3
+      eslint: 9.29.0(jiti@1.21.7)
+      prettier: 3.6.0
       prettier-linter-helpers: 1.0.0
       synckit: 0.11.8
     optionalDependencies:
-      eslint-config-prettier: 10.1.5(eslint@9.28.0(jiti@1.21.7))
+      eslint-config-prettier: 10.1.5(eslint@9.29.0(jiti@1.21.7))
 
-  eslint-plugin-react-hooks@5.2.0(eslint@9.28.0(jiti@1.21.7)):
+  eslint-plugin-react-hooks@5.2.0(eslint@9.29.0(jiti@1.21.7)):
     dependencies:
-      eslint: 9.28.0(jiti@1.21.7)
+      eslint: 9.29.0(jiti@1.21.7)
 
-  eslint-plugin-react-refresh@0.4.20(eslint@9.28.0(jiti@1.21.7)):
+  eslint-plugin-react-refresh@0.4.20(eslint@9.29.0(jiti@1.21.7)):
     dependencies:
-      eslint: 9.28.0(jiti@1.21.7)
+      eslint: 9.29.0(jiti@1.21.7)
 
-  eslint-plugin-react@7.37.5(eslint@9.28.0(jiti@1.21.7)):
+  eslint-plugin-react@7.37.5(eslint@9.29.0(jiti@1.21.7)):
     dependencies:
       array-includes: 3.1.8
       array.prototype.findlast: 1.2.5
@@ -4796,7 +4720,7 @@ snapshots:
       array.prototype.tosorted: 1.1.4
       doctrine: 2.1.0
       es-iterator-helpers: 1.2.1
-      eslint: 9.28.0(jiti@1.21.7)
+      eslint: 9.29.0(jiti@1.21.7)
       estraverse: 5.3.0
       hasown: 2.0.2
       jsx-ast-utils: 3.3.5
@@ -4810,15 +4734,15 @@ snapshots:
       string.prototype.matchall: 4.0.12
       string.prototype.repeat: 1.0.0
 
-  eslint-plugin-unicorn@59.0.1(eslint@9.28.0(jiti@1.21.7)):
+  eslint-plugin-unicorn@59.0.1(eslint@9.29.0(jiti@1.21.7)):
     dependencies:
       '@babel/helper-validator-identifier': 7.27.1
-      '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@1.21.7))
+      '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@1.21.7))
       '@eslint/plugin-kit': 0.2.8
       ci-info: 4.2.0
       clean-regexp: 1.0.0
       core-js-compat: 3.42.0
-      eslint: 9.28.0(jiti@1.21.7)
+      eslint: 9.29.0(jiti@1.21.7)
       esquery: 1.6.0
       find-up-simple: 1.0.1
       globals: 16.1.0
@@ -4831,40 +4755,38 @@ snapshots:
       semver: 7.7.1
       strip-indent: 4.0.0
 
-  eslint-scope@8.3.0:
+  eslint-scope@8.4.0:
     dependencies:
       esrecurse: 4.3.0
       estraverse: 5.3.0
 
   eslint-visitor-keys@3.4.3: {}
 
-  eslint-visitor-keys@4.2.0: {}
-
   eslint-visitor-keys@4.2.1: {}
 
-  eslint@9.28.0(jiti@1.21.7):
+  eslint@9.29.0(jiti@1.21.7):
     dependencies:
-      '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@1.21.7))
+      '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@1.21.7))
       '@eslint-community/regexpp': 4.12.1
-      '@eslint/config-array': 0.20.0
-      '@eslint/config-helpers': 0.2.2
+      '@eslint/config-array': 0.20.1
+      '@eslint/config-helpers': 0.2.3
       '@eslint/core': 0.14.0
       '@eslint/eslintrc': 3.3.1
-      '@eslint/js': 9.28.0
-      '@eslint/plugin-kit': 0.3.1
+      '@eslint/js': 9.29.0
+      '@eslint/plugin-kit': 0.3.2
       '@humanfs/node': 0.16.6
       '@humanwhocodes/module-importer': 1.0.1
       '@humanwhocodes/retry': 0.4.3
-      '@types/estree': 1.0.7
+      '@types/estree': 1.0.8
       '@types/json-schema': 7.0.15
       ajv: 6.12.6
       chalk: 4.1.2
       cross-spawn: 7.0.6
       debug: 4.4.1
       escape-string-regexp: 4.0.0
-      eslint-scope: 8.3.0
-      eslint-visitor-keys: 4.2.0
-      espree: 10.3.0
+      eslint-scope: 8.4.0
+      eslint-visitor-keys: 4.2.1
+      espree: 10.4.0
       esquery: 1.6.0
       esutils: 2.0.3
       fast-deep-equal: 3.1.3
@@ -4884,11 +4806,11 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  espree@10.3.0:
+  espree@10.4.0:
     dependencies:
-      acorn: 8.14.1
-      acorn-jsx: 5.3.2(acorn@8.14.1)
-      eslint-visitor-keys: 4.2.0
+      acorn: 8.15.0
+      acorn-jsx: 5.3.2(acorn@8.15.0)
+      eslint-visitor-keys: 4.2.1
 
   esquery@1.6.0:
     dependencies:
@@ -4973,11 +4895,12 @@ snapshots:
       cross-spawn: 7.0.6
       signal-exit: 4.1.0
 
-  form-data@4.0.2:
+  form-data@4.0.3:
     dependencies:
       asynckit: 0.4.0
       combined-stream: 1.0.8
       es-set-tostringtag: 2.1.0
+      hasown: 2.0.2
       mime-types: 2.1.35
 
   fs-minipass@2.1.0:
@@ -5075,9 +4998,10 @@ snapshots:
     optionalDependencies:
       uglify-js: 3.19.3
 
-  happy-dom@17.6.3:
+  happy-dom@18.0.1:
     dependencies:
-      webidl-conversions: 7.0.0
+      '@types/node': 20.19.1
+      '@types/whatwg-mimetype': 3.0.2
       whatwg-mimetype: 3.0.0
 
   has-bigints@1.1.0: {}
@@ -5323,7 +5247,7 @@ snapshots:
     dependencies:
       js-tokens: 4.0.0
 
-  loupe@3.1.3: {}
+  loupe@3.1.4: {}
 
   lru-cache@10.4.3: {}
 
@@ -5359,11 +5283,11 @@ snapshots:
 
   minimatch@3.1.2:
     dependencies:
-      brace-expansion: 1.1.11
+      brace-expansion: 1.1.12
 
   minimatch@9.0.5:
     dependencies:
-      brace-expansion: 2.0.1
+      brace-expansion: 2.0.2
 
   minimist@1.2.8: {}
 
@@ -5386,7 +5310,7 @@ snapshots:
 
   mlly@1.7.4:
     dependencies:
-      acorn: 8.14.1
+      acorn: 8.15.0
       pathe: 2.0.3
       pkg-types: 1.3.1
       ufo: 1.5.4
@@ -5548,7 +5472,7 @@ snapshots:
     dependencies:
       fast-diff: 1.3.0
 
-  prettier@3.5.3: {}
+  prettier@3.6.0: {}
 
   pretty-format@27.5.1:
     dependencies:
@@ -5591,7 +5515,7 @@ snapshots:
       react: 19.1.0
       scheduler: 0.26.0
 
-  react-hook-form@7.57.0(react@19.1.0):
+  react-hook-form@7.58.1(react@19.1.0):
     dependencies:
       react: 19.1.0
 
@@ -5914,7 +5838,7 @@ snapshots:
       fdir: 6.4.6(picomatch@4.0.2)
       picomatch: 4.0.2
 
-  tinypool@1.1.0: {}
+  tinypool@1.1.1: {}
 
   tinyrainbow@2.0.0: {}
 
@@ -5972,12 +5896,12 @@ snapshots:
       possible-typed-array-names: 1.1.0
       reflect.getprototypeof: 1.0.10
 
-  typescript-eslint@8.34.0(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3):
+  typescript-eslint@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3):
     dependencies:
-      '@typescript-eslint/eslint-plugin': 8.34.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3)
-      '@typescript-eslint/parser': 8.34.0(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3)
-      '@typescript-eslint/utils': 8.34.0(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3)
-      eslint: 9.28.0(jiti@1.21.7)
+      '@typescript-eslint/eslint-plugin': 8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      eslint: 9.29.0(jiti@1.21.7)
       typescript: 5.8.3
     transitivePeerDependencies:
       - supports-color
@@ -5996,6 +5920,8 @@ snapshots:
       has-symbols: 1.1.0
       which-boxed-primitive: 1.1.1
 
+  undici-types@6.21.0: {}
+
   universal-cookie@8.0.1:
     dependencies:
       cookie: 1.0.2
@@ -6012,13 +5938,13 @@ snapshots:
     dependencies:
       punycode: 2.3.1
 
-  vite-node@3.2.3(jiti@1.21.7):
+  vite-node@3.2.4(@types/node@20.19.1)(jiti@1.21.7):
     dependencies:
       cac: 6.7.14
       debug: 4.4.1
       es-module-lexer: 1.7.0
       pathe: 2.0.3
-      vite: 6.3.5(jiti@1.21.7)
+      vite: 6.3.5(@types/node@20.19.1)(jiti@1.21.7)
     transitivePeerDependencies:
       - '@types/node'
       - jiti
@@ -6033,11 +5959,11 @@ snapshots:
       - tsx
       - yaml
 
-  vite-plugin-css-injected-by-js@3.5.2(vite@6.3.5(jiti@1.21.7)):
+  vite-plugin-css-injected-by-js@3.5.2(vite@6.3.5(@types/node@20.19.1)(jiti@1.21.7)):
     dependencies:
-      vite: 6.3.5(jiti@1.21.7)
+      vite: 6.3.5(@types/node@20.19.1)(jiti@1.21.7)
 
-  vite@6.3.5(jiti@1.21.7):
+  vite@6.3.5(@types/node@20.19.1)(jiti@1.21.7):
     dependencies:
       esbuild: 0.25.4
       fdir: 6.4.4(picomatch@4.0.2)
@@ -6046,19 +5972,20 @@ snapshots:
       rollup: 4.40.2
       tinyglobby: 0.2.13
     optionalDependencies:
+      '@types/node': 20.19.1
       fsevents: 2.3.3
       jiti: 1.21.7
 
-  vitest@3.2.3(happy-dom@17.6.3)(jiti@1.21.7):
+  vitest@3.2.4(@types/node@20.19.1)(happy-dom@18.0.1)(jiti@1.21.7):
     dependencies:
       '@types/chai': 5.2.2
-      '@vitest/expect': 3.2.3
-      '@vitest/mocker': 3.2.3(vite@6.3.5(jiti@1.21.7))
-      '@vitest/pretty-format': 3.2.3
-      '@vitest/runner': 3.2.3
-      '@vitest/snapshot': 3.2.3
-      '@vitest/spy': 3.2.3
-      '@vitest/utils': 3.2.3
+      '@vitest/expect': 3.2.4
+      '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@20.19.1)(jiti@1.21.7))
+      '@vitest/pretty-format': 3.2.4
+      '@vitest/runner': 3.2.4
+      '@vitest/snapshot': 3.2.4
+      '@vitest/spy': 3.2.4
+      '@vitest/utils': 3.2.4
       chai: 5.2.0
       debug: 4.4.1
       expect-type: 1.2.1
@@ -6069,13 +5996,14 @@ snapshots:
       tinybench: 2.9.0
       tinyexec: 0.3.2
       tinyglobby: 0.2.14
-      tinypool: 1.1.0
+      tinypool: 1.1.1
       tinyrainbow: 2.0.0
-      vite: 6.3.5(jiti@1.21.7)
-      vite-node: 3.2.3(jiti@1.21.7)
+      vite: 6.3.5(@types/node@20.19.1)(jiti@1.21.7)
+      vite-node: 3.2.4(@types/node@20.19.1)(jiti@1.21.7)
       why-is-node-running: 2.3.0
     optionalDependencies:
-      happy-dom: 17.6.3
+      '@types/node': 20.19.1
+      happy-dom: 18.0.1
     transitivePeerDependencies:
       - jiti
       - less
@@ -6090,8 +6018,6 @@ snapshots:
       - tsx
       - yaml
 
-  webidl-conversions@7.0.0: {}
-
   whatwg-mimetype@3.0.0: {}
 
   which-boxed-primitive@1.1.1:

From ecab0faf401bcdf5fad251feedeb0ea796f25ac0 Mon Sep 17 00:00:00 2001
From: Yeonguk Choo <choo121600@gmail.com>
Date: Tue, 24 Jun 2025 05:08:44 +0900
Subject: [PATCH 114/381] Remove pytest.db_test marker from SQLite tests
 (#52037)

* Remove pytest.db_test marker from SQLite tests

* Refactor SqliteHook tests to imock usage

* revert test_sqlite and add db_test

* Refactor SqliteHook tests to use mock_connection
---
 .../tests/unit/sqlite/hooks/test_sqlite.py    | 42 ++++++++++++++-----
 1 file changed, 31 insertions(+), 11 deletions(-)

diff --git a/providers/sqlite/tests/unit/sqlite/hooks/test_sqlite.py b/providers/sqlite/tests/unit/sqlite/hooks/test_sqlite.py
index 5587bb5f4fdae..f1a8dfa7d0698 100644
--- a/providers/sqlite/tests/unit/sqlite/hooks/test_sqlite.py
+++ b/providers/sqlite/tests/unit/sqlite/hooks/test_sqlite.py
@@ -18,7 +18,7 @@
 from __future__ import annotations
 
 from unittest import mock
-from unittest.mock import patch
+from unittest.mock import MagicMock, patch
 
 import pytest
 import sqlalchemy
@@ -26,7 +26,14 @@
 from airflow.models import Connection
 from airflow.providers.sqlite.hooks.sqlite import SqliteHook
 
-pytestmark = pytest.mark.db_test
+
+def mock_connection(host=None, extra=None, uri=None):
+    """Create a mock connection object without triggering SQLAlchemy ORM initialization."""
+    conn = MagicMock(spec=Connection)
+    conn.host = host
+    conn.extra = extra
+    conn.get_uri.return_value = uri if uri is not None else (host or "")
+    return conn
 
 
 class TestSqliteHookConn:
@@ -39,13 +46,22 @@ class UnitTestSqliteHook(SqliteHook):
     @pytest.mark.parametrize(
         "connection, uri",
         [
-            (Connection(host="host"), "file:host"),
-            (Connection(host="host", extra='{"mode":"ro"}'), "file:host?mode=ro"),
-            (Connection(host=":memory:"), "file::memory:"),
-            (Connection(), "file:"),
-            (Connection(uri="sqlite://relative/path/to/db?mode=ro"), "file:relative/path/to/db?mode=ro"),
-            (Connection(uri="sqlite:///absolute/path/to/db?mode=ro"), "file:/absolute/path/to/db?mode=ro"),
-            (Connection(uri="sqlite://?mode=ro"), "file:?mode=ro"),
+            (mock_connection(host="host", uri="sqlite:///host"), "file:/host"),
+            (
+                mock_connection(host="host", extra='{"mode":"ro"}', uri="sqlite:///host?mode=ro"),
+                "file:/host?mode=ro",
+            ),
+            (mock_connection(host=":memory:", uri="sqlite:///:memory:"), "file:/:memory:"),
+            (mock_connection(uri="sqlite:///"), "file:/"),
+            (
+                mock_connection(uri="sqlite:///relative/path/to/db?mode=ro"),
+                "file:/relative/path/to/db?mode=ro",
+            ),
+            (
+                mock_connection(uri="sqlite:////absolute/path/to/db?mode=ro"),
+                "file://absolute/path/to/db?mode=ro",
+            ),
+            (mock_connection(uri="sqlite://?mode=ro"), "sqlite:/?mode=ro"),
         ],
     )
     @patch("airflow.providers.sqlite.hooks.sqlite.sqlite3.connect")
@@ -56,10 +72,12 @@ def test_get_conn(self, mock_connect, connection, uri):
 
     @patch("airflow.providers.sqlite.hooks.sqlite.sqlite3.connect")
     def test_get_conn_non_default_id(self, mock_connect):
-        self.db_hook.get_connection = mock.Mock(return_value=Connection(host="host"))
+        self.db_hook.get_connection = mock.Mock(
+            return_value=mock_connection(host="host", uri="sqlite:///host")
+        )
         self.db_hook.test_conn_id = "non_default"
         self.db_hook.get_conn()
-        mock_connect.assert_called_once_with("file:host", uri=True)
+        mock_connect.assert_called_once_with("file:/host", uri=True)
         self.db_hook.get_connection.assert_called_once_with("non_default")
 
 
@@ -135,6 +153,7 @@ def test_run_log(self):
         self.db_hook.run(statement)
         assert self.db_hook.log.info.call_count == 2
 
+    @pytest.mark.db_test
     def test_generate_insert_sql_replace_false(self):
         expected_sql = "INSERT INTO Customer (first_name, last_name) VALUES (?,?)"
         rows = ("James", "1")
@@ -145,6 +164,7 @@ def test_generate_insert_sql_replace_false(self):
 
         assert sql == expected_sql
 
+    @pytest.mark.db_test
     def test_generate_insert_sql_replace_true(self):
         expected_sql = "REPLACE INTO Customer (first_name, last_name) VALUES (?,?)"
         rows = ("James", "1")

From f22f75626536f9b8ba1d7422fdf42507b9102f1c Mon Sep 17 00:00:00 2001
From: Pierre Jeambrun <pierrejbrun@gmail.com>
Date: Mon, 23 Jun 2025 22:10:29 +0200
Subject: [PATCH 115/381] Adjustment external views (#51889)

* Adjustment external views

* Fix lint

* Fix CI

* Improvements

* Small update

* Update following code review
---
 .../administration-and-deployment/plugins.rst |  24 +--
 .../docs/howto/custom-view-plugin.rst         |   8 +-
 .../core_api/datamodels/plugins.py            |  26 +++-
 .../openapi/v2-rest-api-generated.yaml        |  97 ++++++------
 airflow-core/src/airflow/plugins_manager.py   |  14 +-
 .../ui/openapi-gen/requests/schemas.gen.ts    | 143 ++++++++++--------
 .../ui/openapi-gen/requests/types.gen.ts      |  38 +++--
 .../airflow/ui/src/layouts/Nav/NavButton.tsx  |  14 +-
 .../ui/src/layouts/Nav/PluginMenuItem.tsx     |  92 +++++++++++
 .../ui/src/layouts/Nav/PluginMenus.tsx        |  97 ++++--------
 .../src/airflow/ui/src/pages/Iframe.tsx       |   4 +-
 .../core_api/routes/public/test_plugins.py    |  39 +++++
 .../unit/cli/commands/test_plugins_command.py |  11 +-
 .../tests/unit/plugins/test_plugin.py         |  13 +-
 .../airflowctl/api/datamodels/generated.py    |  58 ++++---
 .../tests_common/test_utils/mock_plugins.py   |   2 +-
 16 files changed, 421 insertions(+), 259 deletions(-)
 create mode 100644 airflow-core/src/airflow/ui/src/layouts/Nav/PluginMenuItem.tsx

diff --git a/airflow-core/docs/administration-and-deployment/plugins.rst b/airflow-core/docs/administration-and-deployment/plugins.rst
index 8747707b4a461..2daa6036ddb11 100644
--- a/airflow-core/docs/administration-and-deployment/plugins.rst
+++ b/airflow-core/docs/administration-and-deployment/plugins.rst
@@ -109,7 +109,7 @@ looks like:
         # A list of dictionaries containing FastAPI middleware factory objects and some metadata. See the example below.
         fastapi_root_middlewares = []
         # A list of dictionaries containing iframe views and some metadata. See the example below.
-        iframe_views = []
+        external_views = []
 
         # A callback to perform actions when Airflow starts and the plugin is loaded.
         # NOTE: Ensure your plugin has *args, and **kwargs in the method definition
@@ -195,18 +195,24 @@ definitions in Airflow.
     }
 
     # Creating a iframe view that will be rendered in the Airflow UI.
-    iframe_view_with_metadata = {
+    external_view_with_metadata = {
         "name": "Name of the Iframe View as displayed in the UI",
-        # Source URL of the iframe. This URL can be templated using context variables, depending on the location where the iframe is rendered
-        # the context variables available will be different, i.e a subset of (DAG_ID, RUN_ID, TASK_ID, MAP_INDEX)
-        "src": "https://example.com/{DAG_ID}/{RUN_ID}/{TASK_ID}",
+        # Source URL of the external view. This URL can be templated using context variables, depending on the location where the external view is rendered
+        # the context variables available will be different, i.e a subset of (DAG_ID, RUN_ID, TASK_ID, MAP_INDEX).
+        "href": "https://example.com/{DAG_ID}/{RUN_ID}/{TASK_ID}",
         # Destination of the iframe view. This is used to determine where the iframe will be loaded in the UI.
-        # Supported locations are Literal["nav", "dag", "dag_run", "task", "task_instance"]
+        # Supported locations are Literal["nav", "dag", "dag_run", "task", "task_instance"], default to "nav".
         "destination": "dag_run",
         # Optional icon, url to an svg file.
         "icon": "https://example.com/icon.svg",
-        # Optional parameters, relative URL location when opening the iframe
-        "url_route": "/my_iframe_view",
+        # Optional dark icon for the dark theme, url to an svg file. If not provided, "icon" will be used for both light and dark themes.
+        "icon_dark_mode": "https://example.com/dark_icon.svg",
+        # Optional parameters, relative URL location for the iframe rendering. If not provided, external view will be rendeded as an external link. Should
+        # not contain a leading slash.
+        "url_route": "my_iframe_view",
+        # Optional category, only relevant for destination "nav". This is used to group the external links in the navigation bar.  We will match the existing
+        # menus of ["browse", "docs", "admin", "user"] and if there's no match then create a new menu.
+        "category": "browse",
     }
 
 
@@ -216,7 +222,7 @@ definitions in Airflow.
         macros = [plugin_macro]
         fastapi_apps = [app_with_metadata]
         fastapi_root_middlewares = [middleware_with_metadata]
-        iframe_views = [iframe_view_with_metadata]
+        external_views = [external_view_with_metadata]
 
 .. seealso:: :doc:`/howto/define-extra-link`
 
diff --git a/airflow-core/docs/howto/custom-view-plugin.rst b/airflow-core/docs/howto/custom-view-plugin.rst
index 28f413b9b54a2..74a2891f47615 100644
--- a/airflow-core/docs/howto/custom-view-plugin.rst
+++ b/airflow-core/docs/howto/custom-view-plugin.rst
@@ -24,7 +24,7 @@ core UI using the Plugin manager.
 
 Plugins integrate with the Airflow core RestAPI. In this plugin,
 three object references are derived from the base class ``airflow.plugins_manager.AirflowPlugin``.
-They are fastapi_apps, fastapi_root_middlewares and iframe_views.
+They are fastapi_apps, fastapi_root_middlewares and external_views.
 
 Using fastapi_apps in Airflow plugin, the core RestAPI can be extended
 to support extra endpoints to serve custom static file or any other json/application responses.
@@ -37,12 +37,12 @@ functionality to the entire FastAPI application, including core endpoints.
 In this object reference, the list of dictionaries with Middleware factories object,
 initialization parameters and some metadata information like the name are passed on.
 
-Using iframe_views in Airflow plugin, allows to register custom views that are rendered in iframes in
-the Airflow UI. This is useful for integrating external applications or custom dashboards into the Airflow UI.
+Using external_views in Airflow plugin, allows to register custom views that are rendered in iframes or external link
+in the Airflow UI. This is useful for integrating external applications or custom dashboards into the Airflow UI.
 In this object reference, the list of dictionaries with the view name, iframe src (templatable), destination and
 optional parameters like the icon and url_route are passed on.
 
-Information and code samples to register ``fastapi_apps``, ``fastapi_root_middlewares`` and ``iframe_views`` are
+Information and code samples to register ``fastapi_apps``, ``fastapi_root_middlewares`` and ``external_views`` are
 available in :doc:`plugin </administration-and-deployment/plugins>`.
 
 Support for Airflow 2 plugins
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/plugins.py b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/plugins.py
index a1f51c04ab78d..daf712a8eda0e 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/plugins.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/plugins.py
@@ -19,7 +19,7 @@
 
 from typing import Annotated, Any, Literal
 
-from pydantic import BeforeValidator, ConfigDict, field_validator
+from pydantic import BeforeValidator, ConfigDict, Field, field_validator, model_validator
 
 from airflow.api_fastapi.core_api.base import BaseModel
 from airflow.plugins_manager import AirflowPluginSource
@@ -65,20 +65,22 @@ class AppBuilderMenuItemResponse(BaseModel):
     model_config = ConfigDict(extra="allow")
 
     name: str
-    href: str | None = None
+    href: str
     category: str | None = None
 
 
-class IFrameViewsResponse(BaseModel):
+class ExternalViewResponse(BaseModel):
     """Serializer for IFrame Plugin responses."""
 
     model_config = ConfigDict(extra="allow")
 
     name: str
-    src: str
+    href: str
     icon: str | None = None
+    icon_dark_mode: str | None = None
     url_route: str | None = None
-    destination: Literal["nav", "dag", "dag_run", "task", "task_instance"] | None = None
+    category: str | None = None
+    destination: Literal["nav", "dag", "dag_run", "task", "task_instance"] = "nav"
 
 
 class PluginResponse(BaseModel):
@@ -89,9 +91,13 @@ class PluginResponse(BaseModel):
     flask_blueprints: list[str]
     fastapi_apps: list[FastAPIAppResponse]
     fastapi_root_middlewares: list[FastAPIRootMiddlewareResponse]
-    iframe_views: list[IFrameViewsResponse]
+    external_views: list[ExternalViewResponse] = Field(
+        description="Aggregate all external views. Both 'external_views' and 'appbuilder_menu_items' are included here."
+    )
     appbuilder_views: list[AppBuilderViewResponse]
-    appbuilder_menu_items: list[AppBuilderMenuItemResponse]
+    appbuilder_menu_items: list[AppBuilderMenuItemResponse] = Field(
+        deprecated="Kept for backward compatibility, use `external_views` instead.",
+    )
     global_operator_extra_links: list[str]
     operator_extra_links: list[str]
     source: Annotated[str, BeforeValidator(coerce_to_string)]
@@ -105,6 +111,12 @@ def convert_source(cls, data: Any) -> Any:
             return str(data)
         return data
 
+    @model_validator(mode="before")
+    @classmethod
+    def convert_external_views(cls, data: Any) -> Any:
+        data["external_views"] = [*data["external_views"], *data.get("appbuilder_menu_items", [])]
+        return data
+
 
 class PluginCollectionResponse(BaseModel):
     """Plugin Collection serializer."""
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml b/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml
index c67a089b0623e..478316b43369a 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml
+++ b/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml
@@ -7029,9 +7029,7 @@ components:
           type: string
           title: Name
         href:
-          anyOf:
-          - type: string
-          - type: 'null'
+          type: string
           title: Href
         category:
           anyOf:
@@ -7042,6 +7040,7 @@ components:
       type: object
       required:
       - name
+      - href
       title: AppBuilderMenuItemResponse
       description: Serializer for AppBuilder Menu Item responses.
     AppBuilderViewResponse:
@@ -9293,6 +9292,51 @@ components:
       - url
       title: ExternalLogUrlResponse
       description: Response for the external log URL endpoint.
+    ExternalViewResponse:
+      properties:
+        name:
+          type: string
+          title: Name
+        href:
+          type: string
+          title: Href
+        icon:
+          anyOf:
+          - type: string
+          - type: 'null'
+          title: Icon
+        icon_dark_mode:
+          anyOf:
+          - type: string
+          - type: 'null'
+          title: Icon Dark Mode
+        url_route:
+          anyOf:
+          - type: string
+          - type: 'null'
+          title: Url Route
+        category:
+          anyOf:
+          - type: string
+          - type: 'null'
+          title: Category
+        destination:
+          type: string
+          enum:
+          - nav
+          - dag
+          - dag_run
+          - task
+          - task_instance
+          title: Destination
+          default: nav
+      additionalProperties: true
+      type: object
+      required:
+      - name
+      - href
+      title: ExternalViewResponse
+      description: Serializer for IFrame Plugin responses.
     ExtraLinkCollectionResponse:
       properties:
         extra_links:
@@ -9386,42 +9430,6 @@ components:
       - triggerer
       title: HealthInfoResponse
       description: Health serializer for responses.
-    IFrameViewsResponse:
-      properties:
-        name:
-          type: string
-          title: Name
-        src:
-          type: string
-          title: Src
-        icon:
-          anyOf:
-          - type: string
-          - type: 'null'
-          title: Icon
-        url_route:
-          anyOf:
-          - type: string
-          - type: 'null'
-          title: Url Route
-        destination:
-          anyOf:
-          - type: string
-            enum:
-            - nav
-            - dag
-            - dag_run
-            - task
-            - task_instance
-          - type: 'null'
-          title: Destination
-      additionalProperties: true
-      type: object
-      required:
-      - name
-      - src
-      title: IFrameViewsResponse
-      description: Serializer for IFrame Plugin responses.
     ImportErrorCollectionResponse:
       properties:
         import_errors:
@@ -9676,11 +9684,13 @@ components:
             $ref: '#/components/schemas/FastAPIRootMiddlewareResponse'
           type: array
           title: Fastapi Root Middlewares
-        iframe_views:
+        external_views:
           items:
-            $ref: '#/components/schemas/IFrameViewsResponse'
+            $ref: '#/components/schemas/ExternalViewResponse'
           type: array
-          title: Iframe Views
+          title: External Views
+          description: Aggregate all external views. Both 'external_views' and 'appbuilder_menu_items'
+            are included here.
         appbuilder_views:
           items:
             $ref: '#/components/schemas/AppBuilderViewResponse'
@@ -9691,6 +9701,7 @@ components:
             $ref: '#/components/schemas/AppBuilderMenuItemResponse'
           type: array
           title: Appbuilder Menu Items
+          deprecated: true
         global_operator_extra_links:
           items:
             type: string
@@ -9721,7 +9732,7 @@ components:
       - flask_blueprints
       - fastapi_apps
       - fastapi_root_middlewares
-      - iframe_views
+      - external_views
       - appbuilder_views
       - appbuilder_menu_items
       - global_operator_extra_links
diff --git a/airflow-core/src/airflow/plugins_manager.py b/airflow-core/src/airflow/plugins_manager.py
index 84cc92cd81723..8874864286b77 100644
--- a/airflow-core/src/airflow/plugins_manager.py
+++ b/airflow-core/src/airflow/plugins_manager.py
@@ -69,7 +69,7 @@
 flask_blueprints: list[Any] | None = None
 fastapi_apps: list[Any] | None = None
 fastapi_root_middlewares: list[Any] | None = None
-iframe_views: list[Any] | None = None
+external_views: list[Any] | None = None
 menu_links: list[Any] | None = None
 flask_appbuilder_views: list[Any] | None = None
 flask_appbuilder_menu_links: list[Any] | None = None
@@ -91,7 +91,7 @@
     "flask_blueprints",
     "fastapi_apps",
     "fastapi_root_middlewares",
-    "iframe_views",
+    "external_views",
     "menu_links",
     "appbuilder_views",
     "appbuilder_menu_items",
@@ -156,7 +156,7 @@ class AirflowPlugin:
     flask_blueprints: list[Any] = []
     fastapi_apps: list[Any] = []
     fastapi_root_middlewares: list[Any] = []
-    iframe_views: list[Any] = []
+    external_views: list[Any] = []
     menu_links: list[Any] = []
     appbuilder_views: list[Any] = []
     appbuilder_menu_items: list[Any] = []
@@ -371,9 +371,9 @@ def ensure_plugins_loaded():
 def initialize_ui_plugins():
     """Collect extension points for the UI."""
     global plugins
-    global iframe_views
+    global external_views
 
-    if iframe_views is not None:
+    if external_views is not None:
         return
 
     ensure_plugins_loaded()
@@ -383,10 +383,10 @@ def initialize_ui_plugins():
 
     log.debug("Initialize UI plugin")
 
-    iframe_views = []
+    external_views = []
 
     for plugin in plugins:
-        iframe_views.extend(plugin.iframe_views)
+        external_views.extend(plugin.external_views)
 
 
 def initialize_flask_plugins():
diff --git a/airflow-core/src/airflow/ui/openapi-gen/requests/schemas.gen.ts b/airflow-core/src/airflow/ui/openapi-gen/requests/schemas.gen.ts
index 93814056bb09c..6f5f33136e54f 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/requests/schemas.gen.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/requests/schemas.gen.ts
@@ -7,14 +7,7 @@ export const $AppBuilderMenuItemResponse = {
             title: 'Name'
         },
         href: {
-            anyOf: [
-                {
-                    type: 'string'
-                },
-                {
-                    type: 'null'
-                }
-            ],
+            type: 'string',
             title: 'Href'
         },
         category: {
@@ -31,7 +24,7 @@ export const $AppBuilderMenuItemResponse = {
     },
     additionalProperties: true,
     type: 'object',
-    required: ['name'],
+    required: ['name', 'href'],
     title: 'AppBuilderMenuItemResponse',
     description: 'Serializer for AppBuilder Menu Item responses.'
 } as const;
@@ -3269,6 +3262,74 @@ export const $ExternalLogUrlResponse = {
     description: 'Response for the external log URL endpoint.'
 } as const;
 
+export const $ExternalViewResponse = {
+    properties: {
+        name: {
+            type: 'string',
+            title: 'Name'
+        },
+        href: {
+            type: 'string',
+            title: 'Href'
+        },
+        icon: {
+            anyOf: [
+                {
+                    type: 'string'
+                },
+                {
+                    type: 'null'
+                }
+            ],
+            title: 'Icon'
+        },
+        icon_dark_mode: {
+            anyOf: [
+                {
+                    type: 'string'
+                },
+                {
+                    type: 'null'
+                }
+            ],
+            title: 'Icon Dark Mode'
+        },
+        url_route: {
+            anyOf: [
+                {
+                    type: 'string'
+                },
+                {
+                    type: 'null'
+                }
+            ],
+            title: 'Url Route'
+        },
+        category: {
+            anyOf: [
+                {
+                    type: 'string'
+                },
+                {
+                    type: 'null'
+                }
+            ],
+            title: 'Category'
+        },
+        destination: {
+            type: 'string',
+            enum: ['nav', 'dag', 'dag_run', 'task', 'task_instance'],
+            title: 'Destination',
+            default: 'nav'
+        }
+    },
+    additionalProperties: true,
+    type: 'object',
+    required: ['name', 'href'],
+    title: 'ExternalViewResponse',
+    description: 'Serializer for IFrame Plugin responses.'
+} as const;
+
 export const $ExtraLinkCollectionResponse = {
     properties: {
         extra_links: {
@@ -3399,58 +3460,6 @@ export const $HealthInfoResponse = {
     description: 'Health serializer for responses.'
 } as const;
 
-export const $IFrameViewsResponse = {
-    properties: {
-        name: {
-            type: 'string',
-            title: 'Name'
-        },
-        src: {
-            type: 'string',
-            title: 'Src'
-        },
-        icon: {
-            anyOf: [
-                {
-                    type: 'string'
-                },
-                {
-                    type: 'null'
-                }
-            ],
-            title: 'Icon'
-        },
-        url_route: {
-            anyOf: [
-                {
-                    type: 'string'
-                },
-                {
-                    type: 'null'
-                }
-            ],
-            title: 'Url Route'
-        },
-        destination: {
-            anyOf: [
-                {
-                    type: 'string',
-                    enum: ['nav', 'dag', 'dag_run', 'task', 'task_instance']
-                },
-                {
-                    type: 'null'
-                }
-            ],
-            title: 'Destination'
-        }
-    },
-    additionalProperties: true,
-    type: 'object',
-    required: ['name', 'src'],
-    title: 'IFrameViewsResponse',
-    description: 'Serializer for IFrame Plugin responses.'
-} as const;
-
 export const $ImportErrorCollectionResponse = {
     properties: {
         import_errors: {
@@ -3830,12 +3839,13 @@ export const $PluginResponse = {
             type: 'array',
             title: 'Fastapi Root Middlewares'
         },
-        iframe_views: {
+        external_views: {
             items: {
-                '$ref': '#/components/schemas/IFrameViewsResponse'
+                '$ref': '#/components/schemas/ExternalViewResponse'
             },
             type: 'array',
-            title: 'Iframe Views'
+            title: 'External Views',
+            description: "Aggregate all external views. Both 'external_views' and 'appbuilder_menu_items' are included here."
         },
         appbuilder_views: {
             items: {
@@ -3849,7 +3859,8 @@ export const $PluginResponse = {
                 '$ref': '#/components/schemas/AppBuilderMenuItemResponse'
             },
             type: 'array',
-            title: 'Appbuilder Menu Items'
+            title: 'Appbuilder Menu Items',
+            deprecated: true
         },
         global_operator_extra_links: {
             items: {
@@ -3885,7 +3896,7 @@ export const $PluginResponse = {
         }
     },
     type: 'object',
-    required: ['name', 'macros', 'flask_blueprints', 'fastapi_apps', 'fastapi_root_middlewares', 'iframe_views', 'appbuilder_views', 'appbuilder_menu_items', 'global_operator_extra_links', 'operator_extra_links', 'source', 'listeners', 'timetables'],
+    required: ['name', 'macros', 'flask_blueprints', 'fastapi_apps', 'fastapi_root_middlewares', 'external_views', 'appbuilder_views', 'appbuilder_menu_items', 'global_operator_extra_links', 'operator_extra_links', 'source', 'listeners', 'timetables'],
     title: 'PluginResponse',
     description: 'Plugin serializer.'
 } as const;
diff --git a/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts b/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts
index 92dee7ed04011..692a290abccfe 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts
@@ -5,7 +5,7 @@
  */
 export type AppBuilderMenuItemResponse = {
     name: string;
-    href?: string | null;
+    href: string;
     category?: string | null;
     [key: string]: unknown | string;
 };
@@ -871,6 +871,22 @@ export type ExternalLogUrlResponse = {
     url: string;
 };
 
+/**
+ * Serializer for IFrame Plugin responses.
+ */
+export type ExternalViewResponse = {
+    name: string;
+    href: string;
+    icon?: string | null;
+    icon_dark_mode?: string | null;
+    url_route?: string | null;
+    category?: string | null;
+    destination?: 'nav' | 'dag' | 'dag_run' | 'task' | 'task_instance';
+    [key: string]: unknown | string;
+};
+
+export type destination = 'nav' | 'dag' | 'dag_run' | 'task' | 'task_instance';
+
 /**
  * Extra Links Response.
  */
@@ -923,18 +939,6 @@ export type HealthInfoResponse = {
     dag_processor?: DagProcessorInfoResponse | null;
 };
 
-/**
- * Serializer for IFrame Plugin responses.
- */
-export type IFrameViewsResponse = {
-    name: string;
-    src: string;
-    icon?: string | null;
-    url_route?: string | null;
-    destination?: 'nav' | 'dag' | 'dag_run' | 'task' | 'task_instance' | null;
-    [key: string]: unknown | string;
-};
-
 /**
  * Import Error Collection Response.
  */
@@ -1034,8 +1038,14 @@ export type PluginResponse = {
     flask_blueprints: Array<(string)>;
     fastapi_apps: Array<FastAPIAppResponse>;
     fastapi_root_middlewares: Array<FastAPIRootMiddlewareResponse>;
-    iframe_views: Array<IFrameViewsResponse>;
+    /**
+     * Aggregate all external views. Both 'external_views' and 'appbuilder_menu_items' are included here.
+     */
+    external_views: Array<ExternalViewResponse>;
     appbuilder_views: Array<AppBuilderViewResponse>;
+    /**
+     * @deprecated
+     */
     appbuilder_menu_items: Array<AppBuilderMenuItemResponse>;
     global_operator_extra_links: Array<(string)>;
     operator_extra_links: Array<(string)>;
diff --git a/airflow-core/src/airflow/ui/src/layouts/Nav/NavButton.tsx b/airflow-core/src/airflow/ui/src/layouts/Nav/NavButton.tsx
index 23f837cd7c62f..4ebaa90b7c3ea 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Nav/NavButton.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Nav/NavButton.tsx
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { Box, Button, type ButtonProps } from "@chakra-ui/react";
+import { Box, Button, Link, type ButtonProps } from "@chakra-ui/react";
 import type { ReactElement } from "react";
 import { NavLink } from "react-router-dom";
 
@@ -33,17 +33,18 @@ const styles = {
 
 type NavButtonProps = {
   readonly icon: ReactElement;
+  readonly isExternal?: boolean;
   readonly title?: string;
   readonly to?: string;
 } & ButtonProps;
 
-export const NavButton = ({ icon, title, to, ...rest }: NavButtonProps) =>
+export const NavButton = ({ icon, isExternal = false, title, to, ...rest }: NavButtonProps) =>
   to === undefined ? (
     <Button {...styles} {...rest}>
       <Box alignSelf="center">{icon}</Box>
       <Box fontSize="xs">{title}</Box>
     </Button>
-  ) : (
+  ) : isExternal ? (
     <NavLink to={to}>
       {({ isActive }: { readonly isActive: boolean }) => (
         <Button {...styles} variant={isActive ? "solid" : "ghost"} {...rest}>
@@ -52,4 +53,11 @@ export const NavButton = ({ icon, title, to, ...rest }: NavButtonProps) =>
         </Button>
       )}
     </NavLink>
+  ) : (
+    <Link href={to} px={2} rel="noopener noreferrer" target="_blank">
+      <Button {...styles} variant="ghost" {...rest}>
+        <Box alignSelf="center">{icon}</Box>
+        <Box fontSize="xs">{title}</Box>
+      </Button>
+    </Link>
   );
diff --git a/airflow-core/src/airflow/ui/src/layouts/Nav/PluginMenuItem.tsx b/airflow-core/src/airflow/ui/src/layouts/Nav/PluginMenuItem.tsx
new file mode 100644
index 0000000000000..28b777570501d
--- /dev/null
+++ b/airflow-core/src/airflow/ui/src/layouts/Nav/PluginMenuItem.tsx
@@ -0,0 +1,92 @@
+/*!
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { Box, Link, Image } from "@chakra-ui/react";
+import { LuPlug } from "react-icons/lu";
+import { Link as RouterLink } from "react-router-dom";
+
+import type { ExternalViewResponse } from "openapi/requests/types.gen";
+
+import { NavButton } from "./NavButton";
+
+type Props = { readonly topLevel?: boolean } & ExternalViewResponse;
+
+export const PluginMenuItem = ({ href, icon, name, topLevel = false, url_route: urlRoute }: Props) => {
+  // External Link
+  if (urlRoute === undefined || urlRoute === null) {
+    return topLevel ? (
+      <NavButton
+        icon={
+          typeof icon === "string" ? (
+            <Image height="1.75rem" src={icon} width="1.75rem" />
+          ) : (
+            <LuPlug size="1.75rem" />
+          )
+        }
+        isExternal={true}
+        key={name}
+        title={name}
+        to={href}
+      />
+    ) : (
+      <Box alignItems="center" display="flex" gap={2} outline="none" px={2} py="6px">
+        <Link
+          aria-label={name}
+          fontSize="sm"
+          href={href}
+          rel="noopener noreferrer"
+          target="_blank"
+          width="100%"
+        >
+          {name}
+        </Link>
+      </Box>
+    );
+  }
+
+  // Embedded External Link via iframes
+  if (topLevel) {
+    return (
+      <NavButton
+        icon={
+          typeof icon === "string" ? (
+            <Image height="1.75rem" src={icon} width="1.75rem" />
+          ) : (
+            <LuPlug size="1.75rem" />
+          )
+        }
+        key={name}
+        title={name}
+        to={`plugin/${urlRoute}`}
+      />
+    );
+  }
+
+  return (
+    <RouterLink to={`plugin/${urlRoute}`}>
+      <Box alignItems="center" display="flex" fontSize="sm" gap={2} px={2} py="6px">
+        {typeof icon === "string" ? (
+          <Image height="1.25rem" src={icon} width="1.25rem" />
+        ) : (
+          <LuPlug size="1.25rem" />
+        )}
+        {name}
+      </Box>
+    </RouterLink>
+  );
+};
diff --git a/airflow-core/src/airflow/ui/src/layouts/Nav/PluginMenus.tsx b/airflow-core/src/airflow/ui/src/layouts/Nav/PluginMenus.tsx
index 7ff5c58d3bbb7..13fde6fa66371 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Nav/PluginMenus.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Nav/PluginMenus.tsx
@@ -16,98 +16,65 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { Box, Link, Image } from "@chakra-ui/react";
+import { Box } from "@chakra-ui/react";
 import { useTranslation } from "react-i18next";
 import { FiChevronRight } from "react-icons/fi";
 import { LuPlug } from "react-icons/lu";
-import { Link as RouterLink } from "react-router-dom";
 
 import { usePluginServiceGetPlugins } from "openapi/queries";
-import type { AppBuilderMenuItemResponse } from "openapi/requests/types.gen";
+import type { ExternalViewResponse } from "openapi/requests/types.gen";
 import { Menu } from "src/components/ui";
 
 import { NavButton } from "./NavButton";
+import { PluginMenuItem } from "./PluginMenuItem";
 
 export const PluginMenus = () => {
   const { t: translate } = useTranslation("common");
   const { data } = usePluginServiceGetPlugins();
 
-  const menuPlugins = data?.plugins.filter((plugin) => plugin.appbuilder_menu_items.length > 0);
-  const iframePlugins =
-    data?.plugins.flatMap((plugin) => plugin.iframe_views).filter((view) => view.destination === "nav") ?? [];
+  const menuPlugins =
+    data?.plugins.flatMap((plugin) => plugin.external_views).filter((view) => view.destination === "nav") ??
+    [];
 
-  // Only show iframe plugins in menu if there are more than 2
-  const menuIframePlugins = iframePlugins.length > 2 ? iframePlugins : [];
-  const directIframePlugins = iframePlugins.length <= 2 ? iframePlugins : [];
+  // Only show external plugins in menu if there are more than 2
+  const menuExternalViews = menuPlugins.length > 2 ? menuPlugins : [];
+  const directExternalViews = menuPlugins.length <= 2 ? menuPlugins : [];
 
-  if (data === undefined || (menuPlugins === undefined && iframePlugins.length === 0)) {
+  if (data === undefined || menuPlugins.length === 0) {
     return undefined;
   }
 
-  const categories: Record<string, Array<AppBuilderMenuItemResponse>> = {};
-  const buttons: Array<AppBuilderMenuItemResponse> = [];
+  const categories: Record<string, Array<ExternalViewResponse>> = {};
+  const buttons: Array<ExternalViewResponse> = [];
 
-  menuPlugins?.forEach((plugin) => {
-    plugin.appbuilder_menu_items.forEach((mi) => {
-      if (mi.category !== null && mi.category !== undefined) {
-        categories[mi.category] = [...(categories[mi.category] ?? []), mi];
-      } else {
-        buttons.push(mi);
-      }
-    });
+  menuPlugins.forEach((externalView) => {
+    if (externalView.category !== null && externalView.category !== undefined) {
+      categories[externalView.category] = [...(categories[externalView.category] ?? []), externalView];
+    } else {
+      buttons.push(externalView);
+    }
   });
 
-  if (!buttons.length && !Object.keys(categories).length && iframePlugins.length === 0) {
+  if (!buttons.length && !Object.keys(categories).length && menuPlugins.length === 0) {
     return undefined;
   }
 
   return (
     <>
-      {directIframePlugins.map((plugin) => (
-        <NavButton
-          icon={
-            typeof plugin.icon === "string" ? (
-              <Image height="1.75rem" src={plugin.icon} width="1.75rem" />
-            ) : (
-              <LuPlug size="1.75rem" />
-            )
-          }
-          key={plugin.name}
-          title={plugin.name}
-          to={`plugin/${plugin.url_route ?? plugin.name.toLowerCase().replace(" ", "-")}`}
-        />
+      {directExternalViews.map((externalView) => (
+        <PluginMenuItem {...externalView} key={externalView.name} topLevel={true} />
       ))}
-      {(menuIframePlugins.length > 0 || buttons.length > 0 || Object.keys(categories).length > 0) && (
+      {menuExternalViews.length > 0 && (
         <Menu.Root positioning={{ placement: "right" }}>
           <Menu.Trigger>
             <NavButton as={Box} icon={<LuPlug />} title={translate("nav.plugins")} />
           </Menu.Trigger>
           <Menu.Content>
-            {menuIframePlugins.map((plugin) => (
-              <Menu.Item key={plugin.name} value={plugin.name}>
-                <Box alignItems="center" display="flex" gap={2}>
-                  {typeof plugin.icon === "string" ? (
-                    <Image height="1.25rem" src={plugin.icon} width="1.25rem" />
-                  ) : (
-                    <LuPlug size="1.25rem" />
-                  )}
-                  <RouterLink
-                    to={`plugin/${plugin.url_route ?? plugin.name.toLowerCase().replace(" ", "-")}`}
-                  >
-                    {plugin.name}
-                  </RouterLink>
-                </Box>
+            {buttons.map((externalView) => (
+              <Menu.Item asChild key={externalView.name} value={externalView.name}>
+                <PluginMenuItem {...externalView} />
               </Menu.Item>
             ))}
-            {buttons.map(({ href, name }) =>
-              href !== null && href !== undefined ? (
-                <Menu.Item asChild key={name} value={name}>
-                  <Link aria-label={name} href={href} rel="noopener noreferrer" target="_blank">
-                    {name}
-                  </Link>
-                </Menu.Item>
-              ) : undefined,
-            )}
             {Object.entries(categories).map(([key, menuButtons]) => (
               <Menu.Root key={key} positioning={{ placement: "right" }}>
                 <Menu.TriggerItem display="flex" justifyContent="space-between">
@@ -115,15 +82,11 @@ export const PluginMenus = () => {
                   <FiChevronRight />
                 </Menu.TriggerItem>
                 <Menu.Content>
-                  {menuButtons.map(({ href, name }) =>
-                    href !== undefined && href !== null ? (
-                      <Menu.Item asChild key={name} value={name}>
-                        <Link aria-label={name} href={href} rel="noopener noreferrer" target="_blank">
-                          {name}
-                        </Link>
-                      </Menu.Item>
-                    ) : undefined,
-                  )}
+                  {menuButtons.map((externalView) => (
+                    <Menu.Item asChild key={externalView.name} value={externalView.name}>
+                      <PluginMenuItem {...externalView} />
+                    </Menu.Item>
+                  ))}
                 </Menu.Content>
               </Menu.Root>
             ))}
diff --git a/airflow-core/src/airflow/ui/src/pages/Iframe.tsx b/airflow-core/src/airflow/ui/src/pages/Iframe.tsx
index 69327a6a999af..9256a463b08b9 100644
--- a/airflow-core/src/airflow/ui/src/pages/Iframe.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Iframe.tsx
@@ -29,7 +29,7 @@ export const Iframe = () => {
   const { data: pluginData, isLoading } = usePluginServiceGetPlugins();
 
   const iframeView = pluginData?.plugins
-    .flatMap((plugin) => plugin.iframe_views)
+    .flatMap((plugin) => plugin.external_views)
     .find((view) => (view.url_route ?? view.name.toLowerCase().replace(" ", "-")) === page);
 
   if (!iframeView) {
@@ -48,7 +48,7 @@ export const Iframe = () => {
     <Box flexGrow={1} m={-3}>
       <iframe
         sandbox="allow-same-origin allow-forms"
-        src={iframeView.src}
+        src={iframeView.href}
         style={{ height: "100%", width: "100%" }}
         title={iframeView.name}
       />
diff --git a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_plugins.py b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_plugins.py
index c16e1f114a9f5..2b84d441b3f96 100644
--- a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_plugins.py
+++ b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_plugins.py
@@ -68,6 +68,45 @@ def test_should_respond_200(
         assert body["total_entries"] == expected_total_entries
         assert [plugin["name"] for plugin in body["plugins"]] == expected_names
 
+    def test_external_views_model_validator(self, test_client):
+        response = test_client.get("plugins")
+        body = response.json()
+
+        test_plugin = next((plugin for plugin in body["plugins"] if plugin["name"] == "test_plugin"), None)
+        assert test_plugin is not None
+        assert test_plugin["external_views"] == [
+            # external_views
+            {
+                "name": "Test IFrame Airflow Docs",
+                "href": "https://airflow.apache.org/",
+                "icon": "https://raw.githubusercontent.com/lucide-icons/lucide/refs/heads/main/icons/plug.svg",
+                "icon_dark_mode": None,
+                "url_route": "test_iframe_plugin",
+                "destination": "nav",
+                "category": "browse",
+            },
+            # appbuilder_menu_items
+            {
+                "category": "Search",
+                "destination": "nav",
+                "href": "https://www.google.com",
+                "icon": None,
+                "icon_dark_mode": None,
+                "name": "Google",
+                "url_route": None,
+            },
+            {
+                "category": None,
+                "destination": "nav",
+                "href": "https://www.apache.org/",
+                "icon": None,
+                "icon_dark_mode": None,
+                "label": "The Apache Software Foundation",
+                "name": "apache",
+                "url_route": None,
+            },
+        ]
+
     def test_should_response_401(self, unauthenticated_test_client):
         response = unauthenticated_test_client.get("/plugins")
         assert response.status_code == 401
diff --git a/airflow-core/tests/unit/cli/commands/test_plugins_command.py b/airflow-core/tests/unit/cli/commands/test_plugins_command.py
index e938989527986..885a8b2510fe6 100644
--- a/airflow-core/tests/unit/cli/commands/test_plugins_command.py
+++ b/airflow-core/tests/unit/cli/commands/test_plugins_command.py
@@ -90,13 +90,14 @@ def test_should_display_one_plugin(self):
                         "name": "Name of the Middleware",
                     }
                 ],
-                "iframe_views": [
+                "external_views": [
                     {
                         "destination": "nav",
-                        "icon": "https://example.com/icon.svg",
-                        "name": "Test IFrame Plugin",
-                        "src": "https://www.google.com",
-                        "url_route": "/test_iframe_plugin",
+                        "icon": "https://raw.githubusercontent.com/lucide-icons/lucide/refs/heads/main/icons/plug.svg",
+                        "name": "Test IFrame Airflow Docs",
+                        "href": "https://airflow.apache.org/",
+                        "url_route": "test_iframe_plugin",
+                        "category": "browse",
                     },
                 ],
                 "appbuilder_views": [
diff --git a/airflow-core/tests/unit/plugins/test_plugin.py b/airflow-core/tests/unit/plugins/test_plugin.py
index 725cf87e0c192..7901e1cc99b55 100644
--- a/airflow-core/tests/unit/plugins/test_plugin.py
+++ b/airflow-core/tests/unit/plugins/test_plugin.py
@@ -102,12 +102,13 @@ async def dispatch(self, request, call_next):
     "name": "Name of the Middleware",
 }
 
-iframe_view_with_metadata = {
-    "name": "Test IFrame Plugin",
-    "src": "https://www.google.com",
-    "icon": "https://example.com/icon.svg",
-    "url_route": "/test_iframe_plugin",
+external_view_with_metadata = {
+    "name": "Test IFrame Airflow Docs",
+    "href": "https://airflow.apache.org/",
+    "icon": "https://raw.githubusercontent.com/lucide-icons/lucide/refs/heads/main/icons/plug.svg",
+    "url_route": "test_iframe_plugin",
     "destination": "nav",
+    "category": "browse",
 }
 
 
@@ -128,7 +129,7 @@ class AirflowTestPlugin(AirflowPlugin):
     flask_blueprints = [bp]
     fastapi_apps = [app_with_metadata]
     fastapi_root_middlewares = [middleware_with_metadata]
-    iframe_views = [iframe_view_with_metadata]
+    external_views = [external_view_with_metadata]
     appbuilder_views = [v_appbuilder_package]
     appbuilder_menu_items = [appbuilder_mitem, appbuilder_mitem_toplevel]
     global_operator_extra_links = [
diff --git a/airflow-ctl/src/airflowctl/api/datamodels/generated.py b/airflow-ctl/src/airflowctl/api/datamodels/generated.py
index a3132f3de504b..86e1ba25d70f5 100644
--- a/airflow-ctl/src/airflowctl/api/datamodels/generated.py
+++ b/airflow-ctl/src/airflowctl/api/datamodels/generated.py
@@ -21,7 +21,7 @@ class AppBuilderMenuItemResponse(BaseModel):
         extra="allow",
     )
     name: Annotated[str, Field(title="Name")]
-    href: Annotated[str | None, Field(title="Href")] = None
+    href: Annotated[str, Field(title="Href")]
     category: Annotated[str | None, Field(title="Category")] = None
 
 
@@ -514,6 +514,31 @@ class ExternalLogUrlResponse(BaseModel):
     url: Annotated[str, Field(title="Url")]
 
 
+class Destination(str, Enum):
+    NAV = "nav"
+    DAG = "dag"
+    DAG_RUN = "dag_run"
+    TASK = "task"
+    TASK_INSTANCE = "task_instance"
+
+
+class ExternalViewResponse(BaseModel):
+    """
+    Serializer for IFrame Plugin responses.
+    """
+
+    model_config = ConfigDict(
+        extra="allow",
+    )
+    name: Annotated[str, Field(title="Name")]
+    href: Annotated[str, Field(title="Href")]
+    icon: Annotated[str | None, Field(title="Icon")] = None
+    icon_dark_mode: Annotated[str | None, Field(title="Icon Dark Mode")] = None
+    url_route: Annotated[str | None, Field(title="Url Route")] = None
+    category: Annotated[str | None, Field(title="Category")] = None
+    destination: Annotated[Destination | None, Field(title="Destination")] = "nav"
+
+
 class ExtraLinkCollectionResponse(BaseModel):
     """
     Extra Links Response.
@@ -556,29 +581,6 @@ class HTTPExceptionResponse(BaseModel):
     detail: Annotated[str | dict[str, Any], Field(title="Detail")]
 
 
-class Destination(str, Enum):
-    NAV = "nav"
-    DAG = "dag"
-    DAG_RUN = "dag_run"
-    TASK = "task"
-    TASK_INSTANCE = "task_instance"
-
-
-class IFrameViewsResponse(BaseModel):
-    """
-    Serializer for IFrame Plugin responses.
-    """
-
-    model_config = ConfigDict(
-        extra="allow",
-    )
-    name: Annotated[str, Field(title="Name")]
-    src: Annotated[str, Field(title="Src")]
-    icon: Annotated[str | None, Field(title="Icon")] = None
-    url_route: Annotated[str | None, Field(title="Url Route")] = None
-    destination: Annotated[Destination | None, Field(title="Destination")] = None
-
-
 class ImportErrorResponse(BaseModel):
     """
     Import Error Response.
@@ -647,7 +649,13 @@ class PluginResponse(BaseModel):
     fastapi_root_middlewares: Annotated[
         list[FastAPIRootMiddlewareResponse], Field(title="Fastapi Root Middlewares")
     ]
-    iframe_views: Annotated[list[IFrameViewsResponse], Field(title="Iframe Views")]
+    external_views: Annotated[
+        list[ExternalViewResponse],
+        Field(
+            description="Aggregate all external views. Both 'external_views' and 'appbuilder_menu_items' are included here.",
+            title="External Views",
+        ),
+    ]
     appbuilder_views: Annotated[list[AppBuilderViewResponse], Field(title="Appbuilder Views")]
     appbuilder_menu_items: Annotated[list[AppBuilderMenuItemResponse], Field(title="Appbuilder Menu Items")]
     global_operator_extra_links: Annotated[list[str], Field(title="Global Operator Extra Links")]
diff --git a/devel-common/src/tests_common/test_utils/mock_plugins.py b/devel-common/src/tests_common/test_utils/mock_plugins.py
index a70fdaf753538..7426df1801d11 100644
--- a/devel-common/src/tests_common/test_utils/mock_plugins.py
+++ b/devel-common/src/tests_common/test_utils/mock_plugins.py
@@ -28,7 +28,7 @@
     "flask_blueprints",
     "fastapi_apps",
     "fastapi_root_middlewares",
-    "iframe_views",
+    "external_views",
     "menu_links",
     "flask_appbuilder_views",
     "flask_appbuilder_menu_links",

From d55dce36f2116a8235cb8e12743bef0afc434321 Mon Sep 17 00:00:00 2001
From: DHARMENDRA AHIRWAR <59978852+Kilvish25@users.noreply.github.com>
Date: Tue, 24 Jun 2025 01:42:12 +0530
Subject: [PATCH 116/381] Update logging-tasks.rst (#52113)

Fixed one spelling mistake from 'lies' to 'lines'
---
 .../logging-monitoring/logging-tasks.rst                        | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/airflow-core/docs/administration-and-deployment/logging-monitoring/logging-tasks.rst b/airflow-core/docs/administration-and-deployment/logging-monitoring/logging-tasks.rst
index d506082aad996..9512cfefda718 100644
--- a/airflow-core/docs/administration-and-deployment/logging-monitoring/logging-tasks.rst
+++ b/airflow-core/docs/administration-and-deployment/logging-monitoring/logging-tasks.rst
@@ -113,7 +113,7 @@ When displaying the logs in web UI, the display of logs will be condensed:
    [2024-03-08, 23:30:18 CET] {logging_mixin.py:188} ⯈ Non important details
    [2024-03-08, 23:30:18 CET] {logging_mixin.py:188} INFO - Here is again some standard text.
 
-If you click on the log text label, the detailed log lies will be displayed.
+If you click on the log text label, the detailed log lines will be displayed.
 
 .. code-block:: text
 

From 8286714d9e31b46102527a342944bf8bc48f0fd6 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 23 Jun 2025 16:29:23 -0400
Subject: [PATCH 117/381] Bump the fab-ui-package-updates group across 1
 directory with 4 updates (#52108)

* Bump the fab-ui-package-updates group across 1 directory with 4 updates

Bumps the fab-ui-package-updates group with 4 updates in the /providers/fab/src/airflow/providers/fab/www directory: [eslint](https://github.com/eslint/eslint), [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import), [prettier](https://github.com/prettier/prettier) and [stylelint](https://github.com/stylelint/stylelint).


Updates `eslint` from 9.28.0 to 9.29.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.28.0...v9.29.0)

Updates `eslint-plugin-import` from 2.31.0 to 2.32.0
- [Release notes](https://github.com/import-js/eslint-plugin-import/releases)
- [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.31.0...v2.32.0)

Updates `prettier` from 3.5.3 to 3.6.0
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.5.3...3.6.0)

Updates `stylelint` from 16.20.0 to 16.21.0
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/16.20.0...16.21.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.29.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: fab-ui-package-updates
- dependency-name: eslint-plugin-import
  dependency-version: 2.32.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: fab-ui-package-updates
- dependency-name: prettier
  dependency-version: 3.6.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: fab-ui-package-updates
- dependency-name: stylelint
  dependency-version: 16.21.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: fab-ui-package-updates
...

Signed-off-by: dependabot[bot] <support@github.com>

* Fix static checks

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: vincbeck <vincbeck@amazon.com>
---
 .../providers/fab/www/package-lock.json       | 304 ++++++++++--------
 .../airflow/providers/fab/www/package.json    |   8 +-
 ...1f4158f.js => 743.27a753a06671118f1c5c.js} |   4 +-
 ...> 743.27a753a06671118f1c5c.js.LICENSE.txt} |   0
 ...flowDefaultTheme.56d4475fdae7883d3454.css} |   0
 ...rflowDefaultTheme.56d4475fdae7883d3454.js} |   2 +-
 ...824.css => flash.0951d47c62bc8906be65.css} |   0
 ...7a824.js => flash.0951d47c62bc8906be65.js} |   2 +-
 .../fab/www/static/dist/jquery-ui.min.js      |   2 +-
 ...s => loadingDots.deaad0ce0e7691ed6251.css} |   0
 ...js => loadingDots.deaad0ce0e7691ed6251.js} |   2 +-
 .../static/dist/main.26e36c3998f451900260.js  |   2 -
 ...0260.css => main.810554d06c3e30f2484e.css} |   0
 .../static/dist/main.810554d06c3e30f2484e.js  |   2 +
 ... main.810554d06c3e30f2484e.js.LICENSE.txt} |   0
 .../fab/www/static/dist/manifest.json         |  26 +-
 ...=> materialIcons.b0c6cc32cdacff89f7c2.css} |   0
 .../materialIcons.b0c6cc32cdacff89f7c2.js     |   1 +
 .../materialIcons.e84a12f5be6e8d456d02.js     |   1 -
 .../dist/moment.518a43bcfaf149ae2836.js       |   1 +
 .../dist/moment.9023635a87b836172067.js       |   1 -
 .../dist/runtime.4a925577de9ab84d8e00.js      |   1 +
 .../dist/runtime.78bb8f6146c25d99b9e2.js      |   1 -
 providers/fab/www-hash.txt                    |   2 +-
 24 files changed, 203 insertions(+), 159 deletions(-)
 rename providers/fab/src/airflow/providers/fab/www/static/dist/{743.b6629eaae7f541f4158f.js => 743.27a753a06671118f1c5c.js} (67%)
 rename providers/fab/src/airflow/providers/fab/www/static/dist/{743.b6629eaae7f541f4158f.js.LICENSE.txt => 743.27a753a06671118f1c5c.js.LICENSE.txt} (100%)
 rename providers/fab/src/airflow/providers/fab/www/static/dist/{airflowDefaultTheme.5a4eda684d2f5f33fa6a.css => airflowDefaultTheme.56d4475fdae7883d3454.css} (100%)
 rename providers/fab/src/airflow/providers/fab/www/static/dist/{airflowDefaultTheme.5a4eda684d2f5f33fa6a.js => airflowDefaultTheme.56d4475fdae7883d3454.js} (65%)
 rename providers/fab/src/airflow/providers/fab/www/static/dist/{flash.9f756672299e9e57a824.css => flash.0951d47c62bc8906be65.css} (100%)
 rename providers/fab/src/airflow/providers/fab/www/static/dist/{flash.9f756672299e9e57a824.js => flash.0951d47c62bc8906be65.js} (50%)
 rename providers/fab/src/airflow/providers/fab/www/static/dist/{loadingDots.fc35e1feb443bd3a8d80.css => loadingDots.deaad0ce0e7691ed6251.css} (100%)
 rename providers/fab/src/airflow/providers/fab/www/static/dist/{loadingDots.fc35e1feb443bd3a8d80.js => loadingDots.deaad0ce0e7691ed6251.js} (50%)
 delete mode 100644 providers/fab/src/airflow/providers/fab/www/static/dist/main.26e36c3998f451900260.js
 rename providers/fab/src/airflow/providers/fab/www/static/dist/{main.26e36c3998f451900260.css => main.810554d06c3e30f2484e.css} (100%)
 create mode 100644 providers/fab/src/airflow/providers/fab/www/static/dist/main.810554d06c3e30f2484e.js
 rename providers/fab/src/airflow/providers/fab/www/static/dist/{main.26e36c3998f451900260.js.LICENSE.txt => main.810554d06c3e30f2484e.js.LICENSE.txt} (100%)
 rename providers/fab/src/airflow/providers/fab/www/static/dist/{materialIcons.e84a12f5be6e8d456d02.css => materialIcons.b0c6cc32cdacff89f7c2.css} (100%)
 create mode 100644 providers/fab/src/airflow/providers/fab/www/static/dist/materialIcons.b0c6cc32cdacff89f7c2.js
 delete mode 100644 providers/fab/src/airflow/providers/fab/www/static/dist/materialIcons.e84a12f5be6e8d456d02.js
 create mode 100644 providers/fab/src/airflow/providers/fab/www/static/dist/moment.518a43bcfaf149ae2836.js
 delete mode 100644 providers/fab/src/airflow/providers/fab/www/static/dist/moment.9023635a87b836172067.js
 create mode 100644 providers/fab/src/airflow/providers/fab/www/static/dist/runtime.4a925577de9ab84d8e00.js
 delete mode 100644 providers/fab/src/airflow/providers/fab/www/static/dist/runtime.78bb8f6146c25d99b9e2.js

diff --git a/providers/fab/src/airflow/providers/fab/www/package-lock.json b/providers/fab/src/airflow/providers/fab/www/package-lock.json
index 11d651914ca59..767bd548d1ab0 100644
--- a/providers/fab/src/airflow/providers/fab/www/package-lock.json
+++ b/providers/fab/src/airflow/providers/fab/www/package-lock.json
@@ -22,18 +22,18 @@
         "copy-webpack-plugin": "^13.0.0",
         "css-loader": "7.1.2",
         "css-minimizer-webpack-plugin": "^7.0.2",
-        "eslint": "^9.28.0",
+        "eslint": "^9.29.0",
         "eslint-config-prettier": "^10.1.5",
         "eslint-plugin-html": "^8.1.3",
-        "eslint-plugin-import": "^2.27.5",
+        "eslint-plugin-import": "^2.32.0",
         "eslint-plugin-node": "^11.1.0",
         "eslint-plugin-standard": "^5.0.0",
         "file-loader": "^6.0.0",
         "mini-css-extract-plugin": "^2.9.2",
         "moment": "^2.29.4",
         "moment-locales-webpack-plugin": "^1.2.0",
-        "prettier": "^3.5.3",
-        "stylelint": "^16.20.0",
+        "prettier": "^3.6.0",
+        "stylelint": "^16.21.0",
         "terser-webpack-plugin": "<6.0.0",
         "url-loader": "4.1.1",
         "webpack": "^5.99.9",
@@ -1576,9 +1576,9 @@
       }
     },
     "node_modules/@csstools/css-parser-algorithms": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz",
-      "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==",
+      "version": "3.0.5",
+      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz",
+      "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==",
       "dev": true,
       "funding": [
         {
@@ -1595,13 +1595,13 @@
         "node": ">=18"
       },
       "peerDependencies": {
-        "@csstools/css-tokenizer": "^3.0.3"
+        "@csstools/css-tokenizer": "^3.0.4"
       }
     },
     "node_modules/@csstools/css-tokenizer": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz",
-      "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz",
+      "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==",
       "dev": true,
       "funding": [
         {
@@ -1619,9 +1619,9 @@
       }
     },
     "node_modules/@csstools/media-query-list-parser": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz",
-      "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==",
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz",
+      "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==",
       "dev": true,
       "funding": [
         {
@@ -1638,8 +1638,8 @@
         "node": ">=18"
       },
       "peerDependencies": {
-        "@csstools/css-parser-algorithms": "^3.0.4",
-        "@csstools/css-tokenizer": "^3.0.3"
+        "@csstools/css-parser-algorithms": "^3.0.5",
+        "@csstools/css-tokenizer": "^3.0.4"
       }
     },
     "node_modules/@discoveryjs/json-ext": {
@@ -1703,9 +1703,9 @@
       }
     },
     "node_modules/@eslint/config-array": {
-      "version": "0.20.0",
-      "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz",
-      "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==",
+      "version": "0.20.1",
+      "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz",
+      "integrity": "sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==",
       "dev": true,
       "license": "Apache-2.0",
       "dependencies": {
@@ -1798,9 +1798,9 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "9.28.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.28.0.tgz",
-      "integrity": "sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==",
+      "version": "9.29.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.29.0.tgz",
+      "integrity": "sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2373,10 +2373,11 @@
       "dev": true
     },
     "node_modules/acorn": {
-      "version": "8.14.0",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
-      "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+      "version": "8.15.0",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+      "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
       "dev": true,
+      "license": "MIT",
       "bin": {
         "acorn": "bin/acorn"
       },
@@ -2499,17 +2500,20 @@
       }
     },
     "node_modules/array-includes": {
-      "version": "3.1.8",
-      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
-      "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
+      "version": "3.1.9",
+      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz",
+      "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.7",
+        "call-bind": "^1.0.8",
+        "call-bound": "^1.0.4",
         "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.2",
-        "es-object-atoms": "^1.0.0",
-        "get-intrinsic": "^1.2.4",
-        "is-string": "^1.0.7"
+        "es-abstract": "^1.24.0",
+        "es-object-atoms": "^1.1.1",
+        "get-intrinsic": "^1.3.0",
+        "is-string": "^1.1.1",
+        "math-intrinsics": "^1.1.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -2537,17 +2541,19 @@
       }
     },
     "node_modules/array.prototype.findlastindex": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
-      "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
+      "version": "1.2.6",
+      "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz",
+      "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.7",
+        "call-bind": "^1.0.8",
+        "call-bound": "^1.0.4",
         "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.2",
+        "es-abstract": "^1.23.9",
         "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.0.0",
-        "es-shim-unscopables": "^1.0.2"
+        "es-object-atoms": "^1.1.1",
+        "es-shim-unscopables": "^1.1.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -2897,9 +2903,9 @@
       "dev": true
     },
     "node_modules/cacheable": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.9.0.tgz",
-      "integrity": "sha512-8D5htMCxPDUULux9gFzv30f04Xo3wCnik0oOxKoRTPIBoqA7HtOcJ87uBhQTs3jCfZZTrUBGsYIZOgE0ZRgMAg==",
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.10.0.tgz",
+      "integrity": "sha512-SSgQTAnhd7WlJXnGlIi4jJJOiHzgnM5wRMEPaXAU4kECTAMpBoYKoZ9i5zHmclIEZbxcu3j7yY/CF8DTmwIsHg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -2908,9 +2914,9 @@
       }
     },
     "node_modules/cacheable/node_modules/keyv": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.3.3.tgz",
-      "integrity": "sha512-Rwu4+nXI9fqcxiEHtbkvoes2X+QfkTRo1TMkPfwzipGsJlJO/z69vqB4FNl9xJ3xCpAcbkvmEabZfPzrwN3+gQ==",
+      "version": "5.3.4",
+      "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.3.4.tgz",
+      "integrity": "sha512-ypEvQvInNpUe+u+w8BIcPkQvEqXquyyibWE/1NB5T2BTzIpS5cGEV1LZskDzPSTvNAaT4+5FutvzlvnkxOSKlw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -3851,27 +3857,28 @@
       }
     },
     "node_modules/es-abstract": {
-      "version": "1.23.9",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz",
-      "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==",
+      "version": "1.24.0",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz",
+      "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "array-buffer-byte-length": "^1.0.2",
         "arraybuffer.prototype.slice": "^1.0.4",
         "available-typed-arrays": "^1.0.7",
         "call-bind": "^1.0.8",
-        "call-bound": "^1.0.3",
+        "call-bound": "^1.0.4",
         "data-view-buffer": "^1.0.2",
         "data-view-byte-length": "^1.0.2",
         "data-view-byte-offset": "^1.0.1",
         "es-define-property": "^1.0.1",
         "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.0.0",
+        "es-object-atoms": "^1.1.1",
         "es-set-tostringtag": "^2.1.0",
         "es-to-primitive": "^1.3.0",
         "function.prototype.name": "^1.1.8",
-        "get-intrinsic": "^1.2.7",
-        "get-proto": "^1.0.0",
+        "get-intrinsic": "^1.3.0",
+        "get-proto": "^1.0.1",
         "get-symbol-description": "^1.1.0",
         "globalthis": "^1.0.4",
         "gopd": "^1.2.0",
@@ -3883,21 +3890,24 @@
         "is-array-buffer": "^3.0.5",
         "is-callable": "^1.2.7",
         "is-data-view": "^1.0.2",
+        "is-negative-zero": "^2.0.3",
         "is-regex": "^1.2.1",
+        "is-set": "^2.0.3",
         "is-shared-array-buffer": "^1.0.4",
         "is-string": "^1.1.1",
         "is-typed-array": "^1.1.15",
-        "is-weakref": "^1.1.0",
+        "is-weakref": "^1.1.1",
         "math-intrinsics": "^1.1.0",
-        "object-inspect": "^1.13.3",
+        "object-inspect": "^1.13.4",
         "object-keys": "^1.1.1",
         "object.assign": "^4.1.7",
         "own-keys": "^1.0.1",
-        "regexp.prototype.flags": "^1.5.3",
+        "regexp.prototype.flags": "^1.5.4",
         "safe-array-concat": "^1.1.3",
         "safe-push-apply": "^1.0.0",
         "safe-regex-test": "^1.1.0",
         "set-proto": "^1.0.0",
+        "stop-iteration-iterator": "^1.1.0",
         "string.prototype.trim": "^1.2.10",
         "string.prototype.trimend": "^1.0.9",
         "string.prototype.trimstart": "^1.0.8",
@@ -3906,7 +3916,7 @@
         "typed-array-byte-offset": "^1.0.4",
         "typed-array-length": "^1.0.7",
         "unbox-primitive": "^1.1.0",
-        "which-typed-array": "^1.1.18"
+        "which-typed-array": "^1.1.19"
       },
       "engines": {
         "node": ">= 0.4"
@@ -4017,19 +4027,19 @@
       }
     },
     "node_modules/eslint": {
-      "version": "9.28.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.28.0.tgz",
-      "integrity": "sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==",
+      "version": "9.29.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz",
+      "integrity": "sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.2.0",
         "@eslint-community/regexpp": "^4.12.1",
-        "@eslint/config-array": "^0.20.0",
+        "@eslint/config-array": "^0.20.1",
         "@eslint/config-helpers": "^0.2.1",
         "@eslint/core": "^0.14.0",
         "@eslint/eslintrc": "^3.3.1",
-        "@eslint/js": "9.28.0",
+        "@eslint/js": "9.29.0",
         "@eslint/plugin-kit": "^0.3.1",
         "@humanfs/node": "^0.16.6",
         "@humanwhocodes/module-importer": "^1.0.1",
@@ -4041,9 +4051,9 @@
         "cross-spawn": "^7.0.6",
         "debug": "^4.3.2",
         "escape-string-regexp": "^4.0.0",
-        "eslint-scope": "^8.3.0",
-        "eslint-visitor-keys": "^4.2.0",
-        "espree": "^10.3.0",
+        "eslint-scope": "^8.4.0",
+        "eslint-visitor-keys": "^4.2.1",
+        "espree": "^10.4.0",
         "esquery": "^1.5.0",
         "esutils": "^2.0.2",
         "fast-deep-equal": "^3.1.3",
@@ -4114,10 +4124,11 @@
       }
     },
     "node_modules/eslint-module-utils": {
-      "version": "2.12.0",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
-      "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
+      "version": "2.12.1",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz",
+      "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "debug": "^3.2.7"
       },
@@ -4135,6 +4146,7 @@
       "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
       "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ms": "^2.1.1"
       }
@@ -4172,29 +4184,30 @@
       }
     },
     "node_modules/eslint-plugin-import": {
-      "version": "2.31.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
-      "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
+      "version": "2.32.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz",
+      "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@rtsao/scc": "^1.1.0",
-        "array-includes": "^3.1.8",
-        "array.prototype.findlastindex": "^1.2.5",
-        "array.prototype.flat": "^1.3.2",
-        "array.prototype.flatmap": "^1.3.2",
+        "array-includes": "^3.1.9",
+        "array.prototype.findlastindex": "^1.2.6",
+        "array.prototype.flat": "^1.3.3",
+        "array.prototype.flatmap": "^1.3.3",
         "debug": "^3.2.7",
         "doctrine": "^2.1.0",
         "eslint-import-resolver-node": "^0.3.9",
-        "eslint-module-utils": "^2.12.0",
+        "eslint-module-utils": "^2.12.1",
         "hasown": "^2.0.2",
-        "is-core-module": "^2.15.1",
+        "is-core-module": "^2.16.1",
         "is-glob": "^4.0.3",
         "minimatch": "^3.1.2",
         "object.fromentries": "^2.0.8",
         "object.groupby": "^1.0.3",
-        "object.values": "^1.2.0",
+        "object.values": "^1.2.1",
         "semver": "^6.3.1",
-        "string.prototype.trimend": "^1.0.8",
+        "string.prototype.trimend": "^1.0.9",
         "tsconfig-paths": "^3.15.0"
       },
       "engines": {
@@ -4326,9 +4339,9 @@
       }
     },
     "node_modules/eslint/node_modules/eslint-scope": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
-      "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
+      "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
@@ -4343,9 +4356,9 @@
       }
     },
     "node_modules/eslint/node_modules/eslint-visitor-keys": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
-      "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+      "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
       "dev": true,
       "license": "Apache-2.0",
       "engines": {
@@ -4417,15 +4430,15 @@
       }
     },
     "node_modules/espree": {
-      "version": "10.3.0",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
-      "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
+      "version": "10.4.0",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+      "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "acorn": "^8.14.0",
+        "acorn": "^8.15.0",
         "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^4.2.0"
+        "eslint-visitor-keys": "^4.2.1"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4435,9 +4448,9 @@
       }
     },
     "node_modules/espree/node_modules/eslint-visitor-keys": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
-      "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+      "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
       "dev": true,
       "license": "Apache-2.0",
       "engines": {
@@ -4669,15 +4682,15 @@
       }
     },
     "node_modules/flat-cache": {
-      "version": "6.1.9",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.9.tgz",
-      "integrity": "sha512-DUqiKkTlAfhtl7g78IuwqYM+YqvT+as0mY+EVk6mfimy19U79pJCzDZQsnqk3Ou/T6hFXWLGbwbADzD/c8Tydg==",
+      "version": "6.1.10",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.10.tgz",
+      "integrity": "sha512-B6/v1f0NwjxzmeOhzfXPGWpKBVA207LS7lehaVKQnFrVktcFRfkzjZZ2gwj2i1TkEUMQht7ZMJbABUT5N+V1Nw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "cacheable": "^1.9.0",
+        "cacheable": "^1.10.0",
         "flatted": "^3.3.3",
-        "hookified": "^1.8.2"
+        "hookified": "^1.9.1"
       }
     },
     "node_modules/flatted": {
@@ -5468,6 +5481,19 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/is-negative-zero": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+      "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/is-number": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -5827,9 +5853,9 @@
       }
     },
     "node_modules/known-css-properties": {
-      "version": "0.36.0",
-      "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.36.0.tgz",
-      "integrity": "sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==",
+      "version": "0.37.0",
+      "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz",
+      "integrity": "sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==",
       "dev": true,
       "license": "MIT"
     },
@@ -6124,9 +6150,9 @@
       "dev": true
     },
     "node_modules/nanoid": {
-      "version": "3.3.9",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.9.tgz",
-      "integrity": "sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==",
+      "version": "3.3.11",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+      "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
       "dev": true,
       "funding": [
         {
@@ -6134,6 +6160,7 @@
           "url": "https://github.com/sponsors/ai"
         }
       ],
+      "license": "MIT",
       "bin": {
         "nanoid": "bin/nanoid.cjs"
       },
@@ -6522,9 +6549,9 @@
       }
     },
     "node_modules/postcss": {
-      "version": "8.5.3",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
-      "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
+      "version": "8.5.6",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+      "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
       "dev": true,
       "funding": [
         {
@@ -6540,8 +6567,9 @@
           "url": "https://github.com/sponsors/ai"
         }
       ],
+      "license": "MIT",
       "dependencies": {
-        "nanoid": "^3.3.8",
+        "nanoid": "^3.3.11",
         "picocolors": "^1.1.1",
         "source-map-js": "^1.2.1"
       },
@@ -7148,9 +7176,9 @@
       }
     },
     "node_modules/prettier": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
-      "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.0.tgz",
+      "integrity": "sha512-ujSB9uXHJKzM/2GBuE0hBOUgC77CN3Bnpqa+g80bkv3T3A93wL/xlzDATHhnhkzifz/UE2SNOvmbTz5hSkDlHw==",
       "dev": true,
       "license": "MIT",
       "bin": {
@@ -7829,6 +7857,20 @@
       "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==",
       "dev": true
     },
+    "node_modules/stop-iteration-iterator": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz",
+      "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "internal-slot": "^1.1.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/string-width": {
       "version": "4.2.3",
       "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -7951,9 +7993,9 @@
       }
     },
     "node_modules/stylelint": {
-      "version": "16.20.0",
-      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.20.0.tgz",
-      "integrity": "sha512-B5Myu9WRxrgKuLs3YyUXLP2H0mrbejwNxPmyADlACWwFsrL8Bmor/nTSh4OMae5sHjOz6gkSeccQH34gM4/nAw==",
+      "version": "16.21.0",
+      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.21.0.tgz",
+      "integrity": "sha512-ki3PpJGG7xhm3WtINoWGnlvqAmbqSexoRMbEMJzlwewSIOqPRKPlq452c22xAdEJISVi80r+I7KL9GPUiwFgbg==",
       "dev": true,
       "funding": [
         {
@@ -7967,9 +8009,9 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "@csstools/css-parser-algorithms": "^3.0.4",
-        "@csstools/css-tokenizer": "^3.0.3",
-        "@csstools/media-query-list-parser": "^4.0.2",
+        "@csstools/css-parser-algorithms": "^3.0.5",
+        "@csstools/css-tokenizer": "^3.0.4",
+        "@csstools/media-query-list-parser": "^4.0.3",
         "@csstools/selector-specificity": "^5.0.0",
         "@dual-bundle/import-meta-resolve": "^4.1.0",
         "balanced-match": "^2.0.0",
@@ -7980,21 +8022,21 @@
         "debug": "^4.4.1",
         "fast-glob": "^3.3.3",
         "fastest-levenshtein": "^1.0.16",
-        "file-entry-cache": "^10.1.0",
+        "file-entry-cache": "^10.1.1",
         "global-modules": "^2.0.0",
         "globby": "^11.1.0",
         "globjoin": "^0.1.4",
         "html-tags": "^3.3.1",
-        "ignore": "^7.0.4",
+        "ignore": "^7.0.5",
         "imurmurhash": "^0.1.4",
         "is-plain-object": "^5.0.0",
-        "known-css-properties": "^0.36.0",
+        "known-css-properties": "^0.37.0",
         "mathml-tag-names": "^2.1.3",
         "meow": "^13.2.0",
         "micromatch": "^4.0.8",
         "normalize-path": "^3.0.0",
         "picocolors": "^1.1.1",
-        "postcss": "^8.5.3",
+        "postcss": "^8.5.5",
         "postcss-resolve-nested-selector": "^0.1.6",
         "postcss-safe-parser": "^7.0.1",
         "postcss-selector-parser": "^7.1.0",
@@ -8057,13 +8099,13 @@
       }
     },
     "node_modules/stylelint/node_modules/file-entry-cache": {
-      "version": "10.1.0",
-      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.1.0.tgz",
-      "integrity": "sha512-Et/ex6smi3wOOB+n5mek+Grf7P2AxZR5ueqRUvAAn4qkyatXi3cUC1cuQXVkX0VlzBVsN4BkWJFmY/fYiRTdww==",
+      "version": "10.1.1",
+      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.1.1.tgz",
+      "integrity": "sha512-zcmsHjg2B2zjuBgjdnB+9q0+cWcgWfykIcsDkWDB4GTPtl1eXUA+gTI6sO0u01AqK3cliHryTU55/b2Ow1hfZg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "flat-cache": "^6.1.9"
+        "flat-cache": "^6.1.10"
       }
     },
     "node_modules/stylelint/node_modules/ignore": {
@@ -8946,15 +8988,17 @@
       }
     },
     "node_modules/which-typed-array": {
-      "version": "1.1.18",
-      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz",
-      "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==",
+      "version": "1.1.19",
+      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz",
+      "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "available-typed-arrays": "^1.0.7",
         "call-bind": "^1.0.8",
-        "call-bound": "^1.0.3",
-        "for-each": "^0.3.3",
+        "call-bound": "^1.0.4",
+        "for-each": "^0.3.5",
+        "get-proto": "^1.0.1",
         "gopd": "^1.2.0",
         "has-tostringtag": "^1.0.2"
       },
diff --git a/providers/fab/src/airflow/providers/fab/www/package.json b/providers/fab/src/airflow/providers/fab/www/package.json
index 9c404b645af6c..84b1ef31883aa 100644
--- a/providers/fab/src/airflow/providers/fab/www/package.json
+++ b/providers/fab/src/airflow/providers/fab/www/package.json
@@ -48,18 +48,18 @@
     "copy-webpack-plugin": "^13.0.0",
     "css-loader": "7.1.2",
     "css-minimizer-webpack-plugin": "^7.0.2",
-    "eslint": "^9.28.0",
+    "eslint": "^9.29.0",
     "eslint-config-prettier": "^10.1.5",
     "eslint-plugin-html": "^8.1.3",
-    "eslint-plugin-import": "^2.27.5",
+    "eslint-plugin-import": "^2.32.0",
     "eslint-plugin-node": "^11.1.0",
     "eslint-plugin-standard": "^5.0.0",
     "file-loader": "^6.0.0",
     "mini-css-extract-plugin": "^2.9.2",
     "moment": "^2.29.4",
     "moment-locales-webpack-plugin": "^1.2.0",
-    "prettier": "^3.5.3",
-    "stylelint": "^16.20.0",
+    "prettier": "^3.6.0",
+    "stylelint": "^16.21.0",
     "terser-webpack-plugin": "<6.0.0",
     "url-loader": "4.1.1",
     "webpack": "^5.99.9",
diff --git a/providers/fab/src/airflow/providers/fab/www/static/dist/743.b6629eaae7f541f4158f.js b/providers/fab/src/airflow/providers/fab/www/static/dist/743.27a753a06671118f1c5c.js
similarity index 67%
rename from providers/fab/src/airflow/providers/fab/www/static/dist/743.b6629eaae7f541f4158f.js
rename to providers/fab/src/airflow/providers/fab/www/static/dist/743.27a753a06671118f1c5c.js
index 57cb1134a3fa7..8c73c6cfe0694 100644
--- a/providers/fab/src/airflow/providers/fab/www/static/dist/743.b6629eaae7f541f4158f.js
+++ b/providers/fab/src/airflow/providers/fab/www/static/dist/743.27a753a06671118f1c5c.js
@@ -1,2 +1,2 @@
-/*! For license information please see 743.b6629eaae7f541f4158f.js.LICENSE.txt */
-(self.webpackChunkAirflow=self.webpackChunkAirflow||[]).push([[743],{93:function(M,z,b){(M=b.nmd(M)).exports=function(){"use strict";var z,p;function O(){return z.apply(null,arguments)}function A(M){z=M}function c(M){return M instanceof Array||"[object Array]"===Object.prototype.toString.call(M)}function o(M){return null!=M&&"[object Object]"===Object.prototype.toString.call(M)}function q(M,z){return Object.prototype.hasOwnProperty.call(M,z)}function W(M){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(M).length;var z;for(z in M)if(q(M,z))return!1;return!0}function d(M){return void 0===M}function a(M){return"number"==typeof M||"[object Number]"===Object.prototype.toString.call(M)}function n(M){return M instanceof Date||"[object Date]"===Object.prototype.toString.call(M)}function e(M,z){var b,p=[],O=M.length;for(b=0;b<O;++b)p.push(z(M[b],b));return p}function R(M,z){for(var b in z)q(z,b)&&(M[b]=z[b]);return q(z,"toString")&&(M.toString=z.toString),q(z,"valueOf")&&(M.valueOf=z.valueOf),M}function i(M,z,b,p){return Kb(M,z,b,p,!0).utc()}function r(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function L(M){return null==M._pf&&(M._pf=r()),M._pf}function f(M){var z=null,b=!1,O=M._d&&!isNaN(M._d.getTime());return O&&(z=L(M),b=p.call(z.parsedDateParts,(function(M){return null!=M})),O=z.overflow<0&&!z.empty&&!z.invalidEra&&!z.invalidMonth&&!z.invalidWeekday&&!z.weekdayMismatch&&!z.nullInput&&!z.invalidFormat&&!z.userInvalidated&&(!z.meridiem||z.meridiem&&b),M._strict&&(O=O&&0===z.charsLeftOver&&0===z.unusedTokens.length&&void 0===z.bigHour)),null!=Object.isFrozen&&Object.isFrozen(M)?O:(M._isValid=O,M._isValid)}function t(M){var z=i(NaN);return null!=M?R(L(z),M):L(z).userInvalidated=!0,z}p=Array.prototype.some?Array.prototype.some:function(M){var z,b=Object(this),p=b.length>>>0;for(z=0;z<p;z++)if(z in b&&M.call(this,b[z],z,b))return!0;return!1};var u=O.momentProperties=[],s=!1;function N(M,z){var b,p,O,A=u.length;if(d(z._isAMomentObject)||(M._isAMomentObject=z._isAMomentObject),d(z._i)||(M._i=z._i),d(z._f)||(M._f=z._f),d(z._l)||(M._l=z._l),d(z._strict)||(M._strict=z._strict),d(z._tzm)||(M._tzm=z._tzm),d(z._isUTC)||(M._isUTC=z._isUTC),d(z._offset)||(M._offset=z._offset),d(z._pf)||(M._pf=L(z)),d(z._locale)||(M._locale=z._locale),A>0)for(b=0;b<A;b++)d(O=z[p=u[b]])||(M[p]=O);return M}function B(M){N(this,M),this._d=new Date(null!=M._d?M._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===s&&(s=!0,O.updateOffset(this),s=!1)}function X(M){return M instanceof B||null!=M&&null!=M._isAMomentObject}function l(M){!1===O.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+M)}function h(M,z){var b=!0;return R((function(){if(null!=O.deprecationHandler&&O.deprecationHandler(null,M),b){var p,A,c,o=[],W=arguments.length;for(A=0;A<W;A++){if(p="","object"==typeof arguments[A]){for(c in p+="\n["+A+"] ",arguments[0])q(arguments[0],c)&&(p+=c+": "+arguments[0][c]+", ");p=p.slice(0,-2)}else p=arguments[A];o.push(p)}l(M+"\nArguments: "+Array.prototype.slice.call(o).join("")+"\n"+(new Error).stack),b=!1}return z.apply(this,arguments)}),z)}var T,m={};function g(M,z){null!=O.deprecationHandler&&O.deprecationHandler(M,z),m[M]||(l(z),m[M]=!0)}function S(M){return"undefined"!=typeof Function&&M instanceof Function||"[object Function]"===Object.prototype.toString.call(M)}function _(M){var z,b;for(b in M)q(M,b)&&(S(z=M[b])?this[b]=z:this["_"+b]=z);this._config=M,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function E(M,z){var b,p=R({},M);for(b in z)q(z,b)&&(o(M[b])&&o(z[b])?(p[b]={},R(p[b],M[b]),R(p[b],z[b])):null!=z[b]?p[b]=z[b]:delete p[b]);for(b in M)q(M,b)&&!q(z,b)&&o(M[b])&&(p[b]=R({},p[b]));return p}function C(M){null!=M&&this.set(M)}O.suppressDeprecationWarnings=!1,O.deprecationHandler=null,T=Object.keys?Object.keys:function(M){var z,b=[];for(z in M)q(M,z)&&b.push(z);return b};var y={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function D(M,z,b){var p=this._calendar[M]||this._calendar.sameElse;return S(p)?p.call(z,b):p}function w(M,z,b){var p=""+Math.abs(M),O=z-p.length;return(M>=0?b?"+":"":"-")+Math.pow(10,Math.max(0,O)).toString().substr(1)+p}var k=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,v=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,P={},U={};function H(M,z,b,p){var O=p;"string"==typeof p&&(O=function(){return this[p]()}),M&&(U[M]=O),z&&(U[z[0]]=function(){return w(O.apply(this,arguments),z[1],z[2])}),b&&(U[b]=function(){return this.localeData().ordinal(O.apply(this,arguments),M)})}function x(M){return M.match(/\[[\s\S]/)?M.replace(/^\[|\]$/g,""):M.replace(/\\/g,"")}function I(M){var z,b,p=M.match(k);for(z=0,b=p.length;z<b;z++)U[p[z]]?p[z]=U[p[z]]:p[z]=x(p[z]);return function(z){var O,A="";for(O=0;O<b;O++)A+=S(p[O])?p[O].call(z,M):p[O];return A}}function Y(M,z){return M.isValid()?(z=G(z,M.localeData()),P[z]=P[z]||I(z),P[z](M)):M.localeData().invalidDate()}function G(M,z){var b=5;function p(M){return z.longDateFormat(M)||M}for(v.lastIndex=0;b>=0&&v.test(M);)M=M.replace(v,p),v.lastIndex=0,b-=1;return M}var j={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function F(M){var z=this._longDateFormat[M],b=this._longDateFormat[M.toUpperCase()];return z||!b?z:(this._longDateFormat[M]=b.match(k).map((function(M){return"MMMM"===M||"MM"===M||"DD"===M||"dddd"===M?M.slice(1):M})).join(""),this._longDateFormat[M])}var K="Invalid date";function V(){return this._invalidDate}var Q="%d",J=/\d{1,2}/;function Z(M){return this._ordinal.replace("%d",M)}var $={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function MM(M,z,b,p){var O=this._relativeTime[b];return S(O)?O(M,z,b,p):O.replace(/%d/i,M)}function zM(M,z){var b=this._relativeTime[M>0?"future":"past"];return S(b)?b(z):b.replace(/%s/i,z)}var bM={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function pM(M){return"string"==typeof M?bM[M]||bM[M.toLowerCase()]:void 0}function OM(M){var z,b,p={};for(b in M)q(M,b)&&(z=pM(b))&&(p[z]=M[b]);return p}var AM={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function cM(M){var z,b=[];for(z in M)q(M,z)&&b.push({unit:z,priority:AM[z]});return b.sort((function(M,z){return M.priority-z.priority})),b}var oM,qM=/\d/,WM=/\d\d/,dM=/\d{3}/,aM=/\d{4}/,nM=/[+-]?\d{6}/,eM=/\d\d?/,RM=/\d\d\d\d?/,iM=/\d\d\d\d\d\d?/,rM=/\d{1,3}/,LM=/\d{1,4}/,fM=/[+-]?\d{1,6}/,tM=/\d+/,uM=/[+-]?\d+/,sM=/Z|[+-]\d\d:?\d\d/gi,NM=/Z|[+-]\d\d(?::?\d\d)?/gi,BM=/[+-]?\d+(\.\d{1,3})?/,XM=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,lM=/^[1-9]\d?/,hM=/^([1-9]\d|\d)/;function TM(M,z,b){oM[M]=S(z)?z:function(M,p){return M&&b?b:z}}function mM(M,z){return q(oM,M)?oM[M](z._strict,z._locale):new RegExp(gM(M))}function gM(M){return SM(M.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(M,z,b,p,O){return z||b||p||O})))}function SM(M){return M.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function _M(M){return M<0?Math.ceil(M)||0:Math.floor(M)}function EM(M){var z=+M,b=0;return 0!==z&&isFinite(z)&&(b=_M(z)),b}oM={};var CM={};function yM(M,z){var b,p,O=z;for("string"==typeof M&&(M=[M]),a(z)&&(O=function(M,b){b[z]=EM(M)}),p=M.length,b=0;b<p;b++)CM[M[b]]=O}function DM(M,z){yM(M,(function(M,b,p,O){p._w=p._w||{},z(M,p._w,p,O)}))}function wM(M,z,b){null!=z&&q(CM,M)&&CM[M](z,b._a,b,M)}function kM(M){return M%4==0&&M%100!=0||M%400==0}var vM=0,PM=1,UM=2,HM=3,xM=4,IM=5,YM=6,GM=7,jM=8;function FM(M){return kM(M)?366:365}H("Y",0,0,(function(){var M=this.year();return M<=9999?w(M,4):"+"+M})),H(0,["YY",2],0,(function(){return this.year()%100})),H(0,["YYYY",4],0,"year"),H(0,["YYYYY",5],0,"year"),H(0,["YYYYYY",6,!0],0,"year"),TM("Y",uM),TM("YY",eM,WM),TM("YYYY",LM,aM),TM("YYYYY",fM,nM),TM("YYYYYY",fM,nM),yM(["YYYYY","YYYYYY"],vM),yM("YYYY",(function(M,z){z[vM]=2===M.length?O.parseTwoDigitYear(M):EM(M)})),yM("YY",(function(M,z){z[vM]=O.parseTwoDigitYear(M)})),yM("Y",(function(M,z){z[vM]=parseInt(M,10)})),O.parseTwoDigitYear=function(M){return EM(M)+(EM(M)>68?1900:2e3)};var KM,VM=JM("FullYear",!0);function QM(){return kM(this.year())}function JM(M,z){return function(b){return null!=b?($M(this,M,b),O.updateOffset(this,z),this):ZM(this,M)}}function ZM(M,z){if(!M.isValid())return NaN;var b=M._d,p=M._isUTC;switch(z){case"Milliseconds":return p?b.getUTCMilliseconds():b.getMilliseconds();case"Seconds":return p?b.getUTCSeconds():b.getSeconds();case"Minutes":return p?b.getUTCMinutes():b.getMinutes();case"Hours":return p?b.getUTCHours():b.getHours();case"Date":return p?b.getUTCDate():b.getDate();case"Day":return p?b.getUTCDay():b.getDay();case"Month":return p?b.getUTCMonth():b.getMonth();case"FullYear":return p?b.getUTCFullYear():b.getFullYear();default:return NaN}}function $M(M,z,b){var p,O,A,c,o;if(M.isValid()&&!isNaN(b)){switch(p=M._d,O=M._isUTC,z){case"Milliseconds":return void(O?p.setUTCMilliseconds(b):p.setMilliseconds(b));case"Seconds":return void(O?p.setUTCSeconds(b):p.setSeconds(b));case"Minutes":return void(O?p.setUTCMinutes(b):p.setMinutes(b));case"Hours":return void(O?p.setUTCHours(b):p.setHours(b));case"Date":return void(O?p.setUTCDate(b):p.setDate(b));case"FullYear":break;default:return}A=b,c=M.month(),o=29!==(o=M.date())||1!==c||kM(A)?o:28,O?p.setUTCFullYear(A,c,o):p.setFullYear(A,c,o)}}function Mz(M){return S(this[M=pM(M)])?this[M]():this}function zz(M,z){if("object"==typeof M){var b,p=cM(M=OM(M)),O=p.length;for(b=0;b<O;b++)this[p[b].unit](M[p[b].unit])}else if(S(this[M=pM(M)]))return this[M](z);return this}function bz(M,z){return(M%z+z)%z}function pz(M,z){if(isNaN(M)||isNaN(z))return NaN;var b=bz(z,12);return M+=(z-b)/12,1===b?kM(M)?29:28:31-b%7%2}KM=Array.prototype.indexOf?Array.prototype.indexOf:function(M){var z;for(z=0;z<this.length;++z)if(this[z]===M)return z;return-1},H("M",["MM",2],"Mo",(function(){return this.month()+1})),H("MMM",0,0,(function(M){return this.localeData().monthsShort(this,M)})),H("MMMM",0,0,(function(M){return this.localeData().months(this,M)})),TM("M",eM,lM),TM("MM",eM,WM),TM("MMM",(function(M,z){return z.monthsShortRegex(M)})),TM("MMMM",(function(M,z){return z.monthsRegex(M)})),yM(["M","MM"],(function(M,z){z[PM]=EM(M)-1})),yM(["MMM","MMMM"],(function(M,z,b,p){var O=b._locale.monthsParse(M,p,b._strict);null!=O?z[PM]=O:L(b).invalidMonth=M}));var Oz="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Az="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),cz=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,oz=XM,qz=XM;function Wz(M,z){return M?c(this._months)?this._months[M.month()]:this._months[(this._months.isFormat||cz).test(z)?"format":"standalone"][M.month()]:c(this._months)?this._months:this._months.standalone}function dz(M,z){return M?c(this._monthsShort)?this._monthsShort[M.month()]:this._monthsShort[cz.test(z)?"format":"standalone"][M.month()]:c(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function az(M,z,b){var p,O,A,c=M.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],p=0;p<12;++p)A=i([2e3,p]),this._shortMonthsParse[p]=this.monthsShort(A,"").toLocaleLowerCase(),this._longMonthsParse[p]=this.months(A,"").toLocaleLowerCase();return b?"MMM"===z?-1!==(O=KM.call(this._shortMonthsParse,c))?O:null:-1!==(O=KM.call(this._longMonthsParse,c))?O:null:"MMM"===z?-1!==(O=KM.call(this._shortMonthsParse,c))||-1!==(O=KM.call(this._longMonthsParse,c))?O:null:-1!==(O=KM.call(this._longMonthsParse,c))||-1!==(O=KM.call(this._shortMonthsParse,c))?O:null}function nz(M,z,b){var p,O,A;if(this._monthsParseExact)return az.call(this,M,z,b);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),p=0;p<12;p++){if(O=i([2e3,p]),b&&!this._longMonthsParse[p]&&(this._longMonthsParse[p]=new RegExp("^"+this.months(O,"").replace(".","")+"$","i"),this._shortMonthsParse[p]=new RegExp("^"+this.monthsShort(O,"").replace(".","")+"$","i")),b||this._monthsParse[p]||(A="^"+this.months(O,"")+"|^"+this.monthsShort(O,""),this._monthsParse[p]=new RegExp(A.replace(".",""),"i")),b&&"MMMM"===z&&this._longMonthsParse[p].test(M))return p;if(b&&"MMM"===z&&this._shortMonthsParse[p].test(M))return p;if(!b&&this._monthsParse[p].test(M))return p}}function ez(M,z){if(!M.isValid())return M;if("string"==typeof z)if(/^\d+$/.test(z))z=EM(z);else if(!a(z=M.localeData().monthsParse(z)))return M;var b=z,p=M.date();return p=p<29?p:Math.min(p,pz(M.year(),b)),M._isUTC?M._d.setUTCMonth(b,p):M._d.setMonth(b,p),M}function Rz(M){return null!=M?(ez(this,M),O.updateOffset(this,!0),this):ZM(this,"Month")}function iz(){return pz(this.year(),this.month())}function rz(M){return this._monthsParseExact?(q(this,"_monthsRegex")||fz.call(this),M?this._monthsShortStrictRegex:this._monthsShortRegex):(q(this,"_monthsShortRegex")||(this._monthsShortRegex=oz),this._monthsShortStrictRegex&&M?this._monthsShortStrictRegex:this._monthsShortRegex)}function Lz(M){return this._monthsParseExact?(q(this,"_monthsRegex")||fz.call(this),M?this._monthsStrictRegex:this._monthsRegex):(q(this,"_monthsRegex")||(this._monthsRegex=qz),this._monthsStrictRegex&&M?this._monthsStrictRegex:this._monthsRegex)}function fz(){function M(M,z){return z.length-M.length}var z,b,p,O,A=[],c=[],o=[];for(z=0;z<12;z++)b=i([2e3,z]),p=SM(this.monthsShort(b,"")),O=SM(this.months(b,"")),A.push(p),c.push(O),o.push(O),o.push(p);A.sort(M),c.sort(M),o.sort(M),this._monthsRegex=new RegExp("^("+o.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+c.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+A.join("|")+")","i")}function tz(M,z,b,p,O,A,c){var o;return M<100&&M>=0?(o=new Date(M+400,z,b,p,O,A,c),isFinite(o.getFullYear())&&o.setFullYear(M)):o=new Date(M,z,b,p,O,A,c),o}function uz(M){var z,b;return M<100&&M>=0?((b=Array.prototype.slice.call(arguments))[0]=M+400,z=new Date(Date.UTC.apply(null,b)),isFinite(z.getUTCFullYear())&&z.setUTCFullYear(M)):z=new Date(Date.UTC.apply(null,arguments)),z}function sz(M,z,b){var p=7+z-b;return-(7+uz(M,0,p).getUTCDay()-z)%7+p-1}function Nz(M,z,b,p,O){var A,c,o=1+7*(z-1)+(7+b-p)%7+sz(M,p,O);return o<=0?c=FM(A=M-1)+o:o>FM(M)?(A=M+1,c=o-FM(M)):(A=M,c=o),{year:A,dayOfYear:c}}function Bz(M,z,b){var p,O,A=sz(M.year(),z,b),c=Math.floor((M.dayOfYear()-A-1)/7)+1;return c<1?p=c+Xz(O=M.year()-1,z,b):c>Xz(M.year(),z,b)?(p=c-Xz(M.year(),z,b),O=M.year()+1):(O=M.year(),p=c),{week:p,year:O}}function Xz(M,z,b){var p=sz(M,z,b),O=sz(M+1,z,b);return(FM(M)-p+O)/7}function lz(M){return Bz(M,this._week.dow,this._week.doy).week}H("w",["ww",2],"wo","week"),H("W",["WW",2],"Wo","isoWeek"),TM("w",eM,lM),TM("ww",eM,WM),TM("W",eM,lM),TM("WW",eM,WM),DM(["w","ww","W","WW"],(function(M,z,b,p){z[p.substr(0,1)]=EM(M)}));var hz={dow:0,doy:6};function Tz(){return this._week.dow}function mz(){return this._week.doy}function gz(M){var z=this.localeData().week(this);return null==M?z:this.add(7*(M-z),"d")}function Sz(M){var z=Bz(this,1,4).week;return null==M?z:this.add(7*(M-z),"d")}function _z(M,z){return"string"!=typeof M?M:isNaN(M)?"number"==typeof(M=z.weekdaysParse(M))?M:null:parseInt(M,10)}function Ez(M,z){return"string"==typeof M?z.weekdaysParse(M)%7||7:isNaN(M)?null:M}function Cz(M,z){return M.slice(z,7).concat(M.slice(0,z))}H("d",0,"do","day"),H("dd",0,0,(function(M){return this.localeData().weekdaysMin(this,M)})),H("ddd",0,0,(function(M){return this.localeData().weekdaysShort(this,M)})),H("dddd",0,0,(function(M){return this.localeData().weekdays(this,M)})),H("e",0,0,"weekday"),H("E",0,0,"isoWeekday"),TM("d",eM),TM("e",eM),TM("E",eM),TM("dd",(function(M,z){return z.weekdaysMinRegex(M)})),TM("ddd",(function(M,z){return z.weekdaysShortRegex(M)})),TM("dddd",(function(M,z){return z.weekdaysRegex(M)})),DM(["dd","ddd","dddd"],(function(M,z,b,p){var O=b._locale.weekdaysParse(M,p,b._strict);null!=O?z.d=O:L(b).invalidWeekday=M})),DM(["d","e","E"],(function(M,z,b,p){z[p]=EM(M)}));var yz="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Dz="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),wz="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),kz=XM,vz=XM,Pz=XM;function Uz(M,z){var b=c(this._weekdays)?this._weekdays:this._weekdays[M&&!0!==M&&this._weekdays.isFormat.test(z)?"format":"standalone"];return!0===M?Cz(b,this._week.dow):M?b[M.day()]:b}function Hz(M){return!0===M?Cz(this._weekdaysShort,this._week.dow):M?this._weekdaysShort[M.day()]:this._weekdaysShort}function xz(M){return!0===M?Cz(this._weekdaysMin,this._week.dow):M?this._weekdaysMin[M.day()]:this._weekdaysMin}function Iz(M,z,b){var p,O,A,c=M.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],p=0;p<7;++p)A=i([2e3,1]).day(p),this._minWeekdaysParse[p]=this.weekdaysMin(A,"").toLocaleLowerCase(),this._shortWeekdaysParse[p]=this.weekdaysShort(A,"").toLocaleLowerCase(),this._weekdaysParse[p]=this.weekdays(A,"").toLocaleLowerCase();return b?"dddd"===z?-1!==(O=KM.call(this._weekdaysParse,c))?O:null:"ddd"===z?-1!==(O=KM.call(this._shortWeekdaysParse,c))?O:null:-1!==(O=KM.call(this._minWeekdaysParse,c))?O:null:"dddd"===z?-1!==(O=KM.call(this._weekdaysParse,c))||-1!==(O=KM.call(this._shortWeekdaysParse,c))||-1!==(O=KM.call(this._minWeekdaysParse,c))?O:null:"ddd"===z?-1!==(O=KM.call(this._shortWeekdaysParse,c))||-1!==(O=KM.call(this._weekdaysParse,c))||-1!==(O=KM.call(this._minWeekdaysParse,c))?O:null:-1!==(O=KM.call(this._minWeekdaysParse,c))||-1!==(O=KM.call(this._weekdaysParse,c))||-1!==(O=KM.call(this._shortWeekdaysParse,c))?O:null}function Yz(M,z,b){var p,O,A;if(this._weekdaysParseExact)return Iz.call(this,M,z,b);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),p=0;p<7;p++){if(O=i([2e3,1]).day(p),b&&!this._fullWeekdaysParse[p]&&(this._fullWeekdaysParse[p]=new RegExp("^"+this.weekdays(O,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[p]=new RegExp("^"+this.weekdaysShort(O,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[p]=new RegExp("^"+this.weekdaysMin(O,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[p]||(A="^"+this.weekdays(O,"")+"|^"+this.weekdaysShort(O,"")+"|^"+this.weekdaysMin(O,""),this._weekdaysParse[p]=new RegExp(A.replace(".",""),"i")),b&&"dddd"===z&&this._fullWeekdaysParse[p].test(M))return p;if(b&&"ddd"===z&&this._shortWeekdaysParse[p].test(M))return p;if(b&&"dd"===z&&this._minWeekdaysParse[p].test(M))return p;if(!b&&this._weekdaysParse[p].test(M))return p}}function Gz(M){if(!this.isValid())return null!=M?this:NaN;var z=ZM(this,"Day");return null!=M?(M=_z(M,this.localeData()),this.add(M-z,"d")):z}function jz(M){if(!this.isValid())return null!=M?this:NaN;var z=(this.day()+7-this.localeData()._week.dow)%7;return null==M?z:this.add(M-z,"d")}function Fz(M){if(!this.isValid())return null!=M?this:NaN;if(null!=M){var z=Ez(M,this.localeData());return this.day(this.day()%7?z:z-7)}return this.day()||7}function Kz(M){return this._weekdaysParseExact?(q(this,"_weekdaysRegex")||Jz.call(this),M?this._weekdaysStrictRegex:this._weekdaysRegex):(q(this,"_weekdaysRegex")||(this._weekdaysRegex=kz),this._weekdaysStrictRegex&&M?this._weekdaysStrictRegex:this._weekdaysRegex)}function Vz(M){return this._weekdaysParseExact?(q(this,"_weekdaysRegex")||Jz.call(this),M?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(q(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=vz),this._weekdaysShortStrictRegex&&M?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Qz(M){return this._weekdaysParseExact?(q(this,"_weekdaysRegex")||Jz.call(this),M?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(q(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Pz),this._weekdaysMinStrictRegex&&M?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Jz(){function M(M,z){return z.length-M.length}var z,b,p,O,A,c=[],o=[],q=[],W=[];for(z=0;z<7;z++)b=i([2e3,1]).day(z),p=SM(this.weekdaysMin(b,"")),O=SM(this.weekdaysShort(b,"")),A=SM(this.weekdays(b,"")),c.push(p),o.push(O),q.push(A),W.push(p),W.push(O),W.push(A);c.sort(M),o.sort(M),q.sort(M),W.sort(M),this._weekdaysRegex=new RegExp("^("+W.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+q.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+c.join("|")+")","i")}function Zz(){return this.hours()%12||12}function $z(){return this.hours()||24}function Mb(M,z){H(M,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),z)}))}function zb(M,z){return z._meridiemParse}function bb(M){return"p"===(M+"").toLowerCase().charAt(0)}H("H",["HH",2],0,"hour"),H("h",["hh",2],0,Zz),H("k",["kk",2],0,$z),H("hmm",0,0,(function(){return""+Zz.apply(this)+w(this.minutes(),2)})),H("hmmss",0,0,(function(){return""+Zz.apply(this)+w(this.minutes(),2)+w(this.seconds(),2)})),H("Hmm",0,0,(function(){return""+this.hours()+w(this.minutes(),2)})),H("Hmmss",0,0,(function(){return""+this.hours()+w(this.minutes(),2)+w(this.seconds(),2)})),Mb("a",!0),Mb("A",!1),TM("a",zb),TM("A",zb),TM("H",eM,hM),TM("h",eM,lM),TM("k",eM,lM),TM("HH",eM,WM),TM("hh",eM,WM),TM("kk",eM,WM),TM("hmm",RM),TM("hmmss",iM),TM("Hmm",RM),TM("Hmmss",iM),yM(["H","HH"],HM),yM(["k","kk"],(function(M,z,b){var p=EM(M);z[HM]=24===p?0:p})),yM(["a","A"],(function(M,z,b){b._isPm=b._locale.isPM(M),b._meridiem=M})),yM(["h","hh"],(function(M,z,b){z[HM]=EM(M),L(b).bigHour=!0})),yM("hmm",(function(M,z,b){var p=M.length-2;z[HM]=EM(M.substr(0,p)),z[xM]=EM(M.substr(p)),L(b).bigHour=!0})),yM("hmmss",(function(M,z,b){var p=M.length-4,O=M.length-2;z[HM]=EM(M.substr(0,p)),z[xM]=EM(M.substr(p,2)),z[IM]=EM(M.substr(O)),L(b).bigHour=!0})),yM("Hmm",(function(M,z,b){var p=M.length-2;z[HM]=EM(M.substr(0,p)),z[xM]=EM(M.substr(p))})),yM("Hmmss",(function(M,z,b){var p=M.length-4,O=M.length-2;z[HM]=EM(M.substr(0,p)),z[xM]=EM(M.substr(p,2)),z[IM]=EM(M.substr(O))}));var pb=/[ap]\.?m?\.?/i,Ob=JM("Hours",!0);function Ab(M,z,b){return M>11?b?"pm":"PM":b?"am":"AM"}var cb,ob={calendar:y,longDateFormat:j,invalidDate:K,ordinal:Q,dayOfMonthOrdinalParse:J,relativeTime:$,months:Oz,monthsShort:Az,week:hz,weekdays:yz,weekdaysMin:wz,weekdaysShort:Dz,meridiemParse:pb},qb={},Wb={};function db(M,z){var b,p=Math.min(M.length,z.length);for(b=0;b<p;b+=1)if(M[b]!==z[b])return b;return p}function ab(M){return M?M.toLowerCase().replace("_","-"):M}function nb(M){for(var z,b,p,O,A=0;A<M.length;){for(z=(O=ab(M[A]).split("-")).length,b=(b=ab(M[A+1]))?b.split("-"):null;z>0;){if(p=Rb(O.slice(0,z).join("-")))return p;if(b&&b.length>=z&&db(O,b)>=z-1)break;z--}A++}return cb}function eb(M){return!(!M||!M.match("^[^/\\\\]*$"))}function Rb(z){var p=null;if(void 0===qb[z]&&M&&M.exports&&eb(z))try{p=cb._abbr,b(137)("./"+z),ib(p)}catch(M){qb[z]=null}return qb[z]}function ib(M,z){var b;return M&&((b=d(z)?fb(M):rb(M,z))?cb=b:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+M+" not found. Did you forget to load it?")),cb._abbr}function rb(M,z){if(null!==z){var b,p=ob;if(z.abbr=M,null!=qb[M])g("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),p=qb[M]._config;else if(null!=z.parentLocale)if(null!=qb[z.parentLocale])p=qb[z.parentLocale]._config;else{if(null==(b=Rb(z.parentLocale)))return Wb[z.parentLocale]||(Wb[z.parentLocale]=[]),Wb[z.parentLocale].push({name:M,config:z}),null;p=b._config}return qb[M]=new C(E(p,z)),Wb[M]&&Wb[M].forEach((function(M){rb(M.name,M.config)})),ib(M),qb[M]}return delete qb[M],null}function Lb(M,z){if(null!=z){var b,p,O=ob;null!=qb[M]&&null!=qb[M].parentLocale?qb[M].set(E(qb[M]._config,z)):(null!=(p=Rb(M))&&(O=p._config),z=E(O,z),null==p&&(z.abbr=M),(b=new C(z)).parentLocale=qb[M],qb[M]=b),ib(M)}else null!=qb[M]&&(null!=qb[M].parentLocale?(qb[M]=qb[M].parentLocale,M===ib()&&ib(M)):null!=qb[M]&&delete qb[M]);return qb[M]}function fb(M){var z;if(M&&M._locale&&M._locale._abbr&&(M=M._locale._abbr),!M)return cb;if(!c(M)){if(z=Rb(M))return z;M=[M]}return nb(M)}function tb(){return T(qb)}function ub(M){var z,b=M._a;return b&&-2===L(M).overflow&&(z=b[PM]<0||b[PM]>11?PM:b[UM]<1||b[UM]>pz(b[vM],b[PM])?UM:b[HM]<0||b[HM]>24||24===b[HM]&&(0!==b[xM]||0!==b[IM]||0!==b[YM])?HM:b[xM]<0||b[xM]>59?xM:b[IM]<0||b[IM]>59?IM:b[YM]<0||b[YM]>999?YM:-1,L(M)._overflowDayOfYear&&(z<vM||z>UM)&&(z=UM),L(M)._overflowWeeks&&-1===z&&(z=GM),L(M)._overflowWeekday&&-1===z&&(z=jM),L(M).overflow=z),M}var sb=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Nb=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Bb=/Z|[+-]\d\d(?::?\d\d)?/,Xb=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],lb=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],hb=/^\/?Date\((-?\d+)/i,Tb=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,mb={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function gb(M){var z,b,p,O,A,c,o=M._i,q=sb.exec(o)||Nb.exec(o),W=Xb.length,d=lb.length;if(q){for(L(M).iso=!0,z=0,b=W;z<b;z++)if(Xb[z][1].exec(q[1])){O=Xb[z][0],p=!1!==Xb[z][2];break}if(null==O)return void(M._isValid=!1);if(q[3]){for(z=0,b=d;z<b;z++)if(lb[z][1].exec(q[3])){A=(q[2]||" ")+lb[z][0];break}if(null==A)return void(M._isValid=!1)}if(!p&&null!=A)return void(M._isValid=!1);if(q[4]){if(!Bb.exec(q[4]))return void(M._isValid=!1);c="Z"}M._f=O+(A||"")+(c||""),Hb(M)}else M._isValid=!1}function Sb(M,z,b,p,O,A){var c=[_b(M),Az.indexOf(z),parseInt(b,10),parseInt(p,10),parseInt(O,10)];return A&&c.push(parseInt(A,10)),c}function _b(M){var z=parseInt(M,10);return z<=49?2e3+z:z<=999?1900+z:z}function Eb(M){return M.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function Cb(M,z,b){return!M||Dz.indexOf(M)===new Date(z[0],z[1],z[2]).getDay()||(L(b).weekdayMismatch=!0,b._isValid=!1,!1)}function yb(M,z,b){if(M)return mb[M];if(z)return 0;var p=parseInt(b,10),O=p%100;return(p-O)/100*60+O}function Db(M){var z,b=Tb.exec(Eb(M._i));if(b){if(z=Sb(b[4],b[3],b[2],b[5],b[6],b[7]),!Cb(b[1],z,M))return;M._a=z,M._tzm=yb(b[8],b[9],b[10]),M._d=uz.apply(null,M._a),M._d.setUTCMinutes(M._d.getUTCMinutes()-M._tzm),L(M).rfc2822=!0}else M._isValid=!1}function wb(M){var z=hb.exec(M._i);null===z?(gb(M),!1===M._isValid&&(delete M._isValid,Db(M),!1===M._isValid&&(delete M._isValid,M._strict?M._isValid=!1:O.createFromInputFallback(M)))):M._d=new Date(+z[1])}function kb(M,z,b){return null!=M?M:null!=z?z:b}function vb(M){var z=new Date(O.now());return M._useUTC?[z.getUTCFullYear(),z.getUTCMonth(),z.getUTCDate()]:[z.getFullYear(),z.getMonth(),z.getDate()]}function Pb(M){var z,b,p,O,A,c=[];if(!M._d){for(p=vb(M),M._w&&null==M._a[UM]&&null==M._a[PM]&&Ub(M),null!=M._dayOfYear&&(A=kb(M._a[vM],p[vM]),(M._dayOfYear>FM(A)||0===M._dayOfYear)&&(L(M)._overflowDayOfYear=!0),b=uz(A,0,M._dayOfYear),M._a[PM]=b.getUTCMonth(),M._a[UM]=b.getUTCDate()),z=0;z<3&&null==M._a[z];++z)M._a[z]=c[z]=p[z];for(;z<7;z++)M._a[z]=c[z]=null==M._a[z]?2===z?1:0:M._a[z];24===M._a[HM]&&0===M._a[xM]&&0===M._a[IM]&&0===M._a[YM]&&(M._nextDay=!0,M._a[HM]=0),M._d=(M._useUTC?uz:tz).apply(null,c),O=M._useUTC?M._d.getUTCDay():M._d.getDay(),null!=M._tzm&&M._d.setUTCMinutes(M._d.getUTCMinutes()-M._tzm),M._nextDay&&(M._a[HM]=24),M._w&&void 0!==M._w.d&&M._w.d!==O&&(L(M).weekdayMismatch=!0)}}function Ub(M){var z,b,p,O,A,c,o,q,W;null!=(z=M._w).GG||null!=z.W||null!=z.E?(A=1,c=4,b=kb(z.GG,M._a[vM],Bz(Vb(),1,4).year),p=kb(z.W,1),((O=kb(z.E,1))<1||O>7)&&(q=!0)):(A=M._locale._week.dow,c=M._locale._week.doy,W=Bz(Vb(),A,c),b=kb(z.gg,M._a[vM],W.year),p=kb(z.w,W.week),null!=z.d?((O=z.d)<0||O>6)&&(q=!0):null!=z.e?(O=z.e+A,(z.e<0||z.e>6)&&(q=!0)):O=A),p<1||p>Xz(b,A,c)?L(M)._overflowWeeks=!0:null!=q?L(M)._overflowWeekday=!0:(o=Nz(b,p,O,A,c),M._a[vM]=o.year,M._dayOfYear=o.dayOfYear)}function Hb(M){if(M._f!==O.ISO_8601)if(M._f!==O.RFC_2822){M._a=[],L(M).empty=!0;var z,b,p,A,c,o,q,W=""+M._i,d=W.length,a=0;for(q=(p=G(M._f,M._locale).match(k)||[]).length,z=0;z<q;z++)A=p[z],(b=(W.match(mM(A,M))||[])[0])&&((c=W.substr(0,W.indexOf(b))).length>0&&L(M).unusedInput.push(c),W=W.slice(W.indexOf(b)+b.length),a+=b.length),U[A]?(b?L(M).empty=!1:L(M).unusedTokens.push(A),wM(A,b,M)):M._strict&&!b&&L(M).unusedTokens.push(A);L(M).charsLeftOver=d-a,W.length>0&&L(M).unusedInput.push(W),M._a[HM]<=12&&!0===L(M).bigHour&&M._a[HM]>0&&(L(M).bigHour=void 0),L(M).parsedDateParts=M._a.slice(0),L(M).meridiem=M._meridiem,M._a[HM]=xb(M._locale,M._a[HM],M._meridiem),null!==(o=L(M).era)&&(M._a[vM]=M._locale.erasConvertYear(o,M._a[vM])),Pb(M),ub(M)}else Db(M);else gb(M)}function xb(M,z,b){var p;return null==b?z:null!=M.meridiemHour?M.meridiemHour(z,b):null!=M.isPM?((p=M.isPM(b))&&z<12&&(z+=12),p||12!==z||(z=0),z):z}function Ib(M){var z,b,p,O,A,c,o=!1,q=M._f.length;if(0===q)return L(M).invalidFormat=!0,void(M._d=new Date(NaN));for(O=0;O<q;O++)A=0,c=!1,z=N({},M),null!=M._useUTC&&(z._useUTC=M._useUTC),z._f=M._f[O],Hb(z),f(z)&&(c=!0),A+=L(z).charsLeftOver,A+=10*L(z).unusedTokens.length,L(z).score=A,o?A<p&&(p=A,b=z):(null==p||A<p||c)&&(p=A,b=z,c&&(o=!0));R(M,b||z)}function Yb(M){if(!M._d){var z=OM(M._i),b=void 0===z.day?z.date:z.day;M._a=e([z.year,z.month,b,z.hour,z.minute,z.second,z.millisecond],(function(M){return M&&parseInt(M,10)})),Pb(M)}}function Gb(M){var z=new B(ub(jb(M)));return z._nextDay&&(z.add(1,"d"),z._nextDay=void 0),z}function jb(M){var z=M._i,b=M._f;return M._locale=M._locale||fb(M._l),null===z||void 0===b&&""===z?t({nullInput:!0}):("string"==typeof z&&(M._i=z=M._locale.preparse(z)),X(z)?new B(ub(z)):(n(z)?M._d=z:c(b)?Ib(M):b?Hb(M):Fb(M),f(M)||(M._d=null),M))}function Fb(M){var z=M._i;d(z)?M._d=new Date(O.now()):n(z)?M._d=new Date(z.valueOf()):"string"==typeof z?wb(M):c(z)?(M._a=e(z.slice(0),(function(M){return parseInt(M,10)})),Pb(M)):o(z)?Yb(M):a(z)?M._d=new Date(z):O.createFromInputFallback(M)}function Kb(M,z,b,p,O){var A={};return!0!==z&&!1!==z||(p=z,z=void 0),!0!==b&&!1!==b||(p=b,b=void 0),(o(M)&&W(M)||c(M)&&0===M.length)&&(M=void 0),A._isAMomentObject=!0,A._useUTC=A._isUTC=O,A._l=b,A._i=M,A._f=z,A._strict=p,Gb(A)}function Vb(M,z,b,p){return Kb(M,z,b,p,!1)}O.createFromInputFallback=h("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(M){M._d=new Date(M._i+(M._useUTC?" UTC":""))})),O.ISO_8601=function(){},O.RFC_2822=function(){};var Qb=h("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var M=Vb.apply(null,arguments);return this.isValid()&&M.isValid()?M<this?this:M:t()})),Jb=h("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var M=Vb.apply(null,arguments);return this.isValid()&&M.isValid()?M>this?this:M:t()}));function Zb(M,z){var b,p;if(1===z.length&&c(z[0])&&(z=z[0]),!z.length)return Vb();for(b=z[0],p=1;p<z.length;++p)z[p].isValid()&&!z[p][M](b)||(b=z[p]);return b}function $b(){return Zb("isBefore",[].slice.call(arguments,0))}function Mp(){return Zb("isAfter",[].slice.call(arguments,0))}var zp=function(){return Date.now?Date.now():+new Date},bp=["year","quarter","month","week","day","hour","minute","second","millisecond"];function pp(M){var z,b,p=!1,O=bp.length;for(z in M)if(q(M,z)&&(-1===KM.call(bp,z)||null!=M[z]&&isNaN(M[z])))return!1;for(b=0;b<O;++b)if(M[bp[b]]){if(p)return!1;parseFloat(M[bp[b]])!==EM(M[bp[b]])&&(p=!0)}return!0}function Op(){return this._isValid}function Ap(){return mp(NaN)}function cp(M){var z=OM(M),b=z.year||0,p=z.quarter||0,O=z.month||0,A=z.week||z.isoWeek||0,c=z.day||0,o=z.hour||0,q=z.minute||0,W=z.second||0,d=z.millisecond||0;this._isValid=pp(z),this._milliseconds=+d+1e3*W+6e4*q+1e3*o*60*60,this._days=+c+7*A,this._months=+O+3*p+12*b,this._data={},this._locale=fb(),this._bubble()}function op(M){return M instanceof cp}function qp(M){return M<0?-1*Math.round(-1*M):Math.round(M)}function Wp(M,z,b){var p,O=Math.min(M.length,z.length),A=Math.abs(M.length-z.length),c=0;for(p=0;p<O;p++)(b&&M[p]!==z[p]||!b&&EM(M[p])!==EM(z[p]))&&c++;return c+A}function dp(M,z){H(M,0,0,(function(){var M=this.utcOffset(),b="+";return M<0&&(M=-M,b="-"),b+w(~~(M/60),2)+z+w(~~M%60,2)}))}dp("Z",":"),dp("ZZ",""),TM("Z",NM),TM("ZZ",NM),yM(["Z","ZZ"],(function(M,z,b){b._useUTC=!0,b._tzm=np(NM,M)}));var ap=/([\+\-]|\d\d)/gi;function np(M,z){var b,p,O=(z||"").match(M);return null===O?null:0===(p=60*(b=((O[O.length-1]||[])+"").match(ap)||["-",0,0])[1]+EM(b[2]))?0:"+"===b[0]?p:-p}function ep(M,z){var b,p;return z._isUTC?(b=z.clone(),p=(X(M)||n(M)?M.valueOf():Vb(M).valueOf())-b.valueOf(),b._d.setTime(b._d.valueOf()+p),O.updateOffset(b,!1),b):Vb(M).local()}function Rp(M){return-Math.round(M._d.getTimezoneOffset())}function ip(M,z,b){var p,A=this._offset||0;if(!this.isValid())return null!=M?this:NaN;if(null!=M){if("string"==typeof M){if(null===(M=np(NM,M)))return this}else Math.abs(M)<16&&!b&&(M*=60);return!this._isUTC&&z&&(p=Rp(this)),this._offset=M,this._isUTC=!0,null!=p&&this.add(p,"m"),A!==M&&(!z||this._changeInProgress?Cp(this,mp(M-A,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,O.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?A:Rp(this)}function rp(M,z){return null!=M?("string"!=typeof M&&(M=-M),this.utcOffset(M,z),this):-this.utcOffset()}function Lp(M){return this.utcOffset(0,M)}function fp(M){return this._isUTC&&(this.utcOffset(0,M),this._isUTC=!1,M&&this.subtract(Rp(this),"m")),this}function tp(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var M=np(sM,this._i);null!=M?this.utcOffset(M):this.utcOffset(0,!0)}return this}function up(M){return!!this.isValid()&&(M=M?Vb(M).utcOffset():0,(this.utcOffset()-M)%60==0)}function sp(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Np(){if(!d(this._isDSTShifted))return this._isDSTShifted;var M,z={};return N(z,this),(z=jb(z))._a?(M=z._isUTC?i(z._a):Vb(z._a),this._isDSTShifted=this.isValid()&&Wp(z._a,M.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function Bp(){return!!this.isValid()&&!this._isUTC}function Xp(){return!!this.isValid()&&this._isUTC}function lp(){return!!this.isValid()&&this._isUTC&&0===this._offset}O.updateOffset=function(){};var hp=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Tp=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function mp(M,z){var b,p,O,A=M,c=null;return op(M)?A={ms:M._milliseconds,d:M._days,M:M._months}:a(M)||!isNaN(+M)?(A={},z?A[z]=+M:A.milliseconds=+M):(c=hp.exec(M))?(b="-"===c[1]?-1:1,A={y:0,d:EM(c[UM])*b,h:EM(c[HM])*b,m:EM(c[xM])*b,s:EM(c[IM])*b,ms:EM(qp(1e3*c[YM]))*b}):(c=Tp.exec(M))?(b="-"===c[1]?-1:1,A={y:gp(c[2],b),M:gp(c[3],b),w:gp(c[4],b),d:gp(c[5],b),h:gp(c[6],b),m:gp(c[7],b),s:gp(c[8],b)}):null==A?A={}:"object"==typeof A&&("from"in A||"to"in A)&&(O=_p(Vb(A.from),Vb(A.to)),(A={}).ms=O.milliseconds,A.M=O.months),p=new cp(A),op(M)&&q(M,"_locale")&&(p._locale=M._locale),op(M)&&q(M,"_isValid")&&(p._isValid=M._isValid),p}function gp(M,z){var b=M&&parseFloat(M.replace(",","."));return(isNaN(b)?0:b)*z}function Sp(M,z){var b={};return b.months=z.month()-M.month()+12*(z.year()-M.year()),M.clone().add(b.months,"M").isAfter(z)&&--b.months,b.milliseconds=+z-+M.clone().add(b.months,"M"),b}function _p(M,z){var b;return M.isValid()&&z.isValid()?(z=ep(z,M),M.isBefore(z)?b=Sp(M,z):((b=Sp(z,M)).milliseconds=-b.milliseconds,b.months=-b.months),b):{milliseconds:0,months:0}}function Ep(M,z){return function(b,p){var O;return null===p||isNaN(+p)||(g(z,"moment()."+z+"(period, number) is deprecated. Please use moment()."+z+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),O=b,b=p,p=O),Cp(this,mp(b,p),M),this}}function Cp(M,z,b,p){var A=z._milliseconds,c=qp(z._days),o=qp(z._months);M.isValid()&&(p=null==p||p,o&&ez(M,ZM(M,"Month")+o*b),c&&$M(M,"Date",ZM(M,"Date")+c*b),A&&M._d.setTime(M._d.valueOf()+A*b),p&&O.updateOffset(M,c||o))}mp.fn=cp.prototype,mp.invalid=Ap;var yp=Ep(1,"add"),Dp=Ep(-1,"subtract");function wp(M){return"string"==typeof M||M instanceof String}function kp(M){return X(M)||n(M)||wp(M)||a(M)||Pp(M)||vp(M)||null==M}function vp(M){var z,b,p=o(M)&&!W(M),O=!1,A=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],c=A.length;for(z=0;z<c;z+=1)b=A[z],O=O||q(M,b);return p&&O}function Pp(M){var z=c(M),b=!1;return z&&(b=0===M.filter((function(z){return!a(z)&&wp(M)})).length),z&&b}function Up(M){var z,b,p=o(M)&&!W(M),O=!1,A=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(z=0;z<A.length;z+=1)b=A[z],O=O||q(M,b);return p&&O}function Hp(M,z){var b=M.diff(z,"days",!0);return b<-6?"sameElse":b<-1?"lastWeek":b<0?"lastDay":b<1?"sameDay":b<2?"nextDay":b<7?"nextWeek":"sameElse"}function xp(M,z){1===arguments.length&&(arguments[0]?kp(arguments[0])?(M=arguments[0],z=void 0):Up(arguments[0])&&(z=arguments[0],M=void 0):(M=void 0,z=void 0));var b=M||Vb(),p=ep(b,this).startOf("day"),A=O.calendarFormat(this,p)||"sameElse",c=z&&(S(z[A])?z[A].call(this,b):z[A]);return this.format(c||this.localeData().calendar(A,this,Vb(b)))}function Ip(){return new B(this)}function Yp(M,z){var b=X(M)?M:Vb(M);return!(!this.isValid()||!b.isValid())&&("millisecond"===(z=pM(z)||"millisecond")?this.valueOf()>b.valueOf():b.valueOf()<this.clone().startOf(z).valueOf())}function Gp(M,z){var b=X(M)?M:Vb(M);return!(!this.isValid()||!b.isValid())&&("millisecond"===(z=pM(z)||"millisecond")?this.valueOf()<b.valueOf():this.clone().endOf(z).valueOf()<b.valueOf())}function jp(M,z,b,p){var O=X(M)?M:Vb(M),A=X(z)?z:Vb(z);return!!(this.isValid()&&O.isValid()&&A.isValid())&&("("===(p=p||"()")[0]?this.isAfter(O,b):!this.isBefore(O,b))&&(")"===p[1]?this.isBefore(A,b):!this.isAfter(A,b))}function Fp(M,z){var b,p=X(M)?M:Vb(M);return!(!this.isValid()||!p.isValid())&&("millisecond"===(z=pM(z)||"millisecond")?this.valueOf()===p.valueOf():(b=p.valueOf(),this.clone().startOf(z).valueOf()<=b&&b<=this.clone().endOf(z).valueOf()))}function Kp(M,z){return this.isSame(M,z)||this.isAfter(M,z)}function Vp(M,z){return this.isSame(M,z)||this.isBefore(M,z)}function Qp(M,z,b){var p,O,A;if(!this.isValid())return NaN;if(!(p=ep(M,this)).isValid())return NaN;switch(O=6e4*(p.utcOffset()-this.utcOffset()),z=pM(z)){case"year":A=Jp(this,p)/12;break;case"month":A=Jp(this,p);break;case"quarter":A=Jp(this,p)/3;break;case"second":A=(this-p)/1e3;break;case"minute":A=(this-p)/6e4;break;case"hour":A=(this-p)/36e5;break;case"day":A=(this-p-O)/864e5;break;case"week":A=(this-p-O)/6048e5;break;default:A=this-p}return b?A:_M(A)}function Jp(M,z){if(M.date()<z.date())return-Jp(z,M);var b=12*(z.year()-M.year())+(z.month()-M.month()),p=M.clone().add(b,"months");return-(b+(z-p<0?(z-p)/(p-M.clone().add(b-1,"months")):(z-p)/(M.clone().add(b+1,"months")-p)))||0}function Zp(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function $p(M){if(!this.isValid())return null;var z=!0!==M,b=z?this.clone().utc():this;return b.year()<0||b.year()>9999?Y(b,z?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):S(Date.prototype.toISOString)?z?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",Y(b,"Z")):Y(b,z?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function MO(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var M,z,b,p,O="moment",A="";return this.isLocal()||(O=0===this.utcOffset()?"moment.utc":"moment.parseZone",A="Z"),M="["+O+'("]',z=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",b="-MM-DD[T]HH:mm:ss.SSS",p=A+'[")]',this.format(M+z+b+p)}function zO(M){M||(M=this.isUtc()?O.defaultFormatUtc:O.defaultFormat);var z=Y(this,M);return this.localeData().postformat(z)}function bO(M,z){return this.isValid()&&(X(M)&&M.isValid()||Vb(M).isValid())?mp({to:this,from:M}).locale(this.locale()).humanize(!z):this.localeData().invalidDate()}function pO(M){return this.from(Vb(),M)}function OO(M,z){return this.isValid()&&(X(M)&&M.isValid()||Vb(M).isValid())?mp({from:this,to:M}).locale(this.locale()).humanize(!z):this.localeData().invalidDate()}function AO(M){return this.to(Vb(),M)}function cO(M){var z;return void 0===M?this._locale._abbr:(null!=(z=fb(M))&&(this._locale=z),this)}O.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",O.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var oO=h("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(M){return void 0===M?this.localeData():this.locale(M)}));function qO(){return this._locale}var WO=1e3,dO=60*WO,aO=60*dO,nO=3506328*aO;function eO(M,z){return(M%z+z)%z}function RO(M,z,b){return M<100&&M>=0?new Date(M+400,z,b)-nO:new Date(M,z,b).valueOf()}function iO(M,z,b){return M<100&&M>=0?Date.UTC(M+400,z,b)-nO:Date.UTC(M,z,b)}function rO(M){var z,b;if(void 0===(M=pM(M))||"millisecond"===M||!this.isValid())return this;switch(b=this._isUTC?iO:RO,M){case"year":z=b(this.year(),0,1);break;case"quarter":z=b(this.year(),this.month()-this.month()%3,1);break;case"month":z=b(this.year(),this.month(),1);break;case"week":z=b(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":z=b(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":z=b(this.year(),this.month(),this.date());break;case"hour":z=this._d.valueOf(),z-=eO(z+(this._isUTC?0:this.utcOffset()*dO),aO);break;case"minute":z=this._d.valueOf(),z-=eO(z,dO);break;case"second":z=this._d.valueOf(),z-=eO(z,WO)}return this._d.setTime(z),O.updateOffset(this,!0),this}function LO(M){var z,b;if(void 0===(M=pM(M))||"millisecond"===M||!this.isValid())return this;switch(b=this._isUTC?iO:RO,M){case"year":z=b(this.year()+1,0,1)-1;break;case"quarter":z=b(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":z=b(this.year(),this.month()+1,1)-1;break;case"week":z=b(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":z=b(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":z=b(this.year(),this.month(),this.date()+1)-1;break;case"hour":z=this._d.valueOf(),z+=aO-eO(z+(this._isUTC?0:this.utcOffset()*dO),aO)-1;break;case"minute":z=this._d.valueOf(),z+=dO-eO(z,dO)-1;break;case"second":z=this._d.valueOf(),z+=WO-eO(z,WO)-1}return this._d.setTime(z),O.updateOffset(this,!0),this}function fO(){return this._d.valueOf()-6e4*(this._offset||0)}function tO(){return Math.floor(this.valueOf()/1e3)}function uO(){return new Date(this.valueOf())}function sO(){var M=this;return[M.year(),M.month(),M.date(),M.hour(),M.minute(),M.second(),M.millisecond()]}function NO(){var M=this;return{years:M.year(),months:M.month(),date:M.date(),hours:M.hours(),minutes:M.minutes(),seconds:M.seconds(),milliseconds:M.milliseconds()}}function BO(){return this.isValid()?this.toISOString():null}function XO(){return f(this)}function lO(){return R({},L(this))}function hO(){return L(this).overflow}function TO(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function mO(M,z){var b,p,A,c=this._eras||fb("en")._eras;for(b=0,p=c.length;b<p;++b)switch("string"==typeof c[b].since&&(A=O(c[b].since).startOf("day"),c[b].since=A.valueOf()),typeof c[b].until){case"undefined":c[b].until=1/0;break;case"string":A=O(c[b].until).startOf("day").valueOf(),c[b].until=A.valueOf()}return c}function gO(M,z,b){var p,O,A,c,o,q=this.eras();for(M=M.toUpperCase(),p=0,O=q.length;p<O;++p)if(A=q[p].name.toUpperCase(),c=q[p].abbr.toUpperCase(),o=q[p].narrow.toUpperCase(),b)switch(z){case"N":case"NN":case"NNN":if(c===M)return q[p];break;case"NNNN":if(A===M)return q[p];break;case"NNNNN":if(o===M)return q[p]}else if([A,c,o].indexOf(M)>=0)return q[p]}function SO(M,z){var b=M.since<=M.until?1:-1;return void 0===z?O(M.since).year():O(M.since).year()+(z-M.offset)*b}function _O(){var M,z,b,p=this.localeData().eras();for(M=0,z=p.length;M<z;++M){if(b=this.clone().startOf("day").valueOf(),p[M].since<=b&&b<=p[M].until)return p[M].name;if(p[M].until<=b&&b<=p[M].since)return p[M].name}return""}function EO(){var M,z,b,p=this.localeData().eras();for(M=0,z=p.length;M<z;++M){if(b=this.clone().startOf("day").valueOf(),p[M].since<=b&&b<=p[M].until)return p[M].narrow;if(p[M].until<=b&&b<=p[M].since)return p[M].narrow}return""}function CO(){var M,z,b,p=this.localeData().eras();for(M=0,z=p.length;M<z;++M){if(b=this.clone().startOf("day").valueOf(),p[M].since<=b&&b<=p[M].until)return p[M].abbr;if(p[M].until<=b&&b<=p[M].since)return p[M].abbr}return""}function yO(){var M,z,b,p,A=this.localeData().eras();for(M=0,z=A.length;M<z;++M)if(b=A[M].since<=A[M].until?1:-1,p=this.clone().startOf("day").valueOf(),A[M].since<=p&&p<=A[M].until||A[M].until<=p&&p<=A[M].since)return(this.year()-O(A[M].since).year())*b+A[M].offset;return this.year()}function DO(M){return q(this,"_erasNameRegex")||xO.call(this),M?this._erasNameRegex:this._erasRegex}function wO(M){return q(this,"_erasAbbrRegex")||xO.call(this),M?this._erasAbbrRegex:this._erasRegex}function kO(M){return q(this,"_erasNarrowRegex")||xO.call(this),M?this._erasNarrowRegex:this._erasRegex}function vO(M,z){return z.erasAbbrRegex(M)}function PO(M,z){return z.erasNameRegex(M)}function UO(M,z){return z.erasNarrowRegex(M)}function HO(M,z){return z._eraYearOrdinalRegex||tM}function xO(){var M,z,b,p,O,A=[],c=[],o=[],q=[],W=this.eras();for(M=0,z=W.length;M<z;++M)b=SM(W[M].name),p=SM(W[M].abbr),O=SM(W[M].narrow),c.push(b),A.push(p),o.push(O),q.push(b),q.push(p),q.push(O);this._erasRegex=new RegExp("^("+q.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+c.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+A.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+o.join("|")+")","i")}function IO(M,z){H(0,[M,M.length],0,z)}function YO(M){return QO.call(this,M,this.week(),this.weekday()+this.localeData()._week.dow,this.localeData()._week.dow,this.localeData()._week.doy)}function GO(M){return QO.call(this,M,this.isoWeek(),this.isoWeekday(),1,4)}function jO(){return Xz(this.year(),1,4)}function FO(){return Xz(this.isoWeekYear(),1,4)}function KO(){var M=this.localeData()._week;return Xz(this.year(),M.dow,M.doy)}function VO(){var M=this.localeData()._week;return Xz(this.weekYear(),M.dow,M.doy)}function QO(M,z,b,p,O){var A;return null==M?Bz(this,p,O).year:(z>(A=Xz(M,p,O))&&(z=A),JO.call(this,M,z,b,p,O))}function JO(M,z,b,p,O){var A=Nz(M,z,b,p,O),c=uz(A.year,0,A.dayOfYear);return this.year(c.getUTCFullYear()),this.month(c.getUTCMonth()),this.date(c.getUTCDate()),this}function ZO(M){return null==M?Math.ceil((this.month()+1)/3):this.month(3*(M-1)+this.month()%3)}H("N",0,0,"eraAbbr"),H("NN",0,0,"eraAbbr"),H("NNN",0,0,"eraAbbr"),H("NNNN",0,0,"eraName"),H("NNNNN",0,0,"eraNarrow"),H("y",["y",1],"yo","eraYear"),H("y",["yy",2],0,"eraYear"),H("y",["yyy",3],0,"eraYear"),H("y",["yyyy",4],0,"eraYear"),TM("N",vO),TM("NN",vO),TM("NNN",vO),TM("NNNN",PO),TM("NNNNN",UO),yM(["N","NN","NNN","NNNN","NNNNN"],(function(M,z,b,p){var O=b._locale.erasParse(M,p,b._strict);O?L(b).era=O:L(b).invalidEra=M})),TM("y",tM),TM("yy",tM),TM("yyy",tM),TM("yyyy",tM),TM("yo",HO),yM(["y","yy","yyy","yyyy"],vM),yM(["yo"],(function(M,z,b,p){var O;b._locale._eraYearOrdinalRegex&&(O=M.match(b._locale._eraYearOrdinalRegex)),b._locale.eraYearOrdinalParse?z[vM]=b._locale.eraYearOrdinalParse(M,O):z[vM]=parseInt(M,10)})),H(0,["gg",2],0,(function(){return this.weekYear()%100})),H(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),IO("gggg","weekYear"),IO("ggggg","weekYear"),IO("GGGG","isoWeekYear"),IO("GGGGG","isoWeekYear"),TM("G",uM),TM("g",uM),TM("GG",eM,WM),TM("gg",eM,WM),TM("GGGG",LM,aM),TM("gggg",LM,aM),TM("GGGGG",fM,nM),TM("ggggg",fM,nM),DM(["gggg","ggggg","GGGG","GGGGG"],(function(M,z,b,p){z[p.substr(0,2)]=EM(M)})),DM(["gg","GG"],(function(M,z,b,p){z[p]=O.parseTwoDigitYear(M)})),H("Q",0,"Qo","quarter"),TM("Q",qM),yM("Q",(function(M,z){z[PM]=3*(EM(M)-1)})),H("D",["DD",2],"Do","date"),TM("D",eM,lM),TM("DD",eM,WM),TM("Do",(function(M,z){return M?z._dayOfMonthOrdinalParse||z._ordinalParse:z._dayOfMonthOrdinalParseLenient})),yM(["D","DD"],UM),yM("Do",(function(M,z){z[UM]=EM(M.match(eM)[0])}));var $O=JM("Date",!0);function MA(M){var z=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==M?z:this.add(M-z,"d")}H("DDD",["DDDD",3],"DDDo","dayOfYear"),TM("DDD",rM),TM("DDDD",dM),yM(["DDD","DDDD"],(function(M,z,b){b._dayOfYear=EM(M)})),H("m",["mm",2],0,"minute"),TM("m",eM,hM),TM("mm",eM,WM),yM(["m","mm"],xM);var zA=JM("Minutes",!1);H("s",["ss",2],0,"second"),TM("s",eM,hM),TM("ss",eM,WM),yM(["s","ss"],IM);var bA,pA,OA=JM("Seconds",!1);for(H("S",0,0,(function(){return~~(this.millisecond()/100)})),H(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),H(0,["SSS",3],0,"millisecond"),H(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),H(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),H(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),H(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),H(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),H(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),TM("S",rM,qM),TM("SS",rM,WM),TM("SSS",rM,dM),bA="SSSS";bA.length<=9;bA+="S")TM(bA,tM);function AA(M,z){z[YM]=EM(1e3*("0."+M))}for(bA="S";bA.length<=9;bA+="S")yM(bA,AA);function cA(){return this._isUTC?"UTC":""}function oA(){return this._isUTC?"Coordinated Universal Time":""}pA=JM("Milliseconds",!1),H("z",0,0,"zoneAbbr"),H("zz",0,0,"zoneName");var qA=B.prototype;function WA(M){return Vb(1e3*M)}function dA(){return Vb.apply(null,arguments).parseZone()}function aA(M){return M}qA.add=yp,qA.calendar=xp,qA.clone=Ip,qA.diff=Qp,qA.endOf=LO,qA.format=zO,qA.from=bO,qA.fromNow=pO,qA.to=OO,qA.toNow=AO,qA.get=Mz,qA.invalidAt=hO,qA.isAfter=Yp,qA.isBefore=Gp,qA.isBetween=jp,qA.isSame=Fp,qA.isSameOrAfter=Kp,qA.isSameOrBefore=Vp,qA.isValid=XO,qA.lang=oO,qA.locale=cO,qA.localeData=qO,qA.max=Jb,qA.min=Qb,qA.parsingFlags=lO,qA.set=zz,qA.startOf=rO,qA.subtract=Dp,qA.toArray=sO,qA.toObject=NO,qA.toDate=uO,qA.toISOString=$p,qA.inspect=MO,"undefined"!=typeof Symbol&&null!=Symbol.for&&(qA[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),qA.toJSON=BO,qA.toString=Zp,qA.unix=tO,qA.valueOf=fO,qA.creationData=TO,qA.eraName=_O,qA.eraNarrow=EO,qA.eraAbbr=CO,qA.eraYear=yO,qA.year=VM,qA.isLeapYear=QM,qA.weekYear=YO,qA.isoWeekYear=GO,qA.quarter=qA.quarters=ZO,qA.month=Rz,qA.daysInMonth=iz,qA.week=qA.weeks=gz,qA.isoWeek=qA.isoWeeks=Sz,qA.weeksInYear=KO,qA.weeksInWeekYear=VO,qA.isoWeeksInYear=jO,qA.isoWeeksInISOWeekYear=FO,qA.date=$O,qA.day=qA.days=Gz,qA.weekday=jz,qA.isoWeekday=Fz,qA.dayOfYear=MA,qA.hour=qA.hours=Ob,qA.minute=qA.minutes=zA,qA.second=qA.seconds=OA,qA.millisecond=qA.milliseconds=pA,qA.utcOffset=ip,qA.utc=Lp,qA.local=fp,qA.parseZone=tp,qA.hasAlignedHourOffset=up,qA.isDST=sp,qA.isLocal=Bp,qA.isUtcOffset=Xp,qA.isUtc=lp,qA.isUTC=lp,qA.zoneAbbr=cA,qA.zoneName=oA,qA.dates=h("dates accessor is deprecated. Use date instead.",$O),qA.months=h("months accessor is deprecated. Use month instead",Rz),qA.years=h("years accessor is deprecated. Use year instead",VM),qA.zone=h("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",rp),qA.isDSTShifted=h("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Np);var nA=C.prototype;function eA(M,z,b,p){var O=fb(),A=i().set(p,z);return O[b](A,M)}function RA(M,z,b){if(a(M)&&(z=M,M=void 0),M=M||"",null!=z)return eA(M,z,b,"month");var p,O=[];for(p=0;p<12;p++)O[p]=eA(M,p,b,"month");return O}function iA(M,z,b,p){"boolean"==typeof M?(a(z)&&(b=z,z=void 0),z=z||""):(b=z=M,M=!1,a(z)&&(b=z,z=void 0),z=z||"");var O,A=fb(),c=M?A._week.dow:0,o=[];if(null!=b)return eA(z,(b+c)%7,p,"day");for(O=0;O<7;O++)o[O]=eA(z,(O+c)%7,p,"day");return o}function rA(M,z){return RA(M,z,"months")}function LA(M,z){return RA(M,z,"monthsShort")}function fA(M,z,b){return iA(M,z,b,"weekdays")}function tA(M,z,b){return iA(M,z,b,"weekdaysShort")}function uA(M,z,b){return iA(M,z,b,"weekdaysMin")}nA.calendar=D,nA.longDateFormat=F,nA.invalidDate=V,nA.ordinal=Z,nA.preparse=aA,nA.postformat=aA,nA.relativeTime=MM,nA.pastFuture=zM,nA.set=_,nA.eras=mO,nA.erasParse=gO,nA.erasConvertYear=SO,nA.erasAbbrRegex=wO,nA.erasNameRegex=DO,nA.erasNarrowRegex=kO,nA.months=Wz,nA.monthsShort=dz,nA.monthsParse=nz,nA.monthsRegex=Lz,nA.monthsShortRegex=rz,nA.week=lz,nA.firstDayOfYear=mz,nA.firstDayOfWeek=Tz,nA.weekdays=Uz,nA.weekdaysMin=xz,nA.weekdaysShort=Hz,nA.weekdaysParse=Yz,nA.weekdaysRegex=Kz,nA.weekdaysShortRegex=Vz,nA.weekdaysMinRegex=Qz,nA.isPM=bb,nA.meridiem=Ab,ib("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(M){var z=M%10;return M+(1===EM(M%100/10)?"th":1===z?"st":2===z?"nd":3===z?"rd":"th")}}),O.lang=h("moment.lang is deprecated. Use moment.locale instead.",ib),O.langData=h("moment.langData is deprecated. Use moment.localeData instead.",fb);var sA=Math.abs;function NA(){var M=this._data;return this._milliseconds=sA(this._milliseconds),this._days=sA(this._days),this._months=sA(this._months),M.milliseconds=sA(M.milliseconds),M.seconds=sA(M.seconds),M.minutes=sA(M.minutes),M.hours=sA(M.hours),M.months=sA(M.months),M.years=sA(M.years),this}function BA(M,z,b,p){var O=mp(z,b);return M._milliseconds+=p*O._milliseconds,M._days+=p*O._days,M._months+=p*O._months,M._bubble()}function XA(M,z){return BA(this,M,z,1)}function lA(M,z){return BA(this,M,z,-1)}function hA(M){return M<0?Math.floor(M):Math.ceil(M)}function TA(){var M,z,b,p,O,A=this._milliseconds,c=this._days,o=this._months,q=this._data;return A>=0&&c>=0&&o>=0||A<=0&&c<=0&&o<=0||(A+=864e5*hA(gA(o)+c),c=0,o=0),q.milliseconds=A%1e3,M=_M(A/1e3),q.seconds=M%60,z=_M(M/60),q.minutes=z%60,b=_M(z/60),q.hours=b%24,c+=_M(b/24),o+=O=_M(mA(c)),c-=hA(gA(O)),p=_M(o/12),o%=12,q.days=c,q.months=o,q.years=p,this}function mA(M){return 4800*M/146097}function gA(M){return 146097*M/4800}function SA(M){if(!this.isValid())return NaN;var z,b,p=this._milliseconds;if("month"===(M=pM(M))||"quarter"===M||"year"===M)switch(z=this._days+p/864e5,b=this._months+mA(z),M){case"month":return b;case"quarter":return b/3;case"year":return b/12}else switch(z=this._days+Math.round(gA(this._months)),M){case"week":return z/7+p/6048e5;case"day":return z+p/864e5;case"hour":return 24*z+p/36e5;case"minute":return 1440*z+p/6e4;case"second":return 86400*z+p/1e3;case"millisecond":return Math.floor(864e5*z)+p;default:throw new Error("Unknown unit "+M)}}function _A(M){return function(){return this.as(M)}}var EA=_A("ms"),CA=_A("s"),yA=_A("m"),DA=_A("h"),wA=_A("d"),kA=_A("w"),vA=_A("M"),PA=_A("Q"),UA=_A("y"),HA=EA;function xA(){return mp(this)}function IA(M){return M=pM(M),this.isValid()?this[M+"s"]():NaN}function YA(M){return function(){return this.isValid()?this._data[M]:NaN}}var GA=YA("milliseconds"),jA=YA("seconds"),FA=YA("minutes"),KA=YA("hours"),VA=YA("days"),QA=YA("months"),JA=YA("years");function ZA(){return _M(this.days()/7)}var $A=Math.round,Mc={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function zc(M,z,b,p,O){return O.relativeTime(z||1,!!b,M,p)}function bc(M,z,b,p){var O=mp(M).abs(),A=$A(O.as("s")),c=$A(O.as("m")),o=$A(O.as("h")),q=$A(O.as("d")),W=$A(O.as("M")),d=$A(O.as("w")),a=$A(O.as("y")),n=A<=b.ss&&["s",A]||A<b.s&&["ss",A]||c<=1&&["m"]||c<b.m&&["mm",c]||o<=1&&["h"]||o<b.h&&["hh",o]||q<=1&&["d"]||q<b.d&&["dd",q];return null!=b.w&&(n=n||d<=1&&["w"]||d<b.w&&["ww",d]),(n=n||W<=1&&["M"]||W<b.M&&["MM",W]||a<=1&&["y"]||["yy",a])[2]=z,n[3]=+M>0,n[4]=p,zc.apply(null,n)}function pc(M){return void 0===M?$A:"function"==typeof M&&($A=M,!0)}function Oc(M,z){return void 0!==Mc[M]&&(void 0===z?Mc[M]:(Mc[M]=z,"s"===M&&(Mc.ss=z-1),!0))}function Ac(M,z){if(!this.isValid())return this.localeData().invalidDate();var b,p,O=!1,A=Mc;return"object"==typeof M&&(z=M,M=!1),"boolean"==typeof M&&(O=M),"object"==typeof z&&(A=Object.assign({},Mc,z),null!=z.s&&null==z.ss&&(A.ss=z.s-1)),p=bc(this,!O,A,b=this.localeData()),O&&(p=b.pastFuture(+this,p)),b.postformat(p)}var cc=Math.abs;function oc(M){return(M>0)-(M<0)||+M}function qc(){if(!this.isValid())return this.localeData().invalidDate();var M,z,b,p,O,A,c,o,q=cc(this._milliseconds)/1e3,W=cc(this._days),d=cc(this._months),a=this.asSeconds();return a?(M=_M(q/60),z=_M(M/60),q%=60,M%=60,b=_M(d/12),d%=12,p=q?q.toFixed(3).replace(/\.?0+$/,""):"",O=a<0?"-":"",A=oc(this._months)!==oc(a)?"-":"",c=oc(this._days)!==oc(a)?"-":"",o=oc(this._milliseconds)!==oc(a)?"-":"",O+"P"+(b?A+b+"Y":"")+(d?A+d+"M":"")+(W?c+W+"D":"")+(z||M||q?"T":"")+(z?o+z+"H":"")+(M?o+M+"M":"")+(q?o+p+"S":"")):"P0D"}var Wc=cp.prototype;return Wc.isValid=Op,Wc.abs=NA,Wc.add=XA,Wc.subtract=lA,Wc.as=SA,Wc.asMilliseconds=EA,Wc.asSeconds=CA,Wc.asMinutes=yA,Wc.asHours=DA,Wc.asDays=wA,Wc.asWeeks=kA,Wc.asMonths=vA,Wc.asQuarters=PA,Wc.asYears=UA,Wc.valueOf=HA,Wc._bubble=TA,Wc.clone=xA,Wc.get=IA,Wc.milliseconds=GA,Wc.seconds=jA,Wc.minutes=FA,Wc.hours=KA,Wc.days=VA,Wc.weeks=ZA,Wc.months=QA,Wc.years=JA,Wc.humanize=Ac,Wc.toISOString=qc,Wc.toString=qc,Wc.toJSON=qc,Wc.locale=cO,Wc.localeData=qO,Wc.toIsoString=h("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",qc),Wc.lang=oO,H("X",0,0,"unix"),H("x",0,0,"valueOf"),TM("x",uM),TM("X",BM),yM("X",(function(M,z,b){b._d=new Date(1e3*parseFloat(M))})),yM("x",(function(M,z,b){b._d=new Date(EM(M))})),O.version="2.30.1",A(Vb),O.fn=qA,O.min=$b,O.max=Mp,O.now=zp,O.utc=i,O.unix=WA,O.months=rA,O.isDate=n,O.locale=ib,O.invalid=t,O.duration=mp,O.isMoment=X,O.weekdays=fA,O.parseZone=dA,O.localeData=fb,O.isDuration=op,O.monthsShort=LA,O.weekdaysMin=uA,O.defineLocale=rb,O.updateLocale=Lb,O.locales=tb,O.weekdaysShort=tA,O.normalizeUnits=pM,O.relativeTimeRounding=pc,O.relativeTimeThreshold=Oc,O.calendarFormat=Hp,O.prototype=qA,O.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},O}()},639:function(M,z,b){var p,O,A;!function(c,o){"use strict";M.exports?M.exports=o(b(93)):(O=[b(93)],void 0===(A="function"==typeof(p=o)?p.apply(z,O):p)||(M.exports=A))}(0,(function(M){"use strict";void 0===M.version&&M.default&&(M=M.default);var z,b={},p={},O={},A={},c={};M&&"string"==typeof M.version||g("Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/");var o=M.version.split("."),q=+o[0],W=+o[1];function d(M){return M>96?M-87:M>64?M-29:M-48}function a(M){var z=0,b=M.split("."),p=b[0],O=b[1]||"",A=1,c=0,o=1;for(45===M.charCodeAt(0)&&(z=1,o=-1);z<p.length;z++)c=60*c+d(p.charCodeAt(z));for(z=0;z<O.length;z++)A/=60,c+=d(O.charCodeAt(z))*A;return c*o}function n(M){for(var z=0;z<M.length;z++)M[z]=a(M[z])}function e(M,z){var b,p=[];for(b=0;b<z.length;b++)p[b]=M[z[b]];return p}function R(M){var z=M.split("|"),b=z[2].split(" "),p=z[3].split(""),O=z[4].split(" ");return n(b),n(p),n(O),function(M,z){for(var b=0;b<z;b++)M[b]=Math.round((M[b-1]||0)+6e4*M[b]);M[z-1]=1/0}(O,p.length),{name:z[0],abbrs:e(z[1].split(" "),p),offsets:e(b,p),untils:O,population:0|z[5]}}function i(M){M&&this._set(R(M))}function r(M,z){this.name=M,this.zones=z}function L(M){var z=M.toTimeString(),b=z.match(/\([a-z ]+\)/i);"GMT"===(b=b&&b[0]?(b=b[0].match(/[A-Z]/g))?b.join(""):void 0:(b=z.match(/[A-Z]{3,5}/g))?b[0]:void 0)&&(b=void 0),this.at=+M,this.abbr=b,this.offset=M.getTimezoneOffset()}function f(M){this.zone=M,this.offsetScore=0,this.abbrScore=0}function t(M,z){for(var b,p;p=6e4*((z.at-M.at)/12e4|0);)(b=new L(new Date(M.at+p))).offset===M.offset?M=b:z=b;return M}function u(M,z){return M.offsetScore!==z.offsetScore?M.offsetScore-z.offsetScore:M.abbrScore!==z.abbrScore?M.abbrScore-z.abbrScore:M.zone.population!==z.zone.population?z.zone.population-M.zone.population:z.zone.name.localeCompare(M.zone.name)}function s(M,z){var b,p;for(n(z),b=0;b<z.length;b++)p=z[b],c[p]=c[p]||{},c[p][M]=!0}function N(M){var z,b,p,O,o=M.length,q={},W=[],d={};for(z=0;z<o;z++)if(p=M[z].offset,!d.hasOwnProperty(p)){for(b in O=c[p]||{})O.hasOwnProperty(b)&&(q[b]=!0);d[p]=!0}for(z in q)q.hasOwnProperty(z)&&W.push(A[z]);return W}function B(){try{var M=Intl.DateTimeFormat().resolvedOptions().timeZone;if(M&&M.length>3){var z=A[X(M)];if(z)return z;g("Moment Timezone found "+M+" from the Intl api, but did not have that data loaded.")}}catch(M){}var b,p,O,c=function(){var M,z,b,p,O=(new Date).getFullYear()-2,A=new L(new Date(O,0,1)),c=A.offset,o=[A];for(p=1;p<48;p++)(b=new Date(O,p,1).getTimezoneOffset())!==c&&(M=t(A,z=new L(new Date(O,p,1))),o.push(M),o.push(new L(new Date(M.at+6e4))),A=z,c=b);for(p=0;p<4;p++)o.push(new L(new Date(O+p,0,1))),o.push(new L(new Date(O+p,6,1)));return o}(),o=c.length,q=N(c),W=[];for(p=0;p<q.length;p++){for(b=new f(h(q[p]),o),O=0;O<o;O++)b.scoreOffsetAt(c[O]);W.push(b)}return W.sort(u),W.length>0?W[0].zone.name:void 0}function X(M){return(M||"").toLowerCase().replace(/\//g,"_")}function l(M){var z,p,O,c;for("string"==typeof M&&(M=[M]),z=0;z<M.length;z++)c=X(p=(O=M[z].split("|"))[0]),b[c]=M[z],A[c]=p,s(c,O[2].split(" "))}function h(M,z){M=X(M);var O,c=b[M];return c instanceof i?c:"string"==typeof c?(c=new i(c),b[M]=c,c):p[M]&&z!==h&&(O=h(p[M],h))?((c=b[M]=new i)._set(O),c.name=A[M],c):null}function T(M){var z,b,O,c;for("string"==typeof M&&(M=[M]),z=0;z<M.length;z++)O=X((b=M[z].split("|"))[0]),c=X(b[1]),p[O]=c,A[O]=b[0],p[c]=O,A[c]=b[1]}function m(M){var z="X"===M._f||"x"===M._f;return!(!M._a||void 0!==M._tzm||z)}function g(M){"undefined"!=typeof console&&"function"==typeof console.error&&console.error(M)}function S(z){var b,p=Array.prototype.slice.call(arguments,0,-1),O=arguments[arguments.length-1],A=M.utc.apply(null,p);return!M.isMoment(z)&&m(A)&&(b=h(O))&&A.add(b.parse(A),"minutes"),A.tz(O),A}(q<2||2===q&&W<6)&&g("Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js "+M.version+". See momentjs.com"),i.prototype={_set:function(M){this.name=M.name,this.abbrs=M.abbrs,this.untils=M.untils,this.offsets=M.offsets,this.population=M.population},_index:function(M){var z;if((z=function(M,z){var b,p=z.length;if(M<z[0])return 0;if(p>1&&z[p-1]===1/0&&M>=z[p-2])return p-1;if(M>=z[p-1])return-1;for(var O=0,A=p-1;A-O>1;)z[b=Math.floor((O+A)/2)]<=M?O=b:A=b;return A}(+M,this.untils))>=0)return z},countries:function(){var M=this.name;return Object.keys(O).filter((function(z){return-1!==O[z].zones.indexOf(M)}))},parse:function(M){var z,b,p,O,A=+M,c=this.offsets,o=this.untils,q=o.length-1;for(O=0;O<q;O++)if(z=c[O],b=c[O+1],p=c[O?O-1:O],z<b&&S.moveAmbiguousForward?z=b:z>p&&S.moveInvalidForward&&(z=p),A<o[O]-6e4*z)return c[O];return c[q]},abbr:function(M){return this.abbrs[this._index(M)]},offset:function(M){return g("zone.offset has been deprecated in favor of zone.utcOffset"),this.offsets[this._index(M)]},utcOffset:function(M){return this.offsets[this._index(M)]}},f.prototype.scoreOffsetAt=function(M){this.offsetScore+=Math.abs(this.zone.utcOffset(M.at)-M.offset),this.zone.abbr(M.at).replace(/[^A-Z]/g,"")!==M.abbr&&this.abbrScore++},S.version="0.6.0",S.dataVersion="",S._zones=b,S._links=p,S._names=A,S._countries=O,S.add=l,S.link=T,S.load=function(M){l(M.zones),T(M.links),function(M){var z,b,p,A;if(M&&M.length)for(z=0;z<M.length;z++)b=(A=M[z].split("|"))[0].toUpperCase(),p=A[1].split(" "),O[b]=new r(b,p)}(M.countries),S.dataVersion=M.version},S.zone=h,S.zoneExists=function M(z){return M.didShowError||(M.didShowError=!0,g("moment.tz.zoneExists('"+z+"') has been deprecated in favor of !moment.tz.zone('"+z+"')")),!!h(z)},S.guess=function(M){return z&&!M||(z=B()),z},S.names=function(){var M,z=[];for(M in A)A.hasOwnProperty(M)&&(b[M]||b[p[M]])&&A[M]&&z.push(A[M]);return z.sort()},S.Zone=i,S.unpack=R,S.unpackBase60=a,S.needsOffset=m,S.moveInvalidForward=!0,S.moveAmbiguousForward=!1,S.countries=function(){return Object.keys(O)},S.zonesForCountry=function(M,z){var b;if(b=(b=M).toUpperCase(),!(M=O[b]||null))return null;var p=M.zones.sort();return z?p.map((function(M){return{name:M,offset:h(M).utcOffset(new Date)}})):p};var _,E=M.fn;function C(M){return function(){return this._z?this._z.abbr(this):M.call(this)}}function y(M){return function(){return this._z=null,M.apply(this,arguments)}}M.tz=S,M.defaultZone=null,M.updateOffset=function(z,b){var p,O=M.defaultZone;if(void 0===z._z&&(O&&m(z)&&!z._isUTC&&z.isValid()&&(z._d=M.utc(z._a)._d,z.utc().add(O.parse(z),"minutes")),z._z=O),z._z)if(p=z._z.utcOffset(z),Math.abs(p)<16&&(p/=60),void 0!==z.utcOffset){var A=z._z;z.utcOffset(-p,b),z._z=A}else z.zone(p,b)},E.tz=function(z,b){if(z){if("string"!=typeof z)throw new Error("Time zone name must be a string, got "+z+" ["+typeof z+"]");return this._z=h(z),this._z?M.updateOffset(this,b):g("Moment Timezone has no data for "+z+". See http://momentjs.com/timezone/docs/#/data-loading/."),this}if(this._z)return this._z.name},E.zoneName=C(E.zoneName),E.zoneAbbr=C(E.zoneAbbr),E.utc=y(E.utc),E.local=y(E.local),E.utcOffset=(_=E.utcOffset,function(){return arguments.length>0&&(this._z=null),_.apply(this,arguments)}),M.tz.setDefault=function(z){return(q<2||2===q&&W<9)&&g("Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js "+M.version+"."),M.defaultZone=z?h(z):null,M};var D=M.momentProperties;return"[object Array]"===Object.prototype.toString.call(D)?(D.push("_z"),D.push("_a")):D&&(D._z=null),M}))},681:M=>{"use strict";M.exports=JSON.parse('{"version":"2025b","zones":["Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5","Africa/Nairobi|LMT +0230 EAT +0245|-2r.g -2u -30 -2J|012132|-2ua2r.g N6nV.g 3Fbu h1cu dzbJ|47e5","Africa/Algiers|LMT PMT WET WEST CET CEST|-c.c -9.l 0 -10 -10 -20|01232323232323232454542423234542324|-3bQ0c.c MDA2.P cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5","Africa/Lagos|LMT GMT +0030 WAT|-d.z 0 -u -10|01023|-2B40d.z 7iod.z dnXK.p dLzH.z|17e6","Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4","Africa/Maputo|LMT CAT|-2a.i -20|01|-2sw2a.i|26e5","Africa/Cairo|LMT EET EEST|-25.9 -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBC5.9 1AQM5.9 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0 kSp0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0|15e6","Africa/Casablanca|LMT +00 +01|u.k 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|32e5","Africa/Ceuta|LMT WET WEST CET CEST|l.g 0 -10 -10 -20|0121212121212121212121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2M0M0 GdX0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|85e3","Africa/El_Aaiun|LMT -01 +00 +01|Q.M 10 0 -10|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|20e4","Africa/Johannesburg|LMT SAST SAST SAST|-1Q -1u -20 -30|0123232|-39EpQ qTcm 1Ajdu 1cL0 1cN0 1cL0|84e5","Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|012121212121212121212121212121212131|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 PeX0|","Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5","Africa/Monrovia|LMT MMT MMT GMT|H.8 H.8 I.u 0|0123|-3ygng.Q 1usM0 28G01.m|11e5","Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5","Africa/Sao_Tome|LMT LMT GMT WAT|-q.U A.J 0 -10|01232|-3tooq.U 18aoq.U 4i6N0 2q00|","Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5","Africa/Tunis|LMT PMT CET CEST|-E.I -9.l -10 -20|01232323232323232323232323232323232|-3zO0E.I 1cBAv.n 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5","Africa/Windhoek|LMT +0130 SAST SAST CAT WAT|-18.o -1u -20 -30 -20 -10|012324545454545454545454545454545454545454545454545454|-39Ep8.o qTbC.o 1Ajdu 1cL0 1SqL0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4","America/Adak|LMT LMT NST NWT NPT BST BDT AHST HST HDT|-cd.m bK.C b0 a0 a0 b0 a0 a0 a0 90|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVzf.p 1EX1d.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326","America/Anchorage|LMT LMT AST AWT APT AHST AHDT YST AKST AKDT|-e0.o 9X.A a0 90 90 a0 90 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVxs.n 1EX20.o 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4","America/Puerto_Rico|LMT AST AWT APT|4o.p 40 30 30|01231|-2Qi7z.z 1IUbz.z 7XT0 iu0|24e5","America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4","America/Argentina/Buenos_Aires|LMT CMT -04 -03 -02|3R.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343434343|-331U6.c 125cn pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0|","America/Argentina/Catamarca|LMT CMT -04 -03 -02|4n.8 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243432343|-331TA.Q 125bR.E pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Cordoba|LMT CMT -04 -03 -02|4g.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243434343|-331TH.c 125c0 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0|","America/Argentina/Jujuy|LMT CMT -04 -03 -02|4l.c 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232434343|-331TC.M 125bT.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0|","America/Argentina/La_Rioja|LMT CMT -04 -03 -02|4r.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tw.A 125bN.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Mendoza|LMT CMT -04 -03 -02|4z.g 4g.M 40 30 20|012323232323232323232323232323232323232323234343423232432343|-331To.I 125bF.w pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0|","America/Argentina/Rio_Gallegos|LMT CMT -04 -03 -02|4A.Q 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tn.8 125bD.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Salta|LMT CMT -04 -03 -02|4l.E 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342434343|-331TC.k 125bT.8 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0|","America/Argentina/San_Juan|LMT CMT -04 -03 -02|4y.4 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tp.U 125bG.I pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0|","America/Argentina/San_Luis|LMT CMT -04 -03 -02|4p.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232323432323|-331Ty.A 125bP.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0|","America/Argentina/Tucuman|LMT CMT -04 -03 -02|4k.Q 4g.M 40 30 20|01232323232323232323232323232323232323232323434343424343234343|-331TD.8 125bT.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0|","America/Argentina/Ushuaia|LMT CMT -04 -03 -02|4x.c 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tq.M 125bH.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0|","America/Asuncion|LMT AMT -04 -03|3O.E 3O.E 40 30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-3eLw9.k 1FGo0 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0|28e5","America/Panama|LMT CMT EST|5i.8 5j.A 50|012|-3eLuF.Q Iy01.s|15e5","America/Bahia_Banderas|LMT MST CST MDT CDT|71 70 60 60 50|01213121313131313131313131313131313142424242424242424242424242|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 otX0 2bmP0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|84e3","America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5","America/Barbados|LMT AST ADT -0330|3W.t 40 30 3u|0121213121212121|-2m4k1.v 1eAN1.v RB0 1Bz0 Op0 1rb0 11d0 1jJc0 IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4","America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5","America/Belize|LMT CST -0530 CWT CPT CDT|5Q.M 60 5u 50 50 50|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121215151|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu Rcu 7Bt0 Ni0 4nd0 Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu e9Au qn0 lxB0 mn0|57e3","America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2","America/Bogota|LMT BMT -05 -04|4U.g 4U.g 50 40|01232|-3sTv3.I 1eIo0 38yo3.I 1PX0|90e5","America/Boise|LMT PST PDT MST MWT MPT MDT|7I.N 80 70 70 60 60 60|01212134536363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-3tFE0 1nEe0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4","America/Cambridge_Bay|-00 MST MWT MPT MDT CST CDT EST|0 70 60 60 60 60 50 50|012314141414141414141414141414141414141414141414141414141414567541414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-21Jc0 RO90 8x20 ix0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2","America/Campo_Grande|LMT -04 -03|3C.s 40 30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4","America/Cancun|LMT CST EST CDT EDT|5L.4 60 50 50 40|01213132431313131313131313131313131313131312|-1UQG0 2q3C0 2tx0 wgP0 1lb0 14p0 1lb0 14o0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4","America/Caracas|LMT CMT -0430 -04|4r.I 4r.E 4u 40|012323|-3eLvw.g ROnX.U 28KM2.k 1IwOu kqo0|29e5","America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3","America/Chicago|LMT CST CDT EST CWT CPT|5O.A 60 50 50 50 50|012121212121212121212121212121212121213121212121214512121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5","America/Chihuahua|LMT MST CST MDT CDT|74.k 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4","America/Ciudad_Juarez|LMT MST CST MDT CDT|75.U 70 60 60 50|01213124242313131313131313131313131313131313131313131313131321313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 cm0 EP0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Costa_Rica|LMT SJMT CST CDT|5A.d 5A.d 60 50|01232323232|-3eLun.L 1fyo0 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5","America/Coyhaique|LMT SMT -05 -04 -03|4M.g 4G.J 50 40 30|012131323232323232323434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvb.I MJbS.t fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0|","America/Phoenix|LMT MST MDT MWT|7s.i 70 60 60|012121313121|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5","America/Cuiaba|LMT -04 -03|3I.k 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|54e4","America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8","America/Dawson_Creek|LMT PST PDT PWT PPT MST|80.U 80 70 70 70 70|01213412121212121212121212121212121212121212121212121212125|-3tofX.4 1nspX.4 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3","America/Dawson|LMT YST YDT YWT YPT YDDT PST PDT MST|9h.E 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeG.k GWpG.k 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|13e2","America/Denver|LMT MST MDT MWT MPT|6X.U 70 60 60 60|012121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFF0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5","America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|0123425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 JxX1 SMX 1cN0 1cL0 aW10 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5","America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|0121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 XQp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5","America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3","America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5","America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 4Q00 8mp0 8lz0 SN0 1cL0 pHB0 83r0 AU0 5MN0 1Rz0 38N0 Wn0 1qP0 11z0 1o10 11z0 3NA0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5","America/Fort_Nelson|LMT PST PDT PWT PPT MST|8a.L 80 70 70 70 70|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121215|-3tofN.d 1nspN.d 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2","America/Fort_Wayne|LMT CST CDT CWT CPT EST EDT|5I.C 60 50 50 50 50 40|0121212134121212121212121212151565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5","America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3","America/Godthab|LMT -03 -02 -01|3q.U 30 20 10|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 2so0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e3","America/Goose_Bay|LMT NST NDT NST NDT NWT NPT AST ADT ADDT|41.E 3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|0121343434343434356343434343434343434343434343434343434343437878787878787878787878787878787878787878787879787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-3tojW.k 1nspt.c 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2","America/Grand_Turk|LMT KMT EST EDT AST|4I.w 57.a 50 40 40|01232323232323232323232323232323232323232323232323232323232323232323232323243232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLvf.s RK0m.C 2HHBQ.O 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 7jA0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2","America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5","America/Guayaquil|LMT QMT -05 -04|5j.k 5e 50 40|01232|-3eLuE.E 1DNzS.E 2uILK rz0|27e5","America/Guyana|LMT -04 -0345 -03|3Q.D 40 3J 30|01231|-2mf87.l 8Hc7.l 2r7bJ Ey0f|80e4","America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4","America/Havana|LMT HMT CST CDT|5t.s 5t.A 50 40|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLuu.w 1qx00.8 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5","America/Hermosillo|LMT MST CST MDT|7n.Q 70 60 60|01213121313131|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 otX0 2bmP0 1lb0 14p0 1lb0 14p0 1lb0|64e4","America/Indiana/Knox|LMT CST CDT CWT CPT EST|5K.u 60 50 50 50 50|01212134121212121212121212121212121212151212121212121212121212121212121212121212121212121252121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Marengo|LMT CST CDT CWT CPT EST EDT|5J.n 60 50 50 50 50 40|01212134121212121212121215656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Petersburg|LMT CST CDT CWT CPT EST EDT|5N.7 60 50 50 50 50 40|012121341212121212121212121215121212121212121212121252125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Tell_City|LMT CST CDT CWT CPT EST EDT|5L.3 60 50 50 50 50 40|012121341212121212121212121512165652121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 8wn0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Vevay|LMT CST CDT CWT CPT EST EDT|5E.g 60 50 50 50 50 40|0121213415656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Vincennes|LMT CST CDT CWT CPT EST EDT|5O.7 60 50 50 50 50 40|012121341212121212121212121212121565652125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Winamac|LMT CST CDT CWT CPT EST EDT|5K.p 60 50 50 50 50 40|012121341212121212121212121212121212121565652165656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Inuvik|-00 PST PDT MDT MST|0 80 70 60 70|01212121212121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-FnA0 L3K0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2","America/Iqaluit|-00 EWT EPT EST EDT CST CDT|0 40 40 50 40 60 50|0123434343434343434343434343434343434343434343434343434343456343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-16K00 7nX0 iv0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2","America/Jamaica|LMT KMT EST EDT|57.a 57.a 50 40|01232323232323232323232|-3eLuQ.O RK00 2uM1Q.O 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4","America/Juneau|LMT LMT PST PWT PPT PDT YDT YST AKST AKDT|-f2.j 8V.F 80 70 70 70 80 90 90 80|0123425252525252525252525252625252578989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVwq.s 1EX12.j 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3","America/Kentucky/Louisville|LMT CST CDT CWT CPT EST EDT|5H.2 60 50 50 50 50 40|01212121213412121212121212121212121212565656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 1nX1 e0X 9vd0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Kentucky/Monticello|LMT CST CDT CWT CPT EST EDT|5D.o 60 50 50 50 50 40|01212134121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/La_Paz|LMT CMT BST -04|4w.A 4w.A 3w.A 40|0123|-3eLvr.o 1FIo0 13b0|19e5","America/Lima|LMT LMT -05 -04|58.c 58.A 50 40|01232323232323232|-3eLuP.M JcM0.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6","America/Los_Angeles|LMT PST PDT PWT PPT|7Q.W 80 70 70 70|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFE0 1nEe0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6","America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4","America/Managua|LMT MMT CST EST CDT|5J.8 5J.c 60 50 50|01232424232324242|-3eLue.Q 1Mhc0.4 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5","America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5","America/Martinique|LMT FFMT AST ADT|44.k 44.k 40 30|01232|-3eLvT.E PTA0 2LPbT.E 19X0|39e4","America/Matamoros|LMT CST CDT|6u 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4","America/Mazatlan|LMT MST CST MDT|75.E 70 60 60|01213121313131313131313131313131313131313131313131313131313131|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 otX0 2bmP0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|44e4","America/Menominee|LMT CST CDT CWT CPT EST|5O.r 60 50 50 50 50|012121341212152121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3pdG9.x 1jce9.x 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2","America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131|-1UQG0 2q3C0 24n0 wG10 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|11e5","America/Metlakatla|LMT LMT PST PWT PPT PDT AKST AKDT|-fd.G 8K.i 80 70 70 70 90 80|0123425252525252525252525252525252526767672676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwf.5 1EX1d.G 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2","America/Mexico_City|LMT MST CST MDT CDT CWT|6A.A 70 60 60 50 50|012131242425242424242424242424242424242424242424242424242424242424242|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6","America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mxUf.k 2LHcf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2","America/Moncton|LMT EST AST ADT AWT APT|4j.8 50 40 30 30 30|0123232323232323232323245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3txvE.Q J4ME.Q CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3","America/Monterrey|LMT MST CST MDT CDT|6F.g 70 60 60 50|012131242424242424242424242424242424242424242424242424242424242|-1UQG0 dep0 8lz0 16p0 11z0 1dd0 2gmp0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|41e5","America/Montevideo|LMT MMT -04 -03 -0330 -0230 -02 -0130|3I.P 3I.P 40 30 3u 2u 20 1u|012343434343434343434343435353636353636375363636363636363636363636363636363636363636363|-2tRUf.9 sVc0 8jcf.9 1db0 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1fAu 1cLu 1o0u 11zu NAu 3jXu zXu Dq0u 19Xu pcu jz0 cm10 19X0 6tB0 1fbu 3o0u jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5","America/Toronto|LMT EST EDT EWT EPT|5h.w 50 40 40 40|012121212121212121212121212121212121212121212123412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-32B6G.s UFdG.s 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1qL0 11B0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5","America/New_York|LMT EST EDT EWT EPT|4U.2 50 40 40 40|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFH0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6","America/Nome|LMT LMT NST NWT NPT BST BDT YST AKST AKDT|-cW.m b1.C b0 a0 a0 b0 a0 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVyu.p 1EX1W.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2","America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2","America/North_Dakota/Beulah|LMT MST MDT MWT MPT CST CDT|6L.7 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/North_Dakota/Center|LMT MST MDT MWT MPT CST CDT|6J.c 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/North_Dakota/New_Salem|LMT MST MDT MWT MPT CST CDT|6J.D 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Ojinaga|LMT MST CST MDT CDT|6V.E 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 Rc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3","America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4","America/Port-au-Prince|LMT PPMT EST EDT|4N.k 4N 50 40|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLva.E 15RLX.E 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4","America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4","America/Punta_Arenas|LMT SMT -05 -04 -03|4H.E 4G.J 50 40 30|01213132323232323232343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvg.k MJbX.5 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|","America/Winnipeg|LMT CST CDT CWT CPT|6s.A 60 50 50 50|0121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3kLtv.o 1a3bv.o WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4","America/Rankin_Inlet|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-vDc0 Bjk0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2","America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5","America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4","America/Resolute|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-SnA0 103I0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229","America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4","America/Santiago|LMT SMT -05 -04 -03|4G.J 4G.J 50 40 30|0121313232323232323432343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvh.f MJc0 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 hX0 1q10 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|62e5","America/Santo_Domingo|LMT SDMT EST EDT -0430 AST|4D.A 4E 50 40 4u 40|012324242424242525|-3eLvk.o 1Jic0.o 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5","America/Sao_Paulo|LMT -03 -02|36.s 30 20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6","America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|012132323232323232323232323232323232323232323232323232323232323232323232323232323232323232121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 2pA0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|452","America/Sitka|LMT LMT PST PWT PPT PDT YST AKST AKDT|-eW.L 91.d 80 70 70 70 90 90 80|0123425252525252525252525252525252567878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-48Pzs.L 1jVwu 1EX0W.L 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2","America/St_Johns|LMT NST NDT NST NDT NWT NPT NDDT|3u.Q 3u.Q 2u.Q 3u 2u 2u 2u 1u|012121212121212121212121212121212121213434343434343435634343434343434343434343434343434343434343434343434343434343434343434343434343434343437343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tokt.8 1l020 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4","America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3","America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5","America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656","America/Vancouver|LMT PST PDT PWT PPT|8c.s 80 70 70 70|01213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tofL.w 1nspL.w 1in0 UGp0 8x10 iy0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Whitehorse|LMT YST YDT YWT YPT YDDT PST PDT MST|90.c 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeX.M GWpX.M 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 LA0 ytd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|23e3","America/Yakutat|LMT LMT YST YWT YPT YDT AKST AKDT|-eF.5 9i.T 90 80 80 80 90 80|0123425252525252525252525252525252526767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwL.G 1EX1F.5 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642","Antarctica/Casey|-00 +08 +11|0 -80 -b0|012121212121212121|-2q00 1DjS0 T90 40P0 KL0 blz0 3m10 1o30 14k0 1kr0 12l0 1o01 14kX 1lf1 14kX 1lf1 13bX|10","Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70","Pacific/Port_Moresby|LMT PMMT +10|-9M.E -9M.w -a0|012|-3D8VM.E AvA0.8|25e4","Antarctica/Macquarie|-00 AEST AEDT|0 -a0 -b0|0121012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2OPc0 Fb40 1a00 4SK0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 3Co0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|1","Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60","Pacific/Auckland|LMT NZMT NZST NZST NZDT|-bD.4 -bu -cu -c0 -d0|012131313131313131313131313134343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-46jLD.4 2nEO9.4 Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5","Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|0121212121213121212121212121212121212121212121212121212121212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40","Antarctica/Rothera|-00 -03|0 30|01|gOo0|130","Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5","Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|40","Antarctica/Vostok|-00 +07 +05|0 -70 -50|01012|-tjA0 1rWh0 1Nj0 1aTv0|25","Europe/Berlin|LMT CET CEST CEMT|-R.s -10 -20 -30|012121212121212321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36RcR.s UbWR.s 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e5","Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|0123232323232323232323212323232323232323232323232321|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 L4m0|15e5","Asia/Amman|LMT EET EEST +03|-2n.I -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 LA0 1C00|25e5","Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3","Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4","Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4","Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4","Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|","Asia/Baghdad|LMT BMT +03 +04|-2V.E -2V.A -30 -40|0123232323232323232323232323232323232323232323232323232|-3eLCV.E 18ao0.4 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5","Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4","Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Asia/Bangkok|LMT BMT +07|-6G.4 -6G.4 -70|012|-3D8SG.4 1C000|15e6","Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|","Asia/Beirut|LMT EET EEST|-2m -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3D8Om 1BWom 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|22e5","Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4","Asia/Brunei|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|42e4","Asia/Kolkata|LMT HMT MMT IST +0630|-5R.s -5R.k -5l.a -5u -6u|01234343|-4Fg5R.s BKo0.8 1rDcw.a 1r2LP.a 1un0 HB0 7zX0|15e6","Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4","Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5","Asia/Shanghai|LMT CST CDT|-85.H -80 -90|012121212121212121212121212121|-2M0U5.H Iuo5.H 18n0 OjB0 Rz0 11d0 1wL0 A10 8HX0 1G10 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 aL0 1tU30 Rb0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6","Asia/Colombo|LMT MMT +0530 +06 +0630|-5j.o -5j.w -5u -60 -6u|012342432|-3D8Rj.o 13inX.Q 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5","Asia/Dhaka|LMT HMT +0630 +0530 +06 +07|-61.E -5R.k -6u -5u -60 -70|01232454|-3eLG1.E 26008.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6","Asia/Damascus|LMT EET EEST +03|-2p.c -20 -30 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5","Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le80 1dnX0 1nfA0 Xld0|19e4","Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5","Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4","Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|","Asia/Gaza|LMT EET EEST IST IDT|-2h.Q -20 -30 -20 -30|0121212121212121212121212121212121234343434343434343434343434343431212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCh.Q 1Azeh.Q MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 1cN0 1cL0 1a10 1fz0 17d0 1in0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1lb0 14p0 1in0 17d0 1cL0 1cN0 19X0 1fB0 14n0 jB0 2L0 11B0 WL0 gN0 8n0 11B0 TX0 gN0 bb0 11B0 On0 jB0 dX0 11B0 Lz0 gN0 mn0 WN0 IL0 gN0 pb0 WN0 Db0 jB0 rX0 11B0 xz0 gN0 xz0 11B0 rX0 jB0 An0 11B0 pb0 gN0 IL0 WN0 mn0 gN0 Lz0 WN0 gL0 jB0 On0 11B0 bb0 gN0 TX0 11B0 5z0 jB0 WL0 11B0 2L0 jB0 11z0 1ip0 19X0 1cN0 1cL0 17d0 1in0 14p0 1lb0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1nX0 14p0 1in0 17d0 1fz0 1a10 19X0 1fB0 17b0 gN0 2L0 WN0 14n0 gN0 5z0 WN0 WL0 jB0 8n0 11B0 Rb0 gN0 dX0 11B0 Lz0 jB0 gL0 11B0 IL0 jB0 mn0 WN0 FX0 gN0 rX0 WN0 An0 jB0 uL0 11B0 uL0 gN0 An0 11B0 rX0 gN0 Db0 11B0 mn0 jB0 FX0 11B0 jz0 gN0 On0 WN0 dX0 jB0 Rb0 WN0 bb0 jB0 TX0 11B0 5z0 gN0 11z0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|18e5","Asia/Hebron|LMT EET EEST IST IDT|-2k.n -20 -30 -20 -30|012121212121212121212121212121212123434343434343434343434343434343121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCk.n 1Azek.n MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 1cN0 1cL0 1a10 1fz0 17d0 1in0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1lb0 14p0 1in0 17d0 1cL0 1cN0 19X0 1fB0 14n0 jB0 2L0 11B0 WL0 gN0 8n0 11B0 TX0 gN0 bb0 11B0 On0 jB0 dX0 11B0 Lz0 gN0 mn0 WN0 IL0 gN0 pb0 WN0 Db0 jB0 rX0 11B0 xz0 gN0 xz0 11B0 rX0 jB0 An0 11B0 pb0 gN0 IL0 WN0 mn0 gN0 Lz0 WN0 gL0 jB0 On0 11B0 bb0 gN0 TX0 11B0 5z0 jB0 WL0 11B0 2L0 jB0 11z0 1ip0 19X0 1cN0 1cL0 17d0 1in0 14p0 1lb0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1nX0 14p0 1in0 17d0 1fz0 1a10 19X0 1fB0 17b0 gN0 2L0 WN0 14n0 gN0 5z0 WN0 WL0 jB0 8n0 11B0 Rb0 gN0 dX0 11B0 Lz0 jB0 gL0 11B0 IL0 jB0 mn0 WN0 FX0 gN0 rX0 WN0 An0 jB0 uL0 11B0 uL0 gN0 An0 11B0 rX0 gN0 Db0 11B0 mn0 jB0 FX0 11B0 jz0 gN0 On0 WN0 dX0 jB0 Rb0 WN0 bb0 jB0 TX0 11B0 5z0 gN0 11z0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|25e4","Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.u -76.u -70 -80 -90|0123423232|-2yC76.u bK00 1h7b6.u 5lz0 18o0 3Oq0 k5c0 aVX0 BAM0|90e5","Asia/Hong_Kong|LMT HKT HKST HKWT JST|-7A.G -80 -90 -8u -90|0123412121212121212121212121212121212121212121212121212121212121212121|-2CFH0 1taO0 Hc0 xUu 9tBu 11z0 1tDu Rc0 1wo0 11A0 1cM0 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5","Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|LMT IMT +07 +08 +09|-6V.5 -6V.5 -70 -80 -90|012343434343434343434343234343434343434343434343434343434343434343|-3D8SV.5 1Bxc0 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Europe/Istanbul|LMT IMT EET EEST +03 +04|-1T.Q -1U.U -20 -30 -30 -40|01232323232323232323232323232323232323232323232345423232323232323232323232323232323232323232323232323232323232323234|-3D8NT.Q 1ePXW.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSN0 CL0 mp0 1Vz0 1gN0 8yn0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1ip0 19X0 1ip0 17b0 qdB0 38L0 1jd0 Tz0 l6O0 11A0 WN0 1qL0 TB0 1tX0 U10 1tz0 11B0 1in0 17d0 z90 cne0 pb0 2Cp0 1800 14o0 1dc0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|LMT BMT +0720 +0730 +09 +08 WIB|-77.c -77.c -7k -7u -90 -80 -70|012343536|-49jH7.c 2hiLL.c luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6","Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4","Asia/Jerusalem|LMT JMT IST IDT IDDT|-2k.S -2k.E -20 -30 -40|012323232323232432323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8Ok.S 1wvA0.e SyOk.E MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 3LA0 Eo0 oo0 1co0 1dA0 16o0 10M0 1jc0 1tA0 14o0 1cM0 1a00 11A0 1Nc0 Ao0 1Nc0 Ao0 1Ko0 LA0 1o00 WM0 EQK0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0|81e4","Asia/Kabul|LMT +04 +0430|-4A.M -40 -4u|012|-3eLEA.M 2dTcA.M|46e5","Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4","Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6","Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5","Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5","Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2","Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5","Asia/Kuala_Lumpur|LMT SMT +07 +0720 +0730 +09 +08|-6T.p -6T.p -70 -7k -7u -90 -80|01234546|-2M0ST.p aIM0 17anT.p l5XE 17bO 8Fyu 1so10|71e5","Asia/Macau|LMT CST +09 +10 CDT|-7y.a -80 -90 -a0 -90|012323214141414141414141414141414141414141414141414141414141414141414141|-2CFHy.a 1uqKy.a PX0 1kn0 15B0 11b0 4Qq0 1oM0 11c0 1ko0 1u00 11A0 1cM0 11c0 1o00 11A0 1o00 11A0 1oo0 1400 1o00 11A0 1o00 U00 1tA0 U00 1wo0 Rc0 1wru U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cK0 1cO0 1cK0 1cO0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|57e4","Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3","Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5","Asia/Manila|LMT LMT PST PDT JST|fU.8 -83.Q -80 -90 -90|012323432323232|-54m83.Q 2d8A3.Q 1urM0 un0 bW10 nb0 7qo0 1MM0 klB0 lz0 TwN0 1bb0 uNB0 rz0|24e6","Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|32e4","Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4","Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5","Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5","Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4","Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4","Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|012313|-2um8n 97XR 1lTzu 2Onc0 6BA0|29e5","Asia/Qostanay|LMT +04 +05 +06|-4e.s -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc4e.s eUoe.s 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 Mv90|","Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|01232323232323232323232323232323232323232323232|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 zQl0|73e4","Asia/Rangoon|LMT RMT +0630 +09|-6o.L -6o.L -6u -90|01232|-3D8So.L 1BnA0 SmnS.L 7j9u|48e5","Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4","Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4","Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -a0 -9u|012343434343151515151515134343|-2um8r.Q 97XV.Q 1m1zu 6CM0 Fz0 1kN0 14n0 1kN0 14L0 1zd0 On0 69B0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6","Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2","Asia/Taipei|LMT CST JST CDT|-86 -80 -90 -90|012131313131313131313131313131313131313131|-30bk6 1FDc6 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5","Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5","Asia/Tbilisi|LMT TBMT +03 +04 +05|-2X.b -2X.b -30 -40 -50|01234343434343434343434323232343434343434343434323|-3D8OX.b 1LUM0 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5","Asia/Tehran|LMT TMT +0330 +0430 +04 +05|-3p.I -3p.I -3u -4u -40 -50|012345423232323232323232323232323232323232323232323232323232323232323232|-2btDp.I Llc0 1FHaT.I 1pc0 120u Rc0 Dc0 1iMu JX0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6","Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3","Asia/Tokyo|LMT JST JDT|-9i.X -90 -a0|0121212121|-3jE90 2qSo0 Rc0 1lc0 14o0 1zc0 Oo0 1zc0 Oo0|38e6","Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5","Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2","Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4","Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5","Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5","Atlantic/Azores|LMT HMT -02 -01 +00 WET WEST|1G.E 1S.w 20 10 0 0 -10|012323232323232323232323232323232323232323232343234323432343232323232323232323232323232323232323232323434343434343434343434356434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tomh.k 18aoh.k aPX0 Sp0 M00 1vb0 SN0 1vb0 SN0 1vb0 Td0 1vb0 SN0 1vb0 6600 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1uo0 1c00 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 CT90 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 Ap0 An0 wo0 Eo0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|25e4","Atlantic/Bermuda|LMT BMT BST AST ADT|4j.i 4j.i 3j.i 40 30|0121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3eLvE.G 16mo0 1bb0 1i10 11X0 ru30 thbE.G 1PX0 11B0 1tz0 Rd0 1zb0 Op0 1zb0 3I10 Lz0 1EN0 FX0 1HB0 FX0 1Kp0 Db0 1Kp0 Db0 1Kp0 FX0 93d0 11z0 GAp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3","Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4","Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2ldW0 1eEo0 7zX0 1djf0|50e4","Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|49e3","Atlantic/Madeira|LMT FMT -01 +00 +01 WET WEST|17.A 17.A 10 0 -10 0 -10|01232323232323232323232323232323232323232323234323432343234323232323232323232323232323232323232323232356565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tomQ.o 18anQ.o aPX0 Sp0 M00 1vb0 SN0 1vb0 SN0 1vb0 Td0 1vb0 SN0 1vb0 6600 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1uo0 1c00 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 BJ90 1a00 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e4","Atlantic/South_Georgia|LMT -02|2q.8 20|01|-3eLxx.Q|30","Atlantic/Stanley|LMT SMT -04 -03 -02|3P.o 3P.o 40 30 20|0123232323232323434323232323232323232323232323232323232323232323232323|-3eLw8.A S200 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2","Australia/Sydney|LMT AEST AEDT|-a4.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oW4.Q RlC4.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5","Australia/Adelaide|LMT ACST ACST ACDT|-9e.k -90 -9u -au|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-32oVe.k ak0e.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5","Australia/Brisbane|LMT AEST AEDT|-ac.8 -a0 -b0|012121212121212121|-32Bmc.8 Ry2c.8 xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5","Australia/Broken_Hill|LMT AEST ACST ACST ACDT|-9p.M -a0 -90 -9u -au|0123434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-32oVp.M 3Lzp.M 6wp0 H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|18e3","Australia/Hobart|LMT AEST AEDT|-9N.g -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-3109N.g Pk1N.g 1a00 1qM0 Oo0 1zc0 Oo0 TAo0 yM0 1cM0 1cM0 1fA0 1a00 VfA0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|21e4","Australia/Darwin|LMT ACST ACST ACDT|-8H.k -90 -9u -au|01232323232|-32oUH.k ajXH.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00|12e4","Australia/Eucla|LMT +0845 +0945|-8z.s -8J -9J|01212121212121212121|-30nIz.s PkpO.s xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368","Australia/Lord_Howe|LMT AEST +1030 +1130 +11|-aA.k -a0 -au -bu -b0|01232323232424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424|-32oWA.k 3tzAA.k 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347","Australia/Lindeman|LMT AEST AEDT|-9T.U -a0 -b0|0121212121212121212121|-32BlT.U Ry1T.U xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10","Australia/Melbourne|LMT AEST AEDT|-9D.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oVD.Q RlBD.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|39e5","Australia/Perth|LMT AWST AWDT|-7H.o -80 -90|01212121212121212121|-30nHH.o PkpH.o xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5","Europe/Brussels|LMT BMT WET CET CEST WEST|-h.u -h.u 0 -10 -20 -10|012343434325252525252525252525252525252525252525252525434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8Mh.u u1Ah.u SO00 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|21e5","Pacific/Easter|LMT EMT -07 -06 -05|7h.s 7h.s 70 60 50|0123232323232323232323232323234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLsG.w 1HRc0 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|30e2","Europe/Athens|LMT AMT EET EEST CEST CET|-1y.Q -1y.Q -20 -30 -20 -10|0123234545232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-30SNy.Q OMM1 CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|35e5","Europe/Dublin|LMT DMT IST GMT BST IST|p.l p.l -y.D 0 -10 -10|012343434343435353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353|-3BHby.D 1ra20 Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g600 14o0 1wo0 17c0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Etc/GMT-0|GMT|0|0||","Etc/GMT-1|+01|-10|0||","Etc/GMT-10|+10|-a0|0||","Etc/GMT-11|+11|-b0|0||","Etc/GMT-12|+12|-c0|0||","Etc/GMT-13|+13|-d0|0||","Etc/GMT-14|+14|-e0|0||","Etc/GMT-2|+02|-20|0||","Etc/GMT-3|+03|-30|0||","Etc/GMT-4|+04|-40|0||","Etc/GMT-5|+05|-50|0||","Etc/GMT-6|+06|-60|0||","Etc/GMT-7|+07|-70|0||","Etc/GMT-8|+08|-80|0||","Etc/GMT-9|+09|-90|0||","Etc/GMT+1|-01|10|0||","Etc/GMT+10|-10|a0|0||","Etc/GMT+11|-11|b0|0||","Etc/GMT+12|-12|c0|0||","Etc/GMT+2|-02|20|0||","Etc/GMT+3|-03|30|0||","Etc/GMT+4|-04|40|0||","Etc/GMT+5|-05|50|0||","Etc/GMT+6|-06|60|0||","Etc/GMT+7|-07|70|0||","Etc/GMT+8|-08|80|0||","Etc/GMT+9|-09|90|0||","Etc/UTC|UTC|0|0||","Europe/Andorra|LMT WET CET CEST|-6.4 0 -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2M0M6.4 1Pnc6.4 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|79e3","Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|10e5","Europe/London|LMT GMT BST BDST|1.f 0 -10 -20|01212121212121212121212121212121212121212121212121232323232321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-4VgnW.J 2KHdW.J Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|10e6","Europe/Belgrade|LMT CET CEST|-1m -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3topm 2juLm 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Prague|LMT PMT CET CEST GMT|-V.I -V.I -10 -20 0|0123232323232323232423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4QbAV.I 1FDc0 XPaV.I 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 1qM0 11c0 mp0 xA0 mn0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|13e5","Europe/Bucharest|LMT BMT EET EEST|-1I.o -1I.o -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3awpI.o 1AU00 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|19e5","Europe/Budapest|LMT CET CEST|-1g.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3cK1g.k 124Lg.k 11d0 1iO0 11A0 1o00 11A0 1oo0 11c0 1lc0 17c0 O1V0 3Nf0 WM0 1fA0 1cM0 1cM0 1oJ0 1dd0 1020 1fX0 1cp0 1cM0 1cM0 1cM0 1fA0 1a00 bhy0 Rb0 1wr0 Rc0 1C00 LA0 1C00 LA0 SNW0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cO0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5","Europe/Zurich|LMT BMT CET CEST|-y.8 -t.K -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4HyMy.8 1Dw04.m 1SfAt.K 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|38e4","Europe/Chisinau|LMT CMT BMT EET EEST CEST CET MSK MSD|-1T.k -1T -1I.o -20 -30 -20 -10 -30 -40|0123434343434343434345656578787878787878787878434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8NT.k 1wNA0.k wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|67e4","Europe/Gibraltar|LMT GMT BST BDST CET CEST|l.o 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123232323232121232121212121212121212145454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-3BHbC.A 1ra1C.A Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|30e3","Europe/Helsinki|LMT HMT EET EEST|-1D.N -1D.N -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3H0ND.N 1Iu00 OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Kaliningrad|LMT CET CEST EET EEST MSK MSD +03|-1m -10 -20 -20 -30 -30 -40 -30|012121212121212343565656565656565654343434343434343434343434343434343434343434373|-36Rdm UbXm 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 390 7A0 1en0 12N0 1pbb0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4","Europe/Kiev|LMT KMT EET MSK CEST CET MSD EEST|-22.4 -22.4 -20 -30 -20 -10 -40 -30|01234545363636363636363636367272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-3D8O2.4 1LUM0 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o10 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|34e5","Europe/Kirov|LMT +03 +04 +05 MSD MSK MSK|-3i.M -30 -40 -50 -40 -30 -40|0123232323232323232454524545454545454545454545454545454545454565|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 2pz0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4","Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121212124121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2le00 aPX0 Sp0 M00 1vb0 SN0 1vb0 SN0 1vb0 Td0 1vb0 SN0 1vb0 6600 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1uo0 1c00 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 oiK0 1cM0 1cM0 1fB0 1cM0 1cM0 1cM0 1fA0 1a00 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Europe/Madrid|LMT WET WEST WEMT CET CEST|e.I 0 -10 -20 -10 -20|0121212121212121212321454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2M0M0 G5z0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|62e5","Europe/Malta|LMT CET CEST|-W.4 -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-35rcW.4 SXzW.4 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4","Europe/Minsk|LMT MMT EET MSK CEST CET MSD EEST +03|-1O.g -1O -20 -30 -20 -10 -40 -30 -30|012345454363636363636363636372727272727272727272727272727272727272728|-3D8NO.g 1LUM0.g eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5","Europe/Paris|LMT PMT WET WEST CEST CET WEMT|-9.l -9.l 0 -10 -20 -10 -20|01232323232323232323232323232323232323232323232323234545463654545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-3bQ09.l MDA0 cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|11e6","Europe/Moscow|LMT MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|01232434565756865656565656565656565698656565656565656565656565656565656565656a6|-3D8Ou.h 1sQM0 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6","Europe/Riga|LMT RMT LST EET MSK CEST CET MSD EEST|-1A.y -1A.y -2A.y -20 -30 -20 -10 -40 -30|0121213456565647474747474747474838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383|-3D8NA.y 1xde0 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|64e4","Europe/Rome|LMT RMT CET CEST|-N.U -N.U -10 -20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4aU0N.U 15snN.U T000 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|39e5","Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5","Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810|","Europe/Simferopol|LMT SMT EET MSK CEST CET MSD EEST MSK|-2g.o -2g -20 -30 -20 -10 -40 -30 -40|0123454543636363636363636363272727636363727272727272727272727272727272727283|-3D8Og.o 1LUM0.o eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eN0 1cM0 1cM0 1cM0 1cM0 dV0 WO0 1cM0 1cM0 1fy0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4","Europe/Sofia|LMT IMT EET CET CEST EEST|-1x.g -1U.U -20 -10 -20 -30|0123434325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-3D8Nx.g AiLA.k 1UFeU.U WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Tallinn|LMT TMT CET CEST EET MSK MSD EEST|-1D -1D -10 -20 -20 -30 -40 -30|0123214532323565656565656565657474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474|-3D8ND 1wI00 teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e4","Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4","Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|13e5","Europe/Vienna|LMT CET CEST|-15.l -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36Rd5.l UbX5.l 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1ao0 1co0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|18e5","Europe/Vilnius|LMT WMT KMT CET EET MSK CEST MSD EEST|-1F.g -1o -1z.A -10 -20 -30 -20 -40 -30|0123435636365757575757575757584848484848484848463648484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484|-3D8NF.g 1u5Ah.g 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4","Europe/Volgograd|LMT +03 +04 +05 MSD MSK MSK|-2V.E -30 -40 -50 -40 -30 -40|012323232323232324545452454545454545454545454545454545454545456525|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1fA0 1cM0 2pz0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 9Jd0 5gn0|10e5","Europe/Warsaw|LMT WMT CET CEST EET EEST|-1o -1o -10 -20 -20 -30|0123232345423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8No 1qDA0 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5","Pacific/Honolulu|LMT HST HDT HWT HPT HST|av.q au 9u 9u 9u a0|01213415|-3061s.y 1uMdW.y 8x0 lef0 8wWu iAu 46p0|37e4","Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2","Indian/Maldives|LMT MMT +05|-4S -4S -50|012|-3D8QS 3eLA0|35e4","Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4","Pacific/Kwajalein|LMT +11 +10 +09 -12 +12|-b9.k -b0 -a0 -90 c0 -c0|0123145|-2M0X9.k 1rDA9.k akp0 6Up0 12ry0 Wan0|14e3","Pacific/Chatham|LMT +1215 +1245 +1345|-cd.M -cf -cJ -dJ|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-46jMd.M 37RbW.M 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|600","Pacific/Apia|LMT LMT -1130 -11 -10 +14 +13|-cx.4 bq.U bu b0 a0 -e0 -d0|012343456565656565656565656|-38Fox.4 J1A0 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0|37e3","Pacific/Bougainville|LMT PMMT +10 +09 +11|-am.g -9M.w -a0 -90 -b0|012324|-3D8Wm.g AvAx.I 1TCLM.w 7CN0 2MQp0|18e4","Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|012121212121212121212121|-2l9nd.g 2uNXd.g Dc0 n610 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3","Pacific/Enderbury|-00 -12 -11 +13|0 c0 b0 -d0|0123|-1iIo0 1GsA0 B7X0|1","Pacific/Fakaofo|LMT -11 +13|bo.U b0 -d0|012|-2M0Az.4 4ufXz.4|483","Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|012121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 2hc0 bc0|88e4","Pacific/Tarawa|LMT +12|-bw.4 -c0|01|-2M0Xw.4|29e3","Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3","Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125","Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4","Pacific/Guam|LMT LMT GST +09 GDT ChST|el -9D -a0 -90 -b0 -a0|0123242424242424242425|-54m9D 2glc0 1DFbD 6pB0 AhB0 3QL0 g2p0 3p91 WOX rX0 1zd0 Rb0 1wp0 Rb0 5xd0 rX0 5sN0 zb1 1C0X On0 ULb0|17e4","Pacific/Kiritimati|LMT -1040 -10 +14|at.k aE a0 -e0|0123|-2M0Bu.E 3bIMa.E B7Xk|51e2","Pacific/Kosrae|LMT LMT +11 +09 +10 +12|d8.4 -aP.U -b0 -90 -a0 -c0|0123243252|-54maP.U 2glc0 xsnP.U axC0 HBy0 akp0 axd0 WOK0 1bdz0|66e2","Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2","Pacific/Pago_Pago|LMT LMT SST|-cB.c bm.M b0|012|-38FoB.c J1A0|37e2","Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E QCnB.E 7mqu 1lnbu|10e3","Pacific/Niue|LMT -1120 -11|bj.E bk b0|012|-FScE.k suo0.k|12e2","Pacific/Norfolk|LMT +1112 +1130 +1230 +11 +12|-bb.Q -bc -bu -cu -b0 -c0|0123245454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2M0Xb.Q 21ILX.Q W01G Oo0 1COo0 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|25e4","Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3","Pacific/Palau|LMT LMT +09|f2.4 -8V.U -90|012|-54m8V.U 2glc0|21e3","Pacific/Pitcairn|LMT -0830 -08|8E.k 8u 80|012|-2M0Dj.E 3UVXN.E|56","Pacific/Rarotonga|LMT LMT -1030 -0930 -10|-dk.U aD.4 au 9u a0|01234343434343434343434343434|-2Otpk.U 28zc0 13tbO.U IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3","Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4","Pacific/Tongatapu|LMT +1220 +13 +14|-cj.c -ck -d0 -e0|01232323232|-XbMj.c BgLX.c 1yndk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3"],"links":["Africa/Abidjan|Africa/Accra","Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|Atlantic/Reykjavik","Africa/Abidjan|Atlantic/St_Helena","Africa/Abidjan|Iceland","Africa/Cairo|Egypt","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Nairobi|Africa/Addis_Ababa","Africa/Nairobi|Africa/Asmara","Africa/Nairobi|Africa/Asmera","Africa/Nairobi|Africa/Dar_es_Salaam","Africa/Nairobi|Africa/Djibouti","Africa/Nairobi|Africa/Kampala","Africa/Nairobi|Africa/Mogadishu","Africa/Nairobi|Indian/Antananarivo","Africa/Nairobi|Indian/Comoro","Africa/Nairobi|Indian/Mayotte","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|US/Alaska","America/Argentina/Buenos_Aires|America/Buenos_Aires","America/Argentina/Catamarca|America/Argentina/ComodRivadavia","America/Argentina/Catamarca|America/Catamarca","America/Argentina/Cordoba|America/Cordoba","America/Argentina/Cordoba|America/Rosario","America/Argentina/Jujuy|America/Jujuy","America/Argentina/Mendoza|America/Mendoza","America/Chicago|CST6CDT","America/Chicago|US/Central","America/Denver|America/Shiprock","America/Denver|MST7MDT","America/Denver|Navajo","America/Denver|US/Mountain","America/Detroit|US/Michigan","America/Edmonton|America/Yellowknife","America/Edmonton|Canada/Mountain","America/Fort_Wayne|America/Indiana/Indianapolis","America/Fort_Wayne|America/Indianapolis","America/Fort_Wayne|US/East-Indiana","America/Godthab|America/Nuuk","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/Indiana/Knox|America/Knox_IN","America/Indiana/Knox|US/Indiana-Starke","America/Iqaluit|America/Pangnirtung","America/Jamaica|Jamaica","America/Kentucky/Louisville|America/Louisville","America/Los_Angeles|PST8PDT","America/Los_Angeles|US/Pacific","America/Manaus|Brazil/West","America/Mazatlan|Mexico/BajaSur","America/Mexico_City|Mexico/General","America/New_York|EST5EDT","America/New_York|US/Eastern","America/Noronha|Brazil/DeNoronha","America/Panama|America/Atikokan","America/Panama|America/Cayman","America/Panama|America/Coral_Harbour","America/Panama|EST","America/Phoenix|America/Creston","America/Phoenix|MST","America/Phoenix|US/Arizona","America/Puerto_Rico|America/Anguilla","America/Puerto_Rico|America/Antigua","America/Puerto_Rico|America/Aruba","America/Puerto_Rico|America/Blanc-Sablon","America/Puerto_Rico|America/Curacao","America/Puerto_Rico|America/Dominica","America/Puerto_Rico|America/Grenada","America/Puerto_Rico|America/Guadeloupe","America/Puerto_Rico|America/Kralendijk","America/Puerto_Rico|America/Lower_Princes","America/Puerto_Rico|America/Marigot","America/Puerto_Rico|America/Montserrat","America/Puerto_Rico|America/Port_of_Spain","America/Puerto_Rico|America/St_Barthelemy","America/Puerto_Rico|America/St_Kitts","America/Puerto_Rico|America/St_Lucia","America/Puerto_Rico|America/St_Thomas","America/Puerto_Rico|America/St_Vincent","America/Puerto_Rico|America/Tortola","America/Puerto_Rico|America/Virgin","America/Regina|Canada/Saskatchewan","America/Rio_Branco|America/Porto_Acre","America/Rio_Branco|Brazil/Acre","America/Santiago|Chile/Continental","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","America/Tijuana|America/Ensenada","America/Tijuana|America/Santa_Isabel","America/Tijuana|Mexico/BajaNorte","America/Toronto|America/Montreal","America/Toronto|America/Nassau","America/Toronto|America/Nipigon","America/Toronto|America/Thunder_Bay","America/Toronto|Canada/Eastern","America/Vancouver|Canada/Pacific","America/Whitehorse|Canada/Yukon","America/Winnipeg|America/Rainy_River","America/Winnipeg|Canada/Central","Asia/Ashgabat|Asia/Ashkhabad","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Vientiane","Asia/Bangkok|Indian/Christmas","Asia/Brunei|Asia/Kuching","Asia/Dhaka|Asia/Dacca","Asia/Dubai|Asia/Muscat","Asia/Dubai|Indian/Mahe","Asia/Dubai|Indian/Reunion","Asia/Ho_Chi_Minh|Asia/Saigon","Asia/Hong_Kong|Hongkong","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Kuala_Lumpur|Asia/Singapore","Asia/Kuala_Lumpur|Singapore","Asia/Macau|Asia/Macao","Asia/Makassar|Asia/Ujung_Pandang","Asia/Nicosia|Europe/Nicosia","Asia/Qatar|Asia/Bahrain","Asia/Rangoon|Asia/Yangon","Asia/Rangoon|Indian/Cocos","Asia/Riyadh|Antarctica/Syowa","Asia/Riyadh|Asia/Aden","Asia/Riyadh|Asia/Kuwait","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|PRC","Asia/Taipei|ROC","Asia/Tehran|Iran","Asia/Thimphu|Asia/Thimbu","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Choibalsan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Urumqi|Asia/Kashgar","Atlantic/Faroe|Atlantic/Faeroe","Australia/Adelaide|Australia/South","Australia/Brisbane|Australia/Queensland","Australia/Broken_Hill|Australia/Yancowinna","Australia/Darwin|Australia/North","Australia/Hobart|Australia/Currie","Australia/Hobart|Australia/Tasmania","Australia/Lord_Howe|Australia/LHI","Australia/Melbourne|Australia/Victoria","Australia/Perth|Australia/West","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/NSW","Etc/GMT-0|Etc/GMT","Etc/GMT-0|Etc/GMT+0","Etc/GMT-0|Etc/GMT0","Etc/GMT-0|Etc/Greenwich","Etc/GMT-0|GMT","Etc/GMT-0|GMT+0","Etc/GMT-0|GMT-0","Etc/GMT-0|GMT0","Etc/GMT-0|Greenwich","Etc/UTC|Etc/UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UCT","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Athens|EET","Europe/Belgrade|Europe/Ljubljana","Europe/Belgrade|Europe/Podgorica","Europe/Belgrade|Europe/Sarajevo","Europe/Belgrade|Europe/Skopje","Europe/Belgrade|Europe/Zagreb","Europe/Berlin|Arctic/Longyearbyen","Europe/Berlin|Atlantic/Jan_Mayen","Europe/Berlin|Europe/Copenhagen","Europe/Berlin|Europe/Oslo","Europe/Berlin|Europe/Stockholm","Europe/Brussels|CET","Europe/Brussels|Europe/Amsterdam","Europe/Brussels|Europe/Luxembourg","Europe/Brussels|MET","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Helsinki|Europe/Mariehamn","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Kiev|Europe/Kyiv","Europe/Kiev|Europe/Uzhgorod","Europe/Kiev|Europe/Zaporozhye","Europe/Lisbon|Portugal","Europe/Lisbon|WET","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Paris|Europe/Monaco","Europe/Prague|Europe/Bratislava","Europe/Rome|Europe/San_Marino","Europe/Rome|Europe/Vatican","Europe/Warsaw|Poland","Europe/Zurich|Europe/Busingen","Europe/Zurich|Europe/Vaduz","Indian/Maldives|Indian/Kerguelen","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Easter|Chile/EasterIsland","Pacific/Enderbury|Pacific/Kanton","Pacific/Guadalcanal|Pacific/Pohnpei","Pacific/Guadalcanal|Pacific/Ponape","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|HST","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Kwajalein|Kwajalein","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Port_Moresby|Antarctica/DumontDUrville","Pacific/Port_Moresby|Pacific/Chuuk","Pacific/Port_Moresby|Pacific/Truk","Pacific/Port_Moresby|Pacific/Yap","Pacific/Tarawa|Pacific/Funafuti","Pacific/Tarawa|Pacific/Majuro","Pacific/Tarawa|Pacific/Wake","Pacific/Tarawa|Pacific/Wallis"],"countries":["AD|Europe/Andorra","AE|Asia/Dubai","AF|Asia/Kabul","AG|America/Puerto_Rico America/Antigua","AI|America/Puerto_Rico America/Anguilla","AL|Europe/Tirane","AM|Asia/Yerevan","AO|Africa/Lagos Africa/Luanda","AQ|Antarctica/Casey Antarctica/Davis Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Troll Antarctica/Vostok Pacific/Auckland Pacific/Port_Moresby Asia/Riyadh Asia/Singapore Antarctica/McMurdo Antarctica/DumontDUrville Antarctica/Syowa","AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia","AS|Pacific/Pago_Pago","AT|Europe/Vienna","AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla Asia/Tokyo","AW|America/Puerto_Rico America/Aruba","AX|Europe/Helsinki Europe/Mariehamn","AZ|Asia/Baku","BA|Europe/Belgrade Europe/Sarajevo","BB|America/Barbados","BD|Asia/Dhaka","BE|Europe/Brussels","BF|Africa/Abidjan Africa/Ouagadougou","BG|Europe/Sofia","BH|Asia/Qatar Asia/Bahrain","BI|Africa/Maputo Africa/Bujumbura","BJ|Africa/Lagos Africa/Porto-Novo","BL|America/Puerto_Rico America/St_Barthelemy","BM|Atlantic/Bermuda","BN|Asia/Kuching Asia/Brunei","BO|America/La_Paz","BQ|America/Puerto_Rico America/Kralendijk","BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco","BS|America/Toronto America/Nassau","BT|Asia/Thimphu","BW|Africa/Maputo Africa/Gaborone","BY|Europe/Minsk","BZ|America/Belize","CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Toronto America/Iqaluit America/Winnipeg America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Inuvik America/Dawson_Creek America/Fort_Nelson America/Whitehorse America/Dawson America/Vancouver America/Panama America/Puerto_Rico America/Phoenix America/Blanc-Sablon America/Atikokan America/Creston","CC|Asia/Yangon Indian/Cocos","CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi","CF|Africa/Lagos Africa/Bangui","CG|Africa/Lagos Africa/Brazzaville","CH|Europe/Zurich","CI|Africa/Abidjan","CK|Pacific/Rarotonga","CL|America/Santiago America/Coyhaique America/Punta_Arenas Pacific/Easter","CM|Africa/Lagos Africa/Douala","CN|Asia/Shanghai Asia/Urumqi","CO|America/Bogota","CR|America/Costa_Rica","CU|America/Havana","CV|Atlantic/Cape_Verde","CW|America/Puerto_Rico America/Curacao","CX|Asia/Bangkok Indian/Christmas","CY|Asia/Nicosia Asia/Famagusta","CZ|Europe/Prague","DE|Europe/Zurich Europe/Berlin Europe/Busingen","DJ|Africa/Nairobi Africa/Djibouti","DK|Europe/Berlin Europe/Copenhagen","DM|America/Puerto_Rico America/Dominica","DO|America/Santo_Domingo","DZ|Africa/Algiers","EC|America/Guayaquil Pacific/Galapagos","EE|Europe/Tallinn","EG|Africa/Cairo","EH|Africa/El_Aaiun","ER|Africa/Nairobi Africa/Asmara","ES|Europe/Madrid Africa/Ceuta Atlantic/Canary","ET|Africa/Nairobi Africa/Addis_Ababa","FI|Europe/Helsinki","FJ|Pacific/Fiji","FK|Atlantic/Stanley","FM|Pacific/Kosrae Pacific/Port_Moresby Pacific/Guadalcanal Pacific/Chuuk Pacific/Pohnpei","FO|Atlantic/Faroe","FR|Europe/Paris","GA|Africa/Lagos Africa/Libreville","GB|Europe/London","GD|America/Puerto_Rico America/Grenada","GE|Asia/Tbilisi","GF|America/Cayenne","GG|Europe/London Europe/Guernsey","GH|Africa/Abidjan Africa/Accra","GI|Europe/Gibraltar","GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule","GM|Africa/Abidjan Africa/Banjul","GN|Africa/Abidjan Africa/Conakry","GP|America/Puerto_Rico America/Guadeloupe","GQ|Africa/Lagos Africa/Malabo","GR|Europe/Athens","GS|Atlantic/South_Georgia","GT|America/Guatemala","GU|Pacific/Guam","GW|Africa/Bissau","GY|America/Guyana","HK|Asia/Hong_Kong","HN|America/Tegucigalpa","HR|Europe/Belgrade Europe/Zagreb","HT|America/Port-au-Prince","HU|Europe/Budapest","ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura","IE|Europe/Dublin","IL|Asia/Jerusalem","IM|Europe/London Europe/Isle_of_Man","IN|Asia/Kolkata","IO|Indian/Chagos","IQ|Asia/Baghdad","IR|Asia/Tehran","IS|Africa/Abidjan Atlantic/Reykjavik","IT|Europe/Rome","JE|Europe/London Europe/Jersey","JM|America/Jamaica","JO|Asia/Amman","JP|Asia/Tokyo","KE|Africa/Nairobi","KG|Asia/Bishkek","KH|Asia/Bangkok Asia/Phnom_Penh","KI|Pacific/Tarawa Pacific/Kanton Pacific/Kiritimati","KM|Africa/Nairobi Indian/Comoro","KN|America/Puerto_Rico America/St_Kitts","KP|Asia/Pyongyang","KR|Asia/Seoul","KW|Asia/Riyadh Asia/Kuwait","KY|America/Panama America/Cayman","KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral","LA|Asia/Bangkok Asia/Vientiane","LB|Asia/Beirut","LC|America/Puerto_Rico America/St_Lucia","LI|Europe/Zurich Europe/Vaduz","LK|Asia/Colombo","LR|Africa/Monrovia","LS|Africa/Johannesburg Africa/Maseru","LT|Europe/Vilnius","LU|Europe/Brussels Europe/Luxembourg","LV|Europe/Riga","LY|Africa/Tripoli","MA|Africa/Casablanca","MC|Europe/Paris Europe/Monaco","MD|Europe/Chisinau","ME|Europe/Belgrade Europe/Podgorica","MF|America/Puerto_Rico America/Marigot","MG|Africa/Nairobi Indian/Antananarivo","MH|Pacific/Tarawa Pacific/Kwajalein Pacific/Majuro","MK|Europe/Belgrade Europe/Skopje","ML|Africa/Abidjan Africa/Bamako","MM|Asia/Yangon","MN|Asia/Ulaanbaatar Asia/Hovd","MO|Asia/Macau","MP|Pacific/Guam Pacific/Saipan","MQ|America/Martinique","MR|Africa/Abidjan Africa/Nouakchott","MS|America/Puerto_Rico America/Montserrat","MT|Europe/Malta","MU|Indian/Mauritius","MV|Indian/Maldives","MW|Africa/Maputo Africa/Blantyre","MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Chihuahua America/Ciudad_Juarez America/Ojinaga America/Mazatlan America/Bahia_Banderas America/Hermosillo America/Tijuana","MY|Asia/Kuching Asia/Singapore Asia/Kuala_Lumpur","MZ|Africa/Maputo","NA|Africa/Windhoek","NC|Pacific/Noumea","NE|Africa/Lagos Africa/Niamey","NF|Pacific/Norfolk","NG|Africa/Lagos","NI|America/Managua","NL|Europe/Brussels Europe/Amsterdam","NO|Europe/Berlin Europe/Oslo","NP|Asia/Kathmandu","NR|Pacific/Nauru","NU|Pacific/Niue","NZ|Pacific/Auckland Pacific/Chatham","OM|Asia/Dubai Asia/Muscat","PA|America/Panama","PE|America/Lima","PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier","PG|Pacific/Port_Moresby Pacific/Bougainville","PH|Asia/Manila","PK|Asia/Karachi","PL|Europe/Warsaw","PM|America/Miquelon","PN|Pacific/Pitcairn","PR|America/Puerto_Rico","PS|Asia/Gaza Asia/Hebron","PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores","PW|Pacific/Palau","PY|America/Asuncion","QA|Asia/Qatar","RE|Asia/Dubai Indian/Reunion","RO|Europe/Bucharest","RS|Europe/Belgrade","RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Volgograd Europe/Astrakhan Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr","RW|Africa/Maputo Africa/Kigali","SA|Asia/Riyadh","SB|Pacific/Guadalcanal","SC|Asia/Dubai Indian/Mahe","SD|Africa/Khartoum","SE|Europe/Berlin Europe/Stockholm","SG|Asia/Singapore","SH|Africa/Abidjan Atlantic/St_Helena","SI|Europe/Belgrade Europe/Ljubljana","SJ|Europe/Berlin Arctic/Longyearbyen","SK|Europe/Prague Europe/Bratislava","SL|Africa/Abidjan Africa/Freetown","SM|Europe/Rome Europe/San_Marino","SN|Africa/Abidjan Africa/Dakar","SO|Africa/Nairobi Africa/Mogadishu","SR|America/Paramaribo","SS|Africa/Juba","ST|Africa/Sao_Tome","SV|America/El_Salvador","SX|America/Puerto_Rico America/Lower_Princes","SY|Asia/Damascus","SZ|Africa/Johannesburg Africa/Mbabane","TC|America/Grand_Turk","TD|Africa/Ndjamena","TF|Asia/Dubai Indian/Maldives Indian/Kerguelen","TG|Africa/Abidjan Africa/Lome","TH|Asia/Bangkok","TJ|Asia/Dushanbe","TK|Pacific/Fakaofo","TL|Asia/Dili","TM|Asia/Ashgabat","TN|Africa/Tunis","TO|Pacific/Tongatapu","TR|Europe/Istanbul","TT|America/Puerto_Rico America/Port_of_Spain","TV|Pacific/Tarawa Pacific/Funafuti","TW|Asia/Taipei","TZ|Africa/Nairobi Africa/Dar_es_Salaam","UA|Europe/Simferopol Europe/Kyiv","UG|Africa/Nairobi Africa/Kampala","UM|Pacific/Pago_Pago Pacific/Tarawa Pacific/Midway Pacific/Wake","US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu","UY|America/Montevideo","UZ|Asia/Samarkand Asia/Tashkent","VA|Europe/Rome Europe/Vatican","VC|America/Puerto_Rico America/St_Vincent","VE|America/Caracas","VG|America/Puerto_Rico America/Tortola","VI|America/Puerto_Rico America/St_Thomas","VN|Asia/Bangkok Asia/Ho_Chi_Minh","VU|Pacific/Efate","WF|Pacific/Tarawa Pacific/Wallis","WS|Pacific/Apia","YE|Asia/Riyadh Asia/Aden","YT|Africa/Nairobi Indian/Mayotte","ZA|Africa/Johannesburg","ZM|Africa/Maputo Africa/Lusaka","ZW|Africa/Maputo Africa/Harare"]}')},743:(M,z,b)=>{(M.exports=b(639)).tz.load(b(681))}}]);
\ No newline at end of file
+/*! For license information please see 743.27a753a06671118f1c5c.js.LICENSE.txt */
+(self.webpackChunkAirflow=self.webpackChunkAirflow||[]).push([[743],{93:function(M,z,b){(M=b.nmd(M)).exports=function(){"use strict";var z,p;function O(){return z.apply(null,arguments)}function A(M){z=M}function c(M){return M instanceof Array||"[object Array]"===Object.prototype.toString.call(M)}function o(M){return null!=M&&"[object Object]"===Object.prototype.toString.call(M)}function q(M,z){return Object.prototype.hasOwnProperty.call(M,z)}function W(M){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(M).length;var z;for(z in M)if(q(M,z))return!1;return!0}function d(M){return void 0===M}function a(M){return"number"==typeof M||"[object Number]"===Object.prototype.toString.call(M)}function n(M){return M instanceof Date||"[object Date]"===Object.prototype.toString.call(M)}function e(M,z){var b,p=[],O=M.length;for(b=0;b<O;++b)p.push(z(M[b],b));return p}function R(M,z){for(var b in z)q(z,b)&&(M[b]=z[b]);return q(z,"toString")&&(M.toString=z.toString),q(z,"valueOf")&&(M.valueOf=z.valueOf),M}function i(M,z,b,p){return Kb(M,z,b,p,!0).utc()}function r(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function L(M){return null==M._pf&&(M._pf=r()),M._pf}function f(M){var z=null,b=!1,O=M._d&&!isNaN(M._d.getTime());return O&&(z=L(M),b=p.call(z.parsedDateParts,function(M){return null!=M}),O=z.overflow<0&&!z.empty&&!z.invalidEra&&!z.invalidMonth&&!z.invalidWeekday&&!z.weekdayMismatch&&!z.nullInput&&!z.invalidFormat&&!z.userInvalidated&&(!z.meridiem||z.meridiem&&b),M._strict&&(O=O&&0===z.charsLeftOver&&0===z.unusedTokens.length&&void 0===z.bigHour)),null!=Object.isFrozen&&Object.isFrozen(M)?O:(M._isValid=O,M._isValid)}function t(M){var z=i(NaN);return null!=M?R(L(z),M):L(z).userInvalidated=!0,z}p=Array.prototype.some?Array.prototype.some:function(M){var z,b=Object(this),p=b.length>>>0;for(z=0;z<p;z++)if(z in b&&M.call(this,b[z],z,b))return!0;return!1};var u=O.momentProperties=[],s=!1;function N(M,z){var b,p,O,A=u.length;if(d(z._isAMomentObject)||(M._isAMomentObject=z._isAMomentObject),d(z._i)||(M._i=z._i),d(z._f)||(M._f=z._f),d(z._l)||(M._l=z._l),d(z._strict)||(M._strict=z._strict),d(z._tzm)||(M._tzm=z._tzm),d(z._isUTC)||(M._isUTC=z._isUTC),d(z._offset)||(M._offset=z._offset),d(z._pf)||(M._pf=L(z)),d(z._locale)||(M._locale=z._locale),A>0)for(b=0;b<A;b++)d(O=z[p=u[b]])||(M[p]=O);return M}function B(M){N(this,M),this._d=new Date(null!=M._d?M._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===s&&(s=!0,O.updateOffset(this),s=!1)}function X(M){return M instanceof B||null!=M&&null!=M._isAMomentObject}function l(M){!1===O.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+M)}function h(M,z){var b=!0;return R(function(){if(null!=O.deprecationHandler&&O.deprecationHandler(null,M),b){var p,A,c,o=[],W=arguments.length;for(A=0;A<W;A++){if(p="","object"==typeof arguments[A]){for(c in p+="\n["+A+"] ",arguments[0])q(arguments[0],c)&&(p+=c+": "+arguments[0][c]+", ");p=p.slice(0,-2)}else p=arguments[A];o.push(p)}l(M+"\nArguments: "+Array.prototype.slice.call(o).join("")+"\n"+(new Error).stack),b=!1}return z.apply(this,arguments)},z)}var T,m={};function g(M,z){null!=O.deprecationHandler&&O.deprecationHandler(M,z),m[M]||(l(z),m[M]=!0)}function S(M){return"undefined"!=typeof Function&&M instanceof Function||"[object Function]"===Object.prototype.toString.call(M)}function _(M){var z,b;for(b in M)q(M,b)&&(S(z=M[b])?this[b]=z:this["_"+b]=z);this._config=M,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function E(M,z){var b,p=R({},M);for(b in z)q(z,b)&&(o(M[b])&&o(z[b])?(p[b]={},R(p[b],M[b]),R(p[b],z[b])):null!=z[b]?p[b]=z[b]:delete p[b]);for(b in M)q(M,b)&&!q(z,b)&&o(M[b])&&(p[b]=R({},p[b]));return p}function C(M){null!=M&&this.set(M)}O.suppressDeprecationWarnings=!1,O.deprecationHandler=null,T=Object.keys?Object.keys:function(M){var z,b=[];for(z in M)q(M,z)&&b.push(z);return b};var y={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function D(M,z,b){var p=this._calendar[M]||this._calendar.sameElse;return S(p)?p.call(z,b):p}function w(M,z,b){var p=""+Math.abs(M),O=z-p.length;return(M>=0?b?"+":"":"-")+Math.pow(10,Math.max(0,O)).toString().substr(1)+p}var k=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,v=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,P={},U={};function H(M,z,b,p){var O=p;"string"==typeof p&&(O=function(){return this[p]()}),M&&(U[M]=O),z&&(U[z[0]]=function(){return w(O.apply(this,arguments),z[1],z[2])}),b&&(U[b]=function(){return this.localeData().ordinal(O.apply(this,arguments),M)})}function x(M){return M.match(/\[[\s\S]/)?M.replace(/^\[|\]$/g,""):M.replace(/\\/g,"")}function I(M){var z,b,p=M.match(k);for(z=0,b=p.length;z<b;z++)U[p[z]]?p[z]=U[p[z]]:p[z]=x(p[z]);return function(z){var O,A="";for(O=0;O<b;O++)A+=S(p[O])?p[O].call(z,M):p[O];return A}}function Y(M,z){return M.isValid()?(z=G(z,M.localeData()),P[z]=P[z]||I(z),P[z](M)):M.localeData().invalidDate()}function G(M,z){var b=5;function p(M){return z.longDateFormat(M)||M}for(v.lastIndex=0;b>=0&&v.test(M);)M=M.replace(v,p),v.lastIndex=0,b-=1;return M}var j={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function F(M){var z=this._longDateFormat[M],b=this._longDateFormat[M.toUpperCase()];return z||!b?z:(this._longDateFormat[M]=b.match(k).map(function(M){return"MMMM"===M||"MM"===M||"DD"===M||"dddd"===M?M.slice(1):M}).join(""),this._longDateFormat[M])}var K="Invalid date";function V(){return this._invalidDate}var Q="%d",J=/\d{1,2}/;function Z(M){return this._ordinal.replace("%d",M)}var $={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function MM(M,z,b,p){var O=this._relativeTime[b];return S(O)?O(M,z,b,p):O.replace(/%d/i,M)}function zM(M,z){var b=this._relativeTime[M>0?"future":"past"];return S(b)?b(z):b.replace(/%s/i,z)}var bM={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function pM(M){return"string"==typeof M?bM[M]||bM[M.toLowerCase()]:void 0}function OM(M){var z,b,p={};for(b in M)q(M,b)&&(z=pM(b))&&(p[z]=M[b]);return p}var AM={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function cM(M){var z,b=[];for(z in M)q(M,z)&&b.push({unit:z,priority:AM[z]});return b.sort(function(M,z){return M.priority-z.priority}),b}var oM,qM=/\d/,WM=/\d\d/,dM=/\d{3}/,aM=/\d{4}/,nM=/[+-]?\d{6}/,eM=/\d\d?/,RM=/\d\d\d\d?/,iM=/\d\d\d\d\d\d?/,rM=/\d{1,3}/,LM=/\d{1,4}/,fM=/[+-]?\d{1,6}/,tM=/\d+/,uM=/[+-]?\d+/,sM=/Z|[+-]\d\d:?\d\d/gi,NM=/Z|[+-]\d\d(?::?\d\d)?/gi,BM=/[+-]?\d+(\.\d{1,3})?/,XM=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,lM=/^[1-9]\d?/,hM=/^([1-9]\d|\d)/;function TM(M,z,b){oM[M]=S(z)?z:function(M,p){return M&&b?b:z}}function mM(M,z){return q(oM,M)?oM[M](z._strict,z._locale):new RegExp(gM(M))}function gM(M){return SM(M.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(M,z,b,p,O){return z||b||p||O}))}function SM(M){return M.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function _M(M){return M<0?Math.ceil(M)||0:Math.floor(M)}function EM(M){var z=+M,b=0;return 0!==z&&isFinite(z)&&(b=_M(z)),b}oM={};var CM={};function yM(M,z){var b,p,O=z;for("string"==typeof M&&(M=[M]),a(z)&&(O=function(M,b){b[z]=EM(M)}),p=M.length,b=0;b<p;b++)CM[M[b]]=O}function DM(M,z){yM(M,function(M,b,p,O){p._w=p._w||{},z(M,p._w,p,O)})}function wM(M,z,b){null!=z&&q(CM,M)&&CM[M](z,b._a,b,M)}function kM(M){return M%4==0&&M%100!=0||M%400==0}var vM=0,PM=1,UM=2,HM=3,xM=4,IM=5,YM=6,GM=7,jM=8;function FM(M){return kM(M)?366:365}H("Y",0,0,function(){var M=this.year();return M<=9999?w(M,4):"+"+M}),H(0,["YY",2],0,function(){return this.year()%100}),H(0,["YYYY",4],0,"year"),H(0,["YYYYY",5],0,"year"),H(0,["YYYYYY",6,!0],0,"year"),TM("Y",uM),TM("YY",eM,WM),TM("YYYY",LM,aM),TM("YYYYY",fM,nM),TM("YYYYYY",fM,nM),yM(["YYYYY","YYYYYY"],vM),yM("YYYY",function(M,z){z[vM]=2===M.length?O.parseTwoDigitYear(M):EM(M)}),yM("YY",function(M,z){z[vM]=O.parseTwoDigitYear(M)}),yM("Y",function(M,z){z[vM]=parseInt(M,10)}),O.parseTwoDigitYear=function(M){return EM(M)+(EM(M)>68?1900:2e3)};var KM,VM=JM("FullYear",!0);function QM(){return kM(this.year())}function JM(M,z){return function(b){return null!=b?($M(this,M,b),O.updateOffset(this,z),this):ZM(this,M)}}function ZM(M,z){if(!M.isValid())return NaN;var b=M._d,p=M._isUTC;switch(z){case"Milliseconds":return p?b.getUTCMilliseconds():b.getMilliseconds();case"Seconds":return p?b.getUTCSeconds():b.getSeconds();case"Minutes":return p?b.getUTCMinutes():b.getMinutes();case"Hours":return p?b.getUTCHours():b.getHours();case"Date":return p?b.getUTCDate():b.getDate();case"Day":return p?b.getUTCDay():b.getDay();case"Month":return p?b.getUTCMonth():b.getMonth();case"FullYear":return p?b.getUTCFullYear():b.getFullYear();default:return NaN}}function $M(M,z,b){var p,O,A,c,o;if(M.isValid()&&!isNaN(b)){switch(p=M._d,O=M._isUTC,z){case"Milliseconds":return void(O?p.setUTCMilliseconds(b):p.setMilliseconds(b));case"Seconds":return void(O?p.setUTCSeconds(b):p.setSeconds(b));case"Minutes":return void(O?p.setUTCMinutes(b):p.setMinutes(b));case"Hours":return void(O?p.setUTCHours(b):p.setHours(b));case"Date":return void(O?p.setUTCDate(b):p.setDate(b));case"FullYear":break;default:return}A=b,c=M.month(),o=29!==(o=M.date())||1!==c||kM(A)?o:28,O?p.setUTCFullYear(A,c,o):p.setFullYear(A,c,o)}}function Mz(M){return S(this[M=pM(M)])?this[M]():this}function zz(M,z){if("object"==typeof M){var b,p=cM(M=OM(M)),O=p.length;for(b=0;b<O;b++)this[p[b].unit](M[p[b].unit])}else if(S(this[M=pM(M)]))return this[M](z);return this}function bz(M,z){return(M%z+z)%z}function pz(M,z){if(isNaN(M)||isNaN(z))return NaN;var b=bz(z,12);return M+=(z-b)/12,1===b?kM(M)?29:28:31-b%7%2}KM=Array.prototype.indexOf?Array.prototype.indexOf:function(M){var z;for(z=0;z<this.length;++z)if(this[z]===M)return z;return-1},H("M",["MM",2],"Mo",function(){return this.month()+1}),H("MMM",0,0,function(M){return this.localeData().monthsShort(this,M)}),H("MMMM",0,0,function(M){return this.localeData().months(this,M)}),TM("M",eM,lM),TM("MM",eM,WM),TM("MMM",function(M,z){return z.monthsShortRegex(M)}),TM("MMMM",function(M,z){return z.monthsRegex(M)}),yM(["M","MM"],function(M,z){z[PM]=EM(M)-1}),yM(["MMM","MMMM"],function(M,z,b,p){var O=b._locale.monthsParse(M,p,b._strict);null!=O?z[PM]=O:L(b).invalidMonth=M});var Oz="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Az="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),cz=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,oz=XM,qz=XM;function Wz(M,z){return M?c(this._months)?this._months[M.month()]:this._months[(this._months.isFormat||cz).test(z)?"format":"standalone"][M.month()]:c(this._months)?this._months:this._months.standalone}function dz(M,z){return M?c(this._monthsShort)?this._monthsShort[M.month()]:this._monthsShort[cz.test(z)?"format":"standalone"][M.month()]:c(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function az(M,z,b){var p,O,A,c=M.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],p=0;p<12;++p)A=i([2e3,p]),this._shortMonthsParse[p]=this.monthsShort(A,"").toLocaleLowerCase(),this._longMonthsParse[p]=this.months(A,"").toLocaleLowerCase();return b?"MMM"===z?-1!==(O=KM.call(this._shortMonthsParse,c))?O:null:-1!==(O=KM.call(this._longMonthsParse,c))?O:null:"MMM"===z?-1!==(O=KM.call(this._shortMonthsParse,c))||-1!==(O=KM.call(this._longMonthsParse,c))?O:null:-1!==(O=KM.call(this._longMonthsParse,c))||-1!==(O=KM.call(this._shortMonthsParse,c))?O:null}function nz(M,z,b){var p,O,A;if(this._monthsParseExact)return az.call(this,M,z,b);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),p=0;p<12;p++){if(O=i([2e3,p]),b&&!this._longMonthsParse[p]&&(this._longMonthsParse[p]=new RegExp("^"+this.months(O,"").replace(".","")+"$","i"),this._shortMonthsParse[p]=new RegExp("^"+this.monthsShort(O,"").replace(".","")+"$","i")),b||this._monthsParse[p]||(A="^"+this.months(O,"")+"|^"+this.monthsShort(O,""),this._monthsParse[p]=new RegExp(A.replace(".",""),"i")),b&&"MMMM"===z&&this._longMonthsParse[p].test(M))return p;if(b&&"MMM"===z&&this._shortMonthsParse[p].test(M))return p;if(!b&&this._monthsParse[p].test(M))return p}}function ez(M,z){if(!M.isValid())return M;if("string"==typeof z)if(/^\d+$/.test(z))z=EM(z);else if(!a(z=M.localeData().monthsParse(z)))return M;var b=z,p=M.date();return p=p<29?p:Math.min(p,pz(M.year(),b)),M._isUTC?M._d.setUTCMonth(b,p):M._d.setMonth(b,p),M}function Rz(M){return null!=M?(ez(this,M),O.updateOffset(this,!0),this):ZM(this,"Month")}function iz(){return pz(this.year(),this.month())}function rz(M){return this._monthsParseExact?(q(this,"_monthsRegex")||fz.call(this),M?this._monthsShortStrictRegex:this._monthsShortRegex):(q(this,"_monthsShortRegex")||(this._monthsShortRegex=oz),this._monthsShortStrictRegex&&M?this._monthsShortStrictRegex:this._monthsShortRegex)}function Lz(M){return this._monthsParseExact?(q(this,"_monthsRegex")||fz.call(this),M?this._monthsStrictRegex:this._monthsRegex):(q(this,"_monthsRegex")||(this._monthsRegex=qz),this._monthsStrictRegex&&M?this._monthsStrictRegex:this._monthsRegex)}function fz(){function M(M,z){return z.length-M.length}var z,b,p,O,A=[],c=[],o=[];for(z=0;z<12;z++)b=i([2e3,z]),p=SM(this.monthsShort(b,"")),O=SM(this.months(b,"")),A.push(p),c.push(O),o.push(O),o.push(p);A.sort(M),c.sort(M),o.sort(M),this._monthsRegex=new RegExp("^("+o.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+c.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+A.join("|")+")","i")}function tz(M,z,b,p,O,A,c){var o;return M<100&&M>=0?(o=new Date(M+400,z,b,p,O,A,c),isFinite(o.getFullYear())&&o.setFullYear(M)):o=new Date(M,z,b,p,O,A,c),o}function uz(M){var z,b;return M<100&&M>=0?((b=Array.prototype.slice.call(arguments))[0]=M+400,z=new Date(Date.UTC.apply(null,b)),isFinite(z.getUTCFullYear())&&z.setUTCFullYear(M)):z=new Date(Date.UTC.apply(null,arguments)),z}function sz(M,z,b){var p=7+z-b;return-(7+uz(M,0,p).getUTCDay()-z)%7+p-1}function Nz(M,z,b,p,O){var A,c,o=1+7*(z-1)+(7+b-p)%7+sz(M,p,O);return o<=0?c=FM(A=M-1)+o:o>FM(M)?(A=M+1,c=o-FM(M)):(A=M,c=o),{year:A,dayOfYear:c}}function Bz(M,z,b){var p,O,A=sz(M.year(),z,b),c=Math.floor((M.dayOfYear()-A-1)/7)+1;return c<1?p=c+Xz(O=M.year()-1,z,b):c>Xz(M.year(),z,b)?(p=c-Xz(M.year(),z,b),O=M.year()+1):(O=M.year(),p=c),{week:p,year:O}}function Xz(M,z,b){var p=sz(M,z,b),O=sz(M+1,z,b);return(FM(M)-p+O)/7}function lz(M){return Bz(M,this._week.dow,this._week.doy).week}H("w",["ww",2],"wo","week"),H("W",["WW",2],"Wo","isoWeek"),TM("w",eM,lM),TM("ww",eM,WM),TM("W",eM,lM),TM("WW",eM,WM),DM(["w","ww","W","WW"],function(M,z,b,p){z[p.substr(0,1)]=EM(M)});var hz={dow:0,doy:6};function Tz(){return this._week.dow}function mz(){return this._week.doy}function gz(M){var z=this.localeData().week(this);return null==M?z:this.add(7*(M-z),"d")}function Sz(M){var z=Bz(this,1,4).week;return null==M?z:this.add(7*(M-z),"d")}function _z(M,z){return"string"!=typeof M?M:isNaN(M)?"number"==typeof(M=z.weekdaysParse(M))?M:null:parseInt(M,10)}function Ez(M,z){return"string"==typeof M?z.weekdaysParse(M)%7||7:isNaN(M)?null:M}function Cz(M,z){return M.slice(z,7).concat(M.slice(0,z))}H("d",0,"do","day"),H("dd",0,0,function(M){return this.localeData().weekdaysMin(this,M)}),H("ddd",0,0,function(M){return this.localeData().weekdaysShort(this,M)}),H("dddd",0,0,function(M){return this.localeData().weekdays(this,M)}),H("e",0,0,"weekday"),H("E",0,0,"isoWeekday"),TM("d",eM),TM("e",eM),TM("E",eM),TM("dd",function(M,z){return z.weekdaysMinRegex(M)}),TM("ddd",function(M,z){return z.weekdaysShortRegex(M)}),TM("dddd",function(M,z){return z.weekdaysRegex(M)}),DM(["dd","ddd","dddd"],function(M,z,b,p){var O=b._locale.weekdaysParse(M,p,b._strict);null!=O?z.d=O:L(b).invalidWeekday=M}),DM(["d","e","E"],function(M,z,b,p){z[p]=EM(M)});var yz="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Dz="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),wz="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),kz=XM,vz=XM,Pz=XM;function Uz(M,z){var b=c(this._weekdays)?this._weekdays:this._weekdays[M&&!0!==M&&this._weekdays.isFormat.test(z)?"format":"standalone"];return!0===M?Cz(b,this._week.dow):M?b[M.day()]:b}function Hz(M){return!0===M?Cz(this._weekdaysShort,this._week.dow):M?this._weekdaysShort[M.day()]:this._weekdaysShort}function xz(M){return!0===M?Cz(this._weekdaysMin,this._week.dow):M?this._weekdaysMin[M.day()]:this._weekdaysMin}function Iz(M,z,b){var p,O,A,c=M.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],p=0;p<7;++p)A=i([2e3,1]).day(p),this._minWeekdaysParse[p]=this.weekdaysMin(A,"").toLocaleLowerCase(),this._shortWeekdaysParse[p]=this.weekdaysShort(A,"").toLocaleLowerCase(),this._weekdaysParse[p]=this.weekdays(A,"").toLocaleLowerCase();return b?"dddd"===z?-1!==(O=KM.call(this._weekdaysParse,c))?O:null:"ddd"===z?-1!==(O=KM.call(this._shortWeekdaysParse,c))?O:null:-1!==(O=KM.call(this._minWeekdaysParse,c))?O:null:"dddd"===z?-1!==(O=KM.call(this._weekdaysParse,c))||-1!==(O=KM.call(this._shortWeekdaysParse,c))||-1!==(O=KM.call(this._minWeekdaysParse,c))?O:null:"ddd"===z?-1!==(O=KM.call(this._shortWeekdaysParse,c))||-1!==(O=KM.call(this._weekdaysParse,c))||-1!==(O=KM.call(this._minWeekdaysParse,c))?O:null:-1!==(O=KM.call(this._minWeekdaysParse,c))||-1!==(O=KM.call(this._weekdaysParse,c))||-1!==(O=KM.call(this._shortWeekdaysParse,c))?O:null}function Yz(M,z,b){var p,O,A;if(this._weekdaysParseExact)return Iz.call(this,M,z,b);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),p=0;p<7;p++){if(O=i([2e3,1]).day(p),b&&!this._fullWeekdaysParse[p]&&(this._fullWeekdaysParse[p]=new RegExp("^"+this.weekdays(O,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[p]=new RegExp("^"+this.weekdaysShort(O,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[p]=new RegExp("^"+this.weekdaysMin(O,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[p]||(A="^"+this.weekdays(O,"")+"|^"+this.weekdaysShort(O,"")+"|^"+this.weekdaysMin(O,""),this._weekdaysParse[p]=new RegExp(A.replace(".",""),"i")),b&&"dddd"===z&&this._fullWeekdaysParse[p].test(M))return p;if(b&&"ddd"===z&&this._shortWeekdaysParse[p].test(M))return p;if(b&&"dd"===z&&this._minWeekdaysParse[p].test(M))return p;if(!b&&this._weekdaysParse[p].test(M))return p}}function Gz(M){if(!this.isValid())return null!=M?this:NaN;var z=ZM(this,"Day");return null!=M?(M=_z(M,this.localeData()),this.add(M-z,"d")):z}function jz(M){if(!this.isValid())return null!=M?this:NaN;var z=(this.day()+7-this.localeData()._week.dow)%7;return null==M?z:this.add(M-z,"d")}function Fz(M){if(!this.isValid())return null!=M?this:NaN;if(null!=M){var z=Ez(M,this.localeData());return this.day(this.day()%7?z:z-7)}return this.day()||7}function Kz(M){return this._weekdaysParseExact?(q(this,"_weekdaysRegex")||Jz.call(this),M?this._weekdaysStrictRegex:this._weekdaysRegex):(q(this,"_weekdaysRegex")||(this._weekdaysRegex=kz),this._weekdaysStrictRegex&&M?this._weekdaysStrictRegex:this._weekdaysRegex)}function Vz(M){return this._weekdaysParseExact?(q(this,"_weekdaysRegex")||Jz.call(this),M?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(q(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=vz),this._weekdaysShortStrictRegex&&M?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Qz(M){return this._weekdaysParseExact?(q(this,"_weekdaysRegex")||Jz.call(this),M?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(q(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Pz),this._weekdaysMinStrictRegex&&M?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Jz(){function M(M,z){return z.length-M.length}var z,b,p,O,A,c=[],o=[],q=[],W=[];for(z=0;z<7;z++)b=i([2e3,1]).day(z),p=SM(this.weekdaysMin(b,"")),O=SM(this.weekdaysShort(b,"")),A=SM(this.weekdays(b,"")),c.push(p),o.push(O),q.push(A),W.push(p),W.push(O),W.push(A);c.sort(M),o.sort(M),q.sort(M),W.sort(M),this._weekdaysRegex=new RegExp("^("+W.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+q.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+c.join("|")+")","i")}function Zz(){return this.hours()%12||12}function $z(){return this.hours()||24}function Mb(M,z){H(M,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),z)})}function zb(M,z){return z._meridiemParse}function bb(M){return"p"===(M+"").toLowerCase().charAt(0)}H("H",["HH",2],0,"hour"),H("h",["hh",2],0,Zz),H("k",["kk",2],0,$z),H("hmm",0,0,function(){return""+Zz.apply(this)+w(this.minutes(),2)}),H("hmmss",0,0,function(){return""+Zz.apply(this)+w(this.minutes(),2)+w(this.seconds(),2)}),H("Hmm",0,0,function(){return""+this.hours()+w(this.minutes(),2)}),H("Hmmss",0,0,function(){return""+this.hours()+w(this.minutes(),2)+w(this.seconds(),2)}),Mb("a",!0),Mb("A",!1),TM("a",zb),TM("A",zb),TM("H",eM,hM),TM("h",eM,lM),TM("k",eM,lM),TM("HH",eM,WM),TM("hh",eM,WM),TM("kk",eM,WM),TM("hmm",RM),TM("hmmss",iM),TM("Hmm",RM),TM("Hmmss",iM),yM(["H","HH"],HM),yM(["k","kk"],function(M,z,b){var p=EM(M);z[HM]=24===p?0:p}),yM(["a","A"],function(M,z,b){b._isPm=b._locale.isPM(M),b._meridiem=M}),yM(["h","hh"],function(M,z,b){z[HM]=EM(M),L(b).bigHour=!0}),yM("hmm",function(M,z,b){var p=M.length-2;z[HM]=EM(M.substr(0,p)),z[xM]=EM(M.substr(p)),L(b).bigHour=!0}),yM("hmmss",function(M,z,b){var p=M.length-4,O=M.length-2;z[HM]=EM(M.substr(0,p)),z[xM]=EM(M.substr(p,2)),z[IM]=EM(M.substr(O)),L(b).bigHour=!0}),yM("Hmm",function(M,z,b){var p=M.length-2;z[HM]=EM(M.substr(0,p)),z[xM]=EM(M.substr(p))}),yM("Hmmss",function(M,z,b){var p=M.length-4,O=M.length-2;z[HM]=EM(M.substr(0,p)),z[xM]=EM(M.substr(p,2)),z[IM]=EM(M.substr(O))});var pb=/[ap]\.?m?\.?/i,Ob=JM("Hours",!0);function Ab(M,z,b){return M>11?b?"pm":"PM":b?"am":"AM"}var cb,ob={calendar:y,longDateFormat:j,invalidDate:K,ordinal:Q,dayOfMonthOrdinalParse:J,relativeTime:$,months:Oz,monthsShort:Az,week:hz,weekdays:yz,weekdaysMin:wz,weekdaysShort:Dz,meridiemParse:pb},qb={},Wb={};function db(M,z){var b,p=Math.min(M.length,z.length);for(b=0;b<p;b+=1)if(M[b]!==z[b])return b;return p}function ab(M){return M?M.toLowerCase().replace("_","-"):M}function nb(M){for(var z,b,p,O,A=0;A<M.length;){for(z=(O=ab(M[A]).split("-")).length,b=(b=ab(M[A+1]))?b.split("-"):null;z>0;){if(p=Rb(O.slice(0,z).join("-")))return p;if(b&&b.length>=z&&db(O,b)>=z-1)break;z--}A++}return cb}function eb(M){return!(!M||!M.match("^[^/\\\\]*$"))}function Rb(z){var p=null;if(void 0===qb[z]&&M&&M.exports&&eb(z))try{p=cb._abbr,b(137)("./"+z),ib(p)}catch(M){qb[z]=null}return qb[z]}function ib(M,z){var b;return M&&((b=d(z)?fb(M):rb(M,z))?cb=b:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+M+" not found. Did you forget to load it?")),cb._abbr}function rb(M,z){if(null!==z){var b,p=ob;if(z.abbr=M,null!=qb[M])g("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),p=qb[M]._config;else if(null!=z.parentLocale)if(null!=qb[z.parentLocale])p=qb[z.parentLocale]._config;else{if(null==(b=Rb(z.parentLocale)))return Wb[z.parentLocale]||(Wb[z.parentLocale]=[]),Wb[z.parentLocale].push({name:M,config:z}),null;p=b._config}return qb[M]=new C(E(p,z)),Wb[M]&&Wb[M].forEach(function(M){rb(M.name,M.config)}),ib(M),qb[M]}return delete qb[M],null}function Lb(M,z){if(null!=z){var b,p,O=ob;null!=qb[M]&&null!=qb[M].parentLocale?qb[M].set(E(qb[M]._config,z)):(null!=(p=Rb(M))&&(O=p._config),z=E(O,z),null==p&&(z.abbr=M),(b=new C(z)).parentLocale=qb[M],qb[M]=b),ib(M)}else null!=qb[M]&&(null!=qb[M].parentLocale?(qb[M]=qb[M].parentLocale,M===ib()&&ib(M)):null!=qb[M]&&delete qb[M]);return qb[M]}function fb(M){var z;if(M&&M._locale&&M._locale._abbr&&(M=M._locale._abbr),!M)return cb;if(!c(M)){if(z=Rb(M))return z;M=[M]}return nb(M)}function tb(){return T(qb)}function ub(M){var z,b=M._a;return b&&-2===L(M).overflow&&(z=b[PM]<0||b[PM]>11?PM:b[UM]<1||b[UM]>pz(b[vM],b[PM])?UM:b[HM]<0||b[HM]>24||24===b[HM]&&(0!==b[xM]||0!==b[IM]||0!==b[YM])?HM:b[xM]<0||b[xM]>59?xM:b[IM]<0||b[IM]>59?IM:b[YM]<0||b[YM]>999?YM:-1,L(M)._overflowDayOfYear&&(z<vM||z>UM)&&(z=UM),L(M)._overflowWeeks&&-1===z&&(z=GM),L(M)._overflowWeekday&&-1===z&&(z=jM),L(M).overflow=z),M}var sb=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Nb=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Bb=/Z|[+-]\d\d(?::?\d\d)?/,Xb=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],lb=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],hb=/^\/?Date\((-?\d+)/i,Tb=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,mb={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function gb(M){var z,b,p,O,A,c,o=M._i,q=sb.exec(o)||Nb.exec(o),W=Xb.length,d=lb.length;if(q){for(L(M).iso=!0,z=0,b=W;z<b;z++)if(Xb[z][1].exec(q[1])){O=Xb[z][0],p=!1!==Xb[z][2];break}if(null==O)return void(M._isValid=!1);if(q[3]){for(z=0,b=d;z<b;z++)if(lb[z][1].exec(q[3])){A=(q[2]||" ")+lb[z][0];break}if(null==A)return void(M._isValid=!1)}if(!p&&null!=A)return void(M._isValid=!1);if(q[4]){if(!Bb.exec(q[4]))return void(M._isValid=!1);c="Z"}M._f=O+(A||"")+(c||""),Hb(M)}else M._isValid=!1}function Sb(M,z,b,p,O,A){var c=[_b(M),Az.indexOf(z),parseInt(b,10),parseInt(p,10),parseInt(O,10)];return A&&c.push(parseInt(A,10)),c}function _b(M){var z=parseInt(M,10);return z<=49?2e3+z:z<=999?1900+z:z}function Eb(M){return M.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function Cb(M,z,b){return!M||Dz.indexOf(M)===new Date(z[0],z[1],z[2]).getDay()||(L(b).weekdayMismatch=!0,b._isValid=!1,!1)}function yb(M,z,b){if(M)return mb[M];if(z)return 0;var p=parseInt(b,10),O=p%100;return(p-O)/100*60+O}function Db(M){var z,b=Tb.exec(Eb(M._i));if(b){if(z=Sb(b[4],b[3],b[2],b[5],b[6],b[7]),!Cb(b[1],z,M))return;M._a=z,M._tzm=yb(b[8],b[9],b[10]),M._d=uz.apply(null,M._a),M._d.setUTCMinutes(M._d.getUTCMinutes()-M._tzm),L(M).rfc2822=!0}else M._isValid=!1}function wb(M){var z=hb.exec(M._i);null===z?(gb(M),!1===M._isValid&&(delete M._isValid,Db(M),!1===M._isValid&&(delete M._isValid,M._strict?M._isValid=!1:O.createFromInputFallback(M)))):M._d=new Date(+z[1])}function kb(M,z,b){return null!=M?M:null!=z?z:b}function vb(M){var z=new Date(O.now());return M._useUTC?[z.getUTCFullYear(),z.getUTCMonth(),z.getUTCDate()]:[z.getFullYear(),z.getMonth(),z.getDate()]}function Pb(M){var z,b,p,O,A,c=[];if(!M._d){for(p=vb(M),M._w&&null==M._a[UM]&&null==M._a[PM]&&Ub(M),null!=M._dayOfYear&&(A=kb(M._a[vM],p[vM]),(M._dayOfYear>FM(A)||0===M._dayOfYear)&&(L(M)._overflowDayOfYear=!0),b=uz(A,0,M._dayOfYear),M._a[PM]=b.getUTCMonth(),M._a[UM]=b.getUTCDate()),z=0;z<3&&null==M._a[z];++z)M._a[z]=c[z]=p[z];for(;z<7;z++)M._a[z]=c[z]=null==M._a[z]?2===z?1:0:M._a[z];24===M._a[HM]&&0===M._a[xM]&&0===M._a[IM]&&0===M._a[YM]&&(M._nextDay=!0,M._a[HM]=0),M._d=(M._useUTC?uz:tz).apply(null,c),O=M._useUTC?M._d.getUTCDay():M._d.getDay(),null!=M._tzm&&M._d.setUTCMinutes(M._d.getUTCMinutes()-M._tzm),M._nextDay&&(M._a[HM]=24),M._w&&void 0!==M._w.d&&M._w.d!==O&&(L(M).weekdayMismatch=!0)}}function Ub(M){var z,b,p,O,A,c,o,q,W;null!=(z=M._w).GG||null!=z.W||null!=z.E?(A=1,c=4,b=kb(z.GG,M._a[vM],Bz(Vb(),1,4).year),p=kb(z.W,1),((O=kb(z.E,1))<1||O>7)&&(q=!0)):(A=M._locale._week.dow,c=M._locale._week.doy,W=Bz(Vb(),A,c),b=kb(z.gg,M._a[vM],W.year),p=kb(z.w,W.week),null!=z.d?((O=z.d)<0||O>6)&&(q=!0):null!=z.e?(O=z.e+A,(z.e<0||z.e>6)&&(q=!0)):O=A),p<1||p>Xz(b,A,c)?L(M)._overflowWeeks=!0:null!=q?L(M)._overflowWeekday=!0:(o=Nz(b,p,O,A,c),M._a[vM]=o.year,M._dayOfYear=o.dayOfYear)}function Hb(M){if(M._f!==O.ISO_8601)if(M._f!==O.RFC_2822){M._a=[],L(M).empty=!0;var z,b,p,A,c,o,q,W=""+M._i,d=W.length,a=0;for(q=(p=G(M._f,M._locale).match(k)||[]).length,z=0;z<q;z++)A=p[z],(b=(W.match(mM(A,M))||[])[0])&&((c=W.substr(0,W.indexOf(b))).length>0&&L(M).unusedInput.push(c),W=W.slice(W.indexOf(b)+b.length),a+=b.length),U[A]?(b?L(M).empty=!1:L(M).unusedTokens.push(A),wM(A,b,M)):M._strict&&!b&&L(M).unusedTokens.push(A);L(M).charsLeftOver=d-a,W.length>0&&L(M).unusedInput.push(W),M._a[HM]<=12&&!0===L(M).bigHour&&M._a[HM]>0&&(L(M).bigHour=void 0),L(M).parsedDateParts=M._a.slice(0),L(M).meridiem=M._meridiem,M._a[HM]=xb(M._locale,M._a[HM],M._meridiem),null!==(o=L(M).era)&&(M._a[vM]=M._locale.erasConvertYear(o,M._a[vM])),Pb(M),ub(M)}else Db(M);else gb(M)}function xb(M,z,b){var p;return null==b?z:null!=M.meridiemHour?M.meridiemHour(z,b):null!=M.isPM?((p=M.isPM(b))&&z<12&&(z+=12),p||12!==z||(z=0),z):z}function Ib(M){var z,b,p,O,A,c,o=!1,q=M._f.length;if(0===q)return L(M).invalidFormat=!0,void(M._d=new Date(NaN));for(O=0;O<q;O++)A=0,c=!1,z=N({},M),null!=M._useUTC&&(z._useUTC=M._useUTC),z._f=M._f[O],Hb(z),f(z)&&(c=!0),A+=L(z).charsLeftOver,A+=10*L(z).unusedTokens.length,L(z).score=A,o?A<p&&(p=A,b=z):(null==p||A<p||c)&&(p=A,b=z,c&&(o=!0));R(M,b||z)}function Yb(M){if(!M._d){var z=OM(M._i),b=void 0===z.day?z.date:z.day;M._a=e([z.year,z.month,b,z.hour,z.minute,z.second,z.millisecond],function(M){return M&&parseInt(M,10)}),Pb(M)}}function Gb(M){var z=new B(ub(jb(M)));return z._nextDay&&(z.add(1,"d"),z._nextDay=void 0),z}function jb(M){var z=M._i,b=M._f;return M._locale=M._locale||fb(M._l),null===z||void 0===b&&""===z?t({nullInput:!0}):("string"==typeof z&&(M._i=z=M._locale.preparse(z)),X(z)?new B(ub(z)):(n(z)?M._d=z:c(b)?Ib(M):b?Hb(M):Fb(M),f(M)||(M._d=null),M))}function Fb(M){var z=M._i;d(z)?M._d=new Date(O.now()):n(z)?M._d=new Date(z.valueOf()):"string"==typeof z?wb(M):c(z)?(M._a=e(z.slice(0),function(M){return parseInt(M,10)}),Pb(M)):o(z)?Yb(M):a(z)?M._d=new Date(z):O.createFromInputFallback(M)}function Kb(M,z,b,p,O){var A={};return!0!==z&&!1!==z||(p=z,z=void 0),!0!==b&&!1!==b||(p=b,b=void 0),(o(M)&&W(M)||c(M)&&0===M.length)&&(M=void 0),A._isAMomentObject=!0,A._useUTC=A._isUTC=O,A._l=b,A._i=M,A._f=z,A._strict=p,Gb(A)}function Vb(M,z,b,p){return Kb(M,z,b,p,!1)}O.createFromInputFallback=h("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(M){M._d=new Date(M._i+(M._useUTC?" UTC":""))}),O.ISO_8601=function(){},O.RFC_2822=function(){};var Qb=h("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var M=Vb.apply(null,arguments);return this.isValid()&&M.isValid()?M<this?this:M:t()}),Jb=h("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var M=Vb.apply(null,arguments);return this.isValid()&&M.isValid()?M>this?this:M:t()});function Zb(M,z){var b,p;if(1===z.length&&c(z[0])&&(z=z[0]),!z.length)return Vb();for(b=z[0],p=1;p<z.length;++p)z[p].isValid()&&!z[p][M](b)||(b=z[p]);return b}function $b(){return Zb("isBefore",[].slice.call(arguments,0))}function Mp(){return Zb("isAfter",[].slice.call(arguments,0))}var zp=function(){return Date.now?Date.now():+new Date},bp=["year","quarter","month","week","day","hour","minute","second","millisecond"];function pp(M){var z,b,p=!1,O=bp.length;for(z in M)if(q(M,z)&&(-1===KM.call(bp,z)||null!=M[z]&&isNaN(M[z])))return!1;for(b=0;b<O;++b)if(M[bp[b]]){if(p)return!1;parseFloat(M[bp[b]])!==EM(M[bp[b]])&&(p=!0)}return!0}function Op(){return this._isValid}function Ap(){return mp(NaN)}function cp(M){var z=OM(M),b=z.year||0,p=z.quarter||0,O=z.month||0,A=z.week||z.isoWeek||0,c=z.day||0,o=z.hour||0,q=z.minute||0,W=z.second||0,d=z.millisecond||0;this._isValid=pp(z),this._milliseconds=+d+1e3*W+6e4*q+1e3*o*60*60,this._days=+c+7*A,this._months=+O+3*p+12*b,this._data={},this._locale=fb(),this._bubble()}function op(M){return M instanceof cp}function qp(M){return M<0?-1*Math.round(-1*M):Math.round(M)}function Wp(M,z,b){var p,O=Math.min(M.length,z.length),A=Math.abs(M.length-z.length),c=0;for(p=0;p<O;p++)(b&&M[p]!==z[p]||!b&&EM(M[p])!==EM(z[p]))&&c++;return c+A}function dp(M,z){H(M,0,0,function(){var M=this.utcOffset(),b="+";return M<0&&(M=-M,b="-"),b+w(~~(M/60),2)+z+w(~~M%60,2)})}dp("Z",":"),dp("ZZ",""),TM("Z",NM),TM("ZZ",NM),yM(["Z","ZZ"],function(M,z,b){b._useUTC=!0,b._tzm=np(NM,M)});var ap=/([\+\-]|\d\d)/gi;function np(M,z){var b,p,O=(z||"").match(M);return null===O?null:0===(p=60*(b=((O[O.length-1]||[])+"").match(ap)||["-",0,0])[1]+EM(b[2]))?0:"+"===b[0]?p:-p}function ep(M,z){var b,p;return z._isUTC?(b=z.clone(),p=(X(M)||n(M)?M.valueOf():Vb(M).valueOf())-b.valueOf(),b._d.setTime(b._d.valueOf()+p),O.updateOffset(b,!1),b):Vb(M).local()}function Rp(M){return-Math.round(M._d.getTimezoneOffset())}function ip(M,z,b){var p,A=this._offset||0;if(!this.isValid())return null!=M?this:NaN;if(null!=M){if("string"==typeof M){if(null===(M=np(NM,M)))return this}else Math.abs(M)<16&&!b&&(M*=60);return!this._isUTC&&z&&(p=Rp(this)),this._offset=M,this._isUTC=!0,null!=p&&this.add(p,"m"),A!==M&&(!z||this._changeInProgress?Cp(this,mp(M-A,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,O.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?A:Rp(this)}function rp(M,z){return null!=M?("string"!=typeof M&&(M=-M),this.utcOffset(M,z),this):-this.utcOffset()}function Lp(M){return this.utcOffset(0,M)}function fp(M){return this._isUTC&&(this.utcOffset(0,M),this._isUTC=!1,M&&this.subtract(Rp(this),"m")),this}function tp(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var M=np(sM,this._i);null!=M?this.utcOffset(M):this.utcOffset(0,!0)}return this}function up(M){return!!this.isValid()&&(M=M?Vb(M).utcOffset():0,(this.utcOffset()-M)%60==0)}function sp(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Np(){if(!d(this._isDSTShifted))return this._isDSTShifted;var M,z={};return N(z,this),(z=jb(z))._a?(M=z._isUTC?i(z._a):Vb(z._a),this._isDSTShifted=this.isValid()&&Wp(z._a,M.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function Bp(){return!!this.isValid()&&!this._isUTC}function Xp(){return!!this.isValid()&&this._isUTC}function lp(){return!!this.isValid()&&this._isUTC&&0===this._offset}O.updateOffset=function(){};var hp=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Tp=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function mp(M,z){var b,p,O,A=M,c=null;return op(M)?A={ms:M._milliseconds,d:M._days,M:M._months}:a(M)||!isNaN(+M)?(A={},z?A[z]=+M:A.milliseconds=+M):(c=hp.exec(M))?(b="-"===c[1]?-1:1,A={y:0,d:EM(c[UM])*b,h:EM(c[HM])*b,m:EM(c[xM])*b,s:EM(c[IM])*b,ms:EM(qp(1e3*c[YM]))*b}):(c=Tp.exec(M))?(b="-"===c[1]?-1:1,A={y:gp(c[2],b),M:gp(c[3],b),w:gp(c[4],b),d:gp(c[5],b),h:gp(c[6],b),m:gp(c[7],b),s:gp(c[8],b)}):null==A?A={}:"object"==typeof A&&("from"in A||"to"in A)&&(O=_p(Vb(A.from),Vb(A.to)),(A={}).ms=O.milliseconds,A.M=O.months),p=new cp(A),op(M)&&q(M,"_locale")&&(p._locale=M._locale),op(M)&&q(M,"_isValid")&&(p._isValid=M._isValid),p}function gp(M,z){var b=M&&parseFloat(M.replace(",","."));return(isNaN(b)?0:b)*z}function Sp(M,z){var b={};return b.months=z.month()-M.month()+12*(z.year()-M.year()),M.clone().add(b.months,"M").isAfter(z)&&--b.months,b.milliseconds=+z-+M.clone().add(b.months,"M"),b}function _p(M,z){var b;return M.isValid()&&z.isValid()?(z=ep(z,M),M.isBefore(z)?b=Sp(M,z):((b=Sp(z,M)).milliseconds=-b.milliseconds,b.months=-b.months),b):{milliseconds:0,months:0}}function Ep(M,z){return function(b,p){var O;return null===p||isNaN(+p)||(g(z,"moment()."+z+"(period, number) is deprecated. Please use moment()."+z+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),O=b,b=p,p=O),Cp(this,mp(b,p),M),this}}function Cp(M,z,b,p){var A=z._milliseconds,c=qp(z._days),o=qp(z._months);M.isValid()&&(p=null==p||p,o&&ez(M,ZM(M,"Month")+o*b),c&&$M(M,"Date",ZM(M,"Date")+c*b),A&&M._d.setTime(M._d.valueOf()+A*b),p&&O.updateOffset(M,c||o))}mp.fn=cp.prototype,mp.invalid=Ap;var yp=Ep(1,"add"),Dp=Ep(-1,"subtract");function wp(M){return"string"==typeof M||M instanceof String}function kp(M){return X(M)||n(M)||wp(M)||a(M)||Pp(M)||vp(M)||null==M}function vp(M){var z,b,p=o(M)&&!W(M),O=!1,A=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],c=A.length;for(z=0;z<c;z+=1)b=A[z],O=O||q(M,b);return p&&O}function Pp(M){var z=c(M),b=!1;return z&&(b=0===M.filter(function(z){return!a(z)&&wp(M)}).length),z&&b}function Up(M){var z,b,p=o(M)&&!W(M),O=!1,A=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(z=0;z<A.length;z+=1)b=A[z],O=O||q(M,b);return p&&O}function Hp(M,z){var b=M.diff(z,"days",!0);return b<-6?"sameElse":b<-1?"lastWeek":b<0?"lastDay":b<1?"sameDay":b<2?"nextDay":b<7?"nextWeek":"sameElse"}function xp(M,z){1===arguments.length&&(arguments[0]?kp(arguments[0])?(M=arguments[0],z=void 0):Up(arguments[0])&&(z=arguments[0],M=void 0):(M=void 0,z=void 0));var b=M||Vb(),p=ep(b,this).startOf("day"),A=O.calendarFormat(this,p)||"sameElse",c=z&&(S(z[A])?z[A].call(this,b):z[A]);return this.format(c||this.localeData().calendar(A,this,Vb(b)))}function Ip(){return new B(this)}function Yp(M,z){var b=X(M)?M:Vb(M);return!(!this.isValid()||!b.isValid())&&("millisecond"===(z=pM(z)||"millisecond")?this.valueOf()>b.valueOf():b.valueOf()<this.clone().startOf(z).valueOf())}function Gp(M,z){var b=X(M)?M:Vb(M);return!(!this.isValid()||!b.isValid())&&("millisecond"===(z=pM(z)||"millisecond")?this.valueOf()<b.valueOf():this.clone().endOf(z).valueOf()<b.valueOf())}function jp(M,z,b,p){var O=X(M)?M:Vb(M),A=X(z)?z:Vb(z);return!!(this.isValid()&&O.isValid()&&A.isValid())&&("("===(p=p||"()")[0]?this.isAfter(O,b):!this.isBefore(O,b))&&(")"===p[1]?this.isBefore(A,b):!this.isAfter(A,b))}function Fp(M,z){var b,p=X(M)?M:Vb(M);return!(!this.isValid()||!p.isValid())&&("millisecond"===(z=pM(z)||"millisecond")?this.valueOf()===p.valueOf():(b=p.valueOf(),this.clone().startOf(z).valueOf()<=b&&b<=this.clone().endOf(z).valueOf()))}function Kp(M,z){return this.isSame(M,z)||this.isAfter(M,z)}function Vp(M,z){return this.isSame(M,z)||this.isBefore(M,z)}function Qp(M,z,b){var p,O,A;if(!this.isValid())return NaN;if(!(p=ep(M,this)).isValid())return NaN;switch(O=6e4*(p.utcOffset()-this.utcOffset()),z=pM(z)){case"year":A=Jp(this,p)/12;break;case"month":A=Jp(this,p);break;case"quarter":A=Jp(this,p)/3;break;case"second":A=(this-p)/1e3;break;case"minute":A=(this-p)/6e4;break;case"hour":A=(this-p)/36e5;break;case"day":A=(this-p-O)/864e5;break;case"week":A=(this-p-O)/6048e5;break;default:A=this-p}return b?A:_M(A)}function Jp(M,z){if(M.date()<z.date())return-Jp(z,M);var b=12*(z.year()-M.year())+(z.month()-M.month()),p=M.clone().add(b,"months");return-(b+(z-p<0?(z-p)/(p-M.clone().add(b-1,"months")):(z-p)/(M.clone().add(b+1,"months")-p)))||0}function Zp(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function $p(M){if(!this.isValid())return null;var z=!0!==M,b=z?this.clone().utc():this;return b.year()<0||b.year()>9999?Y(b,z?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):S(Date.prototype.toISOString)?z?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",Y(b,"Z")):Y(b,z?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function MO(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var M,z,b,p,O="moment",A="";return this.isLocal()||(O=0===this.utcOffset()?"moment.utc":"moment.parseZone",A="Z"),M="["+O+'("]',z=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",b="-MM-DD[T]HH:mm:ss.SSS",p=A+'[")]',this.format(M+z+b+p)}function zO(M){M||(M=this.isUtc()?O.defaultFormatUtc:O.defaultFormat);var z=Y(this,M);return this.localeData().postformat(z)}function bO(M,z){return this.isValid()&&(X(M)&&M.isValid()||Vb(M).isValid())?mp({to:this,from:M}).locale(this.locale()).humanize(!z):this.localeData().invalidDate()}function pO(M){return this.from(Vb(),M)}function OO(M,z){return this.isValid()&&(X(M)&&M.isValid()||Vb(M).isValid())?mp({from:this,to:M}).locale(this.locale()).humanize(!z):this.localeData().invalidDate()}function AO(M){return this.to(Vb(),M)}function cO(M){var z;return void 0===M?this._locale._abbr:(null!=(z=fb(M))&&(this._locale=z),this)}O.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",O.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var oO=h("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(M){return void 0===M?this.localeData():this.locale(M)});function qO(){return this._locale}var WO=1e3,dO=60*WO,aO=60*dO,nO=3506328*aO;function eO(M,z){return(M%z+z)%z}function RO(M,z,b){return M<100&&M>=0?new Date(M+400,z,b)-nO:new Date(M,z,b).valueOf()}function iO(M,z,b){return M<100&&M>=0?Date.UTC(M+400,z,b)-nO:Date.UTC(M,z,b)}function rO(M){var z,b;if(void 0===(M=pM(M))||"millisecond"===M||!this.isValid())return this;switch(b=this._isUTC?iO:RO,M){case"year":z=b(this.year(),0,1);break;case"quarter":z=b(this.year(),this.month()-this.month()%3,1);break;case"month":z=b(this.year(),this.month(),1);break;case"week":z=b(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":z=b(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":z=b(this.year(),this.month(),this.date());break;case"hour":z=this._d.valueOf(),z-=eO(z+(this._isUTC?0:this.utcOffset()*dO),aO);break;case"minute":z=this._d.valueOf(),z-=eO(z,dO);break;case"second":z=this._d.valueOf(),z-=eO(z,WO)}return this._d.setTime(z),O.updateOffset(this,!0),this}function LO(M){var z,b;if(void 0===(M=pM(M))||"millisecond"===M||!this.isValid())return this;switch(b=this._isUTC?iO:RO,M){case"year":z=b(this.year()+1,0,1)-1;break;case"quarter":z=b(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":z=b(this.year(),this.month()+1,1)-1;break;case"week":z=b(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":z=b(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":z=b(this.year(),this.month(),this.date()+1)-1;break;case"hour":z=this._d.valueOf(),z+=aO-eO(z+(this._isUTC?0:this.utcOffset()*dO),aO)-1;break;case"minute":z=this._d.valueOf(),z+=dO-eO(z,dO)-1;break;case"second":z=this._d.valueOf(),z+=WO-eO(z,WO)-1}return this._d.setTime(z),O.updateOffset(this,!0),this}function fO(){return this._d.valueOf()-6e4*(this._offset||0)}function tO(){return Math.floor(this.valueOf()/1e3)}function uO(){return new Date(this.valueOf())}function sO(){var M=this;return[M.year(),M.month(),M.date(),M.hour(),M.minute(),M.second(),M.millisecond()]}function NO(){var M=this;return{years:M.year(),months:M.month(),date:M.date(),hours:M.hours(),minutes:M.minutes(),seconds:M.seconds(),milliseconds:M.milliseconds()}}function BO(){return this.isValid()?this.toISOString():null}function XO(){return f(this)}function lO(){return R({},L(this))}function hO(){return L(this).overflow}function TO(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function mO(M,z){var b,p,A,c=this._eras||fb("en")._eras;for(b=0,p=c.length;b<p;++b)switch("string"==typeof c[b].since&&(A=O(c[b].since).startOf("day"),c[b].since=A.valueOf()),typeof c[b].until){case"undefined":c[b].until=1/0;break;case"string":A=O(c[b].until).startOf("day").valueOf(),c[b].until=A.valueOf()}return c}function gO(M,z,b){var p,O,A,c,o,q=this.eras();for(M=M.toUpperCase(),p=0,O=q.length;p<O;++p)if(A=q[p].name.toUpperCase(),c=q[p].abbr.toUpperCase(),o=q[p].narrow.toUpperCase(),b)switch(z){case"N":case"NN":case"NNN":if(c===M)return q[p];break;case"NNNN":if(A===M)return q[p];break;case"NNNNN":if(o===M)return q[p]}else if([A,c,o].indexOf(M)>=0)return q[p]}function SO(M,z){var b=M.since<=M.until?1:-1;return void 0===z?O(M.since).year():O(M.since).year()+(z-M.offset)*b}function _O(){var M,z,b,p=this.localeData().eras();for(M=0,z=p.length;M<z;++M){if(b=this.clone().startOf("day").valueOf(),p[M].since<=b&&b<=p[M].until)return p[M].name;if(p[M].until<=b&&b<=p[M].since)return p[M].name}return""}function EO(){var M,z,b,p=this.localeData().eras();for(M=0,z=p.length;M<z;++M){if(b=this.clone().startOf("day").valueOf(),p[M].since<=b&&b<=p[M].until)return p[M].narrow;if(p[M].until<=b&&b<=p[M].since)return p[M].narrow}return""}function CO(){var M,z,b,p=this.localeData().eras();for(M=0,z=p.length;M<z;++M){if(b=this.clone().startOf("day").valueOf(),p[M].since<=b&&b<=p[M].until)return p[M].abbr;if(p[M].until<=b&&b<=p[M].since)return p[M].abbr}return""}function yO(){var M,z,b,p,A=this.localeData().eras();for(M=0,z=A.length;M<z;++M)if(b=A[M].since<=A[M].until?1:-1,p=this.clone().startOf("day").valueOf(),A[M].since<=p&&p<=A[M].until||A[M].until<=p&&p<=A[M].since)return(this.year()-O(A[M].since).year())*b+A[M].offset;return this.year()}function DO(M){return q(this,"_erasNameRegex")||xO.call(this),M?this._erasNameRegex:this._erasRegex}function wO(M){return q(this,"_erasAbbrRegex")||xO.call(this),M?this._erasAbbrRegex:this._erasRegex}function kO(M){return q(this,"_erasNarrowRegex")||xO.call(this),M?this._erasNarrowRegex:this._erasRegex}function vO(M,z){return z.erasAbbrRegex(M)}function PO(M,z){return z.erasNameRegex(M)}function UO(M,z){return z.erasNarrowRegex(M)}function HO(M,z){return z._eraYearOrdinalRegex||tM}function xO(){var M,z,b,p,O,A=[],c=[],o=[],q=[],W=this.eras();for(M=0,z=W.length;M<z;++M)b=SM(W[M].name),p=SM(W[M].abbr),O=SM(W[M].narrow),c.push(b),A.push(p),o.push(O),q.push(b),q.push(p),q.push(O);this._erasRegex=new RegExp("^("+q.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+c.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+A.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+o.join("|")+")","i")}function IO(M,z){H(0,[M,M.length],0,z)}function YO(M){return QO.call(this,M,this.week(),this.weekday()+this.localeData()._week.dow,this.localeData()._week.dow,this.localeData()._week.doy)}function GO(M){return QO.call(this,M,this.isoWeek(),this.isoWeekday(),1,4)}function jO(){return Xz(this.year(),1,4)}function FO(){return Xz(this.isoWeekYear(),1,4)}function KO(){var M=this.localeData()._week;return Xz(this.year(),M.dow,M.doy)}function VO(){var M=this.localeData()._week;return Xz(this.weekYear(),M.dow,M.doy)}function QO(M,z,b,p,O){var A;return null==M?Bz(this,p,O).year:(z>(A=Xz(M,p,O))&&(z=A),JO.call(this,M,z,b,p,O))}function JO(M,z,b,p,O){var A=Nz(M,z,b,p,O),c=uz(A.year,0,A.dayOfYear);return this.year(c.getUTCFullYear()),this.month(c.getUTCMonth()),this.date(c.getUTCDate()),this}function ZO(M){return null==M?Math.ceil((this.month()+1)/3):this.month(3*(M-1)+this.month()%3)}H("N",0,0,"eraAbbr"),H("NN",0,0,"eraAbbr"),H("NNN",0,0,"eraAbbr"),H("NNNN",0,0,"eraName"),H("NNNNN",0,0,"eraNarrow"),H("y",["y",1],"yo","eraYear"),H("y",["yy",2],0,"eraYear"),H("y",["yyy",3],0,"eraYear"),H("y",["yyyy",4],0,"eraYear"),TM("N",vO),TM("NN",vO),TM("NNN",vO),TM("NNNN",PO),TM("NNNNN",UO),yM(["N","NN","NNN","NNNN","NNNNN"],function(M,z,b,p){var O=b._locale.erasParse(M,p,b._strict);O?L(b).era=O:L(b).invalidEra=M}),TM("y",tM),TM("yy",tM),TM("yyy",tM),TM("yyyy",tM),TM("yo",HO),yM(["y","yy","yyy","yyyy"],vM),yM(["yo"],function(M,z,b,p){var O;b._locale._eraYearOrdinalRegex&&(O=M.match(b._locale._eraYearOrdinalRegex)),b._locale.eraYearOrdinalParse?z[vM]=b._locale.eraYearOrdinalParse(M,O):z[vM]=parseInt(M,10)}),H(0,["gg",2],0,function(){return this.weekYear()%100}),H(0,["GG",2],0,function(){return this.isoWeekYear()%100}),IO("gggg","weekYear"),IO("ggggg","weekYear"),IO("GGGG","isoWeekYear"),IO("GGGGG","isoWeekYear"),TM("G",uM),TM("g",uM),TM("GG",eM,WM),TM("gg",eM,WM),TM("GGGG",LM,aM),TM("gggg",LM,aM),TM("GGGGG",fM,nM),TM("ggggg",fM,nM),DM(["gggg","ggggg","GGGG","GGGGG"],function(M,z,b,p){z[p.substr(0,2)]=EM(M)}),DM(["gg","GG"],function(M,z,b,p){z[p]=O.parseTwoDigitYear(M)}),H("Q",0,"Qo","quarter"),TM("Q",qM),yM("Q",function(M,z){z[PM]=3*(EM(M)-1)}),H("D",["DD",2],"Do","date"),TM("D",eM,lM),TM("DD",eM,WM),TM("Do",function(M,z){return M?z._dayOfMonthOrdinalParse||z._ordinalParse:z._dayOfMonthOrdinalParseLenient}),yM(["D","DD"],UM),yM("Do",function(M,z){z[UM]=EM(M.match(eM)[0])});var $O=JM("Date",!0);function MA(M){var z=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==M?z:this.add(M-z,"d")}H("DDD",["DDDD",3],"DDDo","dayOfYear"),TM("DDD",rM),TM("DDDD",dM),yM(["DDD","DDDD"],function(M,z,b){b._dayOfYear=EM(M)}),H("m",["mm",2],0,"minute"),TM("m",eM,hM),TM("mm",eM,WM),yM(["m","mm"],xM);var zA=JM("Minutes",!1);H("s",["ss",2],0,"second"),TM("s",eM,hM),TM("ss",eM,WM),yM(["s","ss"],IM);var bA,pA,OA=JM("Seconds",!1);for(H("S",0,0,function(){return~~(this.millisecond()/100)}),H(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),H(0,["SSS",3],0,"millisecond"),H(0,["SSSS",4],0,function(){return 10*this.millisecond()}),H(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),H(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),H(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),H(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),H(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),TM("S",rM,qM),TM("SS",rM,WM),TM("SSS",rM,dM),bA="SSSS";bA.length<=9;bA+="S")TM(bA,tM);function AA(M,z){z[YM]=EM(1e3*("0."+M))}for(bA="S";bA.length<=9;bA+="S")yM(bA,AA);function cA(){return this._isUTC?"UTC":""}function oA(){return this._isUTC?"Coordinated Universal Time":""}pA=JM("Milliseconds",!1),H("z",0,0,"zoneAbbr"),H("zz",0,0,"zoneName");var qA=B.prototype;function WA(M){return Vb(1e3*M)}function dA(){return Vb.apply(null,arguments).parseZone()}function aA(M){return M}qA.add=yp,qA.calendar=xp,qA.clone=Ip,qA.diff=Qp,qA.endOf=LO,qA.format=zO,qA.from=bO,qA.fromNow=pO,qA.to=OO,qA.toNow=AO,qA.get=Mz,qA.invalidAt=hO,qA.isAfter=Yp,qA.isBefore=Gp,qA.isBetween=jp,qA.isSame=Fp,qA.isSameOrAfter=Kp,qA.isSameOrBefore=Vp,qA.isValid=XO,qA.lang=oO,qA.locale=cO,qA.localeData=qO,qA.max=Jb,qA.min=Qb,qA.parsingFlags=lO,qA.set=zz,qA.startOf=rO,qA.subtract=Dp,qA.toArray=sO,qA.toObject=NO,qA.toDate=uO,qA.toISOString=$p,qA.inspect=MO,"undefined"!=typeof Symbol&&null!=Symbol.for&&(qA[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),qA.toJSON=BO,qA.toString=Zp,qA.unix=tO,qA.valueOf=fO,qA.creationData=TO,qA.eraName=_O,qA.eraNarrow=EO,qA.eraAbbr=CO,qA.eraYear=yO,qA.year=VM,qA.isLeapYear=QM,qA.weekYear=YO,qA.isoWeekYear=GO,qA.quarter=qA.quarters=ZO,qA.month=Rz,qA.daysInMonth=iz,qA.week=qA.weeks=gz,qA.isoWeek=qA.isoWeeks=Sz,qA.weeksInYear=KO,qA.weeksInWeekYear=VO,qA.isoWeeksInYear=jO,qA.isoWeeksInISOWeekYear=FO,qA.date=$O,qA.day=qA.days=Gz,qA.weekday=jz,qA.isoWeekday=Fz,qA.dayOfYear=MA,qA.hour=qA.hours=Ob,qA.minute=qA.minutes=zA,qA.second=qA.seconds=OA,qA.millisecond=qA.milliseconds=pA,qA.utcOffset=ip,qA.utc=Lp,qA.local=fp,qA.parseZone=tp,qA.hasAlignedHourOffset=up,qA.isDST=sp,qA.isLocal=Bp,qA.isUtcOffset=Xp,qA.isUtc=lp,qA.isUTC=lp,qA.zoneAbbr=cA,qA.zoneName=oA,qA.dates=h("dates accessor is deprecated. Use date instead.",$O),qA.months=h("months accessor is deprecated. Use month instead",Rz),qA.years=h("years accessor is deprecated. Use year instead",VM),qA.zone=h("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",rp),qA.isDSTShifted=h("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Np);var nA=C.prototype;function eA(M,z,b,p){var O=fb(),A=i().set(p,z);return O[b](A,M)}function RA(M,z,b){if(a(M)&&(z=M,M=void 0),M=M||"",null!=z)return eA(M,z,b,"month");var p,O=[];for(p=0;p<12;p++)O[p]=eA(M,p,b,"month");return O}function iA(M,z,b,p){"boolean"==typeof M?(a(z)&&(b=z,z=void 0),z=z||""):(b=z=M,M=!1,a(z)&&(b=z,z=void 0),z=z||"");var O,A=fb(),c=M?A._week.dow:0,o=[];if(null!=b)return eA(z,(b+c)%7,p,"day");for(O=0;O<7;O++)o[O]=eA(z,(O+c)%7,p,"day");return o}function rA(M,z){return RA(M,z,"months")}function LA(M,z){return RA(M,z,"monthsShort")}function fA(M,z,b){return iA(M,z,b,"weekdays")}function tA(M,z,b){return iA(M,z,b,"weekdaysShort")}function uA(M,z,b){return iA(M,z,b,"weekdaysMin")}nA.calendar=D,nA.longDateFormat=F,nA.invalidDate=V,nA.ordinal=Z,nA.preparse=aA,nA.postformat=aA,nA.relativeTime=MM,nA.pastFuture=zM,nA.set=_,nA.eras=mO,nA.erasParse=gO,nA.erasConvertYear=SO,nA.erasAbbrRegex=wO,nA.erasNameRegex=DO,nA.erasNarrowRegex=kO,nA.months=Wz,nA.monthsShort=dz,nA.monthsParse=nz,nA.monthsRegex=Lz,nA.monthsShortRegex=rz,nA.week=lz,nA.firstDayOfYear=mz,nA.firstDayOfWeek=Tz,nA.weekdays=Uz,nA.weekdaysMin=xz,nA.weekdaysShort=Hz,nA.weekdaysParse=Yz,nA.weekdaysRegex=Kz,nA.weekdaysShortRegex=Vz,nA.weekdaysMinRegex=Qz,nA.isPM=bb,nA.meridiem=Ab,ib("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(M){var z=M%10;return M+(1===EM(M%100/10)?"th":1===z?"st":2===z?"nd":3===z?"rd":"th")}}),O.lang=h("moment.lang is deprecated. Use moment.locale instead.",ib),O.langData=h("moment.langData is deprecated. Use moment.localeData instead.",fb);var sA=Math.abs;function NA(){var M=this._data;return this._milliseconds=sA(this._milliseconds),this._days=sA(this._days),this._months=sA(this._months),M.milliseconds=sA(M.milliseconds),M.seconds=sA(M.seconds),M.minutes=sA(M.minutes),M.hours=sA(M.hours),M.months=sA(M.months),M.years=sA(M.years),this}function BA(M,z,b,p){var O=mp(z,b);return M._milliseconds+=p*O._milliseconds,M._days+=p*O._days,M._months+=p*O._months,M._bubble()}function XA(M,z){return BA(this,M,z,1)}function lA(M,z){return BA(this,M,z,-1)}function hA(M){return M<0?Math.floor(M):Math.ceil(M)}function TA(){var M,z,b,p,O,A=this._milliseconds,c=this._days,o=this._months,q=this._data;return A>=0&&c>=0&&o>=0||A<=0&&c<=0&&o<=0||(A+=864e5*hA(gA(o)+c),c=0,o=0),q.milliseconds=A%1e3,M=_M(A/1e3),q.seconds=M%60,z=_M(M/60),q.minutes=z%60,b=_M(z/60),q.hours=b%24,c+=_M(b/24),o+=O=_M(mA(c)),c-=hA(gA(O)),p=_M(o/12),o%=12,q.days=c,q.months=o,q.years=p,this}function mA(M){return 4800*M/146097}function gA(M){return 146097*M/4800}function SA(M){if(!this.isValid())return NaN;var z,b,p=this._milliseconds;if("month"===(M=pM(M))||"quarter"===M||"year"===M)switch(z=this._days+p/864e5,b=this._months+mA(z),M){case"month":return b;case"quarter":return b/3;case"year":return b/12}else switch(z=this._days+Math.round(gA(this._months)),M){case"week":return z/7+p/6048e5;case"day":return z+p/864e5;case"hour":return 24*z+p/36e5;case"minute":return 1440*z+p/6e4;case"second":return 86400*z+p/1e3;case"millisecond":return Math.floor(864e5*z)+p;default:throw new Error("Unknown unit "+M)}}function _A(M){return function(){return this.as(M)}}var EA=_A("ms"),CA=_A("s"),yA=_A("m"),DA=_A("h"),wA=_A("d"),kA=_A("w"),vA=_A("M"),PA=_A("Q"),UA=_A("y"),HA=EA;function xA(){return mp(this)}function IA(M){return M=pM(M),this.isValid()?this[M+"s"]():NaN}function YA(M){return function(){return this.isValid()?this._data[M]:NaN}}var GA=YA("milliseconds"),jA=YA("seconds"),FA=YA("minutes"),KA=YA("hours"),VA=YA("days"),QA=YA("months"),JA=YA("years");function ZA(){return _M(this.days()/7)}var $A=Math.round,Mc={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function zc(M,z,b,p,O){return O.relativeTime(z||1,!!b,M,p)}function bc(M,z,b,p){var O=mp(M).abs(),A=$A(O.as("s")),c=$A(O.as("m")),o=$A(O.as("h")),q=$A(O.as("d")),W=$A(O.as("M")),d=$A(O.as("w")),a=$A(O.as("y")),n=A<=b.ss&&["s",A]||A<b.s&&["ss",A]||c<=1&&["m"]||c<b.m&&["mm",c]||o<=1&&["h"]||o<b.h&&["hh",o]||q<=1&&["d"]||q<b.d&&["dd",q];return null!=b.w&&(n=n||d<=1&&["w"]||d<b.w&&["ww",d]),(n=n||W<=1&&["M"]||W<b.M&&["MM",W]||a<=1&&["y"]||["yy",a])[2]=z,n[3]=+M>0,n[4]=p,zc.apply(null,n)}function pc(M){return void 0===M?$A:"function"==typeof M&&($A=M,!0)}function Oc(M,z){return void 0!==Mc[M]&&(void 0===z?Mc[M]:(Mc[M]=z,"s"===M&&(Mc.ss=z-1),!0))}function Ac(M,z){if(!this.isValid())return this.localeData().invalidDate();var b,p,O=!1,A=Mc;return"object"==typeof M&&(z=M,M=!1),"boolean"==typeof M&&(O=M),"object"==typeof z&&(A=Object.assign({},Mc,z),null!=z.s&&null==z.ss&&(A.ss=z.s-1)),p=bc(this,!O,A,b=this.localeData()),O&&(p=b.pastFuture(+this,p)),b.postformat(p)}var cc=Math.abs;function oc(M){return(M>0)-(M<0)||+M}function qc(){if(!this.isValid())return this.localeData().invalidDate();var M,z,b,p,O,A,c,o,q=cc(this._milliseconds)/1e3,W=cc(this._days),d=cc(this._months),a=this.asSeconds();return a?(M=_M(q/60),z=_M(M/60),q%=60,M%=60,b=_M(d/12),d%=12,p=q?q.toFixed(3).replace(/\.?0+$/,""):"",O=a<0?"-":"",A=oc(this._months)!==oc(a)?"-":"",c=oc(this._days)!==oc(a)?"-":"",o=oc(this._milliseconds)!==oc(a)?"-":"",O+"P"+(b?A+b+"Y":"")+(d?A+d+"M":"")+(W?c+W+"D":"")+(z||M||q?"T":"")+(z?o+z+"H":"")+(M?o+M+"M":"")+(q?o+p+"S":"")):"P0D"}var Wc=cp.prototype;return Wc.isValid=Op,Wc.abs=NA,Wc.add=XA,Wc.subtract=lA,Wc.as=SA,Wc.asMilliseconds=EA,Wc.asSeconds=CA,Wc.asMinutes=yA,Wc.asHours=DA,Wc.asDays=wA,Wc.asWeeks=kA,Wc.asMonths=vA,Wc.asQuarters=PA,Wc.asYears=UA,Wc.valueOf=HA,Wc._bubble=TA,Wc.clone=xA,Wc.get=IA,Wc.milliseconds=GA,Wc.seconds=jA,Wc.minutes=FA,Wc.hours=KA,Wc.days=VA,Wc.weeks=ZA,Wc.months=QA,Wc.years=JA,Wc.humanize=Ac,Wc.toISOString=qc,Wc.toString=qc,Wc.toJSON=qc,Wc.locale=cO,Wc.localeData=qO,Wc.toIsoString=h("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",qc),Wc.lang=oO,H("X",0,0,"unix"),H("x",0,0,"valueOf"),TM("x",uM),TM("X",BM),yM("X",function(M,z,b){b._d=new Date(1e3*parseFloat(M))}),yM("x",function(M,z,b){b._d=new Date(EM(M))}),O.version="2.30.1",A(Vb),O.fn=qA,O.min=$b,O.max=Mp,O.now=zp,O.utc=i,O.unix=WA,O.months=rA,O.isDate=n,O.locale=ib,O.invalid=t,O.duration=mp,O.isMoment=X,O.weekdays=fA,O.parseZone=dA,O.localeData=fb,O.isDuration=op,O.monthsShort=LA,O.weekdaysMin=uA,O.defineLocale=rb,O.updateLocale=Lb,O.locales=tb,O.weekdaysShort=tA,O.normalizeUnits=pM,O.relativeTimeRounding=pc,O.relativeTimeThreshold=Oc,O.calendarFormat=Hp,O.prototype=qA,O.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},O}()},639:function(M,z,b){var p,O,A;!function(c,o){"use strict";M.exports?M.exports=o(b(93)):(O=[b(93)],void 0===(A="function"==typeof(p=o)?p.apply(z,O):p)||(M.exports=A))}(0,function(M){"use strict";void 0===M.version&&M.default&&(M=M.default);var z,b={},p={},O={},A={},c={};M&&"string"==typeof M.version||g("Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/");var o=M.version.split("."),q=+o[0],W=+o[1];function d(M){return M>96?M-87:M>64?M-29:M-48}function a(M){var z=0,b=M.split("."),p=b[0],O=b[1]||"",A=1,c=0,o=1;for(45===M.charCodeAt(0)&&(z=1,o=-1);z<p.length;z++)c=60*c+d(p.charCodeAt(z));for(z=0;z<O.length;z++)A/=60,c+=d(O.charCodeAt(z))*A;return c*o}function n(M){for(var z=0;z<M.length;z++)M[z]=a(M[z])}function e(M,z){var b,p=[];for(b=0;b<z.length;b++)p[b]=M[z[b]];return p}function R(M){var z=M.split("|"),b=z[2].split(" "),p=z[3].split(""),O=z[4].split(" ");return n(b),n(p),n(O),function(M,z){for(var b=0;b<z;b++)M[b]=Math.round((M[b-1]||0)+6e4*M[b]);M[z-1]=1/0}(O,p.length),{name:z[0],abbrs:e(z[1].split(" "),p),offsets:e(b,p),untils:O,population:0|z[5]}}function i(M){M&&this._set(R(M))}function r(M,z){this.name=M,this.zones=z}function L(M){var z=M.toTimeString(),b=z.match(/\([a-z ]+\)/i);"GMT"===(b=b&&b[0]?(b=b[0].match(/[A-Z]/g))?b.join(""):void 0:(b=z.match(/[A-Z]{3,5}/g))?b[0]:void 0)&&(b=void 0),this.at=+M,this.abbr=b,this.offset=M.getTimezoneOffset()}function f(M){this.zone=M,this.offsetScore=0,this.abbrScore=0}function t(M,z){for(var b,p;p=6e4*((z.at-M.at)/12e4|0);)(b=new L(new Date(M.at+p))).offset===M.offset?M=b:z=b;return M}function u(M,z){return M.offsetScore!==z.offsetScore?M.offsetScore-z.offsetScore:M.abbrScore!==z.abbrScore?M.abbrScore-z.abbrScore:M.zone.population!==z.zone.population?z.zone.population-M.zone.population:z.zone.name.localeCompare(M.zone.name)}function s(M,z){var b,p;for(n(z),b=0;b<z.length;b++)p=z[b],c[p]=c[p]||{},c[p][M]=!0}function N(M){var z,b,p,O,o=M.length,q={},W=[],d={};for(z=0;z<o;z++)if(p=M[z].offset,!d.hasOwnProperty(p)){for(b in O=c[p]||{})O.hasOwnProperty(b)&&(q[b]=!0);d[p]=!0}for(z in q)q.hasOwnProperty(z)&&W.push(A[z]);return W}function B(){try{var M=Intl.DateTimeFormat().resolvedOptions().timeZone;if(M&&M.length>3){var z=A[X(M)];if(z)return z;g("Moment Timezone found "+M+" from the Intl api, but did not have that data loaded.")}}catch(M){}var b,p,O,c=function(){var M,z,b,p,O=(new Date).getFullYear()-2,A=new L(new Date(O,0,1)),c=A.offset,o=[A];for(p=1;p<48;p++)(b=new Date(O,p,1).getTimezoneOffset())!==c&&(M=t(A,z=new L(new Date(O,p,1))),o.push(M),o.push(new L(new Date(M.at+6e4))),A=z,c=b);for(p=0;p<4;p++)o.push(new L(new Date(O+p,0,1))),o.push(new L(new Date(O+p,6,1)));return o}(),o=c.length,q=N(c),W=[];for(p=0;p<q.length;p++){for(b=new f(h(q[p]),o),O=0;O<o;O++)b.scoreOffsetAt(c[O]);W.push(b)}return W.sort(u),W.length>0?W[0].zone.name:void 0}function X(M){return(M||"").toLowerCase().replace(/\//g,"_")}function l(M){var z,p,O,c;for("string"==typeof M&&(M=[M]),z=0;z<M.length;z++)c=X(p=(O=M[z].split("|"))[0]),b[c]=M[z],A[c]=p,s(c,O[2].split(" "))}function h(M,z){M=X(M);var O,c=b[M];return c instanceof i?c:"string"==typeof c?(c=new i(c),b[M]=c,c):p[M]&&z!==h&&(O=h(p[M],h))?((c=b[M]=new i)._set(O),c.name=A[M],c):null}function T(M){var z,b,O,c;for("string"==typeof M&&(M=[M]),z=0;z<M.length;z++)O=X((b=M[z].split("|"))[0]),c=X(b[1]),p[O]=c,A[O]=b[0],p[c]=O,A[c]=b[1]}function m(M){var z="X"===M._f||"x"===M._f;return!(!M._a||void 0!==M._tzm||z)}function g(M){"undefined"!=typeof console&&"function"==typeof console.error&&console.error(M)}function S(z){var b,p=Array.prototype.slice.call(arguments,0,-1),O=arguments[arguments.length-1],A=M.utc.apply(null,p);return!M.isMoment(z)&&m(A)&&(b=h(O))&&A.add(b.parse(A),"minutes"),A.tz(O),A}(q<2||2===q&&W<6)&&g("Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js "+M.version+". See momentjs.com"),i.prototype={_set:function(M){this.name=M.name,this.abbrs=M.abbrs,this.untils=M.untils,this.offsets=M.offsets,this.population=M.population},_index:function(M){var z;if((z=function(M,z){var b,p=z.length;if(M<z[0])return 0;if(p>1&&z[p-1]===1/0&&M>=z[p-2])return p-1;if(M>=z[p-1])return-1;for(var O=0,A=p-1;A-O>1;)z[b=Math.floor((O+A)/2)]<=M?O=b:A=b;return A}(+M,this.untils))>=0)return z},countries:function(){var M=this.name;return Object.keys(O).filter(function(z){return-1!==O[z].zones.indexOf(M)})},parse:function(M){var z,b,p,O,A=+M,c=this.offsets,o=this.untils,q=o.length-1;for(O=0;O<q;O++)if(z=c[O],b=c[O+1],p=c[O?O-1:O],z<b&&S.moveAmbiguousForward?z=b:z>p&&S.moveInvalidForward&&(z=p),A<o[O]-6e4*z)return c[O];return c[q]},abbr:function(M){return this.abbrs[this._index(M)]},offset:function(M){return g("zone.offset has been deprecated in favor of zone.utcOffset"),this.offsets[this._index(M)]},utcOffset:function(M){return this.offsets[this._index(M)]}},f.prototype.scoreOffsetAt=function(M){this.offsetScore+=Math.abs(this.zone.utcOffset(M.at)-M.offset),this.zone.abbr(M.at).replace(/[^A-Z]/g,"")!==M.abbr&&this.abbrScore++},S.version="0.6.0",S.dataVersion="",S._zones=b,S._links=p,S._names=A,S._countries=O,S.add=l,S.link=T,S.load=function(M){l(M.zones),T(M.links),function(M){var z,b,p,A;if(M&&M.length)for(z=0;z<M.length;z++)b=(A=M[z].split("|"))[0].toUpperCase(),p=A[1].split(" "),O[b]=new r(b,p)}(M.countries),S.dataVersion=M.version},S.zone=h,S.zoneExists=function M(z){return M.didShowError||(M.didShowError=!0,g("moment.tz.zoneExists('"+z+"') has been deprecated in favor of !moment.tz.zone('"+z+"')")),!!h(z)},S.guess=function(M){return z&&!M||(z=B()),z},S.names=function(){var M,z=[];for(M in A)A.hasOwnProperty(M)&&(b[M]||b[p[M]])&&A[M]&&z.push(A[M]);return z.sort()},S.Zone=i,S.unpack=R,S.unpackBase60=a,S.needsOffset=m,S.moveInvalidForward=!0,S.moveAmbiguousForward=!1,S.countries=function(){return Object.keys(O)},S.zonesForCountry=function(M,z){var b;if(b=(b=M).toUpperCase(),!(M=O[b]||null))return null;var p=M.zones.sort();return z?p.map(function(M){return{name:M,offset:h(M).utcOffset(new Date)}}):p};var _,E=M.fn;function C(M){return function(){return this._z?this._z.abbr(this):M.call(this)}}function y(M){return function(){return this._z=null,M.apply(this,arguments)}}M.tz=S,M.defaultZone=null,M.updateOffset=function(z,b){var p,O=M.defaultZone;if(void 0===z._z&&(O&&m(z)&&!z._isUTC&&z.isValid()&&(z._d=M.utc(z._a)._d,z.utc().add(O.parse(z),"minutes")),z._z=O),z._z)if(p=z._z.utcOffset(z),Math.abs(p)<16&&(p/=60),void 0!==z.utcOffset){var A=z._z;z.utcOffset(-p,b),z._z=A}else z.zone(p,b)},E.tz=function(z,b){if(z){if("string"!=typeof z)throw new Error("Time zone name must be a string, got "+z+" ["+typeof z+"]");return this._z=h(z),this._z?M.updateOffset(this,b):g("Moment Timezone has no data for "+z+". See http://momentjs.com/timezone/docs/#/data-loading/."),this}if(this._z)return this._z.name},E.zoneName=C(E.zoneName),E.zoneAbbr=C(E.zoneAbbr),E.utc=y(E.utc),E.local=y(E.local),E.utcOffset=(_=E.utcOffset,function(){return arguments.length>0&&(this._z=null),_.apply(this,arguments)}),M.tz.setDefault=function(z){return(q<2||2===q&&W<9)&&g("Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js "+M.version+"."),M.defaultZone=z?h(z):null,M};var D=M.momentProperties;return"[object Array]"===Object.prototype.toString.call(D)?(D.push("_z"),D.push("_a")):D&&(D._z=null),M})},681:M=>{"use strict";M.exports=JSON.parse('{"version":"2025b","zones":["Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5","Africa/Nairobi|LMT +0230 EAT +0245|-2r.g -2u -30 -2J|012132|-2ua2r.g N6nV.g 3Fbu h1cu dzbJ|47e5","Africa/Algiers|LMT PMT WET WEST CET CEST|-c.c -9.l 0 -10 -10 -20|01232323232323232454542423234542324|-3bQ0c.c MDA2.P cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5","Africa/Lagos|LMT GMT +0030 WAT|-d.z 0 -u -10|01023|-2B40d.z 7iod.z dnXK.p dLzH.z|17e6","Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4","Africa/Maputo|LMT CAT|-2a.i -20|01|-2sw2a.i|26e5","Africa/Cairo|LMT EET EEST|-25.9 -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBC5.9 1AQM5.9 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0 kSp0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0|15e6","Africa/Casablanca|LMT +00 +01|u.k 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|32e5","Africa/Ceuta|LMT WET WEST CET CEST|l.g 0 -10 -10 -20|0121212121212121212121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2M0M0 GdX0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|85e3","Africa/El_Aaiun|LMT -01 +00 +01|Q.M 10 0 -10|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|20e4","Africa/Johannesburg|LMT SAST SAST SAST|-1Q -1u -20 -30|0123232|-39EpQ qTcm 1Ajdu 1cL0 1cN0 1cL0|84e5","Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|012121212121212121212121212121212131|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 PeX0|","Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5","Africa/Monrovia|LMT MMT MMT GMT|H.8 H.8 I.u 0|0123|-3ygng.Q 1usM0 28G01.m|11e5","Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5","Africa/Sao_Tome|LMT LMT GMT WAT|-q.U A.J 0 -10|01232|-3tooq.U 18aoq.U 4i6N0 2q00|","Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5","Africa/Tunis|LMT PMT CET CEST|-E.I -9.l -10 -20|01232323232323232323232323232323232|-3zO0E.I 1cBAv.n 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5","Africa/Windhoek|LMT +0130 SAST SAST CAT WAT|-18.o -1u -20 -30 -20 -10|012324545454545454545454545454545454545454545454545454|-39Ep8.o qTbC.o 1Ajdu 1cL0 1SqL0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4","America/Adak|LMT LMT NST NWT NPT BST BDT AHST HST HDT|-cd.m bK.C b0 a0 a0 b0 a0 a0 a0 90|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVzf.p 1EX1d.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326","America/Anchorage|LMT LMT AST AWT APT AHST AHDT YST AKST AKDT|-e0.o 9X.A a0 90 90 a0 90 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVxs.n 1EX20.o 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4","America/Puerto_Rico|LMT AST AWT APT|4o.p 40 30 30|01231|-2Qi7z.z 1IUbz.z 7XT0 iu0|24e5","America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4","America/Argentina/Buenos_Aires|LMT CMT -04 -03 -02|3R.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343434343|-331U6.c 125cn pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0|","America/Argentina/Catamarca|LMT CMT -04 -03 -02|4n.8 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243432343|-331TA.Q 125bR.E pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Cordoba|LMT CMT -04 -03 -02|4g.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243434343|-331TH.c 125c0 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0|","America/Argentina/Jujuy|LMT CMT -04 -03 -02|4l.c 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232434343|-331TC.M 125bT.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0|","America/Argentina/La_Rioja|LMT CMT -04 -03 -02|4r.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tw.A 125bN.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Mendoza|LMT CMT -04 -03 -02|4z.g 4g.M 40 30 20|012323232323232323232323232323232323232323234343423232432343|-331To.I 125bF.w pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0|","America/Argentina/Rio_Gallegos|LMT CMT -04 -03 -02|4A.Q 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tn.8 125bD.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Salta|LMT CMT -04 -03 -02|4l.E 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342434343|-331TC.k 125bT.8 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0|","America/Argentina/San_Juan|LMT CMT -04 -03 -02|4y.4 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tp.U 125bG.I pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0|","America/Argentina/San_Luis|LMT CMT -04 -03 -02|4p.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232323432323|-331Ty.A 125bP.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0|","America/Argentina/Tucuman|LMT CMT -04 -03 -02|4k.Q 4g.M 40 30 20|01232323232323232323232323232323232323232323434343424343234343|-331TD.8 125bT.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0|","America/Argentina/Ushuaia|LMT CMT -04 -03 -02|4x.c 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tq.M 125bH.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0|","America/Asuncion|LMT AMT -04 -03|3O.E 3O.E 40 30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-3eLw9.k 1FGo0 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0|28e5","America/Panama|LMT CMT EST|5i.8 5j.A 50|012|-3eLuF.Q Iy01.s|15e5","America/Bahia_Banderas|LMT MST CST MDT CDT|71 70 60 60 50|01213121313131313131313131313131313142424242424242424242424242|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 otX0 2bmP0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|84e3","America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5","America/Barbados|LMT AST ADT -0330|3W.t 40 30 3u|0121213121212121|-2m4k1.v 1eAN1.v RB0 1Bz0 Op0 1rb0 11d0 1jJc0 IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4","America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5","America/Belize|LMT CST -0530 CWT CPT CDT|5Q.M 60 5u 50 50 50|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121215151|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu Rcu 7Bt0 Ni0 4nd0 Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu e9Au qn0 lxB0 mn0|57e3","America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2","America/Bogota|LMT BMT -05 -04|4U.g 4U.g 50 40|01232|-3sTv3.I 1eIo0 38yo3.I 1PX0|90e5","America/Boise|LMT PST PDT MST MWT MPT MDT|7I.N 80 70 70 60 60 60|01212134536363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-3tFE0 1nEe0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4","America/Cambridge_Bay|-00 MST MWT MPT MDT CST CDT EST|0 70 60 60 60 60 50 50|012314141414141414141414141414141414141414141414141414141414567541414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-21Jc0 RO90 8x20 ix0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2","America/Campo_Grande|LMT -04 -03|3C.s 40 30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4","America/Cancun|LMT CST EST CDT EDT|5L.4 60 50 50 40|01213132431313131313131313131313131313131312|-1UQG0 2q3C0 2tx0 wgP0 1lb0 14p0 1lb0 14o0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4","America/Caracas|LMT CMT -0430 -04|4r.I 4r.E 4u 40|012323|-3eLvw.g ROnX.U 28KM2.k 1IwOu kqo0|29e5","America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3","America/Chicago|LMT CST CDT EST CWT CPT|5O.A 60 50 50 50 50|012121212121212121212121212121212121213121212121214512121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5","America/Chihuahua|LMT MST CST MDT CDT|74.k 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4","America/Ciudad_Juarez|LMT MST CST MDT CDT|75.U 70 60 60 50|01213124242313131313131313131313131313131313131313131313131321313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 cm0 EP0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Costa_Rica|LMT SJMT CST CDT|5A.d 5A.d 60 50|01232323232|-3eLun.L 1fyo0 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5","America/Coyhaique|LMT SMT -05 -04 -03|4M.g 4G.J 50 40 30|012131323232323232323434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvb.I MJbS.t fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0|","America/Phoenix|LMT MST MDT MWT|7s.i 70 60 60|012121313121|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5","America/Cuiaba|LMT -04 -03|3I.k 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|54e4","America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8","America/Dawson_Creek|LMT PST PDT PWT PPT MST|80.U 80 70 70 70 70|01213412121212121212121212121212121212121212121212121212125|-3tofX.4 1nspX.4 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3","America/Dawson|LMT YST YDT YWT YPT YDDT PST PDT MST|9h.E 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeG.k GWpG.k 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|13e2","America/Denver|LMT MST MDT MWT MPT|6X.U 70 60 60 60|012121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFF0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5","America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|0123425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 JxX1 SMX 1cN0 1cL0 aW10 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5","America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|0121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 XQp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5","America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3","America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5","America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 4Q00 8mp0 8lz0 SN0 1cL0 pHB0 83r0 AU0 5MN0 1Rz0 38N0 Wn0 1qP0 11z0 1o10 11z0 3NA0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5","America/Fort_Nelson|LMT PST PDT PWT PPT MST|8a.L 80 70 70 70 70|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121215|-3tofN.d 1nspN.d 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2","America/Fort_Wayne|LMT CST CDT CWT CPT EST EDT|5I.C 60 50 50 50 50 40|0121212134121212121212121212151565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5","America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3","America/Godthab|LMT -03 -02 -01|3q.U 30 20 10|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 2so0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e3","America/Goose_Bay|LMT NST NDT NST NDT NWT NPT AST ADT ADDT|41.E 3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|0121343434343434356343434343434343434343434343434343434343437878787878787878787878787878787878787878787879787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-3tojW.k 1nspt.c 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2","America/Grand_Turk|LMT KMT EST EDT AST|4I.w 57.a 50 40 40|01232323232323232323232323232323232323232323232323232323232323232323232323243232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLvf.s RK0m.C 2HHBQ.O 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 7jA0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2","America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5","America/Guayaquil|LMT QMT -05 -04|5j.k 5e 50 40|01232|-3eLuE.E 1DNzS.E 2uILK rz0|27e5","America/Guyana|LMT -04 -0345 -03|3Q.D 40 3J 30|01231|-2mf87.l 8Hc7.l 2r7bJ Ey0f|80e4","America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4","America/Havana|LMT HMT CST CDT|5t.s 5t.A 50 40|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLuu.w 1qx00.8 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5","America/Hermosillo|LMT MST CST MDT|7n.Q 70 60 60|01213121313131|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 otX0 2bmP0 1lb0 14p0 1lb0 14p0 1lb0|64e4","America/Indiana/Knox|LMT CST CDT CWT CPT EST|5K.u 60 50 50 50 50|01212134121212121212121212121212121212151212121212121212121212121212121212121212121212121252121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Marengo|LMT CST CDT CWT CPT EST EDT|5J.n 60 50 50 50 50 40|01212134121212121212121215656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Petersburg|LMT CST CDT CWT CPT EST EDT|5N.7 60 50 50 50 50 40|012121341212121212121212121215121212121212121212121252125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Tell_City|LMT CST CDT CWT CPT EST EDT|5L.3 60 50 50 50 50 40|012121341212121212121212121512165652121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 8wn0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Vevay|LMT CST CDT CWT CPT EST EDT|5E.g 60 50 50 50 50 40|0121213415656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Vincennes|LMT CST CDT CWT CPT EST EDT|5O.7 60 50 50 50 50 40|012121341212121212121212121212121565652125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Winamac|LMT CST CDT CWT CPT EST EDT|5K.p 60 50 50 50 50 40|012121341212121212121212121212121212121565652165656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Inuvik|-00 PST PDT MDT MST|0 80 70 60 70|01212121212121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-FnA0 L3K0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2","America/Iqaluit|-00 EWT EPT EST EDT CST CDT|0 40 40 50 40 60 50|0123434343434343434343434343434343434343434343434343434343456343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-16K00 7nX0 iv0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2","America/Jamaica|LMT KMT EST EDT|57.a 57.a 50 40|01232323232323232323232|-3eLuQ.O RK00 2uM1Q.O 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4","America/Juneau|LMT LMT PST PWT PPT PDT YDT YST AKST AKDT|-f2.j 8V.F 80 70 70 70 80 90 90 80|0123425252525252525252525252625252578989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVwq.s 1EX12.j 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3","America/Kentucky/Louisville|LMT CST CDT CWT CPT EST EDT|5H.2 60 50 50 50 50 40|01212121213412121212121212121212121212565656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 1nX1 e0X 9vd0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Kentucky/Monticello|LMT CST CDT CWT CPT EST EDT|5D.o 60 50 50 50 50 40|01212134121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/La_Paz|LMT CMT BST -04|4w.A 4w.A 3w.A 40|0123|-3eLvr.o 1FIo0 13b0|19e5","America/Lima|LMT LMT -05 -04|58.c 58.A 50 40|01232323232323232|-3eLuP.M JcM0.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6","America/Los_Angeles|LMT PST PDT PWT PPT|7Q.W 80 70 70 70|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFE0 1nEe0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6","America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4","America/Managua|LMT MMT CST EST CDT|5J.8 5J.c 60 50 50|01232424232324242|-3eLue.Q 1Mhc0.4 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5","America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5","America/Martinique|LMT FFMT AST ADT|44.k 44.k 40 30|01232|-3eLvT.E PTA0 2LPbT.E 19X0|39e4","America/Matamoros|LMT CST CDT|6u 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4","America/Mazatlan|LMT MST CST MDT|75.E 70 60 60|01213121313131313131313131313131313131313131313131313131313131|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 otX0 2bmP0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|44e4","America/Menominee|LMT CST CDT CWT CPT EST|5O.r 60 50 50 50 50|012121341212152121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3pdG9.x 1jce9.x 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2","America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131|-1UQG0 2q3C0 24n0 wG10 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|11e5","America/Metlakatla|LMT LMT PST PWT PPT PDT AKST AKDT|-fd.G 8K.i 80 70 70 70 90 80|0123425252525252525252525252525252526767672676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwf.5 1EX1d.G 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2","America/Mexico_City|LMT MST CST MDT CDT CWT|6A.A 70 60 60 50 50|012131242425242424242424242424242424242424242424242424242424242424242|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6","America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mxUf.k 2LHcf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2","America/Moncton|LMT EST AST ADT AWT APT|4j.8 50 40 30 30 30|0123232323232323232323245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3txvE.Q J4ME.Q CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3","America/Monterrey|LMT MST CST MDT CDT|6F.g 70 60 60 50|012131242424242424242424242424242424242424242424242424242424242|-1UQG0 dep0 8lz0 16p0 11z0 1dd0 2gmp0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|41e5","America/Montevideo|LMT MMT -04 -03 -0330 -0230 -02 -0130|3I.P 3I.P 40 30 3u 2u 20 1u|012343434343434343434343435353636353636375363636363636363636363636363636363636363636363|-2tRUf.9 sVc0 8jcf.9 1db0 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1fAu 1cLu 1o0u 11zu NAu 3jXu zXu Dq0u 19Xu pcu jz0 cm10 19X0 6tB0 1fbu 3o0u jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5","America/Toronto|LMT EST EDT EWT EPT|5h.w 50 40 40 40|012121212121212121212121212121212121212121212123412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-32B6G.s UFdG.s 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1qL0 11B0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5","America/New_York|LMT EST EDT EWT EPT|4U.2 50 40 40 40|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFH0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6","America/Nome|LMT LMT NST NWT NPT BST BDT YST AKST AKDT|-cW.m b1.C b0 a0 a0 b0 a0 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVyu.p 1EX1W.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2","America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2","America/North_Dakota/Beulah|LMT MST MDT MWT MPT CST CDT|6L.7 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/North_Dakota/Center|LMT MST MDT MWT MPT CST CDT|6J.c 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/North_Dakota/New_Salem|LMT MST MDT MWT MPT CST CDT|6J.D 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Ojinaga|LMT MST CST MDT CDT|6V.E 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 Rc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3","America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4","America/Port-au-Prince|LMT PPMT EST EDT|4N.k 4N 50 40|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLva.E 15RLX.E 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4","America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4","America/Punta_Arenas|LMT SMT -05 -04 -03|4H.E 4G.J 50 40 30|01213132323232323232343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvg.k MJbX.5 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|","America/Winnipeg|LMT CST CDT CWT CPT|6s.A 60 50 50 50|0121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3kLtv.o 1a3bv.o WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4","America/Rankin_Inlet|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-vDc0 Bjk0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2","America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5","America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4","America/Resolute|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-SnA0 103I0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229","America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4","America/Santiago|LMT SMT -05 -04 -03|4G.J 4G.J 50 40 30|0121313232323232323432343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvh.f MJc0 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 hX0 1q10 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|62e5","America/Santo_Domingo|LMT SDMT EST EDT -0430 AST|4D.A 4E 50 40 4u 40|012324242424242525|-3eLvk.o 1Jic0.o 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5","America/Sao_Paulo|LMT -03 -02|36.s 30 20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6","America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|012132323232323232323232323232323232323232323232323232323232323232323232323232323232323232121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 2pA0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|452","America/Sitka|LMT LMT PST PWT PPT PDT YST AKST AKDT|-eW.L 91.d 80 70 70 70 90 90 80|0123425252525252525252525252525252567878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-48Pzs.L 1jVwu 1EX0W.L 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2","America/St_Johns|LMT NST NDT NST NDT NWT NPT NDDT|3u.Q 3u.Q 2u.Q 3u 2u 2u 2u 1u|012121212121212121212121212121212121213434343434343435634343434343434343434343434343434343434343434343434343434343434343434343434343434343437343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tokt.8 1l020 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4","America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3","America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5","America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656","America/Vancouver|LMT PST PDT PWT PPT|8c.s 80 70 70 70|01213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tofL.w 1nspL.w 1in0 UGp0 8x10 iy0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Whitehorse|LMT YST YDT YWT YPT YDDT PST PDT MST|90.c 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeX.M GWpX.M 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 LA0 ytd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|23e3","America/Yakutat|LMT LMT YST YWT YPT YDT AKST AKDT|-eF.5 9i.T 90 80 80 80 90 80|0123425252525252525252525252525252526767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwL.G 1EX1F.5 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642","Antarctica/Casey|-00 +08 +11|0 -80 -b0|012121212121212121|-2q00 1DjS0 T90 40P0 KL0 blz0 3m10 1o30 14k0 1kr0 12l0 1o01 14kX 1lf1 14kX 1lf1 13bX|10","Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70","Pacific/Port_Moresby|LMT PMMT +10|-9M.E -9M.w -a0|012|-3D8VM.E AvA0.8|25e4","Antarctica/Macquarie|-00 AEST AEDT|0 -a0 -b0|0121012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2OPc0 Fb40 1a00 4SK0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 3Co0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|1","Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60","Pacific/Auckland|LMT NZMT NZST NZST NZDT|-bD.4 -bu -cu -c0 -d0|012131313131313131313131313134343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-46jLD.4 2nEO9.4 Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5","Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|0121212121213121212121212121212121212121212121212121212121212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40","Antarctica/Rothera|-00 -03|0 30|01|gOo0|130","Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5","Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|40","Antarctica/Vostok|-00 +07 +05|0 -70 -50|01012|-tjA0 1rWh0 1Nj0 1aTv0|25","Europe/Berlin|LMT CET CEST CEMT|-R.s -10 -20 -30|012121212121212321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36RcR.s UbWR.s 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e5","Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|0123232323232323232323212323232323232323232323232321|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 L4m0|15e5","Asia/Amman|LMT EET EEST +03|-2n.I -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 LA0 1C00|25e5","Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3","Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4","Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4","Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4","Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|","Asia/Baghdad|LMT BMT +03 +04|-2V.E -2V.A -30 -40|0123232323232323232323232323232323232323232323232323232|-3eLCV.E 18ao0.4 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5","Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4","Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Asia/Bangkok|LMT BMT +07|-6G.4 -6G.4 -70|012|-3D8SG.4 1C000|15e6","Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|","Asia/Beirut|LMT EET EEST|-2m -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3D8Om 1BWom 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|22e5","Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4","Asia/Brunei|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|42e4","Asia/Kolkata|LMT HMT MMT IST +0630|-5R.s -5R.k -5l.a -5u -6u|01234343|-4Fg5R.s BKo0.8 1rDcw.a 1r2LP.a 1un0 HB0 7zX0|15e6","Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4","Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5","Asia/Shanghai|LMT CST CDT|-85.H -80 -90|012121212121212121212121212121|-2M0U5.H Iuo5.H 18n0 OjB0 Rz0 11d0 1wL0 A10 8HX0 1G10 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 aL0 1tU30 Rb0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6","Asia/Colombo|LMT MMT +0530 +06 +0630|-5j.o -5j.w -5u -60 -6u|012342432|-3D8Rj.o 13inX.Q 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5","Asia/Dhaka|LMT HMT +0630 +0530 +06 +07|-61.E -5R.k -6u -5u -60 -70|01232454|-3eLG1.E 26008.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6","Asia/Damascus|LMT EET EEST +03|-2p.c -20 -30 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5","Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le80 1dnX0 1nfA0 Xld0|19e4","Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5","Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4","Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|","Asia/Gaza|LMT EET EEST IST IDT|-2h.Q -20 -30 -20 -30|0121212121212121212121212121212121234343434343434343434343434343431212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCh.Q 1Azeh.Q MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 1cN0 1cL0 1a10 1fz0 17d0 1in0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1lb0 14p0 1in0 17d0 1cL0 1cN0 19X0 1fB0 14n0 jB0 2L0 11B0 WL0 gN0 8n0 11B0 TX0 gN0 bb0 11B0 On0 jB0 dX0 11B0 Lz0 gN0 mn0 WN0 IL0 gN0 pb0 WN0 Db0 jB0 rX0 11B0 xz0 gN0 xz0 11B0 rX0 jB0 An0 11B0 pb0 gN0 IL0 WN0 mn0 gN0 Lz0 WN0 gL0 jB0 On0 11B0 bb0 gN0 TX0 11B0 5z0 jB0 WL0 11B0 2L0 jB0 11z0 1ip0 19X0 1cN0 1cL0 17d0 1in0 14p0 1lb0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1nX0 14p0 1in0 17d0 1fz0 1a10 19X0 1fB0 17b0 gN0 2L0 WN0 14n0 gN0 5z0 WN0 WL0 jB0 8n0 11B0 Rb0 gN0 dX0 11B0 Lz0 jB0 gL0 11B0 IL0 jB0 mn0 WN0 FX0 gN0 rX0 WN0 An0 jB0 uL0 11B0 uL0 gN0 An0 11B0 rX0 gN0 Db0 11B0 mn0 jB0 FX0 11B0 jz0 gN0 On0 WN0 dX0 jB0 Rb0 WN0 bb0 jB0 TX0 11B0 5z0 gN0 11z0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|18e5","Asia/Hebron|LMT EET EEST IST IDT|-2k.n -20 -30 -20 -30|012121212121212121212121212121212123434343434343434343434343434343121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCk.n 1Azek.n MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 1cN0 1cL0 1a10 1fz0 17d0 1in0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1lb0 14p0 1in0 17d0 1cL0 1cN0 19X0 1fB0 14n0 jB0 2L0 11B0 WL0 gN0 8n0 11B0 TX0 gN0 bb0 11B0 On0 jB0 dX0 11B0 Lz0 gN0 mn0 WN0 IL0 gN0 pb0 WN0 Db0 jB0 rX0 11B0 xz0 gN0 xz0 11B0 rX0 jB0 An0 11B0 pb0 gN0 IL0 WN0 mn0 gN0 Lz0 WN0 gL0 jB0 On0 11B0 bb0 gN0 TX0 11B0 5z0 jB0 WL0 11B0 2L0 jB0 11z0 1ip0 19X0 1cN0 1cL0 17d0 1in0 14p0 1lb0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1nX0 14p0 1in0 17d0 1fz0 1a10 19X0 1fB0 17b0 gN0 2L0 WN0 14n0 gN0 5z0 WN0 WL0 jB0 8n0 11B0 Rb0 gN0 dX0 11B0 Lz0 jB0 gL0 11B0 IL0 jB0 mn0 WN0 FX0 gN0 rX0 WN0 An0 jB0 uL0 11B0 uL0 gN0 An0 11B0 rX0 gN0 Db0 11B0 mn0 jB0 FX0 11B0 jz0 gN0 On0 WN0 dX0 jB0 Rb0 WN0 bb0 jB0 TX0 11B0 5z0 gN0 11z0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|25e4","Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.u -76.u -70 -80 -90|0123423232|-2yC76.u bK00 1h7b6.u 5lz0 18o0 3Oq0 k5c0 aVX0 BAM0|90e5","Asia/Hong_Kong|LMT HKT HKST HKWT JST|-7A.G -80 -90 -8u -90|0123412121212121212121212121212121212121212121212121212121212121212121|-2CFH0 1taO0 Hc0 xUu 9tBu 11z0 1tDu Rc0 1wo0 11A0 1cM0 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5","Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|LMT IMT +07 +08 +09|-6V.5 -6V.5 -70 -80 -90|012343434343434343434343234343434343434343434343434343434343434343|-3D8SV.5 1Bxc0 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Europe/Istanbul|LMT IMT EET EEST +03 +04|-1T.Q -1U.U -20 -30 -30 -40|01232323232323232323232323232323232323232323232345423232323232323232323232323232323232323232323232323232323232323234|-3D8NT.Q 1ePXW.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSN0 CL0 mp0 1Vz0 1gN0 8yn0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1ip0 19X0 1ip0 17b0 qdB0 38L0 1jd0 Tz0 l6O0 11A0 WN0 1qL0 TB0 1tX0 U10 1tz0 11B0 1in0 17d0 z90 cne0 pb0 2Cp0 1800 14o0 1dc0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|LMT BMT +0720 +0730 +09 +08 WIB|-77.c -77.c -7k -7u -90 -80 -70|012343536|-49jH7.c 2hiLL.c luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6","Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4","Asia/Jerusalem|LMT JMT IST IDT IDDT|-2k.S -2k.E -20 -30 -40|012323232323232432323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8Ok.S 1wvA0.e SyOk.E MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 3LA0 Eo0 oo0 1co0 1dA0 16o0 10M0 1jc0 1tA0 14o0 1cM0 1a00 11A0 1Nc0 Ao0 1Nc0 Ao0 1Ko0 LA0 1o00 WM0 EQK0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0|81e4","Asia/Kabul|LMT +04 +0430|-4A.M -40 -4u|012|-3eLEA.M 2dTcA.M|46e5","Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4","Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6","Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5","Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5","Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2","Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5","Asia/Kuala_Lumpur|LMT SMT +07 +0720 +0730 +09 +08|-6T.p -6T.p -70 -7k -7u -90 -80|01234546|-2M0ST.p aIM0 17anT.p l5XE 17bO 8Fyu 1so10|71e5","Asia/Macau|LMT CST +09 +10 CDT|-7y.a -80 -90 -a0 -90|012323214141414141414141414141414141414141414141414141414141414141414141|-2CFHy.a 1uqKy.a PX0 1kn0 15B0 11b0 4Qq0 1oM0 11c0 1ko0 1u00 11A0 1cM0 11c0 1o00 11A0 1o00 11A0 1oo0 1400 1o00 11A0 1o00 U00 1tA0 U00 1wo0 Rc0 1wru U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cK0 1cO0 1cK0 1cO0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|57e4","Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3","Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5","Asia/Manila|LMT LMT PST PDT JST|fU.8 -83.Q -80 -90 -90|012323432323232|-54m83.Q 2d8A3.Q 1urM0 un0 bW10 nb0 7qo0 1MM0 klB0 lz0 TwN0 1bb0 uNB0 rz0|24e6","Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|32e4","Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4","Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5","Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5","Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4","Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4","Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|012313|-2um8n 97XR 1lTzu 2Onc0 6BA0|29e5","Asia/Qostanay|LMT +04 +05 +06|-4e.s -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc4e.s eUoe.s 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 Mv90|","Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|01232323232323232323232323232323232323232323232|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 zQl0|73e4","Asia/Rangoon|LMT RMT +0630 +09|-6o.L -6o.L -6u -90|01232|-3D8So.L 1BnA0 SmnS.L 7j9u|48e5","Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4","Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4","Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -a0 -9u|012343434343151515151515134343|-2um8r.Q 97XV.Q 1m1zu 6CM0 Fz0 1kN0 14n0 1kN0 14L0 1zd0 On0 69B0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6","Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2","Asia/Taipei|LMT CST JST CDT|-86 -80 -90 -90|012131313131313131313131313131313131313131|-30bk6 1FDc6 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5","Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5","Asia/Tbilisi|LMT TBMT +03 +04 +05|-2X.b -2X.b -30 -40 -50|01234343434343434343434323232343434343434343434323|-3D8OX.b 1LUM0 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5","Asia/Tehran|LMT TMT +0330 +0430 +04 +05|-3p.I -3p.I -3u -4u -40 -50|012345423232323232323232323232323232323232323232323232323232323232323232|-2btDp.I Llc0 1FHaT.I 1pc0 120u Rc0 Dc0 1iMu JX0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6","Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3","Asia/Tokyo|LMT JST JDT|-9i.X -90 -a0|0121212121|-3jE90 2qSo0 Rc0 1lc0 14o0 1zc0 Oo0 1zc0 Oo0|38e6","Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5","Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2","Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4","Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5","Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5","Atlantic/Azores|LMT HMT -02 -01 +00 WET WEST|1G.E 1S.w 20 10 0 0 -10|012323232323232323232323232323232323232323232343234323432343232323232323232323232323232323232323232323434343434343434343434356434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tomh.k 18aoh.k aPX0 Sp0 M00 1vb0 SN0 1vb0 SN0 1vb0 Td0 1vb0 SN0 1vb0 6600 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1uo0 1c00 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 CT90 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 Ap0 An0 wo0 Eo0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|25e4","Atlantic/Bermuda|LMT BMT BST AST ADT|4j.i 4j.i 3j.i 40 30|0121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3eLvE.G 16mo0 1bb0 1i10 11X0 ru30 thbE.G 1PX0 11B0 1tz0 Rd0 1zb0 Op0 1zb0 3I10 Lz0 1EN0 FX0 1HB0 FX0 1Kp0 Db0 1Kp0 Db0 1Kp0 FX0 93d0 11z0 GAp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3","Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4","Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2ldW0 1eEo0 7zX0 1djf0|50e4","Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|49e3","Atlantic/Madeira|LMT FMT -01 +00 +01 WET WEST|17.A 17.A 10 0 -10 0 -10|01232323232323232323232323232323232323232323234323432343234323232323232323232323232323232323232323232356565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tomQ.o 18anQ.o aPX0 Sp0 M00 1vb0 SN0 1vb0 SN0 1vb0 Td0 1vb0 SN0 1vb0 6600 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1uo0 1c00 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 BJ90 1a00 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e4","Atlantic/South_Georgia|LMT -02|2q.8 20|01|-3eLxx.Q|30","Atlantic/Stanley|LMT SMT -04 -03 -02|3P.o 3P.o 40 30 20|0123232323232323434323232323232323232323232323232323232323232323232323|-3eLw8.A S200 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2","Australia/Sydney|LMT AEST AEDT|-a4.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oW4.Q RlC4.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5","Australia/Adelaide|LMT ACST ACST ACDT|-9e.k -90 -9u -au|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-32oVe.k ak0e.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5","Australia/Brisbane|LMT AEST AEDT|-ac.8 -a0 -b0|012121212121212121|-32Bmc.8 Ry2c.8 xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5","Australia/Broken_Hill|LMT AEST ACST ACST ACDT|-9p.M -a0 -90 -9u -au|0123434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-32oVp.M 3Lzp.M 6wp0 H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|18e3","Australia/Hobart|LMT AEST AEDT|-9N.g -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-3109N.g Pk1N.g 1a00 1qM0 Oo0 1zc0 Oo0 TAo0 yM0 1cM0 1cM0 1fA0 1a00 VfA0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|21e4","Australia/Darwin|LMT ACST ACST ACDT|-8H.k -90 -9u -au|01232323232|-32oUH.k ajXH.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00|12e4","Australia/Eucla|LMT +0845 +0945|-8z.s -8J -9J|01212121212121212121|-30nIz.s PkpO.s xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368","Australia/Lord_Howe|LMT AEST +1030 +1130 +11|-aA.k -a0 -au -bu -b0|01232323232424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424|-32oWA.k 3tzAA.k 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347","Australia/Lindeman|LMT AEST AEDT|-9T.U -a0 -b0|0121212121212121212121|-32BlT.U Ry1T.U xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10","Australia/Melbourne|LMT AEST AEDT|-9D.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oVD.Q RlBD.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|39e5","Australia/Perth|LMT AWST AWDT|-7H.o -80 -90|01212121212121212121|-30nHH.o PkpH.o xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5","Europe/Brussels|LMT BMT WET CET CEST WEST|-h.u -h.u 0 -10 -20 -10|012343434325252525252525252525252525252525252525252525434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8Mh.u u1Ah.u SO00 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|21e5","Pacific/Easter|LMT EMT -07 -06 -05|7h.s 7h.s 70 60 50|0123232323232323232323232323234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLsG.w 1HRc0 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|30e2","Europe/Athens|LMT AMT EET EEST CEST CET|-1y.Q -1y.Q -20 -30 -20 -10|0123234545232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-30SNy.Q OMM1 CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|35e5","Europe/Dublin|LMT DMT IST GMT BST IST|p.l p.l -y.D 0 -10 -10|012343434343435353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353|-3BHby.D 1ra20 Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g600 14o0 1wo0 17c0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Etc/GMT-0|GMT|0|0||","Etc/GMT-1|+01|-10|0||","Etc/GMT-10|+10|-a0|0||","Etc/GMT-11|+11|-b0|0||","Etc/GMT-12|+12|-c0|0||","Etc/GMT-13|+13|-d0|0||","Etc/GMT-14|+14|-e0|0||","Etc/GMT-2|+02|-20|0||","Etc/GMT-3|+03|-30|0||","Etc/GMT-4|+04|-40|0||","Etc/GMT-5|+05|-50|0||","Etc/GMT-6|+06|-60|0||","Etc/GMT-7|+07|-70|0||","Etc/GMT-8|+08|-80|0||","Etc/GMT-9|+09|-90|0||","Etc/GMT+1|-01|10|0||","Etc/GMT+10|-10|a0|0||","Etc/GMT+11|-11|b0|0||","Etc/GMT+12|-12|c0|0||","Etc/GMT+2|-02|20|0||","Etc/GMT+3|-03|30|0||","Etc/GMT+4|-04|40|0||","Etc/GMT+5|-05|50|0||","Etc/GMT+6|-06|60|0||","Etc/GMT+7|-07|70|0||","Etc/GMT+8|-08|80|0||","Etc/GMT+9|-09|90|0||","Etc/UTC|UTC|0|0||","Europe/Andorra|LMT WET CET CEST|-6.4 0 -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2M0M6.4 1Pnc6.4 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|79e3","Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|10e5","Europe/London|LMT GMT BST BDST|1.f 0 -10 -20|01212121212121212121212121212121212121212121212121232323232321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-4VgnW.J 2KHdW.J Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|10e6","Europe/Belgrade|LMT CET CEST|-1m -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3topm 2juLm 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Prague|LMT PMT CET CEST GMT|-V.I -V.I -10 -20 0|0123232323232323232423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4QbAV.I 1FDc0 XPaV.I 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 1qM0 11c0 mp0 xA0 mn0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|13e5","Europe/Bucharest|LMT BMT EET EEST|-1I.o -1I.o -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3awpI.o 1AU00 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|19e5","Europe/Budapest|LMT CET CEST|-1g.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3cK1g.k 124Lg.k 11d0 1iO0 11A0 1o00 11A0 1oo0 11c0 1lc0 17c0 O1V0 3Nf0 WM0 1fA0 1cM0 1cM0 1oJ0 1dd0 1020 1fX0 1cp0 1cM0 1cM0 1cM0 1fA0 1a00 bhy0 Rb0 1wr0 Rc0 1C00 LA0 1C00 LA0 SNW0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cO0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5","Europe/Zurich|LMT BMT CET CEST|-y.8 -t.K -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4HyMy.8 1Dw04.m 1SfAt.K 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|38e4","Europe/Chisinau|LMT CMT BMT EET EEST CEST CET MSK MSD|-1T.k -1T -1I.o -20 -30 -20 -10 -30 -40|0123434343434343434345656578787878787878787878434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8NT.k 1wNA0.k wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|67e4","Europe/Gibraltar|LMT GMT BST BDST CET CEST|l.o 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123232323232121232121212121212121212145454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-3BHbC.A 1ra1C.A Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|30e3","Europe/Helsinki|LMT HMT EET EEST|-1D.N -1D.N -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3H0ND.N 1Iu00 OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Kaliningrad|LMT CET CEST EET EEST MSK MSD +03|-1m -10 -20 -20 -30 -30 -40 -30|012121212121212343565656565656565654343434343434343434343434343434343434343434373|-36Rdm UbXm 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 390 7A0 1en0 12N0 1pbb0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4","Europe/Kiev|LMT KMT EET MSK CEST CET MSD EEST|-22.4 -22.4 -20 -30 -20 -10 -40 -30|01234545363636363636363636367272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-3D8O2.4 1LUM0 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o10 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|34e5","Europe/Kirov|LMT +03 +04 +05 MSD MSK MSK|-3i.M -30 -40 -50 -40 -30 -40|0123232323232323232454524545454545454545454545454545454545454565|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 2pz0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4","Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121212124121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2le00 aPX0 Sp0 M00 1vb0 SN0 1vb0 SN0 1vb0 Td0 1vb0 SN0 1vb0 6600 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1uo0 1c00 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 oiK0 1cM0 1cM0 1fB0 1cM0 1cM0 1cM0 1fA0 1a00 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Europe/Madrid|LMT WET WEST WEMT CET CEST|e.I 0 -10 -20 -10 -20|0121212121212121212321454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2M0M0 G5z0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|62e5","Europe/Malta|LMT CET CEST|-W.4 -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-35rcW.4 SXzW.4 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4","Europe/Minsk|LMT MMT EET MSK CEST CET MSD EEST +03|-1O.g -1O -20 -30 -20 -10 -40 -30 -30|012345454363636363636363636372727272727272727272727272727272727272728|-3D8NO.g 1LUM0.g eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5","Europe/Paris|LMT PMT WET WEST CEST CET WEMT|-9.l -9.l 0 -10 -20 -10 -20|01232323232323232323232323232323232323232323232323234545463654545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-3bQ09.l MDA0 cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|11e6","Europe/Moscow|LMT MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|01232434565756865656565656565656565698656565656565656565656565656565656565656a6|-3D8Ou.h 1sQM0 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6","Europe/Riga|LMT RMT LST EET MSK CEST CET MSD EEST|-1A.y -1A.y -2A.y -20 -30 -20 -10 -40 -30|0121213456565647474747474747474838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383|-3D8NA.y 1xde0 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|64e4","Europe/Rome|LMT RMT CET CEST|-N.U -N.U -10 -20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4aU0N.U 15snN.U T000 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|39e5","Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5","Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810|","Europe/Simferopol|LMT SMT EET MSK CEST CET MSD EEST MSK|-2g.o -2g -20 -30 -20 -10 -40 -30 -40|0123454543636363636363636363272727636363727272727272727272727272727272727283|-3D8Og.o 1LUM0.o eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eN0 1cM0 1cM0 1cM0 1cM0 dV0 WO0 1cM0 1cM0 1fy0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4","Europe/Sofia|LMT IMT EET CET CEST EEST|-1x.g -1U.U -20 -10 -20 -30|0123434325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-3D8Nx.g AiLA.k 1UFeU.U WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Tallinn|LMT TMT CET CEST EET MSK MSD EEST|-1D -1D -10 -20 -20 -30 -40 -30|0123214532323565656565656565657474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474|-3D8ND 1wI00 teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e4","Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4","Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|13e5","Europe/Vienna|LMT CET CEST|-15.l -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36Rd5.l UbX5.l 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1ao0 1co0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|18e5","Europe/Vilnius|LMT WMT KMT CET EET MSK CEST MSD EEST|-1F.g -1o -1z.A -10 -20 -30 -20 -40 -30|0123435636365757575757575757584848484848484848463648484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484|-3D8NF.g 1u5Ah.g 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4","Europe/Volgograd|LMT +03 +04 +05 MSD MSK MSK|-2V.E -30 -40 -50 -40 -30 -40|012323232323232324545452454545454545454545454545454545454545456525|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1fA0 1cM0 2pz0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 9Jd0 5gn0|10e5","Europe/Warsaw|LMT WMT CET CEST EET EEST|-1o -1o -10 -20 -20 -30|0123232345423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8No 1qDA0 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5","Pacific/Honolulu|LMT HST HDT HWT HPT HST|av.q au 9u 9u 9u a0|01213415|-3061s.y 1uMdW.y 8x0 lef0 8wWu iAu 46p0|37e4","Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2","Indian/Maldives|LMT MMT +05|-4S -4S -50|012|-3D8QS 3eLA0|35e4","Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4","Pacific/Kwajalein|LMT +11 +10 +09 -12 +12|-b9.k -b0 -a0 -90 c0 -c0|0123145|-2M0X9.k 1rDA9.k akp0 6Up0 12ry0 Wan0|14e3","Pacific/Chatham|LMT +1215 +1245 +1345|-cd.M -cf -cJ -dJ|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-46jMd.M 37RbW.M 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|600","Pacific/Apia|LMT LMT -1130 -11 -10 +14 +13|-cx.4 bq.U bu b0 a0 -e0 -d0|012343456565656565656565656|-38Fox.4 J1A0 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0|37e3","Pacific/Bougainville|LMT PMMT +10 +09 +11|-am.g -9M.w -a0 -90 -b0|012324|-3D8Wm.g AvAx.I 1TCLM.w 7CN0 2MQp0|18e4","Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|012121212121212121212121|-2l9nd.g 2uNXd.g Dc0 n610 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3","Pacific/Enderbury|-00 -12 -11 +13|0 c0 b0 -d0|0123|-1iIo0 1GsA0 B7X0|1","Pacific/Fakaofo|LMT -11 +13|bo.U b0 -d0|012|-2M0Az.4 4ufXz.4|483","Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|012121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 2hc0 bc0|88e4","Pacific/Tarawa|LMT +12|-bw.4 -c0|01|-2M0Xw.4|29e3","Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3","Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125","Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4","Pacific/Guam|LMT LMT GST +09 GDT ChST|el -9D -a0 -90 -b0 -a0|0123242424242424242425|-54m9D 2glc0 1DFbD 6pB0 AhB0 3QL0 g2p0 3p91 WOX rX0 1zd0 Rb0 1wp0 Rb0 5xd0 rX0 5sN0 zb1 1C0X On0 ULb0|17e4","Pacific/Kiritimati|LMT -1040 -10 +14|at.k aE a0 -e0|0123|-2M0Bu.E 3bIMa.E B7Xk|51e2","Pacific/Kosrae|LMT LMT +11 +09 +10 +12|d8.4 -aP.U -b0 -90 -a0 -c0|0123243252|-54maP.U 2glc0 xsnP.U axC0 HBy0 akp0 axd0 WOK0 1bdz0|66e2","Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2","Pacific/Pago_Pago|LMT LMT SST|-cB.c bm.M b0|012|-38FoB.c J1A0|37e2","Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E QCnB.E 7mqu 1lnbu|10e3","Pacific/Niue|LMT -1120 -11|bj.E bk b0|012|-FScE.k suo0.k|12e2","Pacific/Norfolk|LMT +1112 +1130 +1230 +11 +12|-bb.Q -bc -bu -cu -b0 -c0|0123245454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2M0Xb.Q 21ILX.Q W01G Oo0 1COo0 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|25e4","Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3","Pacific/Palau|LMT LMT +09|f2.4 -8V.U -90|012|-54m8V.U 2glc0|21e3","Pacific/Pitcairn|LMT -0830 -08|8E.k 8u 80|012|-2M0Dj.E 3UVXN.E|56","Pacific/Rarotonga|LMT LMT -1030 -0930 -10|-dk.U aD.4 au 9u a0|01234343434343434343434343434|-2Otpk.U 28zc0 13tbO.U IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3","Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4","Pacific/Tongatapu|LMT +1220 +13 +14|-cj.c -ck -d0 -e0|01232323232|-XbMj.c BgLX.c 1yndk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3"],"links":["Africa/Abidjan|Africa/Accra","Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|Atlantic/Reykjavik","Africa/Abidjan|Atlantic/St_Helena","Africa/Abidjan|Iceland","Africa/Cairo|Egypt","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Nairobi|Africa/Addis_Ababa","Africa/Nairobi|Africa/Asmara","Africa/Nairobi|Africa/Asmera","Africa/Nairobi|Africa/Dar_es_Salaam","Africa/Nairobi|Africa/Djibouti","Africa/Nairobi|Africa/Kampala","Africa/Nairobi|Africa/Mogadishu","Africa/Nairobi|Indian/Antananarivo","Africa/Nairobi|Indian/Comoro","Africa/Nairobi|Indian/Mayotte","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|US/Alaska","America/Argentina/Buenos_Aires|America/Buenos_Aires","America/Argentina/Catamarca|America/Argentina/ComodRivadavia","America/Argentina/Catamarca|America/Catamarca","America/Argentina/Cordoba|America/Cordoba","America/Argentina/Cordoba|America/Rosario","America/Argentina/Jujuy|America/Jujuy","America/Argentina/Mendoza|America/Mendoza","America/Chicago|CST6CDT","America/Chicago|US/Central","America/Denver|America/Shiprock","America/Denver|MST7MDT","America/Denver|Navajo","America/Denver|US/Mountain","America/Detroit|US/Michigan","America/Edmonton|America/Yellowknife","America/Edmonton|Canada/Mountain","America/Fort_Wayne|America/Indiana/Indianapolis","America/Fort_Wayne|America/Indianapolis","America/Fort_Wayne|US/East-Indiana","America/Godthab|America/Nuuk","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/Indiana/Knox|America/Knox_IN","America/Indiana/Knox|US/Indiana-Starke","America/Iqaluit|America/Pangnirtung","America/Jamaica|Jamaica","America/Kentucky/Louisville|America/Louisville","America/Los_Angeles|PST8PDT","America/Los_Angeles|US/Pacific","America/Manaus|Brazil/West","America/Mazatlan|Mexico/BajaSur","America/Mexico_City|Mexico/General","America/New_York|EST5EDT","America/New_York|US/Eastern","America/Noronha|Brazil/DeNoronha","America/Panama|America/Atikokan","America/Panama|America/Cayman","America/Panama|America/Coral_Harbour","America/Panama|EST","America/Phoenix|America/Creston","America/Phoenix|MST","America/Phoenix|US/Arizona","America/Puerto_Rico|America/Anguilla","America/Puerto_Rico|America/Antigua","America/Puerto_Rico|America/Aruba","America/Puerto_Rico|America/Blanc-Sablon","America/Puerto_Rico|America/Curacao","America/Puerto_Rico|America/Dominica","America/Puerto_Rico|America/Grenada","America/Puerto_Rico|America/Guadeloupe","America/Puerto_Rico|America/Kralendijk","America/Puerto_Rico|America/Lower_Princes","America/Puerto_Rico|America/Marigot","America/Puerto_Rico|America/Montserrat","America/Puerto_Rico|America/Port_of_Spain","America/Puerto_Rico|America/St_Barthelemy","America/Puerto_Rico|America/St_Kitts","America/Puerto_Rico|America/St_Lucia","America/Puerto_Rico|America/St_Thomas","America/Puerto_Rico|America/St_Vincent","America/Puerto_Rico|America/Tortola","America/Puerto_Rico|America/Virgin","America/Regina|Canada/Saskatchewan","America/Rio_Branco|America/Porto_Acre","America/Rio_Branco|Brazil/Acre","America/Santiago|Chile/Continental","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","America/Tijuana|America/Ensenada","America/Tijuana|America/Santa_Isabel","America/Tijuana|Mexico/BajaNorte","America/Toronto|America/Montreal","America/Toronto|America/Nassau","America/Toronto|America/Nipigon","America/Toronto|America/Thunder_Bay","America/Toronto|Canada/Eastern","America/Vancouver|Canada/Pacific","America/Whitehorse|Canada/Yukon","America/Winnipeg|America/Rainy_River","America/Winnipeg|Canada/Central","Asia/Ashgabat|Asia/Ashkhabad","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Vientiane","Asia/Bangkok|Indian/Christmas","Asia/Brunei|Asia/Kuching","Asia/Dhaka|Asia/Dacca","Asia/Dubai|Asia/Muscat","Asia/Dubai|Indian/Mahe","Asia/Dubai|Indian/Reunion","Asia/Ho_Chi_Minh|Asia/Saigon","Asia/Hong_Kong|Hongkong","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Kuala_Lumpur|Asia/Singapore","Asia/Kuala_Lumpur|Singapore","Asia/Macau|Asia/Macao","Asia/Makassar|Asia/Ujung_Pandang","Asia/Nicosia|Europe/Nicosia","Asia/Qatar|Asia/Bahrain","Asia/Rangoon|Asia/Yangon","Asia/Rangoon|Indian/Cocos","Asia/Riyadh|Antarctica/Syowa","Asia/Riyadh|Asia/Aden","Asia/Riyadh|Asia/Kuwait","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|PRC","Asia/Taipei|ROC","Asia/Tehran|Iran","Asia/Thimphu|Asia/Thimbu","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Choibalsan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Urumqi|Asia/Kashgar","Atlantic/Faroe|Atlantic/Faeroe","Australia/Adelaide|Australia/South","Australia/Brisbane|Australia/Queensland","Australia/Broken_Hill|Australia/Yancowinna","Australia/Darwin|Australia/North","Australia/Hobart|Australia/Currie","Australia/Hobart|Australia/Tasmania","Australia/Lord_Howe|Australia/LHI","Australia/Melbourne|Australia/Victoria","Australia/Perth|Australia/West","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/NSW","Etc/GMT-0|Etc/GMT","Etc/GMT-0|Etc/GMT+0","Etc/GMT-0|Etc/GMT0","Etc/GMT-0|Etc/Greenwich","Etc/GMT-0|GMT","Etc/GMT-0|GMT+0","Etc/GMT-0|GMT-0","Etc/GMT-0|GMT0","Etc/GMT-0|Greenwich","Etc/UTC|Etc/UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UCT","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Athens|EET","Europe/Belgrade|Europe/Ljubljana","Europe/Belgrade|Europe/Podgorica","Europe/Belgrade|Europe/Sarajevo","Europe/Belgrade|Europe/Skopje","Europe/Belgrade|Europe/Zagreb","Europe/Berlin|Arctic/Longyearbyen","Europe/Berlin|Atlantic/Jan_Mayen","Europe/Berlin|Europe/Copenhagen","Europe/Berlin|Europe/Oslo","Europe/Berlin|Europe/Stockholm","Europe/Brussels|CET","Europe/Brussels|Europe/Amsterdam","Europe/Brussels|Europe/Luxembourg","Europe/Brussels|MET","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Helsinki|Europe/Mariehamn","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Kiev|Europe/Kyiv","Europe/Kiev|Europe/Uzhgorod","Europe/Kiev|Europe/Zaporozhye","Europe/Lisbon|Portugal","Europe/Lisbon|WET","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Paris|Europe/Monaco","Europe/Prague|Europe/Bratislava","Europe/Rome|Europe/San_Marino","Europe/Rome|Europe/Vatican","Europe/Warsaw|Poland","Europe/Zurich|Europe/Busingen","Europe/Zurich|Europe/Vaduz","Indian/Maldives|Indian/Kerguelen","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Easter|Chile/EasterIsland","Pacific/Enderbury|Pacific/Kanton","Pacific/Guadalcanal|Pacific/Pohnpei","Pacific/Guadalcanal|Pacific/Ponape","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|HST","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Kwajalein|Kwajalein","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Port_Moresby|Antarctica/DumontDUrville","Pacific/Port_Moresby|Pacific/Chuuk","Pacific/Port_Moresby|Pacific/Truk","Pacific/Port_Moresby|Pacific/Yap","Pacific/Tarawa|Pacific/Funafuti","Pacific/Tarawa|Pacific/Majuro","Pacific/Tarawa|Pacific/Wake","Pacific/Tarawa|Pacific/Wallis"],"countries":["AD|Europe/Andorra","AE|Asia/Dubai","AF|Asia/Kabul","AG|America/Puerto_Rico America/Antigua","AI|America/Puerto_Rico America/Anguilla","AL|Europe/Tirane","AM|Asia/Yerevan","AO|Africa/Lagos Africa/Luanda","AQ|Antarctica/Casey Antarctica/Davis Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Troll Antarctica/Vostok Pacific/Auckland Pacific/Port_Moresby Asia/Riyadh Asia/Singapore Antarctica/McMurdo Antarctica/DumontDUrville Antarctica/Syowa","AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia","AS|Pacific/Pago_Pago","AT|Europe/Vienna","AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla Asia/Tokyo","AW|America/Puerto_Rico America/Aruba","AX|Europe/Helsinki Europe/Mariehamn","AZ|Asia/Baku","BA|Europe/Belgrade Europe/Sarajevo","BB|America/Barbados","BD|Asia/Dhaka","BE|Europe/Brussels","BF|Africa/Abidjan Africa/Ouagadougou","BG|Europe/Sofia","BH|Asia/Qatar Asia/Bahrain","BI|Africa/Maputo Africa/Bujumbura","BJ|Africa/Lagos Africa/Porto-Novo","BL|America/Puerto_Rico America/St_Barthelemy","BM|Atlantic/Bermuda","BN|Asia/Kuching Asia/Brunei","BO|America/La_Paz","BQ|America/Puerto_Rico America/Kralendijk","BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco","BS|America/Toronto America/Nassau","BT|Asia/Thimphu","BW|Africa/Maputo Africa/Gaborone","BY|Europe/Minsk","BZ|America/Belize","CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Toronto America/Iqaluit America/Winnipeg America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Inuvik America/Dawson_Creek America/Fort_Nelson America/Whitehorse America/Dawson America/Vancouver America/Panama America/Puerto_Rico America/Phoenix America/Blanc-Sablon America/Atikokan America/Creston","CC|Asia/Yangon Indian/Cocos","CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi","CF|Africa/Lagos Africa/Bangui","CG|Africa/Lagos Africa/Brazzaville","CH|Europe/Zurich","CI|Africa/Abidjan","CK|Pacific/Rarotonga","CL|America/Santiago America/Coyhaique America/Punta_Arenas Pacific/Easter","CM|Africa/Lagos Africa/Douala","CN|Asia/Shanghai Asia/Urumqi","CO|America/Bogota","CR|America/Costa_Rica","CU|America/Havana","CV|Atlantic/Cape_Verde","CW|America/Puerto_Rico America/Curacao","CX|Asia/Bangkok Indian/Christmas","CY|Asia/Nicosia Asia/Famagusta","CZ|Europe/Prague","DE|Europe/Zurich Europe/Berlin Europe/Busingen","DJ|Africa/Nairobi Africa/Djibouti","DK|Europe/Berlin Europe/Copenhagen","DM|America/Puerto_Rico America/Dominica","DO|America/Santo_Domingo","DZ|Africa/Algiers","EC|America/Guayaquil Pacific/Galapagos","EE|Europe/Tallinn","EG|Africa/Cairo","EH|Africa/El_Aaiun","ER|Africa/Nairobi Africa/Asmara","ES|Europe/Madrid Africa/Ceuta Atlantic/Canary","ET|Africa/Nairobi Africa/Addis_Ababa","FI|Europe/Helsinki","FJ|Pacific/Fiji","FK|Atlantic/Stanley","FM|Pacific/Kosrae Pacific/Port_Moresby Pacific/Guadalcanal Pacific/Chuuk Pacific/Pohnpei","FO|Atlantic/Faroe","FR|Europe/Paris","GA|Africa/Lagos Africa/Libreville","GB|Europe/London","GD|America/Puerto_Rico America/Grenada","GE|Asia/Tbilisi","GF|America/Cayenne","GG|Europe/London Europe/Guernsey","GH|Africa/Abidjan Africa/Accra","GI|Europe/Gibraltar","GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule","GM|Africa/Abidjan Africa/Banjul","GN|Africa/Abidjan Africa/Conakry","GP|America/Puerto_Rico America/Guadeloupe","GQ|Africa/Lagos Africa/Malabo","GR|Europe/Athens","GS|Atlantic/South_Georgia","GT|America/Guatemala","GU|Pacific/Guam","GW|Africa/Bissau","GY|America/Guyana","HK|Asia/Hong_Kong","HN|America/Tegucigalpa","HR|Europe/Belgrade Europe/Zagreb","HT|America/Port-au-Prince","HU|Europe/Budapest","ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura","IE|Europe/Dublin","IL|Asia/Jerusalem","IM|Europe/London Europe/Isle_of_Man","IN|Asia/Kolkata","IO|Indian/Chagos","IQ|Asia/Baghdad","IR|Asia/Tehran","IS|Africa/Abidjan Atlantic/Reykjavik","IT|Europe/Rome","JE|Europe/London Europe/Jersey","JM|America/Jamaica","JO|Asia/Amman","JP|Asia/Tokyo","KE|Africa/Nairobi","KG|Asia/Bishkek","KH|Asia/Bangkok Asia/Phnom_Penh","KI|Pacific/Tarawa Pacific/Kanton Pacific/Kiritimati","KM|Africa/Nairobi Indian/Comoro","KN|America/Puerto_Rico America/St_Kitts","KP|Asia/Pyongyang","KR|Asia/Seoul","KW|Asia/Riyadh Asia/Kuwait","KY|America/Panama America/Cayman","KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral","LA|Asia/Bangkok Asia/Vientiane","LB|Asia/Beirut","LC|America/Puerto_Rico America/St_Lucia","LI|Europe/Zurich Europe/Vaduz","LK|Asia/Colombo","LR|Africa/Monrovia","LS|Africa/Johannesburg Africa/Maseru","LT|Europe/Vilnius","LU|Europe/Brussels Europe/Luxembourg","LV|Europe/Riga","LY|Africa/Tripoli","MA|Africa/Casablanca","MC|Europe/Paris Europe/Monaco","MD|Europe/Chisinau","ME|Europe/Belgrade Europe/Podgorica","MF|America/Puerto_Rico America/Marigot","MG|Africa/Nairobi Indian/Antananarivo","MH|Pacific/Tarawa Pacific/Kwajalein Pacific/Majuro","MK|Europe/Belgrade Europe/Skopje","ML|Africa/Abidjan Africa/Bamako","MM|Asia/Yangon","MN|Asia/Ulaanbaatar Asia/Hovd","MO|Asia/Macau","MP|Pacific/Guam Pacific/Saipan","MQ|America/Martinique","MR|Africa/Abidjan Africa/Nouakchott","MS|America/Puerto_Rico America/Montserrat","MT|Europe/Malta","MU|Indian/Mauritius","MV|Indian/Maldives","MW|Africa/Maputo Africa/Blantyre","MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Chihuahua America/Ciudad_Juarez America/Ojinaga America/Mazatlan America/Bahia_Banderas America/Hermosillo America/Tijuana","MY|Asia/Kuching Asia/Singapore Asia/Kuala_Lumpur","MZ|Africa/Maputo","NA|Africa/Windhoek","NC|Pacific/Noumea","NE|Africa/Lagos Africa/Niamey","NF|Pacific/Norfolk","NG|Africa/Lagos","NI|America/Managua","NL|Europe/Brussels Europe/Amsterdam","NO|Europe/Berlin Europe/Oslo","NP|Asia/Kathmandu","NR|Pacific/Nauru","NU|Pacific/Niue","NZ|Pacific/Auckland Pacific/Chatham","OM|Asia/Dubai Asia/Muscat","PA|America/Panama","PE|America/Lima","PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier","PG|Pacific/Port_Moresby Pacific/Bougainville","PH|Asia/Manila","PK|Asia/Karachi","PL|Europe/Warsaw","PM|America/Miquelon","PN|Pacific/Pitcairn","PR|America/Puerto_Rico","PS|Asia/Gaza Asia/Hebron","PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores","PW|Pacific/Palau","PY|America/Asuncion","QA|Asia/Qatar","RE|Asia/Dubai Indian/Reunion","RO|Europe/Bucharest","RS|Europe/Belgrade","RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Volgograd Europe/Astrakhan Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr","RW|Africa/Maputo Africa/Kigali","SA|Asia/Riyadh","SB|Pacific/Guadalcanal","SC|Asia/Dubai Indian/Mahe","SD|Africa/Khartoum","SE|Europe/Berlin Europe/Stockholm","SG|Asia/Singapore","SH|Africa/Abidjan Atlantic/St_Helena","SI|Europe/Belgrade Europe/Ljubljana","SJ|Europe/Berlin Arctic/Longyearbyen","SK|Europe/Prague Europe/Bratislava","SL|Africa/Abidjan Africa/Freetown","SM|Europe/Rome Europe/San_Marino","SN|Africa/Abidjan Africa/Dakar","SO|Africa/Nairobi Africa/Mogadishu","SR|America/Paramaribo","SS|Africa/Juba","ST|Africa/Sao_Tome","SV|America/El_Salvador","SX|America/Puerto_Rico America/Lower_Princes","SY|Asia/Damascus","SZ|Africa/Johannesburg Africa/Mbabane","TC|America/Grand_Turk","TD|Africa/Ndjamena","TF|Asia/Dubai Indian/Maldives Indian/Kerguelen","TG|Africa/Abidjan Africa/Lome","TH|Asia/Bangkok","TJ|Asia/Dushanbe","TK|Pacific/Fakaofo","TL|Asia/Dili","TM|Asia/Ashgabat","TN|Africa/Tunis","TO|Pacific/Tongatapu","TR|Europe/Istanbul","TT|America/Puerto_Rico America/Port_of_Spain","TV|Pacific/Tarawa Pacific/Funafuti","TW|Asia/Taipei","TZ|Africa/Nairobi Africa/Dar_es_Salaam","UA|Europe/Simferopol Europe/Kyiv","UG|Africa/Nairobi Africa/Kampala","UM|Pacific/Pago_Pago Pacific/Tarawa Pacific/Midway Pacific/Wake","US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu","UY|America/Montevideo","UZ|Asia/Samarkand Asia/Tashkent","VA|Europe/Rome Europe/Vatican","VC|America/Puerto_Rico America/St_Vincent","VE|America/Caracas","VG|America/Puerto_Rico America/Tortola","VI|America/Puerto_Rico America/St_Thomas","VN|Asia/Bangkok Asia/Ho_Chi_Minh","VU|Pacific/Efate","WF|Pacific/Tarawa Pacific/Wallis","WS|Pacific/Apia","YE|Asia/Riyadh Asia/Aden","YT|Africa/Nairobi Indian/Mayotte","ZA|Africa/Johannesburg","ZM|Africa/Maputo Africa/Lusaka","ZW|Africa/Maputo Africa/Harare"]}')},743:(M,z,b)=>{(M.exports=b(639)).tz.load(b(681))}}]);
\ No newline at end of file
diff --git a/providers/fab/src/airflow/providers/fab/www/static/dist/743.b6629eaae7f541f4158f.js.LICENSE.txt b/providers/fab/src/airflow/providers/fab/www/static/dist/743.27a753a06671118f1c5c.js.LICENSE.txt
similarity index 100%
rename from providers/fab/src/airflow/providers/fab/www/static/dist/743.b6629eaae7f541f4158f.js.LICENSE.txt
rename to providers/fab/src/airflow/providers/fab/www/static/dist/743.27a753a06671118f1c5c.js.LICENSE.txt
diff --git a/providers/fab/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.5a4eda684d2f5f33fa6a.css b/providers/fab/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.56d4475fdae7883d3454.css
similarity index 100%
rename from providers/fab/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.5a4eda684d2f5f33fa6a.css
rename to providers/fab/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.56d4475fdae7883d3454.css
diff --git a/providers/fab/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.5a4eda684d2f5f33fa6a.js b/providers/fab/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.56d4475fdae7883d3454.js
similarity index 65%
rename from providers/fab/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.5a4eda684d2f5f33fa6a.js
rename to providers/fab/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.56d4475fdae7883d3454.js
index 9f81785f23dce..bc06735a5a998 100644
--- a/providers/fab/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.5a4eda684d2f5f33fa6a.js
+++ b/providers/fab/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.56d4475fdae7883d3454.js
@@ -1 +1 @@
-"use strict";!function(e,o){"object"==typeof exports&&"object"==typeof module?module.exports=o():"function"==typeof define&&define.amd?define([],o):"object"==typeof exports?exports.Airflow=o():(e.Airflow=e.Airflow||{},e.Airflow.airflowDefaultTheme=o())}(self,(()=>(self.webpackChunkAirflow=self.webpackChunkAirflow||[]).push([[947],{313:(e,o,f)=>{f.r(o)}},e=>{var o;return o=313,e(e.s=o)}])));
\ No newline at end of file
+"use strict";!function(e,o){"object"==typeof exports&&"object"==typeof module?module.exports=o():"function"==typeof define&&define.amd?define([],o):"object"==typeof exports?exports.Airflow=o():(e.Airflow=e.Airflow||{},e.Airflow.airflowDefaultTheme=o())}(self,()=>(self.webpackChunkAirflow=self.webpackChunkAirflow||[]).push([[947],{313:(e,o,f)=>{f.r(o)}},e=>{var o;return o=313,e(e.s=o)}]));
\ No newline at end of file
diff --git a/providers/fab/src/airflow/providers/fab/www/static/dist/flash.9f756672299e9e57a824.css b/providers/fab/src/airflow/providers/fab/www/static/dist/flash.0951d47c62bc8906be65.css
similarity index 100%
rename from providers/fab/src/airflow/providers/fab/www/static/dist/flash.9f756672299e9e57a824.css
rename to providers/fab/src/airflow/providers/fab/www/static/dist/flash.0951d47c62bc8906be65.css
diff --git a/providers/fab/src/airflow/providers/fab/www/static/dist/flash.9f756672299e9e57a824.js b/providers/fab/src/airflow/providers/fab/www/static/dist/flash.0951d47c62bc8906be65.js
similarity index 50%
rename from providers/fab/src/airflow/providers/fab/www/static/dist/flash.9f756672299e9e57a824.js
rename to providers/fab/src/airflow/providers/fab/www/static/dist/flash.0951d47c62bc8906be65.js
index cb134a5f773a7..a3e7b884512fc 100644
--- a/providers/fab/src/airflow/providers/fab/www/static/dist/flash.9f756672299e9e57a824.js
+++ b/providers/fab/src/airflow/providers/fab/www/static/dist/flash.0951d47c62bc8906be65.js
@@ -1 +1 @@
-"use strict";!function(e,o){"object"==typeof exports&&"object"==typeof module?module.exports=o():"function"==typeof define&&define.amd?define([],o):"object"==typeof exports?exports.Airflow=o():(e.Airflow=e.Airflow||{},e.Airflow.flash=o())}(self,(()=>(self.webpackChunkAirflow=self.webpackChunkAirflow||[]).push([[307],{941:(e,o,f)=>{f.r(o)}},e=>{var o;return o=941,e(e.s=o)}])));
\ No newline at end of file
+"use strict";!function(e,o){"object"==typeof exports&&"object"==typeof module?module.exports=o():"function"==typeof define&&define.amd?define([],o):"object"==typeof exports?exports.Airflow=o():(e.Airflow=e.Airflow||{},e.Airflow.flash=o())}(self,()=>(self.webpackChunkAirflow=self.webpackChunkAirflow||[]).push([[307],{941:(e,o,f)=>{f.r(o)}},e=>{var o;return o=941,e(e.s=o)}]));
\ No newline at end of file
diff --git a/providers/fab/src/airflow/providers/fab/www/static/dist/jquery-ui.min.js b/providers/fab/src/airflow/providers/fab/www/static/dist/jquery-ui.min.js
index 708a13b775df7..74c6a8dbee08f 100644
--- a/providers/fab/src/airflow/providers/fab/www/static/dist/jquery-ui.min.js
+++ b/providers/fab/src/airflow/providers/fab/www/static/dist/jquery-ui.min.js
@@ -1,2 +1,2 @@
 /*! For license information please see jquery-ui.min.js.LICENSE.txt */
-(t=>{"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})((function(t){t.ui=t.ui||{},t.ui.version="1.14.1";var e,i,s,n,o,a,r,l,h,c,u=0,d=Array.prototype.hasOwnProperty,p=Array.prototype.slice;function f(t,e,i){return[parseFloat(t[0])*(h.test(t[0])?e/100:1),parseFloat(t[1])*(h.test(t[1])?i/100:1)]}function g(e,i){return parseInt(t.css(e,i),10)||0}function m(t){return null!=t&&t===t.window}t.cleanData=(e=t.cleanData,function(i){for(var s,n,o=0;null!=(n=i[o]);o++)(s=t._data(n,"events"))&&s.remove&&t(n).triggerHandler("remove");e(i)}),t.widget=function(e,i,s){var n,o,a,r,l={},h=e.split(".")[0];return"__proto__"===(e=e.split(".")[1])||"constructor"===e?t.error("Invalid widget name: "+e):(r=h+"-"+e,s||(s=i,i=t.Widget),Array.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr.pseudos[r.toLowerCase()]=function(e){return!!t.data(e,r)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){if(!this||!this._createWidget)return new o(t,e);arguments.length&&this._createWidget(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),(a=new i).options=t.widget.extend({},a.options),t.each(s,(function(t,e){function s(){return i.prototype[t].apply(this,arguments)}function n(e){return i.prototype[t].apply(this,e)}l[t]="function"!=typeof e?e:function(){var t,i=this._super,o=this._superApply;return this._super=s,this._superApply=n,t=e.apply(this,arguments),this._super=i,this._superApply=o,t}})),o.prototype=t.widget.extend(a,{widgetEventPrefix:n&&a.widgetEventPrefix||e},l,{constructor:o,namespace:h,widgetName:e,widgetFullName:r}),n?(t.each(n._childConstructors,(function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)})),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o)},t.widget.extend=function(e){for(var i,s,n=p.call(arguments,1),o=0,a=n.length;o<a;o++)for(i in n[o])s=n[o][i],d.call(n[o],i)&&void 0!==s&&(t.isPlainObject(s)?e[i]=t.isPlainObject(e[i])?t.widget.extend({},e[i],s):t.widget.extend({},s):e[i]=s);return e},t.widget.bridge=function(e,i){var s=i.prototype.widgetFullName||e;t.fn[e]=function(n){var o="string"==typeof n,a=p.call(arguments,1),r=this;return o?this.length||"instance"!==n?this.each((function(){var i,o=t.data(this,s);return"instance"===n?(r=o,!1):o?"function"!=typeof o[n]||"_"===n.charAt(0)?t.error("no such method '"+n+"' for "+e+" widget instance"):(i=o[n].apply(o,a))!==o&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0:t.error("cannot call methods on "+e+" prior to initialization; attempted to call method '"+n+"'")})):r=void 0:(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each((function(){var e=t.data(this,s);e?(e.option(n||{}),e._init&&e._init()):t.data(this,s,new i(n,this))}))),r}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=u++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,(function(t,i){e._removeClass(i,t)})),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},e=(s=e.split(".")).shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;o<s.length-1;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){for(var e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){var i=[],s=this;function n(n,o){for(var a,r=0;r<n.length;r++)a=s.classesElementLookup[n[r]]||t(),a=e.add?((()=>{var i=[];e.element.each((function(e,n){t.map(s.classesElementLookup,(function(t){return t})).some((function(t){return t.is(n)}))||i.push(n)})),s._on(t(i),{remove:"_untrackClassesElement"})})(),t(t.uniqueSort(a.get().concat(e.element.get())))):t(a.not(e.element).get()),s.classesElementLookup[n[r]]=a,i.push(n[r]),o&&e.classes[n[r]]&&i.push(e.classes[n[r]])}return(e=t.extend({element:this.element,classes:this.options.classes||{}},e)).keys&&n(e.keys.match(/\S+/g)||[],!0),e.extra&&n(e.extra.match(/\S+/g)||[]),i.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,(function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})),this._off(t(e.target))},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){var n="string"==typeof t||null===t;return(e={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s="boolean"==typeof s?s:i}).element.toggleClass(this._classes(e),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,(function(s,a){function r(){if(e||!0!==o.options.disabled&&!t(this).hasClass("ui-state-disabled"))return("string"==typeof a?o[a]:a).apply(o,arguments)}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var l=(s=s.match(/^([\w:-]*)\s*(.*)$/))[1]+o.eventNamespace;(s=s[2])?n.on(l,s,r):i.on(l,r)}))},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){var i=this;return setTimeout((function(){return("string"==typeof t?i[t]:t).apply(i,arguments)}),e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},(i=t.Event(i)).type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!("function"==typeof a&&!1===a.apply(this.element[0],[i].concat(s))||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},(function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){var a,r=(n="string"==typeof n?{effect:n}:n)?!0!==n&&"number"!=typeof n&&n.effect||i:e;"number"==typeof(n=n||{})?n={duration:n}:!0===n&&(n={}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue((function(i){t(this)[e](),o&&o.call(s[0]),i()}))}})),t.widget,s=Math.max,n=Math.abs,o=/left|center|right/,a=/top|center|bottom/,r=/[\+\-]\d+(\.[\d]+)?%?/,l=/^\w+/,h=/%$/,c=t.fn.position,t.position={scrollbarWidth:function(){var e,s,n;return void 0!==i?i:(n=(s=t("<div style='display:block;position:absolute;width:200px;height:200px;overflow:hidden;'><div style='height:300px;width:auto;'></div></div>")).children()[0],t("body").append(s),e=n.offsetWidth,s.css("overflow","scroll"),e===(n=n.offsetWidth)&&(n=s[0].clientWidth),s.remove(),i=e-n)},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y");i="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth;return{width:"scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight?t.position.scrollbarWidth():0,height:i?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=m(i[0]),n=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:s,isDocument:n,offset:s||n?{left:0,top:0}:t(e).offset(),scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(e){var i,h,u,d,p,_,v,b,y,w,x,k;return e&&e.of?(_="string"==typeof(e=t.extend({},e)).of?t(document).find(e.of):t(e.of),v=t.position.getWithinInfo(e.within),b=t.position.getScrollInfo(v),y=(e.collision||"flip").split(" "),w={},k=9===(k=(x=_)[0]).nodeType?{width:x.width(),height:x.height(),offset:{top:0,left:0}}:m(k)?{width:x.width(),height:x.height(),offset:{top:x.scrollTop(),left:x.scrollLeft()}}:k.preventDefault?{width:0,height:0,offset:{top:k.pageY,left:k.pageX}}:{width:x.outerWidth(),height:x.outerHeight(),offset:x.offset()},_[0].preventDefault&&(e.at="left top"),h=k.width,u=k.height,p=t.extend({},d=k.offset),t.each(["my","at"],(function(){var t,i,s=(e[this]||"").split(" ");(s=1===s.length?o.test(s[0])?s.concat(["center"]):a.test(s[0])?["center"].concat(s):["center","center"]:s)[0]=o.test(s[0])?s[0]:"center",s[1]=a.test(s[1])?s[1]:"center",t=r.exec(s[0]),i=r.exec(s[1]),w[this]=[t?t[0]:0,i?i[0]:0],e[this]=[l.exec(s[0])[0],l.exec(s[1])[0]]})),1===y.length&&(y[1]=y[0]),"right"===e.at[0]?p.left+=h:"center"===e.at[0]&&(p.left+=h/2),"bottom"===e.at[1]?p.top+=u:"center"===e.at[1]&&(p.top+=u/2),i=f(w.at,h,u),p.left+=i[0],p.top+=i[1],this.each((function(){var o,a,r=t(this),l=r.outerWidth(),c=r.outerHeight(),m=g(this,"marginLeft"),x=g(this,"marginTop"),k=l+m+g(this,"marginRight")+b.width,C=c+x+g(this,"marginBottom")+b.height,D=t.extend({},p),I=f(w.my,r.outerWidth(),r.outerHeight());"right"===e.my[0]?D.left-=l:"center"===e.my[0]&&(D.left-=l/2),"bottom"===e.my[1]?D.top-=c:"center"===e.my[1]&&(D.top-=c/2),D.left+=I[0],D.top+=I[1],o={marginLeft:m,marginTop:x},t.each(["left","top"],(function(s,n){t.ui.position[y[s]]&&t.ui.position[y[s]][n](D,{targetWidth:h,targetHeight:u,elemWidth:l,elemHeight:c,collisionPosition:o,collisionWidth:k,collisionHeight:C,offset:[i[0]+I[0],i[1]+I[1]],my:e.my,at:e.at,within:v,elem:r})})),e.using&&(a=function(t){var i=d.left-D.left,o=i+h-l,a=d.top-D.top,p=a+u-c,f={target:{element:_,left:d.left,top:d.top,width:h,height:u},element:{element:r,left:D.left,top:D.top,width:l,height:c},horizontal:o<0?"left":0<i?"right":"center",vertical:p<0?"top":0<a?"bottom":"middle"};h<l&&n(i+o)<h&&(f.horizontal="center"),u<c&&n(a+p)<u&&(f.vertical="middle"),s(n(i),n(o))>s(n(a),n(p))?f.important="horizontal":f.important="vertical",e.using.call(this,t,f)}),r.offset(t.extend(D,{using:a}))}))):c.apply(this,arguments)},t.ui.position={fit:{left:function(t,e){var i,n=(o=e.within).isWindow?o.scrollLeft:o.offset.left,o=o.width,a=t.left-e.collisionPosition.marginLeft,r=n-a,l=a+e.collisionWidth-o-n;o<e.collisionWidth?0<r&&l<=0?(i=t.left+r+e.collisionWidth-o-n,t.left+=r-i):t.left=!(0<l&&r<=0)&&l<r?n+o-e.collisionWidth:n:0<r?t.left+=r:0<l?t.left-=l:t.left=s(t.left-a,t.left)},top:function(t,e){var i,n=(n=e.within).isWindow?n.scrollTop:n.offset.top,o=e.within.height,a=t.top-e.collisionPosition.marginTop,r=n-a,l=a+e.collisionHeight-o-n;o<e.collisionHeight?0<r&&l<=0?(i=t.top+r+e.collisionHeight-o-n,t.top+=r-i):t.top=!(0<l&&r<=0)&&l<r?n+o-e.collisionHeight:n:0<r?t.top+=r:0<l?t.top-=l:t.top=s(t.top-a,t.top)}},flip:{left:function(t,e){var i=(o=e.within).offset.left+o.scrollLeft,s=o.width,o=o.isWindow?o.scrollLeft:o.offset.left,a=(r=t.left-e.collisionPosition.marginLeft)-o,r=r+e.collisionWidth-s-o,l="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,h="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,c=-2*e.offset[0];a<0?((s=t.left+l+h+c+e.collisionWidth-s-i)<0||s<n(a))&&(t.left+=l+h+c):0<r&&(0<(i=t.left-e.collisionPosition.marginLeft+l+h+c-o)||n(i)<r)&&(t.left+=l+h+c)},top:function(t,e){var i=(o=e.within).offset.top+o.scrollTop,s=o.height,o=o.isWindow?o.scrollTop:o.offset.top,a=(r=t.top-e.collisionPosition.marginTop)-o,r=r+e.collisionHeight-s-o,l="top"===e.my[1]?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,h="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,c=-2*e.offset[1];a<0?((s=t.top+l+h+c+e.collisionHeight-s-i)<0||s<n(a))&&(t.top+=l+h+c):0<r&&(0<(i=t.top-e.collisionPosition.marginTop+l+h+c-o)||n(i)<r)&&(t.top+=l+h+c)}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}},t.ui.position,t.extend(t.expr.pseudos,{data:t.expr.createPseudo((function(e){return function(i){return!!t.data(i,e)}}))}),t.fn.extend({disableSelection:(_="onselectstart"in document.createElement("div")?"selectstart":"mousedown",function(){return this.on(_+".ui-disableSelection",(function(t){t.preventDefault()}))}),enableSelection:function(){return this.off(".ui-disableSelection")}});var _,v=t,b={},y=b.toString,w=/^([\-+])=\s*(\d+\.?\d*)/,x=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16),t[4]?(parseInt(t[4],16)/255).toFixed(2):1]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16),t[4]?(parseInt(t[4]+t[4],16)/255).toFixed(2):1]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],k=v.Color=function(t,e,i,s){return new v.Color.fn.parse(t,e,i,s)},C={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},D={byte:{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},I=v.each;function T(t){return null==t?t+"":"object"==typeof t?b[y.call(t)]||"object":typeof t}function P(t,e,i){var s=D[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),s.mod?(t+s.mod)%s.mod:Math.min(s.max,Math.max(0,t)))}function M(t){var e=k(),i=e._rgba=[];return t=t.toLowerCase(),I(x,(function(s,n){var o=(o=n.re.exec(t))&&n.parse(o);n=n.space||"rgba";if(o)return o=e[n](o),e[C[n].cache]=o[C[n].cache],i=e._rgba=o._rgba,!1})),i.length?("0,0,0,0"===i.join()&&v.extend(i,Y.transparent),e):Y[t]}function S(t,e,i){return 6*(i=(i+1)%1)<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}I(C,(function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}})),v.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),(function(t,e){b["[object "+e+"]"]=e.toLowerCase()})),k.fn=v.extend(k.prototype,{parse:function(t,e,i,s){if(void 0===t)return this._rgba=[null,null,null,null],this;(t.jquery||t.nodeType)&&(t=v(t).css(e),e=void 0);var n=this,o=T(t),a=this._rgba=[];return void 0!==e&&(t=[t,e,i,s],o="array"),"string"===o?this.parse(M(t)||Y._default):"array"===o?(I(C.rgba.props,(function(e,i){a[i.idx]=P(t[i.idx],i)})),this):"object"===o?(I(C,t instanceof k?function(e,i){t[i.cache]&&(n[i.cache]=t[i.cache].slice())}:function(e,i){var s=i.cache;I(i.props,(function(e,o){if(!n[s]&&i.to){if("alpha"===e||null==t[e])return;n[s]=i.to(n._rgba)}n[s][o.idx]=P(t[e],o,!0)})),n[s]&&v.inArray(null,n[s].slice(0,3))<0&&(null==n[s][3]&&(n[s][3]=1),i.from)&&(n._rgba=i.from(n[s]))}),this):void 0},is:function(t){var e=k(t),i=!0,s=this;return I(C,(function(t,n){var o,a=e[n.cache];return a&&(o=s[n.cache]||n.to&&n.to(s._rgba)||[],I(n.props,(function(t,e){if(null!=a[e.idx])return i=a[e.idx]===o[e.idx]}))),i})),i},_space:function(){var t=[],e=this;return I(C,(function(i,s){e[s.cache]&&t.push(i)})),t.pop()},transition:function(t,e){t=(a=k(t))._space();var i=C[t],s=0===this.alpha()?k("transparent"):this,n=s[i.cache]||i.to(s._rgba),o=n.slice(),a=a[i.cache];return I(i.props,(function(t,i){var s=i.idx,r=n[s],l=a[s],h=D[i.type]||{};null!==l&&(null===r?o[s]=l:(h.mod&&(l-r>h.mod/2?r+=h.mod:r-l>h.mod/2&&(r-=h.mod)),o[s]=P((l-r)*e+r,i)))})),this[t](o)},blend:function(t){var e,i,s;return 1===this._rgba[3]?this:(e=this._rgba.slice(),i=e.pop(),s=k(t)._rgba,k(v.map(e,(function(t,e){return(1-i)*s[e]+i*t}))))},toRgbaString:function(){var t="rgba(",e=v.map(this._rgba,(function(t,e){return null!=t?t:2<e?1:0}));return 1===e[3]&&(e.pop(),t="rgb("),t+e.join(", ")+")"},toHslaString:function(){var t="hsla(",e=v.map(this.hsla(),(function(t,e){return null==t&&(t=2<e?1:0),e&&e<3?Math.round(100*t)+"%":t}));return 1===e[3]&&(e.pop(),t="hsl("),t+e.join(", ")+")"},toHexString:function(t){var e=this._rgba.slice(),i=e.pop();return t&&e.push(~~(255*i)),"#"+v.map(e,(function(t){return("0"+(t||0).toString(16)).substr(-2)})).join("")},toString:function(){return this.toRgbaString()}}),k.fn.parse.prototype=k.fn,C.hsla.to=function(t){var e,i,s,n,o,a,r,l;return null==t[0]||null==t[1]||null==t[2]?[null,null,null,t[3]]:(e=t[0]/255,i=t[1]/255,s=t[2]/255,t=t[3],n=(l=Math.max(e,i,s))-(r=Math.min(e,i,s)),a=.5*(o=l+r),r=r===l?0:e===l?60*(i-s)/n+360:i===l?60*(s-e)/n+120:60*(e-i)/n+240,l=0==n?0:a<=.5?n/o:n/(2-o),[Math.round(r)%360,l,a,null==t?1:t])},C.hsla.from=function(t){var e,i,s;return null==t[0]||null==t[1]||null==t[2]?[null,null,null,t[3]]:(e=t[0]/360,s=t[1],i=t[3],s=2*(t=t[2])-(t=t<=.5?t*(1+s):t+s-t*s),[Math.round(255*S(s,t,e+1/3)),Math.round(255*S(s,t,e)),Math.round(255*S(s,t,e-1/3)),i])},I(C,(function(t,e){var i=e.props,s=e.cache,n=e.to,o=e.from;k.fn[t]=function(t){var e,a,r;return n&&!this[s]&&(this[s]=n(this._rgba)),void 0===t?this[s].slice():(e=T(t),a="array"===e||"object"===e?t:arguments,r=this[s].slice(),I(i,(function(t,i){null==(t=a["object"===e?t:i.idx])&&(t=r[i.idx]),r[i.idx]=P(t,i)})),o?((t=k(o(r)))[s]=r,t):k(r))},I(i,(function(e,i){k.fn[e]||(k.fn[e]=function(s){var n=T(s),o="alpha"===e?this._hsla?"hsla":"rgba":t,a=this[o](),r=a[i.idx];return"undefined"===n?r:("function"===n&&(n=T(s=s.call(this,r))),null==s&&i.empty?this:("string"===n&&(n=w.exec(s))&&(s=r+parseFloat(n[2])*("+"===n[1]?1:-1)),a[i.idx]=s,this[o](a)))})}))})),k.hook=function(t){t=t.split(" "),I(t,(function(t,e){v.cssHooks[e]={set:function(t,i){var s;"transparent"===i||"string"===T(i)&&!(s=M(i))||(i=(i=k(s||i)).toRgbaString()),t.style[e]=i}},v.fx.step[e]=function(t){t.colorInit||(t.start=k(t.elem,e),t.end=k(t.end),t.colorInit=!0),v.cssHooks[e].set(t.elem,t.start.transition(t.end,t.pos))}}))},k.hook("backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor"),v.cssHooks.borderColor={expand:function(t){var e={};return I(["Top","Right","Bottom","Left"],(function(i,s){e["border"+s+"Color"]=t})),e}};var H,z,O,A,E,N,W,F,L,R,Y=v.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"},B="ui-effects-",j="ui-effects-style",q="ui-effects-animated";function K(t){for(var e,i=t.ownerDocument.defaultView.getComputedStyle(t),s={},n=i.length;n--;)"string"==typeof i[e=i[n]]&&(s[e.replace(/-([\da-z])/gi,(function(t,e){return e.toUpperCase()}))]=i[e]);return s}function U(e,i,s,n){return e={effect:e=t.isPlainObject(e)?(i=e).effect:e},"function"==typeof(i=null==i?{}:i)&&(n=i,s=null,i={}),"number"!=typeof i&&!t.fx.speeds[i]||(n=s,s=i,i={}),"function"==typeof s&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function V(e){return!e||"number"==typeof e||t.fx.speeds[e]||"string"==typeof e&&!t.effects.effect[e]||"function"==typeof e||"object"==typeof e&&!e.effect}function X(t,e){var i=e.outerWidth();e=e.outerHeight(),t=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/.exec(t)||["",0,i,e,0];return{top:parseFloat(t[1])||0,right:"auto"===t[2]?i:parseFloat(t[2]),bottom:"auto"===t[3]?e:parseFloat(t[3]),left:parseFloat(t[4])||0}}t.effects={effect:{}},A=["add","remove","toggle"],E={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1},t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],(function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(v.style(t.elem,i,t.end),t.setAttr=!0)}})),t.effects.animateClass=function(e,i,s,n){var o=t.speed(i,s,n);return this.queue((function(){var i=t(this),s=i.attr("class")||"",n=(n=o.children?i.find("*").addBack():i).map((function(){return{el:t(this),start:K(this)}})),a=function(){t.each(A,(function(t,s){e[s]&&i[s+"Class"](e[s])}))};a(),n=n.map((function(){return this.end=K(this.el[0]),this.diff=((e,i)=>{var s,n,o={};for(s in i)n=i[s],e[s]===n||E[s]||!t.fx.step[s]&&isNaN(parseFloat(n))||(o[s]=n);return o})(this.start,this.end),this})),i.attr("class",s),n=n.map((function(){var e=this,i=t.Deferred(),s=t.extend({},o,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()})),t.when.apply(t,n.get()).done((function(){a(),t.each(arguments,(function(){var e=this.el;t.each(this.diff,(function(t){e.css(t,"")}))})),o.complete.call(i[0])}))}))},t.fn.extend({addClass:(O=t.fn.addClass,function(e,i,s,n){return i?t.effects.animateClass.call(this,{add:e},i,s,n):O.apply(this,arguments)}),removeClass:(z=t.fn.removeClass,function(e,i,s,n){return 1<arguments.length?t.effects.animateClass.call(this,{remove:e},i,s,n):z.apply(this,arguments)}),toggleClass:(H=t.fn.toggleClass,function(e,i,s,n,o){return"boolean"==typeof i||void 0===i?s?t.effects.animateClass.call(this,i?{add:e}:{remove:e},s,n,o):H.apply(this,arguments):t.effects.animateClass.call(this,{toggle:e},i,s,n)}),switchClass:function(e,i,s,n,o){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,o)}}),t.expr&&t.expr.pseudos&&t.expr.pseudos.animated&&(t.expr.pseudos.animated=(N=t.expr.pseudos.animated,function(e){return!!t(e).data(q)||N(e)})),!0===t.uiBackCompat&&t.extend(t.effects,{save:function(t,e){for(var i=0,s=e.length;i<s;i++)null!==e[i]&&t.data(B+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,s=0,n=e.length;s<n;s++)null!==e[s]&&(i=t.data(B+e[s]),t.css(e[s],i))},setMode:function(t,e){return"toggle"===e?t.is(":hidden")?"show":"hide":e},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),float:e.css("float")},s=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(s){o=document.body}return e.wrap(s),e[0]!==o&&!t.contains(e[0],o)||t(o).trigger("focus"),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],(function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")})),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),e[0]!==i&&!t.contains(e[0],i)||t(i).trigger("focus")),e}}),t.extend(t.effects,{version:"1.14.1",define:function(e,i,s){return s||(s=i,i="effect"),t.effects.effect[e]=s,t.effects.effect[e].mode=i,s},scaledDimensions:function(t,e,i){var s;return 0===e?{height:0,width:0,outerHeight:0,outerWidth:0}:(s="horizontal"!==i?(e||100)/100:1,i="vertical"!==i?(e||100)/100:1,{height:t.height()*i,width:t.width()*s,outerHeight:t.outerHeight()*i,outerWidth:t.outerWidth()*s})},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();1<e&&s.splice.apply(s,[1,0].concat(s.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data(j,t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data(j)||"",t.removeData(j)},mode:function(t,e){return t=t.is(":hidden"),"toggle"===e&&(e=t?"show":"hide"),(t?"hide"===e:"show"===e)?"none":e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createPlaceholder:function(e){var i,s=e.css("position"),n=e.position();return e.css({marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()),/^(static|relative)/.test(s)&&(s="absolute",i=t("<"+e[0].nodeName+">").insertAfter(e).css({display:/^(inline|ruby)/.test(e.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight"),float:e.css("float")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).addClass("ui-effects-placeholder"),e.data(B+"placeholder",i)),e.css({position:s,left:n.left,top:n.top}),i},removePlaceholder:function(t){var e=B+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(e){t.effects.restoreStyle(e),t.effects.removePlaceholder(e)},setTransition:function(e,i,s,n){return n=n||{},t.each(i,(function(t,i){var o=e.cssUnit(i);0<o[0]&&(n[i]=o[0]*s+o[1])})),n}}),t.fn.extend({effect:function(){function e(e){var i=t(this),s=t.effects.mode(i,l)||n;i.data(q,!0),h.push(s),n&&("show"===s||s===n&&"hide"===s)&&i.show(),n&&"none"===s||t.effects.saveStyle(i),"function"==typeof e&&e()}var i=U.apply(this,arguments),s=t.effects.effect[i.effect],n=s.mode,o=i.queue,a=o||"fx",r=i.complete,l=i.mode,h=[];return t.fx.off||!s?l?this[l](i.duration,r):this.each((function(){r&&r.call(this)})):!1===o?this.each(e).each(c):this.queue(a,e).queue(a,c);function c(e){var o=t(this);function a(){"function"==typeof r&&r.call(o[0]),"function"==typeof e&&e()}i.mode=h.shift(),!0!==t.uiBackCompat||n?"none"===i.mode?(o[l](),a()):s.call(o[0],i,(function(){o.removeData(q),t.effects.cleanUp(o),"hide"===i.mode&&o.hide(),a()})):(o.is(":hidden")?"hide"===l:"show"===l)?(o[l](),a()):s.call(o[0],i,a)}},show:(L=t.fn.show,function(t){return V(t)?L.apply(this,arguments):((t=U.apply(this,arguments)).mode="show",this.effect.call(this,t))}),hide:(F=t.fn.hide,function(t){return V(t)?F.apply(this,arguments):((t=U.apply(this,arguments)).mode="hide",this.effect.call(this,t))}),toggle:(W=t.fn.toggle,function(t){return V(t)||"boolean"==typeof t?W.apply(this,arguments):((t=U.apply(this,arguments)).mode="toggle",this.effect.call(this,t))}),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],(function(t,e){0<i.indexOf(e)&&(s=[parseFloat(i),e])})),s},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):X(this.css("clip"),this)},transfer:function(e,i){var s=t(this),n="fixed"===(l=t(e.to)).css("position"),o=t("body"),a=n?o.scrollTop():0,r=(o=n?o.scrollLeft():0,{top:(r=l.offset()).top-a,left:r.left-o,height:l.innerHeight(),width:l.innerWidth()}),l=s.offset(),h=t("<div class='ui-effects-transfer'></div>");h.appendTo("body").addClass(e.className).css({top:l.top-a,left:l.left-o,height:s.innerHeight(),width:s.innerWidth(),position:n?"fixed":"absolute"}).animate(r,e.duration,e.easing,(function(){h.remove(),"function"==typeof i&&i()}))}}),t.fx.step.clip=function(e){e.clipInit||(e.start=t(e.elem).cssClip(),"string"==typeof e.end&&(e.end=X(e.end,e.elem)),e.clipInit=!0),t(e.elem).cssClip({top:e.pos*(e.end.top-e.start.top)+e.start.top,right:e.pos*(e.end.right-e.start.right)+e.start.right,bottom:e.pos*(e.end.bottom-e.start.bottom)+e.start.bottom,left:e.pos*(e.end.left-e.start.left)+e.start.left})},R={},t.each(["Quad","Cubic","Quart","Quint","Expo"],(function(t,e){R[e]=function(e){return Math.pow(e,t+2)}})),t.extend(R,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;t<((e=Math.pow(2,--i))-1)/11;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(R,(function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return t<.5?i(2*t)/2:1-i(-2*t+2)/2}}));var $,G,Q,J=t.effects,Z=(t.effects.define("blind","hide",(function(e,i){var s={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},n=t(this),o=e.direction||"up",a=n.cssClip(),r={clip:t.extend({},a)},l=t.effects.createPlaceholder(n);r.clip[s[o][0]]=r.clip[s[o][1]],"show"===e.mode&&(n.cssClip(r.clip),l&&l.css(t.effects.clipToBox(r)),r.clip=a),l&&l.animate(t.effects.clipToBox(r),e.duration,e.easing),n.animate(r,{queue:!1,duration:e.duration,easing:e.easing,complete:i})})),t.effects.define("bounce",(function(e,i){var s,n,o=t(this),a="hide"===(r=e.mode),r="show"===r,l=e.direction||"up",h=e.distance,c=e.times||5,u=2*c+(r||a?1:0),d=e.duration/u,p=e.easing,f="up"===l||"down"===l?"top":"left",g="up"===l||"left"===l,m=0;e=o.queue().length;for(t.effects.createPlaceholder(o),l=o.css(f),h=h||o["top"==f?"outerHeight":"outerWidth"]()/3,r&&((n={opacity:1})[f]=l,o.css("opacity",0).css(f,g?2*-h:2*h).animate(n,d,p)),a&&(h/=Math.pow(2,c-1)),(n={})[f]=l;m<c;m++)(s={})[f]=(g?"-=":"+=")+h,o.animate(s,d,p).animate(n,d,p),h=a?2*h:h/2;a&&((s={opacity:0})[f]=(g?"-=":"+=")+h,o.animate(s,d,p)),o.queue(i),t.effects.unshift(o,e,1+u)})),t.effects.define("clip","hide",(function(e,i){var s={},n=t(this),o=(a="both"===(r=e.direction||"vertical"))||"horizontal"===r,a=a||"vertical"===r,r=n.cssClip();s.clip={top:a?(r.bottom-r.top)/2:r.top,right:o?(r.right-r.left)/2:r.right,bottom:a?(r.bottom-r.top)/2:r.bottom,left:o?(r.right-r.left)/2:r.left},t.effects.createPlaceholder(n),"show"===e.mode&&(n.cssClip(s.clip),s.clip=r),n.animate(s,{queue:!1,duration:e.duration,easing:e.easing,complete:i})})),t.effects.define("drop","hide",(function(e,i){var s,n,o=t(this),a="show"===e.mode,r="up"===(n=e.direction||"left")||"down"===n?"top":"left",l="+="==(n="up"===n||"left"===n?"-=":"+=")?"-=":"+=",h={opacity:0};t.effects.createPlaceholder(o),s=e.distance||o["top"==r?"outerHeight":"outerWidth"](!0)/2,h[r]=n+s,a&&(o.css(h),h[r]=l+s,h.opacity=1),o.animate(h,{queue:!1,duration:e.duration,easing:e.easing,complete:i})})),t.effects.define("explode","hide",(function(e,i){var s,n,o,a,r,l,h=e.pieces?Math.round(Math.sqrt(e.pieces)):3,c=h,u=t(this),d="show"===e.mode,p=u.show().css("visibility","hidden").offset(),f=Math.ceil(u.outerWidth()/c),g=Math.ceil(u.outerHeight()/h),m=[];function _(){m.push(this),m.length===h*c&&(u.css({visibility:"visible"}),t(m).remove(),i())}for(s=0;s<h;s++)for(a=p.top+s*g,l=s-(h-1)/2,n=0;n<c;n++)o=p.left+n*f,r=n-(c-1)/2,u.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-n*f,top:-s*g}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:f,height:g,left:o+(d?r*f:0),top:a+(d?l*g:0),opacity:d?0:1}).animate({left:o+(d?0:r*f),top:a+(d?0:l*g),opacity:d?1:0},e.duration||500,e.easing,_)})),t.effects.define("fade","toggle",(function(e,i){var s="show"===e.mode;t(this).css("opacity",s?0:1).animate({opacity:s?1:0},{queue:!1,duration:e.duration,easing:e.easing,complete:i})})),t.effects.define("fold","hide",(function(e,i){var s=t(this),n="show"===(o=e.mode),o="hide"===o,a=e.size||15,r=/([0-9]+)%/.exec(a),l=e.horizFirst?["right","bottom"]:["bottom","right"],h=e.duration/2,c=t.effects.createPlaceholder(s),u=s.cssClip(),d={clip:t.extend({},u)},p={clip:t.extend({},u)},f=[u[l[0]],u[l[1]]],g=s.queue().length;r&&(a=parseInt(r[1],10)/100*f[o?0:1]),d.clip[l[0]]=a,p.clip[l[0]]=a,p.clip[l[1]]=0,n&&(s.cssClip(p.clip),c&&c.css(t.effects.clipToBox(p)),p.clip=u),s.queue((function(i){c&&c.animate(t.effects.clipToBox(d),h,e.easing).animate(t.effects.clipToBox(p),h,e.easing),i()})).animate(d,h,e.easing).animate(p,h,e.easing).queue(i),t.effects.unshift(s,g,4)})),t.effects.define("highlight","show",(function(e,i){var s=t(this),n={backgroundColor:s.css("backgroundColor")};"hide"===e.mode&&(n.opacity=0),t.effects.saveStyle(s),s.css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})})),t.effects.define("size",(function(e,i){var s,n=t(this),o=["fontSize"],a=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],r=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],l=e.mode,h="effect"!==l,c=e.scale||"both",u=e.origin||["middle","center"],d=n.css("position"),p=n.position(),f=t.effects.scaledDimensions(n),g=e.from||f,m=e.to||t.effects.scaledDimensions(n,0);t.effects.createPlaceholder(n),"show"===l&&(l=g,g=m,m=l),s={from:{y:g.height/f.height,x:g.width/f.width},to:{y:m.height/f.height,x:m.width/f.width}},"box"!==c&&"both"!==c||(s.from.y!==s.to.y&&(g=t.effects.setTransition(n,a,s.from.y,g),m=t.effects.setTransition(n,a,s.to.y,m)),s.from.x!==s.to.x&&(g=t.effects.setTransition(n,r,s.from.x,g),m=t.effects.setTransition(n,r,s.to.x,m))),"content"!==c&&"both"!==c||s.from.y!==s.to.y&&(g=t.effects.setTransition(n,o,s.from.y,g),m=t.effects.setTransition(n,o,s.to.y,m)),u&&(l=t.effects.getBaseline(u,f),g.top=(f.outerHeight-g.outerHeight)*l.y+p.top,g.left=(f.outerWidth-g.outerWidth)*l.x+p.left,m.top=(f.outerHeight-m.outerHeight)*l.y+p.top,m.left=(f.outerWidth-m.outerWidth)*l.x+p.left),delete g.outerHeight,delete g.outerWidth,n.css(g),"content"!==c&&"both"!==c||(a=a.concat(["marginTop","marginBottom"]).concat(o),r=r.concat(["marginLeft","marginRight"]),n.find("*[width]").each((function(){var i=t(this),n={height:(o=t.effects.scaledDimensions(i)).height*s.from.y,width:o.width*s.from.x,outerHeight:o.outerHeight*s.from.y,outerWidth:o.outerWidth*s.from.x},o={height:o.height*s.to.y,width:o.width*s.to.x,outerHeight:o.height*s.to.y,outerWidth:o.width*s.to.x};s.from.y!==s.to.y&&(n=t.effects.setTransition(i,a,s.from.y,n),o=t.effects.setTransition(i,a,s.to.y,o)),s.from.x!==s.to.x&&(n=t.effects.setTransition(i,r,s.from.x,n),o=t.effects.setTransition(i,r,s.to.x,o)),h&&t.effects.saveStyle(i),i.css(n),i.animate(o,e.duration,e.easing,(function(){h&&t.effects.restoreStyle(i)}))}))),n.animate(m,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){var e=n.offset();0===m.opacity&&n.css("opacity",g.opacity),h||(n.css("position","static"===d?"relative":d).offset(e),t.effects.saveStyle(n)),i()}})})),t.effects.define("scale",(function(e,i){var s=t(this),n=e.mode;n=parseInt(e.percent,10)||(0===parseInt(e.percent,10)||"effect"!==n?0:100),s=t.extend(!0,{from:t.effects.scaledDimensions(s),to:t.effects.scaledDimensions(s,n,e.direction||"both"),origin:e.origin||["middle","center"]},e);e.fade&&(s.from.opacity=1,s.to.opacity=0),t.effects.effect.size.call(this,s,i)})),t.effects.define("puff","hide",(function(e,i){e=t.extend(!0,{},e,{fade:!0,percent:parseInt(e.percent,10)||150}),t.effects.effect.scale.call(this,e,i)})),t.effects.define("pulsate","show",(function(e,i){var s=t(this),n="show"===(h=e.mode),o=2*(e.times||5)+(n||"hide"===h?1:0),a=e.duration/o,r=0,l=1,h=s.queue().length;for(!n&&s.is(":visible")||(s.css("opacity",0).show(),r=1);l<o;l++)s.animate({opacity:r},a,e.easing),r=1-r;s.animate({opacity:r},a,e.easing),s.queue(i),t.effects.unshift(s,h,1+o)})),t.effects.define("shake",(function(e,i){var s=1,n=t(this),o=e.direction||"left",a=e.distance||20,r=e.times||3,l=2*r+1,h=Math.round(e.duration/l),c="up"===o||"down"===o?"top":"left",u=(o="up"===o||"left"===o,{}),d={},p={},f=n.queue().length;for(t.effects.createPlaceholder(n),u[c]=(o?"-=":"+=")+a,d[c]=(o?"+=":"-=")+2*a,p[c]=(o?"-=":"+=")+2*a,n.animate(u,h,e.easing);s<r;s++)n.animate(d,h,e.easing).animate(p,h,e.easing);n.animate(d,h,e.easing).animate(u,h/2,e.easing).queue(i),t.effects.unshift(n,f,1+l)})),t.effects.define("slide","show",(function(e,i){var s,n,o=t(this),a={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},r=e.mode,l=e.direction||"left",h="up"===l||"down"===l?"top":"left",c="up"===l||"left"===l,u=e.distance||o["top"==h?"outerHeight":"outerWidth"](!0),d={};t.effects.createPlaceholder(o),s=o.cssClip(),n=o.position()[h],d[h]=(c?-1:1)*u+n,d.clip=o.cssClip(),d.clip[a[l][1]]=d.clip[a[l][0]],"show"===r&&(o.cssClip(d.clip),o.css(h,d[h]),d.clip=s,d[h]=n),o.animate(d,{queue:!1,duration:e.duration,easing:e.easing,complete:i})})),J=!0===t.uiBackCompat?t.effects.define("transfer",(function(e,i){t(this).transfer(e,i)})):J,t.ui.focusable=function(e,i){var s,n,o,a=e.nodeName.toLowerCase();return"area"===a?(o=(s=e.parentNode).name,!(!e.href||!o||"map"!==s.nodeName.toLowerCase())&&0<(s=t("img[usemap='#"+o+"']")).length&&s.is(":visible")):(/^(input|select|textarea|button|object)$/.test(a)?(n=!e.disabled)&&(o=t(e).closest("fieldset")[0])&&(n=!o.disabled):n="a"===a&&e.href||i,n&&t(e).is(":visible")&&"visible"===t(e).css("visibility"))},t.extend(t.expr.pseudos,{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout((function(){var i=e.data("ui-form-reset-instances");t.each(i,(function(){this.refresh()}))}))},_bindFormResetHandler:function(){var e;this.form=t(this.element.prop("form")),this.form.length&&((e=this.form.data("ui-form-reset-instances")||[]).length||this.form.on("reset.ui-form-reset",this._formResetHandler),e.push(this),this.form.data("ui-form-reset-instances",e))},_unbindFormResetHandler:function(){var e;this.form.length&&((e=this.form.data("ui-form-reset-instances")).splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset"))}},t.escapeSelector||(t.escapeSelector=function(t){return CSS.escape(t+"")}),t.fn.even&&t.fn.odd||t.fn.extend({even:function(){return this.filter((function(t){return t%2==0}))},odd:function(){return this.filter((function(t){return t%2==1}))}}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.fn.labels=function(){var t,e,i;return this.length?this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(e=this.eq(0).parents("label"),(t=this.attr("id"))&&(i=(i=this.eq(0).parents().last()).add((i.length?i:this).siblings()),t="label[for='"+CSS.escape(t)+"']",e=e.add(i.find(t).addBack(t))),this.pushStack(e)):this.pushStack([])},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/;e=this.parents().filter((function(){var e=t(this);return(!s||"static"!==e.css("position"))&&n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))})).eq(0);return"fixed"!==i&&e.length?e:t(this[0].ownerDocument||document)},t.extend(t.expr.pseudos,{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||0<=i)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:($=0,function(){return this.each((function(){this.id||(this.id="ui-id-"+ ++$)}))}),removeUniqueId:function(){return this.each((function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")}))}}),t.widget("ui.accordion",{version:"1.14.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:function(t){return t.find("> li > :first-child").add(t.find("> :not(li)").filter((function(t){return t%2==0})))},heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||!1!==e.active&&null!=e.active||(e.active=0),this._processPanels(),e.active<0&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i=this.options.icons;i&&(e=t("<span>"),this._addClass(e,"ui-accordion-header-icon","ui-icon "+i.header),e.prependTo(this.headers),e=this.active.children(".ui-accordion-header-icon"),this._removeClass(e,i.header)._addClass(e,null,i.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){"active"===t?this._activate(e):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||!1!==this.options.active||this._activate(0),"icons"===t&&(this._destroyIcons(),e)&&this._createIcons())},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),!1===e.active&&!0===e.collapsible||!this.headers.length?(e.active=!1,this.active=t()):!1===e.active?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;"function"==typeof this.options.header?this.headers=this.options.header(this.element):this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each((function(){var e=t(this),i=e.uniqueId().attr("id"),s=e.next(),n=s.uniqueId().attr("id");e.attr("aria-controls",n),s.attr("aria-labelledby",i)})).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(e=n.height(),this.element.siblings(":visible").each((function(){var i=t(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(e-=i.outerHeight(!0))})),this.headers.each((function(){e-=t(this).outerHeight(!0)})),this.headers.next().each((function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))})).css("overflow","auto")):"auto"===s&&(e=0,this.headers.next().each((function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()})).height(e))},_activate:function(e){(e=this._findActive(e)[0])!==this.active[0]&&(e=e||this.active[0],this._eventHandler({target:e,currentTarget:e,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),(function(t,e){i[e]="_eventHandler"})),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n[0]===s[0],a=o&&i.collapsible,r=a?t():n.next(),l=s.next();l={oldHeader:s,oldPanel:l,newHeader:a?t():n,newPanel:r};e.preventDefault(),o&&!i.collapsible||!1===this._trigger("beforeActivate",e,l)||(i.active=!a&&this.headers.index(n),this.active=o?t():n,this._toggle(l),this._removeClass(s,"ui-accordion-header-active","ui-state-active"),i.icons&&(r=s.children(".ui-accordion-header-icon"),this._removeClass(r,null,i.icons.activeHeader)._addClass(r,null,i.icons.header)),o)||(this._removeClass(n,"ui-accordion-header-collapsed")._addClass(n,"ui-accordion-header-active","ui-state-active"),i.icons&&(e=n.children(".ui-accordion-header-icon"),this._removeClass(e,null,i.icons.header)._addClass(e,null,i.icons.activeHeader)),this._addClass(n.next(),"ui-accordion-content-active"))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter((function(){return 0===parseInt(t(this).attr("tabIndex"),10)})).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){function s(){o._toggleComplete(i)}var n,o=this,a=0,r=t.css("box-sizing"),l=t.length&&(!e.length||t.index()<e.index()),h=this.options.animate||{},c=(c="string"==typeof(l=l&&h.down||h)?l:c)||l.easing||h.easing,u=(u="number"==typeof l?l:u)||l.duration||h.duration;return e.length?t.length?(n=t.show().outerHeight(),e.animate(this.hideProps,{duration:u,easing:c,step:function(t,e){e.now=Math.round(t)}}),void t.hide().animate(this.showProps,{duration:u,easing:c,complete:s,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?"content-box"===r&&(a+=i.now):"content"!==o.options.heightStyle&&(i.now=Math.round(n-e.outerHeight()-a),a=0)}})):e.animate(this.hideProps,u,c,s):t.animate(this.showProps,u,c,s)},_toggleComplete:function(t){var e=t.oldPanel,i=e.prev();this._removeClass(e,"ui-accordion-content-active"),this._removeClass(i,"ui-accordion-header-active")._addClass(i,"ui-accordion-header-collapsed"),this._trigger("activate",null,t)}}),t.widget("ui.menu",{version:"1.14.1",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.lastMousePosition={x:null,y:null},this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault(),this._activateItem(t)},"click .ui-menu-item":function(e){var i=t(e.target),s=t(this.document[0].activeElement);!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active)&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer))},"mouseenter .ui-menu-item":"_activateItem","mousemove .ui-menu-item":"_activateItem",mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this._menuItems().first();e||this.focus(t,i)},blur:function(e){this._delay((function(){t.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(e)}))},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t,!0),this.mouseHandled=!1}})},_activateItem:function(e){var i,s;this.previousFilter||e.clientX===this.lastMousePosition.x&&e.clientY===this.lastMousePosition.y||(this.lastMousePosition={x:e.clientX,y:e.clientY},i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget),i[0]!==s[0])||s.is(".ui-state-active")||(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),e.children().each((function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()}))},_keydown:function(e){var i,s,n,o=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:i=this.previousFilter||"",n=o=!1,s=96<=e.keyCode&&e.keyCode<=105?(e.keyCode-96).toString():String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),s===i?n=!0:s=i+s,i=this._filterMenuItems(s),(i=n&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i).length||(s=String.fromCharCode(e.keyCode),i=this._filterMenuItems(s)),i.length?(this.focus(e,i),this.previousFilter=s,this.filterTimer=this._delay((function(){delete this.previousFilter}),1e3)):delete this.previousFilter}o&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s=this,n=this.options.icons.submenu,o=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),e=o.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each((function(){var e=t(this),i=e.prev(),o=t("<span>").data("ui-menu-submenu-caret",!0);s._addClass(o,"ui-menu-icon","ui-icon "+n),i.attr("aria-haspopup","true").prepend(o),e.attr("aria-labelledby",i.attr("id"))})),this._addClass(e,"ui-menu","ui-widget ui-widget-content ui-front"),(e=o.add(this.element).find(this.options.items)).not(".ui-menu-item").each((function(){var e=t(this);s._isDivider(e)&&s._addClass(e,"ui-menu-divider","ui-widget-content")})),i=(o=e.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(o,"ui-menu-item")._addClass(i,"ui-menu-item-wrapper"),e.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){var i;"icons"===t&&(i=this.element.find(".ui-menu-icon"),this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),i=this.active.children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",i.attr("id")),i=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay((function(){this._close()}),this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,i=e.offset().top-this.activeMenu.offset().top-i-s,s=this.activeMenu.scrollTop(),n=this.activeMenu.height(),e=e.outerHeight(),i<0?this.activeMenu.scrollTop(s+i):n<i+e&&this.activeMenu.scrollTop(s+i-n+e))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay((function(){this._close(),this._open(t)}),this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay((function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s}),i?0:this.delay)},_close:function(t){(t=t||(this.active?this.active.parent():this.element)).find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this._menuItems(this.active.children(".ui-menu")).first();e&&e.length&&(this._open(e.parent()),this._delay((function(){this.focus(t,e)})))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_menuItems:function(t){return(t||this.element).find(this.options.items).filter(".ui-menu-item")},_move:function(t,e,i){var s;(s=this.active?"first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").last():this.active[t+"All"](".ui-menu-item").first():s)&&s.length&&this.active||(s=this._menuItems(this.activeMenu)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;this.active?this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.innerHeight(),0===t.fn.jquery.indexOf("3.2.")&&(n+=this.element[0].offsetHeight-this.element.outerHeight()),this.active.nextAll(".ui-menu-item").each((function(){return(i=t(this)).offset().top-s-n<0})),this.focus(e,i)):this.focus(e,this._menuItems(this.activeMenu)[this.active?"last":"first"]())):this.next(e)},previousPage:function(e){var i,s,n;this.active?this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.innerHeight(),0===t.fn.jquery.indexOf("3.2.")&&(n+=this.element[0].offsetHeight-this.element.outerHeight()),this.active.prevAll(".ui-menu-item").each((function(){return 0<(i=t(this)).offset().top-s+n})),this.focus(e,i)):this.focus(e,this._menuItems(this.activeMenu).first())):this.next(e)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)},_filterMenuItems:function(e){e=e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");var i=new RegExp("^"+e,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter((function(){return i.test(String.prototype.trim.call(t(this).children(".ui-menu-item-wrapper").text()))}))}}),t.widget("ui.autocomplete",{version:"1.14.1",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,liveRegionTimer:null,_create:function(){var e,i,s,n="textarea"===(o=this.element[0].nodeName.toLowerCase()),o="input"===o;this.isMultiLine=n||!o&&"true"===this.element.prop("contentEditable"),this.valueMethod=this.element[n||o?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))i=s=e=!0;else{i=s=e=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}}},keypress:function(s){if(e)e=!1,this.isMultiLine&&!this.menu.element.is(":visible")||s.preventDefault();else if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){s?(s=!1,t.preventDefault()):this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){clearTimeout(this.searching),this.close(t),this._change(t)}}),this._initSource(),this.menu=t("<ul>").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault()},menufocus:function(e,i){var s,n;this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent)&&/^mouse/.test(e.originalEvent.type)?(this.menu.blur(),this.document.one("mousemove",(function(){t(e.target).trigger(e.originalEvent)}))):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:n})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(n.value),(s=i.item.attr("aria-label")||n.value)&&String.prototype.trim.call(s).length&&(clearTimeout(this.liveRegionTimer),this.liveRegionTimer=this._delay((function(){this.liveRegion.html(t("<div>").text(s))}),100)))},menuselect:function(t,e){e=e.item.data("ui-autocomplete-item");var i=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.trigger("focus"),this.previous=i),!1!==this._trigger("select",t,{item:e})&&this._value(e.value),this.term=this._value(),this.close(t),this.selectedItem=e}}),this.liveRegion=t("<div>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return(e=(e=e&&(e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)))&&e[0]?e:this.element.closest(".ui-front, dialog")).length?e:this.document[0].body},_initSource:function(){var e,i,s=this;Array.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay((function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),s=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;e&&(i||s)||(this.selectedItem=null,this.search(null,t))}),this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):!1!==this._trigger("search",e)?this._search(t):void 0},_search:function(t){this.pending++,this._addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var t=++this.requestIndex;return function(e){t===this.requestIndex&&this.__response(e),this.pending--,this.pending||this._removeClass("ui-autocomplete-loading")}.bind(this)},__response:function(t){t=t&&this._normalize(t),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this._off(this.document,"mousedown"),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,(function(e){return"string"==typeof e?{label:e,value:e}:t.extend({},e,{label:e.label||e.value,value:e.value||e.label})}))},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(),this._on(this.document,{mousedown:"_closeOnClickOutside"})},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var s=this;t.each(i,(function(t,i){s._renderItemData(e,i)}))},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<div>").text(i.label)).appendTo(e)},_move:function(t,e){this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur()):this.menu[t](e):this.search(null,e)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){this.isMultiLine&&!this.menu.element.is(":visible")||(this._move(t,e),e.preventDefault())}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=new RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,(function(t){return s.test(t.label||t.value||t)}))}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(1<t?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,clearTimeout(this.liveRegionTimer),this.liveRegionTimer=this._delay((function(){this.liveRegion.html(t("<div>").text(i))}),100))}}),t.ui.autocomplete,/ui-corner-([a-z]){2,6}/g);function tt(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:"",selectMonthLabel:"Select month",selectYearLabel:"Select year"},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,onUpdateDatepicker:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=et(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function et(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,(function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")})).on("mouseover",i,it)}function it(){t.datepicker._isDisabledDatepicker((Q.inline?Q.dpDiv.parent():Q.input)[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function st(e,i){for(var s in t.extend(e,i),i)null==i[s]&&(e[s]=i[s])}t.widget("ui.controlgroup",{version:"1.14.1",defaultElement:"<div>",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var e=this,i=[];t.each(this.options.items,(function(s,n){var o,a={};n&&("controlgroupLabel"===s?((o=e.element.find(n)).each((function(){var e=t(this);e.children(".ui-controlgroup-label-contents").length||e.contents().wrapAll("<span class='ui-controlgroup-label-contents'></span>")})),e._addClass(o,null,"ui-widget ui-widget-content ui-state-default"),i=i.concat(o.get())):t.fn[s]&&(a=e["_"+s+"Options"]?e["_"+s+"Options"]("middle"):{classes:{}},e.element.find(n).each((function(){var n=t(this),o=n[s]("instance"),r=t.widget.extend({},a);"button"===s&&n.parent(".ui-spinner").length||((o=o||n[s]()[s]("instance"))&&(r.classes=e._resolveClassesValues(r.classes,o)),n[s](r),r=n[s]("widget"),t.data(r[0],"ui-controlgroup-data",o||n[s]("instance")),i.push(r[0]))}))))})),this.childWidgets=t(t.uniqueSort(i)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each((function(){var i=t(this).data("ui-controlgroup-data");i&&i[e]&&i[e]()}))},_updateCornerClass:function(t,e){e=this._buildSimpleOptions(e,"label").classes.label,this._removeClass(t,null,"ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all"),this._addClass(t,null,e)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){return(t=this._buildSimpleOptions(t,"ui-spinner")).classes["ui-spinner-up"]="",t.classes["ui-spinner-down"]="",t},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:e&&"auto",classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(e,i){var s={};return t.each(e,(function(t){var n=i.options.classes[t]||"";n=String.prototype.trim.call(n.replace(Z,""));s[t]=(n+" "+e[t]).replace(/\s+/g," ")})),s},_setOption:function(t,e){"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"===t?this._callChildMethod(e?"disable":"enable"):this.refresh()},refresh:function(){var e,i=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),e=this.childWidgets,(e=this.options.onlyVisible?e.filter(":visible"):e).length&&(t.each(["first","last"],(function(t,s){var n,o=e[s]().data("ui-controlgroup-data");o&&i["_"+o.widgetName+"Options"]?((n=i["_"+o.widgetName+"Options"](1===e.length?"only":s)).classes=i._resolveClassesValues(n.classes,o),o.element[o.widgetName](n)):i._updateCornerClass(e[s](),s)})),this._callChildMethod("refresh"))}}),t.widget("ui.checkboxradio",[t.ui.formResetMixin,{version:"1.14.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var e,i=this._super()||{};return this._readType(),e=this.element.labels(),this.label=t(e[e.length-1]),this.label.length||t.error("No label found for checkboxradio widget"),this.originalLabel="",(e=this.label.contents().not(this.element[0])).length&&(this.originalLabel+=e.clone().wrapAll("<div></div>").parent().html()),this.originalLabel&&(i.label=this.originalLabel),null!=(e=this.element[0].disabled)&&(i.disabled=e),i},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var e=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===e&&/radio|checkbox/.test(this.type)||t.error("Can't create checkboxradio on element.nodeName="+e+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var e=this.element[0].name,i="input[name='"+CSS.escape(e)+"']";return e?(this.form.length?t(this.form[0].elements).filter(i):t(i).filter((function(){return 0===t(t(this).prop("form")).length}))).not(this.element):t([])},_toggleClasses:function(){var e=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",e),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",e)._toggleClass(this.icon,null,"ui-icon-blank",!e),"radio"===this.type&&this._getRadioGroup().each((function(){var e=t(this).checkboxradio("instance");e&&e._removeClass(e.label,"ui-checkboxradio-checked","ui-state-active")}))},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){"label"===t&&!e||(this._super(t,e),"disabled"===t?(this._toggleClass(this.label,null,"ui-state-disabled",e),this.element[0].disabled=e):this.refresh())},_updateIcon:function(e){var i="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=t("<span>"),this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(i+=e?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,e?"ui-icon-blank":"ui-icon-check")):i+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",i),e||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),(t=this.iconSpace?t.not(this.iconSpace[0]):t).remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]),t.ui.checkboxradio,t.widget("ui.button",{version:"1.14.1",defaultElement:"<button>",options:{classes:{"ui-button":"ui-corner-all"},disabled:null,icon:null,iconPosition:"beginning",label:null,showLabel:!0},_getCreateOptions:function(){var t,e=this._super()||{};return this.isInput=this.element.is("input"),null!=(t=this.element[0].disabled)&&(e.disabled=t),this.originalLabel=this.isInput?this.element.val():this.element.html(),this.originalLabel&&(e.label=this.originalLabel),e},_create:function(){!this.option.showLabel&!this.options.icon&&(this.options.showLabel=!0),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled||!1),this.hasTitle=!!this.element.attr("title"),this.options.label&&this.options.label!==this.originalLabel&&(this.isInput?this.element.val(this.options.label):this.element.html(this.options.label)),this._addClass("ui-button","ui-widget"),this._setOption("disabled",this.options.disabled),this._enhance(),this.element.is("a")&&this._on({keyup:function(e){e.keyCode===t.ui.keyCode.SPACE&&(e.preventDefault(),this.element[0].click?this.element[0].click():this.element.trigger("click"))}})},_enhance:function(){this.element.is("button")||this.element.attr("role","button"),this.options.icon&&(this._updateIcon("icon",this.options.icon),this._updateTooltip())},_updateTooltip:function(){this.title=this.element.attr("title"),this.options.showLabel||this.title||this.element.attr("title",this.options.label)},_updateIcon:function(e,i){var s=(e="iconPosition"!==e)?this.options.iconPosition:i,n="top"===s||"bottom"===s;this.icon?e&&this._removeClass(this.icon,null,this.options.icon):(this.icon=t("<span>"),this._addClass(this.icon,"ui-button-icon","ui-icon"),this.options.showLabel||this._addClass("ui-button-icon-only")),e&&this._addClass(this.icon,null,i),this._attachIcon(s),n?(this._addClass(this.icon,null,"ui-widget-icon-block"),this.iconSpace&&this.iconSpace.remove()):(this.iconSpace||(this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-button-icon-space")),this._removeClass(this.icon,null,"ui-wiget-icon-block"),this._attachIconSpace(s))},_destroy:function(){this.element.removeAttr("role"),this.icon&&this.icon.remove(),this.iconSpace&&this.iconSpace.remove(),this.hasTitle||this.element.removeAttr("title")},_attachIconSpace:function(t){this.icon[/^(?:end|bottom)/.test(t)?"before":"after"](this.iconSpace)},_attachIcon:function(t){this.element[/^(?:end|bottom)/.test(t)?"append":"prepend"](this.icon)},_setOptions:function(t){var e=(void 0===t.showLabel?this.options:t).showLabel,i=(void 0===t.icon?this.options:t).icon;e||i||(t.showLabel=!0),this._super(t)},_setOption:function(t,e){"icon"===t&&(e?this._updateIcon(t,e):this.icon&&(this.icon.remove(),this.iconSpace)&&this.iconSpace.remove()),"iconPosition"===t&&this._updateIcon(t,e),"showLabel"===t&&(this._toggleClass("ui-button-icon-only",null,!e),this._updateTooltip()),"label"===t&&(this.isInput?this.element.val(e):(this.element.html(e),this.icon&&(this._attachIcon(this.options.iconPosition),this._attachIconSpace(this.options.iconPosition)))),this._super(t,e),"disabled"===t&&(this._toggleClass(null,"ui-state-disabled",e),this.element[0].disabled=e)&&this.element.trigger("blur")},refresh:function(){var t=this.element.is("input, button")?this.element[0].disabled:this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOptions({disabled:t}),this._updateTooltip()}}),!0===t.uiBackCompat&&(t.widget("ui.button",t.ui.button,{options:{text:!0,icons:{primary:null,secondary:null}},_create:function(){this.options.showLabel&&!this.options.text&&(this.options.showLabel=this.options.text),!this.options.showLabel&&this.options.text&&(this.options.text=this.options.showLabel),this.options.icon||!this.options.icons.primary&&!this.options.icons.secondary?this.options.icon&&(this.options.icons.primary=this.options.icon):this.options.icons.primary?this.options.icon=this.options.icons.primary:(this.options.icon=this.options.icons.secondary,this.options.iconPosition="end"),this._super()},_setOption:function(t,e){"text"===t?this._super("showLabel",e):("showLabel"===t&&(this.options.text=e),"icon"===t&&(this.options.icons.primary=e),"icons"===t&&(e.primary?(this._super("icon",e.primary),this._super("iconPosition","beginning")):e.secondary&&(this._super("icon",e.secondary),this._super("iconPosition","end"))),this._superApply(arguments))}}),t.fn.button=(G=t.fn.button,function(e){var i="string"==typeof e,s=Array.prototype.slice.call(arguments,1),n=this;return i?this.length||"instance"!==e?this.each((function(){var i,o=t(this).attr("type");o=t.data(this,"ui-"+("checkbox"!==o&&"radio"!==o?"button":"checkboxradio"));return"instance"===e?(n=o,!1):o?"function"!=typeof o[e]||"_"===e.charAt(0)?t.error("no such method '"+e+"' for button widget instance"):(i=o[e].apply(o,s))!==o&&void 0!==i?(n=i&&i.jquery?n.pushStack(i.get()):i,!1):void 0:t.error("cannot call methods on button prior to initialization; attempted to call method '"+e+"'")})):n=void 0:(s.length&&(e=t.widget.extend.apply(null,[e].concat(s))),this.each((function(){var i="checkbox"!==(i=t(this).attr("type"))&&"radio"!==i?"button":"checkboxradio",s=t.data(this,"ui-"+i);s?(s.option(e||{}),s._init&&s._init()):"button"==i?G.call(t(this),e):t(this).checkboxradio(t.extend({icon:!1},e))}))),n}),t.fn.buttonset=function(){return t.ui.controlgroup||t.error("Controlgroup widget missing"),"option"===arguments[0]&&"items"===arguments[1]&&arguments[2]?this.controlgroup.apply(this,[arguments[0],"items.button",arguments[2]]):"option"===arguments[0]&&"items"===arguments[1]?this.controlgroup.apply(this,[arguments[0],"items.button"]):("object"==typeof arguments[0]&&arguments[0].items&&(arguments[0].items={button:arguments[0].items}),this.controlgroup.apply(this,arguments))}),t.ui.button,t.extend(t.ui,{datepicker:{version:"1.14.1"}}),t.extend(tt.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return st(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n=e.nodeName.toLowerCase(),o="div"===n||"span"===n;e.id||(this.uuid+=1,e.id="dp"+this.uuid),(s=this._newInst(t(e),o)).settings=t.extend({},i||{}),"input"===n?this._connectDatepicker(e,s):o&&this._inlineDatepicker(e,s)},_newInst:function(e,i){return{id:e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1"),input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?et(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).on("keydown",this._doKeyDown).on("keypress",this._doKeyPress).on("keyup",this._doKeyUp),this._autoSize(i),t.data(e,"datepicker",i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n=this._get(i,"appendText"),o=this._get(i,"isRTL");i.append&&i.append.remove(),n&&(i.append=t("<span>").addClass(this._appendClass).text(n),e[o?"before":"after"](i.append)),e.off("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),"focus"!==(n=this._get(i,"showOn"))&&"both"!==n||e.on("focus",this._showDatepicker),"button"!==n&&"both"!==n||(n=this._get(i,"buttonText"),s=this._get(i,"buttonImage"),this._get(i,"buttonImageOnly")?i.trigger=t("<img>").addClass(this._triggerClass).attr({src:s,alt:n,title:n}):(i.trigger=t("<button type='button'>").addClass(this._triggerClass),s?i.trigger.html(t("<img>").attr({src:s,alt:n,title:n})):i.trigger.text(n)),e[o?"before":"after"](i.trigger),i.trigger.on("click",(function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():(t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]&&t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])),!1})))},_autoSize:function(t){var e,i,s,n,o,a;this._get(t,"autoSize")&&!t.inline&&(o=new Date(2009,11,20),(a=this._get(t,"dateFormat")).match(/[DM]/)&&(o.setMonth((e=function(t){for(n=s=i=0;n<t.length;n++)t[n].length>i&&(i=t[n].length,s=n);return s})(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length))},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,n,o){var a,r=this._dialogInst;return r||(this.uuid+=1,a="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+a+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),(r=this._dialogInst=this._newInst(this._dialogInput,!1)).settings={},t.data(this._dialogInput[0],"datepicker",r)),st(r.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(r,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(a=document.documentElement.clientWidth,n=document.documentElement.clientHeight,i=document.documentElement.scrollLeft||document.body.scrollLeft,o=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[a/2-100+i,n/2-150+o]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),r.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",r),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):"div"!==i&&"span"!==i||s.removeClass(this.markerClassName).empty(),t.datepicker._hideDatepicker(),Q===n)&&(Q=null,this._curInst=null)},_enableDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&("input"===(i=e.nodeName.toLowerCase())?(e.disabled=!1,n.trigger.filter("button").each((function(){this.disabled=!1})).end().filter("img").css({opacity:"1.0",cursor:""})):"div"!==i&&"span"!==i||((n=s.children("."+this._inlineClass)).children().removeClass("ui-state-disabled"),n.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,(function(t){return t===e?null:t})))},_disableDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&("input"===(i=e.nodeName.toLowerCase())?(e.disabled=!0,n.trigger.filter("button").each((function(){this.disabled=!0})).end().filter("img").css({opacity:"0.5",cursor:"default"})):"div"!==i&&"span"!==i||((n=s.children("."+this._inlineClass)).children().addClass("ui-state-disabled"),n.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,(function(t){return t===e?null:t})),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(t)for(var e=0;e<this._disabledInputs.length;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,"datepicker")}catch(e){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,i,s){var n,o,a=this._getInst(e);if(2===arguments.length&&"string"==typeof i)return"defaults"===i?t.extend({},t.datepicker._defaults):a?"all"===i?t.extend({},a.settings):this._get(a,i):null;n=i||{},"string"==typeof i&&((n={})[i]=s),a&&(this._curInst===a&&this._hideDatepicker(),i=this._getDateDatepicker(e,!0),s=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max"),st(a.settings,n),null!==s&&void 0!==n.dateFormat&&void 0===n.minDate&&(a.settings.minDate=this._formatDate(a,s)),null!==o&&void 0!==n.dateFormat&&void 0===n.maxDate&&(a.settings.maxDate=this._formatDate(a,o)),"disabled"in n&&(n.disabled?this._disableDatepicker(e):this._enableDatepicker(e)),this._attachments(t(e),a),this._autoSize(a),this._setDate(a,i),this._updateAlternate(a),this._updateDatepicker(a))},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){(t=this._getInst(t))&&this._updateDatepicker(t)},_setDateDatepicker:function(t,e){(t=this._getInst(t))&&(this._setDate(t,e),this._updateDatepicker(t),this._updateAlternate(t))},_getDateDatepicker:function(t,e){return(t=this._getInst(t))&&!t.inline&&this._setDateFromField(t,e),t?this._getDate(t):null},_doKeyDown:function(e){var i,s,n=t.datepicker._getInst(e.target),o=!0,a=n.dpDiv.is(".ui-datepicker-rtl");if(n._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),o=!1;break;case 13:return(s=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",n.dpDiv))[0]&&t.datepicker._selectDay(e.target,n.selectedMonth,n.selectedYear,s[0]),(s=t.datepicker._get(n,"onSelect"))?(i=t.datepicker._formatDate(n),s.apply(n.input?n.input[0]:null,[i,n])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(n,"stepBigMonths"):-t.datepicker._get(n,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(n,"stepBigMonths"):+t.datepicker._get(n,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),o=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),o=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,a?1:-1,"D"),o=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(n,"stepBigMonths"):-t.datepicker._get(n,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),o=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,a?-1:1,"D"),o=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(n,"stepBigMonths"):+t.datepicker._get(n,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),o=e.ctrlKey||e.metaKey;break;default:o=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):o=!1;o&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var i,s=t.datepicker._getInst(e.target);if(t.datepicker._get(s,"constrainInput"))return s=t.datepicker._possibleChars(t.datepicker._get(s,"dateFormat")),i=String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),e.ctrlKey||e.metaKey||i<" "||!s||-1<s.indexOf(i)},_doKeyUp:function(e){if((e=t.datepicker._getInst(e.target)).input.val()!==e.lastVal)try{t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),e.input?e.input.val():null,t.datepicker._getFormatConfig(e))&&(t.datepicker._setDateFromField(e),t.datepicker._updateAlternate(e),t.datepicker._updateDatepicker(e))}catch(e){}return!0},_showDatepicker:function(e){var i,s,n,o;"input"!==(e=e.target||e).nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),t.datepicker._isDisabledDatepicker(e)||t.datepicker._lastInput===e||(o=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==o&&(t.datepicker._curInst.dpDiv.stop(!0,!0),o)&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0]),!1===(s=(s=t.datepicker._get(o,"beforeShow"))?s.apply(e,[e,o]):{}))||(st(o.settings,s),o.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(o),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),i=!1,t(e).parents().each((function(){return!(i|="fixed"===t(this).css("position"))})),s={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,o.dpDiv.empty(),o.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(o),s=t.datepicker._checkOffset(o,s,i),o.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":i?"fixed":"absolute",display:"none",left:s.left+"px",top:s.top+"px"}),o.inline)||(s=t.datepicker._get(o,"showAnim"),n=t.datepicker._get(o,"duration"),o.dpDiv.css("z-index",(t=>{for(var e;t.length&&t[0]!==document;){if(("absolute"===(e=t.css("position"))||"relative"===e||"fixed"===e)&&(e=parseInt(t.css("zIndex"),10),!isNaN(e))&&0!==e)return e;t=t.parent()}return 0})(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[s]?o.dpDiv.show(s,t.datepicker._get(o,"showOptions"),n):o.dpDiv[s||"show"](s?n:null),t.datepicker._shouldFocusInput(o)&&o.input.trigger("focus"),t.datepicker._curInst=o)},_updateDatepicker:function(e){this.maxRows=4,(Q=e).dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var i,s=this._getNumberOfMonths(e),n=s[1],o=e.dpDiv.find("."+this._dayOverClass+" a"),a=t.datepicker._get(e,"onUpdateDatepicker");0<o.length&&it.apply(o.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),1<n&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",17*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout((function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year").first().replaceWith(e.yearshtml),i=e.yearshtml=null}),0)),a&&a.apply(e.input?e.input[0]:null,[e])},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,l=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),h=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-a:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,l<i.left+n&&n<l?Math.abs(i.left+n-l):0),i.top-=Math.min(i.top,h<i.top+o&&o<h?Math.abs(o+r):0),i},_findPos:function(e){for(var i=this._getInst(e),s=this._get(i,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.pseudos.hidden(e));)e=e[s?"previousSibling":"nextSibling"];return[(i=t(e).offset()).left,i.top]},_hideDatepicker:function(e){var i,s,n=this._curInst;!n||e&&n!==t.data(e,"datepicker")||this._datepickerShowing&&(e=this._get(n,"showAnim"),s=this._get(n,"duration"),i=function(){t.datepicker._tidyDialog(n)},t.effects&&t.effects.effect[e]?n.dpDiv.hide(e,t.datepicker._get(n,"showOptions"),s,i):n.dpDiv["slideDown"===e?"slideUp":"fadeIn"===e?"fadeOut":"hide"](e?s:null,i),e||i(),this._datepickerShowing=!1,(s=this._get(n,"onClose"))&&s.apply(n.input?n.input[0]:null,[n.input?n.input.val():"",n]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI)&&(t.unblockUI(),t("body").append(this.dpDiv)),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){var i;t.datepicker._curInst&&(e=t(e.target),i=t.datepicker._getInst(e[0]),!(e[0].id===t.datepicker._mainDivId||0!==e.parents("#"+t.datepicker._mainDivId).length||e.hasClass(t.datepicker.markerClassName)||e.closest("."+t.datepicker._triggerClass).length||!t.datepicker._datepickerShowing||t.datepicker._inDialog&&t.blockUI)||e.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==i)&&t.datepicker._hideDatepicker()},_adjustDate:function(e,i,s){e=t(e);var n=this._getInst(e[0]);this._isDisabledDatepicker(e[0])||(this._adjustInstDate(n,i,s),this._updateDatepicker(n))},_gotoToday:function(e){e=t(e);var i,s=this._getInst(e[0]);this._get(s,"gotoCurrent")&&s.currentDay?(s.selectedDay=s.currentDay,s.drawMonth=s.selectedMonth=s.currentMonth,s.drawYear=s.selectedYear=s.currentYear):(i=new Date,s.selectedDay=i.getDate(),s.drawMonth=s.selectedMonth=i.getMonth(),s.drawYear=s.selectedYear=i.getFullYear()),this._notifyChange(s),this._adjustDate(e)},_selectMonthYear:function(e,i,s){e=t(e);var n=this._getInst(e[0]);n["selected"+("M"===s?"Month":"Year")]=n["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(n),this._adjustDate(e)},_selectDay:function(e,i,s,n){var o=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0])||((o=this._getInst(o[0])).selectedDay=o.currentDay=parseInt(t("a",n).attr("data-date")),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=s,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){e=t(e),this._selectDate(e,"")},_selectDate:function(e,i){var s;e=t(e),e=this._getInst(e[0]);i=null!=i?i:this._formatDate(e),e.input&&e.input.val(i),this._updateAlternate(e),(s=this._get(e,"onSelect"))?s.apply(e.input?e.input[0]:null,[i,e]):e.input&&e.input.trigger("change"),e.inline?this._updateDatepicker(e):(this._hideDatepicker(),this._lastInput=e.input[0],"object"!=typeof e.input[0]&&e.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,s,n=this._get(e,"altField");n&&(s=this._get(e,"altFormat")||this._get(e,"dateFormat"),i=this._getDate(e),s=this.formatDate(s,i,this._getFormatConfig(e)),t(document).find(n).val(s))},noWeekends:function(t){return[0<(t=t.getDay())&&t<6,""]},iso8601Week:function(t){var e;return(t=new Date(t.getTime())).setDate(t.getDate()+4-(t.getDay()||7)),e=t.getTime(),t.setMonth(0),t.setDate(1),Math.floor(Math.round((e-t)/864e5)/7)+1},parseDate:function(e,i,s){if(null==e||null==i)throw"Invalid arguments";if(""===(i="object"==typeof i?i.toString():i+""))return null;for(var n,o,a=0,r="string"!=typeof(r=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff)?r:(new Date).getFullYear()%100+parseInt(r,10),l=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,h=(s?s.dayNames:null)||this._defaults.dayNames,c=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,u=(s?s.monthNames:null)||this._defaults.monthNames,d=-1,p=-1,f=-1,g=-1,m=!1,_=function(t){return(t=w+1<e.length&&e.charAt(w+1)===t)&&w++,t},v=function(t){var e=_(t);e="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,t=new RegExp("^\\d{"+("y"===t?e:1)+","+e+"}");if(e=i.substring(a).match(t))return a+=e[0].length,parseInt(e[0],10);throw"Missing number at position "+a},b=function(e,s,n){var o=-1;e=t.map(_(e)?n:s,(function(t,e){return[[e,t]]})).sort((function(t,e){return-(t[1].length-e[1].length)}));if(t.each(e,(function(t,e){var s=e[1];if(i.substr(a,s.length).toLowerCase()===s.toLowerCase())return o=e[0],a+=s.length,!1})),-1!==o)return o+1;throw"Unknown name at position "+a},y=function(){if(i.charAt(a)!==e.charAt(w))throw"Unexpected literal at position "+a;a++},w=0;w<e.length;w++)if(m)"'"!==e.charAt(w)||_("'")?y():m=!1;else switch(e.charAt(w)){case"d":f=v("d");break;case"D":b("D",l,h);break;case"o":g=v("o");break;case"m":p=v("m");break;case"M":p=b("M",c,u);break;case"y":d=v("y");break;case"@":d=(o=new Date(v("@"))).getFullYear(),p=o.getMonth()+1,f=o.getDate();break;case"!":d=(o=new Date((v("!")-this._ticksTo1970)/1e4)).getFullYear(),p=o.getMonth()+1,f=o.getDate();break;case"'":_("'")?y():m=!0;break;default:y()}if(a<i.length&&(s=i.substr(a),!/^\s+/.test(s)))throw"Extra/unparsed characters found in date: "+s;if(-1===d?d=(new Date).getFullYear():d<100&&(d+=(new Date).getFullYear()-(new Date).getFullYear()%100+(d<=r?0:-100)),-1<g)for(p=1,f=g;!(f<=(n=this._getDaysInMonth(d,p-1)));)p++,f-=n;if((o=this._daylightSavingAdjust(new Date(d,p-1,f))).getFullYear()!==d||o.getMonth()+1!==p||o.getDate()!==f)throw"Invalid date";return o},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*60*60*1e7,formatDate:function(t,e,i){if(!e)return"";function s(t,e,i){var s=""+e;if(c(t))for(;s.length<i;)s="0"+s;return s}function n(t,e,i,s){return(c(t)?s:i)[e]}var o,a=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,r=(i?i.dayNames:null)||this._defaults.dayNames,l=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,h=(i?i.monthNames:null)||this._defaults.monthNames,c=function(e){return(e=o+1<t.length&&t.charAt(o+1)===e)&&o++,e},u="",d=!1;if(e)for(o=0;o<t.length;o++)if(d)"'"!==t.charAt(o)||c("'")?u+=t.charAt(o):d=!1;else switch(t.charAt(o)){case"d":u+=s("d",e.getDate(),2);break;case"D":u+=n("D",e.getDay(),a,r);break;case"o":u+=s("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=s("m",e.getMonth()+1,2);break;case"M":u+=n("M",e.getMonth(),l,h);break;case"y":u+=c("y")?e.getFullYear():(e.getFullYear()%100<10?"0":"")+e.getFullYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":c("'")?u+="'":d=!0;break;default:u+=t.charAt(o)}return u},_possibleChars:function(t){for(var e="",i=!1,s=function(e){return(e=n+1<t.length&&t.charAt(n+1)===e)&&n++,e},n=0;n<t.length;n++)if(i)"'"!==t.charAt(n)||s("'")?e+=t.charAt(n):i=!1;else switch(t.charAt(n)){case"d":case"m":case"y":case"@":e+="0123456789";break;case"D":case"M":return null;case"'":s("'")?e+="'":i=!0;break;default:e+=t.charAt(n)}return e},_get:function(t,e){return(void 0!==t.settings[e]?t.settings:this._defaults)[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(t){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n,o=null==i||""===i?s:"string"==typeof i?(i=>{try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(i){}for(var s=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,n=s.getFullYear(),o=s.getMonth(),a=s.getDate(),r=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=r.exec(i);l;){switch(l[2]||"d"){case"d":case"D":a+=parseInt(l[1],10);break;case"w":case"W":a+=7*parseInt(l[1],10);break;case"m":case"M":o+=parseInt(l[1],10),a=Math.min(a,t.datepicker._getDaysInMonth(n,o));break;case"y":case"Y":n+=parseInt(l[1],10),a=Math.min(a,t.datepicker._getDaysInMonth(n,o))}l=r.exec(i)}return new Date(n,o,a)})(i):"number"==typeof i?isNaN(i)?s:(o=i,(n=new Date).setDate(n.getDate()+o),n):new Date(i.getTime());return(o=o&&"Invalid Date"===o.toString()?s:o)&&(o.setHours(0),o.setMinutes(0),o.setSeconds(0),o.setMilliseconds(0)),this._daylightSavingAdjust(o)},_daylightSavingAdjust:function(t){return t?(t.setHours(12<t.getHours()?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear;e=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=e.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=e.getMonth(),t.drawYear=t.selectedYear=t.currentYear=e.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){return!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay))},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map((function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])}))},_generateHTML:function(e){var i,s,n,o,a,r,l,h,c,u,d,p,f,g,m,_,v,b,y,w,x,k,C,D,I,T,P,M,S,H,z,O,A=new Date,E=this._daylightSavingAdjust(new Date(A.getFullYear(),A.getMonth(),A.getDate())),N=this._get(e,"isRTL"),W=(A=this._get(e,"showButtonPanel"),this._get(e,"hideIfNoPrevNext")),F=this._get(e,"navigationAsDateFormat"),L=this._getNumberOfMonths(e),R=this._get(e,"showCurrentAtPos"),Y=this._get(e,"stepMonths"),B=1!==L[0]||1!==L[1],j=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),q=this._getMinMaxDate(e,"min"),K=this._getMinMaxDate(e,"max"),U=e.drawMonth-R,V=e.drawYear;if(U<0&&(U+=12,V--),K)for(i=this._daylightSavingAdjust(new Date(K.getFullYear(),K.getMonth()-L[0]*L[1]+1,K.getDate())),i=q&&i<q?q:i;this._daylightSavingAdjust(new Date(V,U,1))>i;)--U<0&&(U=11,V--);for(e.drawMonth=U,e.drawYear=V,R=this._get(e,"prevText"),R=F?this.formatDate(R,this._daylightSavingAdjust(new Date(V,U-Y,1)),this._getFormatConfig(e)):R,s=this._canAdjustMonth(e,-1,V,U)?t("<a>").attr({class:"ui-datepicker-prev ui-corner-all","data-handler":"prev","data-event":"click",title:R}).append(t("<span>").addClass("ui-icon ui-icon-circle-triangle-"+(N?"e":"w")).text(R))[0].outerHTML:W?"":t("<a>").attr({class:"ui-datepicker-prev ui-corner-all ui-state-disabled",title:R}).append(t("<span>").addClass("ui-icon ui-icon-circle-triangle-"+(N?"e":"w")).text(R))[0].outerHTML,R=this._get(e,"nextText"),R=F?this.formatDate(R,this._daylightSavingAdjust(new Date(V,U+Y,1)),this._getFormatConfig(e)):R,n=this._canAdjustMonth(e,1,V,U)?t("<a>").attr({class:"ui-datepicker-next ui-corner-all","data-handler":"next","data-event":"click",title:R}).append(t("<span>").addClass("ui-icon ui-icon-circle-triangle-"+(N?"w":"e")).text(R))[0].outerHTML:W?"":t("<a>").attr({class:"ui-datepicker-next ui-corner-all ui-state-disabled",title:R}).append(t("<span>").attr("class","ui-icon ui-icon-circle-triangle-"+(N?"w":"e")).text(R))[0].outerHTML,Y=this._get(e,"currentText"),W=this._get(e,"gotoCurrent")&&e.currentDay?j:E,Y=F?this.formatDate(Y,W,this._getFormatConfig(e)):Y,R="",e.inline||(R=t("<button>").attr({type:"button",class:"ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all","data-handler":"hide","data-event":"click"}).text(this._get(e,"closeText"))[0].outerHTML),F="",A&&(F=t("<div class='ui-datepicker-buttonpane ui-widget-content'>").append(N?R:"").append(this._isInRange(e,W)?t("<button>").attr({type:"button",class:"ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all","data-handler":"today","data-event":"click"}).text(Y):"").append(N?"":R)[0].outerHTML),o=parseInt(this._get(e,"firstDay"),10),o=isNaN(o)?0:o,a=this._get(e,"showWeek"),r=this._get(e,"dayNames"),l=this._get(e,"dayNamesMin"),h=this._get(e,"monthNames"),c=this._get(e,"monthNamesShort"),u=this._get(e,"beforeShowDay"),d=this._get(e,"showOtherMonths"),p=this._get(e,"selectOtherMonths"),f=this._getDefaultDate(e),g="",_=0;_<L[0];_++){for(v="",this.maxRows=4,b=0;b<L[1];b++){if(y=this._daylightSavingAdjust(new Date(V,U,e.selectedDay)),w=" ui-corner-all",x="",B){if(x+="<div class='ui-datepicker-group",1<L[1])switch(b){case 0:x+=" ui-datepicker-group-first",w=" ui-corner-"+(N?"right":"left");break;case L[1]-1:x+=" ui-datepicker-group-last",w=" ui-corner-"+(N?"left":"right");break;default:x+=" ui-datepicker-group-middle",w=""}x+="'>"}for(x+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+w+"'>"+(/all|left/.test(w)&&0===_?N?n:s:"")+(/all|right/.test(w)&&0===_?N?s:n:"")+this._generateMonthYearHeader(e,U,V,q,K,0<_||0<b,h,c)+"</div><table class='ui-datepicker-calendar'><thead><tr>",k=a?"<th class='ui-datepicker-week-col'>"+this._get(e,"weekHeader")+"</th>":"",m=0;m<7;m++)k+="<th scope='col'"+(5<=(m+o+6)%7?" class='ui-datepicker-week-end'":"")+"><span title='"+r[C=(m+o)%7]+"'>"+l[C]+"</span></th>";for(x+=k+"</tr></thead><tbody>",I=this._getDaysInMonth(V,U),V===e.selectedYear&&U===e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,I)),D=(this._getFirstDayOfMonth(V,U)-o+7)%7,I=Math.ceil((D+I)/7),T=B&&this.maxRows>I?this.maxRows:I,this.maxRows=T,P=this._daylightSavingAdjust(new Date(V,U,1-D)),M=0;M<T;M++){for(x+="<tr>",S=a?"<td class='ui-datepicker-week-col'>"+this._get(e,"calculateWeek")(P)+"</td>":"",m=0;m<7;m++)H=u?u.apply(e.input?e.input[0]:null,[P]):[!0,""],O=(z=P.getMonth()!==U)&&!p||!H[0]||q&&P<q||K&&K<P,S+="<td class='"+(5<=(m+o+6)%7?" ui-datepicker-week-end":"")+(z?" ui-datepicker-other-month":"")+(P.getTime()===y.getTime()&&U===e.selectedMonth&&e._keyEvent||f.getTime()===P.getTime()&&f.getTime()===y.getTime()?" "+this._dayOverClass:"")+(O?" "+this._unselectableClass+" ui-state-disabled":"")+(z&&!d?"":" "+H[1]+(P.getTime()===j.getTime()?" "+this._currentClass:"")+(P.getTime()===E.getTime()?" ui-datepicker-today":""))+"'"+(z&&!d||!H[2]?"":" title='"+H[2].replace(/'/g,"&#39;")+"'")+(O?"":" data-handler='selectDay' data-event='click' data-month='"+P.getMonth()+"' data-year='"+P.getFullYear()+"'")+">"+(z&&!d?"&#xa0;":O?"<span class='ui-state-default'>"+P.getDate()+"</span>":"<a class='ui-state-default"+(P.getTime()===E.getTime()?" ui-state-highlight":"")+(P.getTime()===j.getTime()?" ui-state-active":"")+(z?" ui-priority-secondary":"")+"' href='#' aria-current='"+(P.getTime()===j.getTime()?"true":"false")+"' data-date='"+P.getDate()+"'>"+P.getDate()+"</a>")+"</td>",P.setDate(P.getDate()+1),P=this._daylightSavingAdjust(P);x+=S+"</tr>"}11<++U&&(U=0,V++),v+=x+="</tbody></table>"+(B?"</div>"+(0<L[0]&&b===L[1]-1?"<div class='ui-datepicker-row-break'></div>":""):"")}g+=v}return g+=F,e._keyEvent=!1,g},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var l,h,c,u,d,p,f=this._get(t,"changeMonth"),g=this._get(t,"changeYear"),m=this._get(t,"showMonthAfterYear"),_=this._get(t,"selectMonthLabel"),v=this._get(t,"selectYearLabel"),b="<div class='ui-datepicker-title'>",y="";if(o||!f)y+="<span class='ui-datepicker-month'>"+a[e]+"</span>";else{for(l=s&&s.getFullYear()===i,h=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' aria-label='"+_+"' data-handler='selectMonth' data-event='change'>",c=0;c<12;c++)(!l||c>=s.getMonth())&&(!h||c<=n.getMonth())&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+r[c]+"</option>");y+="</select>"}if(m||(b+=y+(!o&&f&&g?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",o||!g)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(a=this._get(t,"yearRange").split(":"),u=(new Date).getFullYear(),d=(_=function(t){return t=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?u+parseInt(t,10):parseInt(t,10),isNaN(t)?u:t})(a[0]),p=Math.max(d,_(a[1]||"")),d=s?Math.max(d,s.getFullYear()):d,p=n?Math.min(p,n.getFullYear()):p,t.yearshtml+="<select class='ui-datepicker-year' aria-label='"+v+"' data-handler='selectYear' data-event='change'>";d<=p;d++)t.yearshtml+="<option value='"+d+"'"+(d===i?" selected='selected'":"")+">"+d+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),m&&(b+=(!o&&f&&g?"":"&#xa0;")+y),b+"</div>"},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0);e=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),s=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,e)));t.selectedDay=s.getDate(),t.drawMonth=t.selectedMonth=s.getMonth(),t.drawYear=t.selectedYear=s.getFullYear(),"M"!==i&&"Y"!==i||this._notifyChange(t)},_restrictMinMax:function(t,e){var i=(i=this._getMinMaxDate(t,"min"))&&e<i?i:e;return(t=this._getMinMaxDate(t,"max"))&&t<i?t:i},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){return null==(t=this._get(t,"numberOfMonths"))?[1,1]:"number"==typeof t?[1,t]:t},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t);i=this._daylightSavingAdjust(new Date(i,s+(e<0?e:n[0]*n[1]),1));return e<0&&i.setDate(this._getDaysInMonth(i.getFullYear(),i.getMonth())),this._isInRange(t,i)},_isInRange:function(t,e){var i,s=this._getMinMaxDate(t,"min"),n=this._getMinMaxDate(t,"max"),o=null,a=null;return(t=this._get(t,"yearRange"))&&(t=t.split(":"),i=(new Date).getFullYear(),o=parseInt(t[0],10),a=parseInt(t[1],10),t[0].match(/[+\-].*/)&&(o+=i),t[1].match(/[+\-].*/))&&(a+=i),(!s||e.getTime()>=s.getTime())&&(!n||e.getTime()<=n.getTime())&&(!o||e.getFullYear()>=o)&&(!a||e.getFullYear()<=a)},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return{shortYearCutoff:"string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){return e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear),s=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay)),this.formatDate(this._get(t,"dateFormat"),s,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"==typeof e&&("isDisabled"===e||"getDate"===e||"widget"===e)||"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each((function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}))},t.datepicker=new tt,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.14.1";var nt,ot=!1;function at(t,e,i){return e<=t&&t<e+i}function rt(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t(document).on("mouseup",(function(){ot=!1})),t.widget("ui.mouse",{version:"1.14.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,(function(t){return e._mouseDown(t)})).on("click."+this.widgetName,(function(i){if(!0===t.data(i.target,e.widgetName+".preventClickEvent"))return t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1})),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){var i,s,n;if(!ot)return this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),s=1===(this._mouseDownEvent=e).which,n="string"==typeof(i=this).options.cancel&&t(e.target).closest(this.options.cancel).length,s&&!n&&this._mouseCapture(e)&&(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout((function(){i.mouseDelayMet=!0}),this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=!1!==this._mouseStart(e),!this._mouseStarted)?e.preventDefault():(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),ot=!0)),!0},_mouseMove:function(t){if(this._mouseMoved&&!t.which)if(t.originalEvent.altKey||t.originalEvent.ctrlKey||t.originalEvent.metaKey||t.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(t);return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=!1!==this._mouseStart(this._mouseDownEvent,t),this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,ot=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n<o.length;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.draggable",t.ui.mouse,{version:"1.14.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){(this.helper||this.element).is(".ui-draggable-dragging")?this.destroyOnClear=!0:(this._removeHandleClassName(),this._mouseDestroy())},_mouseCapture:function(e){var i=this.options;return!(this.helper||i.disabled||0<t(e.target).closest(".ui-resizable-handle").length||(this.handle=this._getHandle(e),!this.handle)||(this._blurActiveElement(e),this._blockFrames(!0===i.iframeFix?"iframe":i.iframeFix),0))},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map((function(){var e=t(this);return t("<div>").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]}))},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=this.document[0].activeElement;t(e.target).closest(i).length||t(i).trigger("blur")},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=0<this.helper.parents().filter((function(){return"fixed"===t(this).css("position")})).length,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),!1===this._trigger("start",e)?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){if(i=this._uiHash(),!1===this._trigger("drag",e,i))return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=i.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||!0===this.options.revert||"function"==typeof this.options.revert&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),(function(){!1!==i._trigger("stop",e)&&i._clear()})):!1!==this._trigger("stop",e)&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return!this.options.handle||!!t(e.target).closest(this.element.find(this.options.handle)).length},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,s="function"==typeof i.helper;return(e=s?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element).parents("body").length||e.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&e[0]===this.element[0]&&this._setPositionRelative(),e[0]===this.element[0]||/(fixed|absolute)/.test(e.css("position"))||e.css("position","absolute"),e},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),"left"in(t=Array.isArray(t)?{left:+t[0],top:+t[1]||0}:t)&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),{top:(e=this._isRootNode(this.offsetParent[0])?{top:0,left:0}:e).top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){var t,e;return"relative"!==this.cssPosition?{top:0,left:0}:(t=this.element.position(),e=this._isRootNode(this.scrollParent[0]),{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())})},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i=this.options,s=this.document[0];this.relativeContainer=null,i.containment?"window"===i.containment?this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||s.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]:"document"===i.containment?this.containment=[0,0,t(s).width()-this.helperProportions.width-this.margins.left,(t(s).height()||s.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]:i.containment.constructor===Array?this.containment=i.containment:("parent"===i.containment&&(i.containment=this.helper[0].parentNode),(i=(s=t(i.containment))[0])&&(e=/(scroll|auto)/.test(s.css("overflow")),this.containment=[(parseInt(s.css("borderLeftWidth"),10)||0)+(parseInt(s.css("paddingLeft"),10)||0),(parseInt(s.css("borderTopWidth"),10)||0)+(parseInt(s.css("paddingTop"),10)||0),(e?Math.max(i.scrollWidth,i.offsetWidth):i.offsetWidth)-(parseInt(s.css("borderRightWidth"),10)||0)-(parseInt(s.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(i.scrollHeight,i.offsetHeight):i.offsetHeight)-(parseInt(s.css("borderBottomWidth"),10)||0)-(parseInt(s.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=s)):this.containment=null},_convertPositionTo:function(t,e){e=e||this.position;t="absolute"===t?1:-1;var i=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*t+this.offset.parent.top*t-("fixed"===this.cssPosition?-this.offset.scroll.top:i?0:this.offset.scroll.top)*t,left:e.left+this.offset.relative.left*t+this.offset.parent.left*t-("fixed"===this.cssPosition?-this.offset.scroll.left:i?0:this.offset.scroll.left)*t}},_generatePosition:function(t,e){var i,s=this.options,n=this._isRootNode(this.scrollParent[0]),o=t.pageX,a=t.pageY;return n&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),{top:(a=e&&(this.containment&&(i=this.relativeContainer?(e=this.relativeContainer.offset(),[this.containment[0]+e.left,this.containment[1]+e.top,this.containment[2]+e.left,this.containment[3]+e.top]):this.containment,t.pageX-this.offset.click.left<i[0]&&(o=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(a=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(o=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3])&&(a=i[3]+this.offset.click.top),s.grid&&(e=s.grid[1]?this.originalPageY+Math.round((a-this.originalPageY)/s.grid[1])*s.grid[1]:this.originalPageY,a=!i||e-this.offset.click.top>=i[1]||e-this.offset.click.top>i[3]?e:e-this.offset.click.top>=i[1]?e-s.grid[1]:e+s.grid[1],t=s.grid[0]?this.originalPageX+Math.round((o-this.originalPageX)/s.grid[0])*s.grid[0]:this.originalPageX,o=!i||t-this.offset.click.left>=i[0]||t-this.offset.click.left>i[2]?t:t-this.offset.click.left>=i[0]?t-s.grid[0]:t+s.grid[0]),"y"===s.axis&&(o=this.originalPageX),"x"===s.axis)?this.originalPageY:a)-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:n?0:this.offset.scroll.top),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:n?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,s){var n=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each((function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,n))}))},stop:function(e,i,s){var n=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,(function(){var t=this;t.isOver?(t.isOver=0,s.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,n))}))},drag:function(e,i,s){t.each(s.sortables,(function(){var n=!1,o=this;o.positionAbs=s.positionAbs,o.helperProportions=s.helperProportions,o.offset.click=s.offset.click,o._intersectsWith(o.containerCache)&&(n=!0,t.each(s.sortables,(function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,n=(this===o||!this._intersectsWith(this.containerCache)||!t.contains(o.element[0],this.element[0]))&&n}))),n?(o.isOver||(o.isOver=1,s._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data("ui-sortable-item",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=s.offset.click.top,o.offset.click.left=s.offset.click.left,o.offset.parent.left-=s.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=s.offset.parent.top-o.offset.parent.top,s._trigger("toSortable",e),s.dropped=o.element,t.each(s.sortables,(function(){this.refreshPositions()})),s.currentItem=s.element,o.fromOutside=s),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger("out",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger("fromSortable",e),s.dropped=!1,t.each(s.sortables,(function(){this.refreshPositions()})))}))}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,s){var n=t("body");s=s.options;n.css("cursor")&&(s._cursor=n.css("cursor")),n.css("cursor",s.cursor)},stop:function(e,i,s){(s=s.options)._cursor&&t("body").css("cursor",s._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,s){i=t(i.helper),s=s.options,i.css("opacity")&&(s._opacity=i.css("opacity")),i.css("opacity",s.opacity)},stop:function(e,i,s){(s=s.options)._opacity&&t(i.helper).css("opacity",s._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,s){var n=s.options,o=!1,a=s.scrollParentNotHidden[0],r=s.document[0];a!==r&&"HTML"!==a.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+a.offsetHeight-e.pageY<n.scrollSensitivity?a.scrollTop=o=a.scrollTop+n.scrollSpeed:e.pageY-s.overflowOffset.top<n.scrollSensitivity&&(a.scrollTop=o=a.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+a.offsetWidth-e.pageX<n.scrollSensitivity?a.scrollLeft=o=a.scrollLeft+n.scrollSpeed:e.pageX-s.overflowOffset.left<n.scrollSensitivity&&(a.scrollLeft=o=a.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(e.pageY-t(r).scrollTop()<n.scrollSensitivity?o=t(r).scrollTop(t(r).scrollTop()-n.scrollSpeed):t(window).height()-(e.pageY-t(r).scrollTop())<n.scrollSensitivity&&(o=t(r).scrollTop(t(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(e.pageX-t(r).scrollLeft()<n.scrollSensitivity?o=t(r).scrollLeft(t(r).scrollLeft()-n.scrollSpeed):t(window).width()-(e.pageX-t(r).scrollLeft())<n.scrollSensitivity&&(o=t(r).scrollLeft(t(r).scrollLeft()+n.scrollSpeed)))),!1!==o&&t.ui.ddmanager&&!n.dropBehaviour&&t.ui.ddmanager.prepareOffsets(s,e)}}),t.ui.plugin.add("draggable","snap",{start:function(e,i,s){var n=s.options;s.snapElements=[],t(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each((function(){var e=t(this),i=e.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:e.outerWidth(),height:e.outerHeight(),top:i.top,left:i.left})}))},drag:function(e,i,s){for(var n,o,a,r,l,h,c,u,d,p=s.options,f=p.snapTolerance,g=i.offset.left,m=g+s.helperProportions.width,_=i.offset.top,v=_+s.helperProportions.height,b=s.snapElements.length-1;0<=b;b--)h=(l=s.snapElements[b].left-s.margins.left)+s.snapElements[b].width,u=(c=s.snapElements[b].top-s.margins.top)+s.snapElements[b].height,m<l-f||h+f<g||v<c-f||u+f<_||!t.contains(s.snapElements[b].item.ownerDocument,s.snapElements[b].item)?(s.snapElements[b].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[b].item})),s.snapElements[b].snapping=!1):("inner"!==p.snapMode&&(n=Math.abs(c-v)<=f,o=Math.abs(u-_)<=f,a=Math.abs(l-m)<=f,r=Math.abs(h-g)<=f,n&&(i.position.top=s._convertPositionTo("relative",{top:c-s.helperProportions.height,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left),r)&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),d=n||o||a||r,"outer"!==p.snapMode&&(n=Math.abs(c-_)<=f,o=Math.abs(u-v)<=f,a=Math.abs(l-g)<=f,r=Math.abs(h-m)<=f,n&&(i.position.top=s._convertPositionTo("relative",{top:c,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left),r)&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),!s.snapElements[b].snapping&&(n||o||a||r||d)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[b].item})),s.snapElements[b].snapping=n||o||a||r||d)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,s){var n;s=s.options,s=t.makeArray(t(s.stack)).sort((function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)}));s.length&&(n=parseInt(t(s[0]).css("zIndex"),10)||0,t(s).each((function(e){t(this).css("zIndex",n+e)})),this.css("zIndex",n+s.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,s){i=t(i.helper),s=s.options,i.css("zIndex")&&(s._zIndex=i.css("zIndex")),i.css("zIndex",s.zIndex)},stop:function(e,i,s){(s=s.options)._zIndex&&t(i.helper).css("zIndex",s._zIndex)}}),t.ui.draggable,t.widget("ui.resizable",t.ui.mouse,{version:"1.14.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){var s=!1,n=t(e).css("overflow");if("hidden"===n)return!1;if("scroll"===n)return!0;if(0<e[n=i&&"left"===i?"scrollLeft":"scrollTop"])return!0;try{e[n]=1,s=0<e[n],e[n]=0}catch(e){}return s},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("<div class='ui-wrapper'></div>").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",(function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())})).on("mouseleave",(function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())})),this._mouseInit()},_destroy:function(){function e(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable")}var i;return this._mouseDestroy(),this._addedHandles.remove(),this.elementIsWrapper&&(e(this.element),i=this.element,this.originalElement.css({position:i.css("position"),width:i.outerWidth(),height:i.outerHeight(),top:i.css("top"),left:i.css("left")}).insertAfter(i),i.remove()),this.originalElement.css("resize",this.originalResizeStyle),e(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this._addedHandles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;i<s.length;i++)n="ui-resizable-"+(e=String.prototype.trim.call(s[i])),o=t("<div>"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.children(this.handles[e]).length||(this.element.append(o),this._addedHandles=this._addedHandles.add(o));this._renderAxis=function(e){var i,s,n;for(i in e=e||this.element,this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(n=t(this.handles[i],this.element),n=/sw|ne|nw|se|n|s/.test(i)?n.outerHeight():n.outerWidth(),s=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(s,n),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",(function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")})),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)(s=t(this.handles[i])[0])!==e.target&&!t.contains(s,e.target)||(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this._helper||(n=this._calculateAdjustedElementDimensions(a)),this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width,height:n.height},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:n.width,height:n.height},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i=this.originalMousePosition,s=this.axis,n=e.pageX-i.left||0;i=e.pageY-i.top||0,s=this._change[s];return this._updatePrevProperties(),s&&(s=s.apply(this,[e,n,i]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(s=this._updateRatio(s,e)),s=this._respectSize(s,e),this._updateCache(s),this._propagate("resize",e),n=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(n)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges())),!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o=this.options,a=this;return this._helper&&(s=(i=(s=this._proportionallyResizeElements).length&&/textarea/i.test(s[0].nodeName))&&this._hasScroll(s[0],"left")?0:a.sizeDiff.height,i=i?0:a.sizeDiff.width,i={width:a.helper.width()-i,height:a.helper.height()-s},s=parseFloat(a.element.css("left"))+(a.position.left-a.originalPosition.left)||null,n=parseFloat(a.element.css("top"))+(a.position.top-a.originalPosition.top)||null,o.animate||this.element.css(t.extend(i,{top:n,left:s})),a.helper.height(a.size.height),a.helper.width(a.size.width),this._helper)&&!o.animate&&this._proportionallyResize(),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.helper.css(t),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px",this.helper.width(t.width)),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px",this.helper.height(t.height)),t},_updateVirtualBoundaries:function(t){var e,i,s,n=this.options;n={minWidth:this._isNumber(n.minWidth)?n.minWidth:0,maxWidth:this._isNumber(n.maxWidth)?n.maxWidth:1/0,minHeight:this._isNumber(n.minHeight)?n.minHeight:0,maxHeight:this._isNumber(n.maxHeight)?n.maxHeight:1/0};(this._aspectRatio||t)&&(t=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,e=n.maxHeight*this.aspectRatio,s=n.maxWidth/this.aspectRatio,n.minWidth<t&&(n.minWidth=t),n.minHeight<i&&(n.minHeight=i),e<n.maxWidth&&(n.maxWidth=e),s<n.maxHeight)&&(n.maxHeight=s),this._vBoundaries=n},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,l=this.originalPosition.top+this.originalSize.height,h=/sw|nw|w/.test(i);i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&h&&(t.left=r-e.minWidth),s&&h&&(t.left=r-e.maxWidth),a&&i&&(t.top=l-e.minHeight),n&&i&&(t.top=l-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_calculateAdjustedElementDimensions:function(t){var e,i,s=t.get(0);return"content-box"!==t.css("box-sizing")||!this._hasScroll(s)&&!this._hasScroll(s,"left")?{height:parseFloat(t.css("height")),width:parseFloat(t.css("width"))}:(e=parseFloat(s.style.width),s=parseFloat(s.style.height),i=this._getPaddingPlusBorderDimensions(t),e=isNaN(e)?this._getElementTheoreticalSize(t,i,"width"):e,{height:isNaN(s)?this._getElementTheoreticalSize(t,i,"height"):s,width:e})},_getElementTheoreticalSize:function(t,e,i){return Math.max(0,Math.ceil(t.get(0)["offset"+i[0].toUpperCase()+i.slice(1)]-e[i]-.5))||0},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e<this._proportionallyResizeElements.length;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("<div></div>").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=(a=n.length&&/textarea/i.test(n[0].nodeName))&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,a=a?0:i.sizeDiff.width,r=(a={width:i.size.width-a,height:i.size.height-o},o=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null);i.element.animate(t.extend(a,r&&o?{top:r,left:o}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o=t(this).resizable("instance"),a=o.options,r=o.element;(r=(a=a.containment)instanceof t?a.get(0):/parent/.test(a)?r.parent().get(0):a)&&(o.containerElement=t(r),/document/.test(a)||a===document?(o.containerOffset={left:0,top:0},o.containerPosition={left:0,top:0},o.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(r),i=[],t(["Top","Right","Left","Bottom"]).each((function(t,s){i[t]=o._num(e.css("padding"+s))})),o.containerOffset=e.offset(),o.containerPosition=e.position(),o.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},a=o.containerOffset,n=o.containerSize.height,s=o.containerSize.width,s=o._hasScroll(r,"left")?r.scrollWidth:s,n=o._hasScroll(r)?r.scrollHeight:n,o.parentData={element:r,left:a.left,top:a.top,width:s,height:n}))},resize:function(e){var i=t(this).resizable("instance"),s=i.options,n=i.containerOffset,o=i.position,a=(e=i._aspectRatio||e.shiftKey,{top:0,left:0}),r=i.containerElement,l=!0;r[0]!==document&&/static/.test(r.css("position"))&&(a=n),o.left<(i._helper?n.left:0)&&(i.size.width=i.size.width+(i._helper?i.position.left-n.left:i.position.left-a.left),e&&(i.size.height=i.size.width/i.aspectRatio,l=!1),i.position.left=s.helper?n.left:0),o.top<(i._helper?n.top:0)&&(i.size.height=i.size.height+(i._helper?i.position.top-n.top:i.position.top),e&&(i.size.width=i.size.height*i.aspectRatio,l=!1),i.position.top=i._helper?n.top:0),r=i.containerElement.get(0)===i.element.parent().get(0),s=/relative|absolute/.test(i.containerElement.css("position")),r&&s?(i.offset.left=i.parentData.left+i.position.left,i.offset.top=i.parentData.top+i.position.top):(i.offset.left=i.element.offset().left,i.offset.top=i.element.offset().top),o=Math.abs(i.sizeDiff.width+(i._helper?i.offset.left-a.left:i.offset.left-n.left)),r=Math.abs(i.sizeDiff.height+(i._helper?i.offset.top-a.top:i.offset.top-n.top)),o+i.size.width>=i.parentData.width&&(i.size.width=i.parentData.width-o,e)&&(i.size.height=i.size.width/i.aspectRatio,l=!1),r+i.size.height>=i.parentData.height&&(i.size.height=i.parentData.height-r,e)&&(i.size.width=i.size.height*i.aspectRatio,l=!1),l||(i.position.left=i.prevPosition.left,i.position.top=i.prevPosition.top,i.size.width=i.prevSize.width,i.size.height=i.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=(l=t(e.helper)).offset(),r=l.outerWidth()-e.sizeDiff.width,l=l.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:a.left-n.left-s.left,width:r,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:a.left-n.left-s.left,width:r,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each((function(){var i=t(this),s=e._calculateAdjustedElementDimensions(i);i.data("ui-resizable-alsoresize",{width:s.width,height:s.height,left:parseFloat(i.css("left")),top:parseFloat(i.css("top"))})}))},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each((function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,(function(t,e){var i=(s[e]||0)+(r[e]||0);i&&0<=i&&(n[e]=i||null)})),e.css(n)}))},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),!0===t.uiBackCompat&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,l="number"==typeof s.grid?[s.grid,s.grid]:s.grid,h=l[0]||1,c=l[1]||1,u=Math.round((n.width-o.width)/h)*h,d=(n=Math.round((n.height-o.height)/c)*c,o.width+u),p=o.height+n,f=s.maxWidth&&s.maxWidth<d,g=s.maxHeight&&s.maxHeight<p,m=s.minWidth&&s.minWidth>d,_=s.minHeight&&s.minHeight>p;s.grid=l,m&&(d+=h),_&&(p+=c),f&&(d-=h),g&&(p-=c),/^(se|s|e)$/.test(r)?(i.size.width=d,i.size.height=p):/^(ne)$/.test(r)?(i.size.width=d,i.size.height=p,i.position.top=a.top-n):/^(sw)$/.test(r)?(i.size.width=d,i.size.height=p,i.position.left=a.left-u):((p-c<=0||d-h<=0)&&(e=i._getPaddingPlusBorderDimensions(this)),0<p-c?(i.size.height=p,i.position.top=a.top-n):(p=c-e.height,i.size.height=p,i.position.top=a.top+o.height-p),0<d-h?(i.size.width=d,i.position.left=a.left-u):(d=h-e.width,i.size.width=d,i.position.left=a.left+o.width-d))}}),t.ui.resizable,t.widget("ui.dialog",{version:"1.14.1",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;i<0&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,uiDialogTitleHeadingLevel:0,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),(t=e.parent.children().eq(e.index)).length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&!1!==this._trigger("beforeClose",e)&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||t(this.document[0].activeElement).trigger("blur"),this._hide(this.uiDialog,this.options.hide,(function(){i._trigger("close",e)})))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map((function(){return+t(this).css("z-index")})).get();return(n=Math.max.apply(null,n))>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",n+1),s=!0),s&&!i&&this._trigger("focus",e),s},open:function(){var e=this;this._isOpen?this._moveToTop()&&this._focusTabbable():(this._isOpen=!0,this.opener=t(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,(function(){e._focusTabbable(),e._trigger("focus")})),this._makeFocusTarget(),this._trigger("open"))},_focusTabbable:function(){var t=this._focusedElement;(t=(t=(t=(t=(t=t||this.element.find("[autofocus]")).length?t:this.element.find(":tabbable")).length?t:this.uiDialogButtonPane.find(":tabbable")).length?t:this.uiDialogTitlebarClose.filter(":tabbable")).length?t:this.uiDialog).eq(0).trigger("focus")},_restoreTabbableFocus:function(){var e=this.document[0].activeElement;this.uiDialog[0]===e||t.contains(this.uiDialog[0],e)||this._focusTabbable()},_keepFocus:function(t){t.preventDefault(),this._restoreTabbableFocus()},_createWrapper:function(){this.uiDialog=t("<div>").hide().attr({tabIndex:-1,role:"dialog","aria-modal":this.options.modal?"true":null}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(e){var i,s,n;this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE?(e.preventDefault(),this.close(e)):e.keyCode!==t.ui.keyCode.TAB||e.isDefaultPrevented()||(i=this.uiDialog.find(":tabbable"),s=i.first(),n=i.last(),e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(this._delay((function(){n.trigger("focus")})),e.preventDefault()):(this._delay((function(){s.trigger("focus")})),e.preventDefault()))},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){this.uiDialogTitlebar=t("<div>"),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=t("<button type='button'></button>").button({label:t("<a>").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}});var e=Number.isInteger(this.options.uiDialogTitleHeadingLevel)&&0<this.options.uiDialogTitleHeadingLevel&&this.options.uiDialogTitleHeadingLevel<=6?"h"+this.options.uiDialogTitleHeadingLevel:"span";e=t("<"+e+">").uniqueId().prependTo(this.uiDialogTitlebar);this._addClass(e,"ui-dialog-title"),this._title(e),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html("&#160;")},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>"),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||Array.isArray(i)&&!i.length?this._removeClass(this.uiDialog,"ui-dialog-buttons"):(t.each(i,(function(i,s){var n;s=t.extend({type:"button"},s="function"==typeof s?{click:s,text:i}:s),n=s.click,i={icon:s.icon,iconPosition:s.iconPosition,showLabel:s.showLabel,icons:s.icons,text:s.text},delete s.click,delete s.icon,delete s.iconPosition,delete s.showLabel,delete s.icons,"boolean"==typeof s.text&&delete s.text,t("<button></button>",s).button(i).appendTo(e.uiButtonSet).on("click",(function(){n.apply(e.element[0],arguments)}))})),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog))},_makeDraggable:function(){var e=this,i=this.options;function s(t){return{position:t.position,offset:t.offset}}this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(i,n){e._addClass(t(this),"ui-dialog-dragging"),e._blockFrames(),e._trigger("dragStart",i,s(n))},drag:function(t,i){e._trigger("drag",t,s(i))},stop:function(n,o){var a=o.offset.left-e.document.scrollLeft(),r=o.offset.top-e.document.scrollTop();i.position={my:"left top",at:"left"+(0<=a?"+":"")+a+" top"+(0<=r?"+":"")+r,of:e.window},e._removeClass(t(this),"ui-dialog-dragging"),e._unblockFrames(),e._trigger("dragStop",n,s(o))}})},_makeResizable:function(){var e=this,i=this.options,s=i.resizable,n=this.uiDialog.css("position");s="string"==typeof s?s:"n,e,s,w,se,sw,ne,nw";function o(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:i.maxWidth,maxHeight:i.maxHeight,minWidth:i.minWidth,minHeight:this._minHeight(),handles:s,start:function(i,s){e._addClass(t(this),"ui-dialog-resizing"),e._blockFrames(),e._trigger("resizeStart",i,o(s))},resize:function(t,i){e._trigger("resize",t,o(i))},stop:function(s,n){var a=(r=e.uiDialog.offset()).left-e.document.scrollLeft(),r=r.top-e.document.scrollTop();i.height=e.uiDialog.height(),i.width=e.uiDialog.width(),i.position={my:"left top",at:"left"+(0<=a?"+":"")+a+" top"+(0<=r?"+":"")+r,of:e.window},e._removeClass(t(this),"ui-dialog-resizing"),e._unblockFrames(),e._trigger("resizeStop",s,o(n))}}).css("position",n)},_trackFocus:function(){this._on(this.widget(),{focusin:function(e){this._makeFocusTarget(),this._focusedElement=t(e.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var e=this._trackingInstances(),i=t.inArray(this,e);-1!==i&&e.splice(i,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||this.document.data("ui-dialog-instances",t=[]),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(e){var i=this,s=!1,n={};t.each(e,(function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)})),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,i){var s,n=this.uiDialog;"disabled"!==e&&(this._super(e,i),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:t("<a>").text(""+this.options.closeText).html()}),"draggable"===e&&((s=n.is(":data(ui-draggable)"))&&!i&&n.draggable("destroy"),!s)&&i&&this._makeDraggable(),"position"===e&&this._position(),"resizable"===e&&((s=n.is(":data(ui-resizable)"))&&!i&&n.resizable("destroy"),s&&"string"==typeof i&&n.resizable("option","handles",i),s||!1===i||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")),"modal"===e)&&n.attr("aria-modal",i?"true":null)},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map((function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]}))},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return!!t(e.target).closest(".ui-dialog").length||!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){var e;this.options.modal&&(e=!0,this._delay((function(){e=!1})),this.document.data("ui-dialog-overlays")||this.document.on("focusin.ui-dialog",function(t){var i;e||(i=this._trackingInstances()[0])._allowInteraction(t)||(t.preventDefault(),i._focusTabbable())}.bind(this)),this.overlay=t("<div>").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1))},_destroyOverlay:function(){var t;this.options.modal&&this.overlay&&((t=this.document.data("ui-dialog-overlays")-1)?this.document.data("ui-dialog-overlays",t):(this.document.off("focusin.ui-dialog"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null)}}),!0===t.uiBackCompat&&t.widget("ui.dialog",t.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}}),t.ui.dialog,t.widget("ui.droppable",{version:"1.14.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,e=this.options,i=e.accept;this.isover=!1,this.isout=!0,this.accept="function"==typeof i?i:function(t){return t.is(i)},this.proportions=function(){if(!arguments.length)return t=t||{width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};t=arguments[0]},this._addToManager(e.scope),e.addClasses&&this._addClass("ui-droppable")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;e<t.length;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){var s;"accept"===e?this.accept="function"==typeof i?i:function(t){return t.is(i)}:"scope"===e&&(s=t.ui.ddmanager.droppables[this.options.scope],this._splice(s),this._addToManager(i)),this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,n=!1;return!(!s||(s.currentItem||s.element)[0]===this.element[0]||(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each((function(){var i=t(this).droppable("instance");if(i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&t.ui.intersect(s,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e))return!(n=!0)})),n)||!this.accept.call(this.element[0],s.currentItem||s.element))&&(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(s)),this.element)},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}}),t.ui.intersect=function(t,e,i,s){if(!e.offset)return!1;var n=(t.positionAbs||t.position.absolute).left+t.margins.left,o=(t.positionAbs||t.position.absolute).top+t.margins.top,a=n+t.helperProportions.width,r=o+t.helperProportions.height,l=e.offset.left,h=e.offset.top,c=l+e.proportions().width,u=h+e.proportions().height;switch(i){case"fit":return l<=n&&a<=c&&h<=o&&r<=u;case"intersect":return l<n+t.helperProportions.width/2&&a-t.helperProportions.width/2<c&&h<o+t.helperProportions.height/2&&r-t.helperProportions.height/2<u;case"pointer":return at(s.pageY,h,e.proportions().height)&&at(s.pageX,l,e.proportions().width);case"touch":return(h<=o&&o<=u||h<=r&&r<=u||o<h&&u<r)&&(l<=n&&n<=c||l<=a&&a<=c||n<l&&c<a);default:return!1}},t.ui.ddmanager={current:null,droppables:{default:[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;s<o.length;s++)if(!(o[s].options.disabled||e&&!o[s].accept.call(o[s].element[0],e.currentItem||e.element))){for(n=0;n<r.length;n++)if(r[n]===o[s].element[0]){o[s].proportions().height=0;continue t}o[s].visible="none"!==o[s].element.css("display"),o[s].visible&&("mousedown"===a&&o[s]._activate.call(o[s],i),o[s].offset=o[s].element.offset(),o[s].proportions({width:o[s].element[0].offsetWidth,height:o[s].element[0].offsetHeight}))}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),(function(){this.options&&(!this.options.disabled&&this.visible&&t.ui.intersect(e,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled)&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i))})),s},dragStart:function(e,i){e.element.parentsUntil("body").on("scroll.droppable",(function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}))},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],(function(){var s,n,o,a;this.options.disabled||this.greedyChild||!this.visible||(a=!(a=t.ui.intersect(e,this,this.options.tolerance,i))&&this.isover?"isout":a&&!this.isover?"isover":null)&&(this.options.greedy&&(n=this.options.scope,(o=this.element.parents(":data(ui-droppable)").filter((function(){return t(this).droppable("instance").options.scope===n}))).length)&&((s=t(o[0]).droppable("instance")).greedyChild="isover"===a),s&&"isover"===a&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[a]=!0,this["isout"===a?"isover":"isout"]=!1,this["isover"===a?"_over":"_out"].call(this,i),s)&&"isout"===a&&(s.isout=!1,s.isover=!0,s._over.call(s,i))}))},dragStop:function(e,i){e.element.parentsUntil("body").off("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},!0===t.uiBackCompat&&t.widget("ui.droppable",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget("ui.progressbar",{version:"1.14.1",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=t("<div>").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){if(void 0===t)return this.options.value;this.options.value=this._constrainedValue(t),this._refreshValue()},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=!1===t,"number"!=typeof t&&(t=0),!this.indeterminate&&Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).width(i.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,e===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div>").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}}),t.widget("ui.selectable",t.ui.mouse,{version:"1.14.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,"ui-selectee"),e.selectees.each((function(){var i=t(this),s={left:(s=i.offset()).left-e.elementPos.left,top:s.top-e.elementPos.top};t.data(this,"selectable-item",{element:this,$element:i,left:s.left,top:s.top,right:s.left+i.outerWidth(),bottom:s.top+i.outerHeight(),startselected:!1,selected:i.hasClass("ui-selected"),selecting:i.hasClass("ui-selecting"),unselecting:i.hasClass("ui-unselecting")})}))},this.refresh(),this._mouseInit(),this.helper=t("<div>"),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger("start",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each((function(){var s=t.data(this,"selectable-item");s.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(s.$element,"ui-selected"),s.selected=!1,i._addClass(s.$element,"ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",e,{unselecting:s.element}))})),t(e.target).parents().addBack().each((function(){var s,n=t.data(this,"selectable-item");if(n)return s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass("ui-selected"),i._removeClass(n.$element,s?"ui-unselecting":"ui-selected")._addClass(n.$element,s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,(n.selected=s)?i._trigger("selecting",e,{selecting:n.element}):i._trigger("unselecting",e,{unselecting:n.element}),!1})))},_mouseDrag:function(e){var i,s,n,o,a,r,l;if(this.dragged=!0,!this.options.disabled)return n=(s=this).options,o=this.opos[0],a=this.opos[1],(r=e.pageX)<o&&(i=r,r=o,o=i),(l=e.pageY)<a&&(i=l,l=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:l-a}),this.selectees.each((function(){var i=t.data(this,"selectable-item"),h=!1,c={};i&&i.element!==s.element[0]&&(c.left=i.left+s.elementPos.left,c.right=i.right+s.elementPos.left,c.top=i.top+s.elementPos.top,c.bottom=i.bottom+s.elementPos.top,"touch"===n.tolerance?h=!(r<c.left||c.right<o||l<c.top||c.bottom<a):"fit"===n.tolerance&&(h=o<c.left&&c.right<r&&a<c.top&&c.bottom<l),h?(i.selected&&(s._removeClass(i.$element,"ui-selected"),i.selected=!1),i.unselecting&&(s._removeClass(i.$element,"ui-unselecting"),i.unselecting=!1),i.selecting||(s._addClass(i.$element,"ui-selecting"),i.selecting=!0,s._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,s._addClass(i.$element,"ui-selected"),i.selected=!0):(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,i.startselected&&(s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",e,{unselecting:i.element}))),!i.selected||e.metaKey||e.ctrlKey||i.startselected||(s._removeClass(i.$element,"ui-selected"),i.selected=!1,s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",e,{unselecting:i.element}))))})),!1},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each((function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",e,{unselected:s.element})})),t(".ui-selecting",this.element[0]).each((function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-selecting")._addClass(s.$element,"ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",e,{selected:s.element})})),this._trigger("stop",e),this.helper.remove(),!1}}),t.widget("ui.selectmenu",[t.ui.formResetMixin,{version:"1.14.1",defaultElement:"<select>",options:{appendTo:null,classes:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"},disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:!1,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this._bindFormResetHandler(),this._rendered=!1,this.menuItems=t()},_drawButton:function(){var e,i=this,s=this._parseOption(this.element.find("option:selected"),this.element[0].selectedIndex);this.labels=this.element.labels().attr("for",this.ids.button),this._on(this.labels,{click:function(t){this.button.trigger("focus"),t.preventDefault()}}),this.element.hide(),this.button=t("<span>",{tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true",title:this.element.attr("title")}).insertAfter(this.element),this._addClass(this.button,"ui-selectmenu-button ui-selectmenu-button-closed","ui-button ui-widget"),e=t("<span>").appendTo(this.button),this._addClass(e,"ui-selectmenu-icon","ui-icon "+this.options.icons.button),this.buttonItem=this._renderButtonItem(s).appendTo(this.button),!1!==this.options.width&&this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",(function(){i._rendered||i._refreshMenu()}))},_drawMenu:function(){var e=this;this.menu=t("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=t("<div>").append(this.menu),this._addClass(this.menuWrap,"ui-selectmenu-menu","ui-front"),this.menuWrap.appendTo(this._appendTo()),this.menuInstance=this.menu.menu({classes:{"ui-menu":"ui-corner-bottom"},role:"listbox",select:function(t,i){t.preventDefault(),e._select(i.item.data("ui-selectmenu-item"),t)},focus:function(t,i){i=i.item.data("ui-selectmenu-item"),null!=e.focusIndex&&i.index!==e.focusIndex&&(e._trigger("focus",t,{item:i}),e.isOpen||e._select(i,t)),e.focusIndex=i.index,e.button.attr("aria-activedescendant",e.menuItems.eq(i.index).attr("id"))}}).menu("instance"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(this._getSelectedItem().data("ui-selectmenu-item")||{})),null===this.options.width&&this._resizeButton()},_refreshMenu:function(){var t=this.element.find("option");this.menu.empty(),this._parseOptions(t),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup").find(".ui-menu-item-wrapper"),this._rendered=!0,t.length&&(t=this._getSelectedItem(),this.menuInstance.focus(null,t),this._setAria(t.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(t){this.options.disabled||(this._rendered?(this._removeClass(this.menu.find(".ui-state-active"),null,"ui-state-active"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.menuItems.length&&(this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",t)))},_position:function(){this.menuWrap.position(t.extend({of:this.button},this.options.position))},close:function(t){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",t))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderButtonItem:function(e){var i=t("<span>");return this._setText(i,e.label),this._addClass(i,"ui-selectmenu-text"),i},_renderMenu:function(e,i){var s=this,n="";t.each(i,(function(i,o){var a;o.optgroup!==n&&(a=t("<li>",{text:o.optgroup}),s._addClass(a,"ui-selectmenu-optgroup","ui-menu-divider"+(o.element.parent("optgroup").prop("disabled")?" ui-state-disabled":"")),a.appendTo(e),n=o.optgroup),s._renderItemData(e,o)}))},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-selectmenu-item",e)},_renderItem:function(e,i){var s=t("<li>"),n=t("<div>",{title:i.element.attr("title")});return i.disabled&&this._addClass(s,null,"ui-state-disabled"),i.hidden?s.prop("hidden",!0):this._setText(n,i.label),s.append(n).appendTo(e)},_setText:function(t,e){e?t.text(e):t.html("&#160;")},_move:function(t,e){var i,s=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex).parent("li"):(i=this.menuItems.eq(this.element[0].selectedIndex).parent("li"),s+=":not(.ui-state-disabled)"),(i="first"===t||"last"===t?i["first"===t?"prevAll":"nextAll"](s).eq(-1):i[t+"All"](s).eq(0)).length&&this.menuInstance.focus(e,i)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex).parent("li")},_toggle:function(t){this[this.isOpen?"close":"open"](t)},_setSelection:function(){var t;this.range&&((t=window.getSelection()).removeAllRanges(),t.addRange(this.range))},_documentClick:{mousedown:function(e){!this.isOpen||t(e.target).closest(".ui-selectmenu-menu, #"+CSS.escape(this.ids.button)).length||this.close(e)}},_buttonEvents:{mousedown:function(){var t=window.getSelection();t.rangeCount&&(this.range=t.getRangeAt(0))},click:function(t){this._setSelection(),this._toggle(t)},keydown:function(e){var i=!0;switch(e.keyCode){case t.ui.keyCode.TAB:case t.ui.keyCode.ESCAPE:this.close(e),i=!1;break;case t.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(e);break;case t.ui.keyCode.UP:e.altKey?this._toggle(e):this._move("prev",e);break;case t.ui.keyCode.DOWN:e.altKey?this._toggle(e):this._move("next",e);break;case t.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(e):this._toggle(e);break;case t.ui.keyCode.LEFT:this._move("prev",e);break;case t.ui.keyCode.RIGHT:this._move("next",e);break;case t.ui.keyCode.HOME:case t.ui.keyCode.PAGE_UP:this._move("first",e);break;case t.ui.keyCode.END:case t.ui.keyCode.PAGE_DOWN:this._move("last",e);break;default:this.menu.trigger(e),i=!1}i&&e.preventDefault()}},_selectFocusedItem:function(t){var e=this.menuItems.eq(this.focusIndex).parent("li");e.hasClass("ui-state-disabled")||this._select(e.data("ui-selectmenu-item"),t)},_select:function(t,e){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=t.index,this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(t)),this._setAria(t),this._trigger("select",e,{item:t}),t.index!==i&&this._trigger("change",e,{item:t}),this.close(e)},_setAria:function(t){t=this.menuItems.eq(t.index).attr("id"),this.button.attr({"aria-labelledby":t,"aria-activedescendant":t}),this.menu.attr("aria-activedescendant",t)},_setOption:function(t,e){var i;"icons"===t&&(i=this.button.find("span.ui-icon"),this._removeClass(i,null,this.options.icons.button)._addClass(i,null,e.button)),this._super(t,e),"appendTo"===t&&this.menuWrap.appendTo(this._appendTo()),"width"===t&&this._resizeButton()},_setOptionDisabled:function(t){this._super(t),this.menuInstance.option("disabled",t),this.button.attr("aria-disabled",t),this._toggleClass(this.button,null,"ui-state-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)},_appendTo:function(){var e=this.options.appendTo;return(e=(e=e&&(e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)))&&e[0]?e:this.element.closest(".ui-front, dialog")).length?e:this.document[0].body},_toggleAttr:function(){this.button.attr("aria-expanded",this.isOpen),this._removeClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"closed":"open"))._addClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"open":"closed"))._toggleClass(this.menuWrap,"ui-selectmenu-open",null,this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var t=this.options.width;!1===t?this.button.css("width",""):(null===t&&(t=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(t))},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()))},_getCreateOptions:function(){var t=this._super();return t.disabled=this.element.prop("disabled"),t},_parseOptions:function(e){var i=this,s=[];e.each((function(e,n){s.push(i._parseOption(t(n),e))})),this.items=s},_parseOption:function(t,e){var i=t.parent("optgroup");return{element:t,index:e,value:t.val(),label:t.text(),hidden:i.prop("hidden")||t.prop("hidden"),optgroup:i.attr("label")||"",disabled:i.prop("disabled")||t.prop("disabled")}},_destroy:function(){this._unbindFormResetHandler(),this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.labels.attr("for",this.ids.element)}}]),t.widget("ui.slider",t.ui.mouse,{version:"1.14.1",widgetEventPrefix:"slide",options:{animate:!1,classes:{"ui-slider":"ui-corner-all","ui-slider-handle":"ui-corner-all","ui-slider-range":"ui-corner-all ui-widget-header"},distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass("ui-slider ui-slider-"+this.orientation,"ui-widget ui-widget-content"),this._refresh(),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i=this.options,s=this.element.find(".ui-slider-handle"),n=[],o=i.values&&i.values.length||1;for(s.length>o&&(s.slice(o).remove(),s=s.slice(0,o)),e=s.length;e<o;e++)n.push("<span tabindex='0'></span>");this.handles=s.add(t(n.join("")).appendTo(this.element)),this._addClass(this.handles,"ui-slider-handle","ui-state-default"),this.handle=this.handles.eq(0),this.handles.each((function(e){t(this).data("ui-slider-handle-index",e).attr("tabIndex",0)}))},_createRange:function(){var e=this.options;e.range?(!0===e.range&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:Array.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?(this._removeClass(this.range,"ui-slider-range-min ui-slider-range-max"),this.range.css({left:"",bottom:""})):(this.range=t("<div>").appendTo(this.element),this._addClass(this.range,"ui-slider-range")),"min"!==e.range&&"max"!==e.range||this._addClass(this.range,"ui-slider-range-"+e.range)):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,o,a,r,l=this,h=this.options;return!h.disabled&&(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),a={x:e.pageX,y:e.pageY},i=this._normValueFromMouse(a),s=this._valueMax()-this._valueMin()+1,this.handles.each((function(e){var a=Math.abs(i-l.values(e));(a<s||s===a&&(e===l._lastChangedValue||l.values(e)===h.min))&&(s=a,n=t(this),o=e)})),!1!==this._start(e,o))&&(this._mouseSliding=!0,this._handleIndex=o,this._addClass(n,null,"ui-state-active"),n.trigger("focus"),a=n.offset(),r=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=r?{left:0,top:0}:{left:e.pageX-a.left-n.width()/2,top:e.pageY-a.top-n.height()/2-(parseInt(n.css("borderTopWidth"),10)||0)-(parseInt(n.css("borderBottomWidth"),10)||0)+(parseInt(n.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,o,i),this._animateOff=!0)},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY};e=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,e),!1},_mouseStop:function(t){return this._removeClass(this.handles,null,"ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e;return(t=1<(t=(t="horizontal"===this.orientation?(e=this.elementSize.width,t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)))/e)?1:t)<0&&(t=0),"vertical"===this.orientation&&(t=1-t),e=this._valueMax()-this._valueMin(),t=this._valueMin()+t*e,this._trimAlignValue(t)},_uiHash:function(t,e,i){var s={handle:this.handles[t],handleIndex:t,value:void 0!==e?e:this.value()};return this._hasMultipleValues()&&(s.value=void 0!==e?e:this.values(t),s.values=i||this.values()),s},_hasMultipleValues:function(){return this.options.values&&this.options.values.length},_start:function(t,e){return this._trigger("start",t,this._uiHash(e))},_slide:function(t,e,i){var s,n=this.value(),o=this.values();this._hasMultipleValues()&&(s=this.values(e?0:1),n=this.values(e),2===this.options.values.length&&!0===this.options.range&&(i=0===e?Math.min(s,i):Math.max(s,i)),o[e]=i),i!==n&&!1!==this._trigger("slide",t,this._uiHash(e,i,o))&&(this._hasMultipleValues()?this.values(e,i):this.value(i))},_stop:function(t,e){this._trigger("stop",t,this._uiHash(e))},_change:function(t,e){this._keySliding||this._mouseSliding||(this._lastChangedValue=e,this._trigger("change",t,this._uiHash(e)))},value:function(t){if(!arguments.length)return this._value();this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0)},values:function(t,e){var i,s,n;if(1<arguments.length)this.options.values[t]=this._trimAlignValue(e),this._refreshValue(),this._change(null,t);else{if(!arguments.length)return this._values();if(!Array.isArray(t))return this._hasMultipleValues()?this._values(t):this.value();for(i=this.options.values,s=t,n=0;n<i.length;n+=1)i[n]=this._trimAlignValue(s[n]),this._change(null,n);this._refreshValue()}},_setOption:function(t,e){var i,s=0;switch("range"===t&&!0===this.options.range&&("min"===e?(this.options.value=this._values(0),this.options.values=null):"max"===e&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),Array.isArray(this.options.values)&&(s=this.options.values.length),this._super(t,e),t){case"orientation":this._detectOrientation(),this._removeClass("ui-slider-horizontal ui-slider-vertical")._addClass("ui-slider-"+this.orientation),this._refreshValue(),this.options.range&&this._refreshRange(e),this.handles.css("horizontal"===e?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),i=s-1;0<=i;i--)this._change(null,i);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_setOptionDisabled:function(t){this._super(t),this._toggleClass(null,"ui-state-disabled",!!t)},_value:function(){var t=this.options.value;return this._trimAlignValue(t)},_values:function(t){var e,i;if(arguments.length)return t=this.options.values[t],this._trimAlignValue(t);if(this._hasMultipleValues()){for(e=this.options.values.slice(),i=0;i<e.length;i+=1)e[i]=this._trimAlignValue(e[i]);return e}return[]},_trimAlignValue:function(t){var e,i;return t<=this._valueMin()?this._valueMin():t>=this._valueMax()?this._valueMax():(e=0<this.options.step?this.options.step:1,i=t-(t=(t-this._valueMin())%e),2*Math.abs(t)>=e&&(i+=0<t?e:-e),parseFloat(i.toFixed(5)))},_calculateNewMax:function(){var t=this.options.max,e=this._valueMin(),i=this.options.step;(t=Math.round((t-e)/i)*i+e)>this.options.max&&(t-=i),this.max=parseFloat(t.toFixed(this._precision()))},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min?Math.max(t,this._precisionOf(this.options.min)):t},_precisionOf:function(t){var e=(t=t.toString()).indexOf(".");return-1===e?0:t.length-e-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshRange:function(t){"vertical"===t&&this.range.css({width:"",left:""}),"horizontal"===t&&this.range.css({height:"",bottom:""})},_refreshValue:function(){var e,i,s,n,o,a=this.options.range,r=this.options,l=this,h=!this._animateOff&&r.animate,c={};this._hasMultipleValues()?this.handles.each((function(s){i=(l.values(s)-l._valueMin())/(l._valueMax()-l._valueMin())*100,c["horizontal"===l.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[h?"animate":"css"](c,r.animate),!0===l.options.range&&("horizontal"===l.orientation?(0===s&&l.range.stop(1,1)[h?"animate":"css"]({left:i+"%"},r.animate),1===s&&l.range[h?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&l.range.stop(1,1)[h?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&l.range[h?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i})):(s=this.value(),n=this._valueMin(),o=this._valueMax(),i=o!==n?(s-n)/(o-n)*100:0,c["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[h?"animate":"css"](c,r.animate),"min"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({width:i+"%"},r.animate),"max"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({width:100-i+"%"},r.animate),"min"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({height:i+"%"},r.animate),"max"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({height:100-i+"%"},r.animate))},_handleEvents:{keydown:function(e){var i,s,n,o=t(e.target).data("ui-slider-handle-index");switch(e.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(e.preventDefault(),this._keySliding||(this._keySliding=!0,this._addClass(t(e.target),null,"ui-state-active"),!1!==this._start(e,o)))break;return}switch(n=this.options.step,i=s=this._hasMultipleValues()?this.values(o):this.value(),e.keyCode){case t.ui.keyCode.HOME:s=this._valueMin();break;case t.ui.keyCode.END:s=this._valueMax();break;case t.ui.keyCode.PAGE_UP:s=this._trimAlignValue(i+(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.PAGE_DOWN:s=this._trimAlignValue(i-(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(i===this._valueMax())return;s=this._trimAlignValue(i+n);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(i===this._valueMin())return;s=this._trimAlignValue(i-n)}this._slide(e,o,s)},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),this._removeClass(t(e.target),null,"ui-state-active"))}}}),t.widget("ui.sortable",t.ui.mouse,{version:"1.14.1",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return e<=t&&t<e+i},_isFloating:function(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))},_create:function(){this.containerCache={},this._addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(t,e){this._super(t,e),"handle"===t&&this._setHandleClassName()},_setHandleClassName:function(){var e=this;this._removeClass(this.element.find(".ui-sortable-handle"),"ui-sortable-handle"),t.each(this.items,(function(){e._addClass(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item,"ui-sortable-handle")}))},_destroy:function(){this._mouseDestroy();for(var t=this.items.length-1;0<=t;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(e,i){var s=null,n=!1,o=this;return!(this.reverting||this.options.disabled||"static"===this.options.type||(this._refreshItems(e),t(e.target).parents().each((function(){if(t.data(this,o.widgetName+"-item")===o)return s=t(this),!1})),!(s=t.data(e.target,o.widgetName+"-item")===o?t(e.target):s))||this.options.handle&&!i&&(t(this.options.handle,s).find("*").addBack().each((function(){this===e.target&&(n=!0)})),!n)||(this.currentItem=s,this._removeCurrentsFromItems(),0))},_mouseStart:function(e,i,s){var n,o,a=this.options;if((this.currentContainer=this).refreshPositions(),this.appendTo=t("parent"!==a.appendTo?a.appendTo:this.currentItem.parent()),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),a.cursorAt&&this._adjustOffsetFromHelper(a.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),this.scrollParent=this.placeholder.scrollParent(),t.extend(this.offset,{parent:this._getParentOffset()}),a.containment&&this._setContainment(),a.cursor&&"auto"!==a.cursor&&(o=this.document.find("body"),this._storedStylesheet=t("<style>*{ cursor: "+a.cursor+" !important; }</style>").appendTo(o)),a.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",a.zIndex)),a.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",a.opacity)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;0<=n;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this.helper.parent().is(this.appendTo)||(this.helper.detach().appendTo(this.appendTo),this.offset.parent=this._getParentOffset()),this.position=this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,this.lastPositionAbs=this.positionAbs=this._convertPositionTo("absolute"),this._mouseDrag(e),!0},_scroll:function(t){var e=this.options,i=!1;return this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<e.scrollSensitivity?this.scrollParent[0].scrollTop=i=this.scrollParent[0].scrollTop+e.scrollSpeed:t.pageY-this.overflowOffset.top<e.scrollSensitivity&&(this.scrollParent[0].scrollTop=i=this.scrollParent[0].scrollTop-e.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<e.scrollSensitivity?this.scrollParent[0].scrollLeft=i=this.scrollParent[0].scrollLeft+e.scrollSpeed:t.pageX-this.overflowOffset.left<e.scrollSensitivity&&(this.scrollParent[0].scrollLeft=i=this.scrollParent[0].scrollLeft-e.scrollSpeed)):(t.pageY-this.document.scrollTop()<e.scrollSensitivity?i=this.document.scrollTop(this.document.scrollTop()-e.scrollSpeed):this.window.height()-(t.pageY-this.document.scrollTop())<e.scrollSensitivity&&(i=this.document.scrollTop(this.document.scrollTop()+e.scrollSpeed)),t.pageX-this.document.scrollLeft()<e.scrollSensitivity?i=this.document.scrollLeft(this.document.scrollLeft()-e.scrollSpeed):this.window.width()-(t.pageX-this.document.scrollLeft())<e.scrollSensitivity&&(i=this.document.scrollLeft(this.document.scrollLeft()+e.scrollSpeed))),i},_mouseDrag:function(e){var i,s,n,o,a=this.options;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),a.scroll&&!1!==this._scroll(e)&&(this._refreshItemPositions(!0),t.ui.ddmanager)&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragDirection={vertical:this._getDragVerticalDirection(),horizontal:this._getDragHorizontalDirection()},i=this.items.length-1;0<=i;i--)if(n=(s=this.items[i]).item[0],(o=this._intersectsWithPointer(s))&&s.instance===this.currentContainer&&!(n===this.currentItem[0]||this.placeholder[1===o?"next":"prev"]()[0]===n||t.contains(this.placeholder[0],n)||"semi-dynamic"===this.options.type&&t.contains(this.element[0],n))){if(this.direction=1===o?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){var s,n,o,a;if(e)return t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert?(n=(s=this).placeholder.offset(),a={},(o=this.options.axis)&&"x"!==o||(a.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),o&&"y"!==o||(a.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(a,parseInt(this.options.revert,10)||500,(function(){s._clear(e)}))):this._clear(e,i),!1},cancel:function(){if(this.dragging){this._mouseUp(new t.Event("mouseup",{target:null})),"original"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")):this.currentItem.show();for(var e=this.containers.length-1;0<=e;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each((function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))})),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each((function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")})),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,l=r+t.height,h=this.offset.click.top,c=this.offset.click.left;h="x"===this.options.axis||r<s+h&&s+h<l,c="y"===this.options.axis||o<e+c&&e+c<a;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?h&&c:o<e+this.helperProportions.width/2&&i-this.helperProportions.width/2<a&&r<s+this.helperProportions.height/2&&n-this.helperProportions.height/2<l},_intersectsWithPointer:function(t){var e="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height);t="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width);return!(!e||!t)&&(e=this.dragDirection.vertical,t=this.dragDirection.horizontal,this.floating?"right"===t||"down"===e?2:1:e&&("down"===e?2:1))},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=(t=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),this.dragDirection.vertical),s=this.dragDirection.horizontal;return this.floating&&s?"right"===s&&t||"left"===s&&!t:i&&("down"===i&&e||"up"===i&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!=t&&(0<t?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!=t&&(0<t?"right":"left")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){var i,s,n,o,a=[],r=[],l=this._connectWith();if(l&&e)for(i=l.length-1;0<=i;i--)for(s=(n=t(l[i],this.document[0])).length-1;0<=s;s--)(o=t.data(n[s],this.widgetFullName))&&o!==this&&!o.options.disabled&&r.push(["function"==typeof o.options.items?o.options.items.call(o.element):t(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);function h(){a.push(this)}for(r.push(["function"==typeof this.options.items?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),i=r.length-1;0<=i;i--)r[i][0].each(h);return t(a)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,(function(t){for(var i=0;i<e.length;i++)if(e[i]===t.item[0])return!1;return!0}))},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,o,a,r,l,h,c=this.items,u=[["function"==typeof this.options.items?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;0<=i;i--)for(s=(n=t(d[i],this.document[0])).length-1;0<=s;s--)(o=t.data(n[s],this.widgetFullName))&&o!==this&&!o.options.disabled&&(u.push(["function"==typeof o.options.items?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=u.length-1;0<=i;i--)for(a=u[i][1],h=(r=u[i][s=0]).length;s<h;s++)(l=t(r[s])).data(this.widgetName+"-item",a),c.push({item:l,instance:a,width:0,height:0,left:0,top:0})},_refreshItemPositions:function(e){for(var i,s,n=this.items.length-1;0<=n;n--)i=this.items[n],this.currentContainer&&i.instance!==this.currentContainer&&i.item[0]!==this.currentItem[0]||(s=this.options.toleranceElement?t(this.options.toleranceElement,i.item):i.item,e||(i.width=s.outerWidth(),i.height=s.outerHeight()),s=s.offset(),i.left=s.left,i.top=s.top)},refreshPositions:function(t){var e,i;if(this.floating=!!this.items.length&&("x"===this.options.axis||this._isFloating(this.items[0].item)),this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset()),this._refreshItemPositions(t),this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(e=this.containers.length-1;0<=e;e--)i=this.containers[e].element.offset(),this.containers[e].containerCache.left=i.left,this.containers[e].containerCache.top=i.top,this.containers[e].containerCache.width=this.containers[e].element.outerWidth(),this.containers[e].containerCache.height=this.containers[e].element.outerHeight();return this},_createPlaceholder:function(e){var i,s,n=(e=e||this).options;n.placeholder&&n.placeholder.constructor!==String||(i=n.placeholder,s=e.currentItem[0].nodeName.toLowerCase(),n.placeholder={element:function(){var n=t("<"+s+">",e.document[0]);return e._addClass(n,"ui-sortable-placeholder",i||e.currentItem[0].className)._removeClass(n,"ui-sortable-helper"),"tbody"===s?e._createTrPlaceholder(e.currentItem.find("tr").eq(0),t("<tr>",e.document[0]).appendTo(n)):"tr"===s?e._createTrPlaceholder(e.currentItem,n):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,o){i&&!n.forcePlaceholderSize||(o.height()&&(!n.forcePlaceholderSize||"tbody"!==s&&"tr"!==s)||o.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),o.width())||o.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10))}}),e.placeholder=t(n.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),n.placeholder.update(e,e.placeholder)},_createTrPlaceholder:function(e,i){var s=this;e.children().each((function(){t("<td>&#160;</td>",s.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(i)}))},_contactContainers:function(e){for(var i,s,n,o,a,r,l,h,c,u=null,d=null,p=this.containers.length-1;0<=p;p--)t.contains(this.currentItem[0],this.containers[p].element[0])||(this._intersectsWith(this.containers[p].containerCache)?u&&t.contains(this.containers[p].element[0],u.element[0])||(u=this.containers[p],d=p):this.containers[p].containerCache.over&&(this.containers[p]._trigger("out",e,this._uiHash(this)),this.containers[p].containerCache.over=0));if(u)if(1===this.containers.length)this.containers[d].containerCache.over||(this.containers[d]._trigger("over",e,this._uiHash(this)),this.containers[d].containerCache.over=1);else{for(s=1e4,n=null,o=(h=u.floating||this._isFloating(this.currentItem))?"left":"top",a=h?"width":"height",c=h?"pageX":"pageY",i=this.items.length-1;0<=i;i--)t.contains(this.containers[d].element[0],this.items[i].item[0])&&this.items[i].item[0]!==this.currentItem[0]&&(r=this.items[i].item.offset()[o],l=!1,e[c]-r>this.items[i][a]/2&&(l=!0),Math.abs(e[c]-r)<s)&&(s=Math.abs(e[c]-r),n=this.items[i],this.direction=l?"up":"down");(n||this.options.dropOnEmpty)&&(this.currentContainer===this.containers[d]?this.currentContainer.containerCache.over||(this.containers[d]._trigger("over",e,this._uiHash()),this.currentContainer.containerCache.over=1):(n?this._rearrange(e,n,null,!0):this._rearrange(e,null,this.containers[d].element,!0),this._trigger("change",e,this._uiHash()),this.containers[d]._trigger("change",e,this._uiHash(this)),this.currentContainer=this.containers[d],this.options.placeholder.update(this.currentContainer,this.placeholder),this.scrollParent=this.placeholder.scrollParent(),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this.containers[d]._trigger("over",e,this._uiHash(this)),this.containers[d].containerCache.over=1))}},_createHelper:function(e){var i=this.options;return(e="function"==typeof i.helper?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem).parents("body").length||this.appendTo[0].appendChild(e[0]),e[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),e[0].style.width&&!i.forceHelperSize||e.width(this.currentItem.width()),e[0].style.height&&!i.forceHelperSize||e.height(this.currentItem.height()),e},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),"left"in(t=Array.isArray(t)?{left:+t[0],top:+t[1]||0}:t)&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),{top:(e=this.offsetParent[0]===this.document[0].body?{top:0,left:0}:e).top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){var t;return"relative"===this.cssPosition?{top:(t=this.currentItem.position()).top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}:{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s=this.options;"parent"===s.containment&&(s.containment=this.helper[0].parentNode),"document"!==s.containment&&"window"!==s.containment||(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===s.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===s.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(s.containment)||(e=t(s.containment)[0],s=t(s.containment).offset(),i="hidden"!==t(e).css("overflow"),this.containment=[s.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,s.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,s.left+(i?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,s.top+(i?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i=i||this.position;e="absolute"===e?1:-1;var s="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,n=/(html|body)/i.test(s[0].tagName);return{top:i.top+this.offset.relative.top*e+this.offset.parent.top*e-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():n?0:s.scrollTop())*e,left:i.left+this.offset.relative.left*e+this.offset.parent.left*e-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():n?0:s.scrollLeft())*e}},_generatePosition:function(e){var i=this.options,s=e.pageX,n=e.pageY,o="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(o[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(s=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(n=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(s=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3])&&(n=this.containment[3]+this.offset.click.top),i.grid)&&(e=this.originalPageY+Math.round((n-this.originalPageY)/i.grid[1])*i.grid[1],n=!this.containment||e-this.offset.click.top>=this.containment[1]&&e-this.offset.click.top<=this.containment[3]?e:e-this.offset.click.top>=this.containment[1]?e-i.grid[1]:e+i.grid[1],e=this.originalPageX+Math.round((s-this.originalPageX)/i.grid[0])*i.grid[0],s=!this.containment||e-this.offset.click.left>=this.containment[0]&&e-this.offset.click.left<=this.containment[2]?e:e-this.offset.click.left>=this.containment[0]?e-i.grid[0]:e+i.grid[0]),{top:n-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:o.scrollTop()),left:s-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:o.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay((function(){n===this.counter&&this.refreshPositions(!s)}))},_clear:function(t,e){this.reverting=!1;var i,s=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)"auto"!==this._storedCSS[i]&&"static"!==this._storedCSS[i]||(this._storedCSS[i]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();function n(t,e,i){return function(s){i._trigger(t,s,e._uiHash(e))}}for(this.fromOutside&&!e&&s.push((function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))})),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||s.push((function(t){this._trigger("update",t,this._uiHash())})),this===this.currentContainer||e||(s.push((function(t){this._trigger("remove",t,this._uiHash())})),s.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),s.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer))),i=this.containers.length-1;0<=i;i--)e||s.push(n("deactivate",this,this.containers[i])),this.containers[i].containerCache.over&&(s.push(n("out",this,this.containers[i])),this.containers[i].containerCache.over=0);if(this._storedStylesheet&&(this._storedStylesheet.remove(),this._storedStylesheet=null),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(i=0;i<s.length;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){!1===t.Widget.prototype._trigger.apply(this,arguments)&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}}),t.widget("ui.spinner",{version:"1.14.1",defaultElement:"<input>",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e=this._super(),i=this.element;return t.each(["min","max","step"],(function(t,s){var n=i.attr(s);null!=n&&n.length&&(e[s]=n)})),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t)},mousewheel:function(t,e){var i=this.document[0].activeElement;if(this.element[0]===i&&e){if(!this.spinning&&!this._start(t))return!1;this._spin((0<e?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay((function(){this.spinning&&this._stop(t)}),100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){var i;i=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),e.preventDefault(),function(){this.element[0]!==this.document[0].activeElement&&(this.element.trigger("focus"),this.previous=i)}.call(this),!1!==this._start(e)&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){if(t(e.currentTarget).hasClass("ui-state-active"))return!1!==this._start(e)&&void this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("<span>").parent().append("<a></a><a></a>")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&0<this.uiSpinner.height()&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_start:function(t){return!(!this.spinning&&!1===this._trigger("start",t))&&(this.counter||(this.counter=1),this.spinning=!0)},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay((function(){this._repeat(40,e,i)}),t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&!1===this._trigger("spin",e,{value:i})||(this._value(i),this.counter++)},_increment:function(t){var e=this.options.incremental;return e?"function"==typeof e?e(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min?Math.max(t,this._precisionOf(this.options.min)):t},_precisionOf:function(t){var e=(t=t.toString()).indexOf(".");return-1===e?0:t.length-e-1},_adjustValue:function(t){var e=this.options,i=null!==e.min?e.min:0,s=t-i;return t=i+Math.round(s/e.step)*e.step,t=parseFloat(t.toFixed(this._precision())),null!==e.max&&t>e.max?e.max:null!==e.min&&t<e.min?e.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i;"culture"===t||"numberFormat"===t?(i=this._parse(this.element.val()),this.options[t]=e,this.element.val(this._format(i))):("max"!==t&&"min"!==t&&"step"!==t||"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(i=this.buttons.first().find(".ui-icon"),this._removeClass(i,null,this.options.icons.up),this._addClass(i,null,e.up),i=this.buttons.last().find(".ui-icon"),this._removeClass(i,null,this.options.icons.down),this._addClass(i,null,e.down)),this._super(t,e))},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:rt((function(t){this._super(t)})),_parse:function(t){return""===(t="string"==typeof t&&""!==t?window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t:t)||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null!==t&&t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&null!==(i=this._parse(t))&&(e||(i=this._adjustValue(i)),t=this._format(i)),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:rt((function(t){this._stepUp(t)})),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:rt((function(t){this._stepDown(t)})),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:rt((function(t){this._stepUp((t||1)*this.options.page)})),pageDown:rt((function(t){this._stepDown((t||1)*this.options.page)})),value:function(t){if(!arguments.length)return this._parse(this.element.val());rt(this._value).call(this,t)},widget:function(){return this.uiSpinner}}),!0===t.uiBackCompat&&t.widget("ui.spinner",t.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return"<span>"},_buttonHtml:function(){return"<a></a><a></a>"}}),t.ui.spinner,t.widget("ui.tabs",{version:"1.14.1",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:(nt=/#.*$/,function(t){var e=t.href.replace(nt,""),i=location.href.replace(nt,"");try{e=decodeURIComponent(e)}catch(t){}try{i=decodeURIComponent(i)}catch(t){}return 1<t.hash.length&&e===i}),_create:function(){var e=this,i=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,i.collapsible),this._processTabs(),i.active=this._initialActive(),Array.isArray(i.disabled)&&(i.disabled=t.uniqueSort(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),(function(t){return e.tabs.index(t)})))).sort()),!1!==this.options.active&&this.anchors.length?this.active=this._findActive(i.active):this.active=t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var e=this.options.active,i=this.options.collapsible,s=decodeURIComponent(location.hash.substring(1));return null===e&&(s&&this.tabs.each((function(i,n){if(t(n).attr("aria-controls")===s)return e=i,!1})),null!==(e=null===e?this.tabs.index(this.tabs.filter(".ui-tabs-active")):e)&&-1!==e||(e=!!this.tabs.length&&0)),!1!==e&&-1===(e=this.tabs.index(this.tabs.eq(e)))&&(e=!i&&0),e=!i&&!1===e&&this.anchors.length?0:e},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(e){var i=t(this.document[0].activeElement).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(e)){switch(e.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:s++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:n=!1,s--;break;case t.ui.keyCode.END:s=this.anchors.length-1;break;case t.ui.keyCode.HOME:s=0;break;case t.ui.keyCode.SPACE:return e.preventDefault(),clearTimeout(this.activating),void this._activate(s);case t.ui.keyCode.ENTER:return e.preventDefault(),clearTimeout(this.activating),void this._activate(s!==this.options.active&&s);default:return}e.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),e.ctrlKey||e.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay((function(){this.option("active",s)}),this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(e){return e.altKey&&e.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):e.altKey&&e.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(e,i){for(var s=this.tabs.length-1;-1!==t.inArray(e=(e=s<e?0:e)<0?s:e,this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){"active"===t?this._activate(e):(this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||!1!==this.options.active||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e))},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),(function(t){return i.index(t)})),this._processTabs(),!1!==e.active&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",(function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()})),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map((function(){return t("a",this)[0]})).attr({tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=t(),this.anchors.each((function(i,s){var n,o,a=t(s).uniqueId().attr("id"),r=t(s).closest("li"),l=r.attr("aria-controls");e._isLocal(s)?(o=decodeURIComponent(s.hash).substring(1),n=e.element.find("#"+CSS.escape(o))):(o=r.attr("aria-controls")||t({}).uniqueId()[0].id,(n=e.element.find("#"+o)).length||(n=e._createPanel(o)).insertAfter(e.panels[i-1]||e.tablist),n.attr("aria-live","polite")),n.length&&(e.panels=e.panels.add(n)),l&&r.data("ui-tabs-aria-controls",l),r.attr({"aria-controls":o,"aria-labelledby":a}),n.attr("aria-labelledby",a)})),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(e){return t("<div>").attr("id",e).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(e){var i,s;for(Array.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1),s=0;i=this.tabs[s];s++)i=t(i),!0===e||-1!==t.inArray(s,e)?(i.attr("aria-disabled","true"),this._addClass(i,null,"ui-state-disabled")):(i.removeAttr("aria-disabled"),this._removeClass(i,null,"ui-state-disabled"));this.options.disabled=e,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!0===e)},_setupEvents:function(e){var i={};e&&t.each(e.split(" "),(function(t,e){i[e]="_eventHandler"})),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each((function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))})),this.element.children().not(this.panels).each((function(){i-=t(this).outerHeight(!0)})),this.panels.each((function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))})).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each((function(){i=Math.max(i,t(this).height("").height())})).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget).closest("li"),o=n[0]===s[0],a=o&&i.collapsible,r=a?t():this._getPanelForTab(n),l=s.length?this._getPanelForTab(s):t();s={oldTab:s,oldPanel:l,newTab:a?t():n,newPanel:r};e.preventDefault(),n.hasClass("ui-state-disabled")||n.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||!1===this._trigger("beforeActivate",e,s)||(i.active=!a&&this.tabs.index(n),this.active=o?t():n,this.xhr&&this.xhr.abort(),l.length||r.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),r.length&&this.load(this.tabs.index(n),e),this._toggle(e,s))},_toggle:function(e,i){var s=this,n=i.newPanel,o=i.oldPanel;function a(){s.running=!1,s._trigger("activate",e,i)}function r(){s._addClass(i.newTab.closest("li"),"ui-tabs-active","ui-state-active"),n.length&&s.options.show?s._show(n,s.options.show,a):(n.show(),a())}this.running=!0,o.length&&this.options.hide?this._hide(o,this.options.hide,(function(){s._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),r()})):(this._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),o.hide(),r()),o.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),n.length&&o.length?i.oldTab.attr("tabIndex",-1):n.length&&this.tabs.filter((function(){return 0===t(this).attr("tabIndex")})).attr("tabIndex",-1),n.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(e){(e=this._findActive(e))[0]!==this.active[0]&&(e=(e=e.length?e:this.active).find(".ui-tabs-anchor")[0],this._eventHandler({target:e,currentTarget:e,preventDefault:t.noop}))},_findActive:function(e){return!1===e?t():this.tabs.eq(e)},_getIndex:function(t){return"string"==typeof t?this.anchors.index(this.anchors.filter("[href$='"+CSS.escape(t)+"']")):t},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each((function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")})),this.tabs.each((function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")})),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(e){var i=this.options.disabled;!1!==i&&(i=void 0!==e&&(e=this._getIndex(e),Array.isArray(i)?t.map(i,(function(t){return t!==e?t:null})):t.map(this.tabs,(function(t,i){return i!==e?i:null}))),this._setOptionDisabled(i))},disable:function(e){var i=this.options.disabled;if(!0!==i){if(void 0===e)i=!0;else{if(e=this._getIndex(e),-1!==t.inArray(e,i))return;i=Array.isArray(i)?t.merge([e],i).sort():[e]}this._setOptionDisabled(i)}},load:function(e,i){function s(t,e){"abort"===e&&n.panels.stop(!1,!0),n._removeClass(o,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===n.xhr&&delete n.xhr}e=this._getIndex(e);var n=this,o=this.tabs.eq(e),a=(e=o.find(".ui-tabs-anchor"),this._getPanelForTab(o)),r={tab:o,panel:a};this._isLocal(e[0])||(this.xhr=t.ajax(this._ajaxSettings(e,i,r)),"canceled"!==this.xhr.statusText&&(this._addClass(o,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done((function(t,e,o){a.html(t),n._trigger("load",i,r),s(o,e)})).fail((function(t,e){s(t,e)}))))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href"),beforeSend:function(e,o){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},s))}}},_getPanelForTab:function(e){return e=t(e).attr("aria-controls"),this.element.find("#"+CSS.escape(e))}}),!0===t.uiBackCompat&&t.widget("ui.tabs",t.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}}),t.ui.tabs,t.widget("ui.tooltip",{version:"1.14.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var e=t(this).attr("title");return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(t,e){var i=(t.attr("aria-describedby")||"").split(/\s+/);i.push(e),t.data("ui-tooltip-id",e).attr("aria-describedby",String.prototype.trim.call(i.join(" ")))},_removeDescribedBy:function(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/);-1!==(i=t.inArray(i,s))&&s.splice(i,1),e.removeData("ui-tooltip-id"),(s=String.prototype.trim.call(s.join(" ")))?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=t("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=t([])},_setOption:function(e,i){var s=this;this._super(e,i),"content"===e&&t.each(this.tooltips,(function(t,e){s._updateContent(e.element)}))},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var e=this;t.each(this.tooltips,(function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s.element[0],e.close(n,!0)})),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter((function(){var e=t(this);if(e.is("[title]"))return e.data("ui-tooltip-title",e.attr("title")).removeAttr("title")})))},_enable:function(){this.disabledTitles.each((function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))})),this.disabledTitles=t([])},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each((function(){var e,s=t(this);s.data("ui-tooltip-open")&&((e=t.Event("blur")).target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))})),this._registerCloseHandlers(e,s),this._updateContent(s,e))},_updateContent:function(t,e){var i=this.options.content,s=this,n=e?e.type:null;if("string"==typeof i||i.nodeType||i.jquery)return this._open(e,t,i);(i=i.call(t[0],(function(i){t.data("ui-tooltip-open")&&(e&&(e.type=n),s._open(e,t,i))})))&&this._open(e,t,i)},_open:function(e,i,s){var n,o,a,r=t.extend({},this.options.position);function l(t){r.of=t,n.is(":hidden")||n.position(r)}s&&((a=this._find(i))?a.tooltip.find(".ui-tooltip-content").html(s):(i.is("[title]")&&(e&&"mouseover"===e.type?i.attr("title",""):i.removeAttr("title")),a=this._tooltip(i),n=a.tooltip,this._addDescribedBy(i,n.attr("id")),n.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),(a=t("<div>").html(n.find(".ui-tooltip-content").html())).removeAttr("name").find("[name]").removeAttr("name"),a.removeAttr("id").find("[id]").removeAttr("id"),a.appendTo(this.liveRegion),this.options.track&&e&&/^mouse/.test(e.type)?(this._on(this.document,{mousemove:l}),l(e)):n.position(t.extend({of:i},this.options.position)),n.hide(),this._show(n,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(o=this.delayedShow=setInterval((function(){n.is(":visible")&&(l(r.of),clearInterval(o))}),13)),this._trigger("open",e,{tooltip:n})))},_registerCloseHandlers:function(e,i){var s={keyup:function(e){e.keyCode===t.ui.keyCode.ESCAPE&&((e=t.Event(e)).currentTarget=i[0],this.close(e,!0))}};i[0]!==this.element[0]&&(s.remove=function(){var t=this._find(i);t&&this._removeTooltip(t.tooltip)}),e&&"mouseover"!==e.type||(s.mouseleave="close"),e&&"focusin"!==e.type||(s.focusout="close"),this._on(!0,i,s)},close:function(e){var i,s=this,n=t(e?e.currentTarget:this.element),o=this._find(n);o?(i=o.tooltip,o.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),o.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,(function(){s._removeTooltip(t(this))})),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,(function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]})),o.closing=!0,this._trigger("close",e,{tooltip:i}),o.hiding)||(o.closing=!1)):n.removeData("ui-tooltip-open")},_tooltip:function(e){var i=t("<div>").attr("role","tooltip"),s=t("<div>").appendTo(i),n=i.uniqueId().attr("id");return this._addClass(s,"ui-tooltip-content"),this._addClass(i,"ui-tooltip","ui-widget ui-widget-content"),i.appendTo(this._appendTo(e)),this.tooltips[n]={element:e,tooltip:i}},_find:function(t){return(t=t.data("ui-tooltip-id"))?this.tooltips[t]:null},_removeTooltip:function(t){clearInterval(this.delayedShow),t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){return(t=t.closest(".ui-front, dialog")).length?t:this.document[0].body},_destroy:function(){var e=this;t.each(this.tooltips,(function(i,s){var n=t.Event("blur");s=s.element;n.target=n.currentTarget=s[0],e.close(n,!0),t("#"+i).remove(),s.data("ui-tooltip-title")&&(s.attr("title")||s.attr("title",s.data("ui-tooltip-title")),s.removeData("ui-tooltip-title"))})),this.liveRegion.remove()}}),!0===t.uiBackCompat&&t.widget("ui.tooltip",t.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}}),t.ui.tooltip}));
\ No newline at end of file
+(t=>{"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){t.ui=t.ui||{},t.ui.version="1.14.1";var e,i,s,n,o,a,r,l,h,c,u=0,d=Array.prototype.hasOwnProperty,p=Array.prototype.slice;function f(t,e,i){return[parseFloat(t[0])*(h.test(t[0])?e/100:1),parseFloat(t[1])*(h.test(t[1])?i/100:1)]}function g(e,i){return parseInt(t.css(e,i),10)||0}function m(t){return null!=t&&t===t.window}t.cleanData=(e=t.cleanData,function(i){for(var s,n,o=0;null!=(n=i[o]);o++)(s=t._data(n,"events"))&&s.remove&&t(n).triggerHandler("remove");e(i)}),t.widget=function(e,i,s){var n,o,a,r,l={},h=e.split(".")[0];return"__proto__"===(e=e.split(".")[1])||"constructor"===e?t.error("Invalid widget name: "+e):(r=h+"-"+e,s||(s=i,i=t.Widget),Array.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr.pseudos[r.toLowerCase()]=function(e){return!!t.data(e,r)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){if(!this||!this._createWidget)return new o(t,e);arguments.length&&this._createWidget(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),(a=new i).options=t.widget.extend({},a.options),t.each(s,function(t,e){function s(){return i.prototype[t].apply(this,arguments)}function n(e){return i.prototype[t].apply(this,e)}l[t]="function"!=typeof e?e:function(){var t,i=this._super,o=this._superApply;return this._super=s,this._superApply=n,t=e.apply(this,arguments),this._super=i,this._superApply=o,t}}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n&&a.widgetEventPrefix||e},l,{constructor:o,namespace:h,widgetName:e,widgetFullName:r}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o)},t.widget.extend=function(e){for(var i,s,n=p.call(arguments,1),o=0,a=n.length;o<a;o++)for(i in n[o])s=n[o][i],d.call(n[o],i)&&void 0!==s&&(t.isPlainObject(s)?e[i]=t.isPlainObject(e[i])?t.widget.extend({},e[i],s):t.widget.extend({},s):e[i]=s);return e},t.widget.bridge=function(e,i){var s=i.prototype.widgetFullName||e;t.fn[e]=function(n){var o="string"==typeof n,a=p.call(arguments,1),r=this;return o?this.length||"instance"!==n?this.each(function(){var i,o=t.data(this,s);return"instance"===n?(r=o,!1):o?"function"!=typeof o[n]||"_"===n.charAt(0)?t.error("no such method '"+n+"' for "+e+" widget instance"):(i=o[n].apply(o,a))!==o&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0:t.error("cannot call methods on "+e+" prior to initialization; attempted to call method '"+n+"'")}):r=void 0:(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each(function(){var e=t.data(this,s);e?(e.option(n||{}),e._init&&e._init()):t.data(this,s,new i(n,this))})),r}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=u++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},e=(s=e.split(".")).shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;o<s.length-1;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){for(var e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){var i=[],s=this;function n(n,o){for(var a,r=0;r<n.length;r++)a=s.classesElementLookup[n[r]]||t(),a=e.add?((()=>{var i=[];e.element.each(function(e,n){t.map(s.classesElementLookup,function(t){return t}).some(function(t){return t.is(n)})||i.push(n)}),s._on(t(i),{remove:"_untrackClassesElement"})})(),t(t.uniqueSort(a.get().concat(e.element.get())))):t(a.not(e.element).get()),s.classesElementLookup[n[r]]=a,i.push(n[r]),o&&e.classes[n[r]]&&i.push(e.classes[n[r]])}return(e=t.extend({element:this.element,classes:this.options.classes||{}},e)).keys&&n(e.keys.match(/\S+/g)||[],!0),e.extra&&n(e.extra.match(/\S+/g)||[]),i.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))}),this._off(t(e.target))},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){var n="string"==typeof t||null===t;return(e={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s="boolean"==typeof s?s:i}).element.toggleClass(this._classes(e),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){if(e||!0!==o.options.disabled&&!t(this).hasClass("ui-state-disabled"))return("string"==typeof a?o[a]:a).apply(o,arguments)}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var l=(s=s.match(/^([\w:-]*)\s*(.*)$/))[1]+o.eventNamespace;(s=s[2])?n.on(l,s,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){var i=this;return setTimeout(function(){return("string"==typeof t?i[t]:t).apply(i,arguments)},e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},(i=t.Event(i)).type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!("function"==typeof a&&!1===a.apply(this.element[0],[i].concat(s))||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){var a,r=(n="string"==typeof n?{effect:n}:n)?!0!==n&&"number"!=typeof n&&n.effect||i:e;"number"==typeof(n=n||{})?n={duration:n}:!0===n&&(n={}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,s=Math.max,n=Math.abs,o=/left|center|right/,a=/top|center|bottom/,r=/[\+\-]\d+(\.[\d]+)?%?/,l=/^\w+/,h=/%$/,c=t.fn.position,t.position={scrollbarWidth:function(){var e,s,n;return void 0!==i?i:(n=(s=t("<div style='display:block;position:absolute;width:200px;height:200px;overflow:hidden;'><div style='height:300px;width:auto;'></div></div>")).children()[0],t("body").append(s),e=n.offsetWidth,s.css("overflow","scroll"),e===(n=n.offsetWidth)&&(n=s[0].clientWidth),s.remove(),i=e-n)},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y");i="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth;return{width:"scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight?t.position.scrollbarWidth():0,height:i?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=m(i[0]),n=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:s,isDocument:n,offset:s||n?{left:0,top:0}:t(e).offset(),scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(e){var i,h,u,d,p,_,v,b,y,w,x,k;return e&&e.of?(_="string"==typeof(e=t.extend({},e)).of?t(document).find(e.of):t(e.of),v=t.position.getWithinInfo(e.within),b=t.position.getScrollInfo(v),y=(e.collision||"flip").split(" "),w={},k=9===(k=(x=_)[0]).nodeType?{width:x.width(),height:x.height(),offset:{top:0,left:0}}:m(k)?{width:x.width(),height:x.height(),offset:{top:x.scrollTop(),left:x.scrollLeft()}}:k.preventDefault?{width:0,height:0,offset:{top:k.pageY,left:k.pageX}}:{width:x.outerWidth(),height:x.outerHeight(),offset:x.offset()},_[0].preventDefault&&(e.at="left top"),h=k.width,u=k.height,p=t.extend({},d=k.offset),t.each(["my","at"],function(){var t,i,s=(e[this]||"").split(" ");(s=1===s.length?o.test(s[0])?s.concat(["center"]):a.test(s[0])?["center"].concat(s):["center","center"]:s)[0]=o.test(s[0])?s[0]:"center",s[1]=a.test(s[1])?s[1]:"center",t=r.exec(s[0]),i=r.exec(s[1]),w[this]=[t?t[0]:0,i?i[0]:0],e[this]=[l.exec(s[0])[0],l.exec(s[1])[0]]}),1===y.length&&(y[1]=y[0]),"right"===e.at[0]?p.left+=h:"center"===e.at[0]&&(p.left+=h/2),"bottom"===e.at[1]?p.top+=u:"center"===e.at[1]&&(p.top+=u/2),i=f(w.at,h,u),p.left+=i[0],p.top+=i[1],this.each(function(){var o,a,r=t(this),l=r.outerWidth(),c=r.outerHeight(),m=g(this,"marginLeft"),x=g(this,"marginTop"),k=l+m+g(this,"marginRight")+b.width,C=c+x+g(this,"marginBottom")+b.height,D=t.extend({},p),I=f(w.my,r.outerWidth(),r.outerHeight());"right"===e.my[0]?D.left-=l:"center"===e.my[0]&&(D.left-=l/2),"bottom"===e.my[1]?D.top-=c:"center"===e.my[1]&&(D.top-=c/2),D.left+=I[0],D.top+=I[1],o={marginLeft:m,marginTop:x},t.each(["left","top"],function(s,n){t.ui.position[y[s]]&&t.ui.position[y[s]][n](D,{targetWidth:h,targetHeight:u,elemWidth:l,elemHeight:c,collisionPosition:o,collisionWidth:k,collisionHeight:C,offset:[i[0]+I[0],i[1]+I[1]],my:e.my,at:e.at,within:v,elem:r})}),e.using&&(a=function(t){var i=d.left-D.left,o=i+h-l,a=d.top-D.top,p=a+u-c,f={target:{element:_,left:d.left,top:d.top,width:h,height:u},element:{element:r,left:D.left,top:D.top,width:l,height:c},horizontal:o<0?"left":0<i?"right":"center",vertical:p<0?"top":0<a?"bottom":"middle"};h<l&&n(i+o)<h&&(f.horizontal="center"),u<c&&n(a+p)<u&&(f.vertical="middle"),s(n(i),n(o))>s(n(a),n(p))?f.important="horizontal":f.important="vertical",e.using.call(this,t,f)}),r.offset(t.extend(D,{using:a}))})):c.apply(this,arguments)},t.ui.position={fit:{left:function(t,e){var i,n=(o=e.within).isWindow?o.scrollLeft:o.offset.left,o=o.width,a=t.left-e.collisionPosition.marginLeft,r=n-a,l=a+e.collisionWidth-o-n;o<e.collisionWidth?0<r&&l<=0?(i=t.left+r+e.collisionWidth-o-n,t.left+=r-i):t.left=!(0<l&&r<=0)&&l<r?n+o-e.collisionWidth:n:0<r?t.left+=r:0<l?t.left-=l:t.left=s(t.left-a,t.left)},top:function(t,e){var i,n=(n=e.within).isWindow?n.scrollTop:n.offset.top,o=e.within.height,a=t.top-e.collisionPosition.marginTop,r=n-a,l=a+e.collisionHeight-o-n;o<e.collisionHeight?0<r&&l<=0?(i=t.top+r+e.collisionHeight-o-n,t.top+=r-i):t.top=!(0<l&&r<=0)&&l<r?n+o-e.collisionHeight:n:0<r?t.top+=r:0<l?t.top-=l:t.top=s(t.top-a,t.top)}},flip:{left:function(t,e){var i=(o=e.within).offset.left+o.scrollLeft,s=o.width,o=o.isWindow?o.scrollLeft:o.offset.left,a=(r=t.left-e.collisionPosition.marginLeft)-o,r=r+e.collisionWidth-s-o,l="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,h="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,c=-2*e.offset[0];a<0?((s=t.left+l+h+c+e.collisionWidth-s-i)<0||s<n(a))&&(t.left+=l+h+c):0<r&&(0<(i=t.left-e.collisionPosition.marginLeft+l+h+c-o)||n(i)<r)&&(t.left+=l+h+c)},top:function(t,e){var i=(o=e.within).offset.top+o.scrollTop,s=o.height,o=o.isWindow?o.scrollTop:o.offset.top,a=(r=t.top-e.collisionPosition.marginTop)-o,r=r+e.collisionHeight-s-o,l="top"===e.my[1]?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,h="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,c=-2*e.offset[1];a<0?((s=t.top+l+h+c+e.collisionHeight-s-i)<0||s<n(a))&&(t.top+=l+h+c):0<r&&(0<(i=t.top-e.collisionPosition.marginTop+l+h+c-o)||n(i)<r)&&(t.top+=l+h+c)}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}},t.ui.position,t.extend(t.expr.pseudos,{data:t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}})}),t.fn.extend({disableSelection:(_="onselectstart"in document.createElement("div")?"selectstart":"mousedown",function(){return this.on(_+".ui-disableSelection",function(t){t.preventDefault()})}),enableSelection:function(){return this.off(".ui-disableSelection")}});var _,v=t,b={},y=b.toString,w=/^([\-+])=\s*(\d+\.?\d*)/,x=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16),t[4]?(parseInt(t[4],16)/255).toFixed(2):1]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16),t[4]?(parseInt(t[4]+t[4],16)/255).toFixed(2):1]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],k=v.Color=function(t,e,i,s){return new v.Color.fn.parse(t,e,i,s)},C={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},D={byte:{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},I=v.each;function T(t){return null==t?t+"":"object"==typeof t?b[y.call(t)]||"object":typeof t}function P(t,e,i){var s=D[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),s.mod?(t+s.mod)%s.mod:Math.min(s.max,Math.max(0,t)))}function M(t){var e=k(),i=e._rgba=[];return t=t.toLowerCase(),I(x,function(s,n){var o=(o=n.re.exec(t))&&n.parse(o);n=n.space||"rgba";if(o)return o=e[n](o),e[C[n].cache]=o[C[n].cache],i=e._rgba=o._rgba,!1}),i.length?("0,0,0,0"===i.join()&&v.extend(i,Y.transparent),e):Y[t]}function S(t,e,i){return 6*(i=(i+1)%1)<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}I(C,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),v.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(t,e){b["[object "+e+"]"]=e.toLowerCase()}),k.fn=v.extend(k.prototype,{parse:function(t,e,i,s){if(void 0===t)return this._rgba=[null,null,null,null],this;(t.jquery||t.nodeType)&&(t=v(t).css(e),e=void 0);var n=this,o=T(t),a=this._rgba=[];return void 0!==e&&(t=[t,e,i,s],o="array"),"string"===o?this.parse(M(t)||Y._default):"array"===o?(I(C.rgba.props,function(e,i){a[i.idx]=P(t[i.idx],i)}),this):"object"===o?(I(C,t instanceof k?function(e,i){t[i.cache]&&(n[i.cache]=t[i.cache].slice())}:function(e,i){var s=i.cache;I(i.props,function(e,o){if(!n[s]&&i.to){if("alpha"===e||null==t[e])return;n[s]=i.to(n._rgba)}n[s][o.idx]=P(t[e],o,!0)}),n[s]&&v.inArray(null,n[s].slice(0,3))<0&&(null==n[s][3]&&(n[s][3]=1),i.from)&&(n._rgba=i.from(n[s]))}),this):void 0},is:function(t){var e=k(t),i=!0,s=this;return I(C,function(t,n){var o,a=e[n.cache];return a&&(o=s[n.cache]||n.to&&n.to(s._rgba)||[],I(n.props,function(t,e){if(null!=a[e.idx])return i=a[e.idx]===o[e.idx]})),i}),i},_space:function(){var t=[],e=this;return I(C,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){t=(a=k(t))._space();var i=C[t],s=0===this.alpha()?k("transparent"):this,n=s[i.cache]||i.to(s._rgba),o=n.slice(),a=a[i.cache];return I(i.props,function(t,i){var s=i.idx,r=n[s],l=a[s],h=D[i.type]||{};null!==l&&(null===r?o[s]=l:(h.mod&&(l-r>h.mod/2?r+=h.mod:r-l>h.mod/2&&(r-=h.mod)),o[s]=P((l-r)*e+r,i)))}),this[t](o)},blend:function(t){var e,i,s;return 1===this._rgba[3]?this:(e=this._rgba.slice(),i=e.pop(),s=k(t)._rgba,k(v.map(e,function(t,e){return(1-i)*s[e]+i*t})))},toRgbaString:function(){var t="rgba(",e=v.map(this._rgba,function(t,e){return null!=t?t:2<e?1:0});return 1===e[3]&&(e.pop(),t="rgb("),t+e.join(", ")+")"},toHslaString:function(){var t="hsla(",e=v.map(this.hsla(),function(t,e){return null==t&&(t=2<e?1:0),e&&e<3?Math.round(100*t)+"%":t});return 1===e[3]&&(e.pop(),t="hsl("),t+e.join(", ")+")"},toHexString:function(t){var e=this._rgba.slice(),i=e.pop();return t&&e.push(~~(255*i)),"#"+v.map(e,function(t){return("0"+(t||0).toString(16)).substr(-2)}).join("")},toString:function(){return this.toRgbaString()}}),k.fn.parse.prototype=k.fn,C.hsla.to=function(t){var e,i,s,n,o,a,r,l;return null==t[0]||null==t[1]||null==t[2]?[null,null,null,t[3]]:(e=t[0]/255,i=t[1]/255,s=t[2]/255,t=t[3],n=(l=Math.max(e,i,s))-(r=Math.min(e,i,s)),a=.5*(o=l+r),r=r===l?0:e===l?60*(i-s)/n+360:i===l?60*(s-e)/n+120:60*(e-i)/n+240,l=0==n?0:a<=.5?n/o:n/(2-o),[Math.round(r)%360,l,a,null==t?1:t])},C.hsla.from=function(t){var e,i,s;return null==t[0]||null==t[1]||null==t[2]?[null,null,null,t[3]]:(e=t[0]/360,s=t[1],i=t[3],s=2*(t=t[2])-(t=t<=.5?t*(1+s):t+s-t*s),[Math.round(255*S(s,t,e+1/3)),Math.round(255*S(s,t,e)),Math.round(255*S(s,t,e-1/3)),i])},I(C,function(t,e){var i=e.props,s=e.cache,n=e.to,o=e.from;k.fn[t]=function(t){var e,a,r;return n&&!this[s]&&(this[s]=n(this._rgba)),void 0===t?this[s].slice():(e=T(t),a="array"===e||"object"===e?t:arguments,r=this[s].slice(),I(i,function(t,i){null==(t=a["object"===e?t:i.idx])&&(t=r[i.idx]),r[i.idx]=P(t,i)}),o?((t=k(o(r)))[s]=r,t):k(r))},I(i,function(e,i){k.fn[e]||(k.fn[e]=function(s){var n=T(s),o="alpha"===e?this._hsla?"hsla":"rgba":t,a=this[o](),r=a[i.idx];return"undefined"===n?r:("function"===n&&(n=T(s=s.call(this,r))),null==s&&i.empty?this:("string"===n&&(n=w.exec(s))&&(s=r+parseFloat(n[2])*("+"===n[1]?1:-1)),a[i.idx]=s,this[o](a)))})})}),k.hook=function(t){t=t.split(" "),I(t,function(t,e){v.cssHooks[e]={set:function(t,i){var s;"transparent"===i||"string"===T(i)&&!(s=M(i))||(i=(i=k(s||i)).toRgbaString()),t.style[e]=i}},v.fx.step[e]=function(t){t.colorInit||(t.start=k(t.elem,e),t.end=k(t.end),t.colorInit=!0),v.cssHooks[e].set(t.elem,t.start.transition(t.end,t.pos))}})},k.hook("backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor"),v.cssHooks.borderColor={expand:function(t){var e={};return I(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}};var H,z,O,A,E,N,W,F,L,R,Y=v.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"},B="ui-effects-",j="ui-effects-style",q="ui-effects-animated";function K(t){for(var e,i=t.ownerDocument.defaultView.getComputedStyle(t),s={},n=i.length;n--;)"string"==typeof i[e=i[n]]&&(s[e.replace(/-([\da-z])/gi,function(t,e){return e.toUpperCase()})]=i[e]);return s}function U(e,i,s,n){return e={effect:e=t.isPlainObject(e)?(i=e).effect:e},"function"==typeof(i=null==i?{}:i)&&(n=i,s=null,i={}),"number"!=typeof i&&!t.fx.speeds[i]||(n=s,s=i,i={}),"function"==typeof s&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function V(e){return!e||"number"==typeof e||t.fx.speeds[e]||"string"==typeof e&&!t.effects.effect[e]||"function"==typeof e||"object"==typeof e&&!e.effect}function X(t,e){var i=e.outerWidth();e=e.outerHeight(),t=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/.exec(t)||["",0,i,e,0];return{top:parseFloat(t[1])||0,right:"auto"===t[2]?i:parseFloat(t[2]),bottom:"auto"===t[3]?e:parseFloat(t[3]),left:parseFloat(t[4])||0}}t.effects={effect:{}},A=["add","remove","toggle"],E={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1},t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(v.style(t.elem,i,t.end),t.setAttr=!0)}}),t.effects.animateClass=function(e,i,s,n){var o=t.speed(i,s,n);return this.queue(function(){var i=t(this),s=i.attr("class")||"",n=(n=o.children?i.find("*").addBack():i).map(function(){return{el:t(this),start:K(this)}}),a=function(){t.each(A,function(t,s){e[s]&&i[s+"Class"](e[s])})};a(),n=n.map(function(){return this.end=K(this.el[0]),this.diff=((e,i)=>{var s,n,o={};for(s in i)n=i[s],e[s]===n||E[s]||!t.fx.step[s]&&isNaN(parseFloat(n))||(o[s]=n);return o})(this.start,this.end),this}),i.attr("class",s),n=n.map(function(){var e=this,i=t.Deferred(),s=t.extend({},o,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,n.get()).done(function(){a(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),o.complete.call(i[0])})})},t.fn.extend({addClass:(O=t.fn.addClass,function(e,i,s,n){return i?t.effects.animateClass.call(this,{add:e},i,s,n):O.apply(this,arguments)}),removeClass:(z=t.fn.removeClass,function(e,i,s,n){return 1<arguments.length?t.effects.animateClass.call(this,{remove:e},i,s,n):z.apply(this,arguments)}),toggleClass:(H=t.fn.toggleClass,function(e,i,s,n,o){return"boolean"==typeof i||void 0===i?s?t.effects.animateClass.call(this,i?{add:e}:{remove:e},s,n,o):H.apply(this,arguments):t.effects.animateClass.call(this,{toggle:e},i,s,n)}),switchClass:function(e,i,s,n,o){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,o)}}),t.expr&&t.expr.pseudos&&t.expr.pseudos.animated&&(t.expr.pseudos.animated=(N=t.expr.pseudos.animated,function(e){return!!t(e).data(q)||N(e)})),!0===t.uiBackCompat&&t.extend(t.effects,{save:function(t,e){for(var i=0,s=e.length;i<s;i++)null!==e[i]&&t.data(B+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,s=0,n=e.length;s<n;s++)null!==e[s]&&(i=t.data(B+e[s]),t.css(e[s],i))},setMode:function(t,e){return"toggle"===e?t.is(":hidden")?"show":"hide":e},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),float:e.css("float")},s=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(s){o=document.body}return e.wrap(s),e[0]!==o&&!t.contains(e[0],o)||t(o).trigger("focus"),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),e[0]!==i&&!t.contains(e[0],i)||t(i).trigger("focus")),e}}),t.extend(t.effects,{version:"1.14.1",define:function(e,i,s){return s||(s=i,i="effect"),t.effects.effect[e]=s,t.effects.effect[e].mode=i,s},scaledDimensions:function(t,e,i){var s;return 0===e?{height:0,width:0,outerHeight:0,outerWidth:0}:(s="horizontal"!==i?(e||100)/100:1,i="vertical"!==i?(e||100)/100:1,{height:t.height()*i,width:t.width()*s,outerHeight:t.outerHeight()*i,outerWidth:t.outerWidth()*s})},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();1<e&&s.splice.apply(s,[1,0].concat(s.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data(j,t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data(j)||"",t.removeData(j)},mode:function(t,e){return t=t.is(":hidden"),"toggle"===e&&(e=t?"show":"hide"),(t?"hide"===e:"show"===e)?"none":e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createPlaceholder:function(e){var i,s=e.css("position"),n=e.position();return e.css({marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()),/^(static|relative)/.test(s)&&(s="absolute",i=t("<"+e[0].nodeName+">").insertAfter(e).css({display:/^(inline|ruby)/.test(e.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight"),float:e.css("float")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).addClass("ui-effects-placeholder"),e.data(B+"placeholder",i)),e.css({position:s,left:n.left,top:n.top}),i},removePlaceholder:function(t){var e=B+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(e){t.effects.restoreStyle(e),t.effects.removePlaceholder(e)},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var o=e.cssUnit(i);0<o[0]&&(n[i]=o[0]*s+o[1])}),n}}),t.fn.extend({effect:function(){function e(e){var i=t(this),s=t.effects.mode(i,l)||n;i.data(q,!0),h.push(s),n&&("show"===s||s===n&&"hide"===s)&&i.show(),n&&"none"===s||t.effects.saveStyle(i),"function"==typeof e&&e()}var i=U.apply(this,arguments),s=t.effects.effect[i.effect],n=s.mode,o=i.queue,a=o||"fx",r=i.complete,l=i.mode,h=[];return t.fx.off||!s?l?this[l](i.duration,r):this.each(function(){r&&r.call(this)}):!1===o?this.each(e).each(c):this.queue(a,e).queue(a,c);function c(e){var o=t(this);function a(){"function"==typeof r&&r.call(o[0]),"function"==typeof e&&e()}i.mode=h.shift(),!0!==t.uiBackCompat||n?"none"===i.mode?(o[l](),a()):s.call(o[0],i,function(){o.removeData(q),t.effects.cleanUp(o),"hide"===i.mode&&o.hide(),a()}):(o.is(":hidden")?"hide"===l:"show"===l)?(o[l](),a()):s.call(o[0],i,a)}},show:(L=t.fn.show,function(t){return V(t)?L.apply(this,arguments):((t=U.apply(this,arguments)).mode="show",this.effect.call(this,t))}),hide:(F=t.fn.hide,function(t){return V(t)?F.apply(this,arguments):((t=U.apply(this,arguments)).mode="hide",this.effect.call(this,t))}),toggle:(W=t.fn.toggle,function(t){return V(t)||"boolean"==typeof t?W.apply(this,arguments):((t=U.apply(this,arguments)).mode="toggle",this.effect.call(this,t))}),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){0<i.indexOf(e)&&(s=[parseFloat(i),e])}),s},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):X(this.css("clip"),this)},transfer:function(e,i){var s=t(this),n="fixed"===(l=t(e.to)).css("position"),o=t("body"),a=n?o.scrollTop():0,r=(o=n?o.scrollLeft():0,{top:(r=l.offset()).top-a,left:r.left-o,height:l.innerHeight(),width:l.innerWidth()}),l=s.offset(),h=t("<div class='ui-effects-transfer'></div>");h.appendTo("body").addClass(e.className).css({top:l.top-a,left:l.left-o,height:s.innerHeight(),width:s.innerWidth(),position:n?"fixed":"absolute"}).animate(r,e.duration,e.easing,function(){h.remove(),"function"==typeof i&&i()})}}),t.fx.step.clip=function(e){e.clipInit||(e.start=t(e.elem).cssClip(),"string"==typeof e.end&&(e.end=X(e.end,e.elem)),e.clipInit=!0),t(e.elem).cssClip({top:e.pos*(e.end.top-e.start.top)+e.start.top,right:e.pos*(e.end.right-e.start.right)+e.start.right,bottom:e.pos*(e.end.bottom-e.start.bottom)+e.start.bottom,left:e.pos*(e.end.left-e.start.left)+e.start.left})},R={},t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,e){R[e]=function(e){return Math.pow(e,t+2)}}),t.extend(R,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;t<((e=Math.pow(2,--i))-1)/11;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(R,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return t<.5?i(2*t)/2:1-i(-2*t+2)/2}});var $,G,Q,J=t.effects,Z=(t.effects.define("blind","hide",function(e,i){var s={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},n=t(this),o=e.direction||"up",a=n.cssClip(),r={clip:t.extend({},a)},l=t.effects.createPlaceholder(n);r.clip[s[o][0]]=r.clip[s[o][1]],"show"===e.mode&&(n.cssClip(r.clip),l&&l.css(t.effects.clipToBox(r)),r.clip=a),l&&l.animate(t.effects.clipToBox(r),e.duration,e.easing),n.animate(r,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("bounce",function(e,i){var s,n,o=t(this),a="hide"===(r=e.mode),r="show"===r,l=e.direction||"up",h=e.distance,c=e.times||5,u=2*c+(r||a?1:0),d=e.duration/u,p=e.easing,f="up"===l||"down"===l?"top":"left",g="up"===l||"left"===l,m=0;e=o.queue().length;for(t.effects.createPlaceholder(o),l=o.css(f),h=h||o["top"==f?"outerHeight":"outerWidth"]()/3,r&&((n={opacity:1})[f]=l,o.css("opacity",0).css(f,g?2*-h:2*h).animate(n,d,p)),a&&(h/=Math.pow(2,c-1)),(n={})[f]=l;m<c;m++)(s={})[f]=(g?"-=":"+=")+h,o.animate(s,d,p).animate(n,d,p),h=a?2*h:h/2;a&&((s={opacity:0})[f]=(g?"-=":"+=")+h,o.animate(s,d,p)),o.queue(i),t.effects.unshift(o,e,1+u)}),t.effects.define("clip","hide",function(e,i){var s={},n=t(this),o=(a="both"===(r=e.direction||"vertical"))||"horizontal"===r,a=a||"vertical"===r,r=n.cssClip();s.clip={top:a?(r.bottom-r.top)/2:r.top,right:o?(r.right-r.left)/2:r.right,bottom:a?(r.bottom-r.top)/2:r.bottom,left:o?(r.right-r.left)/2:r.left},t.effects.createPlaceholder(n),"show"===e.mode&&(n.cssClip(s.clip),s.clip=r),n.animate(s,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("drop","hide",function(e,i){var s,n,o=t(this),a="show"===e.mode,r="up"===(n=e.direction||"left")||"down"===n?"top":"left",l="+="==(n="up"===n||"left"===n?"-=":"+=")?"-=":"+=",h={opacity:0};t.effects.createPlaceholder(o),s=e.distance||o["top"==r?"outerHeight":"outerWidth"](!0)/2,h[r]=n+s,a&&(o.css(h),h[r]=l+s,h.opacity=1),o.animate(h,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("explode","hide",function(e,i){var s,n,o,a,r,l,h=e.pieces?Math.round(Math.sqrt(e.pieces)):3,c=h,u=t(this),d="show"===e.mode,p=u.show().css("visibility","hidden").offset(),f=Math.ceil(u.outerWidth()/c),g=Math.ceil(u.outerHeight()/h),m=[];function _(){m.push(this),m.length===h*c&&(u.css({visibility:"visible"}),t(m).remove(),i())}for(s=0;s<h;s++)for(a=p.top+s*g,l=s-(h-1)/2,n=0;n<c;n++)o=p.left+n*f,r=n-(c-1)/2,u.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-n*f,top:-s*g}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:f,height:g,left:o+(d?r*f:0),top:a+(d?l*g:0),opacity:d?0:1}).animate({left:o+(d?0:r*f),top:a+(d?0:l*g),opacity:d?1:0},e.duration||500,e.easing,_)}),t.effects.define("fade","toggle",function(e,i){var s="show"===e.mode;t(this).css("opacity",s?0:1).animate({opacity:s?1:0},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("fold","hide",function(e,i){var s=t(this),n="show"===(o=e.mode),o="hide"===o,a=e.size||15,r=/([0-9]+)%/.exec(a),l=e.horizFirst?["right","bottom"]:["bottom","right"],h=e.duration/2,c=t.effects.createPlaceholder(s),u=s.cssClip(),d={clip:t.extend({},u)},p={clip:t.extend({},u)},f=[u[l[0]],u[l[1]]],g=s.queue().length;r&&(a=parseInt(r[1],10)/100*f[o?0:1]),d.clip[l[0]]=a,p.clip[l[0]]=a,p.clip[l[1]]=0,n&&(s.cssClip(p.clip),c&&c.css(t.effects.clipToBox(p)),p.clip=u),s.queue(function(i){c&&c.animate(t.effects.clipToBox(d),h,e.easing).animate(t.effects.clipToBox(p),h,e.easing),i()}).animate(d,h,e.easing).animate(p,h,e.easing).queue(i),t.effects.unshift(s,g,4)}),t.effects.define("highlight","show",function(e,i){var s=t(this),n={backgroundColor:s.css("backgroundColor")};"hide"===e.mode&&(n.opacity=0),t.effects.saveStyle(s),s.css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("size",function(e,i){var s,n=t(this),o=["fontSize"],a=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],r=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],l=e.mode,h="effect"!==l,c=e.scale||"both",u=e.origin||["middle","center"],d=n.css("position"),p=n.position(),f=t.effects.scaledDimensions(n),g=e.from||f,m=e.to||t.effects.scaledDimensions(n,0);t.effects.createPlaceholder(n),"show"===l&&(l=g,g=m,m=l),s={from:{y:g.height/f.height,x:g.width/f.width},to:{y:m.height/f.height,x:m.width/f.width}},"box"!==c&&"both"!==c||(s.from.y!==s.to.y&&(g=t.effects.setTransition(n,a,s.from.y,g),m=t.effects.setTransition(n,a,s.to.y,m)),s.from.x!==s.to.x&&(g=t.effects.setTransition(n,r,s.from.x,g),m=t.effects.setTransition(n,r,s.to.x,m))),"content"!==c&&"both"!==c||s.from.y!==s.to.y&&(g=t.effects.setTransition(n,o,s.from.y,g),m=t.effects.setTransition(n,o,s.to.y,m)),u&&(l=t.effects.getBaseline(u,f),g.top=(f.outerHeight-g.outerHeight)*l.y+p.top,g.left=(f.outerWidth-g.outerWidth)*l.x+p.left,m.top=(f.outerHeight-m.outerHeight)*l.y+p.top,m.left=(f.outerWidth-m.outerWidth)*l.x+p.left),delete g.outerHeight,delete g.outerWidth,n.css(g),"content"!==c&&"both"!==c||(a=a.concat(["marginTop","marginBottom"]).concat(o),r=r.concat(["marginLeft","marginRight"]),n.find("*[width]").each(function(){var i=t(this),n={height:(o=t.effects.scaledDimensions(i)).height*s.from.y,width:o.width*s.from.x,outerHeight:o.outerHeight*s.from.y,outerWidth:o.outerWidth*s.from.x},o={height:o.height*s.to.y,width:o.width*s.to.x,outerHeight:o.height*s.to.y,outerWidth:o.width*s.to.x};s.from.y!==s.to.y&&(n=t.effects.setTransition(i,a,s.from.y,n),o=t.effects.setTransition(i,a,s.to.y,o)),s.from.x!==s.to.x&&(n=t.effects.setTransition(i,r,s.from.x,n),o=t.effects.setTransition(i,r,s.to.x,o)),h&&t.effects.saveStyle(i),i.css(n),i.animate(o,e.duration,e.easing,function(){h&&t.effects.restoreStyle(i)})})),n.animate(m,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){var e=n.offset();0===m.opacity&&n.css("opacity",g.opacity),h||(n.css("position","static"===d?"relative":d).offset(e),t.effects.saveStyle(n)),i()}})}),t.effects.define("scale",function(e,i){var s=t(this),n=e.mode;n=parseInt(e.percent,10)||(0===parseInt(e.percent,10)||"effect"!==n?0:100),s=t.extend(!0,{from:t.effects.scaledDimensions(s),to:t.effects.scaledDimensions(s,n,e.direction||"both"),origin:e.origin||["middle","center"]},e);e.fade&&(s.from.opacity=1,s.to.opacity=0),t.effects.effect.size.call(this,s,i)}),t.effects.define("puff","hide",function(e,i){e=t.extend(!0,{},e,{fade:!0,percent:parseInt(e.percent,10)||150}),t.effects.effect.scale.call(this,e,i)}),t.effects.define("pulsate","show",function(e,i){var s=t(this),n="show"===(h=e.mode),o=2*(e.times||5)+(n||"hide"===h?1:0),a=e.duration/o,r=0,l=1,h=s.queue().length;for(!n&&s.is(":visible")||(s.css("opacity",0).show(),r=1);l<o;l++)s.animate({opacity:r},a,e.easing),r=1-r;s.animate({opacity:r},a,e.easing),s.queue(i),t.effects.unshift(s,h,1+o)}),t.effects.define("shake",function(e,i){var s=1,n=t(this),o=e.direction||"left",a=e.distance||20,r=e.times||3,l=2*r+1,h=Math.round(e.duration/l),c="up"===o||"down"===o?"top":"left",u=(o="up"===o||"left"===o,{}),d={},p={},f=n.queue().length;for(t.effects.createPlaceholder(n),u[c]=(o?"-=":"+=")+a,d[c]=(o?"+=":"-=")+2*a,p[c]=(o?"-=":"+=")+2*a,n.animate(u,h,e.easing);s<r;s++)n.animate(d,h,e.easing).animate(p,h,e.easing);n.animate(d,h,e.easing).animate(u,h/2,e.easing).queue(i),t.effects.unshift(n,f,1+l)}),t.effects.define("slide","show",function(e,i){var s,n,o=t(this),a={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},r=e.mode,l=e.direction||"left",h="up"===l||"down"===l?"top":"left",c="up"===l||"left"===l,u=e.distance||o["top"==h?"outerHeight":"outerWidth"](!0),d={};t.effects.createPlaceholder(o),s=o.cssClip(),n=o.position()[h],d[h]=(c?-1:1)*u+n,d.clip=o.cssClip(),d.clip[a[l][1]]=d.clip[a[l][0]],"show"===r&&(o.cssClip(d.clip),o.css(h,d[h]),d.clip=s,d[h]=n),o.animate(d,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),J=!0===t.uiBackCompat?t.effects.define("transfer",function(e,i){t(this).transfer(e,i)}):J,t.ui.focusable=function(e,i){var s,n,o,a=e.nodeName.toLowerCase();return"area"===a?(o=(s=e.parentNode).name,!(!e.href||!o||"map"!==s.nodeName.toLowerCase())&&0<(s=t("img[usemap='#"+o+"']")).length&&s.is(":visible")):(/^(input|select|textarea|button|object)$/.test(a)?(n=!e.disabled)&&(o=t(e).closest("fieldset")[0])&&(n=!o.disabled):n="a"===a&&e.href||i,n&&t(e).is(":visible")&&"visible"===t(e).css("visibility"))},t.extend(t.expr.pseudos,{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){var e;this.form=t(this.element.prop("form")),this.form.length&&((e=this.form.data("ui-form-reset-instances")||[]).length||this.form.on("reset.ui-form-reset",this._formResetHandler),e.push(this),this.form.data("ui-form-reset-instances",e))},_unbindFormResetHandler:function(){var e;this.form.length&&((e=this.form.data("ui-form-reset-instances")).splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset"))}},t.escapeSelector||(t.escapeSelector=function(t){return CSS.escape(t+"")}),t.fn.even&&t.fn.odd||t.fn.extend({even:function(){return this.filter(function(t){return t%2==0})},odd:function(){return this.filter(function(t){return t%2==1})}}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.fn.labels=function(){var t,e,i;return this.length?this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(e=this.eq(0).parents("label"),(t=this.attr("id"))&&(i=(i=this.eq(0).parents().last()).add((i.length?i:this).siblings()),t="label[for='"+CSS.escape(t)+"']",e=e.add(i.find(t).addBack(t))),this.pushStack(e)):this.pushStack([])},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/;e=this.parents().filter(function(){var e=t(this);return(!s||"static"!==e.css("position"))&&n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&e.length?e:t(this[0].ownerDocument||document)},t.extend(t.expr.pseudos,{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||0<=i)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:($=0,function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++$)})}),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.widget("ui.accordion",{version:"1.14.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:function(t){return t.find("> li > :first-child").add(t.find("> :not(li)").filter(function(t){return t%2==0}))},heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||!1!==e.active&&null!=e.active||(e.active=0),this._processPanels(),e.active<0&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i=this.options.icons;i&&(e=t("<span>"),this._addClass(e,"ui-accordion-header-icon","ui-icon "+i.header),e.prependTo(this.headers),e=this.active.children(".ui-accordion-header-icon"),this._removeClass(e,i.header)._addClass(e,null,i.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){"active"===t?this._activate(e):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||!1!==this.options.active||this._activate(0),"icons"===t&&(this._destroyIcons(),e)&&this._createIcons())},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),!1===e.active&&!0===e.collapsible||!this.headers.length?(e.active=!1,this.active=t()):!1===e.active?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;"function"==typeof this.options.header?this.headers=this.options.header(this.element):this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=t(this),i=e.uniqueId().attr("id"),s=e.next(),n=s.uniqueId().attr("id");e.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(e=n.height(),this.element.siblings(":visible").each(function(){var i=t(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===s&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){(e=this._findActive(e)[0])!==this.active[0]&&(e=e||this.active[0],this._eventHandler({target:e,currentTarget:e,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n[0]===s[0],a=o&&i.collapsible,r=a?t():n.next(),l=s.next();l={oldHeader:s,oldPanel:l,newHeader:a?t():n,newPanel:r};e.preventDefault(),o&&!i.collapsible||!1===this._trigger("beforeActivate",e,l)||(i.active=!a&&this.headers.index(n),this.active=o?t():n,this._toggle(l),this._removeClass(s,"ui-accordion-header-active","ui-state-active"),i.icons&&(r=s.children(".ui-accordion-header-icon"),this._removeClass(r,null,i.icons.activeHeader)._addClass(r,null,i.icons.header)),o)||(this._removeClass(n,"ui-accordion-header-collapsed")._addClass(n,"ui-accordion-header-active","ui-state-active"),i.icons&&(e=n.children(".ui-accordion-header-icon"),this._removeClass(e,null,i.icons.header)._addClass(e,null,i.icons.activeHeader)),this._addClass(n.next(),"ui-accordion-content-active"))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){function s(){o._toggleComplete(i)}var n,o=this,a=0,r=t.css("box-sizing"),l=t.length&&(!e.length||t.index()<e.index()),h=this.options.animate||{},c=(c="string"==typeof(l=l&&h.down||h)?l:c)||l.easing||h.easing,u=(u="number"==typeof l?l:u)||l.duration||h.duration;return e.length?t.length?(n=t.show().outerHeight(),e.animate(this.hideProps,{duration:u,easing:c,step:function(t,e){e.now=Math.round(t)}}),void t.hide().animate(this.showProps,{duration:u,easing:c,complete:s,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?"content-box"===r&&(a+=i.now):"content"!==o.options.heightStyle&&(i.now=Math.round(n-e.outerHeight()-a),a=0)}})):e.animate(this.hideProps,u,c,s):t.animate(this.showProps,u,c,s)},_toggleComplete:function(t){var e=t.oldPanel,i=e.prev();this._removeClass(e,"ui-accordion-content-active"),this._removeClass(i,"ui-accordion-header-active")._addClass(i,"ui-accordion-header-collapsed"),this._trigger("activate",null,t)}}),t.widget("ui.menu",{version:"1.14.1",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.lastMousePosition={x:null,y:null},this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault(),this._activateItem(t)},"click .ui-menu-item":function(e){var i=t(e.target),s=t(this.document[0].activeElement);!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active)&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer))},"mouseenter .ui-menu-item":"_activateItem","mousemove .ui-menu-item":"_activateItem",mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this._menuItems().first();e||this.focus(t,i)},blur:function(e){this._delay(function(){t.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t,!0),this.mouseHandled=!1}})},_activateItem:function(e){var i,s;this.previousFilter||e.clientX===this.lastMousePosition.x&&e.clientY===this.lastMousePosition.y||(this.lastMousePosition={x:e.clientX,y:e.clientY},i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget),i[0]!==s[0])||s.is(".ui-state-active")||(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),e.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:i=this.previousFilter||"",n=o=!1,s=96<=e.keyCode&&e.keyCode<=105?(e.keyCode-96).toString():String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),s===i?n=!0:s=i+s,i=this._filterMenuItems(s),(i=n&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i).length||(s=String.fromCharCode(e.keyCode),i=this._filterMenuItems(s)),i.length?(this.focus(e,i),this.previousFilter=s,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}o&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s=this,n=this.options.icons.submenu,o=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),e=o.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),o=t("<span>").data("ui-menu-submenu-caret",!0);s._addClass(o,"ui-menu-icon","ui-icon "+n),i.attr("aria-haspopup","true").prepend(o),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(e,"ui-menu","ui-widget ui-widget-content ui-front"),(e=o.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var e=t(this);s._isDivider(e)&&s._addClass(e,"ui-menu-divider","ui-widget-content")}),i=(o=e.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(o,"ui-menu-item")._addClass(i,"ui-menu-item-wrapper"),e.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){var i;"icons"===t&&(i=this.element.find(".ui-menu-icon"),this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),i=this.active.children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",i.attr("id")),i=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,i=e.offset().top-this.activeMenu.offset().top-i-s,s=this.activeMenu.scrollTop(),n=this.activeMenu.height(),e=e.outerHeight(),i<0?this.activeMenu.scrollTop(s+i):n<i+e&&this.activeMenu.scrollTop(s+i-n+e))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},i?0:this.delay)},_close:function(t){(t=t||(this.active?this.active.parent():this.element)).find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this._menuItems(this.active.children(".ui-menu")).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_menuItems:function(t){return(t||this.element).find(this.options.items).filter(".ui-menu-item")},_move:function(t,e,i){var s;(s=this.active?"first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").last():this.active[t+"All"](".ui-menu-item").first():s)&&s.length&&this.active||(s=this._menuItems(this.activeMenu)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;this.active?this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.innerHeight(),0===t.fn.jquery.indexOf("3.2.")&&(n+=this.element[0].offsetHeight-this.element.outerHeight()),this.active.nextAll(".ui-menu-item").each(function(){return(i=t(this)).offset().top-s-n<0}),this.focus(e,i)):this.focus(e,this._menuItems(this.activeMenu)[this.active?"last":"first"]())):this.next(e)},previousPage:function(e){var i,s,n;this.active?this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.innerHeight(),0===t.fn.jquery.indexOf("3.2.")&&(n+=this.element[0].offsetHeight-this.element.outerHeight()),this.active.prevAll(".ui-menu-item").each(function(){return 0<(i=t(this)).offset().top-s+n}),this.focus(e,i)):this.focus(e,this._menuItems(this.activeMenu).first())):this.next(e)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)},_filterMenuItems:function(e){e=e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");var i=new RegExp("^"+e,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return i.test(String.prototype.trim.call(t(this).children(".ui-menu-item-wrapper").text()))})}}),t.widget("ui.autocomplete",{version:"1.14.1",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,liveRegionTimer:null,_create:function(){var e,i,s,n="textarea"===(o=this.element[0].nodeName.toLowerCase()),o="input"===o;this.isMultiLine=n||!o&&"true"===this.element.prop("contentEditable"),this.valueMethod=this.element[n||o?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))i=s=e=!0;else{i=s=e=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}}},keypress:function(s){if(e)e=!1,this.isMultiLine&&!this.menu.element.is(":visible")||s.preventDefault();else if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){s?(s=!1,t.preventDefault()):this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){clearTimeout(this.searching),this.close(t),this._change(t)}}),this._initSource(),this.menu=t("<ul>").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault()},menufocus:function(e,i){var s,n;this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent)&&/^mouse/.test(e.originalEvent.type)?(this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)})):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:n})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(n.value),(s=i.item.attr("aria-label")||n.value)&&String.prototype.trim.call(s).length&&(clearTimeout(this.liveRegionTimer),this.liveRegionTimer=this._delay(function(){this.liveRegion.html(t("<div>").text(s))},100)))},menuselect:function(t,e){e=e.item.data("ui-autocomplete-item");var i=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.trigger("focus"),this.previous=i),!1!==this._trigger("select",t,{item:e})&&this._value(e.value),this.term=this._value(),this.close(t),this.selectedItem=e}}),this.liveRegion=t("<div>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return(e=(e=e&&(e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)))&&e[0]?e:this.element.closest(".ui-front, dialog")).length?e:this.document[0].body},_initSource:function(){var e,i,s=this;Array.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),s=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;e&&(i||s)||(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):!1!==this._trigger("search",e)?this._search(t):void 0},_search:function(t){this.pending++,this._addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var t=++this.requestIndex;return function(e){t===this.requestIndex&&this.__response(e),this.pending--,this.pending||this._removeClass("ui-autocomplete-loading")}.bind(this)},__response:function(t){t=t&&this._normalize(t),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this._off(this.document,"mousedown"),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return"string"==typeof e?{label:e,value:e}:t.extend({},e,{label:e.label||e.value,value:e.value||e.label})})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(),this._on(this.document,{mousedown:"_closeOnClickOutside"})},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var s=this;t.each(i,function(t,i){s._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<div>").text(i.label)).appendTo(e)},_move:function(t,e){this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur()):this.menu[t](e):this.search(null,e)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){this.isMultiLine&&!this.menu.element.is(":visible")||(this._move(t,e),e.preventDefault())}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=new RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(1<t?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,clearTimeout(this.liveRegionTimer),this.liveRegionTimer=this._delay(function(){this.liveRegion.html(t("<div>").text(i))},100))}}),t.ui.autocomplete,/ui-corner-([a-z]){2,6}/g);function tt(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:"",selectMonthLabel:"Select month",selectYearLabel:"Select year"},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,onUpdateDatepicker:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=et(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function et(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,it)}function it(){t.datepicker._isDisabledDatepicker((Q.inline?Q.dpDiv.parent():Q.input)[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function st(e,i){for(var s in t.extend(e,i),i)null==i[s]&&(e[s]=i[s])}t.widget("ui.controlgroup",{version:"1.14.1",defaultElement:"<div>",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var e=this,i=[];t.each(this.options.items,function(s,n){var o,a={};n&&("controlgroupLabel"===s?((o=e.element.find(n)).each(function(){var e=t(this);e.children(".ui-controlgroup-label-contents").length||e.contents().wrapAll("<span class='ui-controlgroup-label-contents'></span>")}),e._addClass(o,null,"ui-widget ui-widget-content ui-state-default"),i=i.concat(o.get())):t.fn[s]&&(a=e["_"+s+"Options"]?e["_"+s+"Options"]("middle"):{classes:{}},e.element.find(n).each(function(){var n=t(this),o=n[s]("instance"),r=t.widget.extend({},a);"button"===s&&n.parent(".ui-spinner").length||((o=o||n[s]()[s]("instance"))&&(r.classes=e._resolveClassesValues(r.classes,o)),n[s](r),r=n[s]("widget"),t.data(r[0],"ui-controlgroup-data",o||n[s]("instance")),i.push(r[0]))})))}),this.childWidgets=t(t.uniqueSort(i)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var i=t(this).data("ui-controlgroup-data");i&&i[e]&&i[e]()})},_updateCornerClass:function(t,e){e=this._buildSimpleOptions(e,"label").classes.label,this._removeClass(t,null,"ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all"),this._addClass(t,null,e)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){return(t=this._buildSimpleOptions(t,"ui-spinner")).classes["ui-spinner-up"]="",t.classes["ui-spinner-down"]="",t},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:e&&"auto",classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(e,i){var s={};return t.each(e,function(t){var n=i.options.classes[t]||"";n=String.prototype.trim.call(n.replace(Z,""));s[t]=(n+" "+e[t]).replace(/\s+/g," ")}),s},_setOption:function(t,e){"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"===t?this._callChildMethod(e?"disable":"enable"):this.refresh()},refresh:function(){var e,i=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),e=this.childWidgets,(e=this.options.onlyVisible?e.filter(":visible"):e).length&&(t.each(["first","last"],function(t,s){var n,o=e[s]().data("ui-controlgroup-data");o&&i["_"+o.widgetName+"Options"]?((n=i["_"+o.widgetName+"Options"](1===e.length?"only":s)).classes=i._resolveClassesValues(n.classes,o),o.element[o.widgetName](n)):i._updateCornerClass(e[s](),s)}),this._callChildMethod("refresh"))}}),t.widget("ui.checkboxradio",[t.ui.formResetMixin,{version:"1.14.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var e,i=this._super()||{};return this._readType(),e=this.element.labels(),this.label=t(e[e.length-1]),this.label.length||t.error("No label found for checkboxradio widget"),this.originalLabel="",(e=this.label.contents().not(this.element[0])).length&&(this.originalLabel+=e.clone().wrapAll("<div></div>").parent().html()),this.originalLabel&&(i.label=this.originalLabel),null!=(e=this.element[0].disabled)&&(i.disabled=e),i},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var e=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===e&&/radio|checkbox/.test(this.type)||t.error("Can't create checkboxradio on element.nodeName="+e+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var e=this.element[0].name,i="input[name='"+CSS.escape(e)+"']";return e?(this.form.length?t(this.form[0].elements).filter(i):t(i).filter(function(){return 0===t(t(this).prop("form")).length})).not(this.element):t([])},_toggleClasses:function(){var e=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",e),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",e)._toggleClass(this.icon,null,"ui-icon-blank",!e),"radio"===this.type&&this._getRadioGroup().each(function(){var e=t(this).checkboxradio("instance");e&&e._removeClass(e.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){"label"===t&&!e||(this._super(t,e),"disabled"===t?(this._toggleClass(this.label,null,"ui-state-disabled",e),this.element[0].disabled=e):this.refresh())},_updateIcon:function(e){var i="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=t("<span>"),this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(i+=e?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,e?"ui-icon-blank":"ui-icon-check")):i+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",i),e||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),(t=this.iconSpace?t.not(this.iconSpace[0]):t).remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]),t.ui.checkboxradio,t.widget("ui.button",{version:"1.14.1",defaultElement:"<button>",options:{classes:{"ui-button":"ui-corner-all"},disabled:null,icon:null,iconPosition:"beginning",label:null,showLabel:!0},_getCreateOptions:function(){var t,e=this._super()||{};return this.isInput=this.element.is("input"),null!=(t=this.element[0].disabled)&&(e.disabled=t),this.originalLabel=this.isInput?this.element.val():this.element.html(),this.originalLabel&&(e.label=this.originalLabel),e},_create:function(){!this.option.showLabel&!this.options.icon&&(this.options.showLabel=!0),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled||!1),this.hasTitle=!!this.element.attr("title"),this.options.label&&this.options.label!==this.originalLabel&&(this.isInput?this.element.val(this.options.label):this.element.html(this.options.label)),this._addClass("ui-button","ui-widget"),this._setOption("disabled",this.options.disabled),this._enhance(),this.element.is("a")&&this._on({keyup:function(e){e.keyCode===t.ui.keyCode.SPACE&&(e.preventDefault(),this.element[0].click?this.element[0].click():this.element.trigger("click"))}})},_enhance:function(){this.element.is("button")||this.element.attr("role","button"),this.options.icon&&(this._updateIcon("icon",this.options.icon),this._updateTooltip())},_updateTooltip:function(){this.title=this.element.attr("title"),this.options.showLabel||this.title||this.element.attr("title",this.options.label)},_updateIcon:function(e,i){var s=(e="iconPosition"!==e)?this.options.iconPosition:i,n="top"===s||"bottom"===s;this.icon?e&&this._removeClass(this.icon,null,this.options.icon):(this.icon=t("<span>"),this._addClass(this.icon,"ui-button-icon","ui-icon"),this.options.showLabel||this._addClass("ui-button-icon-only")),e&&this._addClass(this.icon,null,i),this._attachIcon(s),n?(this._addClass(this.icon,null,"ui-widget-icon-block"),this.iconSpace&&this.iconSpace.remove()):(this.iconSpace||(this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-button-icon-space")),this._removeClass(this.icon,null,"ui-wiget-icon-block"),this._attachIconSpace(s))},_destroy:function(){this.element.removeAttr("role"),this.icon&&this.icon.remove(),this.iconSpace&&this.iconSpace.remove(),this.hasTitle||this.element.removeAttr("title")},_attachIconSpace:function(t){this.icon[/^(?:end|bottom)/.test(t)?"before":"after"](this.iconSpace)},_attachIcon:function(t){this.element[/^(?:end|bottom)/.test(t)?"append":"prepend"](this.icon)},_setOptions:function(t){var e=(void 0===t.showLabel?this.options:t).showLabel,i=(void 0===t.icon?this.options:t).icon;e||i||(t.showLabel=!0),this._super(t)},_setOption:function(t,e){"icon"===t&&(e?this._updateIcon(t,e):this.icon&&(this.icon.remove(),this.iconSpace)&&this.iconSpace.remove()),"iconPosition"===t&&this._updateIcon(t,e),"showLabel"===t&&(this._toggleClass("ui-button-icon-only",null,!e),this._updateTooltip()),"label"===t&&(this.isInput?this.element.val(e):(this.element.html(e),this.icon&&(this._attachIcon(this.options.iconPosition),this._attachIconSpace(this.options.iconPosition)))),this._super(t,e),"disabled"===t&&(this._toggleClass(null,"ui-state-disabled",e),this.element[0].disabled=e)&&this.element.trigger("blur")},refresh:function(){var t=this.element.is("input, button")?this.element[0].disabled:this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOptions({disabled:t}),this._updateTooltip()}}),!0===t.uiBackCompat&&(t.widget("ui.button",t.ui.button,{options:{text:!0,icons:{primary:null,secondary:null}},_create:function(){this.options.showLabel&&!this.options.text&&(this.options.showLabel=this.options.text),!this.options.showLabel&&this.options.text&&(this.options.text=this.options.showLabel),this.options.icon||!this.options.icons.primary&&!this.options.icons.secondary?this.options.icon&&(this.options.icons.primary=this.options.icon):this.options.icons.primary?this.options.icon=this.options.icons.primary:(this.options.icon=this.options.icons.secondary,this.options.iconPosition="end"),this._super()},_setOption:function(t,e){"text"===t?this._super("showLabel",e):("showLabel"===t&&(this.options.text=e),"icon"===t&&(this.options.icons.primary=e),"icons"===t&&(e.primary?(this._super("icon",e.primary),this._super("iconPosition","beginning")):e.secondary&&(this._super("icon",e.secondary),this._super("iconPosition","end"))),this._superApply(arguments))}}),t.fn.button=(G=t.fn.button,function(e){var i="string"==typeof e,s=Array.prototype.slice.call(arguments,1),n=this;return i?this.length||"instance"!==e?this.each(function(){var i,o=t(this).attr("type");o=t.data(this,"ui-"+("checkbox"!==o&&"radio"!==o?"button":"checkboxradio"));return"instance"===e?(n=o,!1):o?"function"!=typeof o[e]||"_"===e.charAt(0)?t.error("no such method '"+e+"' for button widget instance"):(i=o[e].apply(o,s))!==o&&void 0!==i?(n=i&&i.jquery?n.pushStack(i.get()):i,!1):void 0:t.error("cannot call methods on button prior to initialization; attempted to call method '"+e+"'")}):n=void 0:(s.length&&(e=t.widget.extend.apply(null,[e].concat(s))),this.each(function(){var i="checkbox"!==(i=t(this).attr("type"))&&"radio"!==i?"button":"checkboxradio",s=t.data(this,"ui-"+i);s?(s.option(e||{}),s._init&&s._init()):"button"==i?G.call(t(this),e):t(this).checkboxradio(t.extend({icon:!1},e))})),n}),t.fn.buttonset=function(){return t.ui.controlgroup||t.error("Controlgroup widget missing"),"option"===arguments[0]&&"items"===arguments[1]&&arguments[2]?this.controlgroup.apply(this,[arguments[0],"items.button",arguments[2]]):"option"===arguments[0]&&"items"===arguments[1]?this.controlgroup.apply(this,[arguments[0],"items.button"]):("object"==typeof arguments[0]&&arguments[0].items&&(arguments[0].items={button:arguments[0].items}),this.controlgroup.apply(this,arguments))}),t.ui.button,t.extend(t.ui,{datepicker:{version:"1.14.1"}}),t.extend(tt.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return st(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n=e.nodeName.toLowerCase(),o="div"===n||"span"===n;e.id||(this.uuid+=1,e.id="dp"+this.uuid),(s=this._newInst(t(e),o)).settings=t.extend({},i||{}),"input"===n?this._connectDatepicker(e,s):o&&this._inlineDatepicker(e,s)},_newInst:function(e,i){return{id:e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1"),input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?et(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).on("keydown",this._doKeyDown).on("keypress",this._doKeyPress).on("keyup",this._doKeyUp),this._autoSize(i),t.data(e,"datepicker",i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n=this._get(i,"appendText"),o=this._get(i,"isRTL");i.append&&i.append.remove(),n&&(i.append=t("<span>").addClass(this._appendClass).text(n),e[o?"before":"after"](i.append)),e.off("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),"focus"!==(n=this._get(i,"showOn"))&&"both"!==n||e.on("focus",this._showDatepicker),"button"!==n&&"both"!==n||(n=this._get(i,"buttonText"),s=this._get(i,"buttonImage"),this._get(i,"buttonImageOnly")?i.trigger=t("<img>").addClass(this._triggerClass).attr({src:s,alt:n,title:n}):(i.trigger=t("<button type='button'>").addClass(this._triggerClass),s?i.trigger.html(t("<img>").attr({src:s,alt:n,title:n})):i.trigger.text(n)),e[o?"before":"after"](i.trigger),i.trigger.on("click",function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():(t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]&&t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])),!1}))},_autoSize:function(t){var e,i,s,n,o,a;this._get(t,"autoSize")&&!t.inline&&(o=new Date(2009,11,20),(a=this._get(t,"dateFormat")).match(/[DM]/)&&(o.setMonth((e=function(t){for(n=s=i=0;n<t.length;n++)t[n].length>i&&(i=t[n].length,s=n);return s})(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length))},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,n,o){var a,r=this._dialogInst;return r||(this.uuid+=1,a="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+a+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),(r=this._dialogInst=this._newInst(this._dialogInput,!1)).settings={},t.data(this._dialogInput[0],"datepicker",r)),st(r.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(r,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(a=document.documentElement.clientWidth,n=document.documentElement.clientHeight,i=document.documentElement.scrollLeft||document.body.scrollLeft,o=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[a/2-100+i,n/2-150+o]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),r.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",r),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):"div"!==i&&"span"!==i||s.removeClass(this.markerClassName).empty(),t.datepicker._hideDatepicker(),Q===n)&&(Q=null,this._curInst=null)},_enableDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&("input"===(i=e.nodeName.toLowerCase())?(e.disabled=!1,n.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):"div"!==i&&"span"!==i||((n=s.children("."+this._inlineClass)).children().removeClass("ui-state-disabled"),n.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&("input"===(i=e.nodeName.toLowerCase())?(e.disabled=!0,n.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):"div"!==i&&"span"!==i||((n=s.children("."+this._inlineClass)).children().addClass("ui-state-disabled"),n.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(t)for(var e=0;e<this._disabledInputs.length;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,"datepicker")}catch(e){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,i,s){var n,o,a=this._getInst(e);if(2===arguments.length&&"string"==typeof i)return"defaults"===i?t.extend({},t.datepicker._defaults):a?"all"===i?t.extend({},a.settings):this._get(a,i):null;n=i||{},"string"==typeof i&&((n={})[i]=s),a&&(this._curInst===a&&this._hideDatepicker(),i=this._getDateDatepicker(e,!0),s=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max"),st(a.settings,n),null!==s&&void 0!==n.dateFormat&&void 0===n.minDate&&(a.settings.minDate=this._formatDate(a,s)),null!==o&&void 0!==n.dateFormat&&void 0===n.maxDate&&(a.settings.maxDate=this._formatDate(a,o)),"disabled"in n&&(n.disabled?this._disableDatepicker(e):this._enableDatepicker(e)),this._attachments(t(e),a),this._autoSize(a),this._setDate(a,i),this._updateAlternate(a),this._updateDatepicker(a))},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){(t=this._getInst(t))&&this._updateDatepicker(t)},_setDateDatepicker:function(t,e){(t=this._getInst(t))&&(this._setDate(t,e),this._updateDatepicker(t),this._updateAlternate(t))},_getDateDatepicker:function(t,e){return(t=this._getInst(t))&&!t.inline&&this._setDateFromField(t,e),t?this._getDate(t):null},_doKeyDown:function(e){var i,s,n=t.datepicker._getInst(e.target),o=!0,a=n.dpDiv.is(".ui-datepicker-rtl");if(n._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),o=!1;break;case 13:return(s=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",n.dpDiv))[0]&&t.datepicker._selectDay(e.target,n.selectedMonth,n.selectedYear,s[0]),(s=t.datepicker._get(n,"onSelect"))?(i=t.datepicker._formatDate(n),s.apply(n.input?n.input[0]:null,[i,n])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(n,"stepBigMonths"):-t.datepicker._get(n,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(n,"stepBigMonths"):+t.datepicker._get(n,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),o=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),o=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,a?1:-1,"D"),o=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(n,"stepBigMonths"):-t.datepicker._get(n,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),o=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,a?-1:1,"D"),o=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(n,"stepBigMonths"):+t.datepicker._get(n,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),o=e.ctrlKey||e.metaKey;break;default:o=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):o=!1;o&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var i,s=t.datepicker._getInst(e.target);if(t.datepicker._get(s,"constrainInput"))return s=t.datepicker._possibleChars(t.datepicker._get(s,"dateFormat")),i=String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),e.ctrlKey||e.metaKey||i<" "||!s||-1<s.indexOf(i)},_doKeyUp:function(e){if((e=t.datepicker._getInst(e.target)).input.val()!==e.lastVal)try{t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),e.input?e.input.val():null,t.datepicker._getFormatConfig(e))&&(t.datepicker._setDateFromField(e),t.datepicker._updateAlternate(e),t.datepicker._updateDatepicker(e))}catch(e){}return!0},_showDatepicker:function(e){var i,s,n,o;"input"!==(e=e.target||e).nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),t.datepicker._isDisabledDatepicker(e)||t.datepicker._lastInput===e||(o=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==o&&(t.datepicker._curInst.dpDiv.stop(!0,!0),o)&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0]),!1===(s=(s=t.datepicker._get(o,"beforeShow"))?s.apply(e,[e,o]):{}))||(st(o.settings,s),o.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(o),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),i=!1,t(e).parents().each(function(){return!(i|="fixed"===t(this).css("position"))}),s={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,o.dpDiv.empty(),o.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(o),s=t.datepicker._checkOffset(o,s,i),o.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":i?"fixed":"absolute",display:"none",left:s.left+"px",top:s.top+"px"}),o.inline)||(s=t.datepicker._get(o,"showAnim"),n=t.datepicker._get(o,"duration"),o.dpDiv.css("z-index",(t=>{for(var e;t.length&&t[0]!==document;){if(("absolute"===(e=t.css("position"))||"relative"===e||"fixed"===e)&&(e=parseInt(t.css("zIndex"),10),!isNaN(e))&&0!==e)return e;t=t.parent()}return 0})(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[s]?o.dpDiv.show(s,t.datepicker._get(o,"showOptions"),n):o.dpDiv[s||"show"](s?n:null),t.datepicker._shouldFocusInput(o)&&o.input.trigger("focus"),t.datepicker._curInst=o)},_updateDatepicker:function(e){this.maxRows=4,(Q=e).dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var i,s=this._getNumberOfMonths(e),n=s[1],o=e.dpDiv.find("."+this._dayOverClass+" a"),a=t.datepicker._get(e,"onUpdateDatepicker");0<o.length&&it.apply(o.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),1<n&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",17*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year").first().replaceWith(e.yearshtml),i=e.yearshtml=null},0)),a&&a.apply(e.input?e.input[0]:null,[e])},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,l=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),h=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-a:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,l<i.left+n&&n<l?Math.abs(i.left+n-l):0),i.top-=Math.min(i.top,h<i.top+o&&o<h?Math.abs(o+r):0),i},_findPos:function(e){for(var i=this._getInst(e),s=this._get(i,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.pseudos.hidden(e));)e=e[s?"previousSibling":"nextSibling"];return[(i=t(e).offset()).left,i.top]},_hideDatepicker:function(e){var i,s,n=this._curInst;!n||e&&n!==t.data(e,"datepicker")||this._datepickerShowing&&(e=this._get(n,"showAnim"),s=this._get(n,"duration"),i=function(){t.datepicker._tidyDialog(n)},t.effects&&t.effects.effect[e]?n.dpDiv.hide(e,t.datepicker._get(n,"showOptions"),s,i):n.dpDiv["slideDown"===e?"slideUp":"fadeIn"===e?"fadeOut":"hide"](e?s:null,i),e||i(),this._datepickerShowing=!1,(s=this._get(n,"onClose"))&&s.apply(n.input?n.input[0]:null,[n.input?n.input.val():"",n]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI)&&(t.unblockUI(),t("body").append(this.dpDiv)),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){var i;t.datepicker._curInst&&(e=t(e.target),i=t.datepicker._getInst(e[0]),!(e[0].id===t.datepicker._mainDivId||0!==e.parents("#"+t.datepicker._mainDivId).length||e.hasClass(t.datepicker.markerClassName)||e.closest("."+t.datepicker._triggerClass).length||!t.datepicker._datepickerShowing||t.datepicker._inDialog&&t.blockUI)||e.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==i)&&t.datepicker._hideDatepicker()},_adjustDate:function(e,i,s){e=t(e);var n=this._getInst(e[0]);this._isDisabledDatepicker(e[0])||(this._adjustInstDate(n,i,s),this._updateDatepicker(n))},_gotoToday:function(e){e=t(e);var i,s=this._getInst(e[0]);this._get(s,"gotoCurrent")&&s.currentDay?(s.selectedDay=s.currentDay,s.drawMonth=s.selectedMonth=s.currentMonth,s.drawYear=s.selectedYear=s.currentYear):(i=new Date,s.selectedDay=i.getDate(),s.drawMonth=s.selectedMonth=i.getMonth(),s.drawYear=s.selectedYear=i.getFullYear()),this._notifyChange(s),this._adjustDate(e)},_selectMonthYear:function(e,i,s){e=t(e);var n=this._getInst(e[0]);n["selected"+("M"===s?"Month":"Year")]=n["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(n),this._adjustDate(e)},_selectDay:function(e,i,s,n){var o=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0])||((o=this._getInst(o[0])).selectedDay=o.currentDay=parseInt(t("a",n).attr("data-date")),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=s,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){e=t(e),this._selectDate(e,"")},_selectDate:function(e,i){var s;e=t(e),e=this._getInst(e[0]);i=null!=i?i:this._formatDate(e),e.input&&e.input.val(i),this._updateAlternate(e),(s=this._get(e,"onSelect"))?s.apply(e.input?e.input[0]:null,[i,e]):e.input&&e.input.trigger("change"),e.inline?this._updateDatepicker(e):(this._hideDatepicker(),this._lastInput=e.input[0],"object"!=typeof e.input[0]&&e.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,s,n=this._get(e,"altField");n&&(s=this._get(e,"altFormat")||this._get(e,"dateFormat"),i=this._getDate(e),s=this.formatDate(s,i,this._getFormatConfig(e)),t(document).find(n).val(s))},noWeekends:function(t){return[0<(t=t.getDay())&&t<6,""]},iso8601Week:function(t){var e;return(t=new Date(t.getTime())).setDate(t.getDate()+4-(t.getDay()||7)),e=t.getTime(),t.setMonth(0),t.setDate(1),Math.floor(Math.round((e-t)/864e5)/7)+1},parseDate:function(e,i,s){if(null==e||null==i)throw"Invalid arguments";if(""===(i="object"==typeof i?i.toString():i+""))return null;for(var n,o,a=0,r="string"!=typeof(r=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff)?r:(new Date).getFullYear()%100+parseInt(r,10),l=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,h=(s?s.dayNames:null)||this._defaults.dayNames,c=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,u=(s?s.monthNames:null)||this._defaults.monthNames,d=-1,p=-1,f=-1,g=-1,m=!1,_=function(t){return(t=w+1<e.length&&e.charAt(w+1)===t)&&w++,t},v=function(t){var e=_(t);e="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,t=new RegExp("^\\d{"+("y"===t?e:1)+","+e+"}");if(e=i.substring(a).match(t))return a+=e[0].length,parseInt(e[0],10);throw"Missing number at position "+a},b=function(e,s,n){var o=-1;e=t.map(_(e)?n:s,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(e,function(t,e){var s=e[1];if(i.substr(a,s.length).toLowerCase()===s.toLowerCase())return o=e[0],a+=s.length,!1}),-1!==o)return o+1;throw"Unknown name at position "+a},y=function(){if(i.charAt(a)!==e.charAt(w))throw"Unexpected literal at position "+a;a++},w=0;w<e.length;w++)if(m)"'"!==e.charAt(w)||_("'")?y():m=!1;else switch(e.charAt(w)){case"d":f=v("d");break;case"D":b("D",l,h);break;case"o":g=v("o");break;case"m":p=v("m");break;case"M":p=b("M",c,u);break;case"y":d=v("y");break;case"@":d=(o=new Date(v("@"))).getFullYear(),p=o.getMonth()+1,f=o.getDate();break;case"!":d=(o=new Date((v("!")-this._ticksTo1970)/1e4)).getFullYear(),p=o.getMonth()+1,f=o.getDate();break;case"'":_("'")?y():m=!0;break;default:y()}if(a<i.length&&(s=i.substr(a),!/^\s+/.test(s)))throw"Extra/unparsed characters found in date: "+s;if(-1===d?d=(new Date).getFullYear():d<100&&(d+=(new Date).getFullYear()-(new Date).getFullYear()%100+(d<=r?0:-100)),-1<g)for(p=1,f=g;!(f<=(n=this._getDaysInMonth(d,p-1)));)p++,f-=n;if((o=this._daylightSavingAdjust(new Date(d,p-1,f))).getFullYear()!==d||o.getMonth()+1!==p||o.getDate()!==f)throw"Invalid date";return o},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*60*60*1e7,formatDate:function(t,e,i){if(!e)return"";function s(t,e,i){var s=""+e;if(c(t))for(;s.length<i;)s="0"+s;return s}function n(t,e,i,s){return(c(t)?s:i)[e]}var o,a=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,r=(i?i.dayNames:null)||this._defaults.dayNames,l=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,h=(i?i.monthNames:null)||this._defaults.monthNames,c=function(e){return(e=o+1<t.length&&t.charAt(o+1)===e)&&o++,e},u="",d=!1;if(e)for(o=0;o<t.length;o++)if(d)"'"!==t.charAt(o)||c("'")?u+=t.charAt(o):d=!1;else switch(t.charAt(o)){case"d":u+=s("d",e.getDate(),2);break;case"D":u+=n("D",e.getDay(),a,r);break;case"o":u+=s("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=s("m",e.getMonth()+1,2);break;case"M":u+=n("M",e.getMonth(),l,h);break;case"y":u+=c("y")?e.getFullYear():(e.getFullYear()%100<10?"0":"")+e.getFullYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":c("'")?u+="'":d=!0;break;default:u+=t.charAt(o)}return u},_possibleChars:function(t){for(var e="",i=!1,s=function(e){return(e=n+1<t.length&&t.charAt(n+1)===e)&&n++,e},n=0;n<t.length;n++)if(i)"'"!==t.charAt(n)||s("'")?e+=t.charAt(n):i=!1;else switch(t.charAt(n)){case"d":case"m":case"y":case"@":e+="0123456789";break;case"D":case"M":return null;case"'":s("'")?e+="'":i=!0;break;default:e+=t.charAt(n)}return e},_get:function(t,e){return(void 0!==t.settings[e]?t.settings:this._defaults)[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(t){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n,o=null==i||""===i?s:"string"==typeof i?(i=>{try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(i){}for(var s=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,n=s.getFullYear(),o=s.getMonth(),a=s.getDate(),r=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=r.exec(i);l;){switch(l[2]||"d"){case"d":case"D":a+=parseInt(l[1],10);break;case"w":case"W":a+=7*parseInt(l[1],10);break;case"m":case"M":o+=parseInt(l[1],10),a=Math.min(a,t.datepicker._getDaysInMonth(n,o));break;case"y":case"Y":n+=parseInt(l[1],10),a=Math.min(a,t.datepicker._getDaysInMonth(n,o))}l=r.exec(i)}return new Date(n,o,a)})(i):"number"==typeof i?isNaN(i)?s:(o=i,(n=new Date).setDate(n.getDate()+o),n):new Date(i.getTime());return(o=o&&"Invalid Date"===o.toString()?s:o)&&(o.setHours(0),o.setMinutes(0),o.setSeconds(0),o.setMilliseconds(0)),this._daylightSavingAdjust(o)},_daylightSavingAdjust:function(t){return t?(t.setHours(12<t.getHours()?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear;e=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=e.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=e.getMonth(),t.drawYear=t.selectedYear=t.currentYear=e.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){return!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay))},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(e){var i,s,n,o,a,r,l,h,c,u,d,p,f,g,m,_,v,b,y,w,x,k,C,D,I,T,P,M,S,H,z,O,A=new Date,E=this._daylightSavingAdjust(new Date(A.getFullYear(),A.getMonth(),A.getDate())),N=this._get(e,"isRTL"),W=(A=this._get(e,"showButtonPanel"),this._get(e,"hideIfNoPrevNext")),F=this._get(e,"navigationAsDateFormat"),L=this._getNumberOfMonths(e),R=this._get(e,"showCurrentAtPos"),Y=this._get(e,"stepMonths"),B=1!==L[0]||1!==L[1],j=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),q=this._getMinMaxDate(e,"min"),K=this._getMinMaxDate(e,"max"),U=e.drawMonth-R,V=e.drawYear;if(U<0&&(U+=12,V--),K)for(i=this._daylightSavingAdjust(new Date(K.getFullYear(),K.getMonth()-L[0]*L[1]+1,K.getDate())),i=q&&i<q?q:i;this._daylightSavingAdjust(new Date(V,U,1))>i;)--U<0&&(U=11,V--);for(e.drawMonth=U,e.drawYear=V,R=this._get(e,"prevText"),R=F?this.formatDate(R,this._daylightSavingAdjust(new Date(V,U-Y,1)),this._getFormatConfig(e)):R,s=this._canAdjustMonth(e,-1,V,U)?t("<a>").attr({class:"ui-datepicker-prev ui-corner-all","data-handler":"prev","data-event":"click",title:R}).append(t("<span>").addClass("ui-icon ui-icon-circle-triangle-"+(N?"e":"w")).text(R))[0].outerHTML:W?"":t("<a>").attr({class:"ui-datepicker-prev ui-corner-all ui-state-disabled",title:R}).append(t("<span>").addClass("ui-icon ui-icon-circle-triangle-"+(N?"e":"w")).text(R))[0].outerHTML,R=this._get(e,"nextText"),R=F?this.formatDate(R,this._daylightSavingAdjust(new Date(V,U+Y,1)),this._getFormatConfig(e)):R,n=this._canAdjustMonth(e,1,V,U)?t("<a>").attr({class:"ui-datepicker-next ui-corner-all","data-handler":"next","data-event":"click",title:R}).append(t("<span>").addClass("ui-icon ui-icon-circle-triangle-"+(N?"w":"e")).text(R))[0].outerHTML:W?"":t("<a>").attr({class:"ui-datepicker-next ui-corner-all ui-state-disabled",title:R}).append(t("<span>").attr("class","ui-icon ui-icon-circle-triangle-"+(N?"w":"e")).text(R))[0].outerHTML,Y=this._get(e,"currentText"),W=this._get(e,"gotoCurrent")&&e.currentDay?j:E,Y=F?this.formatDate(Y,W,this._getFormatConfig(e)):Y,R="",e.inline||(R=t("<button>").attr({type:"button",class:"ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all","data-handler":"hide","data-event":"click"}).text(this._get(e,"closeText"))[0].outerHTML),F="",A&&(F=t("<div class='ui-datepicker-buttonpane ui-widget-content'>").append(N?R:"").append(this._isInRange(e,W)?t("<button>").attr({type:"button",class:"ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all","data-handler":"today","data-event":"click"}).text(Y):"").append(N?"":R)[0].outerHTML),o=parseInt(this._get(e,"firstDay"),10),o=isNaN(o)?0:o,a=this._get(e,"showWeek"),r=this._get(e,"dayNames"),l=this._get(e,"dayNamesMin"),h=this._get(e,"monthNames"),c=this._get(e,"monthNamesShort"),u=this._get(e,"beforeShowDay"),d=this._get(e,"showOtherMonths"),p=this._get(e,"selectOtherMonths"),f=this._getDefaultDate(e),g="",_=0;_<L[0];_++){for(v="",this.maxRows=4,b=0;b<L[1];b++){if(y=this._daylightSavingAdjust(new Date(V,U,e.selectedDay)),w=" ui-corner-all",x="",B){if(x+="<div class='ui-datepicker-group",1<L[1])switch(b){case 0:x+=" ui-datepicker-group-first",w=" ui-corner-"+(N?"right":"left");break;case L[1]-1:x+=" ui-datepicker-group-last",w=" ui-corner-"+(N?"left":"right");break;default:x+=" ui-datepicker-group-middle",w=""}x+="'>"}for(x+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+w+"'>"+(/all|left/.test(w)&&0===_?N?n:s:"")+(/all|right/.test(w)&&0===_?N?s:n:"")+this._generateMonthYearHeader(e,U,V,q,K,0<_||0<b,h,c)+"</div><table class='ui-datepicker-calendar'><thead><tr>",k=a?"<th class='ui-datepicker-week-col'>"+this._get(e,"weekHeader")+"</th>":"",m=0;m<7;m++)k+="<th scope='col'"+(5<=(m+o+6)%7?" class='ui-datepicker-week-end'":"")+"><span title='"+r[C=(m+o)%7]+"'>"+l[C]+"</span></th>";for(x+=k+"</tr></thead><tbody>",I=this._getDaysInMonth(V,U),V===e.selectedYear&&U===e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,I)),D=(this._getFirstDayOfMonth(V,U)-o+7)%7,I=Math.ceil((D+I)/7),T=B&&this.maxRows>I?this.maxRows:I,this.maxRows=T,P=this._daylightSavingAdjust(new Date(V,U,1-D)),M=0;M<T;M++){for(x+="<tr>",S=a?"<td class='ui-datepicker-week-col'>"+this._get(e,"calculateWeek")(P)+"</td>":"",m=0;m<7;m++)H=u?u.apply(e.input?e.input[0]:null,[P]):[!0,""],O=(z=P.getMonth()!==U)&&!p||!H[0]||q&&P<q||K&&K<P,S+="<td class='"+(5<=(m+o+6)%7?" ui-datepicker-week-end":"")+(z?" ui-datepicker-other-month":"")+(P.getTime()===y.getTime()&&U===e.selectedMonth&&e._keyEvent||f.getTime()===P.getTime()&&f.getTime()===y.getTime()?" "+this._dayOverClass:"")+(O?" "+this._unselectableClass+" ui-state-disabled":"")+(z&&!d?"":" "+H[1]+(P.getTime()===j.getTime()?" "+this._currentClass:"")+(P.getTime()===E.getTime()?" ui-datepicker-today":""))+"'"+(z&&!d||!H[2]?"":" title='"+H[2].replace(/'/g,"&#39;")+"'")+(O?"":" data-handler='selectDay' data-event='click' data-month='"+P.getMonth()+"' data-year='"+P.getFullYear()+"'")+">"+(z&&!d?"&#xa0;":O?"<span class='ui-state-default'>"+P.getDate()+"</span>":"<a class='ui-state-default"+(P.getTime()===E.getTime()?" ui-state-highlight":"")+(P.getTime()===j.getTime()?" ui-state-active":"")+(z?" ui-priority-secondary":"")+"' href='#' aria-current='"+(P.getTime()===j.getTime()?"true":"false")+"' data-date='"+P.getDate()+"'>"+P.getDate()+"</a>")+"</td>",P.setDate(P.getDate()+1),P=this._daylightSavingAdjust(P);x+=S+"</tr>"}11<++U&&(U=0,V++),v+=x+="</tbody></table>"+(B?"</div>"+(0<L[0]&&b===L[1]-1?"<div class='ui-datepicker-row-break'></div>":""):"")}g+=v}return g+=F,e._keyEvent=!1,g},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var l,h,c,u,d,p,f=this._get(t,"changeMonth"),g=this._get(t,"changeYear"),m=this._get(t,"showMonthAfterYear"),_=this._get(t,"selectMonthLabel"),v=this._get(t,"selectYearLabel"),b="<div class='ui-datepicker-title'>",y="";if(o||!f)y+="<span class='ui-datepicker-month'>"+a[e]+"</span>";else{for(l=s&&s.getFullYear()===i,h=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' aria-label='"+_+"' data-handler='selectMonth' data-event='change'>",c=0;c<12;c++)(!l||c>=s.getMonth())&&(!h||c<=n.getMonth())&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+r[c]+"</option>");y+="</select>"}if(m||(b+=y+(!o&&f&&g?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",o||!g)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(a=this._get(t,"yearRange").split(":"),u=(new Date).getFullYear(),d=(_=function(t){return t=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?u+parseInt(t,10):parseInt(t,10),isNaN(t)?u:t})(a[0]),p=Math.max(d,_(a[1]||"")),d=s?Math.max(d,s.getFullYear()):d,p=n?Math.min(p,n.getFullYear()):p,t.yearshtml+="<select class='ui-datepicker-year' aria-label='"+v+"' data-handler='selectYear' data-event='change'>";d<=p;d++)t.yearshtml+="<option value='"+d+"'"+(d===i?" selected='selected'":"")+">"+d+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),m&&(b+=(!o&&f&&g?"":"&#xa0;")+y),b+"</div>"},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0);e=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),s=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,e)));t.selectedDay=s.getDate(),t.drawMonth=t.selectedMonth=s.getMonth(),t.drawYear=t.selectedYear=s.getFullYear(),"M"!==i&&"Y"!==i||this._notifyChange(t)},_restrictMinMax:function(t,e){var i=(i=this._getMinMaxDate(t,"min"))&&e<i?i:e;return(t=this._getMinMaxDate(t,"max"))&&t<i?t:i},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){return null==(t=this._get(t,"numberOfMonths"))?[1,1]:"number"==typeof t?[1,t]:t},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t);i=this._daylightSavingAdjust(new Date(i,s+(e<0?e:n[0]*n[1]),1));return e<0&&i.setDate(this._getDaysInMonth(i.getFullYear(),i.getMonth())),this._isInRange(t,i)},_isInRange:function(t,e){var i,s=this._getMinMaxDate(t,"min"),n=this._getMinMaxDate(t,"max"),o=null,a=null;return(t=this._get(t,"yearRange"))&&(t=t.split(":"),i=(new Date).getFullYear(),o=parseInt(t[0],10),a=parseInt(t[1],10),t[0].match(/[+\-].*/)&&(o+=i),t[1].match(/[+\-].*/))&&(a+=i),(!s||e.getTime()>=s.getTime())&&(!n||e.getTime()<=n.getTime())&&(!o||e.getFullYear()>=o)&&(!a||e.getFullYear()<=a)},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return{shortYearCutoff:"string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){return e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear),s=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay)),this.formatDate(this._get(t,"dateFormat"),s,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"==typeof e&&("isDisabled"===e||"getDate"===e||"widget"===e)||"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)})},t.datepicker=new tt,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.14.1";var nt,ot=!1;function at(t,e,i){return e<=t&&t<e+i}function rt(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t(document).on("mouseup",function(){ot=!1}),t.widget("ui.mouse",{version:"1.14.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){if(!0===t.data(i.target,e.widgetName+".preventClickEvent"))return t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){var i,s,n;if(!ot)return this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),s=1===(this._mouseDownEvent=e).which,n="string"==typeof(i=this).options.cancel&&t(e.target).closest(this.options.cancel).length,s&&!n&&this._mouseCapture(e)&&(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=!1!==this._mouseStart(e),!this._mouseStarted)?e.preventDefault():(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),ot=!0)),!0},_mouseMove:function(t){if(this._mouseMoved&&!t.which)if(t.originalEvent.altKey||t.originalEvent.ctrlKey||t.originalEvent.metaKey||t.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(t);return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=!1!==this._mouseStart(this._mouseDownEvent,t),this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,ot=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n<o.length;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.draggable",t.ui.mouse,{version:"1.14.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){(this.helper||this.element).is(".ui-draggable-dragging")?this.destroyOnClear=!0:(this._removeHandleClassName(),this._mouseDestroy())},_mouseCapture:function(e){var i=this.options;return!(this.helper||i.disabled||0<t(e.target).closest(".ui-resizable-handle").length||(this.handle=this._getHandle(e),!this.handle)||(this._blurActiveElement(e),this._blockFrames(!0===i.iframeFix?"iframe":i.iframeFix),0))},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t("<div>").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=this.document[0].activeElement;t(e.target).closest(i).length||t(i).trigger("blur")},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=0<this.helper.parents().filter(function(){return"fixed"===t(this).css("position")}).length,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),!1===this._trigger("start",e)?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){if(i=this._uiHash(),!1===this._trigger("drag",e,i))return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=i.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||!0===this.options.revert||"function"==typeof this.options.revert&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){!1!==i._trigger("stop",e)&&i._clear()}):!1!==this._trigger("stop",e)&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return!this.options.handle||!!t(e.target).closest(this.element.find(this.options.handle)).length},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,s="function"==typeof i.helper;return(e=s?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element).parents("body").length||e.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&e[0]===this.element[0]&&this._setPositionRelative(),e[0]===this.element[0]||/(fixed|absolute)/.test(e.css("position"))||e.css("position","absolute"),e},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),"left"in(t=Array.isArray(t)?{left:+t[0],top:+t[1]||0}:t)&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),{top:(e=this._isRootNode(this.offsetParent[0])?{top:0,left:0}:e).top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){var t,e;return"relative"!==this.cssPosition?{top:0,left:0}:(t=this.element.position(),e=this._isRootNode(this.scrollParent[0]),{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())})},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i=this.options,s=this.document[0];this.relativeContainer=null,i.containment?"window"===i.containment?this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||s.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]:"document"===i.containment?this.containment=[0,0,t(s).width()-this.helperProportions.width-this.margins.left,(t(s).height()||s.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]:i.containment.constructor===Array?this.containment=i.containment:("parent"===i.containment&&(i.containment=this.helper[0].parentNode),(i=(s=t(i.containment))[0])&&(e=/(scroll|auto)/.test(s.css("overflow")),this.containment=[(parseInt(s.css("borderLeftWidth"),10)||0)+(parseInt(s.css("paddingLeft"),10)||0),(parseInt(s.css("borderTopWidth"),10)||0)+(parseInt(s.css("paddingTop"),10)||0),(e?Math.max(i.scrollWidth,i.offsetWidth):i.offsetWidth)-(parseInt(s.css("borderRightWidth"),10)||0)-(parseInt(s.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(i.scrollHeight,i.offsetHeight):i.offsetHeight)-(parseInt(s.css("borderBottomWidth"),10)||0)-(parseInt(s.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=s)):this.containment=null},_convertPositionTo:function(t,e){e=e||this.position;t="absolute"===t?1:-1;var i=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*t+this.offset.parent.top*t-("fixed"===this.cssPosition?-this.offset.scroll.top:i?0:this.offset.scroll.top)*t,left:e.left+this.offset.relative.left*t+this.offset.parent.left*t-("fixed"===this.cssPosition?-this.offset.scroll.left:i?0:this.offset.scroll.left)*t}},_generatePosition:function(t,e){var i,s=this.options,n=this._isRootNode(this.scrollParent[0]),o=t.pageX,a=t.pageY;return n&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),{top:(a=e&&(this.containment&&(i=this.relativeContainer?(e=this.relativeContainer.offset(),[this.containment[0]+e.left,this.containment[1]+e.top,this.containment[2]+e.left,this.containment[3]+e.top]):this.containment,t.pageX-this.offset.click.left<i[0]&&(o=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(a=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(o=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3])&&(a=i[3]+this.offset.click.top),s.grid&&(e=s.grid[1]?this.originalPageY+Math.round((a-this.originalPageY)/s.grid[1])*s.grid[1]:this.originalPageY,a=!i||e-this.offset.click.top>=i[1]||e-this.offset.click.top>i[3]?e:e-this.offset.click.top>=i[1]?e-s.grid[1]:e+s.grid[1],t=s.grid[0]?this.originalPageX+Math.round((o-this.originalPageX)/s.grid[0])*s.grid[0]:this.originalPageX,o=!i||t-this.offset.click.left>=i[0]||t-this.offset.click.left>i[2]?t:t-this.offset.click.left>=i[0]?t-s.grid[0]:t+s.grid[0]),"y"===s.axis&&(o=this.originalPageX),"x"===s.axis)?this.originalPageY:a)-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:n?0:this.offset.scroll.top),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:n?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,s){var n=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each(function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,n))})},stop:function(e,i,s){var n=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,function(){var t=this;t.isOver?(t.isOver=0,s.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,n))})},drag:function(e,i,s){t.each(s.sortables,function(){var n=!1,o=this;o.positionAbs=s.positionAbs,o.helperProportions=s.helperProportions,o.offset.click=s.offset.click,o._intersectsWith(o.containerCache)&&(n=!0,t.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,n=(this===o||!this._intersectsWith(this.containerCache)||!t.contains(o.element[0],this.element[0]))&&n})),n?(o.isOver||(o.isOver=1,s._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data("ui-sortable-item",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=s.offset.click.top,o.offset.click.left=s.offset.click.left,o.offset.parent.left-=s.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=s.offset.parent.top-o.offset.parent.top,s._trigger("toSortable",e),s.dropped=o.element,t.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,o.fromOutside=s),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger("out",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger("fromSortable",e),s.dropped=!1,t.each(s.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,s){var n=t("body");s=s.options;n.css("cursor")&&(s._cursor=n.css("cursor")),n.css("cursor",s.cursor)},stop:function(e,i,s){(s=s.options)._cursor&&t("body").css("cursor",s._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,s){i=t(i.helper),s=s.options,i.css("opacity")&&(s._opacity=i.css("opacity")),i.css("opacity",s.opacity)},stop:function(e,i,s){(s=s.options)._opacity&&t(i.helper).css("opacity",s._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,s){var n=s.options,o=!1,a=s.scrollParentNotHidden[0],r=s.document[0];a!==r&&"HTML"!==a.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+a.offsetHeight-e.pageY<n.scrollSensitivity?a.scrollTop=o=a.scrollTop+n.scrollSpeed:e.pageY-s.overflowOffset.top<n.scrollSensitivity&&(a.scrollTop=o=a.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+a.offsetWidth-e.pageX<n.scrollSensitivity?a.scrollLeft=o=a.scrollLeft+n.scrollSpeed:e.pageX-s.overflowOffset.left<n.scrollSensitivity&&(a.scrollLeft=o=a.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(e.pageY-t(r).scrollTop()<n.scrollSensitivity?o=t(r).scrollTop(t(r).scrollTop()-n.scrollSpeed):t(window).height()-(e.pageY-t(r).scrollTop())<n.scrollSensitivity&&(o=t(r).scrollTop(t(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(e.pageX-t(r).scrollLeft()<n.scrollSensitivity?o=t(r).scrollLeft(t(r).scrollLeft()-n.scrollSpeed):t(window).width()-(e.pageX-t(r).scrollLeft())<n.scrollSensitivity&&(o=t(r).scrollLeft(t(r).scrollLeft()+n.scrollSpeed)))),!1!==o&&t.ui.ddmanager&&!n.dropBehaviour&&t.ui.ddmanager.prepareOffsets(s,e)}}),t.ui.plugin.add("draggable","snap",{start:function(e,i,s){var n=s.options;s.snapElements=[],t(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var e=t(this),i=e.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:e.outerWidth(),height:e.outerHeight(),top:i.top,left:i.left})})},drag:function(e,i,s){for(var n,o,a,r,l,h,c,u,d,p=s.options,f=p.snapTolerance,g=i.offset.left,m=g+s.helperProportions.width,_=i.offset.top,v=_+s.helperProportions.height,b=s.snapElements.length-1;0<=b;b--)h=(l=s.snapElements[b].left-s.margins.left)+s.snapElements[b].width,u=(c=s.snapElements[b].top-s.margins.top)+s.snapElements[b].height,m<l-f||h+f<g||v<c-f||u+f<_||!t.contains(s.snapElements[b].item.ownerDocument,s.snapElements[b].item)?(s.snapElements[b].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[b].item})),s.snapElements[b].snapping=!1):("inner"!==p.snapMode&&(n=Math.abs(c-v)<=f,o=Math.abs(u-_)<=f,a=Math.abs(l-m)<=f,r=Math.abs(h-g)<=f,n&&(i.position.top=s._convertPositionTo("relative",{top:c-s.helperProportions.height,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left),r)&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),d=n||o||a||r,"outer"!==p.snapMode&&(n=Math.abs(c-_)<=f,o=Math.abs(u-v)<=f,a=Math.abs(l-g)<=f,r=Math.abs(h-m)<=f,n&&(i.position.top=s._convertPositionTo("relative",{top:c,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left),r)&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),!s.snapElements[b].snapping&&(n||o||a||r||d)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[b].item})),s.snapElements[b].snapping=n||o||a||r||d)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,s){var n;s=s.options,s=t.makeArray(t(s.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});s.length&&(n=parseInt(t(s[0]).css("zIndex"),10)||0,t(s).each(function(e){t(this).css("zIndex",n+e)}),this.css("zIndex",n+s.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,s){i=t(i.helper),s=s.options,i.css("zIndex")&&(s._zIndex=i.css("zIndex")),i.css("zIndex",s.zIndex)},stop:function(e,i,s){(s=s.options)._zIndex&&t(i.helper).css("zIndex",s._zIndex)}}),t.ui.draggable,t.widget("ui.resizable",t.ui.mouse,{version:"1.14.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){var s=!1,n=t(e).css("overflow");if("hidden"===n)return!1;if("scroll"===n)return!0;if(0<e[n=i&&"left"===i?"scrollLeft":"scrollTop"])return!0;try{e[n]=1,s=0<e[n],e[n]=0}catch(e){}return s},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("<div class='ui-wrapper'></div>").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){function e(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable")}var i;return this._mouseDestroy(),this._addedHandles.remove(),this.elementIsWrapper&&(e(this.element),i=this.element,this.originalElement.css({position:i.css("position"),width:i.outerWidth(),height:i.outerHeight(),top:i.css("top"),left:i.css("left")}).insertAfter(i),i.remove()),this.originalElement.css("resize",this.originalResizeStyle),e(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this._addedHandles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;i<s.length;i++)n="ui-resizable-"+(e=String.prototype.trim.call(s[i])),o=t("<div>"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.children(this.handles[e]).length||(this.element.append(o),this._addedHandles=this._addedHandles.add(o));this._renderAxis=function(e){var i,s,n;for(i in e=e||this.element,this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(n=t(this.handles[i],this.element),n=/sw|ne|nw|se|n|s/.test(i)?n.outerHeight():n.outerWidth(),s=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(s,n),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)(s=t(this.handles[i])[0])!==e.target&&!t.contains(s,e.target)||(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this._helper||(n=this._calculateAdjustedElementDimensions(a)),this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width,height:n.height},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:n.width,height:n.height},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i=this.originalMousePosition,s=this.axis,n=e.pageX-i.left||0;i=e.pageY-i.top||0,s=this._change[s];return this._updatePrevProperties(),s&&(s=s.apply(this,[e,n,i]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(s=this._updateRatio(s,e)),s=this._respectSize(s,e),this._updateCache(s),this._propagate("resize",e),n=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(n)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges())),!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o=this.options,a=this;return this._helper&&(s=(i=(s=this._proportionallyResizeElements).length&&/textarea/i.test(s[0].nodeName))&&this._hasScroll(s[0],"left")?0:a.sizeDiff.height,i=i?0:a.sizeDiff.width,i={width:a.helper.width()-i,height:a.helper.height()-s},s=parseFloat(a.element.css("left"))+(a.position.left-a.originalPosition.left)||null,n=parseFloat(a.element.css("top"))+(a.position.top-a.originalPosition.top)||null,o.animate||this.element.css(t.extend(i,{top:n,left:s})),a.helper.height(a.size.height),a.helper.width(a.size.width),this._helper)&&!o.animate&&this._proportionallyResize(),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.helper.css(t),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px",this.helper.width(t.width)),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px",this.helper.height(t.height)),t},_updateVirtualBoundaries:function(t){var e,i,s,n=this.options;n={minWidth:this._isNumber(n.minWidth)?n.minWidth:0,maxWidth:this._isNumber(n.maxWidth)?n.maxWidth:1/0,minHeight:this._isNumber(n.minHeight)?n.minHeight:0,maxHeight:this._isNumber(n.maxHeight)?n.maxHeight:1/0};(this._aspectRatio||t)&&(t=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,e=n.maxHeight*this.aspectRatio,s=n.maxWidth/this.aspectRatio,n.minWidth<t&&(n.minWidth=t),n.minHeight<i&&(n.minHeight=i),e<n.maxWidth&&(n.maxWidth=e),s<n.maxHeight)&&(n.maxHeight=s),this._vBoundaries=n},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,l=this.originalPosition.top+this.originalSize.height,h=/sw|nw|w/.test(i);i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&h&&(t.left=r-e.minWidth),s&&h&&(t.left=r-e.maxWidth),a&&i&&(t.top=l-e.minHeight),n&&i&&(t.top=l-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_calculateAdjustedElementDimensions:function(t){var e,i,s=t.get(0);return"content-box"!==t.css("box-sizing")||!this._hasScroll(s)&&!this._hasScroll(s,"left")?{height:parseFloat(t.css("height")),width:parseFloat(t.css("width"))}:(e=parseFloat(s.style.width),s=parseFloat(s.style.height),i=this._getPaddingPlusBorderDimensions(t),e=isNaN(e)?this._getElementTheoreticalSize(t,i,"width"):e,{height:isNaN(s)?this._getElementTheoreticalSize(t,i,"height"):s,width:e})},_getElementTheoreticalSize:function(t,e,i){return Math.max(0,Math.ceil(t.get(0)["offset"+i[0].toUpperCase()+i.slice(1)]-e[i]-.5))||0},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e<this._proportionallyResizeElements.length;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("<div></div>").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=(a=n.length&&/textarea/i.test(n[0].nodeName))&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,a=a?0:i.sizeDiff.width,r=(a={width:i.size.width-a,height:i.size.height-o},o=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null);i.element.animate(t.extend(a,r&&o?{top:r,left:o}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o=t(this).resizable("instance"),a=o.options,r=o.element;(r=(a=a.containment)instanceof t?a.get(0):/parent/.test(a)?r.parent().get(0):a)&&(o.containerElement=t(r),/document/.test(a)||a===document?(o.containerOffset={left:0,top:0},o.containerPosition={left:0,top:0},o.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(r),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=o._num(e.css("padding"+s))}),o.containerOffset=e.offset(),o.containerPosition=e.position(),o.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},a=o.containerOffset,n=o.containerSize.height,s=o.containerSize.width,s=o._hasScroll(r,"left")?r.scrollWidth:s,n=o._hasScroll(r)?r.scrollHeight:n,o.parentData={element:r,left:a.left,top:a.top,width:s,height:n}))},resize:function(e){var i=t(this).resizable("instance"),s=i.options,n=i.containerOffset,o=i.position,a=(e=i._aspectRatio||e.shiftKey,{top:0,left:0}),r=i.containerElement,l=!0;r[0]!==document&&/static/.test(r.css("position"))&&(a=n),o.left<(i._helper?n.left:0)&&(i.size.width=i.size.width+(i._helper?i.position.left-n.left:i.position.left-a.left),e&&(i.size.height=i.size.width/i.aspectRatio,l=!1),i.position.left=s.helper?n.left:0),o.top<(i._helper?n.top:0)&&(i.size.height=i.size.height+(i._helper?i.position.top-n.top:i.position.top),e&&(i.size.width=i.size.height*i.aspectRatio,l=!1),i.position.top=i._helper?n.top:0),r=i.containerElement.get(0)===i.element.parent().get(0),s=/relative|absolute/.test(i.containerElement.css("position")),r&&s?(i.offset.left=i.parentData.left+i.position.left,i.offset.top=i.parentData.top+i.position.top):(i.offset.left=i.element.offset().left,i.offset.top=i.element.offset().top),o=Math.abs(i.sizeDiff.width+(i._helper?i.offset.left-a.left:i.offset.left-n.left)),r=Math.abs(i.sizeDiff.height+(i._helper?i.offset.top-a.top:i.offset.top-n.top)),o+i.size.width>=i.parentData.width&&(i.size.width=i.parentData.width-o,e)&&(i.size.height=i.size.width/i.aspectRatio,l=!1),r+i.size.height>=i.parentData.height&&(i.size.height=i.parentData.height-r,e)&&(i.size.width=i.size.height*i.aspectRatio,l=!1),l||(i.position.left=i.prevPosition.left,i.position.top=i.prevPosition.top,i.size.width=i.prevSize.width,i.size.height=i.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=(l=t(e.helper)).offset(),r=l.outerWidth()-e.sizeDiff.width,l=l.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:a.left-n.left-s.left,width:r,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:a.left-n.left-s.left,width:r,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var i=t(this),s=e._calculateAdjustedElementDimensions(i);i.data("ui-resizable-alsoresize",{width:s.width,height:s.height,left:parseFloat(i.css("left")),top:parseFloat(i.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&0<=i&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),!0===t.uiBackCompat&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,l="number"==typeof s.grid?[s.grid,s.grid]:s.grid,h=l[0]||1,c=l[1]||1,u=Math.round((n.width-o.width)/h)*h,d=(n=Math.round((n.height-o.height)/c)*c,o.width+u),p=o.height+n,f=s.maxWidth&&s.maxWidth<d,g=s.maxHeight&&s.maxHeight<p,m=s.minWidth&&s.minWidth>d,_=s.minHeight&&s.minHeight>p;s.grid=l,m&&(d+=h),_&&(p+=c),f&&(d-=h),g&&(p-=c),/^(se|s|e)$/.test(r)?(i.size.width=d,i.size.height=p):/^(ne)$/.test(r)?(i.size.width=d,i.size.height=p,i.position.top=a.top-n):/^(sw)$/.test(r)?(i.size.width=d,i.size.height=p,i.position.left=a.left-u):((p-c<=0||d-h<=0)&&(e=i._getPaddingPlusBorderDimensions(this)),0<p-c?(i.size.height=p,i.position.top=a.top-n):(p=c-e.height,i.size.height=p,i.position.top=a.top+o.height-p),0<d-h?(i.size.width=d,i.position.left=a.left-u):(d=h-e.width,i.size.width=d,i.position.left=a.left+o.width-d))}}),t.ui.resizable,t.widget("ui.dialog",{version:"1.14.1",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;i<0&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,uiDialogTitleHeadingLevel:0,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),(t=e.parent.children().eq(e.index)).length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&!1!==this._trigger("beforeClose",e)&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||t(this.document[0].activeElement).trigger("blur"),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+t(this).css("z-index")}).get();return(n=Math.max.apply(null,n))>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",n+1),s=!0),s&&!i&&this._trigger("focus",e),s},open:function(){var e=this;this._isOpen?this._moveToTop()&&this._focusTabbable():(this._isOpen=!0,this.opener=t(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"))},_focusTabbable:function(){var t=this._focusedElement;(t=(t=(t=(t=(t=t||this.element.find("[autofocus]")).length?t:this.element.find(":tabbable")).length?t:this.uiDialogButtonPane.find(":tabbable")).length?t:this.uiDialogTitlebarClose.filter(":tabbable")).length?t:this.uiDialog).eq(0).trigger("focus")},_restoreTabbableFocus:function(){var e=this.document[0].activeElement;this.uiDialog[0]===e||t.contains(this.uiDialog[0],e)||this._focusTabbable()},_keepFocus:function(t){t.preventDefault(),this._restoreTabbableFocus()},_createWrapper:function(){this.uiDialog=t("<div>").hide().attr({tabIndex:-1,role:"dialog","aria-modal":this.options.modal?"true":null}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(e){var i,s,n;this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE?(e.preventDefault(),this.close(e)):e.keyCode!==t.ui.keyCode.TAB||e.isDefaultPrevented()||(i=this.uiDialog.find(":tabbable"),s=i.first(),n=i.last(),e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(this._delay(function(){n.trigger("focus")}),e.preventDefault()):(this._delay(function(){s.trigger("focus")}),e.preventDefault()))},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){this.uiDialogTitlebar=t("<div>"),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=t("<button type='button'></button>").button({label:t("<a>").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}});var e=Number.isInteger(this.options.uiDialogTitleHeadingLevel)&&0<this.options.uiDialogTitleHeadingLevel&&this.options.uiDialogTitleHeadingLevel<=6?"h"+this.options.uiDialogTitleHeadingLevel:"span";e=t("<"+e+">").uniqueId().prependTo(this.uiDialogTitlebar);this._addClass(e,"ui-dialog-title"),this._title(e),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html("&#160;")},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>"),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||Array.isArray(i)&&!i.length?this._removeClass(this.uiDialog,"ui-dialog-buttons"):(t.each(i,function(i,s){var n;s=t.extend({type:"button"},s="function"==typeof s?{click:s,text:i}:s),n=s.click,i={icon:s.icon,iconPosition:s.iconPosition,showLabel:s.showLabel,icons:s.icons,text:s.text},delete s.click,delete s.icon,delete s.iconPosition,delete s.showLabel,delete s.icons,"boolean"==typeof s.text&&delete s.text,t("<button></button>",s).button(i).appendTo(e.uiButtonSet).on("click",function(){n.apply(e.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog))},_makeDraggable:function(){var e=this,i=this.options;function s(t){return{position:t.position,offset:t.offset}}this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(i,n){e._addClass(t(this),"ui-dialog-dragging"),e._blockFrames(),e._trigger("dragStart",i,s(n))},drag:function(t,i){e._trigger("drag",t,s(i))},stop:function(n,o){var a=o.offset.left-e.document.scrollLeft(),r=o.offset.top-e.document.scrollTop();i.position={my:"left top",at:"left"+(0<=a?"+":"")+a+" top"+(0<=r?"+":"")+r,of:e.window},e._removeClass(t(this),"ui-dialog-dragging"),e._unblockFrames(),e._trigger("dragStop",n,s(o))}})},_makeResizable:function(){var e=this,i=this.options,s=i.resizable,n=this.uiDialog.css("position");s="string"==typeof s?s:"n,e,s,w,se,sw,ne,nw";function o(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:i.maxWidth,maxHeight:i.maxHeight,minWidth:i.minWidth,minHeight:this._minHeight(),handles:s,start:function(i,s){e._addClass(t(this),"ui-dialog-resizing"),e._blockFrames(),e._trigger("resizeStart",i,o(s))},resize:function(t,i){e._trigger("resize",t,o(i))},stop:function(s,n){var a=(r=e.uiDialog.offset()).left-e.document.scrollLeft(),r=r.top-e.document.scrollTop();i.height=e.uiDialog.height(),i.width=e.uiDialog.width(),i.position={my:"left top",at:"left"+(0<=a?"+":"")+a+" top"+(0<=r?"+":"")+r,of:e.window},e._removeClass(t(this),"ui-dialog-resizing"),e._unblockFrames(),e._trigger("resizeStop",s,o(n))}}).css("position",n)},_trackFocus:function(){this._on(this.widget(),{focusin:function(e){this._makeFocusTarget(),this._focusedElement=t(e.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var e=this._trackingInstances(),i=t.inArray(this,e);-1!==i&&e.splice(i,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||this.document.data("ui-dialog-instances",t=[]),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(e){var i=this,s=!1,n={};t.each(e,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,i){var s,n=this.uiDialog;"disabled"!==e&&(this._super(e,i),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:t("<a>").text(""+this.options.closeText).html()}),"draggable"===e&&((s=n.is(":data(ui-draggable)"))&&!i&&n.draggable("destroy"),!s)&&i&&this._makeDraggable(),"position"===e&&this._position(),"resizable"===e&&((s=n.is(":data(ui-resizable)"))&&!i&&n.resizable("destroy"),s&&"string"==typeof i&&n.resizable("option","handles",i),s||!1===i||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")),"modal"===e)&&n.attr("aria-modal",i?"true":null)},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return!!t(e.target).closest(".ui-dialog").length||!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){var e;this.options.modal&&(e=!0,this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this.document.on("focusin.ui-dialog",function(t){var i;e||(i=this._trackingInstances()[0])._allowInteraction(t)||(t.preventDefault(),i._focusTabbable())}.bind(this)),this.overlay=t("<div>").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1))},_destroyOverlay:function(){var t;this.options.modal&&this.overlay&&((t=this.document.data("ui-dialog-overlays")-1)?this.document.data("ui-dialog-overlays",t):(this.document.off("focusin.ui-dialog"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null)}}),!0===t.uiBackCompat&&t.widget("ui.dialog",t.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}}),t.ui.dialog,t.widget("ui.droppable",{version:"1.14.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,e=this.options,i=e.accept;this.isover=!1,this.isout=!0,this.accept="function"==typeof i?i:function(t){return t.is(i)},this.proportions=function(){if(!arguments.length)return t=t||{width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};t=arguments[0]},this._addToManager(e.scope),e.addClasses&&this._addClass("ui-droppable")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;e<t.length;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){var s;"accept"===e?this.accept="function"==typeof i?i:function(t){return t.is(i)}:"scope"===e&&(s=t.ui.ddmanager.droppables[this.options.scope],this._splice(s),this._addToManager(i)),this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,n=!1;return!(!s||(s.currentItem||s.element)[0]===this.element[0]||(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=t(this).droppable("instance");if(i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&t.ui.intersect(s,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e))return!(n=!0)}),n)||!this.accept.call(this.element[0],s.currentItem||s.element))&&(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(s)),this.element)},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}}),t.ui.intersect=function(t,e,i,s){if(!e.offset)return!1;var n=(t.positionAbs||t.position.absolute).left+t.margins.left,o=(t.positionAbs||t.position.absolute).top+t.margins.top,a=n+t.helperProportions.width,r=o+t.helperProportions.height,l=e.offset.left,h=e.offset.top,c=l+e.proportions().width,u=h+e.proportions().height;switch(i){case"fit":return l<=n&&a<=c&&h<=o&&r<=u;case"intersect":return l<n+t.helperProportions.width/2&&a-t.helperProportions.width/2<c&&h<o+t.helperProportions.height/2&&r-t.helperProportions.height/2<u;case"pointer":return at(s.pageY,h,e.proportions().height)&&at(s.pageX,l,e.proportions().width);case"touch":return(h<=o&&o<=u||h<=r&&r<=u||o<h&&u<r)&&(l<=n&&n<=c||l<=a&&a<=c||n<l&&c<a);default:return!1}},t.ui.ddmanager={current:null,droppables:{default:[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;s<o.length;s++)if(!(o[s].options.disabled||e&&!o[s].accept.call(o[s].element[0],e.currentItem||e.element))){for(n=0;n<r.length;n++)if(r[n]===o[s].element[0]){o[s].proportions().height=0;continue t}o[s].visible="none"!==o[s].element.css("display"),o[s].visible&&("mousedown"===a&&o[s]._activate.call(o[s],i),o[s].offset=o[s].element.offset(),o[s].proportions({width:o[s].element[0].offsetWidth,height:o[s].element[0].offsetHeight}))}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&t.ui.intersect(e,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled)&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i))}),s},dragStart:function(e,i){e.element.parentsUntil("body").on("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){var s,n,o,a;this.options.disabled||this.greedyChild||!this.visible||(a=!(a=t.ui.intersect(e,this,this.options.tolerance,i))&&this.isover?"isout":a&&!this.isover?"isover":null)&&(this.options.greedy&&(n=this.options.scope,(o=this.element.parents(":data(ui-droppable)").filter(function(){return t(this).droppable("instance").options.scope===n})).length)&&((s=t(o[0]).droppable("instance")).greedyChild="isover"===a),s&&"isover"===a&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[a]=!0,this["isout"===a?"isover":"isout"]=!1,this["isover"===a?"_over":"_out"].call(this,i),s)&&"isout"===a&&(s.isout=!1,s.isover=!0,s._over.call(s,i))})},dragStop:function(e,i){e.element.parentsUntil("body").off("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},!0===t.uiBackCompat&&t.widget("ui.droppable",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget("ui.progressbar",{version:"1.14.1",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=t("<div>").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){if(void 0===t)return this.options.value;this.options.value=this._constrainedValue(t),this._refreshValue()},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=!1===t,"number"!=typeof t&&(t=0),!this.indeterminate&&Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).width(i.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,e===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div>").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}}),t.widget("ui.selectable",t.ui.mouse,{version:"1.14.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,"ui-selectee"),e.selectees.each(function(){var i=t(this),s={left:(s=i.offset()).left-e.elementPos.left,top:s.top-e.elementPos.top};t.data(this,"selectable-item",{element:this,$element:i,left:s.left,top:s.top,right:s.left+i.outerWidth(),bottom:s.top+i.outerHeight(),startselected:!1,selected:i.hasClass("ui-selected"),selecting:i.hasClass("ui-selecting"),unselecting:i.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=t("<div>"),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger("start",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=t.data(this,"selectable-item");s.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(s.$element,"ui-selected"),s.selected=!1,i._addClass(s.$element,"ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",e,{unselecting:s.element}))}),t(e.target).parents().addBack().each(function(){var s,n=t.data(this,"selectable-item");if(n)return s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass("ui-selected"),i._removeClass(n.$element,s?"ui-unselecting":"ui-selected")._addClass(n.$element,s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,(n.selected=s)?i._trigger("selecting",e,{selecting:n.element}):i._trigger("unselecting",e,{unselecting:n.element}),!1}))},_mouseDrag:function(e){var i,s,n,o,a,r,l;if(this.dragged=!0,!this.options.disabled)return n=(s=this).options,o=this.opos[0],a=this.opos[1],(r=e.pageX)<o&&(i=r,r=o,o=i),(l=e.pageY)<a&&(i=l,l=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:l-a}),this.selectees.each(function(){var i=t.data(this,"selectable-item"),h=!1,c={};i&&i.element!==s.element[0]&&(c.left=i.left+s.elementPos.left,c.right=i.right+s.elementPos.left,c.top=i.top+s.elementPos.top,c.bottom=i.bottom+s.elementPos.top,"touch"===n.tolerance?h=!(r<c.left||c.right<o||l<c.top||c.bottom<a):"fit"===n.tolerance&&(h=o<c.left&&c.right<r&&a<c.top&&c.bottom<l),h?(i.selected&&(s._removeClass(i.$element,"ui-selected"),i.selected=!1),i.unselecting&&(s._removeClass(i.$element,"ui-unselecting"),i.unselecting=!1),i.selecting||(s._addClass(i.$element,"ui-selecting"),i.selecting=!0,s._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,s._addClass(i.$element,"ui-selected"),i.selected=!0):(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,i.startselected&&(s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",e,{unselecting:i.element}))),!i.selected||e.metaKey||e.ctrlKey||i.startselected||(s._removeClass(i.$element,"ui-selected"),i.selected=!1,s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",e,{unselecting:i.element}))))}),!1},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",e,{unselected:s.element})}),t(".ui-selecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-selecting")._addClass(s.$element,"ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",e,{selected:s.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),t.widget("ui.selectmenu",[t.ui.formResetMixin,{version:"1.14.1",defaultElement:"<select>",options:{appendTo:null,classes:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"},disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:!1,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this._bindFormResetHandler(),this._rendered=!1,this.menuItems=t()},_drawButton:function(){var e,i=this,s=this._parseOption(this.element.find("option:selected"),this.element[0].selectedIndex);this.labels=this.element.labels().attr("for",this.ids.button),this._on(this.labels,{click:function(t){this.button.trigger("focus"),t.preventDefault()}}),this.element.hide(),this.button=t("<span>",{tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true",title:this.element.attr("title")}).insertAfter(this.element),this._addClass(this.button,"ui-selectmenu-button ui-selectmenu-button-closed","ui-button ui-widget"),e=t("<span>").appendTo(this.button),this._addClass(e,"ui-selectmenu-icon","ui-icon "+this.options.icons.button),this.buttonItem=this._renderButtonItem(s).appendTo(this.button),!1!==this.options.width&&this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){i._rendered||i._refreshMenu()})},_drawMenu:function(){var e=this;this.menu=t("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=t("<div>").append(this.menu),this._addClass(this.menuWrap,"ui-selectmenu-menu","ui-front"),this.menuWrap.appendTo(this._appendTo()),this.menuInstance=this.menu.menu({classes:{"ui-menu":"ui-corner-bottom"},role:"listbox",select:function(t,i){t.preventDefault(),e._select(i.item.data("ui-selectmenu-item"),t)},focus:function(t,i){i=i.item.data("ui-selectmenu-item"),null!=e.focusIndex&&i.index!==e.focusIndex&&(e._trigger("focus",t,{item:i}),e.isOpen||e._select(i,t)),e.focusIndex=i.index,e.button.attr("aria-activedescendant",e.menuItems.eq(i.index).attr("id"))}}).menu("instance"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(this._getSelectedItem().data("ui-selectmenu-item")||{})),null===this.options.width&&this._resizeButton()},_refreshMenu:function(){var t=this.element.find("option");this.menu.empty(),this._parseOptions(t),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup").find(".ui-menu-item-wrapper"),this._rendered=!0,t.length&&(t=this._getSelectedItem(),this.menuInstance.focus(null,t),this._setAria(t.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(t){this.options.disabled||(this._rendered?(this._removeClass(this.menu.find(".ui-state-active"),null,"ui-state-active"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.menuItems.length&&(this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",t)))},_position:function(){this.menuWrap.position(t.extend({of:this.button},this.options.position))},close:function(t){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",t))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderButtonItem:function(e){var i=t("<span>");return this._setText(i,e.label),this._addClass(i,"ui-selectmenu-text"),i},_renderMenu:function(e,i){var s=this,n="";t.each(i,function(i,o){var a;o.optgroup!==n&&(a=t("<li>",{text:o.optgroup}),s._addClass(a,"ui-selectmenu-optgroup","ui-menu-divider"+(o.element.parent("optgroup").prop("disabled")?" ui-state-disabled":"")),a.appendTo(e),n=o.optgroup),s._renderItemData(e,o)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-selectmenu-item",e)},_renderItem:function(e,i){var s=t("<li>"),n=t("<div>",{title:i.element.attr("title")});return i.disabled&&this._addClass(s,null,"ui-state-disabled"),i.hidden?s.prop("hidden",!0):this._setText(n,i.label),s.append(n).appendTo(e)},_setText:function(t,e){e?t.text(e):t.html("&#160;")},_move:function(t,e){var i,s=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex).parent("li"):(i=this.menuItems.eq(this.element[0].selectedIndex).parent("li"),s+=":not(.ui-state-disabled)"),(i="first"===t||"last"===t?i["first"===t?"prevAll":"nextAll"](s).eq(-1):i[t+"All"](s).eq(0)).length&&this.menuInstance.focus(e,i)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex).parent("li")},_toggle:function(t){this[this.isOpen?"close":"open"](t)},_setSelection:function(){var t;this.range&&((t=window.getSelection()).removeAllRanges(),t.addRange(this.range))},_documentClick:{mousedown:function(e){!this.isOpen||t(e.target).closest(".ui-selectmenu-menu, #"+CSS.escape(this.ids.button)).length||this.close(e)}},_buttonEvents:{mousedown:function(){var t=window.getSelection();t.rangeCount&&(this.range=t.getRangeAt(0))},click:function(t){this._setSelection(),this._toggle(t)},keydown:function(e){var i=!0;switch(e.keyCode){case t.ui.keyCode.TAB:case t.ui.keyCode.ESCAPE:this.close(e),i=!1;break;case t.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(e);break;case t.ui.keyCode.UP:e.altKey?this._toggle(e):this._move("prev",e);break;case t.ui.keyCode.DOWN:e.altKey?this._toggle(e):this._move("next",e);break;case t.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(e):this._toggle(e);break;case t.ui.keyCode.LEFT:this._move("prev",e);break;case t.ui.keyCode.RIGHT:this._move("next",e);break;case t.ui.keyCode.HOME:case t.ui.keyCode.PAGE_UP:this._move("first",e);break;case t.ui.keyCode.END:case t.ui.keyCode.PAGE_DOWN:this._move("last",e);break;default:this.menu.trigger(e),i=!1}i&&e.preventDefault()}},_selectFocusedItem:function(t){var e=this.menuItems.eq(this.focusIndex).parent("li");e.hasClass("ui-state-disabled")||this._select(e.data("ui-selectmenu-item"),t)},_select:function(t,e){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=t.index,this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(t)),this._setAria(t),this._trigger("select",e,{item:t}),t.index!==i&&this._trigger("change",e,{item:t}),this.close(e)},_setAria:function(t){t=this.menuItems.eq(t.index).attr("id"),this.button.attr({"aria-labelledby":t,"aria-activedescendant":t}),this.menu.attr("aria-activedescendant",t)},_setOption:function(t,e){var i;"icons"===t&&(i=this.button.find("span.ui-icon"),this._removeClass(i,null,this.options.icons.button)._addClass(i,null,e.button)),this._super(t,e),"appendTo"===t&&this.menuWrap.appendTo(this._appendTo()),"width"===t&&this._resizeButton()},_setOptionDisabled:function(t){this._super(t),this.menuInstance.option("disabled",t),this.button.attr("aria-disabled",t),this._toggleClass(this.button,null,"ui-state-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)},_appendTo:function(){var e=this.options.appendTo;return(e=(e=e&&(e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)))&&e[0]?e:this.element.closest(".ui-front, dialog")).length?e:this.document[0].body},_toggleAttr:function(){this.button.attr("aria-expanded",this.isOpen),this._removeClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"closed":"open"))._addClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"open":"closed"))._toggleClass(this.menuWrap,"ui-selectmenu-open",null,this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var t=this.options.width;!1===t?this.button.css("width",""):(null===t&&(t=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(t))},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()))},_getCreateOptions:function(){var t=this._super();return t.disabled=this.element.prop("disabled"),t},_parseOptions:function(e){var i=this,s=[];e.each(function(e,n){s.push(i._parseOption(t(n),e))}),this.items=s},_parseOption:function(t,e){var i=t.parent("optgroup");return{element:t,index:e,value:t.val(),label:t.text(),hidden:i.prop("hidden")||t.prop("hidden"),optgroup:i.attr("label")||"",disabled:i.prop("disabled")||t.prop("disabled")}},_destroy:function(){this._unbindFormResetHandler(),this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.labels.attr("for",this.ids.element)}}]),t.widget("ui.slider",t.ui.mouse,{version:"1.14.1",widgetEventPrefix:"slide",options:{animate:!1,classes:{"ui-slider":"ui-corner-all","ui-slider-handle":"ui-corner-all","ui-slider-range":"ui-corner-all ui-widget-header"},distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass("ui-slider ui-slider-"+this.orientation,"ui-widget ui-widget-content"),this._refresh(),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i=this.options,s=this.element.find(".ui-slider-handle"),n=[],o=i.values&&i.values.length||1;for(s.length>o&&(s.slice(o).remove(),s=s.slice(0,o)),e=s.length;e<o;e++)n.push("<span tabindex='0'></span>");this.handles=s.add(t(n.join("")).appendTo(this.element)),this._addClass(this.handles,"ui-slider-handle","ui-state-default"),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e).attr("tabIndex",0)})},_createRange:function(){var e=this.options;e.range?(!0===e.range&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:Array.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?(this._removeClass(this.range,"ui-slider-range-min ui-slider-range-max"),this.range.css({left:"",bottom:""})):(this.range=t("<div>").appendTo(this.element),this._addClass(this.range,"ui-slider-range")),"min"!==e.range&&"max"!==e.range||this._addClass(this.range,"ui-slider-range-"+e.range)):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,o,a,r,l=this,h=this.options;return!h.disabled&&(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),a={x:e.pageX,y:e.pageY},i=this._normValueFromMouse(a),s=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var a=Math.abs(i-l.values(e));(a<s||s===a&&(e===l._lastChangedValue||l.values(e)===h.min))&&(s=a,n=t(this),o=e)}),!1!==this._start(e,o))&&(this._mouseSliding=!0,this._handleIndex=o,this._addClass(n,null,"ui-state-active"),n.trigger("focus"),a=n.offset(),r=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=r?{left:0,top:0}:{left:e.pageX-a.left-n.width()/2,top:e.pageY-a.top-n.height()/2-(parseInt(n.css("borderTopWidth"),10)||0)-(parseInt(n.css("borderBottomWidth"),10)||0)+(parseInt(n.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,o,i),this._animateOff=!0)},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY};e=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,e),!1},_mouseStop:function(t){return this._removeClass(this.handles,null,"ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e;return(t=1<(t=(t="horizontal"===this.orientation?(e=this.elementSize.width,t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)))/e)?1:t)<0&&(t=0),"vertical"===this.orientation&&(t=1-t),e=this._valueMax()-this._valueMin(),t=this._valueMin()+t*e,this._trimAlignValue(t)},_uiHash:function(t,e,i){var s={handle:this.handles[t],handleIndex:t,value:void 0!==e?e:this.value()};return this._hasMultipleValues()&&(s.value=void 0!==e?e:this.values(t),s.values=i||this.values()),s},_hasMultipleValues:function(){return this.options.values&&this.options.values.length},_start:function(t,e){return this._trigger("start",t,this._uiHash(e))},_slide:function(t,e,i){var s,n=this.value(),o=this.values();this._hasMultipleValues()&&(s=this.values(e?0:1),n=this.values(e),2===this.options.values.length&&!0===this.options.range&&(i=0===e?Math.min(s,i):Math.max(s,i)),o[e]=i),i!==n&&!1!==this._trigger("slide",t,this._uiHash(e,i,o))&&(this._hasMultipleValues()?this.values(e,i):this.value(i))},_stop:function(t,e){this._trigger("stop",t,this._uiHash(e))},_change:function(t,e){this._keySliding||this._mouseSliding||(this._lastChangedValue=e,this._trigger("change",t,this._uiHash(e)))},value:function(t){if(!arguments.length)return this._value();this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0)},values:function(t,e){var i,s,n;if(1<arguments.length)this.options.values[t]=this._trimAlignValue(e),this._refreshValue(),this._change(null,t);else{if(!arguments.length)return this._values();if(!Array.isArray(t))return this._hasMultipleValues()?this._values(t):this.value();for(i=this.options.values,s=t,n=0;n<i.length;n+=1)i[n]=this._trimAlignValue(s[n]),this._change(null,n);this._refreshValue()}},_setOption:function(t,e){var i,s=0;switch("range"===t&&!0===this.options.range&&("min"===e?(this.options.value=this._values(0),this.options.values=null):"max"===e&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),Array.isArray(this.options.values)&&(s=this.options.values.length),this._super(t,e),t){case"orientation":this._detectOrientation(),this._removeClass("ui-slider-horizontal ui-slider-vertical")._addClass("ui-slider-"+this.orientation),this._refreshValue(),this.options.range&&this._refreshRange(e),this.handles.css("horizontal"===e?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),i=s-1;0<=i;i--)this._change(null,i);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_setOptionDisabled:function(t){this._super(t),this._toggleClass(null,"ui-state-disabled",!!t)},_value:function(){var t=this.options.value;return this._trimAlignValue(t)},_values:function(t){var e,i;if(arguments.length)return t=this.options.values[t],this._trimAlignValue(t);if(this._hasMultipleValues()){for(e=this.options.values.slice(),i=0;i<e.length;i+=1)e[i]=this._trimAlignValue(e[i]);return e}return[]},_trimAlignValue:function(t){var e,i;return t<=this._valueMin()?this._valueMin():t>=this._valueMax()?this._valueMax():(e=0<this.options.step?this.options.step:1,i=t-(t=(t-this._valueMin())%e),2*Math.abs(t)>=e&&(i+=0<t?e:-e),parseFloat(i.toFixed(5)))},_calculateNewMax:function(){var t=this.options.max,e=this._valueMin(),i=this.options.step;(t=Math.round((t-e)/i)*i+e)>this.options.max&&(t-=i),this.max=parseFloat(t.toFixed(this._precision()))},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min?Math.max(t,this._precisionOf(this.options.min)):t},_precisionOf:function(t){var e=(t=t.toString()).indexOf(".");return-1===e?0:t.length-e-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshRange:function(t){"vertical"===t&&this.range.css({width:"",left:""}),"horizontal"===t&&this.range.css({height:"",bottom:""})},_refreshValue:function(){var e,i,s,n,o,a=this.options.range,r=this.options,l=this,h=!this._animateOff&&r.animate,c={};this._hasMultipleValues()?this.handles.each(function(s){i=(l.values(s)-l._valueMin())/(l._valueMax()-l._valueMin())*100,c["horizontal"===l.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[h?"animate":"css"](c,r.animate),!0===l.options.range&&("horizontal"===l.orientation?(0===s&&l.range.stop(1,1)[h?"animate":"css"]({left:i+"%"},r.animate),1===s&&l.range[h?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&l.range.stop(1,1)[h?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&l.range[h?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),o=this._valueMax(),i=o!==n?(s-n)/(o-n)*100:0,c["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[h?"animate":"css"](c,r.animate),"min"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({width:i+"%"},r.animate),"max"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({width:100-i+"%"},r.animate),"min"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({height:i+"%"},r.animate),"max"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({height:100-i+"%"},r.animate))},_handleEvents:{keydown:function(e){var i,s,n,o=t(e.target).data("ui-slider-handle-index");switch(e.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(e.preventDefault(),this._keySliding||(this._keySliding=!0,this._addClass(t(e.target),null,"ui-state-active"),!1!==this._start(e,o)))break;return}switch(n=this.options.step,i=s=this._hasMultipleValues()?this.values(o):this.value(),e.keyCode){case t.ui.keyCode.HOME:s=this._valueMin();break;case t.ui.keyCode.END:s=this._valueMax();break;case t.ui.keyCode.PAGE_UP:s=this._trimAlignValue(i+(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.PAGE_DOWN:s=this._trimAlignValue(i-(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(i===this._valueMax())return;s=this._trimAlignValue(i+n);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(i===this._valueMin())return;s=this._trimAlignValue(i-n)}this._slide(e,o,s)},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),this._removeClass(t(e.target),null,"ui-state-active"))}}}),t.widget("ui.sortable",t.ui.mouse,{version:"1.14.1",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return e<=t&&t<e+i},_isFloating:function(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))},_create:function(){this.containerCache={},this._addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(t,e){this._super(t,e),"handle"===t&&this._setHandleClassName()},_setHandleClassName:function(){var e=this;this._removeClass(this.element.find(".ui-sortable-handle"),"ui-sortable-handle"),t.each(this.items,function(){e._addClass(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item,"ui-sortable-handle")})},_destroy:function(){this._mouseDestroy();for(var t=this.items.length-1;0<=t;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(e,i){var s=null,n=!1,o=this;return!(this.reverting||this.options.disabled||"static"===this.options.type||(this._refreshItems(e),t(e.target).parents().each(function(){if(t.data(this,o.widgetName+"-item")===o)return s=t(this),!1}),!(s=t.data(e.target,o.widgetName+"-item")===o?t(e.target):s))||this.options.handle&&!i&&(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),!n)||(this.currentItem=s,this._removeCurrentsFromItems(),0))},_mouseStart:function(e,i,s){var n,o,a=this.options;if((this.currentContainer=this).refreshPositions(),this.appendTo=t("parent"!==a.appendTo?a.appendTo:this.currentItem.parent()),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),a.cursorAt&&this._adjustOffsetFromHelper(a.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),this.scrollParent=this.placeholder.scrollParent(),t.extend(this.offset,{parent:this._getParentOffset()}),a.containment&&this._setContainment(),a.cursor&&"auto"!==a.cursor&&(o=this.document.find("body"),this._storedStylesheet=t("<style>*{ cursor: "+a.cursor+" !important; }</style>").appendTo(o)),a.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",a.zIndex)),a.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",a.opacity)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;0<=n;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this.helper.parent().is(this.appendTo)||(this.helper.detach().appendTo(this.appendTo),this.offset.parent=this._getParentOffset()),this.position=this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,this.lastPositionAbs=this.positionAbs=this._convertPositionTo("absolute"),this._mouseDrag(e),!0},_scroll:function(t){var e=this.options,i=!1;return this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<e.scrollSensitivity?this.scrollParent[0].scrollTop=i=this.scrollParent[0].scrollTop+e.scrollSpeed:t.pageY-this.overflowOffset.top<e.scrollSensitivity&&(this.scrollParent[0].scrollTop=i=this.scrollParent[0].scrollTop-e.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<e.scrollSensitivity?this.scrollParent[0].scrollLeft=i=this.scrollParent[0].scrollLeft+e.scrollSpeed:t.pageX-this.overflowOffset.left<e.scrollSensitivity&&(this.scrollParent[0].scrollLeft=i=this.scrollParent[0].scrollLeft-e.scrollSpeed)):(t.pageY-this.document.scrollTop()<e.scrollSensitivity?i=this.document.scrollTop(this.document.scrollTop()-e.scrollSpeed):this.window.height()-(t.pageY-this.document.scrollTop())<e.scrollSensitivity&&(i=this.document.scrollTop(this.document.scrollTop()+e.scrollSpeed)),t.pageX-this.document.scrollLeft()<e.scrollSensitivity?i=this.document.scrollLeft(this.document.scrollLeft()-e.scrollSpeed):this.window.width()-(t.pageX-this.document.scrollLeft())<e.scrollSensitivity&&(i=this.document.scrollLeft(this.document.scrollLeft()+e.scrollSpeed))),i},_mouseDrag:function(e){var i,s,n,o,a=this.options;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),a.scroll&&!1!==this._scroll(e)&&(this._refreshItemPositions(!0),t.ui.ddmanager)&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragDirection={vertical:this._getDragVerticalDirection(),horizontal:this._getDragHorizontalDirection()},i=this.items.length-1;0<=i;i--)if(n=(s=this.items[i]).item[0],(o=this._intersectsWithPointer(s))&&s.instance===this.currentContainer&&!(n===this.currentItem[0]||this.placeholder[1===o?"next":"prev"]()[0]===n||t.contains(this.placeholder[0],n)||"semi-dynamic"===this.options.type&&t.contains(this.element[0],n))){if(this.direction=1===o?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){var s,n,o,a;if(e)return t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert?(n=(s=this).placeholder.offset(),a={},(o=this.options.axis)&&"x"!==o||(a.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),o&&"y"!==o||(a.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(a,parseInt(this.options.revert,10)||500,function(){s._clear(e)})):this._clear(e,i),!1},cancel:function(){if(this.dragging){this._mouseUp(new t.Event("mouseup",{target:null})),"original"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")):this.currentItem.show();for(var e=this.containers.length-1;0<=e;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,l=r+t.height,h=this.offset.click.top,c=this.offset.click.left;h="x"===this.options.axis||r<s+h&&s+h<l,c="y"===this.options.axis||o<e+c&&e+c<a;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?h&&c:o<e+this.helperProportions.width/2&&i-this.helperProportions.width/2<a&&r<s+this.helperProportions.height/2&&n-this.helperProportions.height/2<l},_intersectsWithPointer:function(t){var e="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height);t="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width);return!(!e||!t)&&(e=this.dragDirection.vertical,t=this.dragDirection.horizontal,this.floating?"right"===t||"down"===e?2:1:e&&("down"===e?2:1))},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=(t=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),this.dragDirection.vertical),s=this.dragDirection.horizontal;return this.floating&&s?"right"===s&&t||"left"===s&&!t:i&&("down"===i&&e||"up"===i&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!=t&&(0<t?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!=t&&(0<t?"right":"left")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){var i,s,n,o,a=[],r=[],l=this._connectWith();if(l&&e)for(i=l.length-1;0<=i;i--)for(s=(n=t(l[i],this.document[0])).length-1;0<=s;s--)(o=t.data(n[s],this.widgetFullName))&&o!==this&&!o.options.disabled&&r.push(["function"==typeof o.options.items?o.options.items.call(o.element):t(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);function h(){a.push(this)}for(r.push(["function"==typeof this.options.items?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),i=r.length-1;0<=i;i--)r[i][0].each(h);return t(a)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;i<e.length;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,o,a,r,l,h,c=this.items,u=[["function"==typeof this.options.items?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;0<=i;i--)for(s=(n=t(d[i],this.document[0])).length-1;0<=s;s--)(o=t.data(n[s],this.widgetFullName))&&o!==this&&!o.options.disabled&&(u.push(["function"==typeof o.options.items?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=u.length-1;0<=i;i--)for(a=u[i][1],h=(r=u[i][s=0]).length;s<h;s++)(l=t(r[s])).data(this.widgetName+"-item",a),c.push({item:l,instance:a,width:0,height:0,left:0,top:0})},_refreshItemPositions:function(e){for(var i,s,n=this.items.length-1;0<=n;n--)i=this.items[n],this.currentContainer&&i.instance!==this.currentContainer&&i.item[0]!==this.currentItem[0]||(s=this.options.toleranceElement?t(this.options.toleranceElement,i.item):i.item,e||(i.width=s.outerWidth(),i.height=s.outerHeight()),s=s.offset(),i.left=s.left,i.top=s.top)},refreshPositions:function(t){var e,i;if(this.floating=!!this.items.length&&("x"===this.options.axis||this._isFloating(this.items[0].item)),this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset()),this._refreshItemPositions(t),this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(e=this.containers.length-1;0<=e;e--)i=this.containers[e].element.offset(),this.containers[e].containerCache.left=i.left,this.containers[e].containerCache.top=i.top,this.containers[e].containerCache.width=this.containers[e].element.outerWidth(),this.containers[e].containerCache.height=this.containers[e].element.outerHeight();return this},_createPlaceholder:function(e){var i,s,n=(e=e||this).options;n.placeholder&&n.placeholder.constructor!==String||(i=n.placeholder,s=e.currentItem[0].nodeName.toLowerCase(),n.placeholder={element:function(){var n=t("<"+s+">",e.document[0]);return e._addClass(n,"ui-sortable-placeholder",i||e.currentItem[0].className)._removeClass(n,"ui-sortable-helper"),"tbody"===s?e._createTrPlaceholder(e.currentItem.find("tr").eq(0),t("<tr>",e.document[0]).appendTo(n)):"tr"===s?e._createTrPlaceholder(e.currentItem,n):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,o){i&&!n.forcePlaceholderSize||(o.height()&&(!n.forcePlaceholderSize||"tbody"!==s&&"tr"!==s)||o.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),o.width())||o.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10))}}),e.placeholder=t(n.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),n.placeholder.update(e,e.placeholder)},_createTrPlaceholder:function(e,i){var s=this;e.children().each(function(){t("<td>&#160;</td>",s.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(e){for(var i,s,n,o,a,r,l,h,c,u=null,d=null,p=this.containers.length-1;0<=p;p--)t.contains(this.currentItem[0],this.containers[p].element[0])||(this._intersectsWith(this.containers[p].containerCache)?u&&t.contains(this.containers[p].element[0],u.element[0])||(u=this.containers[p],d=p):this.containers[p].containerCache.over&&(this.containers[p]._trigger("out",e,this._uiHash(this)),this.containers[p].containerCache.over=0));if(u)if(1===this.containers.length)this.containers[d].containerCache.over||(this.containers[d]._trigger("over",e,this._uiHash(this)),this.containers[d].containerCache.over=1);else{for(s=1e4,n=null,o=(h=u.floating||this._isFloating(this.currentItem))?"left":"top",a=h?"width":"height",c=h?"pageX":"pageY",i=this.items.length-1;0<=i;i--)t.contains(this.containers[d].element[0],this.items[i].item[0])&&this.items[i].item[0]!==this.currentItem[0]&&(r=this.items[i].item.offset()[o],l=!1,e[c]-r>this.items[i][a]/2&&(l=!0),Math.abs(e[c]-r)<s)&&(s=Math.abs(e[c]-r),n=this.items[i],this.direction=l?"up":"down");(n||this.options.dropOnEmpty)&&(this.currentContainer===this.containers[d]?this.currentContainer.containerCache.over||(this.containers[d]._trigger("over",e,this._uiHash()),this.currentContainer.containerCache.over=1):(n?this._rearrange(e,n,null,!0):this._rearrange(e,null,this.containers[d].element,!0),this._trigger("change",e,this._uiHash()),this.containers[d]._trigger("change",e,this._uiHash(this)),this.currentContainer=this.containers[d],this.options.placeholder.update(this.currentContainer,this.placeholder),this.scrollParent=this.placeholder.scrollParent(),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this.containers[d]._trigger("over",e,this._uiHash(this)),this.containers[d].containerCache.over=1))}},_createHelper:function(e){var i=this.options;return(e="function"==typeof i.helper?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem).parents("body").length||this.appendTo[0].appendChild(e[0]),e[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),e[0].style.width&&!i.forceHelperSize||e.width(this.currentItem.width()),e[0].style.height&&!i.forceHelperSize||e.height(this.currentItem.height()),e},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),"left"in(t=Array.isArray(t)?{left:+t[0],top:+t[1]||0}:t)&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),{top:(e=this.offsetParent[0]===this.document[0].body?{top:0,left:0}:e).top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){var t;return"relative"===this.cssPosition?{top:(t=this.currentItem.position()).top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}:{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s=this.options;"parent"===s.containment&&(s.containment=this.helper[0].parentNode),"document"!==s.containment&&"window"!==s.containment||(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===s.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===s.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(s.containment)||(e=t(s.containment)[0],s=t(s.containment).offset(),i="hidden"!==t(e).css("overflow"),this.containment=[s.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,s.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,s.left+(i?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,s.top+(i?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i=i||this.position;e="absolute"===e?1:-1;var s="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,n=/(html|body)/i.test(s[0].tagName);return{top:i.top+this.offset.relative.top*e+this.offset.parent.top*e-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():n?0:s.scrollTop())*e,left:i.left+this.offset.relative.left*e+this.offset.parent.left*e-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():n?0:s.scrollLeft())*e}},_generatePosition:function(e){var i=this.options,s=e.pageX,n=e.pageY,o="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(o[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(s=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(n=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(s=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3])&&(n=this.containment[3]+this.offset.click.top),i.grid)&&(e=this.originalPageY+Math.round((n-this.originalPageY)/i.grid[1])*i.grid[1],n=!this.containment||e-this.offset.click.top>=this.containment[1]&&e-this.offset.click.top<=this.containment[3]?e:e-this.offset.click.top>=this.containment[1]?e-i.grid[1]:e+i.grid[1],e=this.originalPageX+Math.round((s-this.originalPageX)/i.grid[0])*i.grid[0],s=!this.containment||e-this.offset.click.left>=this.containment[0]&&e-this.offset.click.left<=this.containment[2]?e:e-this.offset.click.left>=this.containment[0]?e-i.grid[0]:e+i.grid[0]),{top:n-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:o.scrollTop()),left:s-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:o.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){this.reverting=!1;var i,s=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)"auto"!==this._storedCSS[i]&&"static"!==this._storedCSS[i]||(this._storedCSS[i]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();function n(t,e,i){return function(s){i._trigger(t,s,e._uiHash(e))}}for(this.fromOutside&&!e&&s.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||s.push(function(t){this._trigger("update",t,this._uiHash())}),this===this.currentContainer||e||(s.push(function(t){this._trigger("remove",t,this._uiHash())}),s.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),s.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer))),i=this.containers.length-1;0<=i;i--)e||s.push(n("deactivate",this,this.containers[i])),this.containers[i].containerCache.over&&(s.push(n("out",this,this.containers[i])),this.containers[i].containerCache.over=0);if(this._storedStylesheet&&(this._storedStylesheet.remove(),this._storedStylesheet=null),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(i=0;i<s.length;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){!1===t.Widget.prototype._trigger.apply(this,arguments)&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}}),t.widget("ui.spinner",{version:"1.14.1",defaultElement:"<input>",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e=this._super(),i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);null!=n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t)},mousewheel:function(t,e){var i=this.document[0].activeElement;if(this.element[0]===i&&e){if(!this.spinning&&!this._start(t))return!1;this._spin((0<e?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){var i;i=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),e.preventDefault(),function(){this.element[0]!==this.document[0].activeElement&&(this.element.trigger("focus"),this.previous=i)}.call(this),!1!==this._start(e)&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){if(t(e.currentTarget).hasClass("ui-state-active"))return!1!==this._start(e)&&void this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("<span>").parent().append("<a></a><a></a>")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&0<this.uiSpinner.height()&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_start:function(t){return!(!this.spinning&&!1===this._trigger("start",t))&&(this.counter||(this.counter=1),this.spinning=!0)},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&!1===this._trigger("spin",e,{value:i})||(this._value(i),this.counter++)},_increment:function(t){var e=this.options.incremental;return e?"function"==typeof e?e(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min?Math.max(t,this._precisionOf(this.options.min)):t},_precisionOf:function(t){var e=(t=t.toString()).indexOf(".");return-1===e?0:t.length-e-1},_adjustValue:function(t){var e=this.options,i=null!==e.min?e.min:0,s=t-i;return t=i+Math.round(s/e.step)*e.step,t=parseFloat(t.toFixed(this._precision())),null!==e.max&&t>e.max?e.max:null!==e.min&&t<e.min?e.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i;"culture"===t||"numberFormat"===t?(i=this._parse(this.element.val()),this.options[t]=e,this.element.val(this._format(i))):("max"!==t&&"min"!==t&&"step"!==t||"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(i=this.buttons.first().find(".ui-icon"),this._removeClass(i,null,this.options.icons.up),this._addClass(i,null,e.up),i=this.buttons.last().find(".ui-icon"),this._removeClass(i,null,this.options.icons.down),this._addClass(i,null,e.down)),this._super(t,e))},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:rt(function(t){this._super(t)}),_parse:function(t){return""===(t="string"==typeof t&&""!==t?window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t:t)||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null!==t&&t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&null!==(i=this._parse(t))&&(e||(i=this._adjustValue(i)),t=this._format(i)),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:rt(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:rt(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:rt(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:rt(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){if(!arguments.length)return this._parse(this.element.val());rt(this._value).call(this,t)},widget:function(){return this.uiSpinner}}),!0===t.uiBackCompat&&t.widget("ui.spinner",t.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return"<span>"},_buttonHtml:function(){return"<a></a><a></a>"}}),t.ui.spinner,t.widget("ui.tabs",{version:"1.14.1",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:(nt=/#.*$/,function(t){var e=t.href.replace(nt,""),i=location.href.replace(nt,"");try{e=decodeURIComponent(e)}catch(t){}try{i=decodeURIComponent(i)}catch(t){}return 1<t.hash.length&&e===i}),_create:function(){var e=this,i=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,i.collapsible),this._processTabs(),i.active=this._initialActive(),Array.isArray(i.disabled)&&(i.disabled=t.uniqueSort(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),!1!==this.options.active&&this.anchors.length?this.active=this._findActive(i.active):this.active=t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var e=this.options.active,i=this.options.collapsible,s=decodeURIComponent(location.hash.substring(1));return null===e&&(s&&this.tabs.each(function(i,n){if(t(n).attr("aria-controls")===s)return e=i,!1}),null!==(e=null===e?this.tabs.index(this.tabs.filter(".ui-tabs-active")):e)&&-1!==e||(e=!!this.tabs.length&&0)),!1!==e&&-1===(e=this.tabs.index(this.tabs.eq(e)))&&(e=!i&&0),e=!i&&!1===e&&this.anchors.length?0:e},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(e){var i=t(this.document[0].activeElement).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(e)){switch(e.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:s++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:n=!1,s--;break;case t.ui.keyCode.END:s=this.anchors.length-1;break;case t.ui.keyCode.HOME:s=0;break;case t.ui.keyCode.SPACE:return e.preventDefault(),clearTimeout(this.activating),void this._activate(s);case t.ui.keyCode.ENTER:return e.preventDefault(),clearTimeout(this.activating),void this._activate(s!==this.options.active&&s);default:return}e.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),e.ctrlKey||e.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(e){return e.altKey&&e.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):e.altKey&&e.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(e,i){for(var s=this.tabs.length-1;-1!==t.inArray(e=(e=s<e?0:e)<0?s:e,this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){"active"===t?this._activate(e):(this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||!1!==this.options.active||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e))},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),!1!==e.active&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).attr({tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=t(),this.anchors.each(function(i,s){var n,o,a=t(s).uniqueId().attr("id"),r=t(s).closest("li"),l=r.attr("aria-controls");e._isLocal(s)?(o=decodeURIComponent(s.hash).substring(1),n=e.element.find("#"+CSS.escape(o))):(o=r.attr("aria-controls")||t({}).uniqueId()[0].id,(n=e.element.find("#"+o)).length||(n=e._createPanel(o)).insertAfter(e.panels[i-1]||e.tablist),n.attr("aria-live","polite")),n.length&&(e.panels=e.panels.add(n)),l&&r.data("ui-tabs-aria-controls",l),r.attr({"aria-controls":o,"aria-labelledby":a}),n.attr("aria-labelledby",a)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(e){return t("<div>").attr("id",e).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(e){var i,s;for(Array.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1),s=0;i=this.tabs[s];s++)i=t(i),!0===e||-1!==t.inArray(s,e)?(i.attr("aria-disabled","true"),this._addClass(i,null,"ui-state-disabled")):(i.removeAttr("aria-disabled"),this._removeClass(i,null,"ui-state-disabled"));this.options.disabled=e,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!0===e)},_setupEvents:function(e){var i={};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget).closest("li"),o=n[0]===s[0],a=o&&i.collapsible,r=a?t():this._getPanelForTab(n),l=s.length?this._getPanelForTab(s):t();s={oldTab:s,oldPanel:l,newTab:a?t():n,newPanel:r};e.preventDefault(),n.hasClass("ui-state-disabled")||n.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||!1===this._trigger("beforeActivate",e,s)||(i.active=!a&&this.tabs.index(n),this.active=o?t():n,this.xhr&&this.xhr.abort(),l.length||r.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),r.length&&this.load(this.tabs.index(n),e),this._toggle(e,s))},_toggle:function(e,i){var s=this,n=i.newPanel,o=i.oldPanel;function a(){s.running=!1,s._trigger("activate",e,i)}function r(){s._addClass(i.newTab.closest("li"),"ui-tabs-active","ui-state-active"),n.length&&s.options.show?s._show(n,s.options.show,a):(n.show(),a())}this.running=!0,o.length&&this.options.hide?this._hide(o,this.options.hide,function(){s._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),r()}):(this._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),o.hide(),r()),o.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),n.length&&o.length?i.oldTab.attr("tabIndex",-1):n.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),n.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(e){(e=this._findActive(e))[0]!==this.active[0]&&(e=(e=e.length?e:this.active).find(".ui-tabs-anchor")[0],this._eventHandler({target:e,currentTarget:e,preventDefault:t.noop}))},_findActive:function(e){return!1===e?t():this.tabs.eq(e)},_getIndex:function(t){return"string"==typeof t?this.anchors.index(this.anchors.filter("[href$='"+CSS.escape(t)+"']")):t},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(e){var i=this.options.disabled;!1!==i&&(i=void 0!==e&&(e=this._getIndex(e),Array.isArray(i)?t.map(i,function(t){return t!==e?t:null}):t.map(this.tabs,function(t,i){return i!==e?i:null})),this._setOptionDisabled(i))},disable:function(e){var i=this.options.disabled;if(!0!==i){if(void 0===e)i=!0;else{if(e=this._getIndex(e),-1!==t.inArray(e,i))return;i=Array.isArray(i)?t.merge([e],i).sort():[e]}this._setOptionDisabled(i)}},load:function(e,i){function s(t,e){"abort"===e&&n.panels.stop(!1,!0),n._removeClass(o,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===n.xhr&&delete n.xhr}e=this._getIndex(e);var n=this,o=this.tabs.eq(e),a=(e=o.find(".ui-tabs-anchor"),this._getPanelForTab(o)),r={tab:o,panel:a};this._isLocal(e[0])||(this.xhr=t.ajax(this._ajaxSettings(e,i,r)),"canceled"!==this.xhr.statusText&&(this._addClass(o,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,o){a.html(t),n._trigger("load",i,r),s(o,e)}).fail(function(t,e){s(t,e)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href"),beforeSend:function(e,o){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},s))}}},_getPanelForTab:function(e){return e=t(e).attr("aria-controls"),this.element.find("#"+CSS.escape(e))}}),!0===t.uiBackCompat&&t.widget("ui.tabs",t.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}}),t.ui.tabs,t.widget("ui.tooltip",{version:"1.14.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var e=t(this).attr("title");return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(t,e){var i=(t.attr("aria-describedby")||"").split(/\s+/);i.push(e),t.data("ui-tooltip-id",e).attr("aria-describedby",String.prototype.trim.call(i.join(" ")))},_removeDescribedBy:function(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/);-1!==(i=t.inArray(i,s))&&s.splice(i,1),e.removeData("ui-tooltip-id"),(s=String.prototype.trim.call(s.join(" ")))?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=t("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=t([])},_setOption:function(e,i){var s=this;this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s.element[0],e.close(n,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var e=t(this);if(e.is("[title]"))return e.data("ui-tooltip-title",e.attr("title")).removeAttr("title")}))},_enable:function(){this.disabledTitles.each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))}),this.disabledTitles=t([])},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&((e=t.Event("blur")).target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(e,s),this._updateContent(s,e))},_updateContent:function(t,e){var i=this.options.content,s=this,n=e?e.type:null;if("string"==typeof i||i.nodeType||i.jquery)return this._open(e,t,i);(i=i.call(t[0],function(i){t.data("ui-tooltip-open")&&(e&&(e.type=n),s._open(e,t,i))}))&&this._open(e,t,i)},_open:function(e,i,s){var n,o,a,r=t.extend({},this.options.position);function l(t){r.of=t,n.is(":hidden")||n.position(r)}s&&((a=this._find(i))?a.tooltip.find(".ui-tooltip-content").html(s):(i.is("[title]")&&(e&&"mouseover"===e.type?i.attr("title",""):i.removeAttr("title")),a=this._tooltip(i),n=a.tooltip,this._addDescribedBy(i,n.attr("id")),n.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),(a=t("<div>").html(n.find(".ui-tooltip-content").html())).removeAttr("name").find("[name]").removeAttr("name"),a.removeAttr("id").find("[id]").removeAttr("id"),a.appendTo(this.liveRegion),this.options.track&&e&&/^mouse/.test(e.type)?(this._on(this.document,{mousemove:l}),l(e)):n.position(t.extend({of:i},this.options.position)),n.hide(),this._show(n,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(o=this.delayedShow=setInterval(function(){n.is(":visible")&&(l(r.of),clearInterval(o))},13)),this._trigger("open",e,{tooltip:n})))},_registerCloseHandlers:function(e,i){var s={keyup:function(e){e.keyCode===t.ui.keyCode.ESCAPE&&((e=t.Event(e)).currentTarget=i[0],this.close(e,!0))}};i[0]!==this.element[0]&&(s.remove=function(){var t=this._find(i);t&&this._removeTooltip(t.tooltip)}),e&&"mouseover"!==e.type||(s.mouseleave="close"),e&&"focusin"!==e.type||(s.focusout="close"),this._on(!0,i,s)},close:function(e){var i,s=this,n=t(e?e.currentTarget:this.element),o=this._find(n);o?(i=o.tooltip,o.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),o.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),o.closing=!0,this._trigger("close",e,{tooltip:i}),o.hiding)||(o.closing=!1)):n.removeData("ui-tooltip-open")},_tooltip:function(e){var i=t("<div>").attr("role","tooltip"),s=t("<div>").appendTo(i),n=i.uniqueId().attr("id");return this._addClass(s,"ui-tooltip-content"),this._addClass(i,"ui-tooltip","ui-widget ui-widget-content"),i.appendTo(this._appendTo(e)),this.tooltips[n]={element:e,tooltip:i}},_find:function(t){return(t=t.data("ui-tooltip-id"))?this.tooltips[t]:null},_removeTooltip:function(t){clearInterval(this.delayedShow),t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){return(t=t.closest(".ui-front, dialog")).length?t:this.document[0].body},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");s=s.element;n.target=n.currentTarget=s[0],e.close(n,!0),t("#"+i).remove(),s.data("ui-tooltip-title")&&(s.attr("title")||s.attr("title",s.data("ui-tooltip-title")),s.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),!0===t.uiBackCompat&&t.widget("ui.tooltip",t.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}}),t.ui.tooltip});
\ No newline at end of file
diff --git a/providers/fab/src/airflow/providers/fab/www/static/dist/loadingDots.fc35e1feb443bd3a8d80.css b/providers/fab/src/airflow/providers/fab/www/static/dist/loadingDots.deaad0ce0e7691ed6251.css
similarity index 100%
rename from providers/fab/src/airflow/providers/fab/www/static/dist/loadingDots.fc35e1feb443bd3a8d80.css
rename to providers/fab/src/airflow/providers/fab/www/static/dist/loadingDots.deaad0ce0e7691ed6251.css
diff --git a/providers/fab/src/airflow/providers/fab/www/static/dist/loadingDots.fc35e1feb443bd3a8d80.js b/providers/fab/src/airflow/providers/fab/www/static/dist/loadingDots.deaad0ce0e7691ed6251.js
similarity index 50%
rename from providers/fab/src/airflow/providers/fab/www/static/dist/loadingDots.fc35e1feb443bd3a8d80.js
rename to providers/fab/src/airflow/providers/fab/www/static/dist/loadingDots.deaad0ce0e7691ed6251.js
index 6dead324caf8c..ae699b84f8a2f 100644
--- a/providers/fab/src/airflow/providers/fab/www/static/dist/loadingDots.fc35e1feb443bd3a8d80.js
+++ b/providers/fab/src/airflow/providers/fab/www/static/dist/loadingDots.deaad0ce0e7691ed6251.js
@@ -1 +1 @@
-"use strict";!function(e,o){"object"==typeof exports&&"object"==typeof module?module.exports=o():"function"==typeof define&&define.amd?define([],o):"object"==typeof exports?exports.Airflow=o():(e.Airflow=e.Airflow||{},e.Airflow.loadingDots=o())}(self,(()=>(self.webpackChunkAirflow=self.webpackChunkAirflow||[]).push([[57],{46:(e,o,f)=>{f.r(o)}},e=>{var o;return o=46,e(e.s=o)}])));
\ No newline at end of file
+"use strict";!function(e,o){"object"==typeof exports&&"object"==typeof module?module.exports=o():"function"==typeof define&&define.amd?define([],o):"object"==typeof exports?exports.Airflow=o():(e.Airflow=e.Airflow||{},e.Airflow.loadingDots=o())}(self,()=>(self.webpackChunkAirflow=self.webpackChunkAirflow||[]).push([[57],{46:(e,o,f)=>{f.r(o)}},e=>{var o;return o=46,e(e.s=o)}]));
\ No newline at end of file
diff --git a/providers/fab/src/airflow/providers/fab/www/static/dist/main.26e36c3998f451900260.js b/providers/fab/src/airflow/providers/fab/www/static/dist/main.26e36c3998f451900260.js
deleted file mode 100644
index c180cb278abea..0000000000000
--- a/providers/fab/src/airflow/providers/fab/www/static/dist/main.26e36c3998f451900260.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! For license information please see main.26e36c3998f451900260.js.LICENSE.txt */
-"use strict";!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Airflow=t():(e.Airflow=e.Airflow||{},e.Airflow.main=t())}(self,(()=>(self.webpackChunkAirflow=self.webpackChunkAirflow||[]).push([[792],{432:()=>{},993:(e,t,o)=>{o.r(t),o.d(t,{convertSecsToHumanReadable:()=>u,escapeHtml:()=>d});const a="YYYY-MM-DD, HH:mm:ss",n="YYYY-MM-DD, HH:mm:ss z",r="z (Z)";function i(e){return e instanceof moment?e.isUTC()?"UTC":e.format(r):"UTC"===e?e:moment().tz(e).format(r)}function m(e){moment.tz.setDefault(e),$('time[data-datetime-convert!="false"]').each(((e,t)=>{const o=$(t),r=moment(o.attr("datetime"));r._isValid&&o.text(r.format(o.data("with-tz")?n:a)),void 0!==o.attr("title")&&o.attr("title",r.isUTC()?"":`UTC: ${r.clone().utc().format()}`)})),$(".datetime input").each(((e,t)=>{t.value=moment(t.value).format()}))}function l(){const e=moment();$("#clock").attr("datetime",e.format("YYYY-MM-DDThh:mm:ssZ")).html(`${e.format("HH:mm")} <strong>${i(e)}</strong>`)}function s(e){localStorage.setItem("selected-timezone",e);const t=new CustomEvent("timezone",{detail:e});document.dispatchEvent(t),m(e),l(),$("body").trigger({type:"airflow.timezone-change",timezone:e})}window.isoDateToTimeEl=function(e,t){const o=moment(e),n=$.extend({title:!0},t).title,r=document.createElement("time");return r.setAttribute("datetime",o.format()),n&&r.setAttribute("title",o.isUTC()?"":`UTC: ${o.clone().utc().format()}`),r.innerText=o.format(a),r},window.moment=Airflow.moment;const c=document.createElement("span");function d(e){return c.textContent=e,c.innerHTML}function u(e){let t=e;const o=e,a=o-Math.floor(o);t=Math.floor(t);const n=Math.floor(t/3600);t-=3600*n;const r=Math.floor(t/60);t-=60*r;let i="";return n>0&&(i+=`${n}Hours `),r>0&&(i+=`${r}Min `),t+a>0&&(Math.floor(o)===o?i+=`${t}Sec`:(t+=a,i+=`${t.toFixed(3)}Sec`)),i}function f(){const e=moment.tz.guess(),t=localStorage.getItem("selected-timezone"),o=localStorage.getItem("chosen-timezone");function a(t){localStorage.setItem("chosen-timezone",t),t!==e||t!==Airflow.serverTimezone?($("#timezone-manual a").data("timezone",t).text(i(t)),$("#timezone-manual").show()):$("#timezone-manual").hide()}o&&a(o),s(t||Airflow.defaultUITimezone),"UTC"!==Airflow.serverTimezone&&($("#timezone-server a").html(`${i(Airflow.serverTimezone)} <span class="label label-primary">Server</span>`),$("#timezone-server").show()),Airflow.serverTimezone!==e?$("#timezone-local a").attr("data-timezone",e).html(`${i(e)} <span class="label label-info">Local</span>`):$("#timezone-local").hide(),$("a[data-timezone]").click((e=>{s($(e.currentTarget).data("timezone"))}));const n=moment.tz.names().map((e=>({category:e.split("/",1)[0],label:e.replace("_"," "),value:e})));$("#timezone-other").autocomplete({source:(e,t)=>{t(function(e,t){const o=new RegExp($.ui.autocomplete.escapeRegex(t),"i");return $.grep(e,(e=>o.test(e.label)||o.test(e.category)))}(n,e.term))},appendTo:"#timezone-menu > li:nth-child(6) > form",focus:(e,t)=>{e.preventDefault(),$(this).val(t.item.label)},select:(e,t)=>($(this).val(""),a(t.item.value),s(t.item.value),!1)}).data("ui-autocomplete")._renderItem=function(e,t){const o=$("<li>");return o.append(`<a class='dropdown-item' href='#' role='option'>${t.label}</a>`),o.appendTo(e)},$.ui.autocomplete.prototype._renderMenu=function(e,t){let o="";e.addClass("typeahead dropdown-menu"),e.attr("role","listbox"),$.each(t,((t,a)=>{a.category!==o&&(e.append(`<li class='ui-autocomplete-category dropdown-header'>${a.category}</li>`),o=a.category),this._renderItemData(e,a)}))}}function p(e){const t=$(e),o=$(".filter_val.form-control",t.parents("tr"));"Is Null"===t.text()||"Is not Null"===t.text()?(void 0!==o.attr("required")&&(o.removeAttr("required"),o.attr("airflow-required",!0)),1===o.parent(".datetime").length?o.parent(".datetime").hide():o.hide()):("true"===o.attr("airflow-required")&&(o.attr("required",!0),o.removeAttr("airflow-required")),1===o.parent(".datetime").length?o.parent(".datetime").show():o.show())}window.escapeHtml=d,window.convertSecsToHumanReadable=u,window.postAsForm=function(e,t){const o=$("<form></form>");o.attr("method","POST"),o.attr("action",e),$.each(t||{},((e,t)=>{const a=$("<input></input>");a.attr("type","hidden"),a.attr("name",e),a.attr("value",t),o.append(a)}));const a=$("<input></input>");a.attr("type","hidden"),a.attr("name","csrf_token"),a.attr("value",csrfToken),o.append(a),$(document.body).append(o),o.submit()},$(document).ready((()=>{f(),$("#clock").attr("data-original-title",hostName).attr("data-placement","bottom").parent().show(),l(),setInterval(l,1e3),$.ajaxSetup({beforeSend(e,t){/^(GET|HEAD|OPTIONS|TRACE)$/i.test(t.type)||this.crossDomain||e.setRequestHeader("X-CSRFToken",csrfToken)}}),$.fn.datetimepicker.defaults.sideBySide=!0,$(".datetimepicker").datetimepicker({format:"YYYY-MM-DDTHH:mm:ssZ"}),$(".datepicker").datetimepicker({format:"YYYY-MM-DD"}),$(".timepicker").datetimepicker({format:"HH:mm:ss"}),$(".filters .select2-chosen").each(((e,t)=>{p(t)})),$(".filters .select2-chosen").on("DOMNodeInserted",(e=>{p(e.target)})),$("#filter_form a.filter").click((()=>{$(".datetimepicker").datetimepicker(),$(".filters .select2-chosen").on("DOMNodeInserted",(e=>{p(e.target)}))})),$(".js-tooltip").tooltip()}))}},e=>{var t=t=>e(e.s=t);return t(432),t(993)}])));
\ No newline at end of file
diff --git a/providers/fab/src/airflow/providers/fab/www/static/dist/main.26e36c3998f451900260.css b/providers/fab/src/airflow/providers/fab/www/static/dist/main.810554d06c3e30f2484e.css
similarity index 100%
rename from providers/fab/src/airflow/providers/fab/www/static/dist/main.26e36c3998f451900260.css
rename to providers/fab/src/airflow/providers/fab/www/static/dist/main.810554d06c3e30f2484e.css
diff --git a/providers/fab/src/airflow/providers/fab/www/static/dist/main.810554d06c3e30f2484e.js b/providers/fab/src/airflow/providers/fab/www/static/dist/main.810554d06c3e30f2484e.js
new file mode 100644
index 0000000000000..fbb8375c3c5fe
--- /dev/null
+++ b/providers/fab/src/airflow/providers/fab/www/static/dist/main.810554d06c3e30f2484e.js
@@ -0,0 +1,2 @@
+/*! For license information please see main.810554d06c3e30f2484e.js.LICENSE.txt */
+"use strict";!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Airflow=t():(e.Airflow=e.Airflow||{},e.Airflow.main=t())}(self,()=>(self.webpackChunkAirflow=self.webpackChunkAirflow||[]).push([[792],{432:()=>{},993:(e,t,o)=>{o.r(t),o.d(t,{convertSecsToHumanReadable:()=>u,escapeHtml:()=>d});const a="YYYY-MM-DD, HH:mm:ss",n="YYYY-MM-DD, HH:mm:ss z",r="z (Z)";function i(e){return e instanceof moment?e.isUTC()?"UTC":e.format(r):"UTC"===e?e:moment().tz(e).format(r)}function m(e){moment.tz.setDefault(e),$('time[data-datetime-convert!="false"]').each((e,t)=>{const o=$(t),r=moment(o.attr("datetime"));r._isValid&&o.text(r.format(o.data("with-tz")?n:a)),void 0!==o.attr("title")&&o.attr("title",r.isUTC()?"":`UTC: ${r.clone().utc().format()}`)}),$(".datetime input").each((e,t)=>{t.value=moment(t.value).format()})}function l(){const e=moment();$("#clock").attr("datetime",e.format("YYYY-MM-DDThh:mm:ssZ")).html(`${e.format("HH:mm")} <strong>${i(e)}</strong>`)}function s(e){localStorage.setItem("selected-timezone",e);const t=new CustomEvent("timezone",{detail:e});document.dispatchEvent(t),m(e),l(),$("body").trigger({type:"airflow.timezone-change",timezone:e})}window.isoDateToTimeEl=function(e,t){const o=moment(e),n=$.extend({title:!0},t).title,r=document.createElement("time");return r.setAttribute("datetime",o.format()),n&&r.setAttribute("title",o.isUTC()?"":`UTC: ${o.clone().utc().format()}`),r.innerText=o.format(a),r},window.moment=Airflow.moment;const c=document.createElement("span");function d(e){return c.textContent=e,c.innerHTML}function u(e){let t=e;const o=e,a=o-Math.floor(o);t=Math.floor(t);const n=Math.floor(t/3600);t-=3600*n;const r=Math.floor(t/60);t-=60*r;let i="";return n>0&&(i+=`${n}Hours `),r>0&&(i+=`${r}Min `),t+a>0&&(Math.floor(o)===o?i+=`${t}Sec`:(t+=a,i+=`${t.toFixed(3)}Sec`)),i}function f(){const e=moment.tz.guess(),t=localStorage.getItem("selected-timezone"),o=localStorage.getItem("chosen-timezone");function a(t){localStorage.setItem("chosen-timezone",t),t!==e||t!==Airflow.serverTimezone?($("#timezone-manual a").data("timezone",t).text(i(t)),$("#timezone-manual").show()):$("#timezone-manual").hide()}o&&a(o),s(t||Airflow.defaultUITimezone),"UTC"!==Airflow.serverTimezone&&($("#timezone-server a").html(`${i(Airflow.serverTimezone)} <span class="label label-primary">Server</span>`),$("#timezone-server").show()),Airflow.serverTimezone!==e?$("#timezone-local a").attr("data-timezone",e).html(`${i(e)} <span class="label label-info">Local</span>`):$("#timezone-local").hide(),$("a[data-timezone]").click(e=>{s($(e.currentTarget).data("timezone"))});const n=moment.tz.names().map(e=>({category:e.split("/",1)[0],label:e.replace("_"," "),value:e}));$("#timezone-other").autocomplete({source:(e,t)=>{t(function(e,t){const o=new RegExp($.ui.autocomplete.escapeRegex(t),"i");return $.grep(e,e=>o.test(e.label)||o.test(e.category))}(n,e.term))},appendTo:"#timezone-menu > li:nth-child(6) > form",focus:(e,t)=>{e.preventDefault(),$(this).val(t.item.label)},select:(e,t)=>($(this).val(""),a(t.item.value),s(t.item.value),!1)}).data("ui-autocomplete")._renderItem=function(e,t){const o=$("<li>");return o.append(`<a class='dropdown-item' href='#' role='option'>${t.label}</a>`),o.appendTo(e)},$.ui.autocomplete.prototype._renderMenu=function(e,t){let o="";e.addClass("typeahead dropdown-menu"),e.attr("role","listbox"),$.each(t,(t,a)=>{a.category!==o&&(e.append(`<li class='ui-autocomplete-category dropdown-header'>${a.category}</li>`),o=a.category),this._renderItemData(e,a)})}}function p(e){const t=$(e),o=$(".filter_val.form-control",t.parents("tr"));"Is Null"===t.text()||"Is not Null"===t.text()?(void 0!==o.attr("required")&&(o.removeAttr("required"),o.attr("airflow-required",!0)),1===o.parent(".datetime").length?o.parent(".datetime").hide():o.hide()):("true"===o.attr("airflow-required")&&(o.attr("required",!0),o.removeAttr("airflow-required")),1===o.parent(".datetime").length?o.parent(".datetime").show():o.show())}window.escapeHtml=d,window.convertSecsToHumanReadable=u,window.postAsForm=function(e,t){const o=$("<form></form>");o.attr("method","POST"),o.attr("action",e),$.each(t||{},(e,t)=>{const a=$("<input></input>");a.attr("type","hidden"),a.attr("name",e),a.attr("value",t),o.append(a)});const a=$("<input></input>");a.attr("type","hidden"),a.attr("name","csrf_token"),a.attr("value",csrfToken),o.append(a),$(document.body).append(o),o.submit()},$(document).ready(()=>{f(),$("#clock").attr("data-original-title",hostName).attr("data-placement","bottom").parent().show(),l(),setInterval(l,1e3),$.ajaxSetup({beforeSend(e,t){/^(GET|HEAD|OPTIONS|TRACE)$/i.test(t.type)||this.crossDomain||e.setRequestHeader("X-CSRFToken",csrfToken)}}),$.fn.datetimepicker.defaults.sideBySide=!0,$(".datetimepicker").datetimepicker({format:"YYYY-MM-DDTHH:mm:ssZ"}),$(".datepicker").datetimepicker({format:"YYYY-MM-DD"}),$(".timepicker").datetimepicker({format:"HH:mm:ss"}),$(".filters .select2-chosen").each((e,t)=>{p(t)}),$(".filters .select2-chosen").on("DOMNodeInserted",e=>{p(e.target)}),$("#filter_form a.filter").click(()=>{$(".datetimepicker").datetimepicker(),$(".filters .select2-chosen").on("DOMNodeInserted",e=>{p(e.target)})}),$(".js-tooltip").tooltip()})}},e=>{var t=t=>e(e.s=t);return t(432),t(993)}]));
\ No newline at end of file
diff --git a/providers/fab/src/airflow/providers/fab/www/static/dist/main.26e36c3998f451900260.js.LICENSE.txt b/providers/fab/src/airflow/providers/fab/www/static/dist/main.810554d06c3e30f2484e.js.LICENSE.txt
similarity index 100%
rename from providers/fab/src/airflow/providers/fab/www/static/dist/main.26e36c3998f451900260.js.LICENSE.txt
rename to providers/fab/src/airflow/providers/fab/www/static/dist/main.810554d06c3e30f2484e.js.LICENSE.txt
diff --git a/providers/fab/src/airflow/providers/fab/www/static/dist/manifest.json b/providers/fab/src/airflow/providers/fab/www/static/dist/manifest.json
index 321a86922c7a0..aef41d1b01a82 100644
--- a/providers/fab/src/airflow/providers/fab/www/static/dist/manifest.json
+++ b/providers/fab/src/airflow/providers/fab/www/static/dist/manifest.json
@@ -1,17 +1,17 @@
 {
-  "airflowDefaultTheme.css": "airflowDefaultTheme.5a4eda684d2f5f33fa6a.css",
-  "airflowDefaultTheme.js": "airflowDefaultTheme.5a4eda684d2f5f33fa6a.js",
-  "flash.css": "flash.9f756672299e9e57a824.css",
-  "flash.js": "flash.9f756672299e9e57a824.js",
-  "loadingDots.css": "loadingDots.fc35e1feb443bd3a8d80.css",
-  "loadingDots.js": "loadingDots.fc35e1feb443bd3a8d80.js",
-  "main.css": "main.26e36c3998f451900260.css",
-  "main.js": "main.26e36c3998f451900260.js",
-  "materialIcons.css": "materialIcons.e84a12f5be6e8d456d02.css",
-  "materialIcons.js": "materialIcons.e84a12f5be6e8d456d02.js",
-  "moment.js": "moment.9023635a87b836172067.js",
-  "runtime.js": "runtime.78bb8f6146c25d99b9e2.js",
-  "743.js": "743.b6629eaae7f541f4158f.js",
+  "airflowDefaultTheme.css": "airflowDefaultTheme.56d4475fdae7883d3454.css",
+  "airflowDefaultTheme.js": "airflowDefaultTheme.56d4475fdae7883d3454.js",
+  "flash.css": "flash.0951d47c62bc8906be65.css",
+  "flash.js": "flash.0951d47c62bc8906be65.js",
+  "loadingDots.css": "loadingDots.deaad0ce0e7691ed6251.css",
+  "loadingDots.js": "loadingDots.deaad0ce0e7691ed6251.js",
+  "main.css": "main.810554d06c3e30f2484e.css",
+  "main.js": "main.810554d06c3e30f2484e.js",
+  "materialIcons.css": "materialIcons.b0c6cc32cdacff89f7c2.css",
+  "materialIcons.js": "materialIcons.b0c6cc32cdacff89f7c2.js",
+  "moment.js": "moment.518a43bcfaf149ae2836.js",
+  "runtime.js": "runtime.4a925577de9ab84d8e00.js",
+  "743.js": "743.27a753a06671118f1c5c.js",
   "jquery-ui.min.js": "jquery-ui.min.js",
   "jquery-ui.min.css": "jquery-ui.min.css",
   "oss-licenses.json": "oss-licenses.json",
diff --git a/providers/fab/src/airflow/providers/fab/www/static/dist/materialIcons.e84a12f5be6e8d456d02.css b/providers/fab/src/airflow/providers/fab/www/static/dist/materialIcons.b0c6cc32cdacff89f7c2.css
similarity index 100%
rename from providers/fab/src/airflow/providers/fab/www/static/dist/materialIcons.e84a12f5be6e8d456d02.css
rename to providers/fab/src/airflow/providers/fab/www/static/dist/materialIcons.b0c6cc32cdacff89f7c2.css
diff --git a/providers/fab/src/airflow/providers/fab/www/static/dist/materialIcons.b0c6cc32cdacff89f7c2.js b/providers/fab/src/airflow/providers/fab/www/static/dist/materialIcons.b0c6cc32cdacff89f7c2.js
new file mode 100644
index 0000000000000..b0037bcb81f38
--- /dev/null
+++ b/providers/fab/src/airflow/providers/fab/www/static/dist/materialIcons.b0c6cc32cdacff89f7c2.js
@@ -0,0 +1 @@
+"use strict";!function(e,o){"object"==typeof exports&&"object"==typeof module?module.exports=o():"function"==typeof define&&define.amd?define([],o):"object"==typeof exports?exports.Airflow=o():(e.Airflow=e.Airflow||{},e.Airflow.materialIcons=o())}(self,()=>(self.webpackChunkAirflow=self.webpackChunkAirflow||[]).push([[186],{581:(e,o,f)=>{f.r(o)}},e=>{var o;return o=581,e(e.s=o)}]));
\ No newline at end of file
diff --git a/providers/fab/src/airflow/providers/fab/www/static/dist/materialIcons.e84a12f5be6e8d456d02.js b/providers/fab/src/airflow/providers/fab/www/static/dist/materialIcons.e84a12f5be6e8d456d02.js
deleted file mode 100644
index b8c93e4af0e68..0000000000000
--- a/providers/fab/src/airflow/providers/fab/www/static/dist/materialIcons.e84a12f5be6e8d456d02.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";!function(e,o){"object"==typeof exports&&"object"==typeof module?module.exports=o():"function"==typeof define&&define.amd?define([],o):"object"==typeof exports?exports.Airflow=o():(e.Airflow=e.Airflow||{},e.Airflow.materialIcons=o())}(self,(()=>(self.webpackChunkAirflow=self.webpackChunkAirflow||[]).push([[186],{581:(e,o,f)=>{f.r(o)}},e=>{var o;return o=581,e(e.s=o)}])));
\ No newline at end of file
diff --git a/providers/fab/src/airflow/providers/fab/www/static/dist/moment.518a43bcfaf149ae2836.js b/providers/fab/src/airflow/providers/fab/www/static/dist/moment.518a43bcfaf149ae2836.js
new file mode 100644
index 0000000000000..3acb16448f6a5
--- /dev/null
+++ b/providers/fab/src/airflow/providers/fab/www/static/dist/moment.518a43bcfaf149ae2836.js
@@ -0,0 +1 @@
+!function(e,o){"object"==typeof exports&&"object"==typeof module?module.exports=o():"function"==typeof define&&define.amd?define([],o):"object"==typeof exports?exports.Airflow=o():(e.Airflow=e.Airflow||{},e.Airflow.moment=o())}(self,()=>(self.webpackChunkAirflow=self.webpackChunkAirflow||[]).push([[911],{137:e=>{function o(e){var o=new Error("Cannot find module '"+e+"'");throw o.code="MODULE_NOT_FOUND",o}o.keys=()=>[],o.resolve=o,o.id=137,e.exports=o}},e=>(e.O(0,[743],()=>{return o=743,e(e.s=o);var o}),e.O())]));
\ No newline at end of file
diff --git a/providers/fab/src/airflow/providers/fab/www/static/dist/moment.9023635a87b836172067.js b/providers/fab/src/airflow/providers/fab/www/static/dist/moment.9023635a87b836172067.js
deleted file mode 100644
index b2ddada2ca9fa..0000000000000
--- a/providers/fab/src/airflow/providers/fab/www/static/dist/moment.9023635a87b836172067.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,o){"object"==typeof exports&&"object"==typeof module?module.exports=o():"function"==typeof define&&define.amd?define([],o):"object"==typeof exports?exports.Airflow=o():(e.Airflow=e.Airflow||{},e.Airflow.moment=o())}(self,(()=>(self.webpackChunkAirflow=self.webpackChunkAirflow||[]).push([[911],{137:e=>{function o(e){var o=new Error("Cannot find module '"+e+"'");throw o.code="MODULE_NOT_FOUND",o}o.keys=()=>[],o.resolve=o,o.id=137,e.exports=o}},e=>(e.O(0,[743],(()=>{return o=743,e(e.s=o);var o})),e.O())])));
\ No newline at end of file
diff --git a/providers/fab/src/airflow/providers/fab/www/static/dist/runtime.4a925577de9ab84d8e00.js b/providers/fab/src/airflow/providers/fab/www/static/dist/runtime.4a925577de9ab84d8e00.js
new file mode 100644
index 0000000000000..052a09b832339
--- /dev/null
+++ b/providers/fab/src/airflow/providers/fab/www/static/dist/runtime.4a925577de9ab84d8e00.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,r={},o={};function t(e){var n=o[e];if(void 0!==n)return n.exports;var l=o[e]={id:e,loaded:!1,exports:{}};return r[e].call(l.exports,l,l.exports,t),l.loaded=!0,l.exports}t.m=r,e=[],t.O=(r,o,n,l)=>{if(!o){var i=1/0;for(p=0;p<e.length;p++){o=e[p][0],n=e[p][1],l=e[p][2];for(var a=!0,f=0;f<o.length;f++)(!1&l||i>=l)&&Object.keys(t.O).every(e=>t.O[e](o[f]))?o.splice(f--,1):(a=!1,l<i&&(i=l));if(a){e.splice(p--,1);var d=n();void 0!==d&&(r=d)}}return r}l=l||0;for(var p=e.length;p>0&&e[p-1][2]>l;p--)e[p]=e[p-1];e[p]=[o,n,l]},t.d=(e,r)=>{for(var o in r)t.o(r,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:r[o]})},t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e={121:0};t.O.j=r=>0===e[r];var r=(r,o)=>{var n,l,i=o[0],a=o[1],f=o[2],d=0;if(i.some(r=>0!==e[r])){for(n in a)t.o(a,n)&&(t.m[n]=a[n]);if(f)var p=f(t)}for(r&&r(o);d<i.length;d++)l=i[d],t.o(e,l)&&e[l]&&e[l][0](),e[l]=0;return t.O(p)},o=self.webpackChunkAirflow=self.webpackChunkAirflow||[];o.forEach(r.bind(null,0)),o.push=r.bind(null,o.push.bind(o))})()})();
\ No newline at end of file
diff --git a/providers/fab/src/airflow/providers/fab/www/static/dist/runtime.78bb8f6146c25d99b9e2.js b/providers/fab/src/airflow/providers/fab/www/static/dist/runtime.78bb8f6146c25d99b9e2.js
deleted file mode 100644
index 5417cfeab36ce..0000000000000
--- a/providers/fab/src/airflow/providers/fab/www/static/dist/runtime.78bb8f6146c25d99b9e2.js
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{"use strict";var e,r={},o={};function t(e){var n=o[e];if(void 0!==n)return n.exports;var l=o[e]={id:e,loaded:!1,exports:{}};return r[e].call(l.exports,l,l.exports,t),l.loaded=!0,l.exports}t.m=r,e=[],t.O=(r,o,n,l)=>{if(!o){var i=1/0;for(p=0;p<e.length;p++){o=e[p][0],n=e[p][1],l=e[p][2];for(var a=!0,f=0;f<o.length;f++)(!1&l||i>=l)&&Object.keys(t.O).every((e=>t.O[e](o[f])))?o.splice(f--,1):(a=!1,l<i&&(i=l));if(a){e.splice(p--,1);var d=n();void 0!==d&&(r=d)}}return r}l=l||0;for(var p=e.length;p>0&&e[p-1][2]>l;p--)e[p]=e[p-1];e[p]=[o,n,l]},t.d=(e,r)=>{for(var o in r)t.o(r,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:r[o]})},t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e={121:0};t.O.j=r=>0===e[r];var r=(r,o)=>{var n,l,i=o[0],a=o[1],f=o[2],d=0;if(i.some((r=>0!==e[r]))){for(n in a)t.o(a,n)&&(t.m[n]=a[n]);if(f)var p=f(t)}for(r&&r(o);d<i.length;d++)l=i[d],t.o(e,l)&&e[l]&&e[l][0](),e[l]=0;return t.O(p)},o=self.webpackChunkAirflow=self.webpackChunkAirflow||[];o.forEach(r.bind(null,0)),o.push=r.bind(null,o.push.bind(o))})()})();
\ No newline at end of file
diff --git a/providers/fab/www-hash.txt b/providers/fab/www-hash.txt
index 7d658aee3b0cd..5bd3143ffe080 100644
--- a/providers/fab/www-hash.txt
+++ b/providers/fab/www-hash.txt
@@ -1 +1 @@
-ea5d18ef9739d782e34aa9b425d7429efb95b81d0753630204124163e1a10051
+502f77e55e8918f27d4a37d323a684d717b7e8f2070bf2c09b05dc8cad5b16ee

From b7e67d6aa95da69baf71e9a78aea4b6b7045d294 Mon Sep 17 00:00:00 2001
From: Dov Benyomin Sohacheski <b@kloud.email>
Date: Tue, 24 Jun 2025 00:24:40 +0300
Subject: [PATCH 118/381] Add docs for edge execution_api_server_url (#52082)

---
 providers/edge3/docs/deployment.rst | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/providers/edge3/docs/deployment.rst b/providers/edge3/docs/deployment.rst
index d07b9c16e39b5..922632a23eed4 100644
--- a/providers/edge3/docs/deployment.rst
+++ b/providers/edge3/docs/deployment.rst
@@ -50,6 +50,9 @@ Minimum Airflow configuration settings for the Edge Worker to make it running is
 
 - Section ``[core]``
 
+  - ``execution_api_server_url``: The url of the execution api server. Default is ``{BASE_URL}/execution/``
+    where {BASE_URL} is the base url of the API Server. If ``{BASE_URL}`` is not set, it will use
+    ``http://localhost:8080`` as the default base url.
   - ``executor``: Executor must be set or added to be ``airflow.providers.edge3.executors.EdgeExecutor``
   - ``internal_api_secret_key``: An encryption key must be set on api-server and Edge Worker component as
     shared secret to authenticate traffic. It should be a random string like the fernet key

From 3df86abc26bbd4d5ebeb80a38e7267ea1007754f Mon Sep 17 00:00:00 2001
From: Ephraim Anierobi <splendidzigy24@gmail.com>
Date: Mon, 23 Jun 2025 22:28:54 +0100
Subject: [PATCH 119/381] Fix Error when viewing Dag details of a no longer
 configured bundle (#52086)

* Fix Error when viewing Dag details of a no longer configured bundle

When a dag bundle is no longer configured, we raise error when accessing
the dagbundle view url. This affects the UI and the fix I propose is to
catch this error and return a message instead indicating that the bundle
is no longer configured

* fixup! Fix Error when viewing Dag details of a no longer configured bundle
---
 .../api_fastapi/core_api/datamodels/dag_versions.py  |  5 ++++-
 .../core_api/routes/public/test_dag_versions.py      | 12 ++++++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/dag_versions.py b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/dag_versions.py
index 6f255641aaa1c..09a18f8a4fc12 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/dag_versions.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/dag_versions.py
@@ -41,7 +41,10 @@ class DagVersionResponse(BaseModel):
     @property
     def bundle_url(self) -> str | None:
         if self.bundle_name:
-            return DagBundlesManager().view_url(self.bundle_name, self.bundle_version)
+            try:
+                return DagBundlesManager().view_url(self.bundle_name, self.bundle_version)
+            except ValueError:
+                return None
         return None
 
 
diff --git a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_dag_versions.py b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_dag_versions.py
index f4b34f8c5484e..bb363475b9442 100644
--- a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_dag_versions.py
+++ b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_dag_versions.py
@@ -108,6 +108,18 @@ def test_get_dag_version(self, test_client, dag_id, dag_version, expected_respon
         assert response.status_code == 200
         assert response.json() == expected_response
 
+    @pytest.mark.usefixtures("make_dag_with_multiple_versions")
+    @mock.patch("airflow.dag_processing.bundles.manager.DagBundlesManager.view_url")
+    def test_get_dag_version_with_unconfigured_bundle(self, mock_view_url, test_client, dag_maker, session):
+        """Test that when a bundle is no longer configured, the bundle_url returns an error message."""
+        mock_view_url.side_effect = ValueError("Bundle not configured")
+
+        response = test_client.get("/dags/dag_with_multiple_versions/dagVersions/1")
+        assert response.status_code == 200
+
+        response_data = response.json()
+        assert not response_data["bundle_url"]
+
     def test_get_dag_version_404(self, test_client):
         response = test_client.get("/dags/dag_with_multiple_versions/dagVersions/99")
         assert response.status_code == 404

From 7d00e452df66617e3e3a83f05fecf035f2896475 Mon Sep 17 00:00:00 2001
From: Ash Berlin-Taylor <ash@apache.org>
Date: Tue, 24 Jun 2025 00:03:12 +0100
Subject: [PATCH 120/381] Lazily import fs and package_index hook in providers
 manager. (#52117)

---
 airflow-core/src/airflow/providers_manager.py | 26 +++++++------------
 1 file changed, 10 insertions(+), 16 deletions(-)

diff --git a/airflow-core/src/airflow/providers_manager.py b/airflow-core/src/airflow/providers_manager.py
index 81611c8205df7..f6e876e8914a9 100644
--- a/airflow-core/src/airflow/providers_manager.py
+++ b/airflow-core/src/airflow/providers_manager.py
@@ -36,8 +36,6 @@
 from packaging.utils import canonicalize_name
 
 from airflow.exceptions import AirflowOptionalProviderFeatureException
-from airflow.providers.standard.hooks.filesystem import FSHook
-from airflow.providers.standard.hooks.package_index import PackageIndexHook
 from airflow.typing_compat import ParamSpec
 from airflow.utils.entry_points import entry_points_with_dist
 from airflow.utils.log.logging_mixin import LoggingMixin
@@ -395,8 +393,6 @@ def __init__(self):
         self._initialized_cache: dict[str, bool] = {}
         # Keeps dict of providers keyed by module name
         self._provider_dict: dict[str, ProviderInfo] = {}
-        # Keeps dict of hooks keyed by connection type
-        self._hooks_dict: dict[str, HookInfo] = {}
         self._fs_set: set[str] = set()
         self._asset_uri_handlers: dict[str, Callable[[SplitResult], SplitResult]] = {}
         self._asset_factories: dict[str, Callable[..., Asset]] = {}
@@ -443,19 +439,17 @@ def _init_airflow_core_hooks(self):
                 connection_type=None,
                 connection_testable=False,
             )
-        for cls in [FSHook, PackageIndexHook]:
-            package_name = cls.__module__
-            hook_class_name = f"{cls.__module__}.{cls.__name__}"
-            hook_info = self._import_hook(
+        for conn_type, class_name in (
+            ("fs", "airflow.providers.standard.hooks.filesystem.FSHook"),
+            ("package_index", "airflow.providers.standard.hooks.package_index.PackageIndexHook"),
+        ):
+            self._hooks_lazy_dict[conn_type] = functools.partial(
+                self._import_hook,
                 connection_type=None,
-                provider_info=None,
-                hook_class_name=hook_class_name,
-                package_name=package_name,
-            )
-            self._hook_provider_dict[hook_info.connection_type] = HookClassProvider(
-                hook_class_name=hook_class_name, package_name=package_name
+                package_name="apache-airflow-providers-standard",
+                hook_class_name=class_name,
+                provider_info=None,  # type: ignore[argument]
             )
-            self._hooks_lazy_dict[hook_info.connection_type] = hook_info
 
     @provider_info_cache("list")
     def initialize_providers_list(self):
@@ -487,6 +481,7 @@ def _verify_all_providers_all_compatible(self):
     @provider_info_cache("hooks")
     def initialize_providers_hooks(self):
         """Lazy initialization of providers hooks."""
+        self._init_airflow_core_hooks()
         self.initialize_providers_list()
         self._discover_hooks()
         self._hook_provider_dict = dict(sorted(self._hook_provider_dict.items()))
@@ -1275,7 +1270,6 @@ def already_initialized_provider_configs(self) -> list[tuple[str, dict[str, Any]
     def _cleanup(self):
         self._initialized_cache.clear()
         self._provider_dict.clear()
-        self._hooks_dict.clear()
         self._fs_set.clear()
         self._taskflow_decorators.clear()
         self._hook_provider_dict.clear()

From 9a1ea45167d74e5f9348061b99e1999535594061 Mon Sep 17 00:00:00 2001
From: Niko Oliveira <onikolas@amazon.com>
Date: Mon, 23 Jun 2025 21:25:15 -0700
Subject: [PATCH 121/381] examples dags: Update redshift node version dc2.large
 is deprecated (#52120)

---
 providers/amazon/tests/system/amazon/aws/example_redshift.py    | 2 +-
 .../tests/system/amazon/aws/example_redshift_s3_transfers.py    | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/providers/amazon/tests/system/amazon/aws/example_redshift.py b/providers/amazon/tests/system/amazon/aws/example_redshift.py
index 7fd9e0cc044aa..b2ffb56eef511 100644
--- a/providers/amazon/tests/system/amazon/aws/example_redshift.py
+++ b/providers/amazon/tests/system/amazon/aws/example_redshift.py
@@ -74,7 +74,7 @@
         cluster_subnet_group_name=cluster_subnet_group_name,
         publicly_accessible=False,
         cluster_type="single-node",
-        node_type="dc2.large",
+        node_type="ra3.large",
         master_username=DB_LOGIN,
         master_user_password=DB_PASS,
     )
diff --git a/providers/amazon/tests/system/amazon/aws/example_redshift_s3_transfers.py b/providers/amazon/tests/system/amazon/aws/example_redshift_s3_transfers.py
index c3bcdc8b12d27..8392bed89bb8e 100644
--- a/providers/amazon/tests/system/amazon/aws/example_redshift_s3_transfers.py
+++ b/providers/amazon/tests/system/amazon/aws/example_redshift_s3_transfers.py
@@ -111,7 +111,7 @@ def _insert_data(table_name: str) -> str:
         cluster_subnet_group_name=cluster_subnet_group_name,
         publicly_accessible=False,
         cluster_type="single-node",
-        node_type="dc2.large",
+        node_type="ra3.large",
         master_username=DB_LOGIN,
         master_user_password=DB_PASS,
     )

From 7c74b2a4203bf44bbff135bde5a071833d5a3500 Mon Sep 17 00:00:00 2001
From: Aryan Khurana <101019909+AryanK1511@users.noreply.github.com>
Date: Tue, 24 Jun 2025 00:35:18 -0400
Subject: [PATCH 122/381] Add tests to test whether snowflake sql API handles
 invalid JSON (#52118)

---
 .../snowflake/hooks/test_snowflake_sql_api.py | 46 +++++++++++++++++++
 1 file changed, 46 insertions(+)

diff --git a/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake_sql_api.py b/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake_sql_api.py
index 410588a7a71bb..8e610e2fd7546 100644
--- a/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake_sql_api.py
+++ b/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake_sql_api.py
@@ -1179,3 +1179,49 @@ async def test_make_api_call_with_retries_async_unsupported_method(self, mock_as
             await hook._make_api_call_with_retries_async("PATCH", API_URL, HEADERS)
         # No HTTP call should be made
         assert mock_async_request.__aenter__.call_count == 0
+
+    @pytest.mark.asyncio
+    async def test_make_api_call_with_retries_async_json_decode_error_prevention(self, mock_async_request):
+        """
+        Test that _make_api_call_with_retries_async calls raise_for_status() before response.json()
+        to prevent JSONDecodeError when response is not valid JSON.
+        """
+        hook = SnowflakeSqlApiHook(snowflake_conn_id="test_conn")
+
+        failed_response = mock.MagicMock()
+        failed_response.status = 500
+        failed_response.json = AsyncMock(side_effect=ValueError("Invalid JSON"))
+        failed_response.raise_for_status.side_effect = aiohttp.ClientResponseError(
+            request_info=mock.MagicMock(),
+            history=mock.MagicMock(),
+            status=500,
+            message="Internal Server Error",
+        )
+
+        mock_async_request.__aenter__.return_value = failed_response
+
+        with pytest.raises(aiohttp.ClientResponseError):
+            await hook._make_api_call_with_retries_async("GET", API_URL, HEADERS)
+
+        failed_response.raise_for_status.assert_called_once()
+        failed_response.json.assert_not_called()
+
+    def test_make_api_call_with_retries_json_decode_error_prevention(self, mock_requests):
+        """
+        Test that _make_api_call_with_retries calls raise_for_status() before response.json()
+        to prevent JSONDecodeError when response is not valid JSON.
+        """
+        hook = SnowflakeSqlApiHook(snowflake_conn_id="test_conn")
+
+        failed_response = mock.MagicMock()
+        failed_response.status_code = 500
+        failed_response.json.side_effect = requests.exceptions.JSONDecodeError("Invalid JSON", "", 0)
+        failed_response.raise_for_status.side_effect = requests.exceptions.HTTPError(response=failed_response)
+
+        mock_requests.request.return_value = failed_response
+
+        with pytest.raises(requests.exceptions.HTTPError):
+            hook._make_api_call_with_retries("GET", API_URL, HEADERS)
+
+        failed_response.raise_for_status.assert_called_once()
+        failed_response.json.assert_not_called()

From dc03604854202735cea25286c1fbad83027309f2 Mon Sep 17 00:00:00 2001
From: Jed Cunningham <66968678+jedcunningham@users.noreply.github.com>
Date: Mon, 23 Jun 2025 22:45:04 -0600
Subject: [PATCH 123/381] Helm chart 1.17.0 has been released (#52125)

---
 .github/ISSUE_TEMPLATE/4-airflow_helmchart_bug_report.yml | 3 ++-
 chart/Chart.yaml                                          | 4 ++--
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/.github/ISSUE_TEMPLATE/4-airflow_helmchart_bug_report.yml b/.github/ISSUE_TEMPLATE/4-airflow_helmchart_bug_report.yml
index 3c8b7e68a82bf..bb8abfe40a9ee 100644
--- a/.github/ISSUE_TEMPLATE/4-airflow_helmchart_bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/4-airflow_helmchart_bug_report.yml
@@ -28,7 +28,8 @@ body:
         What Apache Airflow Helm Chart version are you using?
       multiple: false
       options:
-        - "1.16.0 (latest released)"
+        - "1.17.0 (latest released)"
+        - "1.16.0"
         - "1.15.0"
         - "1.14.0"
         - "1.13.1"
diff --git a/chart/Chart.yaml b/chart/Chart.yaml
index 82ae444334fe3..f53fc21407eee 100644
--- a/chart/Chart.yaml
+++ b/chart/Chart.yaml
@@ -19,7 +19,7 @@
 ---
 apiVersion: v2
 name: airflow
-version: 1.17.0
+version: 1.18.0-dev
 appVersion: 3.0.2
 description: The official Helm chart to deploy Apache Airflow, a platform to
   programmatically author, schedule, and monitor workflows
@@ -44,7 +44,7 @@ type: application
 annotations:
   artifacthub.io/links: |
     - name: Documentation
-      url: https://airflow.apache.org/docs/helm-chart/1.17.0/
+      url: https://airflow.apache.org/docs/helm-chart/1.18.0/
   artifacthub.io/screenshots: |
     - title: Home Page
       url: https://airflow.apache.org/docs/apache-airflow/3.0.2/_images/home_dark.png

From 5896fae1c1ebb03cb20002cb3fa013a84305dc15 Mon Sep 17 00:00:00 2001
From: DHARMENDRA AHIRWAR <59978852+Kilvish25@users.noreply.github.com>
Date: Tue, 24 Jun 2025 12:39:39 +0530
Subject: [PATCH 124/381] Fix grammar error in logging-tasks documentation
 (#52114)

---
 .../logging-monitoring/logging-tasks.rst                        | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/airflow-core/docs/administration-and-deployment/logging-monitoring/logging-tasks.rst b/airflow-core/docs/administration-and-deployment/logging-monitoring/logging-tasks.rst
index 9512cfefda718..2b827fe9cebcf 100644
--- a/airflow-core/docs/administration-and-deployment/logging-monitoring/logging-tasks.rst
+++ b/airflow-core/docs/administration-and-deployment/logging-monitoring/logging-tasks.rst
@@ -57,7 +57,7 @@ In addition, you can supply a remote location to store current logs and backups.
 Writing to task logs from your code
 -----------------------------------
 
-Airflow uses standard the Python `logging <https://docs.python.org/3/library/logging.html>`_ framework to
+Airflow uses the standard Python `logging <https://docs.python.org/3/library/logging.html>`_ framework to
 write logs, and for the duration of a task, the root logger is configured to write to the task's log.
 
 Most operators will write logs to the task log automatically. This is because they

From 201e66312bc35dbc8c34ade155c6958a8781e733 Mon Sep 17 00:00:00 2001
From: Elad Kalif <45845474+eladkal@users.noreply.github.com>
Date: Tue, 24 Jun 2025 10:36:26 +0300
Subject: [PATCH 125/381] Update providers metadata 2025-06-24 (#52126)

---
 generated/provider_metadata.json | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/generated/provider_metadata.json b/generated/provider_metadata.json
index aa08c22c32dec..8edd65d45458e 100644
--- a/generated/provider_metadata.json
+++ b/generated/provider_metadata.json
@@ -697,6 +697,10 @@
         "6.1.0": {
             "associated_airflow_version": "2.11.0",
             "date_released": "2025-05-18T10:44:29Z"
+        },
+        "6.1.1": {
+            "associated_airflow_version": "2.11.0",
+            "date_released": "2025-06-24T05:30:54Z"
         }
     },
     "apache.cassandra": {
@@ -3339,6 +3343,10 @@
         "1.0.2": {
             "associated_airflow_version": "3.0.2",
             "date_released": "2025-05-18T10:44:29Z"
+        },
+        "1.0.3": {
+            "associated_airflow_version": "3.0.2",
+            "date_released": "2025-06-24T05:30:54Z"
         }
     },
     "common.sql": {
@@ -4857,6 +4865,10 @@
         "2.2.0": {
             "associated_airflow_version": "3.0.1",
             "date_released": "2025-06-07T18:42:53Z"
+        },
+        "2.2.1": {
+            "associated_airflow_version": "3.0.1",
+            "date_released": "2025-06-24T05:30:54Z"
         }
     },
     "facebook": {

From 207c4b09cf7c34b740472aca79dadc19c6f69db4 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Tue, 24 Jun 2025 09:47:30 +0200
Subject: [PATCH 126/381] Add information about updated images (#52128)

---
 docker-stack-docs/changelog.rst | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/docker-stack-docs/changelog.rst b/docker-stack-docs/changelog.rst
index 52918cbdb317d..3c573e5c3ed0c 100644
--- a/docker-stack-docs/changelog.rst
+++ b/docker-stack-docs/changelog.rst
@@ -328,6 +328,15 @@ here so that users affected can find the reason for the changes.
 +--------------+---------------------+-----------------------------------------+------------------------+------------------------------------------------+
 | Date         | Affected images     | Potentially breaking change             | Reason                 | Link to Pull Request / Issue                   |
 +==============+=====================+=========================================+========================+================================================+
+| 24 Jun 2025  | 3.0.2               | * The ``fab`` provider                  | FAB provider user      | https://github.com/apache/airflow/issues/51854 |
+|              |                     |   upgraded from 2.2.0 to 2.2.1          | creation did not work  |                                                |
+|              |                     |                                         |                        |                                                |
+|              |                     | * ``common.messaging`` provider         | importing SQS message  | https://github.com/apache/airflow/issues/51770 |
+|              |                     |   upgraded from 1.0.2 to 1.0.3          | failed with circular   |                                                |
+|              |                     |                                         | import                 |                                                |
+|              |                     |                                         |                        |                                                |
+|              |                     | * git binary is added to the image      | git bundle need it     | https://github.com/apache/airflow/pull/51580   |
++--------------+---------------------+-----------------------------------------+------------------------+------------------------------------------------+
 | 02 Aug 2024  | 2.9.3               | * The ``apache-airflow-providers-fab``  | FAB provider logout    | https://github.com/apache/airflow/issues/40922 |
 |              |                     |   upgraded from 1.2.1 to 1.2.2          | did not work for 2.9.3 |                                                |
 +--------------+---------------------+-----------------------------------------+------------------------+------------------------------------------------+

From 1480853d3c645777aaa5668528920cb8b17ea8c6 Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Tue, 24 Jun 2025 13:45:02 +0530
Subject: [PATCH 127/381] Update Helm Chart docs with 3.0 support (#52132)

---
 chart/docs/index.rst | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/chart/docs/index.rst b/chart/docs/index.rst
index d85a71d8d8220..68be09bbedfda 100644
--- a/chart/docs/index.rst
+++ b/chart/docs/index.rst
@@ -66,8 +66,17 @@ Requirements
 Features
 --------
 
-* Supported executors: ``LocalExecutor``, ``CeleryExecutor``, ``KubernetesExecutor``, ``LocalKubernetesExecutor``, ``CeleryKubernetesExecutor``
-* Supported Airflow version: ``1.10+``, ``2.0+``
+* Supported executors (all Airflow versions): ``LocalExecutor``, ``CeleryExecutor``, ``KubernetesExecutor``
+* Supported hybrid static executors (Airflow version ``2.X.X``): ``LocalKubernetesExecutor``, ``CeleryKubernetesExecutor``
+* Supported Hybrid Executors (``2.10+``)
+* Supported AWS executors with AWS provider version ``8.21.0+``:
+   * ``airflow.providers.amazon.aws.executors.batch.AwsBatchExecutor``
+   * ``airflow.providers.amazon.aws.executors.ecs.AwsEcsExecutor``
+* Supported AWS executors with AWS provider version ``9.9.0+``:
+   * ``airflow.providers.amazon.aws.executors.aws_lambda.lambda_executor.AwsLambdaExecutor``
+* Supported Edge executor with edge3 provider version ``1.0.0+``:
+   * ``airflow.providers.edge3.executors.EdgeExecutor``
+* Supported Airflow version: ``1.10+``, ``2.0+``, ``3.0+``
 * Supported database backend: ``PostgreSQL``, ``MySQL``
 * Autoscaling for ``CeleryExecutor`` provided by KEDA
 * ``PostgreSQL`` and ``PgBouncer`` with a battle-tested configuration

From 8e87686441c3586ddaab22619cb44aa5bef72de4 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Tue, 24 Jun 2025 10:36:33 +0200
Subject: [PATCH 128/381] Update version of image in changelog (#52135)

After rebuilding the image, git is effectively added in 3.0.2 image
---
 docker-stack-docs/changelog.rst | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docker-stack-docs/changelog.rst b/docker-stack-docs/changelog.rst
index 3c573e5c3ed0c..1bd6dbfe8509a 100644
--- a/docker-stack-docs/changelog.rst
+++ b/docker-stack-docs/changelog.rst
@@ -34,7 +34,7 @@ the Airflow team.
        any Airflow version from the ``Airflow 2`` line. There is no guarantee that it will work, but if it does,
        then you can use latest features from that image to build images for previous Airflow versions.
 
-Airflow 3.0.3
+Airflow 3.0.2
 ~~~~~~~~~~~~~
 
   * The ``git`` binary was added to the image by default which is needed for the git provider to work.

From 887ac6b8610f2095e4a6df3799cca231cae4dde2 Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Tue, 24 Jun 2025 14:39:56 +0530
Subject: [PATCH 129/381] Clean up messy default connection overrides in
 provider tests (#52137)

---
 .../tests/unit/common/sql/hooks/test_sql.py   |  20 +-
 .../unit/databricks/hooks/test_databricks.py  | 413 ++++++++++--------
 ...test_databricks_azure_workload_identity.py |  23 +-
 ...atabricks_azure_workload_identity_async.py |  23 +-
 .../databricks/hooks/test_databricks_sql.py   |  20 +-
 .../databricks/triggers/test_databricks.py    |  41 +-
 .../tests/unit/exasol/hooks/test_sql.py       |  22 +-
 7 files changed, 306 insertions(+), 256 deletions(-)

diff --git a/providers/common/sql/tests/unit/common/sql/hooks/test_sql.py b/providers/common/sql/tests/unit/common/sql/hooks/test_sql.py
index 5d1aff2f1ed88..e881f52f69c45 100644
--- a/providers/common/sql/tests/unit/common/sql/hooks/test_sql.py
+++ b/providers/common/sql/tests/unit/common/sql/hooks/test_sql.py
@@ -33,7 +33,6 @@
 from airflow.providers.common.sql.dialects.dialect import Dialect
 from airflow.providers.common.sql.hooks.handlers import fetch_all_handler
 from airflow.providers.common.sql.hooks.sql import DbApiHook, resolve_dialects
-from airflow.utils.session import provide_session
 
 from tests_common.test_utils.common_sql import mock_db_hook
 from tests_common.test_utils.providers import get_provider_min_airflow_version
@@ -49,15 +48,18 @@ class DBApiHookForTests(DbApiHook):
     get_conn = MagicMock(name="conn")
 
 
-@provide_session
 @pytest.fixture(autouse=True)
-def create_connection(session):
-    conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
-    conn.host = HOST
-    conn.login = None
-    conn.password = PASSWORD
-    conn.extra = None
-    session.commit()
+def create_connection(create_connection_without_db):
+    create_connection_without_db(
+        Connection(
+            conn_id=DEFAULT_CONN_ID,
+            conn_type="sqlite",
+            host=HOST,
+            login=None,
+            password=PASSWORD,
+            extra=None,
+        )
+    )
 
 
 def get_cursor_descriptions(fields: list[str]) -> list[tuple[str]]:
diff --git a/providers/databricks/tests/unit/databricks/hooks/test_databricks.py b/providers/databricks/tests/unit/databricks/hooks/test_databricks.py
index d3a85942ca8fb..2698a12b62946 100644
--- a/providers/databricks/tests/unit/databricks/hooks/test_databricks.py
+++ b/providers/databricks/tests/unit/databricks/hooks/test_databricks.py
@@ -53,7 +53,6 @@
     TOKEN_REFRESH_LEAD_TIME,
     BearerAuth,
 )
-from airflow.utils.session import provide_session
 
 TASK_ID = "databricks-operator"
 DEFAULT_CONN_ID = "databricks_default"
@@ -318,16 +317,17 @@ class TestDatabricksHook:
     Tests for DatabricksHook.
     """
 
-    @provide_session
-    def setup_method(self, method, session=None):
-        conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
-        conn.host = HOST
-        conn.schema = None
-        conn.port = None
-        conn.login = LOGIN
-        conn.password = PASSWORD
-        conn.extra = None
-        session.commit()
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(
+                conn_id=DEFAULT_CONN_ID,
+                conn_type="databricks",
+                host=HOST,
+                login=LOGIN,
+                password=PASSWORD,
+            )
+        )
 
         self.hook = DatabricksHook(retry_delay=0)
 
@@ -1255,17 +1255,18 @@ class TestDatabricksHookToken:
     Tests for DatabricksHook when auth is done with token.
     """
 
-    @provide_session
-    def setup_method(self, method, session=None):
-        conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
-        conn.host = HOST
-        conn.schema = None
-        conn.port = None
-        conn.login = None
-        conn.password = None
-        conn.extra = json.dumps({"token": TOKEN, "host": HOST})
-
-        session.commit()
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(
+                conn_id=DEFAULT_CONN_ID,
+                conn_type="databricks",
+                host=HOST,
+                login=None,
+                password=None,
+                extra=json.dumps({"token": TOKEN, "host": HOST}),
+            )
+        )
 
         self.hook = DatabricksHook()
 
@@ -1290,16 +1291,18 @@ class TestDatabricksHookTokenInPassword:
     Tests for DatabricksHook.
     """
 
-    @provide_session
-    def setup_method(self, method, session=None):
-        conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
-        conn.host = HOST
-        conn.schema = None
-        conn.port = None
-        conn.login = None
-        conn.password = TOKEN
-        conn.extra = None
-        session.commit()
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(
+                conn_id=DEFAULT_CONN_ID,
+                conn_type="databricks",
+                host=HOST,
+                login=None,
+                password=TOKEN,
+                extra=None,
+            )
+        )
 
         self.hook = DatabricksHook(retry_delay=0)
 
@@ -1320,17 +1323,18 @@ def test_submit_run(self, mock_requests):
 
 @pytest.mark.db_test
 class TestDatabricksHookTokenWhenNoHostIsProvidedInExtra(TestDatabricksHookToken):
-    @provide_session
-    def setup_method(self, method, session=None):
-        conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
-        conn.host = HOST
-        conn.schema = None
-        conn.port = None
-        conn.login = None
-        conn.password = None
-        conn.extra = json.dumps({"token": TOKEN})
-
-        session.commit()
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(
+                conn_id=DEFAULT_CONN_ID,
+                conn_type="databricks",
+                host=HOST,
+                login=None,
+                password=None,
+                extra=json.dumps({"token": TOKEN}),
+            )
+        )
 
         self.hook = DatabricksHook()
 
@@ -1341,16 +1345,20 @@ class TestDatabricksHookConnSettings(TestDatabricksHookToken):
     Tests that `schema` and/or `port` get reflected in the requested API URLs.
     """
 
-    @provide_session
-    def setup_method(self, method, session=None):
-        conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
-        conn.host = HOST
-        conn.schema = "http"
-        conn.port = 7908
-        conn.login = None
-        conn.password = None
-        conn.extra = json.dumps({"token": TOKEN})
-        session.commit()
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(
+                conn_id=DEFAULT_CONN_ID,
+                conn_type="databricks",
+                host=HOST,
+                login=None,
+                password=None,
+                extra=json.dumps({"token": TOKEN}),
+                schema="http",
+                port=7908,
+            )
+        )
 
         self.hook = DatabricksHook()
 
@@ -1467,21 +1475,23 @@ class TestDatabricksHookAadToken:
     Tests for DatabricksHook when auth is done with AAD token for SP as user inside workspace.
     """
 
-    @provide_session
-    def setup_method(self, method, session=None):
-        conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
-        conn.host = None
-        conn.schema = None
-        conn.port = None
-        conn.login = "9ff815a6-4404-4ab8-85cb-cd0e6f879c1d"
-        conn.password = "secret"
-        conn.extra = json.dumps(
-            {
-                "host": HOST,
-                "azure_tenant_id": "3ff810a6-5504-4ab8-85cb-cd0e6f879c1d",
-            }
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(
+                conn_id=DEFAULT_CONN_ID,
+                conn_type="databricks",
+                host=None,
+                login="9ff815a6-4404-4ab8-85cb-cd0e6f879c1d",
+                password="secret",
+                extra=json.dumps(
+                    {
+                        "azure_tenant_id": "3ff810a6-5504-4ab8-85cb-cd0e6f879c1d",
+                    }
+                ),
+            )
         )
-        session.commit()
+
         self.hook = DatabricksHook(retry_args=DEFAULT_RETRY_ARGS)
 
     @mock.patch("airflow.providers.databricks.hooks.databricks_base.requests")
@@ -1508,25 +1518,26 @@ class TestDatabricksHookAadTokenOtherClouds:
     using non-global Azure cloud (China, GovCloud, Germany)
     """
 
-    @provide_session
-    def setup_method(self, method, session=None):
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
         self.tenant_id = "3ff810a6-5504-4ab8-85cb-cd0e6f879c1d"
         self.ad_endpoint = "https://login.microsoftonline.de"
         self.client_id = "9ff815a6-4404-4ab8-85cb-cd0e6f879c1d"
-        conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
-        conn.host = None
-        conn.schema = None
-        conn.port = None
-        conn.login = self.client_id
-        conn.password = "secret"
-        conn.extra = json.dumps(
-            {
-                "host": HOST,
-                "azure_tenant_id": self.tenant_id,
-                "azure_ad_endpoint": self.ad_endpoint,
-            }
+        create_connection_without_db(
+            Connection(
+                conn_id=DEFAULT_CONN_ID,
+                conn_type="databricks",
+                host=None,
+                login=self.client_id,
+                password="secret",
+                extra=json.dumps(
+                    {
+                        "azure_tenant_id": self.tenant_id,
+                        "azure_ad_endpoint": self.ad_endpoint,
+                    }
+                ),
+            )
         )
-        session.commit()
         self.hook = DatabricksHook(retry_args=DEFAULT_RETRY_ARGS)
 
     @mock.patch("airflow.providers.databricks.hooks.databricks_base.requests")
@@ -1560,23 +1571,25 @@ class TestDatabricksHookAadTokenSpOutside:
     Tests for DatabricksHook when auth is done with AAD token for SP outside of workspace.
     """
 
-    @provide_session
-    def setup_method(self, method, session=None):
-        conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
         self.tenant_id = "3ff810a6-5504-4ab8-85cb-cd0e6f879c1d"
         self.client_id = "9ff815a6-4404-4ab8-85cb-cd0e6f879c1d"
-        conn.login = self.client_id
-        conn.password = "secret"
-        conn.host = HOST
-        conn.schema = None
-        conn.port = None
-        conn.extra = json.dumps(
-            {
-                "azure_resource_id": "/Some/resource",
-                "azure_tenant_id": "3ff810a6-5504-4ab8-85cb-cd0e6f879c1d",
-            }
+        create_connection_without_db(
+            Connection(
+                conn_id=DEFAULT_CONN_ID,
+                conn_type="databricks",
+                host=HOST,
+                login=self.client_id,
+                password="secret",
+                extra=json.dumps(
+                    {
+                        "azure_resource_id": "/Some/resource",
+                        "azure_tenant_id": self.tenant_id,
+                    }
+                ),
+            )
         )
-        session.commit()
         self.hook = DatabricksHook(retry_args=DEFAULT_RETRY_ARGS)
 
     @mock.patch("airflow.providers.databricks.hooks.databricks_base.requests")
@@ -1616,18 +1629,22 @@ class TestDatabricksHookAadTokenManagedIdentity:
     Tests for DatabricksHook when auth is done with AAD leveraging Managed Identity authentication
     """
 
-    @provide_session
-    def setup_method(self, method, session=None):
-        conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
-        conn.host = HOST
-        conn.schema = None
-        conn.port = None
-        conn.extra = json.dumps(
-            {
-                "use_azure_managed_identity": True,
-            }
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(
+                conn_id=DEFAULT_CONN_ID,
+                conn_type="databricks",
+                host=HOST,
+                login=None,
+                password=None,
+                extra=json.dumps(
+                    {
+                        "use_azure_managed_identity": True,
+                    }
+                ),
+            )
         )
-        session.commit()
         self.hook = DatabricksHook(retry_args=DEFAULT_RETRY_ARGS)
 
     @mock.patch("airflow.providers.databricks.hooks.databricks_base.requests")
@@ -1663,16 +1680,18 @@ class TestDatabricksHookAsyncMethods:
     Tests for async functionality of DatabricksHook.
     """
 
-    @provide_session
-    def setup_method(self, method, session=None):
-        conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
-        conn.host = HOST
-        conn.schema = None
-        conn.port = None
-        conn.login = LOGIN
-        conn.password = PASSWORD
-        conn.extra = None
-        session.commit()
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(
+                conn_id=DEFAULT_CONN_ID,
+                conn_type="databricks",
+                host=HOST,
+                login=LOGIN,
+                password=PASSWORD,
+                extra=None,
+            )
+        )
 
         self.hook = DatabricksHook(retry_args=DEFAULT_RETRY_ARGS)
 
@@ -1846,20 +1865,23 @@ class TestDatabricksHookAsyncAadToken:
     auth is done with AAD token for SP as user inside workspace.
     """
 
-    @provide_session
-    def setup_method(self, method, session=None):
-        conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
-        conn.schema = None
-        conn.port = None
-        conn.login = "9ff815a6-4404-4ab8-85cb-cd0e6f879c1d"
-        conn.password = "secret"
-        conn.extra = json.dumps(
-            {
-                "host": HOST,
-                "azure_tenant_id": "3ff810a6-5504-4ab8-85cb-cd0e6f879c1d",
-            }
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(
+                conn_id=DEFAULT_CONN_ID,
+                conn_type="databricks",
+                host=HOST,
+                login="9ff815a6-4404-4ab8-85cb-cd0e6f879c1d",
+                password="secret",
+                extra=json.dumps(
+                    {
+                        "azure_tenant_id": "3ff810a6-5504-4ab8-85cb-cd0e6f879c1d",
+                    }
+                ),
+            )
         )
-        session.commit()
+
         self.hook = DatabricksHook(retry_args=DEFAULT_RETRY_ARGS)
 
     @pytest.mark.asyncio
@@ -1889,24 +1911,26 @@ class TestDatabricksHookAsyncAadTokenOtherClouds:
     for SP as user inside workspace and using non-global Azure cloud (China, GovCloud, Germany)
     """
 
-    @provide_session
-    def setup_method(self, method, session=None):
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
         self.tenant_id = "3ff810a6-5504-4ab8-85cb-cd0e6f879c1d"
         self.ad_endpoint = "https://login.microsoftonline.de"
         self.client_id = "9ff815a6-4404-4ab8-85cb-cd0e6f879c1d"
-        conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
-        conn.schema = None
-        conn.port = None
-        conn.login = self.client_id
-        conn.password = "secret"
-        conn.extra = json.dumps(
-            {
-                "host": HOST,
-                "azure_tenant_id": self.tenant_id,
-                "azure_ad_endpoint": self.ad_endpoint,
-            }
+        create_connection_without_db(
+            Connection(
+                conn_id=DEFAULT_CONN_ID,
+                conn_type="databricks",
+                host=HOST,
+                login=self.client_id,
+                password="secret",
+                extra=json.dumps(
+                    {
+                        "azure_tenant_id": self.tenant_id,
+                        "azure_ad_endpoint": self.ad_endpoint,
+                    }
+                ),
+            )
         )
-        session.commit()
         self.hook = DatabricksHook(retry_args=DEFAULT_RETRY_ARGS)
 
     @pytest.mark.asyncio
@@ -1945,23 +1969,25 @@ class TestDatabricksHookAsyncAadTokenSpOutside:
     Tests for DatabricksHook using async methods when auth is done with AAD token for SP outside of workspace.
     """
 
-    @provide_session
-    def setup_method(self, method, session=None):
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
         self.tenant_id = "3ff810a6-5504-4ab8-85cb-cd0e6f879c1d"
         self.client_id = "9ff815a6-4404-4ab8-85cb-cd0e6f879c1d"
-        conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
-        conn.login = self.client_id
-        conn.password = "secret"
-        conn.host = HOST
-        conn.schema = None
-        conn.port = None
-        conn.extra = json.dumps(
-            {
-                "azure_resource_id": "/Some/resource",
-                "azure_tenant_id": self.tenant_id,
-            }
+        create_connection_without_db(
+            Connection(
+                conn_id=DEFAULT_CONN_ID,
+                conn_type="databricks",
+                host=HOST,
+                login=self.client_id,
+                password="secret",
+                extra=json.dumps(
+                    {
+                        "azure_resource_id": "/Some/resource",
+                        "azure_tenant_id": self.tenant_id,
+                    }
+                ),
+            )
         )
-        session.commit()
         self.hook = DatabricksHook(retry_args=DEFAULT_RETRY_ARGS)
 
     @pytest.mark.asyncio
@@ -2008,19 +2034,22 @@ class TestDatabricksHookAsyncAadTokenManagedIdentity:
     auth is done with AAD leveraging Managed Identity authentication
     """
 
-    @provide_session
-    def setup_method(self, method, session=None):
-        conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
-        conn.host = HOST
-        conn.schema = None
-        conn.port = None
-        conn.extra = json.dumps(
-            {
-                "use_azure_managed_identity": True,
-            }
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(
+                conn_id=DEFAULT_CONN_ID,
+                conn_type="databricks",
+                host=HOST,
+                login=None,
+                password=None,
+                extra=json.dumps(
+                    {
+                        "use_azure_managed_identity": True,
+                    }
+                ),
+            )
         )
-        session.commit()
-        session.commit()
         self.hook = DatabricksHook(retry_args=DEFAULT_RETRY_ARGS)
 
     @pytest.mark.asyncio
@@ -2060,16 +2089,18 @@ class TestDatabricksHookSpToken:
     Tests for DatabricksHook when auth is done with Service Principal Oauth token.
     """
 
-    @provide_session
-    def setup_method(self, method, session=None):
-        conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
-        conn.host = HOST
-        conn.schema = None
-        conn.port = None
-        conn.login = "c64f6d12-f6e4-45a4-846e-032b42b27758"
-        conn.password = "secret"
-        conn.extra = json.dumps({"service_principal_oauth": True})
-        session.commit()
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(
+                conn_id=DEFAULT_CONN_ID,
+                conn_type="databricks",
+                host=HOST,
+                login="c64f6d12-f6e4-45a4-846e-032b42b27758",
+                password="secret",
+                extra=json.dumps({"service_principal_oauth": True}),
+            )
+        )
         self.hook = DatabricksHook(retry_args=DEFAULT_RETRY_ARGS)
 
     @mock.patch("airflow.providers.databricks.hooks.databricks_base.requests")
@@ -2101,16 +2132,18 @@ class TestDatabricksHookAsyncSpToken:
     Principal Oauth token.
     """
 
-    @provide_session
-    def setup_method(self, method, session=None):
-        conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
-        conn.host = HOST
-        conn.schema = None
-        conn.port = None
-        conn.login = "c64f6d12-f6e4-45a4-846e-032b42b27758"
-        conn.password = "secret"
-        conn.extra = json.dumps({"service_principal_oauth": True})
-        session.commit()
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(
+                conn_id=DEFAULT_CONN_ID,
+                conn_type="databricks",
+                host=HOST,
+                login="c64f6d12-f6e4-45a4-846e-032b42b27758",
+                password="secret",
+                extra=json.dumps({"service_principal_oauth": True}),
+            )
+        )
         self.hook = DatabricksHook(retry_args=DEFAULT_RETRY_ARGS)
 
     @pytest.mark.asyncio
diff --git a/providers/databricks/tests/unit/databricks/hooks/test_databricks_azure_workload_identity.py b/providers/databricks/tests/unit/databricks/hooks/test_databricks_azure_workload_identity.py
index 6a57a1340cb42..d009fee7a6f4a 100644
--- a/providers/databricks/tests/unit/databricks/hooks/test_databricks_azure_workload_identity.py
+++ b/providers/databricks/tests/unit/databricks/hooks/test_databricks_azure_workload_identity.py
@@ -28,7 +28,6 @@
 from airflow.models import Connection
 from airflow.providers.databricks.hooks.databricks import DatabricksHook
 from airflow.providers.databricks.hooks.databricks_base import DEFAULT_AZURE_CREDENTIAL_SETTING_KEY
-from airflow.utils.session import provide_session
 
 
 def create_successful_response_mock(content):
@@ -55,16 +54,20 @@ def create_aad_token_for_resource() -> AccessToken:
 class TestDatabricksHookAadTokenWorkloadIdentity:
     _hook: DatabricksHook
 
-    @provide_session
-    def setup_method(self, method, session=None):
-        conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
-        conn.host = HOST
-        conn.extra = json.dumps(
-            {
-                DEFAULT_AZURE_CREDENTIAL_SETTING_KEY: True,
-            }
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(
+                conn_id=DEFAULT_CONN_ID,
+                conn_type="databricks",
+                host=HOST,
+                extra=json.dumps(
+                    {
+                        DEFAULT_AZURE_CREDENTIAL_SETTING_KEY: True,
+                    }
+                ),
+            )
         )
-        session.commit()
 
         # This will use the default connection id (databricks_default)
         self._hook = DatabricksHook(retry_args=DEFAULT_RETRY_ARGS)
diff --git a/providers/databricks/tests/unit/databricks/hooks/test_databricks_azure_workload_identity_async.py b/providers/databricks/tests/unit/databricks/hooks/test_databricks_azure_workload_identity_async.py
index 0a43262acc4f6..fc297800aa14f 100644
--- a/providers/databricks/tests/unit/databricks/hooks/test_databricks_azure_workload_identity_async.py
+++ b/providers/databricks/tests/unit/databricks/hooks/test_databricks_azure_workload_identity_async.py
@@ -28,7 +28,6 @@
 from airflow.models import Connection
 from airflow.providers.databricks.hooks.databricks import DatabricksHook
 from airflow.providers.databricks.hooks.databricks_base import DEFAULT_AZURE_CREDENTIAL_SETTING_KEY
-from airflow.utils.session import provide_session
 
 
 def create_successful_response_mock(content):
@@ -53,16 +52,20 @@ def create_aad_token_for_resource() -> AccessToken:
 
 @pytest.mark.db_test
 class TestDatabricksHookAadTokenWorkloadIdentityAsync:
-    @provide_session
-    def setup_method(self, method, session=None):
-        conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
-        conn.host = HOST
-        conn.extra = json.dumps(
-            {
-                DEFAULT_AZURE_CREDENTIAL_SETTING_KEY: True,
-            }
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(
+                conn_id=DEFAULT_CONN_ID,
+                conn_type="databricks",
+                host=HOST,
+                extra=json.dumps(
+                    {
+                        DEFAULT_AZURE_CREDENTIAL_SETTING_KEY: True,
+                    }
+                ),
+            )
         )
-        session.commit()
 
     @pytest.mark.asyncio
     @mock.patch(
diff --git a/providers/databricks/tests/unit/databricks/hooks/test_databricks_sql.py b/providers/databricks/tests/unit/databricks/hooks/test_databricks_sql.py
index 4fd5d80c6521e..7449489c77d7b 100644
--- a/providers/databricks/tests/unit/databricks/hooks/test_databricks_sql.py
+++ b/providers/databricks/tests/unit/databricks/hooks/test_databricks_sql.py
@@ -33,7 +33,6 @@
 from airflow.models import Connection
 from airflow.providers.common.sql.hooks.handlers import fetch_all_handler
 from airflow.providers.databricks.hooks.databricks_sql import DatabricksSqlHook, create_timeout_thread
-from airflow.utils.session import provide_session
 
 TASK_ID = "databricks-sql-operator"
 DEFAULT_CONN_ID = "databricks_default"
@@ -42,15 +41,18 @@
 TOKEN = "token"
 
 
-@provide_session
 @pytest.fixture(autouse=True)
-def create_connection(session):
-    conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
-    conn.host = HOST
-    conn.login = None
-    conn.password = TOKEN
-    conn.extra = None
-    session.commit()
+def create_connection(create_connection_without_db):
+    create_connection_without_db(
+        Connection(
+            conn_id=DEFAULT_CONN_ID,
+            conn_type="databricks",
+            host=HOST,
+            login=None,
+            password=TOKEN,
+            extra=None,
+        )
+    )
 
 
 @pytest.fixture
diff --git a/providers/databricks/tests/unit/databricks/triggers/test_databricks.py b/providers/databricks/tests/unit/databricks/triggers/test_databricks.py
index bb143fe5c9b0c..a34e4723388c1 100644
--- a/providers/databricks/tests/unit/databricks/triggers/test_databricks.py
+++ b/providers/databricks/tests/unit/databricks/triggers/test_databricks.py
@@ -29,7 +29,6 @@
     DatabricksSQLStatementExecutionTrigger,
 )
 from airflow.triggers.base import TriggerEvent
-from airflow.utils.session import provide_session
 
 pytestmark = pytest.mark.db_test
 
@@ -121,14 +120,18 @@
 
 
 class TestDatabricksExecutionTrigger:
-    @provide_session
-    def setup_method(self, method, session=None):
-        conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
-        conn.host = HOST
-        conn.login = LOGIN
-        conn.password = PASSWORD
-        conn.extra = None
-        session.commit()
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(
+                conn_id=DEFAULT_CONN_ID,
+                conn_type="databricks",
+                host=HOST,
+                login=LOGIN,
+                password=PASSWORD,
+                extra=None,
+            )
+        )
 
         self.trigger = DatabricksExecutionTrigger(
             run_id=RUN_ID,
@@ -258,15 +261,19 @@ async def test_sleep_between_retries(
 
 
 class TestDatabricksSQLStatementExecutionTrigger:
-    @provide_session
-    def setup_method(self, method, session=None):
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
         self.end_time = time.time() + 60
-        conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
-        conn.host = HOST
-        conn.login = LOGIN
-        conn.password = PASSWORD
-        conn.extra = None
-        session.commit()
+        create_connection_without_db(
+            Connection(
+                conn_id=DEFAULT_CONN_ID,
+                conn_type="databricks",
+                host=HOST,
+                login=LOGIN,
+                password=PASSWORD,
+                extra=None,
+            )
+        )
 
         self.trigger = DatabricksSQLStatementExecutionTrigger(
             statement_id=STATEMENT_ID,
diff --git a/providers/exasol/tests/unit/exasol/hooks/test_sql.py b/providers/exasol/tests/unit/exasol/hooks/test_sql.py
index da99da330e567..d8d8a4f37c2cc 100644
--- a/providers/exasol/tests/unit/exasol/hooks/test_sql.py
+++ b/providers/exasol/tests/unit/exasol/hooks/test_sql.py
@@ -27,7 +27,6 @@
 from airflow.models import Connection
 from airflow.providers.common.sql.hooks.handlers import fetch_all_handler
 from airflow.providers.exasol.hooks.exasol import ExasolHook
-from airflow.utils.session import provide_session
 
 TASK_ID = "sql-operator"
 HOST = "host"
@@ -40,17 +39,18 @@ class ExasolHookForTests(ExasolHook):
     get_conn = MagicMock(name="conn")
 
 
-@provide_session
 @pytest.fixture(autouse=True)
-def create_connection(session):
-    conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
-    if conn is None:
-        conn = Connection(conn_id=DEFAULT_CONN_ID)
-    conn.host = HOST
-    conn.login = None
-    conn.password = PASSWORD
-    conn.extra = None
-    session.commit()
+def create_connection(create_connection_without_db):
+    create_connection_without_db(
+        Connection(
+            conn_id=DEFAULT_CONN_ID,
+            conn_type="exasol",
+            host=HOST,
+            login=None,
+            password=PASSWORD,
+            extra=None,
+        )
+    )
 
 
 @pytest.fixture

From 848d918aa29b147c0e6280d14092055736bac3f2 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Tue, 24 Jun 2025 11:18:39 +0200
Subject: [PATCH 130/381] Update to latest octopin action and remove yamllint
 exclusion (#52133)

After https://github.com/eclipse-csi/octopin/issues/45 is fixed,
we can now switch off the exclusion for workflow files in yamllint
as the comments added by octopin now have 2 spaces as expected by
default by yamllint.
---
 .github/.pre-commit-config.yaml               |  2 +-
 .../workflows/additional-ci-image-checks.yml  |  2 +-
 .../workflows/additional-prod-image-tests.yml |  4 ++--
 .../workflows/airflow-distributions-tests.yml |  2 +-
 .github/workflows/automatic-backport.yml      |  2 +-
 .github/workflows/backport-cli.yml            |  2 +-
 .github/workflows/basic-tests.yml             | 20 ++++++++---------
 .github/workflows/ci-amd.yml                  | 22 +++++++++----------
 .github/workflows/ci-arm.yml                  | 10 ++++-----
 .github/workflows/ci-image-build.yml          |  2 +-
 .github/workflows/ci-image-checks.yml         | 20 ++++++++---------
 .github/workflows/codeql-analysis.yml         |  8 +++----
 .github/workflows/finalize-tests.yml          |  6 ++---
 .github/workflows/generate-constraints.yml    |  4 ++--
 .github/workflows/helm-tests.yml              |  6 ++---
 .../workflows/integration-system-tests.yml    |  6 ++---
 .github/workflows/k8s-tests.yml               |  4 ++--
 .github/workflows/news-fragment.yml           |  2 +-
 .github/workflows/prod-image-build.yml        | 10 ++++-----
 .github/workflows/publish-docs-to-s3.yml      | 12 +++++-----
 .github/workflows/push-image-cache.yml        |  6 ++---
 .github/workflows/recheck-old-bug-report.yml  |  2 +-
 .github/workflows/release_dockerhub_image.yml |  2 +-
 .../release_single_dockerhub_image.yml        |  8 +++----
 .github/workflows/run-unit-tests.yml          |  2 +-
 .github/workflows/stale.yml                   |  2 +-
 .github/workflows/test-providers.yml          |  4 ++--
 contributing-docs/08_static_code_checks.rst   |  2 +-
 yamllint-config.yml                           |  4 ----
 29 files changed, 87 insertions(+), 91 deletions(-)

diff --git a/.github/.pre-commit-config.yaml b/.github/.pre-commit-config.yaml
index 23f8d57648977..909f0c1cdca3c 100644
--- a/.github/.pre-commit-config.yaml
+++ b/.github/.pre-commit-config.yaml
@@ -21,7 +21,7 @@ default_language_version:
 minimum_pre_commit_version: '3.2.0'
 repos:
   - repo: https://github.com/eclipse-csi/octopin
-    rev: 1700a65f632fd29f328232775ceb6c54554287ce
+    rev: 21360742e352e87450f99e180fdfc2cf774a72a3
     hooks:
       - id: pin-versions
         name: Pin versions of dependencies in CI workflows (manual)
diff --git a/.github/workflows/additional-ci-image-checks.yml b/.github/workflows/additional-ci-image-checks.yml
index cfbc5030fa883..d78404dfef5b4 100644
--- a/.github/workflows/additional-ci-image-checks.yml
+++ b/.github/workflows/additional-ci-image-checks.yml
@@ -135,7 +135,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
diff --git a/.github/workflows/additional-prod-image-tests.yml b/.github/workflows/additional-prod-image-tests.yml
index 3a323115aa50d..d8e3180f883c9 100644
--- a/.github/workflows/additional-prod-image-tests.yml
+++ b/.github/workflows/additional-prod-image-tests.yml
@@ -107,7 +107,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           fetch-depth: 2
           persist-credentials: false
@@ -144,7 +144,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           fetch-depth: 2
           persist-credentials: false
diff --git a/.github/workflows/airflow-distributions-tests.yml b/.github/workflows/airflow-distributions-tests.yml
index 14fefbf294802..ffcd9e3183005 100644
--- a/.github/workflows/airflow-distributions-tests.yml
+++ b/.github/workflows/airflow-distributions-tests.yml
@@ -84,7 +84,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ matrix.python-version }}"
diff --git a/.github/workflows/automatic-backport.yml b/.github/workflows/automatic-backport.yml
index 56e430602b4fc..4f861ddd58118 100644
--- a/.github/workflows/automatic-backport.yml
+++ b/.github/workflows/automatic-backport.yml
@@ -37,7 +37,7 @@ jobs:
 
       - name: Find PR information
         id: pr-info
-        uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
+        uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea  # v7.0.1
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
         with:
diff --git a/.github/workflows/backport-cli.yml b/.github/workflows/backport-cli.yml
index 3f5ce494f3f31..0ecdfb8e63e04 100644
--- a/.github/workflows/backport-cli.yml
+++ b/.github/workflows/backport-cli.yml
@@ -53,7 +53,7 @@ jobs:
     steps:
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
         id: checkout-for-backport
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: true
           fetch-depth: 0
diff --git a/.github/workflows/basic-tests.yml b/.github/workflows/basic-tests.yml
index 65286fb73d2f2..8b46ddffd7b63 100644
--- a/.github/workflows/basic-tests.yml
+++ b/.github/workflows/basic-tests.yml
@@ -71,7 +71,7 @@ jobs:
       - name: "Cleanup repo"
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
-      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           # Need to fetch all history for selective checks tests
           fetch-depth: 0
@@ -94,18 +94,18 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
         run: ./scripts/ci/prepare_and_cleanup_runner.sh
       - name: Setup pnpm
-        uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0
+        uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2  # v4.0.0
         with:
           version: 9
           run_install: false
       - name: "Setup node"
-        uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
+        uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020  # v4.4.0
         with:
           node-version: 21
           cache: 'pnpm'
@@ -164,7 +164,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Install Breeze"
@@ -193,7 +193,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -210,7 +210,7 @@ jobs:
           python-version: ${{ steps.breeze.outputs.host-python-version }}
           skip-pre-commits: ${{ inputs.skip-pre-commits }}
       - name: Fetch incoming commit ${{ github.sha }} with its parent
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           ref: ${{ github.sha }}
           fetch-depth: 2
@@ -231,7 +231,7 @@ jobs:
     runs-on: ["windows-latest"]
     steps:
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           fetch-depth: 2
           persist-credentials: false
@@ -249,7 +249,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -323,7 +323,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
diff --git a/.github/workflows/ci-amd.yml b/.github/workflows/ci-amd.yml
index 86a921e0d017e..7cfb87c839360 100644
--- a/.github/workflows/ci-amd.yml
+++ b/.github/workflows/ci-amd.yml
@@ -135,13 +135,13 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
         run: ./scripts/ci/prepare_and_cleanup_runner.sh
       - name: Fetch incoming commit ${{ github.sha }} with its parent
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           ref: ${{ github.sha }}
           fetch-depth: 2
@@ -175,11 +175,11 @@ jobs:
     runs-on: ${{ fromJSON(needs.build-info.outputs.amd-runners) }}
     steps:
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Install Python 3.11 as 3.11+ is needed by pin-versions pre-commit"
-        uses: actions/setup-python@7f4fc3e22c37d6ff65e88745f38bd3157c663f7c # v4.9.1
+        uses: actions/setup-python@7f4fc3e22c37d6ff65e88745f38bd3157c663f7c  # v4.9.1
         with:
           python-version: 3.11
           cache: "pip"
@@ -808,13 +808,13 @@ jobs:
       VERBOSE: "true"
     steps:
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
 
       # keep this in sync with go.mod in go-sdk/
       - name: Setup Go
-        uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
+        uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5  # v5.5.0
         with:
           go-version: 1.24
           cache-dependency-path: go-sdk/go.sum
@@ -907,7 +907,7 @@ jobs:
     steps:
       - name: Notify Slack
         id: slack
-        uses: slackapi/slack-github-action@485a9d42d3a73031f12ec201c457e2162c45d02d # v2.0.0
+        uses: slackapi/slack-github-action@485a9d42d3a73031f12ec201c457e2162c45d02d  # v2.0.0
         with:
           method: chat.postMessage
           token: ${{ env.SLACK_BOT_TOKEN }}
@@ -932,7 +932,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -941,12 +941,12 @@ jobs:
         shell: bash
         run: ./scripts/tools/free_up_disk_space.sh
       - name: "Download all test warning artifacts from the current build"
-        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
+        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093  # v4.3.0
         with:
           path: ./artifacts
           pattern: test-warnings-*
       - name: "Setup python"
-        uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
+        uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065  # v5.6.0
         with:
           python-version: ${{ inputs.default-python-version }}
       - name: "Summarize all warnings"
@@ -955,7 +955,7 @@ jobs:
             --pattern "**/warnings-*.txt" \
             --output ./files
       - name: "Upload artifact for summarized warnings"
-        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02  # v4.6.2
         with:
           name: test-summarized-amd-runner-warnings
           path: ./files/warn-summary-*.txt
diff --git a/.github/workflows/ci-arm.yml b/.github/workflows/ci-arm.yml
index 1333694f3bb80..bf54881cd1592 100644
--- a/.github/workflows/ci-arm.yml
+++ b/.github/workflows/ci-arm.yml
@@ -128,13 +128,13 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
         run: ./scripts/ci/prepare_and_cleanup_runner.sh
       - name: Fetch incoming commit ${{ github.sha }} with its parent
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           ref: ${{ github.sha }}
           fetch-depth: 2
@@ -527,13 +527,13 @@ jobs:
       VERBOSE: "true"
     steps:
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
 
       # keep this in sync with go.mod in go-sdk/
       - name: Setup Go
-        uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
+        uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5  # v5.5.0
         with:
           go-version: 1.24
           cache-dependency-path: go-sdk/go.sum
@@ -594,7 +594,7 @@ jobs:
     steps:
       - name: Notify Slack
         id: slack
-        uses: slackapi/slack-github-action@485a9d42d3a73031f12ec201c457e2162c45d02d # v2.0.0
+        uses: slackapi/slack-github-action@485a9d42d3a73031f12ec201c457e2162c45d02d  # v2.0.0
         with:
           method: chat.postMessage
           token: ${{ env.SLACK_BOT_TOKEN }}
diff --git a/.github/workflows/ci-image-build.yml b/.github/workflows/ci-image-build.yml
index c589b7728d668..f58fe1946ca1f 100644
--- a/.github/workflows/ci-image-build.yml
+++ b/.github/workflows/ci-image-build.yml
@@ -117,7 +117,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout target branch"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
diff --git a/.github/workflows/ci-image-checks.yml b/.github/workflows/ci-image-checks.yml
index 1f0cc812ce9cf..ec47528297ec3 100644
--- a/.github/workflows/ci-image-checks.yml
+++ b/.github/workflows/ci-image-checks.yml
@@ -127,7 +127,7 @@ jobs:
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
         if: inputs.canary-run == 'true'
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
         if: inputs.canary-run == 'true'
@@ -173,7 +173,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ inputs.default-python-version }}"
@@ -216,7 +216,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ inputs.default-python-version }}"
@@ -264,7 +264,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ inputs.default-python-version }}"
@@ -295,7 +295,7 @@ jobs:
         # to be responsible for updating it. https://github.com/actions/upload-artifact/issues/506
         if: steps.restore-docs-inventory-cache != 'true' && matrix.flag == '--docs-only'
       - name: "Upload build docs"
-        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02  # v4.6.2
         with:
           name: airflow-docs
           path: './generated/_build'
@@ -327,7 +327,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ inputs.default-python-version }}"
@@ -337,7 +337,7 @@ jobs:
           python: ${{ inputs.default-python-version }}
           use-uv: ${{ inputs.use-uv }}
       - name: "Download docs prepared as artifacts"
-        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
+        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093  # v4.3.0
         with:
           name: airflow-docs
           path: './generated/_build'
@@ -373,7 +373,7 @@ jobs:
           sudo /tmp/aws/install --update
           rm -rf /tmp/aws/
       - name: Configure AWS credentials
-        uses: aws-actions/configure-aws-credentials@010d0da01d0b5a38af31e9c3470dbfdabdecca3a # v4.0.1
+        uses: aws-actions/configure-aws-credentials@010d0da01d0b5a38af31e9c3470dbfdabdecca3a  # v4.0.1
         with:
           aws-access-key-id: ${{ secrets.DOCS_AWS_ACCESS_KEY_ID }}
           aws-secret-access-key: ${{ secrets.DOCS_AWS_SECRET_ACCESS_KEY }}
@@ -402,12 +402,12 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           fetch-depth: 2
           persist-credentials: false
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           repository: "apache/airflow-client-python"
           fetch-depth: 1
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 59c555da56a27..28c8cfae81a07 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -47,17 +47,17 @@ jobs:
       security-events: write
     steps:
       - name: Checkout repository
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
 
       - name: Initialize CodeQL
-        uses: github/codeql-action/init@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
+        uses: github/codeql-action/init@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858  # v3.29.0
         with:
           languages: ${{ matrix.language }}
 
       - name: Autobuild
-        uses: github/codeql-action/autobuild@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
+        uses: github/codeql-action/autobuild@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858  # v3.29.0
 
       - name: Perform CodeQL Analysis
-        uses: github/codeql-action/analyze@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
+        uses: github/codeql-action/analyze@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858  # v3.29.0
diff --git a/.github/workflows/finalize-tests.yml b/.github/workflows/finalize-tests.yml
index d3e2f86435212..fb4b46d9d6256 100644
--- a/.github/workflows/finalize-tests.yml
+++ b/.github/workflows/finalize-tests.yml
@@ -99,7 +99,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           # Needed to perform push action
           persist-credentials: false
@@ -109,14 +109,14 @@ jobs:
         id: constraints-branch
         run: ./scripts/ci/constraints/ci_branch_constraints.sh >> ${GITHUB_OUTPUT}
       - name: Checkout ${{ steps.constraints-branch.outputs.branch }}
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           path: "constraints"
           ref: ${{ steps.constraints-branch.outputs.branch }}
           persist-credentials: true
           fetch-depth: 0
       - name: "Download constraints from the constraints generated by build CI image"
-        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
+        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093  # v4.3.0
         with:
           name: constraints
           path: ./files
diff --git a/.github/workflows/generate-constraints.yml b/.github/workflows/generate-constraints.yml
index 70aa59ebf2f0c..e6548f3240ed8 100644
--- a/.github/workflows/generate-constraints.yml
+++ b/.github/workflows/generate-constraints.yml
@@ -64,7 +64,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -130,7 +130,7 @@ jobs:
             df -H
           done
       - name: "Upload constraint artifacts"
-        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02  # v4.6.2
         with:
           name: constraints
           path: ./files/constraints-*/constraints-*.txt
diff --git a/.github/workflows/helm-tests.yml b/.github/workflows/helm-tests.yml
index c704745e5cf32..65b866785c704 100644
--- a/.github/workflows/helm-tests.yml
+++ b/.github/workflows/helm-tests.yml
@@ -68,7 +68,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ inputs.default-python-version }}"
@@ -93,7 +93,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -136,7 +136,7 @@ jobs:
           breeze release-management generate-issue-content-helm-chart --limit-pr-count 10
           --latest --verbose
       - name: "Upload Helm artifacts"
-        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02  # v4.6.2
         with:
           name: Helm artifacts
           path: ./dist/airflow-*
diff --git a/.github/workflows/integration-system-tests.yml b/.github/workflows/integration-system-tests.yml
index 8649044650c90..6619bedd7c65e 100644
--- a/.github/workflows/integration-system-tests.yml
+++ b/.github/workflows/integration-system-tests.yml
@@ -97,7 +97,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ inputs.default-python-version }}"
@@ -146,7 +146,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ inputs.default-python-version }}"
@@ -190,7 +190,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ inputs.default-python-version }}"
diff --git a/.github/workflows/k8s-tests.yml b/.github/workflows/k8s-tests.yml
index 57342fba4873d..37aa3aa703ce1 100644
--- a/.github/workflows/k8s-tests.yml
+++ b/.github/workflows/k8s-tests.yml
@@ -80,7 +80,7 @@ jobs:
           echo "PYTHON_MAJOR_MINOR_VERSION=${KUBERNETES_COMBO}" | sed 's/-.*//' >> $GITHUB_ENV
           echo "KUBERNETES_VERSION=${KUBERNETES_COMBO}" | sed 's/=[^-]*-/=/'  >> $GITHUB_ENV
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       # env.PYTHON_MAJOR_MINOR_VERSION, env.KUBERNETES_VERSION are set in the previous
@@ -115,7 +115,7 @@ jobs:
       - name: "\
           Upload KinD logs ${{ matrix.executor }}-${{ matrix.kubernetes-combo }}-\
           ${{ matrix.use-standard-naming }}"
-        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02  # v4.6.2
         with:
           name: "\
             kind-logs-${{ matrix.kubernetes-combo }}-${{ matrix.executor }}-\
diff --git a/.github/workflows/news-fragment.yml b/.github/workflows/news-fragment.yml
index 0a2a996c6c513..04e308c306138 100644
--- a/.github/workflows/news-fragment.yml
+++ b/.github/workflows/news-fragment.yml
@@ -30,7 +30,7 @@ jobs:
     if: "contains(github.event.pull_request.labels.*.name, 'airflow3.0:breaking')"
 
     steps:
-      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
           # `towncrier check` runs `git diff --name-only origin/main...`, which
diff --git a/.github/workflows/prod-image-build.yml b/.github/workflows/prod-image-build.yml
index 6e5ae3561d20b..2ba47bf8c4990 100644
--- a/.github/workflows/prod-image-build.yml
+++ b/.github/workflows/prod-image-build.yml
@@ -124,7 +124,7 @@ jobs:
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
         if: inputs.upload-package-artifact == 'true'
       - name: "Checkout target branch"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -171,7 +171,7 @@ jobs:
           breeze release-management prepare-airflow-ctl-distributions --distribution-format wheel
         if: inputs.upload-package-artifact == 'true'
       - name: "Upload prepared packages as artifacts"
-        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02  # v4.6.2
         with:
           name: prod-packages
           path: ./dist
@@ -211,7 +211,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout target branch"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -224,14 +224,14 @@ jobs:
         shell: bash
         run: rm -fv ./dist/* ./docker-context-files/*
       - name: "Download packages prepared as artifacts"
-        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
+        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093  # v4.3.0
         with:
           name: prod-packages
           path: ./docker-context-files
       - name: "Show downloaded packages"
         run: ls -la ./docker-context-files
       - name: "Download constraints"
-        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
+        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093  # v4.3.0
         with:
           name: constraints
           path: ./docker-context-files
diff --git a/.github/workflows/publish-docs-to-s3.yml b/.github/workflows/publish-docs-to-s3.yml
index b9eb26ae86760..6139d33182e50 100644
--- a/.github/workflows/publish-docs-to-s3.yml
+++ b/.github/workflows/publish-docs-to-s3.yml
@@ -127,7 +127,7 @@ jobs:
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       # Check out the repo first to run cleanup - in sub-folder
       - name: "Checkout current version first to clean-up stuff"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
           path: current-version
@@ -138,7 +138,7 @@ jobs:
         # This will take longer as we need to rebuild CI image and it will not use cache
         # but it will build the CI image from the version of Airflow that is used to check out things
       - name: "Checkout ${{ inputs.ref }} "
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
           ref: ${{ inputs.ref }}
@@ -167,7 +167,7 @@ jobs:
         run: >
           breeze release-management publish-docs --override-versioned --run-in-parallel ${INCLUDE_DOCS}
       - name: "Upload build docs"
-        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02  # v4.6.2
         with:
           name: airflow-docs
           path: /mnt/airflow-site
@@ -197,7 +197,7 @@ jobs:
         # This will take longer as we need to rebuild CI image and it will not use cache
         # but it will build the CI image from the version of Airflow that is used to check out things
       - name: "Checkout ${{ inputs.ref }} "
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -207,7 +207,7 @@ jobs:
         with:
           use-uv: ${{ inputs.use-uv }}
       - name: "Download docs prepared as artifacts"
-        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
+        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093  # v4.3.0
         with:
           name: airflow-docs
           path: /mnt/airflow-site
@@ -234,7 +234,7 @@ jobs:
           sudo /tmp/aws/install --update
           rm -rf /tmp/aws/
       - name: Configure AWS credentials
-        uses: aws-actions/configure-aws-credentials@010d0da01d0b5a38af31e9c3470dbfdabdecca3a # v4.0.1
+        uses: aws-actions/configure-aws-credentials@010d0da01d0b5a38af31e9c3470dbfdabdecca3a  # v4.0.1
         with:
           aws-access-key-id: ${{ secrets.DOCS_AWS_ACCESS_KEY_ID }}
           aws-secret-access-key: ${{ secrets.DOCS_AWS_SECRET_ACCESS_KEY }}
diff --git a/.github/workflows/push-image-cache.yml b/.github/workflows/push-image-cache.yml
index 01bbbeb16b3fa..b523577b46c99 100644
--- a/.github/workflows/push-image-cache.yml
+++ b/.github/workflows/push-image-cache.yml
@@ -113,7 +113,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -184,7 +184,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -196,7 +196,7 @@ jobs:
       - name: "Cleanup dist and context file"
         run: rm -fv ./dist/* ./docker-context-files/*
       - name: "Download packages prepared as artifacts"
-        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
+        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093  # v4.3.0
         with:
           name: prod-packages
           path: ./docker-context-files
diff --git a/.github/workflows/recheck-old-bug-report.yml b/.github/workflows/recheck-old-bug-report.yml
index 61a2691c087fb..c245f73923216 100644
--- a/.github/workflows/recheck-old-bug-report.yml
+++ b/.github/workflows/recheck-old-bug-report.yml
@@ -28,7 +28,7 @@ jobs:
   recheck-old-bug-report:
     runs-on: ["ubuntu-22.04"]
     steps:
-      - uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # v9.1.0
+      - uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639  # v9.1.0
         with:
           only-issue-labels: 'kind:bug'
           stale-issue-label: 'Stale Bug Report'
diff --git a/.github/workflows/release_dockerhub_image.yml b/.github/workflows/release_dockerhub_image.yml
index 45c477d9eff54..2499e521d74a3 100644
--- a/.github/workflows/release_dockerhub_image.yml
+++ b/.github/workflows/release_dockerhub_image.yml
@@ -83,7 +83,7 @@ jobs:
           docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
 
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
diff --git a/.github/workflows/release_single_dockerhub_image.yml b/.github/workflows/release_single_dockerhub_image.yml
index 8ddbef95270f7..fd572adbabab1 100644
--- a/.github/workflows/release_single_dockerhub_image.yml
+++ b/.github/workflows/release_single_dockerhub_image.yml
@@ -76,7 +76,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -148,7 +148,7 @@ jobs:
         shell: bash
         run: find ./dist -name '*.json'
       - name: "Upload metadata artifact ${{ env.ARTIFACT_NAME }}"
-        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02  # v4.6.2
         with:
           name: ${{ env.ARTIFACT_NAME }}
           path: ./dist/metadata-*
@@ -174,7 +174,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare and cleanup runner"
@@ -197,7 +197,7 @@ jobs:
           ACTOR: ${{ github.actor }}
         run: echo "${GITHUB_TOKEN}" | docker login ghcr.io -u ${ACTOR} --password-stdin
       - name: "Download metadata artifacts"
-        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
+        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093  # v4.3.0
         with:
           path: ./dist
           pattern: metadata-${{ inputs.pythonVersion }}-*
diff --git a/.github/workflows/run-unit-tests.yml b/.github/workflows/run-unit-tests.yml
index da2b40eaa945d..035248113dac1 100644
--- a/.github/workflows/run-unit-tests.yml
+++ b/.github/workflows/run-unit-tests.yml
@@ -167,7 +167,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ matrix.python-version }}"
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
index 49987b11feef6..5724a17314aec 100644
--- a/.github/workflows/stale.yml
+++ b/.github/workflows/stale.yml
@@ -29,7 +29,7 @@ jobs:
   stale:
     runs-on: ["ubuntu-22.04"]
     steps:
-      - uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # v9.1.0
+      - uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639  # v9.1.0
         with:
           stale-pr-message: >
             This pull request has been automatically marked as stale because it has not had
diff --git a/.github/workflows/test-providers.yml b/.github/workflows/test-providers.yml
index 88a54be3c9d6b..279adf0c303e7 100644
--- a/.github/workflows/test-providers.yml
+++ b/.github/workflows/test-providers.yml
@@ -89,7 +89,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ inputs.default-python-version }}"
@@ -187,7 +187,7 @@ jobs:
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
       - name: "Prepare breeze & CI image: ${{ matrix.compat.python-version }}"
diff --git a/contributing-docs/08_static_code_checks.rst b/contributing-docs/08_static_code_checks.rst
index 1ce799ad6f38e..2081419349f2c 100644
--- a/contributing-docs/08_static_code_checks.rst
+++ b/contributing-docs/08_static_code_checks.rst
@@ -548,7 +548,7 @@ manually by running:
 .. code-block:: bash
 
     export GITHUB_TOKEN=YOUR_GITHUB_TOKEN
-    pre-commit run -c .github/.pre-commit-config.yaml --all-files --hook-stage manual
+    pre-commit run -c .github/.pre-commit-config.yaml --all-files --hook-stage manual --verbose
 
 
 Mypy checks
diff --git a/yamllint-config.yml b/yamllint-config.yml
index 8c4bd087ecee6..a88c0eab9fe16 100644
--- a/yamllint-config.yml
+++ b/yamllint-config.yml
@@ -21,7 +21,3 @@ extends: default
 rules:
   line-length:
     max: 110
-
-  comments:
-    ignore:
-      - /.github/workflows/*.yml

From 5c8c729ba0103c57a0798f328550b44d9a43e2c5 Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Tue, 24 Jun 2025 10:42:57 +0100
Subject: [PATCH 131/381] Add gh workflow run url to publish workflows (#52138)

* Add gh workflow run url to publish workflows

* Add gh workflow run url to publish workflows
---
 dev/breeze/src/airflow_breeze/utils/gh_workflow_utils.py | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/dev/breeze/src/airflow_breeze/utils/gh_workflow_utils.py b/dev/breeze/src/airflow_breeze/utils/gh_workflow_utils.py
index 4a2cd0d7ef881..1b1e3dabab8a4 100644
--- a/dev/breeze/src/airflow_breeze/utils/gh_workflow_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/gh_workflow_utils.py
@@ -97,7 +97,13 @@ def get_workflow_run_id(workflow_name: str, repo: str) -> int:
         get_console().print("[red]No workflow runs found.[/red]")
         sys.exit(1)
 
-    return json.loads(runs_data)[0]["databaseId"]
+    run_id = json.loads(runs_data)[0].get("databaseId")
+
+    get_console().print(
+        f"[blue]Running workflow {workflow_name} at https://github.com/{repo}/actions/runs/{run_id}[/blue]",
+    )
+
+    return run_id
 
 
 def get_workflow_run_info(run_id: str, repo: str, fields: str) -> dict:

From d424acedbdfbc71346d65a08abcc60d3df7d6d7a Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Tue, 24 Jun 2025 12:09:08 +0200
Subject: [PATCH 132/381] Warn when GITHUB_TOKEN is set when running workflows.
 (#52144)

---
 .../src/airflow_breeze/commands/workflow_commands.py  | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/dev/breeze/src/airflow_breeze/commands/workflow_commands.py b/dev/breeze/src/airflow_breeze/commands/workflow_commands.py
index 5f1225ad93f92..476d0cfe9e7d7 100644
--- a/dev/breeze/src/airflow_breeze/commands/workflow_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/workflow_commands.py
@@ -17,6 +17,7 @@
 from __future__ import annotations
 
 import json
+import os
 import re
 import sys
 
@@ -75,6 +76,16 @@ def workflow_run_publish(
     doc_packages: tuple[str, ...],
     skip_write_to_stable_folder: bool = False,
 ):
+    if os.environ.get("GITHUB_TOKEN", ""):
+        get_console().print("\n[warning]Your authentication will use GITHUB_TOKEN environment variable.")
+        get_console().print(
+            "\nThis might not be what you want unless your token has "
+            "sufficient permissions to trigger workflows."
+        )
+        get_console().print(
+            "If you remove GITHUB_TOKEN, workflow_run will use the authentication you already "
+            "set-up with `gh auth login`.\n"
+        )
     get_console().print(
         f"[blue]Validating ref: {ref}[/blue]",
     )

From ad19251f74b63447202c74a1e9849d9eb8b25fc8 Mon Sep 17 00:00:00 2001
From: Yeonguk Choo <choo121600@gmail.com>
Date: Tue, 24 Jun 2025 19:17:35 +0900
Subject: [PATCH 133/381] Remove pytestmark from Pagerduty test files (#52146)

* Remove pytestmark from Pagerduty test files

* Add PagerDuty provider to pre-commit

* fix: airflow.sdk error
---
 .pre-commit-config.yaml                       |  1 +
 .../unit/pagerduty/hooks/test_pagerduty.py    |  3 ---
 .../pagerduty/hooks/test_pagerduty_events.py  |  2 --
 .../pagerduty/notifications/test_pagerduty.py | 22 ++++++-------------
 4 files changed, 8 insertions(+), 20 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 73265015836b6..5b6f496c35b9a 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -623,6 +623,7 @@ repos:
             ^providers/openai/.*\.py$|
             ^providers/openfaas/.*\.py$|
             ^providers/oracle/.*\.py$|
+            ^providers/pagerduty/.*\.py$|
             ^providers/pgvector/.*\.py$|
             ^providers/pinecone/.*\.py$|
             ^providers/postgres/.*\.py$|
diff --git a/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty.py b/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty.py
index e970e3a06b8db..e7ca5451810ad 100644
--- a/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty.py
+++ b/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty.py
@@ -22,9 +22,6 @@
 from airflow.models import Connection
 from airflow.providers.pagerduty.hooks.pagerduty import PagerdutyHook
 
-pytestmark = pytest.mark.db_test
-
-
 DEFAULT_CONN_ID = "pagerduty_default"
 
 
diff --git a/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty_events.py b/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty_events.py
index 682194b51df0f..8d1136900ccd8 100644
--- a/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty_events.py
+++ b/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty_events.py
@@ -22,8 +22,6 @@
 from airflow.models import Connection
 from airflow.providers.pagerduty.hooks.pagerduty_events import PagerdutyEventsHook
 
-pytestmark = pytest.mark.db_test
-
 DEFAULT_CONN_ID = "pagerduty_events_default"
 
 
diff --git a/providers/pagerduty/tests/unit/pagerduty/notifications/test_pagerduty.py b/providers/pagerduty/tests/unit/pagerduty/notifications/test_pagerduty.py
index 69db5edcfb4bc..47394077a7779 100644
--- a/providers/pagerduty/tests/unit/pagerduty/notifications/test_pagerduty.py
+++ b/providers/pagerduty/tests/unit/pagerduty/notifications/test_pagerduty.py
@@ -19,26 +19,20 @@
 
 from unittest import mock
 
-import pytest
-
+from airflow import DAG
 from airflow.providers.pagerduty.hooks.pagerduty_events import PagerdutyEventsHook
 from airflow.providers.pagerduty.notifications.pagerduty import (
     PagerdutyNotifier,
     send_pagerduty_notification,
 )
-from airflow.providers.standard.operators.empty import EmptyOperator
-
-pytestmark = pytest.mark.db_test
-
 
 PAGERDUTY_API_DEFAULT_CONN_ID = PagerdutyEventsHook.default_conn_name
 
 
 class TestPagerdutyNotifier:
     @mock.patch("airflow.providers.pagerduty.notifications.pagerduty.PagerdutyEventsHook")
-    def test_notifier(self, mock_pagerduty_event_hook, dag_maker):
-        with dag_maker("test_notifier") as dag:
-            EmptyOperator(task_id="task1")
+    def test_notifier(self, mock_pagerduty_event_hook):
+        dag = DAG("test_notifier")
         notifier = send_pagerduty_notification(summary="DISK at 99%", severity="critical", action="trigger")
         notifier({"dag": dag})
         mock_pagerduty_event_hook.return_value.send_event.assert_called_once_with(
@@ -56,9 +50,8 @@ def test_notifier(self, mock_pagerduty_event_hook, dag_maker):
         )
 
     @mock.patch("airflow.providers.pagerduty.notifications.pagerduty.PagerdutyEventsHook")
-    def test_notifier_with_notifier_class(self, mock_pagerduty_event_hook, dag_maker):
-        with dag_maker("test_notifier") as dag:
-            EmptyOperator(task_id="task1")
+    def test_notifier_with_notifier_class(self, mock_pagerduty_event_hook):
+        dag = DAG("test_notifier")
         notifier = PagerdutyNotifier(summary="DISK at 99%", severity="critical", action="trigger")
         notifier({"dag": dag})
         mock_pagerduty_event_hook.return_value.send_event.assert_called_once_with(
@@ -76,9 +69,8 @@ def test_notifier_with_notifier_class(self, mock_pagerduty_event_hook, dag_maker
         )
 
     @mock.patch("airflow.providers.pagerduty.notifications.pagerduty.PagerdutyEventsHook")
-    def test_notifier_templated(self, mock_pagerduty_event_hook, dag_maker):
-        with dag_maker("test_notifier") as dag:
-            EmptyOperator(task_id="task1")
+    def test_notifier_templated(self, mock_pagerduty_event_hook):
+        dag = DAG("test_notifier")
 
         notifier = PagerdutyNotifier(
             summary="DISK at 99% {{dag.dag_id}}",

From 724c3a6eadd2e5174121a8b5984b3b08a916e1bf Mon Sep 17 00:00:00 2001
From: Dominik <105610163+dominikhei@users.noreply.github.com>
Date: Tue, 24 Jun 2025 12:18:35 +0200
Subject: [PATCH 134/381] Removed pytestmark db_test from the elasticsearch
 providers tests (#52139)

---
 .../elasticsearch/log/test_es_task_handler.py | 28 +++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)

diff --git a/providers/elasticsearch/tests/unit/elasticsearch/log/test_es_task_handler.py b/providers/elasticsearch/tests/unit/elasticsearch/log/test_es_task_handler.py
index 26849e9f7e20d..be3e36c8f90f7 100644
--- a/providers/elasticsearch/tests/unit/elasticsearch/log/test_es_task_handler.py
+++ b/providers/elasticsearch/tests/unit/elasticsearch/log/test_es_task_handler.py
@@ -51,8 +51,6 @@
 from unit.elasticsearch.log.elasticmock import elasticmock
 from unit.elasticsearch.log.elasticmock.utilities import SearchFailedException
 
-pytestmark = pytest.mark.db_test
-
 ES_PROVIDER_YAML_FILE = AIRFLOW_PROVIDERS_ROOT_PATH / "elasticsearch" / "provider.yaml"
 
 
@@ -202,6 +200,7 @@ def test_client_with_patterns(self):
         )
         assert handler.index_patterns == patterns
 
+    @pytest.mark.db_test
     def test_read(self, ti):
         ts = pendulum.now()
         logs, metadatas = self.es_task_handler.read(
@@ -227,6 +226,7 @@ def test_read(self, ti):
         assert metadata["offset"] == "1"
         assert timezone.parse(metadata["last_log_timestamp"]) > ts
 
+    @pytest.mark.db_test
     def test_read_with_patterns(self, ti):
         ts = pendulum.now()
         with mock.patch.object(self.es_task_handler, "index_patterns", new="test_*,other_*"):
@@ -253,6 +253,7 @@ def test_read_with_patterns(self, ti):
         assert metadata["offset"] == "1"
         assert timezone.parse(metadata["last_log_timestamp"]) > ts
 
+    @pytest.mark.db_test
     def test_read_with_patterns_no_match(self, ti):
         ts = pendulum.now()
         with mock.patch.object(self.es_task_handler, "index_patterns", new="test_other_*,test_another_*"):
@@ -276,6 +277,7 @@ def test_read_with_patterns_no_match(self, ti):
         # last_log_timestamp won't change if no log lines read.
         assert timezone.parse(metadata["last_log_timestamp"]) == ts
 
+    @pytest.mark.db_test
     def test_read_with_missing_index(self, ti):
         ts = pendulum.now()
         with mock.patch.object(self.es_task_handler, "index_patterns", new="nonexistent,test_*"):
@@ -286,6 +288,7 @@ def test_read_with_missing_index(self, ti):
                     {"offset": 0, "last_log_timestamp": str(ts), "end_of_log": False},
                 )
 
+    @pytest.mark.db_test
     @pytest.mark.parametrize("seconds", [3, 6])
     def test_read_missing_logs(self, seconds, create_task_instance):
         """
@@ -330,6 +333,7 @@ def test_read_missing_logs(self, seconds, create_task_instance):
             assert metadatas[0]["offset"] == "0"
             assert timezone.parse(metadatas[0]["last_log_timestamp"]) == ts
 
+    @pytest.mark.db_test
     def test_read_with_match_phrase_query(self, ti):
         similar_log_id = (
             f"{TestElasticsearchTaskHandler.TASK_ID}-"
@@ -374,6 +378,7 @@ def test_read_with_match_phrase_query(self, ti):
         assert metadata["offset"] == "1"
         assert timezone.parse(metadata["last_log_timestamp"]) > ts
 
+    @pytest.mark.db_test
     def test_read_with_none_metadata(self, ti):
         logs, metadatas = self.es_task_handler.read(ti, 1)
         if AIRFLOW_V_3_0_PLUS:
@@ -395,6 +400,7 @@ def test_read_with_none_metadata(self, ti):
         assert metadata["offset"] == "1"
         assert timezone.parse(metadata["last_log_timestamp"]) < pendulum.now()
 
+    @pytest.mark.db_test
     def test_read_nonexistent_log(self, ti):
         ts = pendulum.now()
         # In ElasticMock, search is going to return all documents with matching index
@@ -420,6 +426,7 @@ def test_read_nonexistent_log(self, ti):
         # last_log_timestamp won't change if no log lines read.
         assert timezone.parse(metadata["last_log_timestamp"]) == ts
 
+    @pytest.mark.db_test
     def test_read_with_empty_metadata(self, ti):
         ts = pendulum.now()
         logs, metadatas = self.es_task_handler.read(ti, 1, {})
@@ -466,6 +473,7 @@ def test_read_with_empty_metadata(self, ti):
         # if not last_log_timestamp is provided.
         assert timezone.parse(metadata["last_log_timestamp"]) > ts
 
+    @pytest.mark.db_test
     def test_read_timeout(self, ti):
         ts = pendulum.now().subtract(minutes=5)
 
@@ -498,6 +506,7 @@ def test_read_timeout(self, ti):
         assert str(offset) == metadata["offset"]
         assert timezone.parse(metadata["last_log_timestamp"]) == ts
 
+    @pytest.mark.db_test
     def test_read_as_download_logs(self, ti):
         ts = pendulum.now()
         logs, metadatas = self.es_task_handler.read(
@@ -529,6 +538,7 @@ def test_read_as_download_logs(self, ti):
         assert metadata["offset"] == "1"
         assert timezone.parse(metadata["last_log_timestamp"]) > ts
 
+    @pytest.mark.db_test
     def test_read_raises(self, ti):
         with mock.patch.object(self.es_task_handler.log, "exception") as mock_exception:
             with mock.patch.object(self.es_task_handler.client, "search") as mock_execute:
@@ -552,10 +562,12 @@ def test_read_raises(self, ti):
         assert metadata["offset"] == "0"
         assert not metadata["end_of_log"]
 
+    @pytest.mark.db_test
     def test_set_context(self, ti):
         self.es_task_handler.set_context(ti)
         assert self.es_task_handler.mark_end_on_close
 
+    @pytest.mark.db_test
     def test_set_context_w_json_format_and_write_stdout(self, ti):
         formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
         self.es_task_handler.formatter = formatter
@@ -563,6 +575,7 @@ def test_set_context_w_json_format_and_write_stdout(self, ti):
         self.es_task_handler.json_format = True
         self.es_task_handler.set_context(ti)
 
+    @pytest.mark.db_test
     def test_read_with_json_format(self, ti):
         ts = pendulum.now()
         formatter = logging.Formatter(
@@ -592,6 +605,7 @@ def test_read_with_json_format(self, ti):
         else:
             assert logs[0][0][1] == expected_message
 
+    @pytest.mark.db_test
     def test_read_with_json_format_with_custom_offset_and_host_fields(self, ti):
         ts = pendulum.now()
         formatter = logging.Formatter(
@@ -624,6 +638,7 @@ def test_read_with_json_format_with_custom_offset_and_host_fields(self, ti):
         else:
             assert logs[0][0][1] == expected_message
 
+    @pytest.mark.db_test
     def test_read_with_custom_offset_and_host_fields(self, ti):
         ts = pendulum.now()
         # Delete the existing log entry as it doesn't have the new offset and host fields
@@ -648,6 +663,7 @@ def test_read_with_custom_offset_and_host_fields(self, ti):
         else:
             assert self.test_message == logs[0][0][1]
 
+    @pytest.mark.db_test
     def test_close(self, ti):
         formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
         self.es_task_handler.formatter = formatter
@@ -664,6 +680,7 @@ def test_close(self, ti):
             assert log_line.endswith(self.end_of_log_mark.strip())
         assert self.es_task_handler.closed
 
+    @pytest.mark.db_test
     def test_close_no_mark_end(self, ti):
         ti.raw = True
         self.es_task_handler.set_context(ti)
@@ -674,6 +691,7 @@ def test_close_no_mark_end(self, ti):
             assert self.end_of_log_mark not in log_file.read()
         assert self.es_task_handler.closed
 
+    @pytest.mark.db_test
     def test_close_closed(self, ti):
         self.es_task_handler.closed = True
         self.es_task_handler.set_context(ti)
@@ -683,6 +701,7 @@ def test_close_closed(self, ti):
         ) as log_file:
             assert len(log_file.read()) == 0
 
+    @pytest.mark.db_test
     def test_close_with_no_handler(self, ti):
         self.es_task_handler.set_context(ti)
         self.es_task_handler.handler = None
@@ -693,6 +712,7 @@ def test_close_with_no_handler(self, ti):
             assert len(log_file.read()) == 0
         assert self.es_task_handler.closed
 
+    @pytest.mark.db_test
     def test_close_with_no_stream(self, ti):
         self.es_task_handler.set_context(ti)
         self.es_task_handler.handler.stream = None
@@ -712,6 +732,7 @@ def test_close_with_no_stream(self, ti):
             assert self.end_of_log_mark in log_file.read()
         assert self.es_task_handler.closed
 
+    @pytest.mark.db_test
     def test_render_log_id(self, ti):
         assert self.es_task_handler._render_log_id(ti, 1) == self.LOG_ID
 
@@ -722,6 +743,7 @@ def test_clean_date(self):
         clean_logical_date = self.es_task_handler._clean_date(datetime(2016, 7, 8, 9, 10, 11, 12))
         assert clean_logical_date == "2016_07_08T09_10_11_000012"
 
+    @pytest.mark.db_test
     @pytest.mark.parametrize(
         "json_format, es_frontend, expected_url",
         [
@@ -781,6 +803,7 @@ def test_supports_external_link(self, frontend, expected):
         self.es_task_handler.frontend = frontend
         assert self.es_task_handler.supports_external_link == expected
 
+    @pytest.mark.db_test
     @mock.patch("sys.__stdout__", new_callable=StringIO)
     def test_dynamic_offset(self, stdout_mock, ti, time_machine):
         # arrange
@@ -843,6 +866,7 @@ def test_filename_template_for_backward_compatibility(self):
             filename_template=None,
         )
 
+    @pytest.mark.db_test
     def test_write_to_es(self, ti):
         self.es_task_handler.write_to_es = True
         self.es_task_handler.json_format = True

From 14c159b68d3f792794ba048ffa0ae0e79ab12a78 Mon Sep 17 00:00:00 2001
From: Yeonguk Choo <choo121600@gmail.com>
Date: Tue, 24 Jun 2025 19:19:55 +0900
Subject: [PATCH 135/381] Remove pytestmark and add db_test marker to relevant
 tests (#52140)

---
 .../opsgenie/tests/unit/opsgenie/hooks/test_opsgenie.py      | 4 ++--
 .../tests/unit/opsgenie/notifications/test_opsgenie.py       | 5 +++--
 .../opsgenie/tests/unit/opsgenie/typing/test_opsgenie.py     | 4 ----
 3 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/providers/opsgenie/tests/unit/opsgenie/hooks/test_opsgenie.py b/providers/opsgenie/tests/unit/opsgenie/hooks/test_opsgenie.py
index ed166f3c97192..0aafbfaaaa90d 100644
--- a/providers/opsgenie/tests/unit/opsgenie/hooks/test_opsgenie.py
+++ b/providers/opsgenie/tests/unit/opsgenie/hooks/test_opsgenie.py
@@ -26,8 +26,6 @@
 from airflow.models import Connection
 from airflow.providers.opsgenie.hooks.opsgenie import OpsgenieAlertHook
 
-pytestmark = pytest.mark.db_test
-
 
 class TestOpsgenieAlertHook:
     conn_id = "opsgenie_conn_id_test"
@@ -83,6 +81,7 @@ def test_get_api_key(self):
         api_key = hook._get_api_key()
         assert api_key == "eb243592-faa2-4ba2-a551q-1afdf565c889"
 
+    @pytest.mark.db_test
     def test_get_conn_defaults_host(self):
         hook = OpsgenieAlertHook()
         assert hook.get_conn().api_client.configuration.host == "https://api.opsgenie.com"
@@ -108,6 +107,7 @@ def test_verify_api_key_set(self):
             == "eb243592-faa2-4ba2-a551q-1afdf565c889"
         )
 
+    @pytest.mark.db_test
     def test_create_alert_api_key_not_set(self):
         hook = OpsgenieAlertHook()
         with pytest.raises(AuthenticationException):
diff --git a/providers/opsgenie/tests/unit/opsgenie/notifications/test_opsgenie.py b/providers/opsgenie/tests/unit/opsgenie/notifications/test_opsgenie.py
index feb397e4dcf2a..9f93ba7e6091b 100644
--- a/providers/opsgenie/tests/unit/opsgenie/notifications/test_opsgenie.py
+++ b/providers/opsgenie/tests/unit/opsgenie/notifications/test_opsgenie.py
@@ -25,8 +25,6 @@
 from airflow.providers.opsgenie.notifications.opsgenie import OpsgenieNotifier, send_opsgenie_notification
 from airflow.providers.standard.operators.empty import EmptyOperator
 
-pytestmark = pytest.mark.db_test
-
 
 class TestOpsgenieNotifier:
     _config = {
@@ -76,6 +74,7 @@ class TestOpsgenieNotifier:
     }
 
     @mock.patch.object(OpsgenieAlertHook, "get_conn")
+    @pytest.mark.db_test
     def test_notifier(self, mock_opsgenie_alert_hook, dag_maker):
         with dag_maker("test_notifier") as dag:
             EmptyOperator(task_id="task1")
@@ -84,6 +83,7 @@ def test_notifier(self, mock_opsgenie_alert_hook, dag_maker):
         mock_opsgenie_alert_hook.return_value.create_alert.assert_called_once_with(self.expected_payload_dict)
 
     @mock.patch.object(OpsgenieAlertHook, "get_conn")
+    @pytest.mark.db_test
     def test_notifier_with_notifier_class(self, mock_opsgenie_alert_hook, dag_maker):
         with dag_maker("test_notifier") as dag:
             EmptyOperator(task_id="task1")
@@ -92,6 +92,7 @@ def test_notifier_with_notifier_class(self, mock_opsgenie_alert_hook, dag_maker)
         mock_opsgenie_alert_hook.return_value.create_alert.assert_called_once_with(self.expected_payload_dict)
 
     @mock.patch.object(OpsgenieAlertHook, "get_conn")
+    @pytest.mark.db_test
     def test_notifier_templated(self, mock_opsgenie_alert_hook, dag_maker):
         dag_id = "test_notifier"
         with dag_maker(dag_id) as dag:
diff --git a/providers/opsgenie/tests/unit/opsgenie/typing/test_opsgenie.py b/providers/opsgenie/tests/unit/opsgenie/typing/test_opsgenie.py
index b782305187fb9..c7f17dbae4008 100644
--- a/providers/opsgenie/tests/unit/opsgenie/typing/test_opsgenie.py
+++ b/providers/opsgenie/tests/unit/opsgenie/typing/test_opsgenie.py
@@ -17,12 +17,8 @@
 # under the License.
 from __future__ import annotations
 
-import pytest
-
 from airflow.providers.opsgenie.typing.opsgenie import CreateAlertPayload
 
-pytestmark = pytest.mark.db_test
-
 
 class TestCreateAlertPayload:
     def test_create_alert_payload_required_keys(self):

From c71566b888b7aa48048649feccc4bed9bbf8b02a Mon Sep 17 00:00:00 2001
From: Ankit Chaurasia <8670962+sunank200@users.noreply.github.com>
Date: Tue, 24 Jun 2025 17:33:50 +0545
Subject: [PATCH 136/381] =?UTF-8?q?Fix=20Task=20Instance=20=E2=80=9CNo=20S?=
 =?UTF-8?q?tatus=E2=80=9D=20Filter=20(#51880)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* Support no_status alias in TaskInstance state filter for REST API

* Allow 'no_status' state filter and include no_status in valid state list; skip date filters when filtering for null state

* Fix NULL-state filtering in get_mapped_task_instances by coalescing date fields

* Refactor datetime_range_filter_factory: coalesce only start_date and end_date filters

* Add a test
---
 .../airflow/api_fastapi/common/parameters.py  |  9 +++++---
 .../routes/public/test_task_instances.py      | 21 +++++++++++++++++++
 2 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/airflow-core/src/airflow/api_fastapi/common/parameters.py b/airflow-core/src/airflow/api_fastapi/common/parameters.py
index 7185fe6dafe47..65b2c77b8959b 100644
--- a/airflow-core/src/airflow/api_fastapi/common/parameters.py
+++ b/airflow-core/src/airflow/api_fastapi/common/parameters.py
@@ -37,7 +37,7 @@
 from fastapi import Depends, HTTPException, Query, status
 from pendulum.parsing.exceptions import ParserError
 from pydantic import AfterValidator, BaseModel, NonNegativeInt
-from sqlalchemy import Column, and_, case, or_
+from sqlalchemy import Column, and_, case, func, or_
 from sqlalchemy.inspection import inspect
 
 from airflow.api_fastapi.core_api.base import OrmClause
@@ -493,9 +493,12 @@ def depends_datetime(
         lower_bound: datetime | None = Query(alias=f"{filter_name}_gte", default=None),
         upper_bound: datetime | None = Query(alias=f"{filter_name}_lte", default=None),
     ) -> RangeFilter:
+        attr = getattr(model, attribute_name or filter_name)
+        if filter_name in ("start_date", "end_date"):
+            attr = func.coalesce(attr, func.now())
         return RangeFilter(
             Range(lower_bound=lower_bound, upper_bound=upper_bound),
-            getattr(model, attribute_name or filter_name),
+            attr,
         )
 
     return depends_datetime
@@ -610,7 +613,7 @@ def _transform_ti_states(states: list[str] | None) -> list[TaskInstanceState | N
         return None
 
     try:
-        return [None if s in ("none", None) else TaskInstanceState(s) for s in states]
+        return [None if s in ("no_status", "none", None) else TaskInstanceState(s) for s in states]
     except ValueError:
         raise HTTPException(
             status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
diff --git a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_task_instances.py b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_task_instances.py
index 1e2a4b64601c0..9dd472e9a53a2 100644
--- a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_task_instances.py
+++ b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_task_instances.py
@@ -964,6 +964,19 @@ class TestGetTaskInstances(TestTaskInstanceEndpoint):
                 3,
                 id="test state filter",
             ),
+            pytest.param(
+                [
+                    {"state": State.RUNNING},
+                    {"state": State.QUEUED},
+                    {"state": State.SUCCESS},
+                    {"state": State.NONE},
+                ],
+                False,
+                ("/dags/example_python_operator/dagRuns/TEST_DAG_RUN_ID/taskInstances"),
+                {"state": ["no_status"]},
+                1,
+                id="test no_status state filter",
+            ),
             pytest.param(
                 [
                     {"state": State.NONE},
@@ -977,6 +990,14 @@ class TestGetTaskInstances(TestTaskInstanceEndpoint):
                 4,
                 id="test null states with no filter",
             ),
+            pytest.param(
+                [{"start_date": None, "end_date": None}],
+                True,
+                "/dags/example_python_operator/dagRuns/TEST_DAG_RUN_ID/taskInstances",
+                {"start_date_gte": DEFAULT_DATETIME_STR_1},
+                1,
+                id="test start_date coalesce with null",
+            ),
             pytest.param(
                 [
                     {"pool": "test_pool_1"},

From bd4bfa73fe03304831b934adc7d3703ecef6e679 Mon Sep 17 00:00:00 2001
From: Shaunak Sontakke <ssontakke@users.noreply.github.com>
Date: Tue, 24 Jun 2025 19:04:08 +0530
Subject: [PATCH 137/381] Add Pattern to companies using Airflow (#52149)

Pattern is The Premier Accelerator for Global Ecommerce
---
 INTHEWILD.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/INTHEWILD.md b/INTHEWILD.md
index 8e98bdf1000c0..630ea6542277a 100644
--- a/INTHEWILD.md
+++ b/INTHEWILD.md
@@ -392,6 +392,7 @@ Currently, **officially** using Airflow:
 1. [Paradigma Digital](https://www.paradigmadigital.com/) [[@paradigmadigital](https://github.com/paradigmadigital)]
 1. [Paraná Banco](https://paranabanco.com.br/) [[@lopesdiego12](https://github.com/lopesdiego12/)]
 1. [Pathstream](https://pathstream.com) [[@pJackDanger](https://github.com/JackDanger)]
+1. [Pattern](https://pattern.com) [[@patterninc](https://github.com/patterninc)]
 1. [Paxful](https://paxful.com) [[@ne1r0n](https://github.com/ne1r0n)]
 1. [PayFit](https://payfit.com) [[@pcorbel](https://github.com/pcorbel)]
 1. [PAYMILL](https://www.paymill.com/) [[@paymill](https://github.com/paymill) & [@matthiashuschle](https://github.com/matthiashuschle)]

From e1d9be482ac567d038c9f78d89f0a7c944139585 Mon Sep 17 00:00:00 2001
From: Wei-Yu Chen <60685934+Jasperora@users.noreply.github.com>
Date: Tue, 24 Jun 2025 22:16:02 +0800
Subject: [PATCH 138/381] Add a button to collapse/expand the information panel
 (#51946)

* Add a button to collapse/expand the information panel for better visualizing DAG

* remove transform of IconButton

* change Box width

* add translations for aria-label (en, zh-TW)

* change translations for zh-TW
---
 .../ui/public/i18n/locales/en/common.json     |   2 +
 .../ui/public/i18n/locales/zh-TW/common.json  |   2 +
 .../ui/src/layouts/Details/DetailsLayout.tsx  | 131 ++++++++++++------
 3 files changed, 92 insertions(+), 43 deletions(-)

diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/en/common.json b/airflow-core/src/airflow/ui/public/i18n/locales/en/common.json
index cb83efcedb9d1..6d1c8cc4d8244 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/en/common.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/en/common.json
@@ -17,6 +17,7 @@
     "auditLog": "Audit Log",
     "xcoms": "XComs"
   },
+  "collapseDetailsPanel": "Collapse Details Panel",
   "createdAssetEvent_one": "Created Asset Event",
   "createdAssetEvent_other": "Created Asset Events",
   "dag_one": "Dag",
@@ -144,6 +145,7 @@
     "users": "Users"
   },
   "selectLanguage": "Select Language",
+  "showDetailsPanel": "Show Details Panel",
   "sourceAssetEvent_one": "Source Asset Event",
   "sourceAssetEvent_other": "Source Asset Events",
   "startDate": "Start Date",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/common.json b/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/common.json
index 7df78a954dd47..8ffe50696d106 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/common.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/common.json
@@ -17,6 +17,7 @@
     "auditLog": "審計日誌",
     "xcoms": "XComs"
   },
+  "collapseDetailsPanel": "收起詳細資訊",
   "createdAssetEvent_one": "已建立資源事件",
   "createdAssetEvent_other": "已建立資源事件",
   "dag_one": "Dag",
@@ -144,6 +145,7 @@
     "users": "使用者"
   },
   "selectLanguage": "選擇語言",
+  "showDetailsPanel": "顯示詳細資訊",
   "sourceAssetEvent_one": "來源資源事件",
   "sourceAssetEvent_other": "來源資源事件",
   "startDate": "開始日期",
diff --git a/airflow-core/src/airflow/ui/src/layouts/Details/DetailsLayout.tsx b/airflow-core/src/airflow/ui/src/layouts/Details/DetailsLayout.tsx
index 5ff7ed51ff64e..d1d90cf803a06 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Details/DetailsLayout.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Details/DetailsLayout.tsx
@@ -16,11 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { Box, HStack, Flex, useDisclosure } from "@chakra-ui/react";
+import { Box, HStack, Flex, useDisclosure, IconButton } from "@chakra-ui/react";
 import { useReactFlow } from "@xyflow/react";
-import { useRef } from "react";
+import { useRef, useState } from "react";
 import type { PropsWithChildren, ReactNode } from "react";
 import { useTranslation } from "react-i18next";
+import { FaChevronLeft, FaChevronRight } from "react-icons/fa";
 import { LuFileWarning } from "react-icons/lu";
 import { Panel, PanelGroup, PanelResizeHandle } from "react-resizable-panels";
 import { Outlet, useParams } from "react-router-dom";
@@ -66,6 +67,7 @@ export const DetailsLayout = ({ children, error, isLoading, tabs }: Props) => {
     dagId,
   });
   const { onClose, onOpen, open } = useDisclosure();
+  const [isRightPanelCollapsed, setIsRightPanelCollapsed] = useState(false);
 
   return (
     <OpenGroupsProvider dagId={dagId}>
@@ -79,6 +81,23 @@ export const DetailsLayout = ({ children, error, isLoading, tabs }: Props) => {
       <Toaster />
       <BackfillBanner dagId={dagId} />
       <Box flex={1} minH={0}>
+        {isRightPanelCollapsed ? (
+          <IconButton
+            aria-label={translate("common:showDetailsPanel")}
+            bg="bg.surface"
+            borderRadius="full"
+            boxShadow="md"
+            cursor="pointer"
+            onClick={() => setIsRightPanelCollapsed(false)}
+            position="absolute"
+            right={0}
+            size="sm"
+            top="50%"
+            zIndex={10}
+          >
+            <FaChevronLeft />
+          </IconButton>
+        ) : undefined}
         <PanelGroup autoSaveId={dagId} direction="horizontal" ref={panelGroupRef}>
           <Panel defaultSize={dagView === "graph" ? 70 : 20} minSize={6}>
             <Box height="100%" overflowY="auto" position="relative" pr={2}>
@@ -92,50 +111,76 @@ export const DetailsLayout = ({ children, error, isLoading, tabs }: Props) => {
               {dagView === "graph" ? <Graph /> : <Grid limit={limit} />}
             </Box>
           </Panel>
-          <PanelResizeHandle
-            className="resize-handle"
-            onDragging={(isDragging) => {
-              if (!isDragging) {
-                const zoom = getZoom();
+          {!isRightPanelCollapsed && (
+            <PanelResizeHandle
+              className="resize-handle"
+              onDragging={(isDragging) => {
+                if (!isDragging) {
+                  const zoom = getZoom();
 
-                void fitView({ maxZoom: zoom, minZoom: zoom });
-              }
-            }}
-          >
-            <Box bg="fg.subtle" cursor="col-resize" h="100%" transition="background 0.2s" w={0.5} />
-          </PanelResizeHandle>
-          <Panel defaultSize={dagView === "graph" ? 30 : 80} minSize={20}>
-            <Box display="flex" flexDirection="column" h="100%">
-              {children}
-              {Boolean(error) || (warningData?.dag_warnings.length ?? 0) > 0 ? (
-                <>
-                  <ActionButton
-                    actionName={translate("common:dagWarnings")}
-                    colorPalette={Boolean(error) ? "red" : "orange"}
-                    icon={<LuFileWarning />}
-                    margin="2"
-                    marginBottom="-1"
-                    onClick={onOpen}
-                    rounded="full"
-                    text={String(warningData?.total_entries ?? 0 + Number(error))}
-                    variant="solid"
-                  />
+                  void fitView({ maxZoom: zoom, minZoom: zoom });
+                }
+              }}
+            >
+              <Box
+                alignItems="center"
+                bg="fg.subtle"
+                cursor="col-resize"
+                display="flex"
+                h="100%"
+                justifyContent="center"
+                position="relative"
+                w={0.5}
+              >
+                <IconButton
+                  aria-label={translate("common:collapseDetailsPanel")}
+                  bg="bg.surface"
+                  borderRadius="full"
+                  boxShadow="md"
+                  cursor="pointer"
+                  onClick={() => setIsRightPanelCollapsed(true)}
+                  size="xs"
+                  zIndex={2}
+                >
+                  <FaChevronRight />
+                </IconButton>
+              </Box>
+            </PanelResizeHandle>
+          )}
+          {!isRightPanelCollapsed && (
+            <Panel defaultSize={dagView === "graph" ? 30 : 80} minSize={20}>
+              <Box display="flex" flexDirection="column" h="100%">
+                {children}
+                {Boolean(error) || (warningData?.dag_warnings.length ?? 0) > 0 ? (
+                  <>
+                    <ActionButton
+                      actionName={translate("common:dagWarnings")}
+                      colorPalette={Boolean(error) ? "red" : "orange"}
+                      icon={<LuFileWarning />}
+                      margin="2"
+                      marginBottom="-1"
+                      onClick={onOpen}
+                      rounded="full"
+                      text={String(warningData?.total_entries ?? 0 + Number(error))}
+                      variant="solid"
+                    />
 
-                  <DAGWarningsModal
-                    error={error}
-                    onClose={onClose}
-                    open={open}
-                    warnings={warningData?.dag_warnings}
-                  />
-                </>
-              ) : undefined}
-              <ProgressBar size="xs" visibility={isLoading ? "visible" : "hidden"} />
-              <NavTabs tabs={tabs} />
-              <Box h="100%" overflow="auto" px={2}>
-                <Outlet />
+                    <DAGWarningsModal
+                      error={error}
+                      onClose={onClose}
+                      open={open}
+                      warnings={warningData?.dag_warnings}
+                    />
+                  </>
+                ) : undefined}
+                <ProgressBar size="xs" visibility={isLoading ? "visible" : "hidden"} />
+                <NavTabs tabs={tabs} />
+                <Box h="100%" overflow="auto" px={2}>
+                  <Outlet />
+                </Box>
               </Box>
-            </Box>
-          </Panel>
+            </Panel>
+          )}
         </PanelGroup>
       </Box>
     </OpenGroupsProvider>

From 7ff2b7a73cb39f8b795c38f3e313a2a375e5adc9 Mon Sep 17 00:00:00 2001
From: Jed Cunningham <66968678+jedcunningham@users.noreply.github.com>
Date: Tue, 24 Jun 2025 08:31:59 -0600
Subject: [PATCH 139/381] Add chart index.yaml step back to chart release guide
 (#52160)

This was removed in #50464, but we still need to do this step.
---
 dev/README_RELEASE_HELM_CHART.md | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/dev/README_RELEASE_HELM_CHART.md b/dev/README_RELEASE_HELM_CHART.md
index ff58a5957b428..4cdb5a0d69fdc 100644
--- a/dev/README_RELEASE_HELM_CHART.md
+++ b/dev/README_RELEASE_HELM_CHART.md
@@ -42,6 +42,8 @@
   - [Publish release to SVN](#publish-release-to-svn)
   - [Publish release tag](#publish-release-tag)
   - [Publish final documentation](#publish-final-documentation)
+  - [Update `index.yaml` in airflow-site](#update-indexyaml-in-airflow-site)
+  - [Wait for ArtifactHUB to discover new release](#wait-for-artifacthub-to-discover-new-release)
   - [Notify developers of release](#notify-developers-of-release)
   - [Send announcements about security issues fixed in the release](#send-announcements-about-security-issues-fixed-in-the-release)
   - [Add release data to Apache Committee Report Helper](#add-release-data-to-apache-committee-report-helper)
@@ -757,6 +759,27 @@ workflow in `airflow-site` repository. Make sure to use `main` branch.
 After that workflow completes, the new version should be available in the drop-down list and stable links
 should be updated and Fastly cache should be invalidated.
 
+## Update `index.yaml` in airflow-site
+
+Regenerate `index.yaml` so it can be added to the Airflow website to allow: `helm repo add apache-airflow https://airflow.apache.org`.
+
+```shell
+git clone https://github.com/apache/airflow-site.git airflow-site
+cd airflow-site
+curl https://dist.apache.org/repos/dist/dev/airflow/helm-chart/${VERSION}${VERSION_SUFFIX}/index.yaml -o index.yaml
+cp ${AIRFLOW_SVN_RELEASE_HELM}/${VERSION}/airflow-${VERSION}.tgz .
+helm repo index --merge ./index.yaml . --url "https://downloads.apache.org/airflow/helm-chart/${VERSION}"
+rm airflow-${VERSION}.tgz
+mv index.yaml landing-pages/site/static/index.yaml
+git add p . # leave the license at the top
+git commit -m "Add Apache Airflow Helm Chart Release ${VERSION} to chart index file"
+git push
+# and finally open a PR
+```
+
+## Wait for ArtifactHUB to discover new release
+
+As we link out to ArtifactHUB in all of our release communications, we now wait until ArtifactHUB has discovered the new release. This can take 30 minutes or so to happen after the index change PR from above is merged.
 
 ## Notify developers of release
 

From 39d5103e8d1794f8da0d0f4247211dca60946df5 Mon Sep 17 00:00:00 2001
From: omrdyngc <omerdayangac@outlook.com>
Date: Tue, 24 Jun 2025 16:04:24 +0100
Subject: [PATCH 140/381] fix(provider): Fix kwargs handling in Azure Data Lake
 Storage V2 Hook methods (#51847)

---
 .../airflow/providers/microsoft/azure/hooks/data_lake.py  | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/data_lake.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/data_lake.py
index 3e479c530e5e1..f18ba472015d1 100644
--- a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/data_lake.py
+++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/data_lake.py
@@ -424,7 +424,7 @@ def create_directory(
         :param file_system_name: Name of the file system or instance of FileSystemProperties.
         :param directory_name: Name of the directory which needs to be created in the file system.
         """
-        result = self.get_file_system(file_system_name).create_directory(directory_name, kwargs)
+        result = self.get_file_system(file_system_name).create_directory(directory_name, **kwargs)
         return result
 
     def get_directory_client(
@@ -479,7 +479,7 @@ def upload_file(
         """
         file_client = self.create_file(file_system_name, file_name)
         with open(file_path, "rb") as data:
-            file_client.upload_data(data, overwrite=overwrite, kwargs=kwargs)
+            file_client.upload_data(data, overwrite=overwrite, **kwargs)
 
     def upload_file_to_directory(
         self,
@@ -500,9 +500,9 @@ def upload_file_to_directory(
         :param overwrite: Boolean flag to overwrite an existing file or not.
         """
         directory_client = self.get_directory_client(file_system_name, directory_name=directory_name)
-        file_client = directory_client.create_file(file_name, kwargs=kwargs)
+        file_client = directory_client.create_file(file_name, **kwargs)
         with open(file_path, "rb") as data:
-            file_client.upload_data(data, overwrite=overwrite, kwargs=kwargs)
+            file_client.upload_data(data, overwrite=overwrite, **kwargs)
 
     def list_files_directory(
         self, file_system_name: FileSystemProperties | str, directory_name: str

From 22e3662fd7a4dcefd8382c4dae3a56a614eb55f7 Mon Sep 17 00:00:00 2001
From: Jed Cunningham <66968678+jedcunningham@users.noreply.github.com>
Date: Tue, 24 Jun 2025 09:32:01 -0600
Subject: [PATCH 141/381] Require release flags in breeze helm chart issue
 command (#52162)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

We need these, so fail early if they are missing (say, you missed
escaping a newline 😂).
---
 .github/workflows/helm-tests.yml              |  7 +++--
 dev/README_RELEASE_HELM_CHART.md              |  2 +-
 ...ment_generate-issue-content-helm-chart.svg | 26 ++++++++++---------
 ...ment_generate-issue-content-helm-chart.txt |  2 +-
 .../commands/release_management_commands.py   |  2 ++
 5 files changed, 21 insertions(+), 18 deletions(-)

diff --git a/.github/workflows/helm-tests.yml b/.github/workflows/helm-tests.yml
index 65b866785c704..e889e25160cea 100644
--- a/.github/workflows/helm-tests.yml
+++ b/.github/workflows/helm-tests.yml
@@ -130,11 +130,10 @@ jobs:
           SIGN_WITH: dev@airflow.apache.org
       - name: "Fetch Git Tags"
         run: git fetch --tags
-      - name: "Test helm chart issue generation automatically"
-        # Adding same tags for now, will address in a follow-up
+      - name: "Test helm chart issue generation"
         run: >
-          breeze release-management generate-issue-content-helm-chart --limit-pr-count 10
-          --latest --verbose
+          breeze release-management generate-issue-content-helm-chart --limit-pr-count 2
+          --previous-release helm-chart/1.15.0 --current-release helm-chart/1.16.0 --verbose
       - name: "Upload Helm artifacts"
         uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02  # v4.6.2
         with:
diff --git a/dev/README_RELEASE_HELM_CHART.md b/dev/README_RELEASE_HELM_CHART.md
index 4cdb5a0d69fdc..6a48a9b6beda7 100644
--- a/dev/README_RELEASE_HELM_CHART.md
+++ b/dev/README_RELEASE_HELM_CHART.md
@@ -333,7 +333,7 @@ EOF
 Content is generated with:
 
 ```shell
-breeze release-management generate-issue-content-helm-chart
+breeze release-management generate-issue-content-helm-chart \
 --previous-release helm-chart/<PREVIOUS_RELEASE> --current-release helm-chart/${VERSION}${VERSION_SUFFIX}
 ```
 
diff --git a/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.svg b/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.svg
index 648f163976ecf..e9feecddd6ca0 100644
--- a/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.svg
+++ b/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.svg
@@ -38,7 +38,9 @@
 .breeze-release-management-generate-issue-content-helm-chart-r4 { fill: #68a0b3;font-weight: bold }
 .breeze-release-management-generate-issue-content-helm-chart-r5 { fill: #868887 }
 .breeze-release-management-generate-issue-content-helm-chart-r6 { fill: #8d7b39 }
-.breeze-release-management-generate-issue-content-helm-chart-r7 { fill: #98a84b;font-weight: bold }
+.breeze-release-management-generate-issue-content-helm-chart-r7 { fill: #cc555a }
+.breeze-release-management-generate-issue-content-helm-chart-r8 { fill: #8a4346 }
+.breeze-release-management-generate-issue-content-helm-chart-r9 { fill: #98a84b;font-weight: bold }
     </style>
 
     <defs>
@@ -120,19 +122,19 @@
 </text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="12.2" y="93.2" textLength="719.8" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-3)">Generates&#160;content&#160;for&#160;issue&#160;to&#160;test&#160;the&#160;helm&#160;chart&#160;release.</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-3)">
 </text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-4)">
 </text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-5)">╭─</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="24.4" y="142" textLength="268.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-5)">&#160;Generate&#160;issue&#160;flags&#160;</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="292.8" y="142" textLength="1146.8" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-5)">──────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-5)">─╮</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-5)">
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-6)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="166.4" textLength="170.8" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-6)">--github-token</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="292.8" y="166.4" textLength="1146.8" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-6)">GitHub&#160;token&#160;used&#160;to&#160;authenticate.&#160;You&#160;can&#160;set&#160;omit&#160;it&#160;if&#160;you&#160;have&#160;GITHUB_TOKEN&#160;env&#160;variable&#160;&#160;</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-6)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-6)">
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-7)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="292.8" y="190.8" textLength="1146.8" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-7)">set.&#160;Can&#160;be&#160;generated&#160;with:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-7)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-7)">
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-8)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="292.8" y="215.2" textLength="1146.8" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-8)">https://github.com/settings/tokens/new?description=Read%20sssues&amp;scopes=repo:status&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-8)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-8)">
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-9)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r6" x="292.8" y="239.6" textLength="1146.8" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-9)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-9)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-9)">
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-10)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="264" textLength="219.6" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-10)">--previous-release</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="292.8" y="264" textLength="817.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-10)">commit&#160;reference&#160;(for&#160;example&#160;hash&#160;or&#160;tag)&#160;of&#160;the&#160;previous&#160;release.</text><text class="breeze-release-management-generate-issue-content-helm-chart-r6" x="1122.4" y="264" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-10)">(TEXT)</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-10)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-10)">
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="288.4" textLength="207.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">--current-release</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="292.8" y="288.4" textLength="805.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">commit&#160;reference&#160;(for&#160;example&#160;hash&#160;or&#160;tag)&#160;of&#160;the&#160;current&#160;release.</text><text class="breeze-release-management-generate-issue-content-helm-chart-r6" x="1110.2" y="288.4" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">(TEXT)</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-12)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="312.8" textLength="219.6" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-12)">--excluded-pr-list</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="292.8" y="312.8" textLength="646.6" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-12)">Coma-separated&#160;list&#160;of&#160;PRs&#160;to&#160;exclude&#160;from&#160;the&#160;issue.</text><text class="breeze-release-management-generate-issue-content-helm-chart-r6" x="951.6" y="312.8" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-12)">(TEXT)</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-12)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-12)">
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-13)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="337.2" textLength="195.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-13)">--limit-pr-count</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="292.8" y="337.2" textLength="805.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-13)">Limit&#160;PR&#160;count&#160;processes&#160;(useful&#160;for&#160;testing&#160;small&#160;subset&#160;of&#160;PRs).</text><text class="breeze-release-management-generate-issue-content-helm-chart-r6" x="1110.2" y="337.2" textLength="109.8" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-13)">(INTEGER)</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-13)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-13)">
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-14)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="361.6" textLength="97.6" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-14)">--latest</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="292.8" y="361.6" textLength="854" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-14)">Run&#160;the&#160;command&#160;against&#160;latest&#160;released&#160;version&#160;of&#160;airflow&#160;helm&#160;charts</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-14)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-14)">
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-6)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="61" y="166.4" textLength="170.8" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-6)">--github-token</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="329.4" y="166.4" textLength="1110.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-6)">GitHub&#160;token&#160;used&#160;to&#160;authenticate.&#160;You&#160;can&#160;set&#160;omit&#160;it&#160;if&#160;you&#160;have&#160;GITHUB_TOKEN&#160;env&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-6)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-6)">
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-7)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="329.4" y="190.8" textLength="1110.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-7)">variable&#160;set.&#160;Can&#160;be&#160;generated&#160;with:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-7)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-7)">
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-8)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="329.4" y="215.2" textLength="1110.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-8)">https://github.com/settings/tokens/new?description=Read%20sssues&amp;scopes=repo:status&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-8)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-8)">
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-9)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r6" x="329.4" y="239.6" textLength="1110.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-9)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-9)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-9)">
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-10)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r7" x="24.4" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-10)">*</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="61" y="264" textLength="219.6" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-10)">--previous-release</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="329.4" y="264" textLength="817.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-10)">commit&#160;reference&#160;(for&#160;example&#160;hash&#160;or&#160;tag)&#160;of&#160;the&#160;previous&#160;release.</text><text class="breeze-release-management-generate-issue-content-helm-chart-r6" x="1159" y="264" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-10)">(TEXT)</text><text class="breeze-release-management-generate-issue-content-helm-chart-r8" x="1244.4" y="264" textLength="122" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-10)">[required]</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-10)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-10)">
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r7" x="24.4" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">*</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="61" y="288.4" textLength="207.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">--current-release</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="329.4" y="288.4" textLength="805.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">commit&#160;reference&#160;(for&#160;example&#160;hash&#160;or&#160;tag)&#160;of&#160;the&#160;current&#160;release.</text><text class="breeze-release-management-generate-issue-content-helm-chart-r6" x="1146.8" y="288.4" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">(TEXT)</text><text class="breeze-release-management-generate-issue-content-helm-chart-r8" x="1232.2" y="288.4" textLength="122" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">[required]</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-12)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="61" y="312.8" textLength="219.6" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-12)">--excluded-pr-list</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="329.4" y="312.8" textLength="646.6" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-12)">Coma-separated&#160;list&#160;of&#160;PRs&#160;to&#160;exclude&#160;from&#160;the&#160;issue.</text><text class="breeze-release-management-generate-issue-content-helm-chart-r6" x="988.2" y="312.8" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-12)">(TEXT)</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-12)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-12)">
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-13)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="61" y="337.2" textLength="195.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-13)">--limit-pr-count</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="329.4" y="337.2" textLength="805.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-13)">Limit&#160;PR&#160;count&#160;processes&#160;(useful&#160;for&#160;testing&#160;small&#160;subset&#160;of&#160;PRs).</text><text class="breeze-release-management-generate-issue-content-helm-chart-r6" x="1146.8" y="337.2" textLength="109.8" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-13)">(INTEGER)</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-13)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-13)">
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-14)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="61" y="361.6" textLength="97.6" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-14)">--latest</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="329.4" y="361.6" textLength="854" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-14)">Run&#160;the&#160;command&#160;against&#160;latest&#160;released&#160;version&#160;of&#160;airflow&#160;helm&#160;charts</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-14)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-14)">
 </text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="386" textLength="1464" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-15)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-15)">
 </text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="410.4" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-16)">╭─</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="24.4" y="410.4" textLength="195.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-16)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="219.6" y="410.4" textLength="1220" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-16)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1439.6" y="410.4" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-16)">─╮</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-16)">
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="434.8" textLength="109.8" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">--verbose</text><text class="breeze-release-management-generate-issue-content-helm-chart-r7" x="158.6" y="434.8" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">-v</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="207.4" y="434.8" textLength="585.6" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="459.2" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">--help</text><text class="breeze-release-management-generate-issue-content-helm-chart-r7" x="158.6" y="459.2" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">-h</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="207.4" y="459.2" textLength="329.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="434.8" textLength="109.8" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">--verbose</text><text class="breeze-release-management-generate-issue-content-helm-chart-r9" x="158.6" y="434.8" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">-v</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="207.4" y="434.8" textLength="585.6" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="459.2" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">--help</text><text class="breeze-release-management-generate-issue-content-helm-chart-r9" x="158.6" y="459.2" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">-h</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="207.4" y="459.2" textLength="329.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">
 </text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="483.6" textLength="1464" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-19)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-19)">
 </text>
     </g>
diff --git a/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.txt b/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.txt
index 68f8a48a8b621..135b4c86b52fc 100644
--- a/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.txt
+++ b/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.txt
@@ -1 +1 @@
-798f6631dad1b650e8a48fa5d51d73e6
+b18a6246850723983de6bdd98273b095
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index f9cf24bae709c..8ebbef8194d1c 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -2676,11 +2676,13 @@ def print_issue_content(
     "--previous-release",
     type=str,
     help="commit reference (for example hash or tag) of the previous release.",
+    required=True,
 )
 @click.option(
     "--current-release",
     type=str,
     help="commit reference (for example hash or tag) of the current release.",
+    required=True,
 )
 @click.option("--excluded-pr-list", type=str, help="Coma-separated list of PRs to exclude from the issue.")
 @click.option(

From c6693cbd2880bc7727ec3455390d3549e8b2b873 Mon Sep 17 00:00:00 2001
From: Christos Bisias <christosbis@gmail.com>
Date: Tue, 24 Jun 2025 20:26:55 +0300
Subject: [PATCH 142/381] fix mypy errors in otel_tracer  (#52170)

---
 .../src/airflow/traces/otel_tracer.py         | 29 ++++++++++---------
 1 file changed, 15 insertions(+), 14 deletions(-)

diff --git a/airflow-core/src/airflow/traces/otel_tracer.py b/airflow-core/src/airflow/traces/otel_tracer.py
index d5e71e3f47e05..34ee543a56d6a 100644
--- a/airflow-core/src/airflow/traces/otel_tracer.py
+++ b/airflow-core/src/airflow/traces/otel_tracer.py
@@ -19,6 +19,7 @@
 
 import logging
 import random
+from contextlib import AbstractContextManager
 from typing import TYPE_CHECKING
 
 from opentelemetry import trace
@@ -247,7 +248,7 @@ def _new_span(
         links=None,
         start_time=None,
         start_as_current: bool = True,
-    ):
+    ) -> AbstractContextManager[trace.span.Span] | trace.span.Span:
         if component is None:
             component = self.otel_service
 
@@ -260,24 +261,24 @@ def _new_span(
             links = []
 
         if start_as_current:
-            span = tracer.start_as_current_span(
-                name=span_name,
-                context=parent_context,
-                links=links,
-                start_time=datetime_to_nano(start_time),
-            )
-        else:
-            span = tracer.start_span(
+            return tracer.start_as_current_span(
                 name=span_name,
                 context=parent_context,
                 links=links,
                 start_time=datetime_to_nano(start_time),
             )
-            current_span_ctx = trace.set_span_in_context(NonRecordingSpan(span.get_span_context()))
-            # We have to manually make the span context as the active context.
-            # If the span needs to be injected into the carrier, then this is needed to make sure
-            # that the injected context will point to the span context that was just created.
-            attach(current_span_ctx)
+
+        span = tracer.start_span(
+            name=span_name,
+            context=parent_context,
+            links=links,
+            start_time=datetime_to_nano(start_time),
+        )
+        current_span_ctx = trace.set_span_in_context(NonRecordingSpan(span.get_span_context()))
+        # We have to manually make the span context as the active context.
+        # If the span needs to be injected into the carrier, then this is needed to make sure
+        # that the injected context will point to the span context that was just created.
+        attach(current_span_ctx)
         return span
 
     def inject(self) -> dict:

From 9ee6a39b580032368228e8c3681a4897fd89f115 Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Tue, 24 Jun 2025 23:10:17 +0530
Subject: [PATCH 143/381] Remove unused code from `models/dag.py` (#52173)

These were not used and aren't part of public interface.
---
 airflow-core/src/airflow/models/dag.py | 16 ----------------
 1 file changed, 16 deletions(-)

diff --git a/airflow-core/src/airflow/models/dag.py b/airflow-core/src/airflow/models/dag.py
index cc63f5776ffd6..a188b4d66f8ea 100644
--- a/airflow-core/src/airflow/models/dag.py
+++ b/airflow-core/src/airflow/models/dag.py
@@ -227,13 +227,6 @@ def get_asset_triggered_next_run_info(
     }
 
 
-def _triggerer_is_healthy(session: Session):
-    from airflow.jobs.triggerer_job_runner import TriggererJobRunner
-
-    job = TriggererJobRunner.most_recent_job(session=session)
-    return job and job.is_alive()
-
-
 @provide_session
 def _create_orm_dagrun(
     *,
@@ -716,15 +709,6 @@ def get_last_dagrun(self, session=NEW_SESSION, include_manually_triggered=False)
             self.dag_id, session=session, include_manually_triggered=include_manually_triggered
         )
 
-    @provide_session
-    def has_dag_runs(self, session=NEW_SESSION, include_manually_triggered=True) -> bool:
-        return (
-            get_last_dagrun(
-                self.dag_id, session=session, include_manually_triggered=include_manually_triggered
-            )
-            is not None
-        )
-
     @property
     def dag_id(self) -> str:
         return self._dag_id

From d378410cdd9df2b5324df3b5b37f6b3afd16ed81 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Josef=20=C5=A0im=C3=A1nek?= <josef.simanek@gmail.com>
Date: Tue, 24 Jun 2025 19:51:04 +0200
Subject: [PATCH 144/381] Update PostgreSQL to 16 in example
 docker-compose.yaml and docs. (#52174)

---
 airflow-core/docs/howto/docker-compose/docker-compose.yaml | 2 +-
 airflow-core/docs/howto/docker-compose/index.rst           | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/airflow-core/docs/howto/docker-compose/docker-compose.yaml b/airflow-core/docs/howto/docker-compose/docker-compose.yaml
index 17f2e93bf144b..1c298fc518865 100644
--- a/airflow-core/docs/howto/docker-compose/docker-compose.yaml
+++ b/airflow-core/docs/howto/docker-compose/docker-compose.yaml
@@ -87,7 +87,7 @@ x-airflow-common:
 
 services:
   postgres:
-    image: postgres:13
+    image: postgres:16
     environment:
       POSTGRES_USER: airflow
       POSTGRES_PASSWORD: airflow
diff --git a/airflow-core/docs/howto/docker-compose/index.rst b/airflow-core/docs/howto/docker-compose/index.rst
index 0d5e2a22bb62a..68c4d00998e61 100644
--- a/airflow-core/docs/howto/docker-compose/index.rst
+++ b/airflow-core/docs/howto/docker-compose/index.rst
@@ -211,7 +211,7 @@ In a second terminal you can check the condition of the containers and make sure
     247ebe6cf87a   apache/airflow:|version|   "/usr/bin/dumb-init …"   3 minutes ago    Up 3 minutes (healthy)    8080/tcp                           compose_airflow-worker_1
     ed9b09fc84b1   apache/airflow:|version|   "/usr/bin/dumb-init …"   3 minutes ago    Up 3 minutes (healthy)    8080/tcp                           compose_airflow-scheduler_1
     7cb1fb603a98   apache/airflow:|version|   "/usr/bin/dumb-init …"   3 minutes ago    Up 3 minutes (healthy)    0.0.0.0:8080->8080/tcp             compose_airflow-api_server_1
-    74f3bbe506eb   postgres:13      |version-spacepad| "docker-entrypoint.s…"   18 minutes ago   Up 17 minutes (healthy)   5432/tcp                           compose_postgres_1
+    74f3bbe506eb   postgres:16      |version-spacepad| "docker-entrypoint.s…"   18 minutes ago   Up 17 minutes (healthy)   5432/tcp                           compose_postgres_1
     0bd6576d23cb   redis:latest     |version-spacepad| "docker-entrypoint.s…"   10 hours ago     Up 17 minutes (healthy)   0.0.0.0:6379->6379/tcp             compose_redis_1
 
 Accessing the environment

From 00332b44551b7b14e563cc947dc20b0741afb948 Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Tue, 24 Jun 2025 23:38:11 +0530
Subject: [PATCH 145/381] Remove unused `SimpleTaskInstance` (#52176)

These isn't used in Airflow 3 and isn't part of public interface.
---
 .../src/airflow/executors/base_executor.py    |  4 +-
 .../src/airflow/models/taskinstance.py        | 91 -------------------
 .../src/airflow/serialization/enums.py        |  1 -
 .../serialization/serialized_objects.py       |  9 +-
 .../serialization/test_serialized_objects.py  |  3 +-
 5 files changed, 3 insertions(+), 105 deletions(-)

diff --git a/airflow-core/src/airflow/executors/base_executor.py b/airflow-core/src/airflow/executors/base_executor.py
index a59231989ecbf..292ac685bac58 100644
--- a/airflow-core/src/airflow/executors/base_executor.py
+++ b/airflow-core/src/airflow/executors/base_executor.py
@@ -342,9 +342,7 @@ def trigger_tasks(self, open_slots: int) -> None:
 
                 # If it's None, then the span for the current TaskInstanceKey hasn't been started.
                 if self.active_spans is not None and self.active_spans.get(key) is None:
-                    from airflow.models.taskinstance import SimpleTaskInstance
-
-                    if isinstance(ti, (SimpleTaskInstance, workloads.TaskInstance)):
+                    if isinstance(ti, workloads.TaskInstance):
                         parent_context = Trace.extract(ti.parent_context_carrier)
                     else:
                         parent_context = Trace.extract(ti.dag_run.context_carrier)
diff --git a/airflow-core/src/airflow/models/taskinstance.py b/airflow-core/src/airflow/models/taskinstance.py
index 21e20b32b9627..9044817c851c0 100644
--- a/airflow-core/src/airflow/models/taskinstance.py
+++ b/airflow-core/src/airflow/models/taskinstance.py
@@ -2510,97 +2510,6 @@ def _is_further_mapped_inside(operator: Operator, container: TaskGroup) -> bool:
     return False
 
 
-# State of the task instance.
-# Stores string version of the task state.
-TaskInstanceStateType = tuple[TaskInstanceKey, TaskInstanceState]
-
-
-class SimpleTaskInstance:
-    """
-    Simplified Task Instance.
-
-    Used to send data between processes via Queues.
-    """
-
-    def __init__(
-        self,
-        dag_id: str,
-        task_id: str,
-        run_id: str,
-        queued_dttm: datetime | None,
-        start_date: datetime | None,
-        end_date: datetime | None,
-        try_number: int,
-        map_index: int,
-        state: str,
-        executor: str | None,
-        executor_config: Any,
-        pool: str,
-        queue: str,
-        key: TaskInstanceKey,
-        run_as_user: str | None = None,
-        priority_weight: int | None = None,
-        parent_context_carrier: dict | None = None,
-        context_carrier: dict | None = None,
-        span_status: str | None = None,
-    ):
-        self.dag_id = dag_id
-        self.task_id = task_id
-        self.run_id = run_id
-        self.map_index = map_index
-        self.queued_dttm = queued_dttm
-        self.start_date = start_date
-        self.end_date = end_date
-        self.try_number = try_number
-        self.state = state
-        self.executor = executor
-        self.executor_config = executor_config
-        self.run_as_user = run_as_user
-        self.pool = pool
-        self.priority_weight = priority_weight
-        self.queue = queue
-        self.key = key
-        self.parent_context_carrier = parent_context_carrier
-        self.context_carrier = context_carrier
-        self.span_status = span_status
-
-    def __repr__(self) -> str:
-        attrs = ", ".join(f"{k}={v!r}" for k, v in self.__dict__.items())
-        return f"SimpleTaskInstance({attrs})"
-
-    def __eq__(self, other) -> bool:
-        if isinstance(other, self.__class__):
-            return self.__dict__ == other.__dict__
-        return NotImplemented
-
-    @classmethod
-    def from_ti(cls, ti: TaskInstance) -> SimpleTaskInstance:
-        return cls(
-            dag_id=ti.dag_id,
-            task_id=ti.task_id,
-            run_id=ti.run_id,
-            map_index=ti.map_index,
-            queued_dttm=ti.queued_dttm,
-            start_date=ti.start_date,
-            end_date=ti.end_date,
-            try_number=ti.try_number,
-            state=ti.state,
-            executor=ti.executor,
-            executor_config=ti.executor_config,
-            pool=ti.pool,
-            queue=ti.queue,
-            key=ti.key,
-            run_as_user=ti.run_as_user if hasattr(ti, "run_as_user") else None,
-            priority_weight=ti.priority_weight if hasattr(ti, "priority_weight") else None,
-            # Inspect the ti, to check if the 'dag_run' relationship is loaded.
-            parent_context_carrier=ti.dag_run.context_carrier
-            if "dag_run" not in inspect(ti).unloaded
-            else None,
-            context_carrier=ti.context_carrier if hasattr(ti, "context_carrier") else None,
-            span_status=ti.span_status,
-        )
-
-
 class TaskInstanceNote(Base):
     """For storage of arbitrary notes concerning the task instance."""
 
diff --git a/airflow-core/src/airflow/serialization/enums.py b/airflow-core/src/airflow/serialization/enums.py
index 1d04bee6f290d..2a6e5e1beb0ab 100644
--- a/airflow-core/src/airflow/serialization/enums.py
+++ b/airflow-core/src/airflow/serialization/enums.py
@@ -62,7 +62,6 @@ class DagAttributeTypes(str, Enum):
     ASSET_REF = "asset_ref"
     ASSET_UNIQUE_KEY = "asset_unique_key"
     ASSET_ALIAS_UNIQUE_KEY = "asset_alias_unique_key"
-    SIMPLE_TASK_INSTANCE = "simple_task_instance"
     BASE_JOB = "Job"
     TASK_INSTANCE = "task_instance"
     DAG_RUN = "dag_run"
diff --git a/airflow-core/src/airflow/serialization/serialized_objects.py b/airflow-core/src/airflow/serialization/serialized_objects.py
index 3859c535d1828..e102de1c9928c 100644
--- a/airflow-core/src/airflow/serialization/serialized_objects.py
+++ b/airflow-core/src/airflow/serialization/serialized_objects.py
@@ -47,7 +47,6 @@
 from airflow.models.expandinput import (
     create_expand_input,
 )
-from airflow.models.taskinstance import SimpleTaskInstance, TaskInstance
 from airflow.models.taskinstancekey import TaskInstanceKey
 from airflow.models.xcom import XComModel
 from airflow.models.xcom_arg import SchedulerXComArg, deserialize_xcom_arg
@@ -101,6 +100,7 @@
 
     from airflow.models import DagRun
     from airflow.models.expandinput import SchedulerExpandInput
+    from airflow.models.taskinstance import TaskInstance
     from airflow.sdk import BaseOperatorLink
     from airflow.sdk.definitions._internal.node import DAGNode
     from airflow.sdk.types import Operator
@@ -822,11 +822,6 @@ def serialize(
             return cls._encode(serialized_asset, type_=serialized_asset.pop("__type"))
         elif isinstance(var, AssetRef):
             return cls._encode(attrs.asdict(var), type_=DAT.ASSET_REF)
-        elif isinstance(var, SimpleTaskInstance):
-            return cls._encode(
-                cls.serialize(var.__dict__, strict=strict),
-                type_=DAT.SIMPLE_TASK_INSTANCE,
-            )
         elif isinstance(var, Connection):
             return cls._encode(var.to_dict(validate=True), type_=DAT.CONNECTION)
         elif isinstance(var, TaskCallbackRequest):
@@ -939,8 +934,6 @@ def deserialize(cls, encoded_var: Any) -> Any:
             return AssetAll(*(decode_asset_condition(x) for x in var["objects"]))
         elif type_ == DAT.ASSET_REF:
             return Asset.ref(**var)
-        elif type_ == DAT.SIMPLE_TASK_INSTANCE:
-            return SimpleTaskInstance(**cls.deserialize(var))
         elif type_ == DAT.CONNECTION:
             return Connection(**var)
         elif type_ == DAT.TASK_CALLBACK_REQUEST:
diff --git a/airflow-core/tests/unit/serialization/test_serialized_objects.py b/airflow-core/tests/unit/serialization/test_serialized_objects.py
index eee79c585508e..1fc9d0486fecd 100644
--- a/airflow-core/tests/unit/serialization/test_serialized_objects.py
+++ b/airflow-core/tests/unit/serialization/test_serialized_objects.py
@@ -38,7 +38,7 @@
 from airflow.models.connection import Connection
 from airflow.models.dag import DAG
 from airflow.models.dagrun import DagRun
-from airflow.models.taskinstance import SimpleTaskInstance, TaskInstance
+from airflow.models.taskinstance import TaskInstance
 from airflow.models.xcom_arg import XComArg
 from airflow.providers.standard.operators.bash import BashOperator
 from airflow.providers.standard.operators.empty import EmptyOperator
@@ -327,7 +327,6 @@ def __len__(self) -> int:
             DAT.ASSET,
             equals,
         ),
-        (SimpleTaskInstance.from_ti(ti=TI), DAT.SIMPLE_TASK_INSTANCE, equals),
         (
             Connection(conn_id="TEST_ID", uri="mysql://"),
             DAT.CONNECTION,

From 54f9bff2582628ac1346cdd025e6d3e476bc19b6 Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Tue, 24 Jun 2025 23:53:12 +0530
Subject: [PATCH 146/381] Add deprecation to `airflow/sensors/base.py` (#52178)

Had to todo earlier, resolved that.
---
 airflow-core/src/airflow/sensors/__init__.py |  6 ++++-
 airflow-core/src/airflow/sensors/base.py     | 24 --------------------
 2 files changed, 5 insertions(+), 25 deletions(-)
 delete mode 100644 airflow-core/src/airflow/sensors/base.py

diff --git a/airflow-core/src/airflow/sensors/__init__.py b/airflow-core/src/airflow/sensors/__init__.py
index 62a4037df2f66..db378f4550324 100644
--- a/airflow-core/src/airflow/sensors/__init__.py
+++ b/airflow-core/src/airflow/sensors/__init__.py
@@ -26,8 +26,12 @@
 
 from airflow.utils.deprecation_tools import add_deprecated_classes
 
-# TODO: Add definition from Task SDK here and remove `base.py` file
 __deprecated_classes = {
+    "base": {
+        "BaseSensorOperator": "airflow.sdk.bases.sensor.BaseSensorOperator",
+        "PokeReturnValue": "airflow.sdk.bases.sensor.PokeReturnValue",
+        "poke_mode_only": "airflow.sdk.bases.sensor.poke_mode_only",
+    },
     "python":{
         "PythonSensor": "airflow.providers.standard.sensors.python.PythonSensor",
     },
diff --git a/airflow-core/src/airflow/sensors/base.py b/airflow-core/src/airflow/sensors/base.py
deleted file mode 100644
index 71ae006f53437..0000000000000
--- a/airflow-core/src/airflow/sensors/base.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-from __future__ import annotations
-
-from airflow.sdk.bases.sensor import (
-    BaseSensorOperator as BaseSensorOperator,
-    PokeReturnValue as PokeReturnValue,
-    poke_mode_only as poke_mode_only,
-)

From 1b63a052578610284c9e21fcdfb6a54a99dfb3d1 Mon Sep 17 00:00:00 2001
From: Ankit Chaurasia <8670962+sunank200@users.noreply.github.com>
Date: Wed, 25 Jun 2025 00:10:12 +0545
Subject: [PATCH 147/381] Remove @pytest.mark.db_test for cncf (#52153)

---
 .../kubernetes/executors/test_kubernetes_executor.py     | 9 ---------
 .../cncf/kubernetes/operators/test_spark_kubernetes.py   | 2 --
 2 files changed, 11 deletions(-)

diff --git a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/executors/test_kubernetes_executor.py b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/executors/test_kubernetes_executor.py
index 62616ea4bc348..062c889089e1a 100644
--- a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/executors/test_kubernetes_executor.py
+++ b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/executors/test_kubernetes_executor.py
@@ -157,7 +157,6 @@ def test_execution_date_serialize_deserialize(self):
 
         assert datetime_obj == new_datetime_obj
 
-    @pytest.mark.db_test
     @pytest.mark.skipif(
         AirflowKubernetesScheduler is None, reason="kubernetes python package is not installed"
     )
@@ -180,7 +179,6 @@ def test_delete_pod_successfully(self, mock_watcher, mock_client, mock_kube_clie
         finally:
             kube_executor.end()
 
-    @pytest.mark.db_test
     @pytest.mark.skipif(
         AirflowKubernetesScheduler is None, reason="kubernetes python package is not installed"
     )
@@ -204,7 +202,6 @@ def test_delete_pod_raises_404(self, mock_watcher, mock_client, mock_kube_client
             kube_executor.kube_scheduler.delete_pod(pod_name, namespace)
         mock_delete_namespace.assert_called_with(pod_name, namespace, body=mock_client.V1DeleteOptions())
 
-    @pytest.mark.db_test
     @pytest.mark.skipif(
         AirflowKubernetesScheduler is None, reason="kubernetes python package is not installed"
     )
@@ -253,7 +250,6 @@ def setup_method(self) -> None:
         self.kubernetes_executor = KubernetesExecutor()
         self.kubernetes_executor.job_id = 5
 
-    @pytest.mark.db_test
     @pytest.mark.skipif(
         AirflowKubernetesScheduler is None, reason="kubernetes python package is not installed"
     )
@@ -455,7 +451,6 @@ def test_run_next_exception_requeue(
             finally:
                 kubernetes_executor.end()
 
-    @pytest.mark.db_test
     @pytest.mark.skipif(
         AirflowKubernetesScheduler is None, reason="kubernetes python package is not installed"
     )
@@ -495,7 +490,6 @@ def test_run_next_pmh_error(self, mock_get_kube_client, mock_pmh):
         finally:
             kubernetes_executor.end()
 
-    @pytest.mark.db_test
     @pytest.mark.skipif(
         AirflowKubernetesScheduler is None, reason="kubernetes python package is not installed"
     )
@@ -561,7 +555,6 @@ def test_gauge_executor_metrics(self, mock_stats_gauge, mock_trigger_tasks, mock
         ]
         mock_stats_gauge.assert_has_calls(calls)
 
-    @pytest.mark.db_test
     @mock.patch("airflow.providers.cncf.kubernetes.executors.kubernetes_executor_utils.KubernetesJobWatcher")
     @mock.patch("airflow.providers.cncf.kubernetes.kube_client.get_kube_client")
     def test_invalid_executor_config(self, mock_get_kube_client, mock_kubernetes_job_watcher):
@@ -584,7 +577,6 @@ def test_invalid_executor_config(self, mock_get_kube_client, mock_kubernetes_job
         finally:
             executor.end()
 
-    @pytest.mark.db_test
     @pytest.mark.execution_timeout(10)
     @pytest.mark.skipif(
         AirflowKubernetesScheduler is None, reason="kubernetes python package is not installed"
@@ -801,7 +793,6 @@ def test_change_state_key_not_in_running(self, mock_get_kube_client, mock_kubern
         finally:
             executor.end()
 
-    @pytest.mark.db_test
     @pytest.mark.parametrize(
         "multi_namespace_mode_namespace_list, watchers_keys",
         [
diff --git a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/operators/test_spark_kubernetes.py b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/operators/test_spark_kubernetes.py
index ff30d9ac79750..2b9c7997e7e69 100644
--- a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/operators/test_spark_kubernetes.py
+++ b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/operators/test_spark_kubernetes.py
@@ -222,7 +222,6 @@ def create_context(task):
     }
 
 
-@pytest.mark.db_test
 @patch("airflow.providers.cncf.kubernetes.utils.pod_manager.PodManager.fetch_requested_container_logs")
 @patch("airflow.providers.cncf.kubernetes.utils.pod_manager.PodManager.await_pod_completion")
 @patch("airflow.providers.cncf.kubernetes.utils.pod_manager.PodManager.create_pod")
@@ -473,7 +472,6 @@ def test_template_spec(
         )
 
 
-@pytest.mark.db_test
 @patch("airflow.providers.cncf.kubernetes.utils.pod_manager.PodManager.fetch_requested_container_logs")
 @patch("airflow.providers.cncf.kubernetes.utils.pod_manager.PodManager.await_pod_completion")
 @patch("airflow.providers.cncf.kubernetes.utils.pod_manager.PodManager.create_pod")

From 551f8bef016c16cb918ec709843f944ca3751c32 Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Tue, 24 Jun 2025 19:33:40 +0100
Subject: [PATCH 148/381] Use PythonOperator import from standard provider in
 ydb providers example (#52165)

---
 providers/ydb/tests/system/ydb/example_ydb.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/providers/ydb/tests/system/ydb/example_ydb.py b/providers/ydb/tests/system/ydb/example_ydb.py
index 3526ca6cfa63e..5ee116b7cb931 100644
--- a/providers/ydb/tests/system/ydb/example_ydb.py
+++ b/providers/ydb/tests/system/ydb/example_ydb.py
@@ -24,7 +24,7 @@
 
 from airflow import DAG
 from airflow.decorators import task
-from airflow.operators.python import PythonOperator
+from airflow.providers.standard.operators.python import PythonOperator
 from airflow.providers.ydb.hooks.ydb import YDBHook
 from airflow.providers.ydb.operators.ydb import YDBExecuteQueryOperator
 
@@ -64,7 +64,7 @@ def sanitize_date(value: str) -> str:
     return value
 
 
-def transform_dates(**kwargs):
+def transform_dates_func(**kwargs):
     begin_date = sanitize_date(kwargs.get("begin_date"))
     end_date = sanitize_date(kwargs.get("end_date"))
     return {"begin_date": begin_date, "end_date": end_date}
@@ -110,7 +110,7 @@ def transform_dates(**kwargs):
     # [END ydb_operator_howto_guide_get_all_pets]
     transform_dates = PythonOperator(
         task_id="transform_dates",
-        python_callable=transform_dates,
+        python_callable=transform_dates_func,
         op_kwargs={"begin_date": "{{params.begin_date}}", "end_date": "{{params.end_date}}"},
         params={"begin_date": "2020-01-01", "end_date": "2020-12-31"},
     )

From 42b63a31b6f6566dad21c0c5ecb39644c096c5f6 Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Tue, 24 Jun 2025 19:55:33 +0100
Subject: [PATCH 149/381] Remove unused import Case from dagrun.py (#52179)

---
 airflow-core/src/airflow/models/dagrun.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/airflow-core/src/airflow/models/dagrun.py b/airflow-core/src/airflow/models/dagrun.py
index 8dcd00fef0cbc..a1126c2a9c3cc 100644
--- a/airflow-core/src/airflow/models/dagrun.py
+++ b/airflow-core/src/airflow/models/dagrun.py
@@ -58,7 +58,6 @@
 from sqlalchemy.ext.hybrid import hybrid_property
 from sqlalchemy.ext.mutable import MutableDict
 from sqlalchemy.orm import declared_attr, joinedload, relationship, synonym, validates
-from sqlalchemy.sql.elements import Case
 from sqlalchemy.sql.expression import false, select
 from sqlalchemy.sql.functions import coalesce
 from sqlalchemy_utils import UUIDType

From 92895a1a431e42c6f73879a17168e53a37489c31 Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Wed, 25 Jun 2025 00:35:01 +0530
Subject: [PATCH 150/381] Remove old Serialization enums (#52183)

This aren't used anymore -- these were initially part of AIP-44 but were missed during cleanup
---
 airflow-core/src/airflow/serialization/enums.py | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/airflow-core/src/airflow/serialization/enums.py b/airflow-core/src/airflow/serialization/enums.py
index 2a6e5e1beb0ab..11c37b3bd1a4e 100644
--- a/airflow-core/src/airflow/serialization/enums.py
+++ b/airflow-core/src/airflow/serialization/enums.py
@@ -62,16 +62,10 @@ class DagAttributeTypes(str, Enum):
     ASSET_REF = "asset_ref"
     ASSET_UNIQUE_KEY = "asset_unique_key"
     ASSET_ALIAS_UNIQUE_KEY = "asset_alias_unique_key"
-    BASE_JOB = "Job"
-    TASK_INSTANCE = "task_instance"
-    DAG_RUN = "dag_run"
-    DAG_MODEL = "dag_model"
-    LOG_TEMPLATE = "log_template"
     CONNECTION = "connection"
     TASK_CONTEXT = "task_context"
     ARG_NOT_SET = "arg_not_set"
     TASK_CALLBACK_REQUEST = "task_callback_request"
     DAG_CALLBACK_REQUEST = "dag_callback_request"
     TASK_INSTANCE_KEY = "task_instance_key"
-    TRIGGER = "trigger"
     DEADLINE_ALERT = "deadline_alert"

From 9d7b344628b7960177dd38c15b9e1df7946dde4e Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Tue, 24 Jun 2025 21:15:06 +0200
Subject: [PATCH 151/381] Add description of what kind of changes we
 cherry-pick (#52148)

Following the discussion in devlist - this PR adds description of
what kind of changes we cherry-pick:

https://lists.apache.org/thread/f3off4vtn2h6ctznjd5wypxvj1t38xlf
---
 dev/README_AIRFLOW3_DEV.md | 28 +++++++++++++++++++++++++---
 1 file changed, 25 insertions(+), 3 deletions(-)

diff --git a/dev/README_AIRFLOW3_DEV.md b/dev/README_AIRFLOW3_DEV.md
index a1adcd832033d..cdca3cda56706 100644
--- a/dev/README_AIRFLOW3_DEV.md
+++ b/dev/README_AIRFLOW3_DEV.md
@@ -28,7 +28,8 @@
   - [Developing for Airflow 2.11.x](#developing-for-airflow-211x)
 - [Committers / PMCs](#committers--pmcs)
   - [Merging PRs for providers and Helm chart](#merging-prs-for-providers-and-helm-chart)
-  - [Merging PRs targeted for Airflow 3.0 (bugfixes/CI changes)](#merging-prs-targeted-for-airflow-30-bugfixesci-changes)
+  - [Merging PRs targeted for Airflow 3.X](#merging-prs-targeted-for-airflow-3x)
+  - [What do we backport to `v3-X-test` branch?](#what-do-we-backport-to-v3-x-test-branch)
   - [Merging PR for Airflow 3 and 2.11.x](#merging-pr-for-airflow-3-and-211x)
   - [How to backport PR with GitHub Actions](#how-to-backport-pr-with-github-actions)
   - [How to backport PR with `cherry-picker` CLI](#how-to-backport-pr-with-cherry-picker-cli)
@@ -112,9 +113,11 @@ Core parts should be extracted to a separate PR.
 Exclusions should be pre-approved specifically with a comment by release manager.
 Do not treat PR approval (Green V) as exclusion approval.
 
-## Merging PRs targeted for Airflow 3.0 (bugfixes/CI changes)
+## Merging PRs targeted for Airflow 3.X
+
+The committer who merges the PR is responsible for backporting the PRs that are 3.0 bugfixes (generally speaking)
+to `v3-X-test` (latest active branch we release bugfixes from). See next chapter to see what kind of changes we cherry-pick.
 
-The committer who merges the PR is responsible for backporting the PRs that are 3.0 bugfixes to `v3-0-test` .
 It means that they should create a new PR where the original commit from main is cherry-picked and take care for resolving conflicts.
 If the cherry-pick is too complex, then ask the PR author / start your own PR against `v3-0-test` directly with the change.
 Note: tracking that the PRs merged as expected is the responsibility of committer who merged the PR.
@@ -132,6 +135,25 @@ We are using `cherry-picker` - a [tool](https://github.com/python/cherry-picker)
 Python developers. It allows to easily cherry-pick PRs from one branch to another. It works both - via
 command line and via GitHub Actions interface.
 
+## What do we backport to `v3-X-test` branch?
+
+The `v3-x-test` latest branch is generally used to release bugfixes, but what we cherry-pick is a bit more
+nuanced than `bugfixes only`. We cherry-pick:
+
+* **Bug-fixes** (obviously) - but not all of them - often we might decide to not cherry-pick bug-fixes that are
+  not relevant to the latest release or difficult to cherry-pick
+* **CI changes** - we cherry-pick most CI changes because our CI has a lot of dependencies on external factors
+  (such as dependencies, Python versions, etc.) and we want to keep it up-to-date in the bugfix branch to
+  keep CI green and to make latest workflows work in the same way as in the main branch
+* **Documentation changes** - we cherry-pick documentation changes that are relevant to the latest release
+  and that help users to understand how to use the latest release. We do not cherry-pick documentation changes
+  that refer to features that are added in `main` branch and not in the latest release.
+* **Minor refactorings in active areas** - sometimes we might decide to cherry-pick minor refactorings
+  that are relevant to the latest release and that help us to keep the codebase clean and maintainable,
+  particularly when they are done in areas that are likely to be cherry-picked. The reason why we are doing
+  it is to make it easier for future cherry-picks to avoid conflicts. Committers should use their judgment
+  whether to cherry-pick such changes (default being `no`) and they should be always justified by explaining
+  why this change is cherry-picked even if it is not a bug-fix.
 
 ## Merging PR for Airflow 3 and 2.11.x
 

From 68f9f34a931a1b376d3763774aca5e8b77984403 Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Wed, 25 Jun 2025 00:51:39 +0530
Subject: [PATCH 152/381] Ignore mypy errors for deprecated executors (#52187)

I removed SimpleTaskInstance in https://github.com/apache/airflow/pull/52176 since it isn't used in Airflow 3. This caused failure in hybrid executors like `LocalKubernetesExecutor` and `CeleryKubernetesExecutor` -- which aren't suported in Airflow 3. Hence we can ignore mypy errors.
---
 .../celery/executors/celery_kubernetes_executor.py        | 7 +++++--
 .../kubernetes/executors/local_kubernetes_executor.py     | 8 ++++++--
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/providers/celery/src/airflow/providers/celery/executors/celery_kubernetes_executor.py b/providers/celery/src/airflow/providers/celery/executors/celery_kubernetes_executor.py
index c7c3071ed0c08..7548401e295f0 100644
--- a/providers/celery/src/airflow/providers/celery/executors/celery_kubernetes_executor.py
+++ b/providers/celery/src/airflow/providers/celery/executors/celery_kubernetes_executor.py
@@ -39,7 +39,10 @@
     from airflow.callbacks.base_callback_sink import BaseCallbackSink
     from airflow.callbacks.callback_requests import CallbackRequest
     from airflow.executors.base_executor import EventBufferValueType
-    from airflow.models.taskinstance import SimpleTaskInstance, TaskInstance
+    from airflow.models.taskinstance import (
+        SimpleTaskInstance,  # type: ignore[attr-defined]
+        TaskInstance,
+    )
     from airflow.models.taskinstancekey import TaskInstanceKey
 
     CommandType = Sequence[str]
@@ -180,7 +183,7 @@ def queue_task_instance(
         **kwargs,
     ) -> None:
         """Queues task instance via celery or kubernetes executor."""
-        from airflow.models.taskinstance import SimpleTaskInstance
+        from airflow.models.taskinstance import SimpleTaskInstance  # type: ignore[attr-defined]
 
         executor = self._router(SimpleTaskInstance.from_ti(task_instance))
         self.log.debug(
diff --git a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/executors/local_kubernetes_executor.py b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/executors/local_kubernetes_executor.py
index a05b8b63601aa..de183ad2a4ae7 100644
--- a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/executors/local_kubernetes_executor.py
+++ b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/executors/local_kubernetes_executor.py
@@ -33,7 +33,11 @@
     from airflow.callbacks.callback_requests import CallbackRequest
     from airflow.executors.base_executor import EventBufferValueType
     from airflow.executors.local_executor import LocalExecutor
-    from airflow.models.taskinstance import SimpleTaskInstance, TaskInstance, TaskInstanceKey
+    from airflow.models.taskinstance import (
+        SimpleTaskInstance,  # type: ignore[attr-defined]
+        TaskInstance,
+        TaskInstanceKey,
+    )
 
     CommandType = Sequence[str]
 
@@ -171,7 +175,7 @@ def queue_task_instance(
         **kwargs,
     ) -> None:
         """Queues task instance via local or kubernetes executor."""
-        from airflow.models.taskinstance import SimpleTaskInstance
+        from airflow.models.taskinstance import SimpleTaskInstance  # type: ignore[attr-defined]
 
         executor = self._router(SimpleTaskInstance.from_ti(task_instance))
         self.log.debug(

From 0c5a260f245ff039f28504728cbcb631ef6d982b Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Tue, 24 Jun 2025 20:28:36 +0100
Subject: [PATCH 153/381] Update alibaba example dags (#52163)

---
 .../system/alibaba/example_adb_spark_batch.py    |  6 ++++++
 .../system/alibaba/example_adb_spark_sql.py      | 16 ++++++++++++++--
 .../tests/system/alibaba/example_oss_bucket.py   |  2 +-
 .../tests/system/alibaba/example_oss_object.py   |  6 ++++++
 4 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/providers/alibaba/tests/system/alibaba/example_adb_spark_batch.py b/providers/alibaba/tests/system/alibaba/example_adb_spark_batch.py
index e8447cefc4b58..785a352734c9b 100644
--- a/providers/alibaba/tests/system/alibaba/example_adb_spark_batch.py
+++ b/providers/alibaba/tests/system/alibaba/example_adb_spark_batch.py
@@ -40,14 +40,20 @@
         task_id="task1",
         file="local:///tmp/spark-examples.jar",
         class_name="org.apache.spark.examples.SparkPi",
+        cluster_id="<your cluster id>",
+        rg_name="<your resource group name>",
     )
 
     spark_lr = AnalyticDBSparkBatchOperator(
         task_id="task2",
         file="local:///tmp/spark-examples.jar",
         class_name="org.apache.spark.examples.SparkLR",
+        cluster_id="<your cluster id>",
+        rg_name="<your resource group name>",
     )
 
+    #  Replace the above cluster_id and rg_name with your own values.
+
     spark_pi >> spark_lr
 
     from tests_common.test_utils.watcher import watcher
diff --git a/providers/alibaba/tests/system/alibaba/example_adb_spark_sql.py b/providers/alibaba/tests/system/alibaba/example_adb_spark_sql.py
index cc587e424b2b4..dfd2f55d47acb 100644
--- a/providers/alibaba/tests/system/alibaba/example_adb_spark_sql.py
+++ b/providers/alibaba/tests/system/alibaba/example_adb_spark_sql.py
@@ -36,9 +36,21 @@
     max_active_runs=1,
     catchup=False,
 ) as dag:
-    show_databases = AnalyticDBSparkSQLOperator(task_id="task1", sql="SHOE DATABASES;")
+    show_databases = AnalyticDBSparkSQLOperator(
+        task_id="task1",
+        sql="SHOE DATABASES;",
+        cluster_id="<your cluster id>",
+        rg_name="<your resource group name>",
+    )
 
-    show_tables = AnalyticDBSparkSQLOperator(task_id="task2", sql="SHOW TABLES;")
+    show_tables = AnalyticDBSparkSQLOperator(
+        task_id="task2",
+        sql="SHOW TABLES;",
+        cluster_id="<your cluster id>",
+        rg_name="<your resource group name>",
+    )
+
+    #  Replace the above cluster_id and rg_name with your own values.
 
     show_databases >> show_tables
 
diff --git a/providers/alibaba/tests/system/alibaba/example_oss_bucket.py b/providers/alibaba/tests/system/alibaba/example_oss_bucket.py
index cfe7a42efc55d..e8dae7290a6ca 100644
--- a/providers/alibaba/tests/system/alibaba/example_oss_bucket.py
+++ b/providers/alibaba/tests/system/alibaba/example_oss_bucket.py
@@ -24,7 +24,7 @@
 
 ENV_ID = os.environ.get("SYSTEM_TESTS_ENV_ID")
 DAG_ID = "oss_bucket_dag"
-REGION = os.environ.get("REGION", "default_regior")
+REGION = os.environ.get("REGION", "default_region")
 # [START howto_operator_oss_bucket]
 with DAG(
     dag_id=DAG_ID,
diff --git a/providers/alibaba/tests/system/alibaba/example_oss_object.py b/providers/alibaba/tests/system/alibaba/example_oss_object.py
index dfa59917fd6b0..ca7364ecf92d0 100644
--- a/providers/alibaba/tests/system/alibaba/example_oss_object.py
+++ b/providers/alibaba/tests/system/alibaba/example_oss_object.py
@@ -32,6 +32,8 @@
 
 ENV_ID = os.environ.get("SYSTEM_TESTS_ENV_ID")
 DAG_ID = "oss_object_dag"
+REGION = os.environ.get("REGION", "default_region")
+
 with DAG(
     dag_id=DAG_ID,
     start_date=datetime(2021, 1, 1),
@@ -45,22 +47,26 @@
         file="your local file",
         key="your oss key",
         task_id="task1",
+        region=REGION,
     )
 
     download_object = OSSDownloadObjectOperator(
         file="your local file",
         key="your oss key",
         task_id="task2",
+        region=REGION,
     )
 
     delete_object = OSSDeleteObjectOperator(
         key="your oss key",
         task_id="task3",
+        region=REGION,
     )
 
     delete_batch_object = OSSDeleteBatchObjectOperator(
         keys=["obj1", "obj2", "obj3"],
         task_id="task4",
+        region=REGION,
     )
 
     create_object >> download_object >> delete_object >> delete_batch_object

From 3f38c4cffef9949c16de0b8dc89cfd9371a24be0 Mon Sep 17 00:00:00 2001
From: Ankit Chaurasia <8670962+sunank200@users.noreply.github.com>
Date: Wed, 25 Jun 2025 01:20:32 +0545
Subject: [PATCH 154/381] remove pytest db_test marker where unnecessary
 (#52171)

---
 .../fab/auth_manager/api/auth/backend/test_basic_auth.py     | 1 -
 .../unit/fab/auth_manager/api/auth/backend/test_session.py   | 1 -
 .../unit/fab/auth_manager/api_fastapi/routes/test_login.py   | 3 ---
 .../unit/fab/auth_manager/api_fastapi/services/test_login.py | 1 -
 .../tests/unit/fab/auth_manager/cli_commands/test_utils.py   | 2 --
 .../fab/tests/unit/fab/auth_manager/test_fab_auth_manager.py | 5 -----
 6 files changed, 13 deletions(-)

diff --git a/providers/fab/tests/unit/fab/auth_manager/api/auth/backend/test_basic_auth.py b/providers/fab/tests/unit/fab/auth_manager/api/auth/backend/test_basic_auth.py
index 845e601a947e9..b48b33a4fc2fd 100644
--- a/providers/fab/tests/unit/fab/auth_manager/api/auth/backend/test_basic_auth.py
+++ b/providers/fab/tests/unit/fab/auth_manager/api/auth/backend/test_basic_auth.py
@@ -59,7 +59,6 @@ def function_decorated():
     mock_call()
 
 
-@pytest.mark.db_test
 class TestBasicAuth:
     def setup_method(self) -> None:
         mock_call.reset_mock()
diff --git a/providers/fab/tests/unit/fab/auth_manager/api/auth/backend/test_session.py b/providers/fab/tests/unit/fab/auth_manager/api/auth/backend/test_session.py
index 296edd11b7bc9..2d8b1fec909a8 100644
--- a/providers/fab/tests/unit/fab/auth_manager/api/auth/backend/test_session.py
+++ b/providers/fab/tests/unit/fab/auth_manager/api/auth/backend/test_session.py
@@ -38,7 +38,6 @@ def function_decorated():
     mock_call()
 
 
-@pytest.mark.db_test
 class TestSessionAuth:
     def setup_method(self) -> None:
         mock_call.reset_mock()
diff --git a/providers/fab/tests/unit/fab/auth_manager/api_fastapi/routes/test_login.py b/providers/fab/tests/unit/fab/auth_manager/api_fastapi/routes/test_login.py
index b596e76f5d9da..aaf53d6af209e 100644
--- a/providers/fab/tests/unit/fab/auth_manager/api_fastapi/routes/test_login.py
+++ b/providers/fab/tests/unit/fab/auth_manager/api_fastapi/routes/test_login.py
@@ -19,12 +19,9 @@
 
 from unittest.mock import patch
 
-import pytest
-
 from airflow.providers.fab.auth_manager.api_fastapi.datamodels.login import LoginBody, LoginResponse
 
 
-@pytest.mark.db_test
 class TestLogin:
     dummy_login_body = LoginBody(username="dummy", password="dummy")
     dummy_token = LoginResponse(access_token="DUMMY_TOKEN")
diff --git a/providers/fab/tests/unit/fab/auth_manager/api_fastapi/services/test_login.py b/providers/fab/tests/unit/fab/auth_manager/api_fastapi/services/test_login.py
index 5014177fe0ef6..89dfd3e1ca481 100644
--- a/providers/fab/tests/unit/fab/auth_manager/api_fastapi/services/test_login.py
+++ b/providers/fab/tests/unit/fab/auth_manager/api_fastapi/services/test_login.py
@@ -29,7 +29,6 @@
     from airflow.providers.fab.auth_manager.api_fastapi.datamodels.login import LoginResponse
 
 
-@pytest.mark.db_test
 @patch("airflow.providers.fab.auth_manager.api_fastapi.services.login.get_auth_manager")
 class TestLogin:
     def setup_method(
diff --git a/providers/fab/tests/unit/fab/auth_manager/cli_commands/test_utils.py b/providers/fab/tests/unit/fab/auth_manager/cli_commands/test_utils.py
index 4cb7485cf1c07..262ecd0477765 100644
--- a/providers/fab/tests/unit/fab/auth_manager/cli_commands/test_utils.py
+++ b/providers/fab/tests/unit/fab/auth_manager/cli_commands/test_utils.py
@@ -32,8 +32,6 @@
 with ignore_provider_compatibility_error("2.9.0+", __file__):
     from airflow.providers.fab.auth_manager.cli_commands.utils import get_application_builder
 
-pytestmark = pytest.mark.db_test
-
 
 @pytest.fixture
 def flask_app():
diff --git a/providers/fab/tests/unit/fab/auth_manager/test_fab_auth_manager.py b/providers/fab/tests/unit/fab/auth_manager/test_fab_auth_manager.py
index b4d99b6928409..69f3cedf26da9 100644
--- a/providers/fab/tests/unit/fab/auth_manager/test_fab_auth_manager.py
+++ b/providers/fab/tests/unit/fab/auth_manager/test_fab_auth_manager.py
@@ -154,7 +154,6 @@ def test_serialize_user(self, flask_app, auth_manager_with_appbuilder):
         result = auth_manager_with_appbuilder.serialize_user(user)
         assert result == {"sub": str(user.id)}
 
-    @pytest.mark.db_test
     @mock.patch.object(FabAuthManager, "get_user")
     def test_is_logged_in(self, mock_get_user, auth_manager_with_appbuilder):
         user = Mock()
@@ -163,7 +162,6 @@ def test_is_logged_in(self, mock_get_user, auth_manager_with_appbuilder):
 
         assert auth_manager_with_appbuilder.is_logged_in() is False
 
-    @pytest.mark.db_test
     @mock.patch.object(FabAuthManager, "get_user")
     def test_is_logged_in_with_inactive_user(self, mock_get_user, auth_manager_with_appbuilder):
         user = Mock()
@@ -690,11 +688,9 @@ def test_get_authorized_dag_ids(
 
         delete_user(flask_app, "username")
 
-    @pytest.mark.db_test
     def test_security_manager_return_fab_security_manager_override(self, auth_manager_with_appbuilder):
         assert isinstance(auth_manager_with_appbuilder.security_manager, FabAirflowSecurityManagerOverride)
 
-    @pytest.mark.db_test
     def test_security_manager_return_custom_provided(self, flask_app, auth_manager_with_appbuilder):
         class TestSecurityManager(FabAirflowSecurityManagerOverride):
             pass
@@ -702,7 +698,6 @@ class TestSecurityManager(FabAirflowSecurityManagerOverride):
         flask_app.config["SECURITY_MANAGER_CLASS"] = TestSecurityManager
         assert isinstance(auth_manager_with_appbuilder.security_manager, TestSecurityManager)
 
-    @pytest.mark.db_test
     def test_security_manager_wrong_inheritance_raise_exception(
         self, flask_app, auth_manager_with_appbuilder
     ):

From 24981df60d31ac89bbf97cba45b1de36ffb80bed Mon Sep 17 00:00:00 2001
From: Dov Benyomin Sohacheski <b@kloud.email>
Date: Tue, 24 Jun 2025 23:46:17 +0300
Subject: [PATCH 155/381] Fix spelling in edge provider (#52169)

---
 .../src/airflow/providers/edge3/executors/edge_executor.py    | 4 ++--
 .../airflow/providers/edge3/plugins/edge_executor_plugin.py   | 2 +-
 .../airflow/providers/edge3/worker_api/routes/_v2_compat.py   | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/providers/edge3/src/airflow/providers/edge3/executors/edge_executor.py b/providers/edge3/src/airflow/providers/edge3/executors/edge_executor.py
index 6bd216a918538..37659bfc17e14 100644
--- a/providers/edge3/src/airflow/providers/edge3/executors/edge_executor.py
+++ b/providers/edge3/src/airflow/providers/edge3/executors/edge_executor.py
@@ -113,7 +113,7 @@ def start(self, session: Session = NEW_SESSION):
 
     def _process_tasks(self, task_tuples: list[TaskTuple]) -> None:
         """
-        Temponary overwrite of _process_tasks function.
+        Temporary overwrite of _process_tasks function.
 
         Idea is to not change the interface of the execute_async function in BaseExecutor as it will be changed in Airflow 3.
         Edge worker needs task_instance in execute_async but BaseExecutor deletes this out of the self.queued_tasks.
@@ -132,7 +132,7 @@ def execute_async(
         session: Session = NEW_SESSION,
     ) -> None:
         """Execute asynchronously. Airflow 2.10 entry point to execute a task."""
-        # Use of a temponary trick to get task instance, will be changed with Airflow 3.0.0
+        # Use of a temporary trick to get task instance, will be changed with Airflow 3.0.0
         # code works together with _process_tasks overwrite to get task instance.
         # TaskInstance in fourth element
         task_instance = self.edge_queued_tasks[key][3]  # type: ignore[index]
diff --git a/providers/edge3/src/airflow/providers/edge3/plugins/edge_executor_plugin.py b/providers/edge3/src/airflow/providers/edge3/plugins/edge_executor_plugin.py
index d48bc8d5744be..9c8b32eadea33 100644
--- a/providers/edge3/src/airflow/providers/edge3/plugins/edge_executor_plugin.py
+++ b/providers/edge3/src/airflow/providers/edge3/plugins/edge_executor_plugin.py
@@ -53,7 +53,7 @@ def _get_api_endpoint(session: Session = NEW_SESSION) -> dict[str, Any]:
         }
 
 else:
-    # This is for back-compatability with Airflow 2.x and we only make this
+    # This is for back-compatibility with Airflow 2.x and we only make this
     # to prevents dependencies and breaking imports in Airflow 3.x
     import re
     from datetime import datetime, timedelta
diff --git a/providers/edge3/src/airflow/providers/edge3/worker_api/routes/_v2_compat.py b/providers/edge3/src/airflow/providers/edge3/worker_api/routes/_v2_compat.py
index be548d17a1459..2da0f0e23facc 100644
--- a/providers/edge3/src/airflow/providers/edge3/worker_api/routes/_v2_compat.py
+++ b/providers/edge3/src/airflow/providers/edge3/worker_api/routes/_v2_compat.py
@@ -34,7 +34,7 @@
     def parse_command(command: str) -> ExecuteTask:
         return ExecuteTask.model_validate_json(command)
 else:
-    # Mock the external dependnecies
+    # Mock the external dependencies
     from typing import Callable
 
     from connexion import ProblemException

From 11f1aa5869e2b953862c7d6c0acf76e49bc9c771 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Tue, 24 Jun 2025 22:56:45 +0200
Subject: [PATCH 156/381] Revert "Add deprecation to `airflow/sensors/base.py`
 (#52178)" (#52193)

This reverts commit 54f9bff2582628ac1346cdd025e6d3e476bc19b6.
---
 airflow-core/src/airflow/sensors/__init__.py |  6 +----
 airflow-core/src/airflow/sensors/base.py     | 24 ++++++++++++++++++++
 2 files changed, 25 insertions(+), 5 deletions(-)
 create mode 100644 airflow-core/src/airflow/sensors/base.py

diff --git a/airflow-core/src/airflow/sensors/__init__.py b/airflow-core/src/airflow/sensors/__init__.py
index db378f4550324..62a4037df2f66 100644
--- a/airflow-core/src/airflow/sensors/__init__.py
+++ b/airflow-core/src/airflow/sensors/__init__.py
@@ -26,12 +26,8 @@
 
 from airflow.utils.deprecation_tools import add_deprecated_classes
 
+# TODO: Add definition from Task SDK here and remove `base.py` file
 __deprecated_classes = {
-    "base": {
-        "BaseSensorOperator": "airflow.sdk.bases.sensor.BaseSensorOperator",
-        "PokeReturnValue": "airflow.sdk.bases.sensor.PokeReturnValue",
-        "poke_mode_only": "airflow.sdk.bases.sensor.poke_mode_only",
-    },
     "python":{
         "PythonSensor": "airflow.providers.standard.sensors.python.PythonSensor",
     },
diff --git a/airflow-core/src/airflow/sensors/base.py b/airflow-core/src/airflow/sensors/base.py
new file mode 100644
index 0000000000000..71ae006f53437
--- /dev/null
+++ b/airflow-core/src/airflow/sensors/base.py
@@ -0,0 +1,24 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+from airflow.sdk.bases.sensor import (
+    BaseSensorOperator as BaseSensorOperator,
+    PokeReturnValue as PokeReturnValue,
+    poke_mode_only as poke_mode_only,
+)

From ddd01fd720c00f0a5b916c1e2348ee7e85d30a83 Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Tue, 24 Jun 2025 22:07:01 +0100
Subject: [PATCH 157/381] Refactor asana operator tests free from db access
 (#52192)

---
 .pre-commit-config.yaml                       |  1 +
 .../unit/asana/operators/test_asana_tasks.py  | 72 +++++++++----------
 2 files changed, 34 insertions(+), 39 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 5b6f496c35b9a..2bbbefeedbfd9 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -599,6 +599,7 @@ repos:
             ^providers/apache/iceberg/.*\.py$|
             ^providers/apache/kafka/.*\.py$|
             ^providers/arangodb/.*\.py$|
+            ^providers/asana/.*\.py$|
             ^providers/cloudant/.*\.py$|
             ^providers/cohere/.*\.py$|
             ^providers/common/compat/.*\.py$|
diff --git a/providers/asana/tests/unit/asana/operators/test_asana_tasks.py b/providers/asana/tests/unit/asana/operators/test_asana_tasks.py
index 7549405781b52..f22764520595f 100644
--- a/providers/asana/tests/unit/asana/operators/test_asana_tasks.py
+++ b/providers/asana/tests/unit/asana/operators/test_asana_tasks.py
@@ -16,26 +16,17 @@
 # under the License.
 from __future__ import annotations
 
-from datetime import timedelta
 from unittest.mock import MagicMock, patch
 
 import pytest
 
 from airflow.models import Connection
-from airflow.models.dag import DAG
 from airflow.providers.asana.operators.asana_tasks import (
     AsanaCreateTaskOperator,
     AsanaDeleteTaskOperator,
     AsanaFindTaskOperator,
     AsanaUpdateTaskOperator,
 )
-from airflow.utils import timezone
-
-# The tests do not create dag runs, so db isolation tests are skipped
-
-DEFAULT_DATE = timezone.datetime(2015, 1, 1)
-TEST_DAG_ID = "unit_test_dag"
-asana_tasks_api_mock = MagicMock(name="asana_tasks_api_for_test")
 
 
 class TestAsanaTaskOperators:
@@ -45,72 +36,75 @@ class TestAsanaTaskOperators:
 
     @pytest.fixture(autouse=True)
     def setup_connections(self, create_connection_without_db):
-        args = {"owner": "airflow", "start_date": DEFAULT_DATE}
-        dag = DAG(TEST_DAG_ID, schedule=timedelta(days=1), default_args=args)
-        self.dag = dag
         create_connection_without_db(Connection(conn_id="asana_test", conn_type="asana", password="test"))
 
-    @pytest.mark.db_test
-    @patch("airflow.providers.asana.hooks.asana.TasksApi", autospec=True, return_value=asana_tasks_api_mock)
-    def test_asana_create_task_operator(self, mock_tasks_api):
+    @patch("airflow.providers.asana.operators.asana_tasks.AsanaHook")
+    def test_asana_create_task_operator(self, mock_asana_hook):
         """
         Tests that the AsanaCreateTaskOperator makes the expected call to python-asana given valid arguments.
         """
 
-        mock_tasks_api.return_value.create_task.return_value = {"gid": "1"}
+        mock_hook_instance = MagicMock()
+        mock_asana_hook.return_value = mock_hook_instance
+        mock_hook_instance.create_task.return_value = {"gid": "1"}
+
         create_task = AsanaCreateTaskOperator(
             task_id="create_task",
             conn_id="asana_test",
             name="test",
             task_parameters={"workspace": "1"},
-            dag=self.dag,
         )
-        create_task.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
-        assert mock_tasks_api.return_value.create_task.called
+        result = create_task.execute({})
+        mock_hook_instance.create_task.assert_called_once_with("test", {"workspace": "1"})
+        assert result == "1"
 
-    @pytest.mark.db_test
-    @patch("airflow.providers.asana.hooks.asana.TasksApi", autospec=True, return_value=asana_tasks_api_mock)
-    def test_asana_find_task_operator(self, mock_tasks_api):
+    @patch("airflow.providers.asana.operators.asana_tasks.AsanaHook")
+    def test_asana_find_task_operator(self, mock_asana_hook):
         """
         Tests that the AsanaFindTaskOperator makes the expected call to python-asana given valid arguments.
         """
-        mock_tasks_api.return_value.tasks.create.return_value = {"gid": "1"}
-        find_task = AsanaFindTaskOperator(
+
+        mock_hook_instance = MagicMock()
+        mock_asana_hook.return_value = mock_hook_instance
+        mock_hook_instance.find_task.return_value = {"gid": "1"}
+
+        task = AsanaFindTaskOperator(
             task_id="find_task",
             conn_id="asana_test",
             search_parameters={"project": "test"},
-            dag=self.dag,
         )
-        find_task.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
-        assert mock_tasks_api.return_value.get_tasks.called
+        result = task.execute({})
+        mock_hook_instance.find_task.assert_called_once_with({"project": "test"})
+        assert result == {"gid": "1"}
 
-    @pytest.mark.db_test
-    @patch("airflow.providers.asana.hooks.asana.TasksApi", autospec=True, return_value=asana_tasks_api_mock)
-    def test_asana_update_task_operator(self, mock_tasks_api):
+    @patch("airflow.providers.asana.operators.asana_tasks.AsanaHook")
+    def test_asana_update_task_operator(self, mock_asana_hook):
         """
         Tests that the AsanaUpdateTaskOperator makes the expected call to python-asana given valid arguments.
         """
+        mock_hook_instance = MagicMock()
+        mock_asana_hook.return_value = mock_hook_instance
         update_task = AsanaUpdateTaskOperator(
             task_id="update_task",
             conn_id="asana_test",
             asana_task_gid="test",
             task_parameters={"completed": True},
-            dag=self.dag,
         )
-        update_task.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
-        assert mock_tasks_api.return_value.update_task.called
+        update_task.execute({})
+        mock_hook_instance.update_task.assert_called_once_with("test", {"completed": True})
 
-    @pytest.mark.db_test
-    @patch("airflow.providers.asana.hooks.asana.TasksApi", autospec=True, return_value=asana_tasks_api_mock)
-    def test_asana_delete_task_operator(self, mock_tasks_api):
+    @patch("airflow.providers.asana.operators.asana_tasks.AsanaHook")
+    def test_asana_delete_task_operator(self, mock_asana_hook):
         """
         Tests that the AsanaDeleteTaskOperator makes the expected call to python-asana given valid arguments.
         """
+        mock_hook_instance = MagicMock()
+        mock_asana_hook.return_value = mock_hook_instance
+
         delete_task = AsanaDeleteTaskOperator(
             task_id="delete_task",
             conn_id="asana_test",
             asana_task_gid="test",
-            dag=self.dag,
         )
-        delete_task.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
-        assert mock_tasks_api.return_value.delete_task.called
+        delete_task.execute({})
+        mock_hook_instance.delete_task.assert_called_once_with("test")

From c0af393a115d453f1f95869de355b38c0b4c76d9 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Tue, 24 Jun 2025 23:19:06 +0200
Subject: [PATCH 158/381] Move type-ignores up one line (#52195)

The #52187 added ignores in a bit wrong place due to auto-reformatting
---
 .../providers/celery/executors/celery_kubernetes_executor.py  | 4 ++--
 .../cncf/kubernetes/executors/local_kubernetes_executor.py    | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/providers/celery/src/airflow/providers/celery/executors/celery_kubernetes_executor.py b/providers/celery/src/airflow/providers/celery/executors/celery_kubernetes_executor.py
index 7548401e295f0..04f4fa3b49c38 100644
--- a/providers/celery/src/airflow/providers/celery/executors/celery_kubernetes_executor.py
+++ b/providers/celery/src/airflow/providers/celery/executors/celery_kubernetes_executor.py
@@ -39,8 +39,8 @@
     from airflow.callbacks.base_callback_sink import BaseCallbackSink
     from airflow.callbacks.callback_requests import CallbackRequest
     from airflow.executors.base_executor import EventBufferValueType
-    from airflow.models.taskinstance import (
-        SimpleTaskInstance,  # type: ignore[attr-defined]
+    from airflow.models.taskinstance import (  # type: ignore[attr-defined]
+        SimpleTaskInstance,
         TaskInstance,
     )
     from airflow.models.taskinstancekey import TaskInstanceKey
diff --git a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/executors/local_kubernetes_executor.py b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/executors/local_kubernetes_executor.py
index de183ad2a4ae7..0cc7fa9dbc1f1 100644
--- a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/executors/local_kubernetes_executor.py
+++ b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/executors/local_kubernetes_executor.py
@@ -33,8 +33,8 @@
     from airflow.callbacks.callback_requests import CallbackRequest
     from airflow.executors.base_executor import EventBufferValueType
     from airflow.executors.local_executor import LocalExecutor
-    from airflow.models.taskinstance import (
-        SimpleTaskInstance,  # type: ignore[attr-defined]
+    from airflow.models.taskinstance import (  # type: ignore[attr-defined]
+        SimpleTaskInstance,
         TaskInstance,
         TaskInstanceKey,
     )

From cea8a0cfc81ae47660fef775fb2609312894dce8 Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Tue, 24 Jun 2025 22:51:54 +0100
Subject: [PATCH 159/381] Add default conn name to asana provider operators
 (#52185)

* Add default conn name to asana provider operators

* Update tests
---
 .../providers/asana/operators/asana_tasks.py  |  8 +-
 .../unit/asana/operators/test_asana_tasks.py  | 75 +++++++++++++++++++
 2 files changed, 79 insertions(+), 4 deletions(-)

diff --git a/providers/asana/src/airflow/providers/asana/operators/asana_tasks.py b/providers/asana/src/airflow/providers/asana/operators/asana_tasks.py
index 39ba24002cc4b..04a44bed9cfb0 100644
--- a/providers/asana/src/airflow/providers/asana/operators/asana_tasks.py
+++ b/providers/asana/src/airflow/providers/asana/operators/asana_tasks.py
@@ -53,9 +53,9 @@ class AsanaCreateTaskOperator(BaseOperator):
     def __init__(
         self,
         *,
-        conn_id: str,
         name: str,
         task_parameters: dict | None = None,
+        conn_id: str = "asana_default",
         **kwargs,
     ) -> None:
         super().__init__(**kwargs)
@@ -92,9 +92,9 @@ class AsanaUpdateTaskOperator(BaseOperator):
     def __init__(
         self,
         *,
-        conn_id: str,
         asana_task_gid: str,
         task_parameters: dict,
+        conn_id: str = "asana_default",
         **kwargs,
     ) -> None:
         super().__init__(**kwargs)
@@ -124,8 +124,8 @@ class AsanaDeleteTaskOperator(BaseOperator):
     def __init__(
         self,
         *,
-        conn_id: str,
         asana_task_gid: str,
+        conn_id: str = "asana_default",
         **kwargs,
     ) -> None:
         super().__init__(**kwargs)
@@ -160,8 +160,8 @@ class AsanaFindTaskOperator(BaseOperator):
     def __init__(
         self,
         *,
-        conn_id: str,
         search_parameters: dict | None = None,
+        conn_id: str = "asana_default",
         **kwargs,
     ) -> None:
         super().__init__(**kwargs)
diff --git a/providers/asana/tests/unit/asana/operators/test_asana_tasks.py b/providers/asana/tests/unit/asana/operators/test_asana_tasks.py
index f22764520595f..1c1737a5648ea 100644
--- a/providers/asana/tests/unit/asana/operators/test_asana_tasks.py
+++ b/providers/asana/tests/unit/asana/operators/test_asana_tasks.py
@@ -37,6 +37,27 @@ class TestAsanaTaskOperators:
     @pytest.fixture(autouse=True)
     def setup_connections(self, create_connection_without_db):
         create_connection_without_db(Connection(conn_id="asana_test", conn_type="asana", password="test"))
+        create_connection_without_db(Connection(conn_id="asana_default", conn_type="asana", password="test"))
+
+    @patch("airflow.providers.asana.operators.asana_tasks.AsanaHook")
+    def test_asana_create_task_operator_with_default_conn(self, mock_asana_hook):
+        """
+        Tests that the AsanaCreateTaskOperator uses the default connection.
+        """
+
+        mock_hook_instance = MagicMock()
+        mock_asana_hook.return_value = mock_hook_instance
+        mock_hook_instance.create_task.return_value = {"gid": "1"}
+
+        create_task = AsanaCreateTaskOperator(
+            task_id="create_task",
+            name="test",
+            task_parameters={"workspace": "1"},
+        )
+        result = create_task.execute({})
+        assert create_task.conn_id == "asana_default"
+        mock_hook_instance.create_task.assert_called_once_with("test", {"workspace": "1"})
+        assert result == "1"
 
     @patch("airflow.providers.asana.operators.asana_tasks.AsanaHook")
     def test_asana_create_task_operator(self, mock_asana_hook):
@@ -58,6 +79,26 @@ def test_asana_create_task_operator(self, mock_asana_hook):
         mock_hook_instance.create_task.assert_called_once_with("test", {"workspace": "1"})
         assert result == "1"
 
+    @patch("airflow.providers.asana.operators.asana_tasks.AsanaHook")
+    def test_asana_find_task_operator_with_default_conn(self, mock_asana_hook):
+        """
+        Tests that the AsanaFindTaskOperator uses the default connection.
+        """
+
+        mock_hook_instance = MagicMock()
+        mock_asana_hook.return_value = mock_hook_instance
+        mock_hook_instance.find_task.return_value = {"gid": "1"}
+
+        find_task = AsanaFindTaskOperator(
+            task_id="find_task",
+            search_parameters={"project": "test"},
+        )
+        assert find_task.conn_id == "asana_default"
+
+        result = find_task.execute({})
+        mock_hook_instance.find_task.assert_called_once_with({"project": "test"})
+        assert result == {"gid": "1"}
+
     @patch("airflow.providers.asana.operators.asana_tasks.AsanaHook")
     def test_asana_find_task_operator(self, mock_asana_hook):
         """
@@ -77,6 +118,23 @@ def test_asana_find_task_operator(self, mock_asana_hook):
         mock_hook_instance.find_task.assert_called_once_with({"project": "test"})
         assert result == {"gid": "1"}
 
+    @patch("airflow.providers.asana.operators.asana_tasks.AsanaHook")
+    def test_asana_update_task_operator_default_conn(self, mock_asana_hook):
+        """
+        Tests that the AsanaUpdateTaskOperator uses the default connection.
+        """
+
+        mock_hook_instance = MagicMock()
+        mock_asana_hook.return_value = mock_hook_instance
+        update_task = AsanaUpdateTaskOperator(
+            task_id="update_task",
+            asana_task_gid="test",
+            task_parameters={"completed": True},
+        )
+        assert update_task.conn_id == "asana_default"
+        update_task.execute({})
+        mock_hook_instance.update_task.assert_called_once_with("test", {"completed": True})
+
     @patch("airflow.providers.asana.operators.asana_tasks.AsanaHook")
     def test_asana_update_task_operator(self, mock_asana_hook):
         """
@@ -93,6 +151,23 @@ def test_asana_update_task_operator(self, mock_asana_hook):
         update_task.execute({})
         mock_hook_instance.update_task.assert_called_once_with("test", {"completed": True})
 
+    @patch("airflow.providers.asana.operators.asana_tasks.AsanaHook")
+    def test_asana_delete_task_operator_with_default_conn(self, mock_asana_hook):
+        """
+        Tests that the AsanaDeleteTaskOperator uses the default connection.
+        """
+
+        mock_hook_instance = MagicMock()
+        mock_asana_hook.return_value = mock_hook_instance
+
+        delete_task = AsanaDeleteTaskOperator(
+            task_id="delete_task",
+            asana_task_gid="test",
+        )
+        delete_task.execute({})
+        assert delete_task.conn_id == "asana_default"
+        mock_hook_instance.delete_task.assert_called_once_with("test")
+
     @patch("airflow.providers.asana.operators.asana_tasks.AsanaHook")
     def test_asana_delete_task_operator(self, mock_asana_hook):
         """

From e834dc80869d32dea53d828ad840c5d62ca471bf Mon Sep 17 00:00:00 2001
From: Aakcht <aakcht@gmail.com>
Date: Wed, 25 Jun 2025 03:09:57 +0500
Subject: [PATCH 160/381] Helm: add custom annotations to jwt secret (#52166)

---
 chart/templates/secrets/jwt-secret.yaml           |  4 ++++
 chart/values.schema.json                          |  9 +++++++++
 chart/values.yaml                                 |  2 ++
 .../tests/helm_tests/apiserver/test_apiserver.py  | 15 +++++++++++++++
 4 files changed, 30 insertions(+)

diff --git a/chart/templates/secrets/jwt-secret.yaml b/chart/templates/secrets/jwt-secret.yaml
index 7786496f4d0a7..7eb524c90b119 100644
--- a/chart/templates/secrets/jwt-secret.yaml
+++ b/chart/templates/secrets/jwt-secret.yaml
@@ -36,6 +36,10 @@ metadata:
     {{- with .Values.labels }}
       {{- toYaml . | nindent 4 }}
     {{- end }}
+  {{- with .Values.jwtSecretAnnotations }}
+  annotations:
+    {{- toYaml . | nindent 4 }}
+  {{- end }}
 type: Opaque
 data:
   jwt-secret: {{ (default $generated_secret_key .Values.jwtSecret) | b64enc | quote }}
diff --git a/chart/values.schema.json b/chart/values.schema.json
index 2795a342a93c3..1bfe3c9757b69 100644
--- a/chart/values.schema.json
+++ b/chart/values.schema.json
@@ -1482,6 +1482,15 @@
             "x-docsSection": "Airflow",
             "default": null
         },
+        "jwtSecretAnnotations": {
+            "description": "Annotations to add to the JWT secret.",
+            "type": "object",
+            "x-docsSection": "Common",
+            "default": {},
+            "additionalProperties": {
+                "type": "string"
+            }
+        },
         "webserverSecretKey": {
             "description": "The Flask secret key for Airflow Webserver to encrypt browser session.",
             "type": [
diff --git a/chart/values.yaml b/chart/values.yaml
index 3a6bb1691fad7..5d85210d419f1 100644
--- a/chart/values.yaml
+++ b/chart/values.yaml
@@ -559,6 +559,8 @@ webserverSecretKeySecretName: ~
 
 # Secret key used to encode and decode JWTs: `[api_auth] jwt_secret` in airflow.cfg
 jwtSecret: ~
+# Add custom annotations to the JWT secret
+jwtSecretAnnotations: {}
 jwtSecretName: ~
 
 # In order to use kerberos you need to create secret containing the keytab file
diff --git a/helm-tests/tests/helm_tests/apiserver/test_apiserver.py b/helm-tests/tests/helm_tests/apiserver/test_apiserver.py
index b481ffad372c1..08796bde0c855 100644
--- a/helm-tests/tests/helm_tests/apiserver/test_apiserver.py
+++ b/helm-tests/tests/helm_tests/apiserver/test_apiserver.py
@@ -75,3 +75,18 @@ def test_should_add_volume_and_volume_mount_when_exist_api_server_config(self):
             "subPath": "webserver_config.py",
             "readOnly": True,
         } in jmespath.search("spec.template.spec.containers[0].volumeMounts", docs[0])
+
+
+class TestAPIServerJWTSecret:
+    """Tests API Server JWT secret."""
+
+    def test_should_add_annotations_to_jwt_secret(self):
+        docs = render_chart(
+            values={
+                "jwtSecretAnnotations": {"test_annotation": "test_annotation_value"},
+            },
+            show_only=["templates/secrets/jwt-secret.yaml"],
+        )[0]
+
+        assert "annotations" in jmespath.search("metadata", docs)
+        assert jmespath.search("metadata.annotations", docs)["test_annotation"] == "test_annotation_value"

From 9946062ccc32f9e6dec8f39d06d407dea80d964e Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Wed, 25 Jun 2025 00:16:11 +0200
Subject: [PATCH 161/381] Add few small improvements in publishing workflow:
 (#52136)

* allow to use any reference not only tag when publishing docs
* autocomplete destinations for publish-to-s3 command
---
 ..._release-management_publish-docs-to-s3.svg | 44 ++++++++++++-------
 ..._release-management_publish-docs-to-s3.txt |  2 +-
 .../output_workflow-run_publish-docs.svg      | 28 +++++++-----
 .../output_workflow-run_publish-docs.txt      |  2 +-
 .../commands/release_management_commands.py   |  2 +
 .../commands/workflow_commands.py             | 31 ++++++++-----
 .../commands/workflow_commands_config.py      |  1 +
 .../src/airflow_breeze/global_constants.py    |  5 +++
 8 files changed, 75 insertions(+), 40 deletions(-)

diff --git a/dev/breeze/doc/images/output_release-management_publish-docs-to-s3.svg b/dev/breeze/doc/images/output_release-management_publish-docs-to-s3.svg
index 85823e8559ed5..f9714ff976f05 100644
--- a/dev/breeze/doc/images/output_release-management_publish-docs-to-s3.svg
+++ b/dev/breeze/doc/images/output_release-management_publish-docs-to-s3.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 562.4" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 635.5999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -45,7 +45,7 @@
 
     <defs>
     <clipPath id="breeze-release-management-publish-docs-to-s3-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="511.4" />
+      <rect x="0" y="0" width="1463.0" height="584.5999999999999" />
     </clipPath>
     <clipPath id="breeze-release-management-publish-docs-to-s3-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -107,9 +107,18 @@
 <clipPath id="breeze-release-management-publish-docs-to-s3-line-19">
     <rect x="0" y="465.1" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-release-management-publish-docs-to-s3-line-20">
+    <rect x="0" y="489.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-publish-docs-to-s3-line-21">
+    <rect x="0" y="513.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-publish-docs-to-s3-line-22">
+    <rect x="0" y="538.3" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="560.4" rx="8"/><text class="breeze-release-management-publish-docs-to-s3-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;publish-docs-to-s3</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="633.6" rx="8"/><text class="breeze-release-management-publish-docs-to-s3-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;publish-docs-to-s3</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -126,20 +135,23 @@
 </text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-4)">
 </text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-5)">╭─</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="24.4" y="142" textLength="244" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-5)">&#160;Publish&#160;docs&#160;to&#160;S3&#160;</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="268.4" y="142" textLength="1171.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-5)">────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-5)">─╮</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-5)">
 </text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-6)">│</text><text class="breeze-release-management-publish-docs-to-s3-r6" x="24.4" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-6)">*</text><text class="breeze-release-management-publish-docs-to-s3-r4" x="61" y="166.4" textLength="207.4" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-6)">--source-dir-path</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="463.6" y="166.4" textLength="671" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-6)">Path&#160;to&#160;the&#160;directory&#160;with&#160;the&#160;generated&#160;documentation.</text><text class="breeze-release-management-publish-docs-to-s3-r7" x="1146.8" y="166.4" textLength="73.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-6)">(TEXT)</text><text class="breeze-release-management-publish-docs-to-s3-r8" x="1232.2" y="166.4" textLength="122" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-6)">[required]</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-6)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-6)">
-</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-7)">│</text><text class="breeze-release-management-publish-docs-to-s3-r6" x="24.4" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-7)">*</text><text class="breeze-release-management-publish-docs-to-s3-r4" x="61" y="190.8" textLength="268.4" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-7)">--destination-location</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="463.6" y="190.8" textLength="658.8" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-7)">Name&#160;of&#160;the&#160;S3&#160;bucket&#160;to&#160;publish&#160;the&#160;documentation&#160;to.</text><text class="breeze-release-management-publish-docs-to-s3-r7" x="1134.6" y="190.8" textLength="73.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-7)">(TEXT)</text><text class="breeze-release-management-publish-docs-to-s3-r8" x="1220" y="190.8" textLength="122" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-7)">[required]</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-7)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-7)">
-</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-8)">│</text><text class="breeze-release-management-publish-docs-to-s3-r4" x="61" y="215.2" textLength="170.8" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-8)">--exclude-docs</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="463.6" y="215.2" textLength="854" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-8)">Comma&#160;separated&#160;list&#160;of&#160;directories&#160;to&#160;exclude&#160;from&#160;the&#160;documentation.</text><text class="breeze-release-management-publish-docs-to-s3-r7" x="1329.8" y="215.2" textLength="73.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-8)">(TEXT)</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-8)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-8)">
-</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-9)">│</text><text class="breeze-release-management-publish-docs-to-s3-r4" x="61" y="239.6" textLength="109.8" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-9)">--dry-run</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="463.6" y="239.6" textLength="488" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-9)">Dry&#160;run&#160;-&#160;only&#160;print&#160;what&#160;would&#160;be&#160;done.</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-9)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-9)">
-</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-10)">│</text><text class="breeze-release-management-publish-docs-to-s3-r4" x="61" y="264" textLength="134.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-10)">--overwrite</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="463.6" y="264" textLength="512.4" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-10)">Overwrite&#160;existing&#160;files&#160;in&#160;the&#160;S3&#160;bucket.</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-10)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-10)">
-</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-11)">│</text><text class="breeze-release-management-publish-docs-to-s3-r4" x="61" y="288.4" textLength="158.6" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-11)">--parallelism</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="463.6" y="288.4" textLength="915" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-11)">Maximum&#160;number&#160;of&#160;processes&#160;to&#160;use&#160;while&#160;running&#160;the&#160;operation&#160;in&#160;parallel.</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-11)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-11)">
-</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-12)">│</text><text class="breeze-release-management-publish-docs-to-s3-r7" x="463.6" y="312.8" textLength="915" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-12)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-12)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-12)">
-</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-13)">│</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="463.6" y="337.2" textLength="915" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-13)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-13)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-13)">
-</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-14)">│</text><text class="breeze-release-management-publish-docs-to-s3-r4" x="61" y="361.6" textLength="207.4" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-14)">--stable-versions</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="463.6" y="361.6" textLength="829.6" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-14)">Publish&#160;all&#160;the&#160;stable&#160;versions&#160;of&#160;the&#160;docs&#160;in&#160;the&#160;source&#160;directory.</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-14)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-14)">
-</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-15)">│</text><text class="breeze-release-management-publish-docs-to-s3-r4" x="61" y="386" textLength="219.6" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-15)">--publish-all-docs</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="463.6" y="386" textLength="671" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-15)">Publish&#160;all&#160;the&#160;available&#160;docs&#160;in&#160;the&#160;source&#160;directory.</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-15)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-15)">
-</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-16)">│</text><text class="breeze-release-management-publish-docs-to-s3-r4" x="61" y="410.4" textLength="353.8" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-16)">--skip-write-to-stable-folder</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="463.6" y="410.4" textLength="439.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-16)">Skip&#160;writing&#160;stable&#160;versions&#160;folder.</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-16)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-16)">
-</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="434.8" textLength="1464" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-17)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-17)">
-</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="459.2" textLength="24.4" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-18)">╭─</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="24.4" y="459.2" textLength="195.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-18)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="219.6" y="459.2" textLength="1220" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-18)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1439.6" y="459.2" textLength="24.4" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-18)">─╮</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-18)">
-</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-19)">│</text><text class="breeze-release-management-publish-docs-to-s3-r4" x="24.4" y="483.6" textLength="73.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-19)">--help</text><text class="breeze-release-management-publish-docs-to-s3-r9" x="122" y="483.6" textLength="24.4" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-19)">-h</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="170.8" y="483.6" textLength="329.4" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-19)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-19)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-19)">
+</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-7)">│</text><text class="breeze-release-management-publish-docs-to-s3-r6" x="24.4" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-7)">*</text><text class="breeze-release-management-publish-docs-to-s3-r4" x="61" y="190.8" textLength="268.4" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-7)">--destination-location</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="463.6" y="190.8" textLength="976" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-7)">Name&#160;of&#160;the&#160;S3&#160;bucket&#160;to&#160;publish&#160;the&#160;documentation&#160;to.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-7)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-7)">
+</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-8)">│</text><text class="breeze-release-management-publish-docs-to-s3-r7" x="463.6" y="215.2" textLength="976" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-8)">(s3://live-docs-airflow-apache-org/docs/&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-8)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-8)">
+</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-9)">│</text><text class="breeze-release-management-publish-docs-to-s3-r7" x="463.6" y="239.6" textLength="976" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-9)">s3://staging-docs-airflow-apache-org/docs/)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-9)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-9)">
+</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-10)">│</text><text class="breeze-release-management-publish-docs-to-s3-r8" x="463.6" y="264" textLength="976" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-10)">[required]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-10)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-10)">
+</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-11)">│</text><text class="breeze-release-management-publish-docs-to-s3-r4" x="61" y="288.4" textLength="170.8" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-11)">--exclude-docs</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="463.6" y="288.4" textLength="854" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-11)">Comma&#160;separated&#160;list&#160;of&#160;directories&#160;to&#160;exclude&#160;from&#160;the&#160;documentation.</text><text class="breeze-release-management-publish-docs-to-s3-r7" x="1329.8" y="288.4" textLength="73.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-11)">(TEXT)</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-11)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-11)">
+</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-12)">│</text><text class="breeze-release-management-publish-docs-to-s3-r4" x="61" y="312.8" textLength="109.8" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-12)">--dry-run</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="463.6" y="312.8" textLength="488" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-12)">Dry&#160;run&#160;-&#160;only&#160;print&#160;what&#160;would&#160;be&#160;done.</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-12)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-12)">
+</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-13)">│</text><text class="breeze-release-management-publish-docs-to-s3-r4" x="61" y="337.2" textLength="134.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-13)">--overwrite</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="463.6" y="337.2" textLength="512.4" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-13)">Overwrite&#160;existing&#160;files&#160;in&#160;the&#160;S3&#160;bucket.</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-13)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-13)">
+</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-14)">│</text><text class="breeze-release-management-publish-docs-to-s3-r4" x="61" y="361.6" textLength="158.6" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-14)">--parallelism</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="463.6" y="361.6" textLength="915" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-14)">Maximum&#160;number&#160;of&#160;processes&#160;to&#160;use&#160;while&#160;running&#160;the&#160;operation&#160;in&#160;parallel.</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-14)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-14)">
+</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-15)">│</text><text class="breeze-release-management-publish-docs-to-s3-r7" x="463.6" y="386" textLength="915" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-15)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-15)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-15)">
+</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-16)">│</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="463.6" y="410.4" textLength="915" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-16)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-16)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-16)">
+</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-17)">│</text><text class="breeze-release-management-publish-docs-to-s3-r4" x="61" y="434.8" textLength="207.4" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-17)">--stable-versions</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="463.6" y="434.8" textLength="829.6" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-17)">Publish&#160;all&#160;the&#160;stable&#160;versions&#160;of&#160;the&#160;docs&#160;in&#160;the&#160;source&#160;directory.</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-17)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-17)">
+</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-18)">│</text><text class="breeze-release-management-publish-docs-to-s3-r4" x="61" y="459.2" textLength="219.6" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-18)">--publish-all-docs</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="463.6" y="459.2" textLength="671" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-18)">Publish&#160;all&#160;the&#160;available&#160;docs&#160;in&#160;the&#160;source&#160;directory.</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-18)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-18)">
+</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-19)">│</text><text class="breeze-release-management-publish-docs-to-s3-r4" x="61" y="483.6" textLength="353.8" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-19)">--skip-write-to-stable-folder</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="463.6" y="483.6" textLength="439.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-19)">Skip&#160;writing&#160;stable&#160;versions&#160;folder.</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-19)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-19)">
 </text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="508" textLength="1464" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-20)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-20)">
+</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="532.4" textLength="24.4" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-21)">╭─</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="24.4" y="532.4" textLength="195.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-21)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="219.6" y="532.4" textLength="1220" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-21)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1439.6" y="532.4" textLength="24.4" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-21)">─╮</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-21)">
+</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-22)">│</text><text class="breeze-release-management-publish-docs-to-s3-r4" x="24.4" y="556.8" textLength="73.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-22)">--help</text><text class="breeze-release-management-publish-docs-to-s3-r9" x="122" y="556.8" textLength="24.4" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-22)">-h</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="170.8" y="556.8" textLength="329.4" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-22)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-22)">│</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-22)">
+</text><text class="breeze-release-management-publish-docs-to-s3-r5" x="0" y="581.2" textLength="1464" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-23)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-publish-docs-to-s3-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-to-s3-line-23)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_release-management_publish-docs-to-s3.txt b/dev/breeze/doc/images/output_release-management_publish-docs-to-s3.txt
index 52bbf87766612..e4fb5d52989a4 100644
--- a/dev/breeze/doc/images/output_release-management_publish-docs-to-s3.txt
+++ b/dev/breeze/doc/images/output_release-management_publish-docs-to-s3.txt
@@ -1 +1 @@
-870594f56b40b6394366a382221f29f5
+568376d5841031b748c6021beef486b5
diff --git a/dev/breeze/doc/images/output_workflow-run_publish-docs.svg b/dev/breeze/doc/images/output_workflow-run_publish-docs.svg
index bd76a72646445..55e3af4f0c3dd 100644
--- a/dev/breeze/doc/images/output_workflow-run_publish-docs.svg
+++ b/dev/breeze/doc/images/output_workflow-run_publish-docs.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 684.4" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 733.1999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -45,7 +45,7 @@
 
     <defs>
     <clipPath id="breeze-workflow-run-publish-docs-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="633.4" />
+      <rect x="0" y="0" width="1463.0" height="682.1999999999999" />
     </clipPath>
     <clipPath id="breeze-workflow-run-publish-docs-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -122,9 +122,15 @@
 <clipPath id="breeze-workflow-run-publish-docs-line-24">
     <rect x="0" y="587.1" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-workflow-run-publish-docs-line-25">
+    <rect x="0" y="611.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-workflow-run-publish-docs-line-26">
+    <rect x="0" y="635.9" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="682.4" rx="8"/><text class="breeze-workflow-run-publish-docs-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;workflow-run&#160;publish-docs</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="731.2" rx="8"/><text class="breeze-workflow-run-publish-docs-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;workflow-run&#160;publish-docs</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -153,13 +159,15 @@
 </text><text class="breeze-workflow-run-publish-docs-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-16)">
 </text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="434.8" textLength="24.4" clip-path="url(#breeze-workflow-run-publish-docs-line-17)">╭─</text><text class="breeze-workflow-run-publish-docs-r5" x="24.4" y="434.8" textLength="378.2" clip-path="url(#breeze-workflow-run-publish-docs-line-17)">&#160;Trigger&#160;publish&#160;docs&#160;workflow&#160;</text><text class="breeze-workflow-run-publish-docs-r5" x="402.6" y="434.8" textLength="1037" clip-path="url(#breeze-workflow-run-publish-docs-line-17)">─────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-workflow-run-publish-docs-r5" x="1439.6" y="434.8" textLength="24.4" clip-path="url(#breeze-workflow-run-publish-docs-line-17)">─╮</text><text class="breeze-workflow-run-publish-docs-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-17)">
 </text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-18)">│</text><text class="breeze-workflow-run-publish-docs-r6" x="24.4" y="459.2" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-18)">*</text><text class="breeze-workflow-run-publish-docs-r4" x="61" y="459.2" textLength="61" clip-path="url(#breeze-workflow-run-publish-docs-line-18)">--ref</text><text class="breeze-workflow-run-publish-docs-r1" x="463.6" y="459.2" textLength="646.6" clip-path="url(#breeze-workflow-run-publish-docs-line-18)">Git&#160;reference&#160;tag&#160;to&#160;checkout&#160;to&#160;build&#160;documentation.</text><text class="breeze-workflow-run-publish-docs-r7" x="1122.4" y="459.2" textLength="73.2" clip-path="url(#breeze-workflow-run-publish-docs-line-18)">(TEXT)</text><text class="breeze-workflow-run-publish-docs-r8" x="1207.8" y="459.2" textLength="122" clip-path="url(#breeze-workflow-run-publish-docs-line-18)">[required]</text><text class="breeze-workflow-run-publish-docs-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-18)">│</text><text class="breeze-workflow-run-publish-docs-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-18)">
-</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-19)">│</text><text class="breeze-workflow-run-publish-docs-r4" x="61" y="483.6" textLength="170.8" clip-path="url(#breeze-workflow-run-publish-docs-line-19)">--exclude-docs</text><text class="breeze-workflow-run-publish-docs-r1" x="463.6" y="483.6" textLength="805.2" clip-path="url(#breeze-workflow-run-publish-docs-line-19)">Comma&#160;separated&#160;list&#160;of&#160;docs&#160;packages&#160;to&#160;exclude&#160;from&#160;the&#160;publish.</text><text class="breeze-workflow-run-publish-docs-r7" x="1281" y="483.6" textLength="73.2" clip-path="url(#breeze-workflow-run-publish-docs-line-19)">(TEXT)</text><text class="breeze-workflow-run-publish-docs-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-19)">│</text><text class="breeze-workflow-run-publish-docs-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-19)">
-</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-20)">│</text><text class="breeze-workflow-run-publish-docs-r4" x="61" y="508" textLength="122" clip-path="url(#breeze-workflow-run-publish-docs-line-20)">--site-env</text><text class="breeze-workflow-run-publish-docs-r1" x="463.6" y="508" textLength="671" clip-path="url(#breeze-workflow-run-publish-docs-line-20)">S3&#160;bucket&#160;to&#160;which&#160;the&#160;documentation&#160;will&#160;be&#160;published.</text><text class="breeze-workflow-run-publish-docs-r7" x="1146.8" y="508" textLength="280.6" clip-path="url(#breeze-workflow-run-publish-docs-line-20)">(auto&#160;|&#160;live&#160;|&#160;staging)</text><text class="breeze-workflow-run-publish-docs-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-20)">│</text><text class="breeze-workflow-run-publish-docs-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-20)">
-</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-21)">│</text><text class="breeze-workflow-run-publish-docs-r4" x="61" y="532.4" textLength="353.8" clip-path="url(#breeze-workflow-run-publish-docs-line-21)">--skip-write-to-stable-folder</text><text class="breeze-workflow-run-publish-docs-r1" x="463.6" y="532.4" textLength="366" clip-path="url(#breeze-workflow-run-publish-docs-line-21)">Skip&#160;writing&#160;to&#160;stable&#160;folder.</text><text class="breeze-workflow-run-publish-docs-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-21)">│</text><text class="breeze-workflow-run-publish-docs-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-21)">
-</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="556.8" textLength="1464" clip-path="url(#breeze-workflow-run-publish-docs-line-22)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-workflow-run-publish-docs-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-22)">
-</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="581.2" textLength="24.4" clip-path="url(#breeze-workflow-run-publish-docs-line-23)">╭─</text><text class="breeze-workflow-run-publish-docs-r5" x="24.4" y="581.2" textLength="195.2" clip-path="url(#breeze-workflow-run-publish-docs-line-23)">&#160;Common&#160;options&#160;</text><text class="breeze-workflow-run-publish-docs-r5" x="219.6" y="581.2" textLength="1220" clip-path="url(#breeze-workflow-run-publish-docs-line-23)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-workflow-run-publish-docs-r5" x="1439.6" y="581.2" textLength="24.4" clip-path="url(#breeze-workflow-run-publish-docs-line-23)">─╮</text><text class="breeze-workflow-run-publish-docs-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-23)">
-</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-24)">│</text><text class="breeze-workflow-run-publish-docs-r4" x="24.4" y="605.6" textLength="73.2" clip-path="url(#breeze-workflow-run-publish-docs-line-24)">--help</text><text class="breeze-workflow-run-publish-docs-r9" x="122" y="605.6" textLength="24.4" clip-path="url(#breeze-workflow-run-publish-docs-line-24)">-h</text><text class="breeze-workflow-run-publish-docs-r1" x="170.8" y="605.6" textLength="329.4" clip-path="url(#breeze-workflow-run-publish-docs-line-24)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-workflow-run-publish-docs-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-24)">│</text><text class="breeze-workflow-run-publish-docs-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-24)">
-</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="630" textLength="1464" clip-path="url(#breeze-workflow-run-publish-docs-line-25)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-workflow-run-publish-docs-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-25)">
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-19)">│</text><text class="breeze-workflow-run-publish-docs-r4" x="61" y="483.6" textLength="256.2" clip-path="url(#breeze-workflow-run-publish-docs-line-19)">--skip-tag-validation</text><text class="breeze-workflow-run-publish-docs-r1" x="463.6" y="483.6" textLength="976" clip-path="url(#breeze-workflow-run-publish-docs-line-19)">Skip&#160;validation&#160;of&#160;the&#160;tag.&#160;Allows&#160;to&#160;use&#160;`main`&#160;or&#160;commit&#160;hash.&#160;Use&#160;with&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-workflow-run-publish-docs-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-19)">│</text><text class="breeze-workflow-run-publish-docs-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-19)">
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-20)">│</text><text class="breeze-workflow-run-publish-docs-r1" x="463.6" y="508" textLength="976" clip-path="url(#breeze-workflow-run-publish-docs-line-20)">caution.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-workflow-run-publish-docs-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-20)">│</text><text class="breeze-workflow-run-publish-docs-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-20)">
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-21)">│</text><text class="breeze-workflow-run-publish-docs-r4" x="61" y="532.4" textLength="170.8" clip-path="url(#breeze-workflow-run-publish-docs-line-21)">--exclude-docs</text><text class="breeze-workflow-run-publish-docs-r1" x="463.6" y="532.4" textLength="805.2" clip-path="url(#breeze-workflow-run-publish-docs-line-21)">Comma&#160;separated&#160;list&#160;of&#160;docs&#160;packages&#160;to&#160;exclude&#160;from&#160;the&#160;publish.</text><text class="breeze-workflow-run-publish-docs-r7" x="1281" y="532.4" textLength="73.2" clip-path="url(#breeze-workflow-run-publish-docs-line-21)">(TEXT)</text><text class="breeze-workflow-run-publish-docs-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-21)">│</text><text class="breeze-workflow-run-publish-docs-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-21)">
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-22)">│</text><text class="breeze-workflow-run-publish-docs-r4" x="61" y="556.8" textLength="122" clip-path="url(#breeze-workflow-run-publish-docs-line-22)">--site-env</text><text class="breeze-workflow-run-publish-docs-r1" x="463.6" y="556.8" textLength="671" clip-path="url(#breeze-workflow-run-publish-docs-line-22)">S3&#160;bucket&#160;to&#160;which&#160;the&#160;documentation&#160;will&#160;be&#160;published.</text><text class="breeze-workflow-run-publish-docs-r7" x="1146.8" y="556.8" textLength="280.6" clip-path="url(#breeze-workflow-run-publish-docs-line-22)">(auto&#160;|&#160;live&#160;|&#160;staging)</text><text class="breeze-workflow-run-publish-docs-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-22)">│</text><text class="breeze-workflow-run-publish-docs-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-22)">
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-23)">│</text><text class="breeze-workflow-run-publish-docs-r4" x="61" y="581.2" textLength="353.8" clip-path="url(#breeze-workflow-run-publish-docs-line-23)">--skip-write-to-stable-folder</text><text class="breeze-workflow-run-publish-docs-r1" x="463.6" y="581.2" textLength="366" clip-path="url(#breeze-workflow-run-publish-docs-line-23)">Skip&#160;writing&#160;to&#160;stable&#160;folder.</text><text class="breeze-workflow-run-publish-docs-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-23)">│</text><text class="breeze-workflow-run-publish-docs-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-23)">
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="605.6" textLength="1464" clip-path="url(#breeze-workflow-run-publish-docs-line-24)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-workflow-run-publish-docs-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-24)">
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="630" textLength="24.4" clip-path="url(#breeze-workflow-run-publish-docs-line-25)">╭─</text><text class="breeze-workflow-run-publish-docs-r5" x="24.4" y="630" textLength="195.2" clip-path="url(#breeze-workflow-run-publish-docs-line-25)">&#160;Common&#160;options&#160;</text><text class="breeze-workflow-run-publish-docs-r5" x="219.6" y="630" textLength="1220" clip-path="url(#breeze-workflow-run-publish-docs-line-25)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-workflow-run-publish-docs-r5" x="1439.6" y="630" textLength="24.4" clip-path="url(#breeze-workflow-run-publish-docs-line-25)">─╮</text><text class="breeze-workflow-run-publish-docs-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-25)">
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-26)">│</text><text class="breeze-workflow-run-publish-docs-r4" x="24.4" y="654.4" textLength="73.2" clip-path="url(#breeze-workflow-run-publish-docs-line-26)">--help</text><text class="breeze-workflow-run-publish-docs-r9" x="122" y="654.4" textLength="24.4" clip-path="url(#breeze-workflow-run-publish-docs-line-26)">-h</text><text class="breeze-workflow-run-publish-docs-r1" x="170.8" y="654.4" textLength="329.4" clip-path="url(#breeze-workflow-run-publish-docs-line-26)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-workflow-run-publish-docs-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-26)">│</text><text class="breeze-workflow-run-publish-docs-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-26)">
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="678.8" textLength="1464" clip-path="url(#breeze-workflow-run-publish-docs-line-27)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-workflow-run-publish-docs-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-27)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_workflow-run_publish-docs.txt b/dev/breeze/doc/images/output_workflow-run_publish-docs.txt
index 053b44077f68b..b64cbd5c82a07 100644
--- a/dev/breeze/doc/images/output_workflow-run_publish-docs.txt
+++ b/dev/breeze/doc/images/output_workflow-run_publish-docs.txt
@@ -1 +1 @@
-75a6fa574a8867b8a681f4792aa21a3c
+aee3662a42543b525bf4ccfd23adaf62
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index 8ebbef8194d1c..58514b29e61b7 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -96,6 +96,7 @@
     APACHE_AIRFLOW_GITHUB_REPOSITORY,
     CURRENT_PYTHON_MAJOR_MINOR_VERSIONS,
     DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
+    DESTINATION_LOCATIONS,
     MULTI_PLATFORM,
     UV_VERSION,
 )
@@ -3901,6 +3902,7 @@ def generate_issue_content(
 @click.option(
     "--destination-location",
     help="Name of the S3 bucket to publish the documentation to.",
+    type=NotVerifiedBetterChoice(DESTINATION_LOCATIONS),
     required=True,
 )
 @click.option(
diff --git a/dev/breeze/src/airflow_breeze/commands/workflow_commands.py b/dev/breeze/src/airflow_breeze/commands/workflow_commands.py
index 476d0cfe9e7d7..0fb8c4fc5d90b 100644
--- a/dev/breeze/src/airflow_breeze/commands/workflow_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/workflow_commands.py
@@ -52,6 +52,11 @@ def workflow_run():
     help="Git reference tag to checkout to build documentation.",
     required=True,
 )
+@click.option(
+    "--skip-tag-validation",
+    help="Skip validation of the tag. Allows to use `main` or commit hash. Use with caution.",
+    is_flag=True,
+)
 @click.option(
     "--exclude-docs",
     help="Comma separated list of docs packages to exclude from the publish.",
@@ -73,6 +78,7 @@ def workflow_run_publish(
     ref: str,
     exclude_docs: str,
     site_env: str,
+    skip_tag_validation: bool,
     doc_packages: tuple[str, ...],
     skip_write_to_stable_folder: bool = False,
 ):
@@ -90,20 +96,21 @@ def workflow_run_publish(
         f"[blue]Validating ref: {ref}[/blue]",
     )
 
-    tag_result = run_command(
-        ["gh", "api", f"repos/apache/airflow/git/refs/tags/{ref}"],
-        capture_output=True,
-        check=False,
-    )
+    if not skip_tag_validation:
+        tag_result = run_command(
+            ["gh", "api", f"repos/apache/airflow/git/refs/tags/{ref}"],
+            capture_output=True,
+            check=False,
+        )
 
-    stdout = tag_result.stdout.decode("utf-8")
-    tag_respo = json.loads(stdout)
+        stdout = tag_result.stdout.decode("utf-8")
+        tag_respo = json.loads(stdout)
 
-    if not tag_respo.get("ref"):
-        get_console().print(
-            f"[red]Error: Ref {ref} is not exists in repo apache/airflow .[/red]",
-        )
-        sys.exit(1)
+        if not tag_respo.get("ref"):
+            get_console().print(
+                f"[red]Error: Ref {ref} does not exists in repo apache/airflow .[/red]",
+            )
+            sys.exit(1)
 
     get_console().print(
         f"[blue]Triggering workflow {WORKFLOW_NAME_MAPS['publish-docs']}: at {APACHE_AIRFLOW_REPO}[/blue]",
diff --git a/dev/breeze/src/airflow_breeze/commands/workflow_commands_config.py b/dev/breeze/src/airflow_breeze/commands/workflow_commands_config.py
index 6a5025dcf9bfb..3ffb4e92f117d 100644
--- a/dev/breeze/src/airflow_breeze/commands/workflow_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/workflow_commands_config.py
@@ -27,6 +27,7 @@
             "name": "Trigger publish docs workflow",
             "options": [
                 "--ref",
+                "--skip-tag-validation",
                 "--exclude-docs",
                 "--site-env",
                 "--skip-write-to-stable-folder",
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py b/dev/breeze/src/airflow_breeze/global_constants.py
index 8d280006f1db3..a7c8096576c4d 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -208,6 +208,11 @@
     "task-sdk",
 ]
 
+DESTINATION_LOCATIONS = [
+    "s3://live-docs-airflow-apache-org/docs/",
+    "s3://staging-docs-airflow-apache-org/docs/",
+]
+
 
 @clearable_cache
 def all_selective_core_test_types() -> tuple[str, ...]:

From c77fdd6869e97f78268995dd1af4b0f3d2f01804 Mon Sep 17 00:00:00 2001
From: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
Date: Wed, 25 Jun 2025 04:02:06 +0530
Subject: [PATCH 162/381] Fix archival for cascading deletes by archiving
 dependent tables first (#51952)

Co-authored-by: Jed Cunningham <jedcunningham@apache.org>
---
 airflow-core/src/airflow/utils/db_cleanup.py  | 68 ++++++++++++++++---
 .../tests/unit/utils/test_db_cleanup.py       | 47 ++++++++++++-
 2 files changed, 103 insertions(+), 12 deletions(-)

diff --git a/airflow-core/src/airflow/utils/db_cleanup.py b/airflow-core/src/airflow/utils/db_cleanup.py
index 02b0307523251..96e803775f803 100644
--- a/airflow-core/src/airflow/utils/db_cleanup.py
+++ b/airflow-core/src/airflow/utils/db_cleanup.py
@@ -73,6 +73,7 @@ class _TableConfig:
         in the table.  to ignore certain records even if they are the latest in the table, you can
         supply additional filters here (e.g. externally triggered dag runs)
     :param keep_last_group_by: if keeping the last record, can keep the last record for each group
+    :param dependent_tables: list of tables which have FK relationship with this table
     """
 
     table_name: str
@@ -81,6 +82,10 @@ class _TableConfig:
     keep_last: bool = False
     keep_last_filters: Any | None = None
     keep_last_group_by: Any | None = None
+    # We explicitly list these tables instead of detecting foreign keys automatically,
+    # because the relationships are unlikely to change and the number of tables is small.
+    # Relying on automation here would increase complexity and reduce maintainability.
+    dependent_tables: list[str] | None = None
 
     def __post_init__(self):
         self.recency_column = column(self.recency_column_name)
@@ -104,7 +109,11 @@ def readable_config(self):
 
 config_list: list[_TableConfig] = [
     _TableConfig(table_name="job", recency_column_name="latest_heartbeat"),
-    _TableConfig(table_name="dag", recency_column_name="last_parsed_time"),
+    _TableConfig(
+        table_name="dag",
+        recency_column_name="last_parsed_time",
+        dependent_tables=["dag_version", "deadline"],
+    ),
     _TableConfig(
         table_name="dag_run",
         recency_column_name="start_date",
@@ -112,12 +121,17 @@ def readable_config(self):
         keep_last=True,
         keep_last_filters=[column("run_type") != DagRunType.MANUAL],
         keep_last_group_by=["dag_id"],
+        dependent_tables=["task_instance", "deadline"],
     ),
     _TableConfig(table_name="asset_event", recency_column_name="timestamp"),
     _TableConfig(table_name="import_error", recency_column_name="timestamp"),
     _TableConfig(table_name="log", recency_column_name="dttm"),
     _TableConfig(table_name="sla_miss", recency_column_name="timestamp"),
-    _TableConfig(table_name="task_instance", recency_column_name="start_date"),
+    _TableConfig(
+        table_name="task_instance",
+        recency_column_name="start_date",
+        dependent_tables=["task_instance_history", "xcom"],
+    ),
     _TableConfig(table_name="task_instance_history", recency_column_name="start_date"),
     _TableConfig(table_name="task_reschedule", recency_column_name="start_date"),
     _TableConfig(table_name="xcom", recency_column_name="timestamp"),
@@ -125,8 +139,16 @@ def readable_config(self):
     _TableConfig(table_name="callback_request", recency_column_name="created_at"),
     _TableConfig(table_name="celery_taskmeta", recency_column_name="date_done"),
     _TableConfig(table_name="celery_tasksetmeta", recency_column_name="date_done"),
-    _TableConfig(table_name="trigger", recency_column_name="created_date"),
-    _TableConfig(table_name="dag_version", recency_column_name="created_at"),
+    _TableConfig(
+        table_name="trigger",
+        recency_column_name="created_date",
+        dependent_tables=["task_instance"],
+    ),
+    _TableConfig(
+        table_name="dag_version",
+        recency_column_name="created_at",
+        dependent_tables=["task_instance", "dag_run"],
+    ),
     _TableConfig(table_name="deadline", recency_column_name="deadline_time"),
 ]
 
@@ -234,6 +256,7 @@ def _do_delete(
             logger.debug("delete statement:\n%s", delete.compile())
             session.execute(delete)
             session.commit()
+
         except BaseException as e:
             raise e
         finally:
@@ -414,17 +437,37 @@ def _suppress_with_logging(table: str, session: Session):
             session.rollback()
 
 
-def _effective_table_names(*, table_names: list[str] | None) -> tuple[set[str], dict[str, _TableConfig]]:
+def _effective_table_names(*, table_names: list[str] | None) -> tuple[list[str], dict[str, _TableConfig]]:
     desired_table_names = set(table_names or config_dict)
-    effective_config_dict = {k: v for k, v in config_dict.items() if k in desired_table_names}
-    effective_table_names = set(effective_config_dict)
-    if desired_table_names != effective_table_names:
-        outliers = desired_table_names - effective_table_names
+
+    outliers = desired_table_names - set(config_dict.keys())
+    if outliers:
         logger.warning(
-            "The following table(s) are not valid choices and will be skipped: %s", sorted(outliers)
+            "The following table(s) are not valid choices and will be skipped: %s",
+            sorted(outliers),
         )
-    if not effective_table_names:
+    desired_table_names = desired_table_names - outliers
+
+    visited: set[str] = set()
+    effective_table_names: list[str] = []
+
+    def collect_deps(table: str):
+        if table in visited:
+            return
+        visited.add(table)
+        config = config_dict[table]
+        for dep in config.dependent_tables or []:
+            collect_deps(dep)
+        effective_table_names.append(table)
+
+    for table_name in desired_table_names:
+        collect_deps(table_name)
+
+    effective_config_dict = {n: config_dict[n] for n in effective_table_names}
+
+    if not effective_config_dict:
         raise SystemExit("No tables selected for db cleanup. Please choose valid table names.")
+
     return effective_table_names, effective_config_dict
 
 
@@ -480,6 +523,8 @@ def run_cleanup(
     :param session: Session representing connection to the metadata database.
     """
     clean_before_timestamp = timezone.coerce_datetime(clean_before_timestamp)
+
+    # Get all tables to clean (root + dependents)
     effective_table_names, effective_config_dict = _effective_table_names(table_names=table_names)
     if dry_run:
         print("Performing dry run for db cleanup.")
@@ -491,6 +536,7 @@ def run_cleanup(
     if not dry_run and confirm:
         _confirm_delete(date=clean_before_timestamp, tables=sorted(effective_table_names))
     existing_tables = reflect_tables(tables=None, session=session).tables
+
     for table_name, table_config in effective_config_dict.items():
         if table_name in existing_tables:
             with _suppress_with_logging(table_name, session):
diff --git a/airflow-core/tests/unit/utils/test_db_cleanup.py b/airflow-core/tests/unit/utils/test_db_cleanup.py
index 00c1cf4efd442..89cfe892f3817 100644
--- a/airflow-core/tests/unit/utils/test_db_cleanup.py
+++ b/airflow-core/tests/unit/utils/test_db_cleanup.py
@@ -26,7 +26,7 @@
 
 import pendulum
 import pytest
-from sqlalchemy import text
+from sqlalchemy import inspect, text
 from sqlalchemy.exc import OperationalError, SQLAlchemyError
 from sqlalchemy.ext.declarative import DeclarativeMeta
 
@@ -303,6 +303,51 @@ def test__cleanup_table(self, table_name, date_add_kwargs, expected_to_delete, r
             else:
                 raise Exception("unexpected")
 
+    @pytest.mark.parametrize(
+        "table_name, expected_archived",
+        [
+            (
+                "dag_run",
+                {"dag_run", "task_instance"},  # Only these are populated
+            ),
+        ],
+    )
+    def test_run_cleanup_archival_integration(self, table_name, expected_archived):
+        """
+        Integration test that verifies:
+        1. Recursive FK-dependent tables are resolved via _effective_table_names().
+        2. run_cleanup() archives only tables with data.
+        3. Archive tables are not created for empty dependent tables.
+        """
+        base_date = pendulum.datetime(2022, 1, 1, tz="UTC")
+        num_tis = 5
+
+        # Create test data for DAG Run and TIs
+        if table_name in {"dag_run", "task_instance"}:
+            create_tis(base_date=base_date, num_tis=num_tis, run_type=DagRunType.MANUAL)
+
+        clean_before_date = base_date.add(days=10)
+
+        with create_session() as session:
+            run_cleanup(
+                clean_before_timestamp=clean_before_date,
+                table_names=[table_name],
+                dry_run=False,
+                confirm=False,
+                session=session,
+            )
+
+            # Inspect archive tables created
+            inspector = inspect(session.bind)
+            archive_tables = {
+                name for name in inspector.get_table_names() if name.startswith(ARCHIVE_TABLE_PREFIX)
+            }
+            actual_archived = {t.split("__", 1)[-1].split("__")[0] for t in archive_tables}
+
+            assert expected_archived <= actual_archived, (
+                f"Expected archive tables not found: {expected_archived - actual_archived}"
+            )
+
     @pytest.mark.parametrize(
         "skip_archive, expected_archives",
         [pytest.param(True, 1, id="skip_archive"), pytest.param(False, 2, id="do_archive")],

From a537bce4b226f80d0904b7bd02609439a6e8f9ca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Josef=20=C5=A0im=C3=A1nek?= <josef.simanek@gmail.com>
Date: Wed, 25 Jun 2025 00:34:19 +0200
Subject: [PATCH 163/381] Chart: Use api-server instead of webserver in
 NOTES.txt for Airflow 3.0+ (#52194)

---
 chart/templates/NOTES.txt | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/chart/templates/NOTES.txt b/chart/templates/NOTES.txt
index 531e6e29aba8b..781caf763023a 100644
--- a/chart/templates/NOTES.txt
+++ b/chart/templates/NOTES.txt
@@ -98,7 +98,11 @@ Flower dashboard:
 {{- else }}
 You can now access your dashboard(s) by executing the following command(s) and visiting the corresponding port at localhost in your browser:
 
+{{- if semverCompare "<3.0.0" .Values.airflowVersion }}
 Airflow Webserver:     kubectl port-forward svc/{{ include "airflow.fullname" . }}-webserver {{ .Values.ports.airflowUI }}:{{ .Values.ports.airflowUI }} --namespace {{ .Release.Namespace }}
+{{- else }}
+Airflow API Server:     kubectl port-forward svc/{{ include "airflow.fullname" . }}-api-server {{ .Values.ports.airflowUI }}:{{ .Values.ports.airflowUI }} --namespace {{ .Release.Namespace }}
+{{- end }}
 
 {{- if .Values.flower.enabled }}
 {{- if or (contains "CeleryExecutor" .Values.executor) (contains "CeleryKubernetesExecutor" .Values.executor)}}

From 40c195cf8e1be8b9f846de0a389d78a2c82b627f Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Wed, 25 Jun 2025 01:46:46 +0200
Subject: [PATCH 164/381] Update providers metadata 2025-06-24 (#52188)

---
 generated/provider_metadata.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/generated/provider_metadata.json b/generated/provider_metadata.json
index 8edd65d45458e..1377821aeab77 100644
--- a/generated/provider_metadata.json
+++ b/generated/provider_metadata.json
@@ -3341,7 +3341,7 @@
             "date_released": "2025-05-08T08:02:07Z"
         },
         "1.0.2": {
-            "associated_airflow_version": "3.0.2",
+            "associated_airflow_version": "3.0.1",
             "date_released": "2025-05-18T10:44:29Z"
         },
         "1.0.3": {
@@ -4867,7 +4867,7 @@
             "date_released": "2025-06-07T18:42:53Z"
         },
         "2.2.1": {
-            "associated_airflow_version": "3.0.1",
+            "associated_airflow_version": "3.0.2",
             "date_released": "2025-06-24T05:30:54Z"
         }
     },

From fecd94fa6f02cc946acd79f847e4c3f8b2fe7522 Mon Sep 17 00:00:00 2001
From: Dheeraj Turaga <dheerajturaga@gmail.com>
Date: Tue, 24 Jun 2025 18:53:07 -0500
Subject: [PATCH 165/381] Doc update to install git in docker image prior 3.0.2
 (#52190)

* Doc update to install git in docker image prior 3.0.2

Prior to Airflow 3.0.2, docker image needs git installed on it to be able to use the git dag bundles feature. Adding this note to the docs

* Fix static checks
---
 .../docs/administration-and-deployment/dag-bundles.rst   | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/airflow-core/docs/administration-and-deployment/dag-bundles.rst b/airflow-core/docs/administration-and-deployment/dag-bundles.rst
index 7dc03ebab1451..057d354b1f523 100644
--- a/airflow-core/docs/administration-and-deployment/dag-bundles.rst
+++ b/airflow-core/docs/administration-and-deployment/dag-bundles.rst
@@ -83,6 +83,15 @@ For example, adding multiple dag bundles to your ``airflow.cfg`` file:
 You can also override the :ref:`config:dag_processor__refresh_interval` per dag bundle by passing it in kwargs.
 This controls how often the dag processor refreshes, or looks for new files, in the dag bundles.
 
+Starting Airflow 3.0.2 git is pre installed in the base image. However, if you are using versions prior 3.0.2, you would need to install git in your docker image.
+
+.. code-block:: Dockerfile
+
+  RUN apt-get update && apt-get install -y git
+  ENV GIT_PYTHON_GIT_EXECUTABLE=/usr/bin/git
+  ENV GIT_PYTHON_REFRESH=quiet
+
+
 Writing custom dag bundles
 --------------------------
 

From 2d6d3d8f546a9a29115ea1d29cdcb2c1e6fcc838 Mon Sep 17 00:00:00 2001
From: Isaiah Iruoha <76797894+isaiahiruoha@users.noreply.github.com>
Date: Tue, 24 Jun 2025 17:06:29 -0700
Subject: [PATCH 166/381] Add Airflow 3.0+ Task SDK support to AWS Batch
 Executor (#52121)

Added Task SDK support for AWS BatchExecutor to enable compatibility with Airflow 3.0+.

The AWS BatchExecutor lacked support for handling Task SDK workloads, which has already been supported in the AWS ECSExecutor, changes were made to add this functionality. This meant the executor couldn't properly function with the latest Airflow architecture.

Changes:

- Implemented handling for ExecuteTask workloads in queue_workload method
- Added _process_workloads method to properly process Task SDK workloads
- Modified execute_async to handle cases where a workload object is passed instead of a direct command
- Added serialization logic to convert workloads to JSON for execution in AWS Batch containers
- Added new test case to verify Task SDK integration works correctly
---
 .../aws/executors/batch/batch_executor.py     | 51 ++++++++++++++
 .../executors/batch/test_batch_executor.py    | 69 +++++++++++++++++++
 2 files changed, 120 insertions(+)

diff --git a/providers/amazon/src/airflow/providers/amazon/aws/executors/batch/batch_executor.py b/providers/amazon/src/airflow/providers/amazon/aws/executors/batch/batch_executor.py
index acb8fcc55aa19..7288c0146b448 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/executors/batch/batch_executor.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/executors/batch/batch_executor.py
@@ -36,11 +36,15 @@
     exponential_backoff_retry,
 )
 from airflow.providers.amazon.aws.hooks.batch_client import BatchClientHook
+from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.stats import Stats
 from airflow.utils import timezone
 from airflow.utils.helpers import merge_dicts
 
 if TYPE_CHECKING:
+    from sqlalchemy.orm import Session
+
+    from airflow.executors import workloads
     from airflow.models.taskinstance import TaskInstance, TaskInstanceKey
 from airflow.providers.amazon.aws.executors.batch.boto_schema import (
     BatchDescribeJobsResponseSchema,
@@ -97,6 +101,11 @@ class AwsBatchExecutor(BaseExecutor):
     # AWS only allows a maximum number of JOBs in the describe_jobs function
     DESCRIBE_JOBS_BATCH_SIZE = 99
 
+    if TYPE_CHECKING and AIRFLOW_V_3_0_PLUS:
+        # In the v3 path, we store workloads, not commands as strings.
+        # TODO: TaskSDK: move this type change into BaseExecutor
+        queued_tasks: dict[TaskInstanceKey, workloads.All]  # type: ignore[assignment]
+
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         self.active_workers = BatchJobCollection()
@@ -106,6 +115,30 @@ def __init__(self, *args, **kwargs):
         self.IS_BOTO_CONNECTION_HEALTHY = False
         self.submit_job_kwargs = self._load_submit_kwargs()
 
+    def queue_workload(self, workload: workloads.All, session: Session | None) -> None:
+        from airflow.executors import workloads
+
+        if not isinstance(workload, workloads.ExecuteTask):
+            raise RuntimeError(f"{type(self)} cannot handle workloads of type {type(workload)}")
+        ti = workload.ti
+        self.queued_tasks[ti.key] = workload
+
+    def _process_workloads(self, workloads: Sequence[workloads.All]) -> None:
+        from airflow.executors.workloads import ExecuteTask
+
+        # Airflow V3 version
+        for w in workloads:
+            if not isinstance(w, ExecuteTask):
+                raise RuntimeError(f"{type(self)} cannot handle workloads of type {type(w)}")
+            command = [w]
+            key = w.ti.key
+            queue = w.ti.queue
+            executor_config = w.ti.executor_config or {}
+
+            del self.queued_tasks[key]
+            self.execute_async(key=key, command=command, queue=queue, executor_config=executor_config)  # type: ignore[arg-type]
+            self.running.add(key)
+
     def check_health(self):
         """Make a test API call to check the health of the Batch Executor."""
         success_status = "succeeded."
@@ -343,6 +376,24 @@ def execute_async(self, key: TaskInstanceKey, command: CommandType, queue=None,
         if executor_config and "command" in executor_config:
             raise ValueError('Executor Config should never override "command"')
 
+        if len(command) == 1:
+            from airflow.executors.workloads import ExecuteTask
+
+            if isinstance(command[0], ExecuteTask):
+                workload = command[0]
+                ser_input = workload.model_dump_json()
+                command = [
+                    "python",
+                    "-m",
+                    "airflow.sdk.execution_time.execute_workload",
+                    "--json-string",
+                    ser_input,
+                ]
+            else:
+                raise ValueError(
+                    f"BatchExecutor doesn't know how to handle workload of type: {type(command[0])}"
+                )
+
         self.pending_jobs.append(
             BatchQueuedJob(
                 key=key,
diff --git a/providers/amazon/tests/unit/amazon/aws/executors/batch/test_batch_executor.py b/providers/amazon/tests/unit/amazon/aws/executors/batch/test_batch_executor.py
index 31c19edd05c02..1e8e08eccefcf 100644
--- a/providers/amazon/tests/unit/amazon/aws/executors/batch/test_batch_executor.py
+++ b/providers/amazon/tests/unit/amazon/aws/executors/batch/test_batch_executor.py
@@ -48,6 +48,7 @@
 
 from tests_common import RUNNING_TESTS_AGAINST_AIRFLOW_PACKAGES
 from tests_common.test_utils.config import conf_vars
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 airflow_version = VersionInfo(*map(int, airflow_version_str.split(".")[:3]))
 ARN1 = "arn1"
@@ -199,6 +200,74 @@ def test_execute(self, mock_executor):
         mock_executor.batch.submit_job.assert_called_once()
         assert len(mock_executor.active_workers) == 1
 
+    @pytest.mark.skipif(not AIRFLOW_V_3_0_PLUS, reason="Test requires Airflow 3+")
+    @mock.patch("airflow.providers.amazon.aws.executors.batch.batch_executor.AwsBatchExecutor.running_state")
+    def test_task_sdk(self, running_state_mock, mock_airflow_key, mock_executor, mock_cmd):
+        """Test task sdk execution from end-to-end."""
+        from airflow.executors.workloads import ExecuteTask
+
+        workload = mock.Mock(spec=ExecuteTask)
+        workload.ti = mock.Mock(spec=TaskInstance)
+        workload.ti.key = mock_airflow_key()
+        tags_exec_config = [{"key": "FOO", "value": "BAR"}]
+        workload.ti.executor_config = {"tags": tags_exec_config}
+        ser_workload = json.dumps({"test_key": "test_value"})
+        workload.model_dump_json.return_value = ser_workload
+
+        mock_executor.queue_workload(workload, mock.Mock())
+
+        mock_executor.batch.submit_job.return_value = {"jobId": ARN1, "jobName": "some-job-name"}
+
+        assert mock_executor.queued_tasks[workload.ti.key] == workload
+        assert len(mock_executor.pending_jobs) == 0
+        assert len(mock_executor.running) == 0
+        mock_executor._process_workloads([workload])
+        assert len(mock_executor.queued_tasks) == 0
+        assert len(mock_executor.running) == 1
+        assert workload.ti.key in mock_executor.running
+        assert len(mock_executor.pending_jobs) == 1
+        assert mock_executor.pending_jobs[0].command == [
+            "python",
+            "-m",
+            "airflow.sdk.execution_time.execute_workload",
+            "--json-string",
+            '{"test_key": "test_value"}',
+        ]
+
+        mock_executor.attempt_submit_jobs()
+        mock_executor.batch.submit_job.assert_called_once()
+        assert len(mock_executor.pending_jobs) == 0
+        mock_executor.batch.submit_job.assert_called_once_with(
+            jobDefinition="some-job-def",
+            jobName="some-job-name",
+            jobQueue="some-job-queue",
+            tags=tags_exec_config,
+            containerOverrides={
+                "command": [
+                    "python",
+                    "-m",
+                    "airflow.sdk.execution_time.execute_workload",
+                    "--json-string",
+                    ser_workload,
+                ],
+                "environment": [
+                    {
+                        "name": "AIRFLOW_IS_EXECUTOR_CONTAINER",
+                        "value": "true",
+                    },
+                ],
+            },
+        )
+
+        # Task is stored in active worker.
+        assert len(mock_executor.active_workers) == 1
+        # Get the job_id for this task key
+        job_id = next(
+            job_id for job_id, key in mock_executor.active_workers.id_to_key.items() if key == workload.ti.key
+        )
+        assert job_id == ARN1
+        running_state_mock.assert_called_once_with(workload.ti.key, ARN1)
+
     @mock.patch.object(batch_executor, "calculate_next_attempt_delay", return_value=dt.timedelta(seconds=0))
     def test_attempt_all_jobs_when_some_jobs_fail(self, _, mock_executor):
         """

From 53e2ffd67262f2ca70a168f02c06a56ab101a217 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Wed, 25 Jun 2025 02:17:19 +0200
Subject: [PATCH 167/381] Automatically add "backport" label to dev tool
 changes (#52189)

---
 .github/boring-cyborg.yml                      | 18 ++++++++++++++++++
 dev/README_RELEASE_AIRFLOW.md                  |  6 ------
 .../commands/minor_release_command.py          |  6 ++++++
 3 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/.github/boring-cyborg.yml b/.github/boring-cyborg.yml
index 484cfb333d047..9c5a437d3e07b 100644
--- a/.github/boring-cyborg.yml
+++ b/.github/boring-cyborg.yml
@@ -332,6 +332,24 @@ labelPRBasedOnFilePath:
     - .rat-excludes
     - .readthedocs.yml
 
+  # This should be copy of the "area:dev-tools" above and should be updated when we switch maintenance branch
+  backport-to-v3-0-test:
+    - scripts/**/*
+    - dev/**/*
+    - .github/**/*
+    - Dockerfile.ci
+    - CONTRIBUTING.rst
+    - contributing-docs/**/*
+    - yamllint-config.yml
+    - .asf.yaml
+    - .bash_completion
+    - .dockerignore
+    - .hadolint.yaml
+    - .pre-commit-config.yaml
+    - .rat-excludes
+    - .readthedocs.yml
+
+
   kind:documentation:
     - airflow-core/docs/**/*
     - chart/docs/**/*
diff --git a/dev/README_RELEASE_AIRFLOW.md b/dev/README_RELEASE_AIRFLOW.md
index a5b9266fe76aa..e64b11af80bda 100644
--- a/dev/README_RELEASE_AIRFLOW.md
+++ b/dev/README_RELEASE_AIRFLOW.md
@@ -293,12 +293,6 @@ export AIRFLOW_REPO_ROOT=$(pwd)
 uv tool install -e ./dev/breeze
 ```
 
-or (if you prefer to use pipx):
-
-```shell script
-pipx install -e ./dev/breeze
-```
-
 - For major/minor version release, run the following commands to create the 'test' and 'stable' branches.
 
     ```shell script
diff --git a/dev/breeze/src/airflow_breeze/commands/minor_release_command.py b/dev/breeze/src/airflow_breeze/commands/minor_release_command.py
index edacafdcd7ae5..7e7ffeb6e60bb 100644
--- a/dev/breeze/src/airflow_breeze/commands/minor_release_command.py
+++ b/dev/breeze/src/airflow_breeze/commands/minor_release_command.py
@@ -132,6 +132,12 @@ def instruction_update_version_branch(version_branch):
                 required_approving_review_count: 1
             """
         )
+        console_print()
+        console_print(
+            "Update name of `backport` label to "
+            f"backport-to-v{version_branch}-test in .github/boring-cyborg.yml"
+        )
+        console_print()
         console_print("Once you finish with the above. Commit the changes and make a PR against main")
         confirm_action("I'm done with the changes. Continue?", abort=True)
 

From 57a4599f159872dc47a60928f73be5bee12e96a8 Mon Sep 17 00:00:00 2001
From: Isaiah Iruoha <76797894+isaiahiruoha@users.noreply.github.com>
Date: Tue, 24 Jun 2025 17:53:59 -0700
Subject: [PATCH 168/381] Added additional steps to QuickSights test
 prerequisites (#52198)

---
 providers/amazon/tests/system/amazon/aws/example_quicksight.py | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/providers/amazon/tests/system/amazon/aws/example_quicksight.py b/providers/amazon/tests/system/amazon/aws/example_quicksight.py
index 2411b0dcc4185..906d0688e4f9e 100644
--- a/providers/amazon/tests/system/amazon/aws/example_quicksight.py
+++ b/providers/amazon/tests/system/amazon/aws/example_quicksight.py
@@ -43,6 +43,9 @@
 2. The activation process creates an IAM Role called `aws-quicksight-service-role-v0`.
  You have to add a policy named 'AWSQuickSightS3Policy' with the S3 access permissions.
  The policy name is enforced, and the permissions json can be copied from `AmazonS3FullAccess`.
+3. Navigate to your QuickSight account, select your user account and click "Manage QuickSight".
+ Then select 'Security & Permissions' and under "IAM role in use" specify the
+ `aws-quicksight-service-role-v0` role.
 
 NOTES:  If Create Ingestion fails for any reason, that ingestion name will remain in use and
  future runs will stall with the sensor returning a status of QUEUED "forever".  If you run

From 2e134ac27eb82b2b5feca9175ef90927f693be76 Mon Sep 17 00:00:00 2001
From: Satish Chinthanippu <satish.chinthanippu@teradata.com>
Date: Tue, 24 Jun 2025 20:41:11 -0700
Subject: [PATCH 169/381] OS platform dependent code changed to platform
 independent (#59)

Co-authored-by: Satish Ch <satishchinthanippu@gmail.com>
---
 .../airflow/providers/teradata/hooks/bteq.py  |  18 ++-
 .../providers/teradata/operators/bteq.py      |   2 -
 .../providers/teradata/utils/bteq_util.py     |  29 +++-
 .../tests/unit/teradata/hooks/test_bteq.py    |  32 ++++-
 .../unit/teradata/operators/test_bteq.py      |   4 +-
 .../unit/teradata/utils/test_bteq_util.py     | 124 +++++++++++++++---
 6 files changed, 181 insertions(+), 28 deletions(-)

diff --git a/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py b/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py
index 89aac594ddb18..dae400a638825 100644
--- a/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py
+++ b/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py
@@ -29,6 +29,8 @@
 from airflow.providers.ssh.hooks.ssh import SSHHook
 from airflow.providers.teradata.hooks.ttu import TtuHook
 from airflow.providers.teradata.utils.bteq_util import (
+    get_remote_tmp_dir,
+    identify_os,
     prepare_bteq_command_for_local_execution,
     prepare_bteq_command_for_remote_execution,
     transfer_file_sftp,
@@ -161,7 +163,13 @@ def _transfer_to_and_execute_bteq_on_remote(
                     password = generate_random_password()  # Encryption/Decryption password
                     encrypted_file_path = os.path.join(tmp_dir, "bteq_script.enc")
                     generate_encrypted_file_with_openssl(file_path, password, encrypted_file_path)
+                    if not remote_working_dir:
+                        remote_working_dir = get_remote_tmp_dir(ssh_client)
+                        self.log.debug(
+                            "Transferring encrypted BTEQ script to remote host: %s", remote_working_dir
+                        )
                     remote_encrypted_path = os.path.join(remote_working_dir or "", "bteq_script.enc")
+                    remote_encrypted_path = remote_encrypted_path.replace("/", "\\")
 
                     transfer_file_sftp(ssh_client, encrypted_file_path, remote_encrypted_path)
 
@@ -219,14 +227,20 @@ def _transfer_to_and_execute_bteq_on_remote(
             if encrypted_file_path and os.path.exists(encrypted_file_path):
                 os.remove(encrypted_file_path)
             # Cleanup: Delete the remote temporary file
-            if encrypted_file_path:
-                cleanup_en_command = f"rm -f {remote_encrypted_path}"
+            if remote_encrypted_path:
                 if self.ssh_hook and self.ssh_hook.get_conn():
                     with self.ssh_hook.get_conn() as ssh_client:
                         if ssh_client is None:
                             raise AirflowException(
                                 "Failed to establish SSH connection. `ssh_client` is None."
                             )
+                        # Detect OS
+                        os_info = identify_os(ssh_client)
+                        if "windows" in os_info:
+                            cleanup_en_command = f'del /f /q "{remote_encrypted_path}"'
+                        else:
+                            cleanup_en_command = f"rm -f '{remote_encrypted_path}'"
+                        self.log.debug("cleaning up remote file: %s", cleanup_en_command)
                         ssh_client.exec_command(cleanup_en_command)
 
     def execute_bteq_script_at_local(
diff --git a/providers/teradata/src/airflow/providers/teradata/operators/bteq.py b/providers/teradata/src/airflow/providers/teradata/operators/bteq.py
index 22779be9bfb33..c1373d51e9cd1 100644
--- a/providers/teradata/src/airflow/providers/teradata/operators/bteq.py
+++ b/providers/teradata/src/airflow/providers/teradata/operators/bteq.py
@@ -141,8 +141,6 @@ def execute(self, context: Context) -> int | None:
         elif self.bteq_script_encoding == "UTF16":
             self.temp_file_read_encoding = "UTF-16"
 
-        if not self.remote_working_dir:
-            self.remote_working_dir = "/tmp"
         # Handling execution on local:
         if not self._ssh_hook:
             if self.sql:
diff --git a/providers/teradata/src/airflow/providers/teradata/utils/bteq_util.py b/providers/teradata/src/airflow/providers/teradata/utils/bteq_util.py
index 0741ebb20090c..140c4f6c41262 100644
--- a/providers/teradata/src/airflow/providers/teradata/utils/bteq_util.py
+++ b/providers/teradata/src/airflow/providers/teradata/utils/bteq_util.py
@@ -28,6 +28,11 @@
 from airflow.exceptions import AirflowException
 
 
+def identify_os(ssh_client: SSHClient) -> str:
+    stdin, stdout, stderr = ssh_client.exec_command("uname || ver")
+    return stdout.read().decode().lower()
+
+
 def verify_bteq_installed():
     """Verify if BTEQ is installed and available in the system's PATH."""
     if shutil.which("bteq") is None:
@@ -36,7 +41,15 @@ def verify_bteq_installed():
 
 def verify_bteq_installed_remote(ssh_client: SSHClient):
     """Verify if BTEQ is installed on the remote machine."""
-    stdin, stdout, stderr = ssh_client.exec_command("which bteq")
+    # Detect OS
+    os_info = identify_os(ssh_client)
+
+    if "windows" in os_info:
+        check_cmd = "where bteq"
+    else:
+        check_cmd = "which bteq"
+
+    stdin, stdout, stderr = ssh_client.exec_command(check_cmd)
     exit_status = stdout.channel.recv_exit_status()
     output = stdout.read().strip()
     error = stderr.read().strip()
@@ -53,6 +66,20 @@ def transfer_file_sftp(ssh_client, local_path, remote_path):
     sftp.close()
 
 
+def get_remote_tmp_dir(ssh_client):
+    os_info = identify_os(ssh_client)
+
+    if "windows" in os_info:
+        # Try getting Windows temp dir
+        stdin, stdout, stderr = ssh_client.exec_command("echo %TEMP%")
+        tmp_dir = stdout.read().decode().strip()
+        if not tmp_dir:
+            tmp_dir = "C:\\Temp"
+    else:
+        tmp_dir = "/tmp"
+    return tmp_dir
+
+
 # We can not pass host details with bteq command when executing on remote machine. Instead, we will prepare .logon in bteq script itself to avoid risk of
 # exposing sensitive information
 def prepare_bteq_script_for_remote_execution(conn: dict[str, Any], sql: str) -> str:
diff --git a/providers/teradata/tests/unit/teradata/hooks/test_bteq.py b/providers/teradata/tests/unit/teradata/hooks/test_bteq.py
index 46b50e652b597..38269ecb99d17 100644
--- a/providers/teradata/tests/unit/teradata/hooks/test_bteq.py
+++ b/providers/teradata/tests/unit/teradata/hooks/test_bteq.py
@@ -240,7 +240,14 @@ def test_execute_bteq_script_at_remote_success(
     mock_ssh_hook.get_conn.return_value.__enter__.return_value = mock_ssh_client
     mock_ssh_hook_class.return_value = mock_ssh_hook
 
-    # Instantiate BteqHook with ssh_conn_id (will use mocked SSHHook)
+    # Mock exec_command to simulate 'uname || ver'
+    mock_stdin = MagicMock()
+    mock_stdout = MagicMock()
+    mock_stderr = MagicMock()
+    mock_stdout.read.return_value = b"Linux\n"
+    mock_ssh_client.exec_command.return_value = (mock_stdin, mock_stdout, mock_stderr)
+
+    # Instantiate BteqHook
     hook = BteqHook(ssh_conn_id="ssh_conn_id", teradata_conn_id="teradata_conn")
 
     # Call method under test
@@ -342,13 +349,28 @@ def test_remote_execution_cleanup_on_exception(
     temp_dir = "/tmp"
     local_file_path = os.path.join(temp_dir, "bteq_script.txt")
     remote_working_dir = temp_dir
-
-    # Make sure the local encrypted file exists for cleanup
     encrypted_file_path = os.path.join(temp_dir, "bteq_script.enc")
+
+    # Create dummy local encrypted file
     with open(encrypted_file_path, "w") as f:
         f.write("dummy")
 
-    with pytest.raises(AirflowException):
+    # Simulate decrypt failing
+    mock_decrypt.side_effect = Exception("mocked exception")
+
+    # Patch exec_command for remote cleanup (identify_os, rm)
+    ssh_client = hook_with_ssh.ssh_hook.get_conn.return_value.__enter__.return_value
+
+    mock_stdin = MagicMock()
+    mock_stdout = MagicMock()
+    mock_stderr = MagicMock()
+
+    # For identify_os ("uname || ver")
+    mock_stdout.read.return_value = b"Linux\n"
+    ssh_client.exec_command.return_value = (mock_stdin, mock_stdout, mock_stderr)
+
+    # Run the test
+    with pytest.raises(AirflowException, match="mocked exception"):
         hook_with_ssh._transfer_to_and_execute_bteq_on_remote(
             file_path=local_file_path,
             remote_working_dir=remote_working_dir,
@@ -360,5 +382,5 @@ def test_remote_execution_cleanup_on_exception(
             tmp_dir=temp_dir,
         )
 
-    # After exception, encrypted file should be deleted
+    # Verify local encrypted file is deleted
     assert not os.path.exists(encrypted_file_path)
diff --git a/providers/teradata/tests/unit/teradata/operators/test_bteq.py b/providers/teradata/tests/unit/teradata/operators/test_bteq.py
index d6690096aa83f..0e9a0ed0b150d 100644
--- a/providers/teradata/tests/unit/teradata/operators/test_bteq.py
+++ b/providers/teradata/tests/unit/teradata/operators/test_bteq.py
@@ -51,7 +51,7 @@ def test_execute(self, mock_hook_init, mock_execute_bteq):
 
         # Then
         mock_hook_init.assert_called_once_with(teradata_conn_id=teradata_conn_id, ssh_conn_id=None)
-        mock_execute_bteq.assert_called_once_with(sql + "\n.EXIT", "/tmp", "", 600, None, "", None, "UTF-8")
+        mock_execute_bteq.assert_called_once_with(sql + "\n.EXIT", None, "", 600, None, "", None, "UTF-8")
         assert result == "BTEQ execution result"
 
     @mock.patch.object(BteqHook, "execute_bteq_script")
@@ -81,7 +81,7 @@ def test_execute_sql_only(self, mock_hook_init, mock_execute_bteq):
         mock_hook_init.assert_called_once_with(teradata_conn_id=teradata_conn_id, ssh_conn_id=None)
         mock_execute_bteq.assert_called_once_with(
             sql + "\n.EXIT",  # Assuming the prepare_bteq_script_for_local_execution appends ".EXIT"
-            "/tmp",  # default remote_working_dir
+            None,  # default remote_working_dir
             "",  # bteq_script_encoding (default ASCII => empty string)
             600,  # timeout default
             None,  # timeout_rc
diff --git a/providers/teradata/tests/unit/teradata/utils/test_bteq_util.py b/providers/teradata/tests/unit/teradata/utils/test_bteq_util.py
index f0ee54aaa6804..fbefe42213cb6 100644
--- a/providers/teradata/tests/unit/teradata/utils/test_bteq_util.py
+++ b/providers/teradata/tests/unit/teradata/utils/test_bteq_util.py
@@ -25,6 +25,7 @@
 
 from airflow.exceptions import AirflowException
 from airflow.providers.teradata.utils.bteq_util import (
+    identify_os,
     is_valid_encoding,
     is_valid_file,
     is_valid_remote_bteq_script_file,
@@ -38,6 +39,62 @@
 
 
 class TestBteqUtils:
+    def test_identify_os_linux(self):
+        # Arrange
+        ssh_client = MagicMock()
+        stdout_mock = MagicMock()
+        stdout_mock.read.return_value = b"Linux\n"
+        ssh_client.exec_command.return_value = (MagicMock(), stdout_mock, MagicMock())
+
+        # Act
+        os_info = identify_os(ssh_client)
+
+        # Assert
+        ssh_client.exec_command.assert_called_once_with("uname || ver")
+        assert os_info == "linux\n"
+
+    def test_identify_os_windows(self):
+        # Arrange
+        ssh_client = MagicMock()
+        stdout_mock = MagicMock()
+        stdout_mock.read.return_value = b"Microsoft Windows [Version 10.0.19045.3324]\n"
+        ssh_client.exec_command.return_value = (MagicMock(), stdout_mock, MagicMock())
+
+        # Act
+        os_info = identify_os(ssh_client)
+
+        # Assert
+        ssh_client.exec_command.assert_called_once_with("uname || ver")
+        assert "windows" in os_info
+
+    def test_identify_os_macos(self):
+        # Arrange
+        ssh_client = MagicMock()
+        stdout_mock = MagicMock()
+        stdout_mock.read.return_value = b"Darwin\n"
+        ssh_client.exec_command.return_value = (MagicMock(), stdout_mock, MagicMock())
+
+        # Act
+        os_info = identify_os(ssh_client)
+
+        # Assert
+        ssh_client.exec_command.assert_called_once_with("uname || ver")
+        assert os_info == "darwin\n"
+
+    def test_identify_os_empty_response(self):
+        # Arrange
+        ssh_client = MagicMock()
+        stdout_mock = MagicMock()
+        stdout_mock.read.return_value = b""
+        ssh_client.exec_command.return_value = (MagicMock(), stdout_mock, MagicMock())
+
+        # Act
+        os_info = identify_os(ssh_client)
+
+        # Assert
+        ssh_client.exec_command.assert_called_once_with("uname || ver")
+        assert os_info == ""
+
     @patch("shutil.which")
     def test_verify_bteq_installed_success(self, mock_which):
         mock_which.return_value = "/usr/bin/bteq"
@@ -65,6 +122,57 @@ def test_prepare_bteq_script_for_local_execution(self):
         assert "SELECT 1;" in script
         assert ".EXIT" in script
 
+    @patch("airflow.providers.teradata.utils.bteq_util.identify_os", return_value="linux")
+    def test_verify_bteq_installed_remote_linux(self, mock_os):
+        ssh_client = MagicMock()
+        stdout_mock = MagicMock()
+        stdout_mock.read.return_value = b"/usr/bin/bteq"
+        stdout_mock.channel.recv_exit_status.return_value = 0
+
+        ssh_client.exec_command.return_value = (MagicMock(), stdout_mock, MagicMock())
+
+        verify_bteq_installed_remote(ssh_client)
+        ssh_client.exec_command.assert_called_once_with("which bteq")
+
+    @patch("airflow.providers.teradata.utils.bteq_util.identify_os", return_value="windows")
+    def test_verify_bteq_installed_remote_windows(self, mock_os):
+        ssh_client = MagicMock()
+        stdout_mock = MagicMock()
+        stdout_mock.read.return_value = b"C:\\Program Files\\bteq.exe"
+        stdout_mock.channel.recv_exit_status.return_value = 0
+
+        ssh_client.exec_command.return_value = (MagicMock(), stdout_mock, MagicMock())
+
+        verify_bteq_installed_remote(ssh_client)
+        ssh_client.exec_command.assert_called_once_with("where bteq")
+
+    @patch("airflow.providers.teradata.utils.bteq_util.identify_os", return_value="darwin")
+    def test_verify_bteq_installed_remote_macos(self, mock_os):
+        ssh_client = MagicMock()
+        stdout_mock = MagicMock()
+        stdout_mock.read.return_value = b"/usr/local/bin/bteq"
+        stdout_mock.channel.recv_exit_status.return_value = 0
+
+        ssh_client.exec_command.return_value = (MagicMock(), stdout_mock, MagicMock())
+
+        verify_bteq_installed_remote(ssh_client)
+        ssh_client.exec_command.assert_called_once_with("which bteq")
+
+    @patch("airflow.providers.teradata.utils.bteq_util.identify_os", return_value="linux")
+    def test_verify_bteq_installed_remote_fail(self, mock_os):
+        ssh_client = MagicMock()
+        stdout_mock = MagicMock()
+        stderr_mock = MagicMock()
+        stdout_mock.read.return_value = b""
+        stderr_mock.read.return_value = b"command not found"
+        stdout_mock.channel.recv_exit_status.return_value = 1
+
+        ssh_client.exec_command.return_value = (MagicMock(), stdout_mock, stderr_mock)
+
+        with pytest.raises(AirflowException, match="BTEQ is not installed or not available in PATH"):
+            verify_bteq_installed_remote(ssh_client)
+        ssh_client.exec_command.assert_called_once_with("which bteq")
+
     @patch("paramiko.SSHClient.exec_command")
     def test_verify_bteq_installed_remote_success(self, mock_exec):
         mock_stdin = MagicMock()
@@ -81,22 +189,6 @@ def test_verify_bteq_installed_remote_success(self, mock_exec):
         # Should not raise
         verify_bteq_installed_remote(ssh_client)
 
-    @patch("paramiko.SSHClient.exec_command")
-    def test_verify_bteq_installed_remote_fail(self, mock_exec):
-        mock_stdin = MagicMock()
-        mock_stdout = MagicMock()
-        mock_stderr = MagicMock()
-        mock_stdout.channel.recv_exit_status.return_value = 1
-        mock_stdout.read.return_value = b""
-        mock_stderr.read.return_value = b"command not found"
-        mock_exec.return_value = (mock_stdin, mock_stdout, mock_stderr)
-
-        ssh_client = MagicMock()
-        ssh_client.exec_command = mock_exec
-
-        with pytest.raises(AirflowException):
-            verify_bteq_installed_remote(ssh_client)
-
     @patch("paramiko.SSHClient.open_sftp")
     def test_transfer_file_sftp(self, mock_open_sftp):
         mock_sftp = MagicMock()

From 67353352c3e2635c3fb9d1f711e9e1d58daba7e4 Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Wed, 25 Jun 2025 10:40:59 +0530
Subject: [PATCH 170/381] Bumping min version of pagerduty to 2.3.0 (#52214)

* Bumping min version of pagerduty to 2.3.0

* Bumping min version of pagerduty to 2.3.0
---
 providers/pagerduty/pyproject.toml                  |  2 +-
 .../airflow/providers/pagerduty/hooks/pagerduty.py  | 13 ++++++++-----
 .../providers/pagerduty/hooks/pagerduty_events.py   | 12 +++++++-----
 3 files changed, 16 insertions(+), 11 deletions(-)

diff --git a/providers/pagerduty/pyproject.toml b/providers/pagerduty/pyproject.toml
index 0e59f99774b2b..d708a60a75afc 100644
--- a/providers/pagerduty/pyproject.toml
+++ b/providers/pagerduty/pyproject.toml
@@ -59,7 +59,7 @@ requires-python = "~=3.9"
 dependencies = [
     "apache-airflow>=2.10.0",
     "apache-airflow-providers-common-compat>=1.6.1",
-    "pagerduty>=1.0.0",
+    "pagerduty>=2.3.0",
 ]
 
 [dependency-groups]
diff --git a/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty.py b/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty.py
index d0172615b57db..070f745788ae2 100644
--- a/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty.py
+++ b/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty.py
@@ -76,23 +76,26 @@ def get_connection_form_widgets(cls) -> dict[str, Any]:
             ),
         }
 
-    def __init__(self, token: str | None = None, pagerduty_conn_id: str | None = None) -> None:
+    def __init__(self, token: str = "", pagerduty_conn_id: str | None = None) -> None:
         super().__init__()
         self.routing_key = None
-        self._client = None
+        self.token = ""
+        self._client: pagerduty.RestApiV2Client | None = None
 
         if pagerduty_conn_id is not None:
             conn = self.get_connection(pagerduty_conn_id)
-            self.token = conn.get_password()
+            password = conn.get_password()
+            if password is not None:
+                self.token = password
 
             routing_key = conn.extra_dejson.get("routing_key")
             if routing_key:
                 self.routing_key = routing_key
 
-        if token is not None:  # token takes higher priority
+        if token != "":  # token takes higher priority
             self.token = token
 
-        if self.token is None:
+        if self.token == "":
             raise AirflowException("Cannot get token: No valid api token nor pagerduty_conn_id supplied.")
 
     def client(self) -> pagerduty.RestApiV2Client:
diff --git a/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty_events.py b/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty_events.py
index 61ad9930b3d71..ac3b6463d63aa 100644
--- a/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty_events.py
+++ b/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty_events.py
@@ -61,17 +61,19 @@ def __init__(
         self, integration_key: str | None = None, pagerduty_events_conn_id: str | None = None
     ) -> None:
         super().__init__()
-        self.integration_key = None
+        self.integration_key = ""
         self._client = None
 
         if pagerduty_events_conn_id is not None:
             conn = self.get_connection(pagerduty_events_conn_id)
-            self.integration_key = conn.get_password()
+            password = conn.get_password()
+            if password is not None:
+                self.integration_key = password
 
         if integration_key is not None:  # token takes higher priority
             self.integration_key = integration_key
 
-        if self.integration_key is None:
+        if self.integration_key == "":
             raise AirflowException(
                 "Cannot get token: No valid integration key nor pagerduty_events_conn_id supplied."
             )
@@ -89,7 +91,7 @@ def send_event(
         class_type: str | None = None,
         images: list[Any] | None = None,
         links: list[Any] | None = None,
-    ) -> dict:
+    ) -> str:
         """
         Create event for service integration.
 
@@ -193,7 +195,7 @@ def create_change_event(
         custom_details: Any | None = None,
         timestamp: datetime | None = None,
         links: list[Any] | None = None,
-    ) -> dict:
+    ) -> str:
         """
         Create change event for service integration.
 

From ddbda61af03c85ee3bb8fba0feb4b6512d67d379 Mon Sep 17 00:00:00 2001
From: Satish Chinthanippu <satish.chinthanippu@teradata.com>
Date: Tue, 24 Jun 2025 23:19:26 -0700
Subject: [PATCH 171/381] Bteq platform independent (#61)

* OS platform dependent code changed to platform independent

* mac platform verified and adjusted code to work with zsh and normal shell

---------

Co-authored-by: Satish Ch <satishchinthanippu@gmail.com>
---
 .../providers/teradata/utils/bteq_util.py     |  8 ++
 .../unit/teradata/utils/test_bteq_util.py     | 79 ++++++++++++++++++-
 2 files changed, 85 insertions(+), 2 deletions(-)

diff --git a/providers/teradata/src/airflow/providers/teradata/utils/bteq_util.py b/providers/teradata/src/airflow/providers/teradata/utils/bteq_util.py
index 140c4f6c41262..591e4c085c874 100644
--- a/providers/teradata/src/airflow/providers/teradata/utils/bteq_util.py
+++ b/providers/teradata/src/airflow/providers/teradata/utils/bteq_util.py
@@ -46,6 +46,14 @@ def verify_bteq_installed_remote(ssh_client: SSHClient):
 
     if "windows" in os_info:
         check_cmd = "where bteq"
+    elif "darwin" in os_info:
+        # Check if zsh exists first
+        stdin, stdout, stderr = ssh_client.exec_command("command -v zsh")
+        zsh_path = stdout.read().strip()
+        if zsh_path:
+            check_cmd = 'zsh -l -c "which bteq"'
+        else:
+            check_cmd = "which bteq"
     else:
         check_cmd = "which bteq"
 
diff --git a/providers/teradata/tests/unit/teradata/utils/test_bteq_util.py b/providers/teradata/tests/unit/teradata/utils/test_bteq_util.py
index fbefe42213cb6..78f2624d01e94 100644
--- a/providers/teradata/tests/unit/teradata/utils/test_bteq_util.py
+++ b/providers/teradata/tests/unit/teradata/utils/test_bteq_util.py
@@ -19,7 +19,7 @@
 import os
 import stat
 import unittest
-from unittest.mock import MagicMock, patch
+from unittest.mock import MagicMock, call, patch
 
 import pytest
 
@@ -156,7 +156,82 @@ def test_verify_bteq_installed_remote_macos(self, mock_os):
         ssh_client.exec_command.return_value = (MagicMock(), stdout_mock, MagicMock())
 
         verify_bteq_installed_remote(ssh_client)
-        ssh_client.exec_command.assert_called_once_with("which bteq")
+
+        ssh_client.exec_command.assert_has_calls(
+            [
+                call("command -v zsh"),
+                call('zsh -l -c "which bteq"'),
+            ]
+        )
+
+    @patch("airflow.providers.teradata.utils.bteq_util.identify_os", return_value="darwin")
+    def test_verify_bteq_installed_remote_macos_which_called_when_no_zsh(self, mock_os):
+        ssh_client = MagicMock()
+
+        # Mock for "command -v zsh" returning empty (no zsh)
+        stdin_mock_1 = MagicMock()
+        stdout_mock_1 = MagicMock()
+        stderr_mock_1 = MagicMock()
+        stdout_mock_1.read.return_value = b""  # No zsh path found
+        stderr_mock_1.read.return_value = b""  # Return empty bytes here!
+        ssh_client.exec_command.side_effect = [
+            (stdin_mock_1, stdout_mock_1, stderr_mock_1),  # command -v zsh
+            (MagicMock(), MagicMock(), MagicMock()),  # which bteq
+        ]
+
+        # Mock for "which bteq" command response
+        stdin_mock_2 = MagicMock()
+        stdout_mock_2 = MagicMock()
+        stderr_mock_2 = MagicMock()
+        stdout_mock_2.channel.recv_exit_status.return_value = 0
+        stdout_mock_2.read.return_value = b"/usr/local/bin/bteq"
+        stderr_mock_2.read.return_value = b""  # Also return bytes here
+
+        # Since side_effect was already assigned, override second call manually
+        ssh_client.exec_command.side_effect = [
+            (stdin_mock_1, stdout_mock_1, stderr_mock_1),  # command -v zsh
+            (stdin_mock_2, stdout_mock_2, stderr_mock_2),  # which bteq
+        ]
+
+        verify_bteq_installed_remote(ssh_client)
+
+        ssh_client.exec_command.assert_has_calls(
+            [
+                call("command -v zsh"),
+                call("which bteq"),
+            ]
+        )
+
+    @patch("airflow.providers.teradata.utils.bteq_util.identify_os", return_value="darwin")
+    def test_verify_bteq_installed_remote_macos_which_fails_no_zsh(self, mock_os):
+        ssh_client = MagicMock()
+
+        # Mock for "command -v zsh" returning empty (no zsh)
+        stdin_mock_1 = MagicMock()
+        stdout_mock_1 = MagicMock()
+        stderr_mock_1 = MagicMock()
+        stdout_mock_1.read.return_value = b""  # No zsh path found
+        ssh_client.exec_command.side_effect = [
+            (stdin_mock_1, stdout_mock_1, stderr_mock_1),  # command -v zsh
+            (MagicMock(), MagicMock(), MagicMock()),  # which bteq
+        ]
+
+        # For which bteq failure
+        ssh_client.exec_command.return_value[1].channel.recv_exit_status.return_value = 1
+        ssh_client.exec_command.return_value[1].read.return_value = b""
+        ssh_client.exec_command.return_value[2].read.return_value = b"command not found"
+
+        with pytest.raises(AirflowException) as exc_info:
+            verify_bteq_installed_remote(ssh_client)
+
+        assert "BTEQ is not installed or not available in PATH" in str(exc_info.value)
+
+        ssh_client.exec_command.assert_has_calls(
+            [
+                call("command -v zsh"),
+                call("which bteq"),
+            ]
+        )
 
     @patch("airflow.providers.teradata.utils.bteq_util.identify_os", return_value="linux")
     def test_verify_bteq_installed_remote_fail(self, mock_os):

From b1be38353651d111e3623eb91eb92a507d5e04dc Mon Sep 17 00:00:00 2001
From: Yeonguk Choo <choo121600@gmail.com>
Date: Wed, 25 Jun 2025 15:21:16 +0900
Subject: [PATCH 172/381] Fix whitespace handling in DAG owners parsing for
 multiple owners (#52216)

---
 .../src/airflow/api_fastapi/core_api/datamodels/dags.py         | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/dags.py b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/dags.py
index 1801d03df7870..499b66c8e98be 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/dags.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/dags.py
@@ -93,7 +93,7 @@ def get_owners(cls, v: Any) -> list[str] | None:
         if v is None:
             return []
         if isinstance(v, str):
-            return v.split(",")
+            return [x.strip() for x in v.split(",")]
         return v
 
     @field_validator("timetable_summary", mode="before")

From 8a80875b86316f7e29b860e2810dee00ca60307a Mon Sep 17 00:00:00 2001
From: Kyungjun Lee <kyungjunlee.me@gmail.com>
Date: Wed, 25 Jun 2025 15:54:56 +0900
Subject: [PATCH 173/381] DEL: pytestmark in test_opensearch.py (#52213)

---
 .../opensearch/tests/unit/opensearch/hooks/test_opensearch.py   | 2 --
 1 file changed, 2 deletions(-)

diff --git a/providers/opensearch/tests/unit/opensearch/hooks/test_opensearch.py b/providers/opensearch/tests/unit/opensearch/hooks/test_opensearch.py
index 79ca0a34a363d..7788d899e791b 100644
--- a/providers/opensearch/tests/unit/opensearch/hooks/test_opensearch.py
+++ b/providers/opensearch/tests/unit/opensearch/hooks/test_opensearch.py
@@ -27,8 +27,6 @@
 from airflow.providers.opensearch.hooks.opensearch import OpenSearchHook
 
 opensearchpy = pytest.importorskip("opensearchpy")
-pytestmark = pytest.mark.db_test
-
 
 MOCK_SEARCH_RETURN = {"status": "test"}
 DEFAULT_CONN = opensearchpy.connection.http_requests.RequestsHttpConnection

From a8588fb4ba13d503a2d494fdb71e51ff31fd37dd Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Wed, 25 Jun 2025 12:59:07 +0530
Subject: [PATCH 174/381] Fixing upgrade checks on main (#52210)

---
 .github/actions/install-pre-commit/action.yml                   | 2 +-
 .github/workflows/ci-amd.yml                                    | 2 +-
 .pre-commit-config.yaml                                         | 2 +-
 Dockerfile                                                      | 2 +-
 Dockerfile.ci                                                   | 2 +-
 dev/breeze/doc/ci/02_images.md                                  | 2 +-
 .../src/airflow_breeze/commands/release_management_commands.py  | 2 +-
 dev/breeze/src/airflow_breeze/global_constants.py               | 2 +-
 pyproject.toml                                                  | 2 +-
 scripts/ci/install_breeze.sh                                    | 2 +-
 scripts/tools/setup_breeze                                      | 2 +-
 11 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/.github/actions/install-pre-commit/action.yml b/.github/actions/install-pre-commit/action.yml
index 7cf34a02db913..e053e8e90571c 100644
--- a/.github/actions/install-pre-commit/action.yml
+++ b/.github/actions/install-pre-commit/action.yml
@@ -24,7 +24,7 @@ inputs:
     default: "3.9"
   uv-version:
     description: 'uv version to use'
-    default: "0.7.13"  # Keep this comment to allow automatic replacement of uv version
+    default: "0.7.14"  # Keep this comment to allow automatic replacement of uv version
   pre-commit-version:
     description: 'pre-commit version to use'
     default: "4.2.0"  # Keep this comment to allow automatic replacement of pre-commit version
diff --git a/.github/workflows/ci-amd.yml b/.github/workflows/ci-amd.yml
index 7cfb87c839360..67489683d9538 100644
--- a/.github/workflows/ci-amd.yml
+++ b/.github/workflows/ci-amd.yml
@@ -186,7 +186,7 @@ jobs:
       - name: Install pre-commit, uv, and pre-commit-uv
         shell: bash
         env:
-          UV_VERSION: "0.7.13"  # Keep this comment to allow automatic replacement of uv version
+          UV_VERSION: "0.7.14"  # Keep this comment to allow automatic replacement of uv version
           PRE_COMMIT_VERSION: "4.2.0"  # Keep this comment to allow automatic replacement of pre-commit version
           PRE_COMMIT_UV_VERSION: "4.1.4"  # Keep this comment to allow automatic replacement of pre-commit-uv version
         run: |
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 2bbbefeedbfd9..8fbbf08ac926a 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -18,7 +18,7 @@
 default_stages: [pre-commit, pre-push]
 default_language_version:
   python: python3
-  node: 22.16.0
+  node: 22.17.0
   golang: 1.24.0
 minimum_pre_commit_version: '3.2.0'
 exclude: ^.*/.*_vendor/
diff --git a/Dockerfile b/Dockerfile
index 32f8cc97dfa83..72a5693030960 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -57,7 +57,7 @@ ARG PYTHON_BASE_IMAGE="python:3.9-slim-bookworm"
 ARG AIRFLOW_PIP_VERSION=25.1.1
 # ARG AIRFLOW_PIP_VERSION="git+https://github.com/pypa/pip.git@main"
 ARG AIRFLOW_SETUPTOOLS_VERSION=80.9.0
-ARG AIRFLOW_UV_VERSION=0.7.13
+ARG AIRFLOW_UV_VERSION=0.7.14
 ARG AIRFLOW_USE_UV="false"
 ARG UV_HTTP_TIMEOUT="300"
 ARG AIRFLOW_IMAGE_REPOSITORY="https://github.com/apache/airflow"
diff --git a/Dockerfile.ci b/Dockerfile.ci
index 65907e3e4cee8..beebd98f788ae 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -1389,7 +1389,7 @@ COPY --from=scripts common.sh install_packaging_tools.sh install_additional_depe
 ARG AIRFLOW_PIP_VERSION=25.1.1
 # ARG AIRFLOW_PIP_VERSION="git+https://github.com/pypa/pip.git@main"
 ARG AIRFLOW_SETUPTOOLS_VERSION=80.9.0
-ARG AIRFLOW_UV_VERSION=0.7.13
+ARG AIRFLOW_UV_VERSION=0.7.14
 # TODO(potiuk): automate with upgrade check (possibly)
 ARG AIRFLOW_PRE_COMMIT_VERSION="4.2.0"
 ARG AIRFLOW_PRE_COMMIT_UV_VERSION="4.1.4"
diff --git a/dev/breeze/doc/ci/02_images.md b/dev/breeze/doc/ci/02_images.md
index 51e20718ff201..52fa5cacf83ea 100644
--- a/dev/breeze/doc/ci/02_images.md
+++ b/dev/breeze/doc/ci/02_images.md
@@ -443,7 +443,7 @@ can be used for CI images:
 | `ADDITIONAL_DEV_APT_DEPS`         |                            | Additional apt dev dependencies installed in the first part of the image                                          |
 | `ADDITIONAL_DEV_APT_ENV`          |                            | Additional env variables defined when installing dev deps                                                         |
 | `AIRFLOW_PIP_VERSION`             | `25.1.1`                   | `pip` version used.                                                                                               |
-| `AIRFLOW_UV_VERSION`              | `0.7.13`                   | `uv` version used.                                                                                                |
+| `AIRFLOW_UV_VERSION`              | `0.7.14`                   | `uv` version used.                                                                                                |
 | `AIRFLOW_PRE_COMMIT_VERSION`      | `4.2.0`                    | `pre-commit` version used.                                                                                        |
 | `AIRFLOW_PRE_COMMIT_UV_VERSION`   | `4.1.4`                    | `pre-commit-uv` version used.                                                                                     |
 | `AIRFLOW_USE_UV`                  | `true`                     | Whether to use UV for installation.                                                                               |
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index 58514b29e61b7..b8948df389813 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -243,7 +243,7 @@ class VersionedFile(NamedTuple):
 
 
 AIRFLOW_PIP_VERSION = "25.1.1"
-AIRFLOW_UV_VERSION = "0.7.13"
+AIRFLOW_UV_VERSION = "0.7.14"
 AIRFLOW_USE_UV = False
 # TODO(potiuk): automate upgrades of these versions (likely via requirements.txt file)
 GITPYTHON_VERSION = "3.1.44"
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py b/dev/breeze/src/airflow_breeze/global_constants.py
index a7c8096576c4d..a81d7cae2e2f8 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -194,7 +194,7 @@
 ALLOWED_INSTALL_MYSQL_CLIENT_TYPES = ["mariadb", "mysql"]
 
 PIP_VERSION = "25.1.1"
-UV_VERSION = "0.7.13"
+UV_VERSION = "0.7.14"
 
 DEFAULT_UV_HTTP_TIMEOUT = 300
 DEFAULT_WSL2_HTTP_TIMEOUT = 900
diff --git a/pyproject.toml b/pyproject.toml
index ba2820ccd59d4..9453edda31eba 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -529,7 +529,7 @@ packages = []
     "apache-airflow-providers-amazon[s3fs]",
 ]
 "uv" = [
-    "uv>=0.7.13",
+    "uv>=0.7.14",
 ]
 
 
diff --git a/scripts/ci/install_breeze.sh b/scripts/ci/install_breeze.sh
index e52c58263229f..d2ef488d1cca1 100755
--- a/scripts/ci/install_breeze.sh
+++ b/scripts/ci/install_breeze.sh
@@ -22,7 +22,7 @@ cd "$( dirname "${BASH_SOURCE[0]}" )/../../"
 PYTHON_ARG=""
 
 PIP_VERSION="25.1.1"
-UV_VERSION="0.7.13"
+UV_VERSION="0.7.14"
 if [[ ${PYTHON_VERSION=} != "" ]]; then
     PYTHON_ARG="--python=$(which python"${PYTHON_VERSION}") "
 fi
diff --git a/scripts/tools/setup_breeze b/scripts/tools/setup_breeze
index 4dd4ff6ade0ec..e132a50f70dea 100755
--- a/scripts/tools/setup_breeze
+++ b/scripts/tools/setup_breeze
@@ -27,7 +27,7 @@ COLOR_YELLOW=$'\e[33m'
 COLOR_BLUE=$'\e[34m'
 COLOR_RESET=$'\e[0m'
 
-UV_VERSION="0.7.13"
+UV_VERSION="0.7.14"
 
 function manual_instructions() {
     echo

From 8cbe785ffe928eba20237b53c027f9d51ab23df4 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Wed, 25 Jun 2025 10:34:16 +0200
Subject: [PATCH 175/381] Add more diagnostics for Airflow installation inside
 CI image (#52223)

---
 .../install_airflow_and_providers.py          | 45 ++++++++++++++++---
 1 file changed, 38 insertions(+), 7 deletions(-)

diff --git a/scripts/in_container/install_airflow_and_providers.py b/scripts/in_container/install_airflow_and_providers.py
index db81073741d10..787fc9c6f80e4 100755
--- a/scripts/in_container/install_airflow_and_providers.py
+++ b/scripts/in_container/install_airflow_and_providers.py
@@ -121,7 +121,9 @@ def calculate_constraints_location(
 ):
     constraints_base = f"https://raw.githubusercontent.com/{github_repository}/{constraints_reference}"
     location = f"{constraints_base}/{constraints_mode}-{python_version}.txt"
-    console.print(f"[info]Determined {'providers' if providers else 'airflow'} constraints as: {location}")
+    console.print(
+        f"[bright_blue]Determined {'providers' if providers else 'airflow'} constraints as: {location}"
+    )
     return location
 
 
@@ -143,25 +145,27 @@ def get_airflow_constraints_location(
     * DEFAULT_CONSTRAINT_BRANCH + constraints mode - as fallback
     * constraints-main + constraints mode - as fallback
     """
+    console.print("[bright_blue]Determining airflow constraints location")
     if airflow_skip_constraints:
+        console.print("[bright_blue]Skipping airflow constraints.")
         return None
     if airflow_constraints_location:
-        console.print(f"[info]Using constraints from location: {airflow_constraints_location}")
+        console.print(f"[bright_blue]Using constraints from location: {airflow_constraints_location}")
         return airflow_constraints_location
     if airflow_constraints_reference:
         console.print(
-            f"[info]Building constraints location from constraints reference: {airflow_constraints_reference}"
+            f"[bright_blue]Building constraints location from constraints reference: {airflow_constraints_reference}"
         )
     elif airflow_package_version:
         if re.match(r"[0-9]+\.[0-9]+\.[0-9]+[0-9a-z.]*|main|v[0-9]_.*", airflow_package_version):
             airflow_constraints_reference = f"constraints-{airflow_package_version}"
             console.print(
-                f"[info]Determined constraints reference from airflow package version "
+                f"[bright_blue]Determined constraints reference from airflow package version "
                 f"{airflow_package_version} as: {airflow_constraints_reference}"
             )
         else:
             airflow_constraints_reference = default_constraints_branch
-            console.print(f"[info]Falling back tp: {default_constraints_branch}")
+            console.print(f"[bright_blue]Falling back to constraints branch: {default_constraints_branch}")
     return calculate_constraints_location(
         constraints_mode=airflow_constraints_mode,
         constraints_reference=airflow_constraints_reference,
@@ -188,9 +192,10 @@ def get_providers_constraints_location(
     * constraints-main + constraints mode - as fallback
     """
     if providers_skip_constraints:
+        console.print("[bright_blue]Skipping providers constraints.")
         return None
     if providers_constraints_location:
-        console.print(f"[info]Using constraints from location: {providers_constraints_location}")
+        console.print(f"[bright_blue]Using constraints from location: {providers_constraints_location}")
         return providers_constraints_location
     if not providers_constraints_reference:
         providers_constraints_reference = default_constraints_branch
@@ -237,6 +242,7 @@ def find_installation_spec(
     use_airflow_version: str,
     use_distributions_from_dist: bool,
 ) -> InstallationSpec:
+    console.print("[bright_blue]Finding installation specification")
     if use_distributions_from_dist:
         console.print("[bright_blue]Using distributions from dist folder")
     else:
@@ -250,6 +256,7 @@ def find_installation_spec(
         sys.exit(1)
     extension = "whl" if distribution_format == "wheel" else "tar.gz"
     pre_release = os.environ.get("ALLOW_PRE_RELEASES", "false").lower() == "true"
+    console.print("[bright_blue]Pre-release: ", pre_release)
     if airflow_extras:
         console.print(f"[bright_blue]Using airflow extras: {airflow_extras}")
         airflow_extras = f"[{airflow_extras}]"
@@ -263,6 +270,7 @@ def find_installation_spec(
         console.print("[red]This is not supported. Please use --mount-sources=remove flag in breeze.")
         sys.exit(1)
     if use_airflow_version in ["wheel", "sdist"] and use_distributions_from_dist:
+        console.print("[bright_blue]Finding specification from local distribution files in dist folder")
         airflow_distribution_spec, airflow_core_distribution_spec = find_airflow_package(extension)
         if use_airflow_version != distribution_format:
             console.print(
@@ -273,6 +281,7 @@ def find_installation_spec(
         if airflow_distribution_spec:
             airflow_version = get_airflow_version_from_package(airflow_distribution_spec)
             if airflow_version:
+                console.print(f"[bright_blue]Using airflow version retrieved from package: {airflow_version}")
                 airflow_constraints_location = get_airflow_constraints_location(
                     airflow_skip_constraints=airflow_skip_constraints,
                     airflow_constraints_mode=airflow_constraints_mode,
@@ -422,7 +431,7 @@ def find_installation_spec(
         else:
             console.print("\n[bright_blue]No preselected providers\n")
         provider_distributions_list = find_provider_distributions(extension, selected_providers_list)
-    return InstallationSpec(
+    installation_spec = InstallationSpec(
         airflow_distribution=airflow_distribution_spec,
         airflow_core_distribution=airflow_core_distribution_spec,
         airflow_constraints_location=airflow_constraints_location,
@@ -442,6 +451,8 @@ def find_installation_spec(
         ),
         pre_release=pre_release,
     )
+    console.print("[bright_blue]Installation specification:[/]", installation_spec)
+    return installation_spec
 
 
 ALLOWED_DISTRIBUTION_FORMAT = ["wheel", "sdist", "both"]
@@ -633,12 +644,31 @@ def install_airflow_and_providers(
         use_distributions_from_dist=use_distributions_from_dist,
     )
     if installation_spec.airflow_distribution and install_airflow_with_constraints:
+        console.print("[bright_blue]Installing airflow with constraints")
+        console.print(
+            "[bright_blue]Airflow constraints location: ", installation_spec.airflow_constraints_location
+        )
+        console.print("[bright_blue]Airflow distribution", installation_spec.airflow_distribution)
+        console.print("[bright_blue]Airflow core distribution", installation_spec.airflow_core_distribution)
+        console.print(
+            "[bright_blue]Airflow task-sdk constraints location: ",
+            installation_spec.airflow_task_sdk_constraints_location,
+        )
+        console.print(
+            "[bright_blue]Airflow task-sdk distribution", installation_spec.airflow_task_sdk_distribution
+        )
+        console.print(
+            "[bright_blue]Airflow ctl constraints location: ",
+            installation_spec.airflow_ctl_constraints_location,
+        )
+        console.print("[bright_blue]Airflow ctl distribution", installation_spec.airflow_ctl_distribution)
         base_install_airflow_cmd = [
             "/usr/local/bin/uv",
             "pip",
             "install",
         ]
         if installation_spec.pre_release:
+            console.print("[bright_blue]Allowing pre-release versions of airflow")
             base_install_airflow_cmd.append("--pre")
         base_install_airflow_cmd.append(installation_spec.airflow_distribution)
         console.print(
@@ -718,6 +748,7 @@ def install_airflow_and_providers(
                 )
                 run_command(base_install_airflow_cmd, github_actions=github_actions, check=True)
     if installation_spec.provider_distributions or not install_airflow_with_constraints:
+        console.print("[bright_blue]Installing airflow without constraints")
         base_install_providers_cmd = [
             "/usr/local/bin/uv",
             "pip",

From be822e0faba7d0589cb15e973b93f0db8122f370 Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Wed, 25 Jun 2025 14:48:35 +0530
Subject: [PATCH 176/381] Separate out creation of default Connections for
 tests and non-tests (#52129)

---
 .pre-commit-config.yaml                       |   1 +
 airflow-core/src/airflow/utils/db.py          | 200 +-------
 .../routes/public/test_connections.py         |   3 +-
 .../src/tests_common/test_utils/db.py         | 477 +++++++++++++++++-
 .../tests/unit/apache/livy/hooks/test_livy.py |   6 +-
 .../unit/apache/spark/hooks/test_spark_sql.py |   6 +-
 .../cncf/kubernetes/hooks/test_kubernetes.py  |  34 +-
 .../cloud/log/test_gcs_task_handler_system.py |   4 +-
 .../cloud/operators/test_dataprep_system.py   |   4 +-
 .../sftp/tests/unit/sftp/hooks/test_sftp.py   |  47 +-
 10 files changed, 559 insertions(+), 223 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 8fbbf08ac926a..3f0ed6026d5f9 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -754,6 +754,7 @@ repos:
           ^.*/conf_constants\.py$|
           ^.*/provider_conf\.py$|
           ^devel-common/src/sphinx_exts/removemarktransform\.py|
+          ^devel-common/src/tests_common/test_utils/db\.py|
           ^airflow-core/newsfragments/41761.significant\.rst$|
           ^scripts/ci/pre_commit/vendor_k8s_json_schema\.py$|
           ^scripts/ci/docker-compose/integration-keycloak\.yml$|
diff --git a/airflow-core/src/airflow/utils/db.py b/airflow-core/src/airflow/utils/db.py
index 8537f50dd79bc..05315110e404d 100644
--- a/airflow-core/src/airflow/utils/db.py
+++ b/airflow-core/src/airflow/utils/db.py
@@ -125,9 +125,16 @@ def add_default_pool_if_not_exists(session: Session = NEW_SESSION):
 @provide_session
 def create_default_connections(session: Session = NEW_SESSION):
     """Create default Airflow connections."""
+    conns = get_default_connections()
+
+    for c in conns:
+        merge_conn(c, session)
+
+
+def get_default_connections():
     from airflow.models.connection import Connection
 
-    merge_conn(
+    conns = [
         Connection(
             conn_id="airflow_db",
             conn_type="mysql",
@@ -136,40 +143,26 @@ def create_default_connections(session: Session = NEW_SESSION):
             password="",
             schema="airflow",
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="athena_default",
             conn_type="athena",
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="aws_default",
             conn_type="aws",
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="azure_batch_default",
             conn_type="azure_batch",
             login="<ACCOUNT_NAME>",
             password="",
             extra="""{"account_url": "<ACCOUNT_URL>"}""",
-        )
-    )
-    merge_conn(
+        ),
         Connection(
             conn_id="azure_cosmos_default",
             conn_type="azure_cosmos",
             extra='{"database_name": "<DATABASE_NAME>", "collection_name": "<COLLECTION_NAME>" }',
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="azure_data_explorer_default",
             conn_type="azure_data_explorer",
@@ -178,50 +171,32 @@ def create_default_connections(session: Session = NEW_SESSION):
                     "tenant": "<TENANT ID>", "certificate": "<APPLICATION PEM CERTIFICATE>",
                     "thumbprint": "<APPLICATION CERTIFICATE THUMBPRINT>"}""",
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="azure_data_lake_default",
             conn_type="azure_data_lake",
             extra='{"tenant": "<TENANT>", "account_name": "<ACCOUNTNAME>" }',
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="azure_default",
             conn_type="azure",
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="cassandra_default",
             conn_type="cassandra",
             host="cassandra",
             port=9042,
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="databricks_default",
             conn_type="databricks",
             host="localhost",
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="dingding_default",
             conn_type="http",
             host="",
             password="",
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="drill_default",
             conn_type="drill",
@@ -229,9 +204,6 @@ def create_default_connections(session: Session = NEW_SESSION):
             port=8047,
             extra='{"dialect_driver": "drill+sadrill", "storage_plugin": "dfs"}',
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="druid_broker_default",
             conn_type="druid",
@@ -239,9 +211,6 @@ def create_default_connections(session: Session = NEW_SESSION):
             port=8082,
             extra='{"endpoint": "druid/v2/sql"}',
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="druid_ingest_default",
             conn_type="druid",
@@ -249,9 +218,6 @@ def create_default_connections(session: Session = NEW_SESSION):
             port=8081,
             extra='{"endpoint": "druid/indexer/v1/task"}',
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="elasticsearch_default",
             conn_type="elasticsearch",
@@ -259,9 +225,6 @@ def create_default_connections(session: Session = NEW_SESSION):
             schema="http",
             port=9200,
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="emr_default",
             conn_type="emr",
@@ -310,9 +273,6 @@ def create_default_connections(session: Session = NEW_SESSION):
                 }
             """,
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="facebook_default",
             conn_type="facebook_social",
@@ -324,17 +284,11 @@ def create_default_connections(session: Session = NEW_SESSION):
                 }
             """,
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="fs_default",
             conn_type="fs",
             extra='{"path": "/"}',
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="ftp_default",
             conn_type="ftp",
@@ -344,26 +298,17 @@ def create_default_connections(session: Session = NEW_SESSION):
             password="airflow",
             extra='{"key_file": "~/.ssh/id_rsa", "no_host_key_check": true}',
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="google_cloud_default",
             conn_type="google_cloud_platform",
             schema="default",
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="gremlin_default",
             conn_type="gremlin",
             host="gremlin",
             port=8182,
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="hive_cli_default",
             conn_type="hive_cli",
@@ -372,9 +317,6 @@ def create_default_connections(session: Session = NEW_SESSION):
             extra='{"use_beeline": true, "auth": ""}',
             schema="default",
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="hiveserver2_default",
             conn_type="hiveserver2",
@@ -382,41 +324,26 @@ def create_default_connections(session: Session = NEW_SESSION):
             schema="default",
             port=10000,
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="http_default",
             conn_type="http",
             host="https://www.httpbin.org/",
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="iceberg_default",
             conn_type="iceberg",
             host="https://api.iceberg.io/ws/v1",
         ),
-        session,
-    )
-    merge_conn(Connection(conn_id="impala_default", conn_type="impala", host="localhost", port=21050))
-    merge_conn(
+        Connection(conn_id="impala_default", conn_type="impala", host="localhost", port=21050),
         Connection(
             conn_id="kafka_default",
             conn_type="kafka",
             extra=json.dumps({"bootstrap.servers": "broker:29092", "group.id": "my-group"}),
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="kubernetes_default",
             conn_type="kubernetes",
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="kylin_default",
             conn_type="kylin",
@@ -425,18 +352,12 @@ def create_default_connections(session: Session = NEW_SESSION):
             login="ADMIN",
             password="KYLIN",
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="leveldb_default",
             conn_type="leveldb",
             host="localhost",
         ),
-        session,
-    )
-    merge_conn(Connection(conn_id="livy_default", conn_type="livy", host="livy", port=8998), session)
-    merge_conn(
+        Connection(conn_id="livy_default", conn_type="livy", host="livy", port=8998),
         Connection(
             conn_id="local_mysql",
             conn_type="mysql",
@@ -445,9 +366,6 @@ def create_default_connections(session: Session = NEW_SESSION):
             password="airflow",
             schema="airflow",
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="metastore_default",
             conn_type="hive_metastore",
@@ -455,19 +373,13 @@ def create_default_connections(session: Session = NEW_SESSION):
             extra='{"authMechanism": "PLAIN"}',
             port=9083,
         ),
-        session,
-    )
-    merge_conn(Connection(conn_id="mongo_default", conn_type="mongo", host="mongo", port=27017), session)
-    merge_conn(
+        Connection(conn_id="mongo_default", conn_type="mongo", host="mongo", port=27017),
         Connection(
             conn_id="mssql_default",
             conn_type="mssql",
             host="localhost",
             port=1433,
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="mysql_default",
             conn_type="mysql",
@@ -475,9 +387,6 @@ def create_default_connections(session: Session = NEW_SESSION):
             schema="airflow",
             host="mysql",
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="opensearch_default",
             conn_type="opensearch",
@@ -485,18 +394,12 @@ def create_default_connections(session: Session = NEW_SESSION):
             schema="http",
             port=9200,
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="opsgenie_default",
             conn_type="http",
             host="",
             password="",
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="oracle_default",
             conn_type="oracle",
@@ -506,39 +409,28 @@ def create_default_connections(session: Session = NEW_SESSION):
             schema="schema",
             port=1521,
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="oss_default",
             conn_type="oss",
-            extra="""{
+            extra="""
+                {
                 "auth_type": "AK",
                 "access_key_id": "<ACCESS_KEY_ID>",
                 "access_key_secret": "<ACCESS_KEY_SECRET>",
                 "region": "<YOUR_OSS_REGION>"}
                 """,
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="pig_cli_default",
             conn_type="pig_cli",
             schema="default",
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="pinot_admin_default",
             conn_type="pinot",
             host="localhost",
             port=9000,
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="pinot_broker_default",
             conn_type="pinot",
@@ -546,9 +438,6 @@ def create_default_connections(session: Session = NEW_SESSION):
             port=9000,
             extra='{"endpoint": "/query", "schema": "http"}',
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="postgres_default",
             conn_type="postgres",
@@ -557,9 +446,6 @@ def create_default_connections(session: Session = NEW_SESSION):
             schema="airflow",
             host="postgres",
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="presto_default",
             conn_type="presto",
@@ -567,18 +453,12 @@ def create_default_connections(session: Session = NEW_SESSION):
             schema="hive",
             port=3400,
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="qdrant_default",
             conn_type="qdrant",
             host="qdrant",
             port=6333,
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="redis_default",
             conn_type="redis",
@@ -586,13 +466,11 @@ def create_default_connections(session: Session = NEW_SESSION):
             port=6379,
             extra='{"db": 0}',
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="redshift_default",
             conn_type="redshift",
-            extra="""{
+            extra="""
+{
     "iam": true,
     "cluster_identifier": "<REDSHIFT_CLUSTER_IDENTIFIER>",
     "port": 5439,
@@ -602,9 +480,6 @@ def create_default_connections(session: Session = NEW_SESSION):
     "region": ""
 }""",
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="salesforce_default",
             conn_type="salesforce",
@@ -612,17 +487,11 @@ def create_default_connections(session: Session = NEW_SESSION):
             password="password",
             extra='{"security_token": "security_token"}',
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="segment_default",
             conn_type="segment",
             extra='{"write_key": "my-segment-write-key"}',
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="sftp_default",
             conn_type="sftp",
@@ -631,34 +500,22 @@ def create_default_connections(session: Session = NEW_SESSION):
             login="airflow",
             extra='{"key_file": "~/.ssh/id_rsa", "no_host_key_check": true}',
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="spark_default",
             conn_type="spark",
             host="yarn",
             extra='{"queue": "root.default"}',
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="sqlite_default",
             conn_type="sqlite",
             host=os.path.join(gettempdir(), "sqlite_default.db"),
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="ssh_default",
             conn_type="ssh",
             host="localhost",
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="tableau_default",
             conn_type="tableau",
@@ -667,9 +524,6 @@ def create_default_connections(session: Session = NEW_SESSION):
             password="password",
             extra='{"site_id": "my_site"}',
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="teradata_default",
             conn_type="teradata",
@@ -678,9 +532,6 @@ def create_default_connections(session: Session = NEW_SESSION):
             password="password",
             schema="schema",
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="trino_default",
             conn_type="trino",
@@ -688,43 +539,28 @@ def create_default_connections(session: Session = NEW_SESSION):
             schema="hive",
             port=3400,
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="vertica_default",
             conn_type="vertica",
             host="localhost",
             port=5433,
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="wasb_default",
             conn_type="wasb",
             extra='{"sas_token": null}',
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="webhdfs_default",
             conn_type="hdfs",
             host="localhost",
             port=50070,
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="yandexcloud_default",
             conn_type="yandexcloud",
             schema="default",
         ),
-        session,
-    )
-    merge_conn(
         Connection(
             conn_id="ydb_default",
             conn_type="ydb",
@@ -732,8 +568,8 @@ def create_default_connections(session: Session = NEW_SESSION):
             port=2135,
             extra={"database": "/local"},
         ),
-        session,
-    )
+    ]
+    return conns
 
 
 def _create_db_from_orm(session):
diff --git a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_connections.py b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_connections.py
index a4184e29e8da3..6c56232a68a92 100644
--- a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_connections.py
+++ b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_connections.py
@@ -27,7 +27,7 @@
 from airflow.utils.session import provide_session
 
 from tests_common.test_utils.api_fastapi import _check_last_log
-from tests_common.test_utils.db import clear_db_connections, clear_db_logs
+from tests_common.test_utils.db import clear_db_connections, clear_db_logs, clear_test_connections
 from tests_common.test_utils.markers import skip_if_force_lowest_dependencies_marker
 
 pytestmark = pytest.mark.db_test
@@ -84,6 +84,7 @@ def _create_connections(session) -> None:
 class TestConnectionEndpoint:
     @pytest.fixture(autouse=True)
     def setup(self) -> None:
+        clear_test_connections(False)
         clear_db_connections(False)
         clear_db_logs()
 
diff --git a/devel-common/src/tests_common/test_utils/db.py b/devel-common/src/tests_common/test_utils/db.py
index c5711ec514c05..30e5b3c596331 100644
--- a/devel-common/src/tests_common/test_utils/db.py
+++ b/devel-common/src/tests_common/test_utils/db.py
@@ -17,6 +17,8 @@
 # under the License.
 from __future__ import annotations
 
+import json
+from tempfile import gettempdir
 from typing import TYPE_CHECKING
 
 from airflow.configuration import conf
@@ -40,7 +42,11 @@
 from airflow.models.dagwarning import DagWarning
 from airflow.models.serialized_dag import SerializedDagModel
 from airflow.security.permissions import RESOURCE_DAG_PREFIX
-from airflow.utils.db import add_default_pool_if_not_exists, create_default_connections, reflect_tables
+from airflow.utils.db import (
+    add_default_pool_if_not_exists,
+    create_default_connections,
+    reflect_tables,
+)
 from airflow.utils.session import create_session
 
 from tests_common.test_utils.compat import (
@@ -223,6 +229,18 @@ def clear_db_pools():
         add_default_pool_if_not_exists(session)
 
 
+def clear_test_connections(add_default_connections_back=True):
+    # clear environment variables with AIRFLOW_CONN prefix
+    import os
+
+    env_vars_to_remove = [key for key in os.environ.keys() if key.startswith("AIRFLOW_CONN_")]
+    for env_var in env_vars_to_remove:
+        del os.environ[env_var]
+
+    if add_default_connections_back:
+        create_default_connections_for_tests()
+
+
 def clear_db_connections(add_default_connections_back=True):
     with create_session() as session:
         session.query(Connection).delete()
@@ -338,6 +356,461 @@ def clear_dag_specific_permissions():
         session.query(Resource).filter(Resource.id.in_(dag_resource_ids)).delete(synchronize_session=False)
 
 
+def create_default_connections_for_tests():
+    """
+    Create default Airflow connections for tests.
+
+    For testing purposes, we do not need to have the connections setup in the database, using environment
+    variables instead would provide better lookup speeds and is easier too.
+    """
+    import os
+
+    try:
+        from airflow.utils.db import get_default_connections
+
+        conns = get_default_connections()
+    except ImportError:
+        conns = [
+            Connection(
+                conn_id="airflow_db",
+                conn_type="mysql",
+                host="mysql",
+                login="root",
+                password="",
+                schema="airflow",
+            ),
+            Connection(
+                conn_id="athena_default",
+                conn_type="athena",
+            ),
+            Connection(
+                conn_id="aws_default",
+                conn_type="aws",
+            ),
+            Connection(
+                conn_id="azure_batch_default",
+                conn_type="azure_batch",
+                login="<ACCOUNT_NAME>",
+                password="",
+                extra="""{"account_url": "<ACCOUNT_URL>"}""",
+            ),
+            Connection(
+                conn_id="azure_cosmos_default",
+                conn_type="azure_cosmos",
+                extra='{"database_name": "<DATABASE_NAME>", "collection_name": "<COLLECTION_NAME>" }',
+            ),
+            Connection(
+                conn_id="azure_data_explorer_default",
+                conn_type="azure_data_explorer",
+                host="https://<CLUSTER>.kusto.windows.net",
+                extra="""{"auth_method": "<AAD_APP | AAD_APP_CERT | AAD_CREDS | AAD_DEVICE>",
+                    "tenant": "<TENANT ID>", "certificate": "<APPLICATION PEM CERTIFICATE>",
+                    "thumbprint": "<APPLICATION CERTIFICATE THUMBPRINT>"}""",
+            ),
+            Connection(
+                conn_id="azure_data_lake_default",
+                conn_type="azure_data_lake",
+                extra='{"tenant": "<TENANT>", "account_name": "<ACCOUNTNAME>" }',
+            ),
+            Connection(
+                conn_id="azure_default",
+                conn_type="azure",
+            ),
+            Connection(
+                conn_id="cassandra_default",
+                conn_type="cassandra",
+                host="cassandra",
+                port=9042,
+            ),
+            Connection(
+                conn_id="databricks_default",
+                conn_type="databricks",
+                host="localhost",
+            ),
+            Connection(
+                conn_id="dingding_default",
+                conn_type="http",
+                host="",
+                password="",
+            ),
+            Connection(
+                conn_id="drill_default",
+                conn_type="drill",
+                host="localhost",
+                port=8047,
+                extra='{"dialect_driver": "drill+sadrill", "storage_plugin": "dfs"}',
+            ),
+            Connection(
+                conn_id="druid_broker_default",
+                conn_type="druid",
+                host="druid-broker",
+                port=8082,
+                extra='{"endpoint": "druid/v2/sql"}',
+            ),
+            Connection(
+                conn_id="druid_ingest_default",
+                conn_type="druid",
+                host="druid-overlord",
+                port=8081,
+                extra='{"endpoint": "druid/indexer/v1/task"}',
+            ),
+            Connection(
+                conn_id="elasticsearch_default",
+                conn_type="elasticsearch",
+                host="localhost",
+                schema="http",
+                port=9200,
+            ),
+            Connection(
+                conn_id="emr_default",
+                conn_type="emr",
+                extra="""
+                {   "Name": "default_job_flow_name",
+                    "LogUri": "s3://my-emr-log-bucket/default_job_flow_location",
+                    "ReleaseLabel": "emr-4.6.0",
+                    "Instances": {
+                        "Ec2KeyName": "mykey",
+                        "Ec2SubnetId": "somesubnet",
+                        "InstanceGroups": [
+                            {
+                                "Name": "Master nodes",
+                                "Market": "ON_DEMAND",
+                                "InstanceRole": "MASTER",
+                                "InstanceType": "r3.2xlarge",
+                                "InstanceCount": 1
+                            },
+                            {
+                                "Name": "Core nodes",
+                                "Market": "ON_DEMAND",
+                                "InstanceRole": "CORE",
+                                "InstanceType": "r3.2xlarge",
+                                "InstanceCount": 1
+                            }
+                        ],
+                        "TerminationProtected": false,
+                        "KeepJobFlowAliveWhenNoSteps": false
+                    },
+                    "Applications":[
+                        { "Name": "Spark" }
+                    ],
+                    "VisibleToAllUsers": true,
+                    "JobFlowRole": "EMR_EC2_DefaultRole",
+                    "ServiceRole": "EMR_DefaultRole",
+                    "Tags": [
+                        {
+                            "Key": "app",
+                            "Value": "analytics"
+                        },
+                        {
+                            "Key": "environment",
+                            "Value": "development"
+                        }
+                    ]
+                }
+            """,
+            ),
+            Connection(
+                conn_id="facebook_default",
+                conn_type="facebook_social",
+                extra="""
+                {   "account_id": "<AD_ACCOUNT_ID>",
+                    "app_id": "<FACEBOOK_APP_ID>",
+                    "app_secret": "<FACEBOOK_APP_SECRET>",
+                    "access_token": "<FACEBOOK_AD_ACCESS_TOKEN>"
+                }
+            """,
+            ),
+            Connection(
+                conn_id="fs_default",
+                conn_type="fs",
+                extra='{"path": "/"}',
+            ),
+            Connection(
+                conn_id="ftp_default",
+                conn_type="ftp",
+                host="localhost",
+                port=21,
+                login="airflow",
+                password="airflow",
+                extra='{"key_file": "~/.ssh/id_rsa", "no_host_key_check": true}',
+            ),
+            Connection(
+                conn_id="google_cloud_default",
+                conn_type="google_cloud_platform",
+                schema="default",
+            ),
+            Connection(
+                conn_id="gremlin_default",
+                conn_type="gremlin",
+                host="gremlin",
+                port=8182,
+            ),
+            Connection(
+                conn_id="hive_cli_default",
+                conn_type="hive_cli",
+                port=10000,
+                host="localhost",
+                extra='{"use_beeline": true, "auth": ""}',
+                schema="default",
+            ),
+            Connection(
+                conn_id="hiveserver2_default",
+                conn_type="hiveserver2",
+                host="localhost",
+                schema="default",
+                port=10000,
+            ),
+            Connection(
+                conn_id="http_default",
+                conn_type="http",
+                host="https://www.httpbin.org/",
+            ),
+            Connection(
+                conn_id="iceberg_default",
+                conn_type="iceberg",
+                host="https://api.iceberg.io/ws/v1",
+            ),
+            Connection(conn_id="impala_default", conn_type="impala", host="localhost", port=21050),
+            Connection(
+                conn_id="kafka_default",
+                conn_type="kafka",
+                extra=json.dumps({"bootstrap.servers": "broker:29092", "group.id": "my-group"}),
+            ),
+            Connection(
+                conn_id="kubernetes_default",
+                conn_type="kubernetes",
+            ),
+            Connection(
+                conn_id="kylin_default",
+                conn_type="kylin",
+                host="localhost",
+                port=7070,
+                login="ADMIN",
+                password="KYLIN",
+            ),
+            Connection(
+                conn_id="leveldb_default",
+                conn_type="leveldb",
+                host="localhost",
+            ),
+            Connection(conn_id="livy_default", conn_type="livy", host="livy", port=8998),
+            Connection(
+                conn_id="local_mysql",
+                conn_type="mysql",
+                host="localhost",
+                login="airflow",
+                password="airflow",
+                schema="airflow",
+            ),
+            Connection(
+                conn_id="metastore_default",
+                conn_type="hive_metastore",
+                host="localhost",
+                extra='{"authMechanism": "PLAIN"}',
+                port=9083,
+            ),
+            Connection(conn_id="mongo_default", conn_type="mongo", host="mongo", port=27017),
+            Connection(
+                conn_id="mssql_default",
+                conn_type="mssql",
+                host="localhost",
+                port=1433,
+            ),
+            Connection(
+                conn_id="mysql_default",
+                conn_type="mysql",
+                login="root",
+                schema="airflow",
+                host="mysql",
+            ),
+            Connection(
+                conn_id="opensearch_default",
+                conn_type="opensearch",
+                host="localhost",
+                schema="http",
+                port=9200,
+            ),
+            Connection(
+                conn_id="opsgenie_default",
+                conn_type="http",
+                host="",
+                password="",
+            ),
+            Connection(
+                conn_id="oracle_default",
+                conn_type="oracle",
+                host="localhost",
+                login="root",
+                password="password",
+                schema="schema",
+                port=1521,
+            ),
+            Connection(
+                conn_id="oss_default",
+                conn_type="oss",
+                extra="""
+                {
+                "auth_type": "AK",
+                "access_key_id": "<ACCESS_KEY_ID>",
+                "access_key_secret": "<ACCESS_KEY_SECRET>",
+                "region": "<YOUR_OSS_REGION>"}
+                """,
+            ),
+            Connection(
+                conn_id="pig_cli_default",
+                conn_type="pig_cli",
+                schema="default",
+            ),
+            Connection(
+                conn_id="pinot_admin_default",
+                conn_type="pinot",
+                host="localhost",
+                port=9000,
+            ),
+            Connection(
+                conn_id="pinot_broker_default",
+                conn_type="pinot",
+                host="localhost",
+                port=9000,
+                extra='{"endpoint": "/query", "schema": "http"}',
+            ),
+            Connection(
+                conn_id="postgres_default",
+                conn_type="postgres",
+                login="postgres",
+                password="airflow",
+                schema="airflow",
+                host="postgres",
+            ),
+            Connection(
+                conn_id="presto_default",
+                conn_type="presto",
+                host="localhost",
+                schema="hive",
+                port=3400,
+            ),
+            Connection(
+                conn_id="qdrant_default",
+                conn_type="qdrant",
+                host="qdrant",
+                port=6333,
+            ),
+            Connection(
+                conn_id="redis_default",
+                conn_type="redis",
+                host="redis",
+                port=6379,
+                extra='{"db": 0}',
+            ),
+            Connection(
+                conn_id="redshift_default",
+                conn_type="redshift",
+                extra="""
+{
+    "iam": true,
+    "cluster_identifier": "<REDSHIFT_CLUSTER_IDENTIFIER>",
+    "port": 5439,
+    "profile": "default",
+    "db_user": "awsuser",
+    "database": "dev",
+    "region": ""
+}""",
+            ),
+            Connection(
+                conn_id="salesforce_default",
+                conn_type="salesforce",
+                login="username",
+                password="password",
+                extra='{"security_token": "security_token"}',
+            ),
+            Connection(
+                conn_id="segment_default",
+                conn_type="segment",
+                extra='{"write_key": "my-segment-write-key"}',
+            ),
+            Connection(
+                conn_id="sftp_default",
+                conn_type="sftp",
+                host="localhost",
+                port=22,
+                login="airflow",
+                extra='{"key_file": "~/.ssh/id_rsa", "no_host_key_check": true}',
+            ),
+            Connection(
+                conn_id="spark_default",
+                conn_type="spark",
+                host="yarn",
+                extra='{"queue": "root.default"}',
+            ),
+            Connection(
+                conn_id="sqlite_default",
+                conn_type="sqlite",
+                host=os.path.join(gettempdir(), "sqlite_default.db"),
+            ),
+            Connection(
+                conn_id="ssh_default",
+                conn_type="ssh",
+                host="localhost",
+            ),
+            Connection(
+                conn_id="tableau_default",
+                conn_type="tableau",
+                host="https://tableau.server.url",
+                login="user",
+                password="password",
+                extra='{"site_id": "my_site"}',
+            ),
+            Connection(
+                conn_id="teradata_default",
+                conn_type="teradata",
+                host="localhost",
+                login="user",
+                password="password",
+                schema="schema",
+            ),
+            Connection(
+                conn_id="trino_default",
+                conn_type="trino",
+                host="localhost",
+                schema="hive",
+                port=3400,
+            ),
+            Connection(
+                conn_id="vertica_default",
+                conn_type="vertica",
+                host="localhost",
+                port=5433,
+            ),
+            Connection(
+                conn_id="wasb_default",
+                conn_type="wasb",
+                extra='{"sas_token": null}',
+            ),
+            Connection(
+                conn_id="webhdfs_default",
+                conn_type="hdfs",
+                host="localhost",
+                port=50070,
+            ),
+            Connection(
+                conn_id="yandexcloud_default",
+                conn_type="yandexcloud",
+                schema="default",
+            ),
+            Connection(
+                conn_id="ydb_default",
+                conn_type="ydb",
+                host="grpc://localhost",
+                port=2135,
+                extra={"database": "/local"},
+            ),
+        ]
+
+    for c in conns:
+        envvar = f"AIRFLOW_CONN_{c.conn_id.upper()}"
+        os.environ[envvar] = c.as_json()
+
+
 def clear_all():
     clear_db_runs()
     clear_db_assets()
@@ -355,7 +828,7 @@ def clear_all():
     clear_db_xcom()
     clear_db_variables()
     clear_db_pools()
-    clear_db_connections(add_default_connections_back=True)
+    clear_test_connections(add_default_connections_back=True)
     clear_db_deadline()
     clear_dag_specific_permissions()
     if AIRFLOW_V_3_0_PLUS:
diff --git a/providers/apache/livy/tests/unit/apache/livy/hooks/test_livy.py b/providers/apache/livy/tests/unit/apache/livy/hooks/test_livy.py
index ab60c70f4e838..c794c42431eae 100644
--- a/providers/apache/livy/tests/unit/apache/livy/hooks/test_livy.py
+++ b/providers/apache/livy/tests/unit/apache/livy/hooks/test_livy.py
@@ -30,7 +30,7 @@
 from airflow.models import Connection
 from airflow.providers.apache.livy.hooks.livy import BatchState, LivyAsyncHook, LivyHook
 
-from tests_common.test_utils.db import clear_db_connections
+from tests_common.test_utils.db import clear_test_connections
 
 LIVY_CONN_ID = LivyHook.default_conn_name
 DEFAULT_CONN_ID = LivyHook.default_conn_name
@@ -56,11 +56,11 @@
 class TestLivyDbHook:
     @classmethod
     def setup_class(cls):
-        clear_db_connections(add_default_connections_back=False)
+        clear_test_connections(add_default_connections_back=False)
 
     @classmethod
     def teardown_class(cls):
-        clear_db_connections(add_default_connections_back=True)
+        clear_test_connections(add_default_connections_back=True)
 
     # TODO: Potential performance issue, converted setup_class to a setup_connections function level fixture
     @pytest.fixture(autouse=True)
diff --git a/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_sql.py b/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_sql.py
index 301ccd730fa81..deeae5cb5e22d 100644
--- a/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_sql.py
+++ b/providers/apache/spark/tests/unit/apache/spark/hooks/test_spark_sql.py
@@ -27,7 +27,7 @@
 from airflow.models import Connection
 from airflow.providers.apache.spark.hooks.spark_sql import SparkSqlHook
 
-from tests_common.test_utils.db import clear_db_connections
+from tests_common.test_utils.db import clear_test_connections
 
 
 def get_after(sentinel, iterable):
@@ -64,7 +64,7 @@ class TestSparkSqlHook:
 
     @classmethod
     def setup_class(cls) -> None:
-        clear_db_connections(add_default_connections_back=False)
+        clear_test_connections(add_default_connections_back=False)
 
     @pytest.fixture(autouse=True)
     def setup_connections(self, create_connection_without_db):
@@ -74,7 +74,7 @@ def setup_connections(self, create_connection_without_db):
 
     @classmethod
     def teardown_class(cls) -> None:
-        clear_db_connections(add_default_connections_back=True)
+        clear_test_connections(add_default_connections_back=True)
 
     @pytest.mark.db_test
     def test_build_command(self):
diff --git a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/hooks/test_kubernetes.py b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/hooks/test_kubernetes.py
index ad1b07ebf4811..1b8db52452299 100644
--- a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/hooks/test_kubernetes.py
+++ b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/hooks/test_kubernetes.py
@@ -31,14 +31,12 @@
 from kubernetes.client import V1Deployment, V1DeploymentStatus
 from kubernetes.client.rest import ApiException
 from kubernetes.config import ConfigException
-from sqlalchemy.orm import make_transient
 
 from airflow.exceptions import AirflowException, AirflowNotFoundException
-from airflow.hooks.base import BaseHook
 from airflow.models import Connection
 from airflow.providers.cncf.kubernetes.hooks.kubernetes import AsyncKubernetesHook, KubernetesHook
 
-from tests_common.test_utils.db import clear_db_connections
+from tests_common.test_utils.db import clear_test_connections
 from tests_common.test_utils.providers import get_provider_min_airflow_version
 
 pytestmark = pytest.mark.db_test
@@ -79,16 +77,18 @@ class DeprecationRemovalRequired(AirflowException): ...
 
 
 @pytest.fixture
-def remove_default_conn(session):
-    before_conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).one_or_none()
-    if before_conn:
-        session.delete(before_conn)
-        session.commit()
+def remove_default_conn(monkeypatch):
+    original_env_var = os.environ.get(f"AIRFLOW_CONN_{DEFAULT_CONN_ID.upper()}")
+
+    # remove the env variable to simulate no default connection
+    if original_env_var:
+        monkeypatch.delenv(f"AIRFLOW_CONN_{DEFAULT_CONN_ID.upper()}")
+
     yield
-    if before_conn:
-        make_transient(before_conn)
-        session.add(before_conn)
-        session.commit()
+
+    # restore the original env variable
+    if original_env_var:
+        monkeypatch.setenv(f"AIRFLOW_CONN_{DEFAULT_CONN_ID.upper()}", original_env_var)
 
 
 class TestKubernetesHook:
@@ -138,7 +138,7 @@ def setup_connections(self, create_connection_without_db):
 
     @classmethod
     def teardown_class(cls) -> None:
-        clear_db_connections()
+        clear_test_connections()
 
     @pytest.mark.parametrize(
         "in_cluster_param, conn_id, in_cluster_called",
@@ -439,8 +439,8 @@ def test_prefixed_names_still_work(self, mock_get_client):
 
     def test_missing_default_connection_is_ok(self, remove_default_conn):
         # prove to ourselves that the default conn doesn't exist
-        with pytest.raises(AirflowNotFoundException):
-            BaseHook.get_connection(DEFAULT_CONN_ID)
+        k8s_conn_exists = os.environ.get(f"AIRFLOW_CONN_{DEFAULT_CONN_ID.upper()}")
+        assert k8s_conn_exists is None
 
         # verify K8sHook still works
         hook = KubernetesHook()
@@ -849,7 +849,7 @@ def kubernetes_connection(create_connection_without_db):
             ),
         )
         yield
-        clear_db_connections()
+        clear_test_connections()
 
     @pytest.mark.asyncio
     @mock.patch(INCLUSTER_CONFIG_LOADER)
@@ -936,7 +936,7 @@ async def test_load_config_with_conn_id_kube_config_path(
         except:
             raise
         finally:
-            clear_db_connections()
+            clear_test_connections()
 
     @pytest.mark.asyncio
     @mock.patch(INCLUSTER_CONFIG_LOADER)
diff --git a/providers/google/tests/unit/google/cloud/log/test_gcs_task_handler_system.py b/providers/google/tests/unit/google/cloud/log/test_gcs_task_handler_system.py
index e88c6fbeb3d14..c3361cf2fba56 100644
--- a/providers/google/tests/unit/google/cloud/log/test_gcs_task_handler_system.py
+++ b/providers/google/tests/unit/google/cloud/log/test_gcs_task_handler_system.py
@@ -31,7 +31,7 @@
 from airflow.utils.session import provide_session
 
 from tests_common.test_utils.config import conf_vars
-from tests_common.test_utils.db import clear_db_connections, clear_db_runs
+from tests_common.test_utils.db import clear_db_runs, clear_test_connections
 from tests_common.test_utils.gcp_system_helpers import (
     GoogleSystemTest,
     provide_gcp_context,
@@ -48,7 +48,7 @@ def setup_class(cls) -> None:
         unique_suffix = "".join(random.sample(string.ascii_lowercase, 16))
         cls.bucket_name = f"airflow-gcs-task-handler-tests-{unique_suffix}"  # type: ignore
         cls.create_gcs_bucket(cls.bucket_name)  # type: ignore
-        clear_db_connections()
+        clear_test_connections()
 
     @classmethod
     def teardown_class(cls) -> None:
diff --git a/providers/google/tests/unit/google/cloud/operators/test_dataprep_system.py b/providers/google/tests/unit/google/cloud/operators/test_dataprep_system.py
index f27aa92684fff..eca2a1493f5cd 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_dataprep_system.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_dataprep_system.py
@@ -25,7 +25,7 @@
 from airflow.models import Connection
 from airflow.utils.session import create_session
 
-from tests_common.test_utils.db import clear_db_connections
+from tests_common.test_utils.db import clear_test_connections
 from tests_common.test_utils.gcp_system_helpers import GoogleSystemTest
 from tests_common.test_utils.system_tests import get_test_run
 
@@ -50,7 +50,7 @@ def setup_method(self):
             session.add(dataprep_conn_id)
 
     def teardown_method(self):
-        clear_db_connections()
+        clear_test_connections()
 
     def test_run_example_dag(self):
         from unit.google.cloud.dataprep.example_dataprep import dag
diff --git a/providers/sftp/tests/unit/sftp/hooks/test_sftp.py b/providers/sftp/tests/unit/sftp/hooks/test_sftp.py
index 43f8208dbc640..bfd83b81e97c0 100644
--- a/providers/sftp/tests/unit/sftp/hooks/test_sftp.py
+++ b/providers/sftp/tests/unit/sftp/hooks/test_sftp.py
@@ -34,9 +34,6 @@
 from airflow.exceptions import AirflowException
 from airflow.models import Connection
 from airflow.providers.sftp.hooks.sftp import SFTPHook, SFTPHookAsync
-from airflow.utils.session import provide_session
-
-pytestmark = pytest.mark.db_test
 
 
 def generate_host_key(pkey: paramiko.PKey):
@@ -62,13 +59,31 @@ def generate_host_key(pkey: paramiko.PKey):
 
 
 class TestSFTPHook:
-    @provide_session
-    def update_connection(self, login, session=None):
-        connection = session.query(Connection).filter(Connection.conn_id == "sftp_default").first()
-        old_login = connection.login
-        connection.login = login
-        connection.extra = ""  # clear out extra so it doesn't look for a key file
-        session.commit()
+    def update_connection(self, login):
+        import os
+
+        # Get the current connection from environment variable to find the old login
+        old_connection = os.environ.get("AIRFLOW_CONN_SFTP_DEFAULT")
+        old_login = "airflow"  # default fallback
+
+        if old_connection:
+            try:
+                old_conn = Connection.from_json(old_connection)
+                old_login = old_conn.login
+            except Exception:
+                pass
+
+        # Set the connection as an environment variable
+        new_connection = Connection(
+            conn_id="sftp_default",
+            conn_type="sftp",
+            host="localhost",
+            login=login,
+            password="airflow",
+            extra="",  # clear out extra so it doesn't look for a key file
+        )
+        os.environ[f"AIRFLOW_CONN_{new_connection.conn_id.upper()}"] = new_connection.as_json()
+
         return old_login
 
     def _create_additional_test_file(self, file_name):
@@ -549,7 +564,17 @@ def test_store_and_retrieve_directory_concurrently(self):
 
     @patch("paramiko.SSHClient")
     @patch("paramiko.ProxyCommand")
-    def test_sftp_hook_with_proxy_command(self, mock_proxy_command, mock_ssh_client):
+    @patch("airflow.providers.sftp.hooks.sftp.SFTPHook.get_connection")
+    def test_sftp_hook_with_proxy_command(self, mock_get_connection, mock_proxy_command, mock_ssh_client):
+        # Mock the connection to not have a password
+        mock_connection = MagicMock()
+        mock_connection.login = "user"
+        mock_connection.password = None
+        mock_connection.host = "example.com"
+        mock_connection.port = 22
+        mock_connection.extra = None
+        mock_get_connection.return_value = mock_connection
+
         mock_sftp_client = MagicMock(spec=SFTPClient)
         mock_ssh_client.open_sftp.return_value = mock_sftp_client
 

From 84c4fca35670d603bc822d2fb8a0d3bf6534880b Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Wed, 25 Jun 2025 10:23:54 +0100
Subject: [PATCH 177/381] Airbyte test fixes, make mock JobResponse response id
 as int (#52134)

* Airbyte test fixes, make mock JobResponse response id as int

* Airbyte test fixes, make mock JobResponse response id as int
---
 providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py b/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py
index 6f19b49c51ec9..9dd563da9aaa9 100644
--- a/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py
+++ b/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py
@@ -97,7 +97,7 @@ def test_get_job_status(self, get_job_mock):
         mock_response = mock.AsyncMock()
         mock_response.job_response = JobResponse(
             connection_id="connection-mock",
-            job_id="1",
+            job_id=1,
             start_time="today",
             job_type=JobTypeEnum.SYNC,
             status=JobStatusEnum.RUNNING,
@@ -111,7 +111,7 @@ def test_cancel_job(self, cancel_job_mock):
         mock_response = mock.Mock()
         mock_response.job_response = JobResponse(
             connection_id="connection-mock",
-            job_id="1",
+            job_id=1,
             start_time="today",
             job_type=JobTypeEnum.SYNC,
             status=JobStatusEnum.CANCELLED,

From 460b1c65748016b069f39fa61210db254176d914 Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Wed, 25 Jun 2025 15:06:11 +0530
Subject: [PATCH 178/381] Nuke unused latest flag for preparing helm chart
 release (#52229)

---
 ...ment_generate-issue-content-helm-chart.svg | 20 +++++------
 ...ment_generate-issue-content-helm-chart.txt |  2 +-
 .../commands/release_management_commands.py   | 36 +++++--------------
 .../release_management_commands_config.py     |  1 -
 4 files changed, 17 insertions(+), 42 deletions(-)

diff --git a/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.svg b/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.svg
index e9feecddd6ca0..367f0c554fe8c 100644
--- a/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.svg
+++ b/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 538.0" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 513.5999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -45,7 +45,7 @@
 
     <defs>
     <clipPath id="breeze-release-management-generate-issue-content-helm-chart-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="487.0" />
+      <rect x="0" y="0" width="1463.0" height="462.59999999999997" />
     </clipPath>
     <clipPath id="breeze-release-management-generate-issue-content-helm-chart-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -101,12 +101,9 @@
 <clipPath id="breeze-release-management-generate-issue-content-helm-chart-line-17">
     <rect x="0" y="416.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="breeze-release-management-generate-issue-content-helm-chart-line-18">
-    <rect x="0" y="440.7" width="1464" height="24.65"/>
-            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="536" rx="8"/><text class="breeze-release-management-generate-issue-content-helm-chart-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;generate-issue-content-helm-chart</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="511.6" rx="8"/><text class="breeze-release-management-generate-issue-content-helm-chart-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;generate-issue-content-helm-chart</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -130,12 +127,11 @@
 </text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r7" x="24.4" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">*</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="61" y="288.4" textLength="207.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">--current-release</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="329.4" y="288.4" textLength="805.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">commit&#160;reference&#160;(for&#160;example&#160;hash&#160;or&#160;tag)&#160;of&#160;the&#160;current&#160;release.</text><text class="breeze-release-management-generate-issue-content-helm-chart-r6" x="1146.8" y="288.4" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">(TEXT)</text><text class="breeze-release-management-generate-issue-content-helm-chart-r8" x="1232.2" y="288.4" textLength="122" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">[required]</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">
 </text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-12)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="61" y="312.8" textLength="219.6" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-12)">--excluded-pr-list</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="329.4" y="312.8" textLength="646.6" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-12)">Coma-separated&#160;list&#160;of&#160;PRs&#160;to&#160;exclude&#160;from&#160;the&#160;issue.</text><text class="breeze-release-management-generate-issue-content-helm-chart-r6" x="988.2" y="312.8" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-12)">(TEXT)</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-12)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-12)">
 </text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-13)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="61" y="337.2" textLength="195.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-13)">--limit-pr-count</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="329.4" y="337.2" textLength="805.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-13)">Limit&#160;PR&#160;count&#160;processes&#160;(useful&#160;for&#160;testing&#160;small&#160;subset&#160;of&#160;PRs).</text><text class="breeze-release-management-generate-issue-content-helm-chart-r6" x="1146.8" y="337.2" textLength="109.8" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-13)">(INTEGER)</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-13)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-13)">
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-14)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="61" y="361.6" textLength="97.6" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-14)">--latest</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="329.4" y="361.6" textLength="854" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-14)">Run&#160;the&#160;command&#160;against&#160;latest&#160;released&#160;version&#160;of&#160;airflow&#160;helm&#160;charts</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-14)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-14)">
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="386" textLength="1464" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-15)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-15)">
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="410.4" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-16)">╭─</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="24.4" y="410.4" textLength="195.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-16)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="219.6" y="410.4" textLength="1220" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-16)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1439.6" y="410.4" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-16)">─╮</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-16)">
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="434.8" textLength="109.8" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">--verbose</text><text class="breeze-release-management-generate-issue-content-helm-chart-r9" x="158.6" y="434.8" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">-v</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="207.4" y="434.8" textLength="585.6" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="459.2" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">--help</text><text class="breeze-release-management-generate-issue-content-helm-chart-r9" x="158.6" y="459.2" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">-h</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="207.4" y="459.2" textLength="329.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="483.6" textLength="1464" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-19)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-19)">
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="361.6" textLength="1464" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-14)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-14)">
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="386" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-15)">╭─</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="24.4" y="386" textLength="195.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-15)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="219.6" y="386" textLength="1220" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-15)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1439.6" y="386" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-15)">─╮</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-15)">
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-16)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="410.4" textLength="109.8" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-16)">--verbose</text><text class="breeze-release-management-generate-issue-content-helm-chart-r9" x="158.6" y="410.4" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-16)">-v</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="207.4" y="410.4" textLength="585.6" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-16)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-16)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-16)">
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="434.8" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">--help</text><text class="breeze-release-management-generate-issue-content-helm-chart-r9" x="158.6" y="434.8" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">-h</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="207.4" y="434.8" textLength="329.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="459.2" textLength="1464" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.txt b/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.txt
index 135b4c86b52fc..21b7200bb2177 100644
--- a/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.txt
+++ b/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.txt
@@ -1 +1 @@
-b18a6246850723983de6bdd98273b095
+02d79407876c87adbbb32e53dc028ced
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index b8948df389813..a22d77912331b 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -175,7 +175,6 @@
 from airflow_breeze.utils.shared_options import get_dry_run, get_verbose
 from airflow_breeze.utils.version_utils import (
     get_latest_airflow_version,
-    get_latest_helm_chart_version,
     is_local_package_version,
 )
 from airflow_breeze.utils.versions import is_pre_release
@@ -2692,11 +2691,6 @@ def print_issue_content(
     default=None,
     help="Limit PR count processes (useful for testing small subset of PRs).",
 )
-@click.option(
-    "--latest",
-    is_flag=True,
-    help="Run the command against latest released version of airflow helm charts",
-)
 @option_verbose
 def generate_issue_content_helm_chart(
     github_token: str,
@@ -2704,7 +2698,6 @@ def generate_issue_content_helm_chart(
     current_release: str,
     excluded_pr_list: str,
     limit_pr_count: int | None,
-    latest: bool,
 ):
     generate_issue_content(
         github_token,
@@ -2713,7 +2706,6 @@ def generate_issue_content_helm_chart(
         excluded_pr_list,
         limit_pr_count,
         is_helm_chart=True,
-        latest=latest,
     )
 
 
@@ -3761,7 +3753,7 @@ def generate_issue_content(
     excluded_pr_list: str,
     limit_pr_count: int | None,
     is_helm_chart: bool,
-    latest: bool,
+    latest: bool = False,
 ):
     from github import Github, Issue, PullRequest, UnknownObjectException
 
@@ -3772,25 +3764,13 @@ def generate_issue_content(
     current = current_release
 
     if latest:
-        if is_helm_chart:
-            latest_helm_version = get_latest_helm_chart_version()
-            get_console().print(f"\n[info] Latest stable version of helm chart is {latest_helm_version}\n")
-            previous = f"helm-chart/{latest_helm_version}"
-            current = os.getenv("VERSION", "HEAD")
-            if current == "HEAD":
-                get_console().print(
-                    "\n[warning]Environment variable VERSION not set, setting current release "
-                    "version as 'HEAD' for helm chart release\n"
-                )
-        else:
-            latest_airflow_version = get_latest_airflow_version()
-            previous = str(latest_airflow_version)
-            current = os.getenv("VERSION", "HEAD")
-            if current == "HEAD":
-                get_console().print(
-                    "\n[warning]Environment variable VERSION not set, setting current release "
-                    "version as 'HEAD'\n"
-                )
+        latest_airflow_version = get_latest_airflow_version()
+        previous = str(latest_airflow_version)
+        current = os.getenv("VERSION", "HEAD")
+        if current == "HEAD":
+            get_console().print(
+                "\n[warning]Environment variable VERSION not set, setting current release version as 'HEAD'\n"
+            )
 
     changes = get_changes(verbose, previous, current, is_helm_chart)
     change_prs = [change.pr for change in changes]
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
index 51f53cae7d374..ad9c275a40a83 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
@@ -147,7 +147,6 @@
                 "--current-release",
                 "--excluded-pr-list",
                 "--limit-pr-count",
-                "--latest",
             ],
         }
     ],

From cf0e4045c32633cac76ac41569362e9feb1e3f9f Mon Sep 17 00:00:00 2001
From: Elad Kalif <45845474+eladkal@users.noreply.github.com>
Date: Wed, 25 Jun 2025 14:34:29 +0300
Subject: [PATCH 179/381] Remove HDFSHook, HdfsRegexSensor, HdfsSensor,
 HdfsFolderSensor (#52217)

These classes generated RuntimeError since version 4.0.0
---
 .../providers/apache/hdfs/hooks/hdfs.py       | 55 -------------------
 .../providers/apache/hdfs/sensors/hdfs.py     | 52 ------------------
 2 files changed, 107 deletions(-)
 delete mode 100644 providers/apache/hdfs/src/airflow/providers/apache/hdfs/hooks/hdfs.py
 delete mode 100644 providers/apache/hdfs/src/airflow/providers/apache/hdfs/sensors/hdfs.py

diff --git a/providers/apache/hdfs/src/airflow/providers/apache/hdfs/hooks/hdfs.py b/providers/apache/hdfs/src/airflow/providers/apache/hdfs/hooks/hdfs.py
deleted file mode 100644
index 8c4fe26c2c17e..0000000000000
--- a/providers/apache/hdfs/src/airflow/providers/apache/hdfs/hooks/hdfs.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-from __future__ import annotations
-
-from airflow.exceptions import AirflowException
-from airflow.hooks.base import BaseHook
-
-_EXCEPTION_MESSAGE = """The old HDFS Hooks have been removed in 4.0.0 version of the apache.hdfs provider.
-Please convert your DAGs to use the WebHdfsHook or downgrade the provider to below 4.*
-if you want to continue using it.
-If you want to use earlier provider you can downgrade to latest released 3.* version
-using `pip install apache-airflow-providers-apache-hdfs==3.2.1` (no constraints)
-"""
-
-
-class HDFSHookException(AirflowException):
-    """
-    This Exception has been removed and is not functional.
-
-    Please convert your DAGs to use the WebHdfsHook or downgrade the provider
-    to below 4.* if you want to continue using it. If you want to use earlier
-    provider you can downgrade to latest released 3.* version using
-    `pip install apache-airflow-providers-apache-hdfs==3.2.1` (no constraints).
-    """
-
-    def __init__(self, *args, **kwargs):
-        raise RuntimeError(_EXCEPTION_MESSAGE)
-
-
-class HDFSHook(BaseHook):
-    """
-    This Hook has been removed and is not functional.
-
-    Please convert your DAGs to use the WebHdfsHook or downgrade the provider
-    to below 4.*. if you want to continue using it. If you want to use earlier
-    provider you can downgrade to latest released 3.* version using
-    `pip install apache-airflow-providers-apache-hdfs==3.2.1` (no constraints).
-    """
-
-    def __init__(self, *args, **kwargs):
-        raise RuntimeError(_EXCEPTION_MESSAGE)
diff --git a/providers/apache/hdfs/src/airflow/providers/apache/hdfs/sensors/hdfs.py b/providers/apache/hdfs/src/airflow/providers/apache/hdfs/sensors/hdfs.py
deleted file mode 100644
index 2d924821f991f..0000000000000
--- a/providers/apache/hdfs/src/airflow/providers/apache/hdfs/sensors/hdfs.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-from __future__ import annotations
-
-from airflow.sensors.base import BaseSensorOperator
-
-# Ignore missing docstring
-
-_EXCEPTION_MESSAGE = """The old HDFS Sensors have been removed in 4.0.0 version of the apache.hdfs provider.
-Please convert your DAGs to use the WebHdfsSensor or downgrade the provider to below 4.*
-if you want to continue using it.
-If you want to use earlier provider you can downgrade to latest released 3.* version
-using `pip install apache-airflow-providers-apache-hdfs==3.2.1` (no constraints)
-"""
-
-
-class HdfsSensor(BaseSensorOperator):
-    """
-    This Sensor has been removed and is not functional.
-
-    Please convert your DAGs to use the WebHdfsSensor or downgrade the provider
-    to below 4.* if you want to continue using it. If you want to use earlier
-    provider you can downgrade to latest released 3.* version using
-    `pip install apache-airflow-providers-apache-hdfs==3.2.1` (no constraints).
-    """
-
-    def __init__(self, *args, **kwargs):
-        raise RuntimeError(_EXCEPTION_MESSAGE)
-
-
-class HdfsRegexSensor(HdfsSensor):
-    def __init__(self, *args, **kwargs):
-        raise RuntimeError(_EXCEPTION_MESSAGE)
-
-
-class HdfsFolderSensor(HdfsSensor):
-    def __init__(self, *args, **kwargs):
-        raise RuntimeError(_EXCEPTION_MESSAGE)

From badff58fe3fd5b547c2a5289b25146fec54c2693 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Wed, 25 Jun 2025 13:49:21 +0200
Subject: [PATCH 180/381] Remove db_tests from openlineage provider (#52239)

Part of #52020

Still some tests left.
---
 .../tests/unit/openlineage/extractors/test_base.py          | 2 +-
 .../tests/unit/openlineage/extractors/test_bash.py          | 3 ---
 .../tests/unit/openlineage/extractors/test_manager.py       | 1 -
 .../tests/unit/openlineage/extractors/test_python.py        | 3 ---
 .../tests/unit/openlineage/plugins/test_adapter.py          | 2 --
 .../tests/unit/openlineage/plugins/test_execution.py        | 6 ------
 .../tests/unit/openlineage/plugins/test_listener.py         | 4 ++--
 .../openlineage/tests/unit/openlineage/utils/test_utils.py  | 1 -
 8 files changed, 3 insertions(+), 19 deletions(-)

diff --git a/providers/openlineage/tests/unit/openlineage/extractors/test_base.py b/providers/openlineage/tests/unit/openlineage/extractors/test_base.py
index eb247567511eb..d14933ca6e822 100644
--- a/providers/openlineage/tests/unit/openlineage/extractors/test_base.py
+++ b/providers/openlineage/tests/unit/openlineage/extractors/test_base.py
@@ -38,7 +38,7 @@
 
 if TYPE_CHECKING:
     from openlineage.client.facet_v2 import RunFacet
-pytestmark = pytest.mark.db_test
+
 
 INPUTS = [Dataset(namespace="database://host:port", name="inputtable")]
 OUTPUTS = [Dataset(namespace="database://host:port", name="inputtable")]
diff --git a/providers/openlineage/tests/unit/openlineage/extractors/test_bash.py b/providers/openlineage/tests/unit/openlineage/extractors/test_bash.py
index 31ef2ce80d65d..5e788805cad89 100644
--- a/providers/openlineage/tests/unit/openlineage/extractors/test_bash.py
+++ b/providers/openlineage/tests/unit/openlineage/extractors/test_bash.py
@@ -21,7 +21,6 @@
 from datetime import datetime
 from unittest.mock import patch
 
-import pytest
 from openlineage.client.facet_v2 import source_code_job
 
 from airflow import DAG
@@ -30,8 +29,6 @@
 
 from tests_common.test_utils.compat import BashOperator
 
-pytestmark = pytest.mark.db_test
-
 with DAG(
     dag_id="test_dummy_dag",
     description="Test dummy DAG",
diff --git a/providers/openlineage/tests/unit/openlineage/extractors/test_manager.py b/providers/openlineage/tests/unit/openlineage/extractors/test_manager.py
index 55e11588343d7..100ac520d3d84 100644
--- a/providers/openlineage/tests/unit/openlineage/extractors/test_manager.py
+++ b/providers/openlineage/tests/unit/openlineage/extractors/test_manager.py
@@ -324,7 +324,6 @@ def get_openlineage_facets_on_start(self):
     assert metadata.outputs == []
 
 
-@pytest.mark.db_test
 @pytest.mark.skipif(
     AIRFLOW_V_3_0_PLUS,
     reason="Test for hook level lineage in Airflow < 3.0",
diff --git a/providers/openlineage/tests/unit/openlineage/extractors/test_python.py b/providers/openlineage/tests/unit/openlineage/extractors/test_python.py
index 6f3ca48c5187b..abfe10dbe0989 100644
--- a/providers/openlineage/tests/unit/openlineage/extractors/test_python.py
+++ b/providers/openlineage/tests/unit/openlineage/extractors/test_python.py
@@ -23,7 +23,6 @@
 from datetime import datetime
 from unittest.mock import patch
 
-import pytest
 from openlineage.client.facet_v2 import source_code_job
 
 from airflow import DAG
@@ -32,8 +31,6 @@
 
 from tests_common.test_utils.compat import BashOperator, PythonOperator
 
-pytestmark = pytest.mark.db_test
-
 dag = DAG(
     dag_id="test_dummy_dag",
     description="Test dummy DAG",
diff --git a/providers/openlineage/tests/unit/openlineage/plugins/test_adapter.py b/providers/openlineage/tests/unit/openlineage/plugins/test_adapter.py
index f59a9b8d62ce2..29ad2c66e9014 100644
--- a/providers/openlineage/tests/unit/openlineage/plugins/test_adapter.py
+++ b/providers/openlineage/tests/unit/openlineage/plugins/test_adapter.py
@@ -59,8 +59,6 @@
 from tests_common.test_utils.markers import skip_if_force_lowest_dependencies_marker
 from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
-pytestmark = pytest.mark.db_test
-
 
 @pytest.mark.parametrize(
     "env_vars, expected_logging",
diff --git a/providers/openlineage/tests/unit/openlineage/plugins/test_execution.py b/providers/openlineage/tests/unit/openlineage/plugins/test_execution.py
index ecc5f5cc7c1d4..f07066674550f 100644
--- a/providers/openlineage/tests/unit/openlineage/plugins/test_execution.py
+++ b/providers/openlineage/tests/unit/openlineage/plugins/test_execution.py
@@ -110,7 +110,6 @@ def setup_job(self, task_name, run_id):
 
             return job_runner.task_runner.return_code(timeout=60)
 
-        @pytest.mark.db_test
         @conf_vars({("openlineage", "transport"): f'{{"type": "file", "log_file_path": "{listener_path}"}}'})
         def test_not_stalled_task_emits_proper_lineage(self):
             task_name = "execute_no_stall"
@@ -122,7 +121,6 @@ def test_not_stalled_task_emits_proper_lineage(self):
             assert has_value_in_events(events, ["inputs", "name"], "on-start")
             assert has_value_in_events(events, ["inputs", "name"], "on-complete")
 
-        @pytest.mark.db_test
         @conf_vars({("openlineage", "transport"): f'{{"type": "file", "log_file_path": "{listener_path}"}}'})
         def test_not_stalled_failing_task_emits_proper_lineage(self):
             task_name = "execute_fail"
@@ -139,7 +137,6 @@ def test_not_stalled_failing_task_emits_proper_lineage(self):
                 ("openlineage", "execution_timeout"): "15",
             }
         )
-        @pytest.mark.db_test
         def test_short_stalled_task_emits_proper_lineage(self):
             self.setup_job("execute_short_stall", "test_short_stalled_task_emits_proper_lineage")
             events = get_sorted_events(tmp_dir)
@@ -152,7 +149,6 @@ def test_short_stalled_task_emits_proper_lineage(self):
                 ("openlineage", "execution_timeout"): "3",
             }
         )
-        @pytest.mark.db_test
         def test_short_stalled_task_extraction_with_low_execution_is_killed_by_ol_timeout(self):
             self.setup_job(
                 "execute_short_stall",
@@ -163,7 +159,6 @@ def test_short_stalled_task_extraction_with_low_execution_is_killed_by_ol_timeou
             assert not has_value_in_events(events, ["inputs", "name"], "on-complete")
 
         @conf_vars({("openlineage", "transport"): f'{{"type": "file", "log_file_path": "{listener_path}"}}'})
-        @pytest.mark.db_test
         def test_mid_stalled_task_is_killed_by_ol_timeout(self):
             self.setup_job("execute_mid_stall", "test_mid_stalled_task_is_killed_by_openlineage")
             events = get_sorted_events(tmp_dir)
@@ -177,7 +172,6 @@ def test_mid_stalled_task_is_killed_by_ol_timeout(self):
                 ("core", "task_success_overtime"): "3",
             }
         )
-        @pytest.mark.db_test
         def test_success_overtime_kills_tasks(self):
             # This test checks whether LocalTaskJobRunner kills OL listener which take
             # longer time than permitted by core.task_success_overtime setting
diff --git a/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py b/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
index 931083044c071..956b88e96dde8 100644
--- a/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
+++ b/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
@@ -45,8 +45,6 @@
 from tests_common.test_utils.db import clear_db_runs
 from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
-pytestmark = pytest.mark.db_test
-
 EXPECTED_TRY_NUMBER_1 = 1
 
 TRY_NUMBER_BEFORE_EXECUTION = 0
@@ -757,6 +755,7 @@ def test_listener_on_dag_run_state_changes_configure_process_pool_size(
         mock_executor.assert_called_once_with(max_workers=expected, initializer=mock.ANY)
         mock_executor.return_value.submit.assert_called_once()
 
+    @pytest.mark.db_test
     @pytest.mark.parametrize(
         ("method", "dag_run_state"),
         [
@@ -1574,6 +1573,7 @@ def test_listener_on_dag_run_state_changes_configure_process_pool_size(
         mock_executor.assert_called_once_with(max_workers=expected, initializer=mock.ANY)
         mock_executor.return_value.submit.assert_called_once()
 
+    @pytest.mark.db_test
     @pytest.mark.parametrize(
         ("method", "dag_run_state"),
         [
diff --git a/providers/openlineage/tests/unit/openlineage/utils/test_utils.py b/providers/openlineage/tests/unit/openlineage/utils/test_utils.py
index 54199f1bfffec..9130098e0bc50 100644
--- a/providers/openlineage/tests/unit/openlineage/utils/test_utils.py
+++ b/providers/openlineage/tests/unit/openlineage/utils/test_utils.py
@@ -1436,7 +1436,6 @@ def test_dagrun_info_af3(mocked_dag_versions):
 
 
 @pytest.mark.skipif(AIRFLOW_V_3_0_PLUS, reason="Airflow 2 test")
-@pytest.mark.db_test
 def test_dagrun_info_af2():
     date = datetime.datetime(2024, 6, 1, tzinfo=datetime.timezone.utc)
     dag = DAG(

From 3478dccec024f6c5b863551f72792c659e009564 Mon Sep 17 00:00:00 2001
From: Ash Berlin-Taylor <ash@apache.org>
Date: Wed, 25 Jun 2025 13:25:28 +0100
Subject: [PATCH 181/381] Remove unused LoggerMutationHelper (#52241)

This was removed in Airflow 3.0 as part of the TaskSDK rewrite and is not used
anymore
---
 .../src/airflow/cli/commands/task_command.py  | 51 --------------
 .../unit/cli/commands/test_task_command.py    | 69 -------------------
 2 files changed, 120 deletions(-)

diff --git a/airflow-core/src/airflow/cli/commands/task_command.py b/airflow-core/src/airflow/cli/commands/task_command.py
index 69859af3f5610..e6837f13fb15c 100644
--- a/airflow-core/src/airflow/cli/commands/task_command.py
+++ b/airflow-core/src/airflow/cli/commands/task_command.py
@@ -59,7 +59,6 @@
     from sqlalchemy.orm.session import Session
 
     from airflow.models.operator import Operator
-    from airflow.typing_compat import Self
 
     CreateIfNecessary = Literal[False, "db", "memory"]
 
@@ -448,53 +447,3 @@ def task_clear(args) -> None:
         only_running=args.only_running,
         confirm_prompt=not args.yes,
     )
-
-
-class LoggerMutationHelper:
-    """
-    Helper for moving and resetting handlers and other logger attrs.
-
-    :meta private:
-    """
-
-    def __init__(self, logger: logging.Logger) -> None:
-        self.handlers = logger.handlers[:]
-        self.level = logger.level
-        self.propagate = logger.propagate
-        self.source_logger = logger
-
-    def apply(self, logger: logging.Logger, replace: bool = True) -> None:
-        """
-        Set ``logger`` with attrs stored on instance.
-
-        If ``logger`` is root logger, don't change propagate.
-        """
-        if replace:
-            logger.handlers[:] = self.handlers
-        else:
-            for h in self.handlers:
-                if h not in logger.handlers:
-                    logger.addHandler(h)
-        logger.level = self.level
-        if logger is not logging.getLogger():
-            logger.propagate = self.propagate
-
-    def move(self, logger: logging.Logger, replace: bool = True) -> None:
-        """
-        Replace ``logger`` attrs with those from source.
-
-        :param logger: target logger
-        :param replace: if True, remove all handlers from target first; otherwise add if not present.
-        """
-        self.apply(logger, replace=replace)
-        self.source_logger.propagate = True
-        self.source_logger.handlers[:] = []
-
-    def reset(self) -> None:
-        self.apply(self.source_logger)
-
-    def __enter__(self) -> Self:
-        return self
-
-    def __exit__(self, exc_type, exc_val, exc_tb) -> None:
-        self.reset()
diff --git a/airflow-core/tests/unit/cli/commands/test_task_command.py b/airflow-core/tests/unit/cli/commands/test_task_command.py
index a71cf02930117..faad02503e407 100644
--- a/airflow-core/tests/unit/cli/commands/test_task_command.py
+++ b/airflow-core/tests/unit/cli/commands/test_task_command.py
@@ -29,13 +29,11 @@
 from pathlib import Path
 from typing import TYPE_CHECKING
 from unittest import mock
-from unittest.mock import sentinel
 
 import pytest
 
 from airflow.cli import cli_parser
 from airflow.cli.commands import task_command
-from airflow.cli.commands.task_command import LoggerMutationHelper
 from airflow.config_templates.airflow_local_settings import DEFAULT_LOGGING_CONFIG
 from airflow.configuration import conf
 from airflow.exceptions import DagRunNotFound
@@ -480,70 +478,3 @@ def assert_log_line(self, text, logs_list, expect_from_logging_mixin=False):
             # Example: [2020-06-24 17:07:00,482] {logging_mixin.py:91} INFO - Log from Print statement
             assert "logging_mixin.py" not in log_line
         return log_line
-
-
-class TestLoggerMutationHelper:
-    @pytest.mark.parametrize("target_name", ["test_apply_target", None])
-    def test_apply(self, target_name):
-        """
-        Handlers, level and propagate should be applied on target.
-        """
-        src = logging.getLogger(f"test_apply_source_{target_name}")
-        src.propagate = False
-        src.addHandler(sentinel.handler)
-        src.setLevel(-1)
-        obj = LoggerMutationHelper(src)
-        tgt = logging.getLogger("test_apply_target")
-        obj.apply(tgt)
-        assert tgt.handlers == [sentinel.handler]
-        assert tgt.propagate is False if target_name else True  # root propagate unchanged
-        assert tgt.level == -1
-
-    def test_apply_no_replace(self, clear_all_logger_handlers):
-        """
-        Handlers, level and propagate should be applied on target.
-        """
-        src = logging.getLogger("test_apply_source_no_repl")
-        tgt = logging.getLogger("test_apply_target_no_repl")
-        h1 = logging.Handler()
-        h1.name = "h1"
-        h2 = logging.Handler()
-        h2.name = "h2"
-        h3 = logging.Handler()
-        h3.name = "h3"
-        src.handlers[:] = [h1, h2]
-        tgt.handlers[:] = [h2, h3]
-        LoggerMutationHelper(src).apply(tgt, replace=False)
-        assert tgt.handlers == [h2, h3, h1]
-
-    def test_move(self):
-        """Move should apply plus remove source handler, set propagate to True"""
-        src = logging.getLogger("test_move_source")
-        src.propagate = False
-        src.addHandler(sentinel.handler)
-        src.setLevel(-1)
-        obj = LoggerMutationHelper(src)
-        tgt = logging.getLogger("test_apply_target")
-        obj.move(tgt)
-        assert tgt.handlers == [sentinel.handler]
-        assert tgt.propagate is False
-        assert tgt.level == -1
-        assert src.propagate is True
-        assert obj.propagate is False
-        assert src.level == obj.level
-        assert src.handlers == []
-        assert obj.handlers == tgt.handlers
-
-    def test_reset(self):
-        src = logging.getLogger("test_move_reset")
-        src.propagate = True
-        src.addHandler(sentinel.h1)
-        src.setLevel(-1)
-        obj = LoggerMutationHelper(src)
-        src.propagate = False
-        src.addHandler(sentinel.h2)
-        src.setLevel(-2)
-        obj.reset()
-        assert src.propagate is True
-        assert src.handlers == [sentinel.h1]
-        assert src.level == -1

From d86b237b5ddcf4ff973a2188477794f14b9e379d Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Wed, 25 Jun 2025 14:57:57 +0200
Subject: [PATCH 182/381] Fix xdist compatibility for test_local_to_gcs test
 (#52244)

The test used hard-coded "/tmp" folder to create and delete files
and used the same files in several tests, when running it as
non-db test with xdist, that caused sometimes failures because
the tests could randomly override each-others-data.

This PR fixes it by switching to pytest fixture instead of
setup/teardown and using tmp_path fixture to use different tmp
folder for different invocations of test methods.
---
 .../cloud/transfers/test_local_to_gcs.py      | 53 +++++++++++--------
 1 file changed, 31 insertions(+), 22 deletions(-)

diff --git a/providers/google/tests/unit/google/cloud/transfers/test_local_to_gcs.py b/providers/google/tests/unit/google/cloud/transfers/test_local_to_gcs.py
index 2716ce9a4aab3..8142ebaa18b05 100644
--- a/providers/google/tests/unit/google/cloud/transfers/test_local_to_gcs.py
+++ b/providers/google/tests/unit/google/cloud/transfers/test_local_to_gcs.py
@@ -19,6 +19,7 @@
 
 import datetime
 import os
+import shutil
 from glob import glob
 from unittest import mock
 
@@ -40,20 +41,22 @@ class TestFileToGcsOperator:
         "chunk_size": 262144,
     }
 
-    def setup_method(self):
+    @pytest.fixture(autouse=True)
+    def setup_method_fixture(self, tmp_path):
         args = {"owner": "airflow", "start_date": datetime.datetime(2017, 1, 1)}
         self.dag = DAG("test_dag_id", schedule=None, default_args=args)
-        self.testfile1 = "/tmp/fake1.csv"
+        tmp_dir = tmp_path / "tmp"
+        tmp_dir.mkdir(exist_ok=True, parents=True)
+        self.tmpdir_posix = tmp_dir.as_posix()
+        self.testfile1 = f"{self.tmpdir_posix}/fake1.csv"
         with open(self.testfile1, "wb") as f:
             f.write(b"x" * 393216)
-        self.testfile2 = "/tmp/fake2.csv"
+        self.testfile2 = f"{self.tmpdir_posix}/fake2.csv"
         with open(self.testfile2, "wb") as f:
             f.write(b"x" * 393216)
         self.testfiles = [self.testfile1, self.testfile2]
-
-    def teardown_method(self):
-        os.remove(self.testfile1)
-        os.remove(self.testfile2)
+        yield
+        shutil.rmtree(tmp_dir, ignore_errors=True)
 
     def test_init(self):
         operator = LocalFilesystemToGCSOperator(
@@ -129,11 +132,15 @@ def test_execute_multiple(self, mock_hook):
     def test_execute_wildcard(self, mock_hook):
         mock_instance = mock_hook.return_value
         operator = LocalFilesystemToGCSOperator(
-            task_id="file_to_gcs_operator", dag=self.dag, src="/tmp/fake*.csv", dst="test/", **self._config
+            task_id="file_to_gcs_operator",
+            dag=self.dag,
+            src=f"{self.tmpdir_posix}/fake*.csv",
+            dst="test/",
+            **self._config,
         )
         operator.execute(None)
         object_names = ["test/" + os.path.basename(fp) for fp in glob("/tmp/fake*.csv")]
-        files_objects = zip(glob("/tmp/fake*.csv"), object_names)
+        files_objects = zip(glob(f"{self.tmpdir_posix}/fake*.csv"), object_names)
         calls = [
             mock.call(
                 bucket_name=self._config["bucket"],
@@ -150,9 +157,9 @@ def test_execute_wildcard(self, mock_hook):
     @pytest.mark.parametrize(
         ("src", "dst"),
         [
-            ("/tmp/fake*.csv", "test/test1.csv"),
-            ("/tmp/fake*.csv", "test"),
-            ("/tmp/fake*.csv", "test/dir"),
+            ("fake*.csv", "test/test1.csv"),
+            ("fake*.csv", "test"),
+            ("fake*.csv", "test/dir"),
         ],
     )
     @mock.patch("airflow.providers.google.cloud.transfers.local_to_gcs.GCSHook", autospec=True)
@@ -161,7 +168,7 @@ def test_execute_negative(self, mock_hook, src, dst):
         operator = LocalFilesystemToGCSOperator(
             task_id="file_to_gcs_operator",
             dag=self.dag,
-            src=src,
+            src=f"{self.tmpdir_posix}/{src}",
             dst=dst,
             **self._config,
         )
@@ -172,10 +179,10 @@ def test_execute_negative(self, mock_hook, src, dst):
     @pytest.mark.parametrize(
         ("src", "dst", "expected_input", "expected_output", "symlink"),
         [
-            ("/tmp/fake*.csv", "test/", "/tmp", "test", True),
-            ("/tmp/../tmp/fake*.csv", "test/", "/tmp", "test", True),
-            ("/tmp/fake1.csv", "test/test1.csv", "/tmp/fake1.csv", "test/test1.csv", False),
-            ("/tmp/fake1.csv", "test/pre", "/tmp/fake1.csv", "test/pre", False),
+            ("fake*.csv", "test/", "", "test", True),
+            ("../tmp/fake*.csv", "test/", "", "test", True),
+            ("fake1.csv", "test/test1.csv", "fake1.csv", "test/test1.csv", False),
+            ("fake1.csv", "test/pre", "fake1.csv", "test/pre", False),
         ],
     )
     def test_get_openlineage_facets_on_start_with_string_src(
@@ -184,11 +191,12 @@ def test_get_openlineage_facets_on_start_with_string_src(
         operator = LocalFilesystemToGCSOperator(
             task_id="gcs_to_file_sensor",
             dag=self.dag,
-            src=src,
+            src=f"{self.tmpdir_posix}/{src}",
             dst=dst,
             **self._config,
         )
         result = operator.get_openlineage_facets_on_start()
+        expected_input = self.tmpdir_posix + ("/" + expected_input if expected_input else "")
         assert not result.job_facets
         assert not result.run_facets
         assert len(result.outputs) == 1
@@ -199,21 +207,22 @@ def test_get_openlineage_facets_on_start_with_string_src(
         assert result.inputs[0].name == expected_input
         if symlink:
             assert result.inputs[0].facets["symlink"] == SymlinksDatasetFacet(
-                identifiers=[Identifier(namespace="file", name=src, type="file")]
+                identifiers=[Identifier(namespace="file", name=f"{self.tmpdir_posix}/{src}", type="file")]
             )
 
     @pytest.mark.parametrize(
         ("src", "dst", "expected_inputs", "expected_output"),
         [
-            (["/tmp/fake1.csv", "/tmp/fake2.csv"], "test/", ["/tmp/fake1.csv", "/tmp/fake2.csv"], "test"),
-            (["/tmp/fake1.csv", "/tmp/fake2.csv"], "", ["/tmp/fake1.csv", "/tmp/fake2.csv"], "/"),
+            (["fake1.csv", "fake2.csv"], "test/", ["fake1.csv", "fake2.csv"], "test"),
+            (["fake1.csv", "fake2.csv"], "", ["fake1.csv", "fake2.csv"], "/"),
         ],
     )
     def test_get_openlineage_facets_on_start_with_list_src(self, src, dst, expected_inputs, expected_output):
+        expected_inputs = [f"{self.tmpdir_posix}/{item}" for item in expected_inputs]
         operator = LocalFilesystemToGCSOperator(
             task_id="gcs_to_file_sensor",
             dag=self.dag,
-            src=src,
+            src=[f"{self.tmpdir_posix}/{src_item}" for src_item in src],
             dst=dst,
             **self._config,
         )

From 137b400bf4cb9437e9ee09df3688044eebec9832 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 25 Jun 2025 08:59:39 -0400
Subject: [PATCH 183/381] Bump the core-ui-package-updates group across 1
 directory with 2 updates (#52167)

Bumps the core-ui-package-updates group with 2 updates in the /airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui directory: [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) and [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `typescript-eslint` from 8.34.1 to 8.35.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.35.0/packages/typescript-eslint)

Updates `vite` from 6.3.5 to 7.0.0
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/create-vite@7.0.0/packages/vite)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.35.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: core-ui-package-updates
- dependency-name: vite
  dependency-version: 7.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: core-ui-package-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
 .../auth/managers/simple/ui/package-lock.json | 170 ++---
 .../auth/managers/simple/ui/package.json      |   4 +-
 .../auth/managers/simple/ui/pnpm-lock.yaml    | 609 ++++++++++--------
 3 files changed, 423 insertions(+), 360 deletions(-)

diff --git a/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/package-lock.json b/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/package-lock.json
index 1f2181114601e..b6ad85164832c 100644
--- a/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/package-lock.json
+++ b/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/package-lock.json
@@ -41,8 +41,8 @@
         "happy-dom": "^18.0.1",
         "prettier": "^3.6.0",
         "typescript": "~5.8.3",
-        "typescript-eslint": "^8.34.1",
-        "vite": "^6.3.5",
+        "typescript-eslint": "^8.35.0",
+        "vite": "^7.0.0",
         "vite-plugin-css-injected-by-js": "^3.5.2",
         "vitest": "^3.2.4"
       }
@@ -2138,17 +2138,17 @@
       "license": "MIT"
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "8.34.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.1.tgz",
-      "integrity": "sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==",
+      "version": "8.35.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.35.0.tgz",
+      "integrity": "sha512-ijItUYaiWuce0N1SoSMrEd0b6b6lYkYt99pqCPfybd+HKVXtEvYhICfLdwp42MhiI5mp0oq7PKEL+g1cNiz/Eg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint-community/regexpp": "^4.10.0",
-        "@typescript-eslint/scope-manager": "8.34.1",
-        "@typescript-eslint/type-utils": "8.34.1",
-        "@typescript-eslint/utils": "8.34.1",
-        "@typescript-eslint/visitor-keys": "8.34.1",
+        "@typescript-eslint/scope-manager": "8.35.0",
+        "@typescript-eslint/type-utils": "8.35.0",
+        "@typescript-eslint/utils": "8.35.0",
+        "@typescript-eslint/visitor-keys": "8.35.0",
         "graphemer": "^1.4.0",
         "ignore": "^7.0.0",
         "natural-compare": "^1.4.0",
@@ -2162,7 +2162,7 @@
         "url": "https://opencollective.com/typescript-eslint"
       },
       "peerDependencies": {
-        "@typescript-eslint/parser": "^8.34.1",
+        "@typescript-eslint/parser": "^8.35.0",
         "eslint": "^8.57.0 || ^9.0.0",
         "typescript": ">=4.8.4 <5.9.0"
       }
@@ -2178,16 +2178,16 @@
       }
     },
     "node_modules/@typescript-eslint/parser": {
-      "version": "8.34.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.1.tgz",
-      "integrity": "sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==",
+      "version": "8.35.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.35.0.tgz",
+      "integrity": "sha512-6sMvZePQrnZH2/cJkwRpkT7DxoAWh+g6+GFRK6bV3YQo7ogi3SX5rgF6099r5Q53Ma5qeT7LGmOmuIutF4t3lA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/scope-manager": "8.34.1",
-        "@typescript-eslint/types": "8.34.1",
-        "@typescript-eslint/typescript-estree": "8.34.1",
-        "@typescript-eslint/visitor-keys": "8.34.1",
+        "@typescript-eslint/scope-manager": "8.35.0",
+        "@typescript-eslint/types": "8.35.0",
+        "@typescript-eslint/typescript-estree": "8.35.0",
+        "@typescript-eslint/visitor-keys": "8.35.0",
         "debug": "^4.3.4"
       },
       "engines": {
@@ -2203,14 +2203,14 @@
       }
     },
     "node_modules/@typescript-eslint/project-service": {
-      "version": "8.34.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.1.tgz",
-      "integrity": "sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==",
+      "version": "8.35.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.35.0.tgz",
+      "integrity": "sha512-41xatqRwWZuhUMF/aZm2fcUsOFKNcG28xqRSS6ZVr9BVJtGExosLAm5A1OxTjRMagx8nJqva+P5zNIGt8RIgbQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/tsconfig-utils": "^8.34.1",
-        "@typescript-eslint/types": "^8.34.1",
+        "@typescript-eslint/tsconfig-utils": "^8.35.0",
+        "@typescript-eslint/types": "^8.35.0",
         "debug": "^4.3.4"
       },
       "engines": {
@@ -2225,14 +2225,14 @@
       }
     },
     "node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.34.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz",
-      "integrity": "sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==",
+      "version": "8.35.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.35.0.tgz",
+      "integrity": "sha512-+AgL5+mcoLxl1vGjwNfiWq5fLDZM1TmTPYs2UkyHfFhgERxBbqHlNjRzhThJqz+ktBqTChRYY6zwbMwy0591AA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "8.34.1",
-        "@typescript-eslint/visitor-keys": "8.34.1"
+        "@typescript-eslint/types": "8.35.0",
+        "@typescript-eslint/visitor-keys": "8.35.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2243,9 +2243,9 @@
       }
     },
     "node_modules/@typescript-eslint/tsconfig-utils": {
-      "version": "8.34.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.1.tgz",
-      "integrity": "sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==",
+      "version": "8.35.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.0.tgz",
+      "integrity": "sha512-04k/7247kZzFraweuEirmvUj+W3bJLI9fX6fbo1Qm2YykuBvEhRTPl8tcxlYO8kZZW+HIXfkZNoasVb8EV4jpA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2260,14 +2260,14 @@
       }
     },
     "node_modules/@typescript-eslint/type-utils": {
-      "version": "8.34.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.34.1.tgz",
-      "integrity": "sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==",
+      "version": "8.35.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.35.0.tgz",
+      "integrity": "sha512-ceNNttjfmSEoM9PW87bWLDEIaLAyR+E6BoYJQ5PfaDau37UGca9Nyq3lBk8Bw2ad0AKvYabz6wxc7DMTO2jnNA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "8.34.1",
-        "@typescript-eslint/utils": "8.34.1",
+        "@typescript-eslint/typescript-estree": "8.35.0",
+        "@typescript-eslint/utils": "8.35.0",
         "debug": "^4.3.4",
         "ts-api-utils": "^2.1.0"
       },
@@ -2284,9 +2284,9 @@
       }
     },
     "node_modules/@typescript-eslint/types": {
-      "version": "8.34.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.1.tgz",
-      "integrity": "sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==",
+      "version": "8.35.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.0.tgz",
+      "integrity": "sha512-0mYH3emanku0vHw2aRLNGqe7EXh9WHEhi7kZzscrMDf6IIRUQ5Jk4wp1QrledE/36KtdZrVfKnE32eZCf/vaVQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2298,16 +2298,16 @@
       }
     },
     "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.34.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz",
-      "integrity": "sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==",
+      "version": "8.35.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.0.tgz",
+      "integrity": "sha512-F+BhnaBemgu1Qf8oHrxyw14wq6vbL8xwWKKMwTMwYIRmFFY/1n/9T/jpbobZL8vp7QyEUcC6xGrnAO4ua8Kp7w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/project-service": "8.34.1",
-        "@typescript-eslint/tsconfig-utils": "8.34.1",
-        "@typescript-eslint/types": "8.34.1",
-        "@typescript-eslint/visitor-keys": "8.34.1",
+        "@typescript-eslint/project-service": "8.35.0",
+        "@typescript-eslint/tsconfig-utils": "8.35.0",
+        "@typescript-eslint/types": "8.35.0",
+        "@typescript-eslint/visitor-keys": "8.35.0",
         "debug": "^4.3.4",
         "fast-glob": "^3.3.2",
         "is-glob": "^4.0.3",
@@ -2353,16 +2353,16 @@
       }
     },
     "node_modules/@typescript-eslint/utils": {
-      "version": "8.34.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.1.tgz",
-      "integrity": "sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==",
+      "version": "8.35.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.35.0.tgz",
+      "integrity": "sha512-nqoMu7WWM7ki5tPgLVsmPM8CkqtoPUG6xXGeefM5t4x3XumOEKMoUZPdi+7F+/EotukN4R9OWdmDxN80fqoZeg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.7.0",
-        "@typescript-eslint/scope-manager": "8.34.1",
-        "@typescript-eslint/types": "8.34.1",
-        "@typescript-eslint/typescript-estree": "8.34.1"
+        "@typescript-eslint/scope-manager": "8.35.0",
+        "@typescript-eslint/types": "8.35.0",
+        "@typescript-eslint/typescript-estree": "8.35.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2377,13 +2377,13 @@
       }
     },
     "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.34.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz",
-      "integrity": "sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==",
+      "version": "8.35.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.0.tgz",
+      "integrity": "sha512-zTh2+1Y8ZpmeQaQVIc/ZZxsx8UzgKJyNg1PTvjzC7WMhPSVS8bfDX34k1SrwOf016qd5RU3az2UxUNue3IfQ5g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "8.34.1",
+        "@typescript-eslint/types": "8.35.0",
         "eslint-visitor-keys": "^4.2.1"
       },
       "engines": {
@@ -6706,9 +6706,9 @@
       "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
     },
     "node_modules/nanoid": {
-      "version": "3.3.9",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.9.tgz",
-      "integrity": "sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==",
+      "version": "3.3.11",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+      "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
       "dev": true,
       "funding": [
         {
@@ -7194,9 +7194,9 @@
       }
     },
     "node_modules/postcss": {
-      "version": "8.5.3",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
-      "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
+      "version": "8.5.6",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+      "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
       "dev": true,
       "funding": [
         {
@@ -7214,7 +7214,7 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "nanoid": "^3.3.8",
+        "nanoid": "^3.3.11",
         "picocolors": "^1.1.1",
         "source-map-js": "^1.2.1"
       },
@@ -8520,15 +8520,15 @@
       }
     },
     "node_modules/typescript-eslint": {
-      "version": "8.34.1",
-      "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.34.1.tgz",
-      "integrity": "sha512-XjS+b6Vg9oT1BaIUfkW3M3LvqZE++rbzAMEHuccCfO/YkP43ha6w3jTEMilQxMF92nVOYCcdjv1ZUhAa1D/0ow==",
+      "version": "8.35.0",
+      "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.35.0.tgz",
+      "integrity": "sha512-uEnz70b7kBz6eg/j0Czy6K5NivaYopgxRjsnAJ2Fx5oTLo3wefTHIbL7AkQr1+7tJCRVpTs/wiM8JR/11Loq9A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/eslint-plugin": "8.34.1",
-        "@typescript-eslint/parser": "8.34.1",
-        "@typescript-eslint/utils": "8.34.1"
+        "@typescript-eslint/eslint-plugin": "8.35.0",
+        "@typescript-eslint/parser": "8.35.0",
+        "@typescript-eslint/utils": "8.35.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -8644,24 +8644,24 @@
       }
     },
     "node_modules/vite": {
-      "version": "6.3.5",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
-      "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.0.tgz",
+      "integrity": "sha512-ixXJB1YRgDIw2OszKQS9WxGHKwLdCsbQNkpJN171udl6szi/rIySHL6/Os3s2+oE4P/FLD4dxg4mD7Wust+u5g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "esbuild": "^0.25.0",
-        "fdir": "^6.4.4",
+        "fdir": "^6.4.6",
         "picomatch": "^4.0.2",
-        "postcss": "^8.5.3",
-        "rollup": "^4.34.9",
-        "tinyglobby": "^0.2.13"
+        "postcss": "^8.5.6",
+        "rollup": "^4.40.0",
+        "tinyglobby": "^0.2.14"
       },
       "bin": {
         "vite": "bin/vite.js"
       },
       "engines": {
-        "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+        "node": "^20.19.0 || >=22.12.0"
       },
       "funding": {
         "url": "https://github.com/vitejs/vite?sponsor=1"
@@ -8670,14 +8670,14 @@
         "fsevents": "~2.3.3"
       },
       "peerDependencies": {
-        "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
+        "@types/node": "^20.19.0 || >=22.12.0",
         "jiti": ">=1.21.0",
-        "less": "*",
+        "less": "^4.0.0",
         "lightningcss": "^1.21.0",
-        "sass": "*",
-        "sass-embedded": "*",
-        "stylus": "*",
-        "sugarss": "*",
+        "sass": "^1.70.0",
+        "sass-embedded": "^1.70.0",
+        "stylus": ">=0.54.8",
+        "sugarss": "^5.0.0",
         "terser": "^5.16.0",
         "tsx": "^4.8.1",
         "yaml": "^2.4.2"
@@ -8758,9 +8758,9 @@
       }
     },
     "node_modules/vite/node_modules/fdir": {
-      "version": "6.4.4",
-      "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz",
-      "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==",
+      "version": "6.4.6",
+      "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
+      "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
       "dev": true,
       "license": "MIT",
       "peerDependencies": {
diff --git a/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/package.json b/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/package.json
index 02e02d336671e..70c6470b6826f 100644
--- a/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/package.json
+++ b/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/package.json
@@ -48,8 +48,8 @@
     "happy-dom": "^18.0.1",
     "prettier": "^3.6.0",
     "typescript": "~5.8.3",
-    "typescript-eslint": "^8.34.1",
-    "vite": "^6.3.5",
+    "typescript-eslint": "^8.35.0",
+    "vite": "^7.0.0",
     "vite-plugin-css-injected-by-js": "^3.5.2",
     "vitest": "^3.2.4"
   }
diff --git a/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/pnpm-lock.yaml b/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/pnpm-lock.yaml
index 3302c76ba18c6..7a3af4dc5acfa 100644
--- a/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/pnpm-lock.yaml
+++ b/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/pnpm-lock.yaml
@@ -65,7 +65,7 @@ importers:
         version: 19.1.6(@types/react@19.1.8)
       '@vitejs/plugin-react-swc':
         specifier: ^3.10.2
-        version: 3.10.2(@swc/helpers@0.5.17)(vite@6.3.5(@types/node@20.19.1)(jiti@1.21.7))
+        version: 3.10.2(@swc/helpers@0.5.17)(vite@7.0.0(@types/node@20.19.1)(jiti@1.21.7))
       eslint:
         specifier: ^9.29.0
         version: 9.29.0(jiti@1.21.7)
@@ -103,14 +103,14 @@ importers:
         specifier: ~5.8.3
         version: 5.8.3
       typescript-eslint:
-        specifier: ^8.34.1
-        version: 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+        specifier: ^8.35.0
+        version: 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
       vite:
-        specifier: ^6.3.5
-        version: 6.3.5(@types/node@20.19.1)(jiti@1.21.7)
+        specifier: ^7.0.0
+        version: 7.0.0(@types/node@20.19.1)(jiti@1.21.7)
       vite-plugin-css-injected-by-js:
         specifier: ^3.5.2
-        version: 3.5.2(vite@6.3.5(@types/node@20.19.1)(jiti@1.21.7))
+        version: 3.5.2(vite@7.0.0(@types/node@20.19.1)(jiti@1.21.7))
       vitest:
         specifier: ^3.2.4
         version: 3.2.4(@types/node@20.19.1)(happy-dom@18.0.1)(jiti@1.21.7)
@@ -257,152 +257,152 @@ packages:
   '@emotion/weak-memoize@0.4.0':
     resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==}
 
-  '@esbuild/aix-ppc64@0.25.4':
-    resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==}
+  '@esbuild/aix-ppc64@0.25.5':
+    resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==}
     engines: {node: '>=18'}
     cpu: [ppc64]
     os: [aix]
 
-  '@esbuild/android-arm64@0.25.4':
-    resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==}
+  '@esbuild/android-arm64@0.25.5':
+    resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==}
     engines: {node: '>=18'}
     cpu: [arm64]
     os: [android]
 
-  '@esbuild/android-arm@0.25.4':
-    resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==}
+  '@esbuild/android-arm@0.25.5':
+    resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==}
     engines: {node: '>=18'}
     cpu: [arm]
     os: [android]
 
-  '@esbuild/android-x64@0.25.4':
-    resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==}
+  '@esbuild/android-x64@0.25.5':
+    resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [android]
 
-  '@esbuild/darwin-arm64@0.25.4':
-    resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==}
+  '@esbuild/darwin-arm64@0.25.5':
+    resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==}
     engines: {node: '>=18'}
     cpu: [arm64]
     os: [darwin]
 
-  '@esbuild/darwin-x64@0.25.4':
-    resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==}
+  '@esbuild/darwin-x64@0.25.5':
+    resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [darwin]
 
-  '@esbuild/freebsd-arm64@0.25.4':
-    resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==}
+  '@esbuild/freebsd-arm64@0.25.5':
+    resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==}
     engines: {node: '>=18'}
     cpu: [arm64]
     os: [freebsd]
 
-  '@esbuild/freebsd-x64@0.25.4':
-    resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==}
+  '@esbuild/freebsd-x64@0.25.5':
+    resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [freebsd]
 
-  '@esbuild/linux-arm64@0.25.4':
-    resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==}
+  '@esbuild/linux-arm64@0.25.5':
+    resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==}
     engines: {node: '>=18'}
     cpu: [arm64]
     os: [linux]
 
-  '@esbuild/linux-arm@0.25.4':
-    resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==}
+  '@esbuild/linux-arm@0.25.5':
+    resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==}
     engines: {node: '>=18'}
     cpu: [arm]
     os: [linux]
 
-  '@esbuild/linux-ia32@0.25.4':
-    resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==}
+  '@esbuild/linux-ia32@0.25.5':
+    resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==}
     engines: {node: '>=18'}
     cpu: [ia32]
     os: [linux]
 
-  '@esbuild/linux-loong64@0.25.4':
-    resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==}
+  '@esbuild/linux-loong64@0.25.5':
+    resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==}
     engines: {node: '>=18'}
     cpu: [loong64]
     os: [linux]
 
-  '@esbuild/linux-mips64el@0.25.4':
-    resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==}
+  '@esbuild/linux-mips64el@0.25.5':
+    resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==}
     engines: {node: '>=18'}
     cpu: [mips64el]
     os: [linux]
 
-  '@esbuild/linux-ppc64@0.25.4':
-    resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==}
+  '@esbuild/linux-ppc64@0.25.5':
+    resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==}
     engines: {node: '>=18'}
     cpu: [ppc64]
     os: [linux]
 
-  '@esbuild/linux-riscv64@0.25.4':
-    resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==}
+  '@esbuild/linux-riscv64@0.25.5':
+    resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==}
     engines: {node: '>=18'}
     cpu: [riscv64]
     os: [linux]
 
-  '@esbuild/linux-s390x@0.25.4':
-    resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==}
+  '@esbuild/linux-s390x@0.25.5':
+    resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==}
     engines: {node: '>=18'}
     cpu: [s390x]
     os: [linux]
 
-  '@esbuild/linux-x64@0.25.4':
-    resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==}
+  '@esbuild/linux-x64@0.25.5':
+    resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [linux]
 
-  '@esbuild/netbsd-arm64@0.25.4':
-    resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==}
+  '@esbuild/netbsd-arm64@0.25.5':
+    resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==}
     engines: {node: '>=18'}
     cpu: [arm64]
     os: [netbsd]
 
-  '@esbuild/netbsd-x64@0.25.4':
-    resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==}
+  '@esbuild/netbsd-x64@0.25.5':
+    resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [netbsd]
 
-  '@esbuild/openbsd-arm64@0.25.4':
-    resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==}
+  '@esbuild/openbsd-arm64@0.25.5':
+    resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==}
     engines: {node: '>=18'}
     cpu: [arm64]
     os: [openbsd]
 
-  '@esbuild/openbsd-x64@0.25.4':
-    resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==}
+  '@esbuild/openbsd-x64@0.25.5':
+    resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [openbsd]
 
-  '@esbuild/sunos-x64@0.25.4':
-    resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==}
+  '@esbuild/sunos-x64@0.25.5':
+    resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [sunos]
 
-  '@esbuild/win32-arm64@0.25.4':
-    resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==}
+  '@esbuild/win32-arm64@0.25.5':
+    resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==}
     engines: {node: '>=18'}
     cpu: [arm64]
     os: [win32]
 
-  '@esbuild/win32-ia32@0.25.4':
-    resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==}
+  '@esbuild/win32-ia32@0.25.5':
+    resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==}
     engines: {node: '>=18'}
     cpu: [ia32]
     os: [win32]
 
-  '@esbuild/win32-x64@0.25.4':
-    resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==}
+  '@esbuild/win32-x64@0.25.5':
+    resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [win32]
@@ -559,103 +559,103 @@ packages:
   '@rolldown/pluginutils@1.0.0-beta.11':
     resolution: {integrity: sha512-L/gAA/hyCSuzTF1ftlzUSI/IKr2POHsv1Dd78GfqkR83KMNuswWD61JxGV2L7nRwBBBSDr6R1gCkdTmoN7W4ag==}
 
-  '@rollup/rollup-android-arm-eabi@4.40.2':
-    resolution: {integrity: sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==}
+  '@rollup/rollup-android-arm-eabi@4.44.0':
+    resolution: {integrity: sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==}
     cpu: [arm]
     os: [android]
 
-  '@rollup/rollup-android-arm64@4.40.2':
-    resolution: {integrity: sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw==}
+  '@rollup/rollup-android-arm64@4.44.0':
+    resolution: {integrity: sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw==}
     cpu: [arm64]
     os: [android]
 
-  '@rollup/rollup-darwin-arm64@4.40.2':
-    resolution: {integrity: sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w==}
+  '@rollup/rollup-darwin-arm64@4.44.0':
+    resolution: {integrity: sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==}
     cpu: [arm64]
     os: [darwin]
 
-  '@rollup/rollup-darwin-x64@4.40.2':
-    resolution: {integrity: sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ==}
+  '@rollup/rollup-darwin-x64@4.44.0':
+    resolution: {integrity: sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==}
     cpu: [x64]
     os: [darwin]
 
-  '@rollup/rollup-freebsd-arm64@4.40.2':
-    resolution: {integrity: sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ==}
+  '@rollup/rollup-freebsd-arm64@4.44.0':
+    resolution: {integrity: sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ==}
     cpu: [arm64]
     os: [freebsd]
 
-  '@rollup/rollup-freebsd-x64@4.40.2':
-    resolution: {integrity: sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q==}
+  '@rollup/rollup-freebsd-x64@4.44.0':
+    resolution: {integrity: sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g==}
     cpu: [x64]
     os: [freebsd]
 
-  '@rollup/rollup-linux-arm-gnueabihf@4.40.2':
-    resolution: {integrity: sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q==}
+  '@rollup/rollup-linux-arm-gnueabihf@4.44.0':
+    resolution: {integrity: sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==}
     cpu: [arm]
     os: [linux]
 
-  '@rollup/rollup-linux-arm-musleabihf@4.40.2':
-    resolution: {integrity: sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg==}
+  '@rollup/rollup-linux-arm-musleabihf@4.44.0':
+    resolution: {integrity: sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==}
     cpu: [arm]
     os: [linux]
 
-  '@rollup/rollup-linux-arm64-gnu@4.40.2':
-    resolution: {integrity: sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg==}
+  '@rollup/rollup-linux-arm64-gnu@4.44.0':
+    resolution: {integrity: sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==}
     cpu: [arm64]
     os: [linux]
 
-  '@rollup/rollup-linux-arm64-musl@4.40.2':
-    resolution: {integrity: sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg==}
+  '@rollup/rollup-linux-arm64-musl@4.44.0':
+    resolution: {integrity: sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==}
     cpu: [arm64]
     os: [linux]
 
-  '@rollup/rollup-linux-loongarch64-gnu@4.40.2':
-    resolution: {integrity: sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw==}
+  '@rollup/rollup-linux-loongarch64-gnu@4.44.0':
+    resolution: {integrity: sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==}
     cpu: [loong64]
     os: [linux]
 
-  '@rollup/rollup-linux-powerpc64le-gnu@4.40.2':
-    resolution: {integrity: sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q==}
+  '@rollup/rollup-linux-powerpc64le-gnu@4.44.0':
+    resolution: {integrity: sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==}
     cpu: [ppc64]
     os: [linux]
 
-  '@rollup/rollup-linux-riscv64-gnu@4.40.2':
-    resolution: {integrity: sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg==}
+  '@rollup/rollup-linux-riscv64-gnu@4.44.0':
+    resolution: {integrity: sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==}
     cpu: [riscv64]
     os: [linux]
 
-  '@rollup/rollup-linux-riscv64-musl@4.40.2':
-    resolution: {integrity: sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg==}
+  '@rollup/rollup-linux-riscv64-musl@4.44.0':
+    resolution: {integrity: sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==}
     cpu: [riscv64]
     os: [linux]
 
-  '@rollup/rollup-linux-s390x-gnu@4.40.2':
-    resolution: {integrity: sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ==}
+  '@rollup/rollup-linux-s390x-gnu@4.44.0':
+    resolution: {integrity: sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==}
     cpu: [s390x]
     os: [linux]
 
-  '@rollup/rollup-linux-x64-gnu@4.40.2':
-    resolution: {integrity: sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==}
+  '@rollup/rollup-linux-x64-gnu@4.44.0':
+    resolution: {integrity: sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==}
     cpu: [x64]
     os: [linux]
 
-  '@rollup/rollup-linux-x64-musl@4.40.2':
-    resolution: {integrity: sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA==}
+  '@rollup/rollup-linux-x64-musl@4.44.0':
+    resolution: {integrity: sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==}
     cpu: [x64]
     os: [linux]
 
-  '@rollup/rollup-win32-arm64-msvc@4.40.2':
-    resolution: {integrity: sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg==}
+  '@rollup/rollup-win32-arm64-msvc@4.44.0':
+    resolution: {integrity: sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==}
     cpu: [arm64]
     os: [win32]
 
-  '@rollup/rollup-win32-ia32-msvc@4.40.2':
-    resolution: {integrity: sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA==}
+  '@rollup/rollup-win32-ia32-msvc@4.44.0':
+    resolution: {integrity: sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA==}
     cpu: [ia32]
     os: [win32]
 
-  '@rollup/rollup-win32-x64-msvc@4.40.2':
-    resolution: {integrity: sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA==}
+  '@rollup/rollup-win32-x64-msvc@4.44.0':
+    resolution: {integrity: sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==}
     cpu: [x64]
     os: [win32]
 
@@ -802,9 +802,6 @@ packages:
   '@types/deep-eql@4.0.2':
     resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
 
-  '@types/estree@1.0.7':
-    resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
-
   '@types/estree@1.0.8':
     resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
 
@@ -831,16 +828,16 @@ packages:
   '@types/whatwg-mimetype@3.0.2':
     resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==}
 
-  '@typescript-eslint/eslint-plugin@8.34.1':
-    resolution: {integrity: sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==}
+  '@typescript-eslint/eslint-plugin@8.35.0':
+    resolution: {integrity: sha512-ijItUYaiWuce0N1SoSMrEd0b6b6lYkYt99pqCPfybd+HKVXtEvYhICfLdwp42MhiI5mp0oq7PKEL+g1cNiz/Eg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
-      '@typescript-eslint/parser': ^8.34.1
+      '@typescript-eslint/parser': ^8.35.0
       eslint: ^8.57.0 || ^9.0.0
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/parser@8.34.1':
-    resolution: {integrity: sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==}
+  '@typescript-eslint/parser@8.35.0':
+    resolution: {integrity: sha512-6sMvZePQrnZH2/cJkwRpkT7DxoAWh+g6+GFRK6bV3YQo7ogi3SX5rgF6099r5Q53Ma5qeT7LGmOmuIutF4t3lA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
@@ -852,18 +849,34 @@ packages:
     peerDependencies:
       typescript: '>=4.8.4 <5.9.0'
 
+  '@typescript-eslint/project-service@8.35.0':
+    resolution: {integrity: sha512-41xatqRwWZuhUMF/aZm2fcUsOFKNcG28xqRSS6ZVr9BVJtGExosLAm5A1OxTjRMagx8nJqva+P5zNIGt8RIgbQ==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+    peerDependencies:
+      typescript: '>=4.8.4 <5.9.0'
+
   '@typescript-eslint/scope-manager@8.34.1':
     resolution: {integrity: sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
+  '@typescript-eslint/scope-manager@8.35.0':
+    resolution: {integrity: sha512-+AgL5+mcoLxl1vGjwNfiWq5fLDZM1TmTPYs2UkyHfFhgERxBbqHlNjRzhThJqz+ktBqTChRYY6zwbMwy0591AA==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
   '@typescript-eslint/tsconfig-utils@8.34.1':
     resolution: {integrity: sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       typescript: '>=4.8.4 <5.9.0'
 
-  '@typescript-eslint/type-utils@8.34.1':
-    resolution: {integrity: sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==}
+  '@typescript-eslint/tsconfig-utils@8.35.0':
+    resolution: {integrity: sha512-04k/7247kZzFraweuEirmvUj+W3bJLI9fX6fbo1Qm2YykuBvEhRTPl8tcxlYO8kZZW+HIXfkZNoasVb8EV4jpA==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+    peerDependencies:
+      typescript: '>=4.8.4 <5.9.0'
+
+  '@typescript-eslint/type-utils@8.35.0':
+    resolution: {integrity: sha512-ceNNttjfmSEoM9PW87bWLDEIaLAyR+E6BoYJQ5PfaDau37UGca9Nyq3lBk8Bw2ad0AKvYabz6wxc7DMTO2jnNA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
@@ -873,12 +886,22 @@ packages:
     resolution: {integrity: sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
+  '@typescript-eslint/types@8.35.0':
+    resolution: {integrity: sha512-0mYH3emanku0vHw2aRLNGqe7EXh9WHEhi7kZzscrMDf6IIRUQ5Jk4wp1QrledE/36KtdZrVfKnE32eZCf/vaVQ==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
   '@typescript-eslint/typescript-estree@8.34.1':
     resolution: {integrity: sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       typescript: '>=4.8.4 <5.9.0'
 
+  '@typescript-eslint/typescript-estree@8.35.0':
+    resolution: {integrity: sha512-F+BhnaBemgu1Qf8oHrxyw14wq6vbL8xwWKKMwTMwYIRmFFY/1n/9T/jpbobZL8vp7QyEUcC6xGrnAO4ua8Kp7w==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+    peerDependencies:
+      typescript: '>=4.8.4 <5.9.0'
+
   '@typescript-eslint/utils@8.34.1':
     resolution: {integrity: sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -886,10 +909,21 @@ packages:
       eslint: ^8.57.0 || ^9.0.0
       typescript: '>=4.8.4 <5.9.0'
 
+  '@typescript-eslint/utils@8.35.0':
+    resolution: {integrity: sha512-nqoMu7WWM7ki5tPgLVsmPM8CkqtoPUG6xXGeefM5t4x3XumOEKMoUZPdi+7F+/EotukN4R9OWdmDxN80fqoZeg==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+    peerDependencies:
+      eslint: ^8.57.0 || ^9.0.0
+      typescript: '>=4.8.4 <5.9.0'
+
   '@typescript-eslint/visitor-keys@8.34.1':
     resolution: {integrity: sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
+  '@typescript-eslint/visitor-keys@8.35.0':
+    resolution: {integrity: sha512-zTh2+1Y8ZpmeQaQVIc/ZZxsx8UzgKJyNg1PTvjzC7WMhPSVS8bfDX34k1SrwOf016qd5RU3az2UxUNue3IfQ5g==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
   '@vitejs/plugin-react-swc@3.10.2':
     resolution: {integrity: sha512-xD3Rdvrt5LgANug7WekBn1KhcvLn1H3jNBfJRL3reeOIua/WnZOEV5qi5qIBq5T8R0jUDmRtxuvk4bPhzGHDWw==}
     peerDependencies:
@@ -1511,8 +1545,8 @@ packages:
     resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
     engines: {node: '>= 0.4'}
 
-  esbuild@0.25.4:
-    resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==}
+  esbuild@0.25.5:
+    resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==}
     engines: {node: '>=18'}
     hasBin: true
 
@@ -1654,14 +1688,6 @@ packages:
   fastq@1.19.1:
     resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
 
-  fdir@6.4.4:
-    resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==}
-    peerDependencies:
-      picomatch: ^3 || ^4
-    peerDependenciesMeta:
-      picomatch:
-        optional: true
-
   fdir@6.4.6:
     resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==}
     peerDependencies:
@@ -2288,8 +2314,8 @@ packages:
     resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
     engines: {node: '>= 0.4'}
 
-  postcss@8.5.3:
-    resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
+  postcss@8.5.6:
+    resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
     engines: {node: ^10 || ^12 || >=14}
 
   prelude-ls@1.2.1:
@@ -2415,8 +2441,8 @@ packages:
     resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
     engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
 
-  rollup@4.40.2:
-    resolution: {integrity: sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==}
+  rollup@4.44.0:
+    resolution: {integrity: sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA==}
     engines: {node: '>=18.0.0', npm: '>=8.0.0'}
     hasBin: true
 
@@ -2595,10 +2621,6 @@ packages:
   tinyexec@0.3.2:
     resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
 
-  tinyglobby@0.2.13:
-    resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==}
-    engines: {node: '>=12.0.0'}
-
   tinyglobby@0.2.14:
     resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
     engines: {node: '>=12.0.0'}
@@ -2651,8 +2673,8 @@ packages:
     resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
     engines: {node: '>= 0.4'}
 
-  typescript-eslint@8.34.1:
-    resolution: {integrity: sha512-XjS+b6Vg9oT1BaIUfkW3M3LvqZE++rbzAMEHuccCfO/YkP43ha6w3jTEMilQxMF92nVOYCcdjv1ZUhAa1D/0ow==}
+  typescript-eslint@8.35.0:
+    resolution: {integrity: sha512-uEnz70b7kBz6eg/j0Czy6K5NivaYopgxRjsnAJ2Fx5oTLo3wefTHIbL7AkQr1+7tJCRVpTs/wiM8JR/11Loq9A==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
@@ -2703,19 +2725,19 @@ packages:
     peerDependencies:
       vite: '>2.0.0-0'
 
-  vite@6.3.5:
-    resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==}
-    engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+  vite@7.0.0:
+    resolution: {integrity: sha512-ixXJB1YRgDIw2OszKQS9WxGHKwLdCsbQNkpJN171udl6szi/rIySHL6/Os3s2+oE4P/FLD4dxg4mD7Wust+u5g==}
+    engines: {node: ^20.19.0 || >=22.12.0}
     hasBin: true
     peerDependencies:
-      '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
+      '@types/node': ^20.19.0 || >=22.12.0
       jiti: '>=1.21.0'
-      less: '*'
+      less: ^4.0.0
       lightningcss: ^1.21.0
-      sass: '*'
-      sass-embedded: '*'
-      stylus: '*'
-      sugarss: '*'
+      sass: ^1.70.0
+      sass-embedded: ^1.70.0
+      stylus: '>=0.54.8'
+      sugarss: ^5.0.0
       terser: ^5.16.0
       tsx: ^4.8.1
       yaml: ^2.4.2
@@ -3083,79 +3105,79 @@ snapshots:
 
   '@emotion/weak-memoize@0.4.0': {}
 
-  '@esbuild/aix-ppc64@0.25.4':
+  '@esbuild/aix-ppc64@0.25.5':
     optional: true
 
-  '@esbuild/android-arm64@0.25.4':
+  '@esbuild/android-arm64@0.25.5':
     optional: true
 
-  '@esbuild/android-arm@0.25.4':
+  '@esbuild/android-arm@0.25.5':
     optional: true
 
-  '@esbuild/android-x64@0.25.4':
+  '@esbuild/android-x64@0.25.5':
     optional: true
 
-  '@esbuild/darwin-arm64@0.25.4':
+  '@esbuild/darwin-arm64@0.25.5':
     optional: true
 
-  '@esbuild/darwin-x64@0.25.4':
+  '@esbuild/darwin-x64@0.25.5':
     optional: true
 
-  '@esbuild/freebsd-arm64@0.25.4':
+  '@esbuild/freebsd-arm64@0.25.5':
     optional: true
 
-  '@esbuild/freebsd-x64@0.25.4':
+  '@esbuild/freebsd-x64@0.25.5':
     optional: true
 
-  '@esbuild/linux-arm64@0.25.4':
+  '@esbuild/linux-arm64@0.25.5':
     optional: true
 
-  '@esbuild/linux-arm@0.25.4':
+  '@esbuild/linux-arm@0.25.5':
     optional: true
 
-  '@esbuild/linux-ia32@0.25.4':
+  '@esbuild/linux-ia32@0.25.5':
     optional: true
 
-  '@esbuild/linux-loong64@0.25.4':
+  '@esbuild/linux-loong64@0.25.5':
     optional: true
 
-  '@esbuild/linux-mips64el@0.25.4':
+  '@esbuild/linux-mips64el@0.25.5':
     optional: true
 
-  '@esbuild/linux-ppc64@0.25.4':
+  '@esbuild/linux-ppc64@0.25.5':
     optional: true
 
-  '@esbuild/linux-riscv64@0.25.4':
+  '@esbuild/linux-riscv64@0.25.5':
     optional: true
 
-  '@esbuild/linux-s390x@0.25.4':
+  '@esbuild/linux-s390x@0.25.5':
     optional: true
 
-  '@esbuild/linux-x64@0.25.4':
+  '@esbuild/linux-x64@0.25.5':
     optional: true
 
-  '@esbuild/netbsd-arm64@0.25.4':
+  '@esbuild/netbsd-arm64@0.25.5':
     optional: true
 
-  '@esbuild/netbsd-x64@0.25.4':
+  '@esbuild/netbsd-x64@0.25.5':
     optional: true
 
-  '@esbuild/openbsd-arm64@0.25.4':
+  '@esbuild/openbsd-arm64@0.25.5':
     optional: true
 
-  '@esbuild/openbsd-x64@0.25.4':
+  '@esbuild/openbsd-x64@0.25.5':
     optional: true
 
-  '@esbuild/sunos-x64@0.25.4':
+  '@esbuild/sunos-x64@0.25.5':
     optional: true
 
-  '@esbuild/win32-arm64@0.25.4':
+  '@esbuild/win32-arm64@0.25.5':
     optional: true
 
-  '@esbuild/win32-ia32@0.25.4':
+  '@esbuild/win32-ia32@0.25.5':
     optional: true
 
-  '@esbuild/win32-x64@0.25.4':
+  '@esbuild/win32-x64@0.25.5':
     optional: true
 
   '@eslint-community/eslint-utils@4.7.0(eslint@9.29.0(jiti@1.21.7))':
@@ -3311,64 +3333,64 @@ snapshots:
 
   '@rolldown/pluginutils@1.0.0-beta.11': {}
 
-  '@rollup/rollup-android-arm-eabi@4.40.2':
+  '@rollup/rollup-android-arm-eabi@4.44.0':
     optional: true
 
-  '@rollup/rollup-android-arm64@4.40.2':
+  '@rollup/rollup-android-arm64@4.44.0':
     optional: true
 
-  '@rollup/rollup-darwin-arm64@4.40.2':
+  '@rollup/rollup-darwin-arm64@4.44.0':
     optional: true
 
-  '@rollup/rollup-darwin-x64@4.40.2':
+  '@rollup/rollup-darwin-x64@4.44.0':
     optional: true
 
-  '@rollup/rollup-freebsd-arm64@4.40.2':
+  '@rollup/rollup-freebsd-arm64@4.44.0':
     optional: true
 
-  '@rollup/rollup-freebsd-x64@4.40.2':
+  '@rollup/rollup-freebsd-x64@4.44.0':
     optional: true
 
-  '@rollup/rollup-linux-arm-gnueabihf@4.40.2':
+  '@rollup/rollup-linux-arm-gnueabihf@4.44.0':
     optional: true
 
-  '@rollup/rollup-linux-arm-musleabihf@4.40.2':
+  '@rollup/rollup-linux-arm-musleabihf@4.44.0':
     optional: true
 
-  '@rollup/rollup-linux-arm64-gnu@4.40.2':
+  '@rollup/rollup-linux-arm64-gnu@4.44.0':
     optional: true
 
-  '@rollup/rollup-linux-arm64-musl@4.40.2':
+  '@rollup/rollup-linux-arm64-musl@4.44.0':
     optional: true
 
-  '@rollup/rollup-linux-loongarch64-gnu@4.40.2':
+  '@rollup/rollup-linux-loongarch64-gnu@4.44.0':
     optional: true
 
-  '@rollup/rollup-linux-powerpc64le-gnu@4.40.2':
+  '@rollup/rollup-linux-powerpc64le-gnu@4.44.0':
     optional: true
 
-  '@rollup/rollup-linux-riscv64-gnu@4.40.2':
+  '@rollup/rollup-linux-riscv64-gnu@4.44.0':
     optional: true
 
-  '@rollup/rollup-linux-riscv64-musl@4.40.2':
+  '@rollup/rollup-linux-riscv64-musl@4.44.0':
     optional: true
 
-  '@rollup/rollup-linux-s390x-gnu@4.40.2':
+  '@rollup/rollup-linux-s390x-gnu@4.44.0':
     optional: true
 
-  '@rollup/rollup-linux-x64-gnu@4.40.2':
+  '@rollup/rollup-linux-x64-gnu@4.44.0':
     optional: true
 
-  '@rollup/rollup-linux-x64-musl@4.40.2':
+  '@rollup/rollup-linux-x64-musl@4.44.0':
     optional: true
 
-  '@rollup/rollup-win32-arm64-msvc@4.40.2':
+  '@rollup/rollup-win32-arm64-msvc@4.44.0':
     optional: true
 
-  '@rollup/rollup-win32-ia32-msvc@4.40.2':
+  '@rollup/rollup-win32-ia32-msvc@4.44.0':
     optional: true
 
-  '@rollup/rollup-win32-x64-msvc@4.40.2':
+  '@rollup/rollup-win32-x64-msvc@4.44.0':
     optional: true
 
   '@stylistic/eslint-plugin@5.0.0(eslint@9.29.0(jiti@1.21.7))':
@@ -3503,8 +3525,6 @@ snapshots:
 
   '@types/deep-eql@4.0.2': {}
 
-  '@types/estree@1.0.7': {}
-
   '@types/estree@1.0.8': {}
 
   '@types/hoist-non-react-statics@3.3.6':
@@ -3530,14 +3550,14 @@ snapshots:
 
   '@types/whatwg-mimetype@3.0.2': {}
 
-  '@typescript-eslint/eslint-plugin@8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
+  '@typescript-eslint/eslint-plugin@8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
     dependencies:
       '@eslint-community/regexpp': 4.12.1
-      '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
-      '@typescript-eslint/scope-manager': 8.34.1
-      '@typescript-eslint/type-utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
-      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
-      '@typescript-eslint/visitor-keys': 8.34.1
+      '@typescript-eslint/parser': 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      '@typescript-eslint/scope-manager': 8.35.0
+      '@typescript-eslint/type-utils': 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      '@typescript-eslint/utils': 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      '@typescript-eslint/visitor-keys': 8.35.0
       eslint: 9.29.0(jiti@1.21.7)
       graphemer: 1.4.0
       ignore: 7.0.5
@@ -3547,12 +3567,12 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
+  '@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
     dependencies:
-      '@typescript-eslint/scope-manager': 8.34.1
-      '@typescript-eslint/types': 8.34.1
-      '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3)
-      '@typescript-eslint/visitor-keys': 8.34.1
+      '@typescript-eslint/scope-manager': 8.35.0
+      '@typescript-eslint/types': 8.35.0
+      '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.8.3)
+      '@typescript-eslint/visitor-keys': 8.35.0
       debug: 4.4.1
       eslint: 9.29.0(jiti@1.21.7)
       typescript: 5.8.3
@@ -3568,19 +3588,37 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@typescript-eslint/project-service@8.35.0(typescript@5.8.3)':
+    dependencies:
+      '@typescript-eslint/tsconfig-utils': 8.35.0(typescript@5.8.3)
+      '@typescript-eslint/types': 8.35.0
+      debug: 4.4.1
+      typescript: 5.8.3
+    transitivePeerDependencies:
+      - supports-color
+
   '@typescript-eslint/scope-manager@8.34.1':
     dependencies:
       '@typescript-eslint/types': 8.34.1
       '@typescript-eslint/visitor-keys': 8.34.1
 
+  '@typescript-eslint/scope-manager@8.35.0':
+    dependencies:
+      '@typescript-eslint/types': 8.35.0
+      '@typescript-eslint/visitor-keys': 8.35.0
+
   '@typescript-eslint/tsconfig-utils@8.34.1(typescript@5.8.3)':
     dependencies:
       typescript: 5.8.3
 
-  '@typescript-eslint/type-utils@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
+  '@typescript-eslint/tsconfig-utils@8.35.0(typescript@5.8.3)':
     dependencies:
-      '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3)
-      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      typescript: 5.8.3
+
+  '@typescript-eslint/type-utils@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
+    dependencies:
+      '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.8.3)
+      '@typescript-eslint/utils': 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
       debug: 4.4.1
       eslint: 9.29.0(jiti@1.21.7)
       ts-api-utils: 2.1.0(typescript@5.8.3)
@@ -3590,6 +3628,8 @@ snapshots:
 
   '@typescript-eslint/types@8.34.1': {}
 
+  '@typescript-eslint/types@8.35.0': {}
+
   '@typescript-eslint/typescript-estree@8.34.1(typescript@5.8.3)':
     dependencies:
       '@typescript-eslint/project-service': 8.34.1(typescript@5.8.3)
@@ -3606,6 +3646,22 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@typescript-eslint/typescript-estree@8.35.0(typescript@5.8.3)':
+    dependencies:
+      '@typescript-eslint/project-service': 8.35.0(typescript@5.8.3)
+      '@typescript-eslint/tsconfig-utils': 8.35.0(typescript@5.8.3)
+      '@typescript-eslint/types': 8.35.0
+      '@typescript-eslint/visitor-keys': 8.35.0
+      debug: 4.4.1
+      fast-glob: 3.3.3
+      is-glob: 4.0.3
+      minimatch: 9.0.5
+      semver: 7.7.2
+      ts-api-utils: 2.1.0(typescript@5.8.3)
+      typescript: 5.8.3
+    transitivePeerDependencies:
+      - supports-color
+
   '@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
     dependencies:
       '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@1.21.7))
@@ -3617,16 +3673,32 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@typescript-eslint/utils@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)':
+    dependencies:
+      '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@1.21.7))
+      '@typescript-eslint/scope-manager': 8.35.0
+      '@typescript-eslint/types': 8.35.0
+      '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.8.3)
+      eslint: 9.29.0(jiti@1.21.7)
+      typescript: 5.8.3
+    transitivePeerDependencies:
+      - supports-color
+
   '@typescript-eslint/visitor-keys@8.34.1':
     dependencies:
       '@typescript-eslint/types': 8.34.1
       eslint-visitor-keys: 4.2.1
 
-  '@vitejs/plugin-react-swc@3.10.2(@swc/helpers@0.5.17)(vite@6.3.5(@types/node@20.19.1)(jiti@1.21.7))':
+  '@typescript-eslint/visitor-keys@8.35.0':
+    dependencies:
+      '@typescript-eslint/types': 8.35.0
+      eslint-visitor-keys: 4.2.1
+
+  '@vitejs/plugin-react-swc@3.10.2(@swc/helpers@0.5.17)(vite@7.0.0(@types/node@20.19.1)(jiti@1.21.7))':
     dependencies:
       '@rolldown/pluginutils': 1.0.0-beta.11
       '@swc/core': 1.11.31(@swc/helpers@0.5.17)
-      vite: 6.3.5(@types/node@20.19.1)(jiti@1.21.7)
+      vite: 7.0.0(@types/node@20.19.1)(jiti@1.21.7)
     transitivePeerDependencies:
       - '@swc/helpers'
 
@@ -3638,13 +3710,13 @@ snapshots:
       chai: 5.2.0
       tinyrainbow: 2.0.0
 
-  '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@20.19.1)(jiti@1.21.7))':
+  '@vitest/mocker@3.2.4(vite@7.0.0(@types/node@20.19.1)(jiti@1.21.7))':
     dependencies:
       '@vitest/spy': 3.2.4
       estree-walker: 3.0.3
       magic-string: 0.30.17
     optionalDependencies:
-      vite: 6.3.5(@types/node@20.19.1)(jiti@1.21.7)
+      vite: 7.0.0(@types/node@20.19.1)(jiti@1.21.7)
 
   '@vitest/pretty-format@3.2.4':
     dependencies:
@@ -4628,33 +4700,33 @@ snapshots:
       is-date-object: 1.1.0
       is-symbol: 1.1.1
 
-  esbuild@0.25.4:
+  esbuild@0.25.5:
     optionalDependencies:
-      '@esbuild/aix-ppc64': 0.25.4
-      '@esbuild/android-arm': 0.25.4
-      '@esbuild/android-arm64': 0.25.4
-      '@esbuild/android-x64': 0.25.4
-      '@esbuild/darwin-arm64': 0.25.4
-      '@esbuild/darwin-x64': 0.25.4
-      '@esbuild/freebsd-arm64': 0.25.4
-      '@esbuild/freebsd-x64': 0.25.4
-      '@esbuild/linux-arm': 0.25.4
-      '@esbuild/linux-arm64': 0.25.4
-      '@esbuild/linux-ia32': 0.25.4
-      '@esbuild/linux-loong64': 0.25.4
-      '@esbuild/linux-mips64el': 0.25.4
-      '@esbuild/linux-ppc64': 0.25.4
-      '@esbuild/linux-riscv64': 0.25.4
-      '@esbuild/linux-s390x': 0.25.4
-      '@esbuild/linux-x64': 0.25.4
-      '@esbuild/netbsd-arm64': 0.25.4
-      '@esbuild/netbsd-x64': 0.25.4
-      '@esbuild/openbsd-arm64': 0.25.4
-      '@esbuild/openbsd-x64': 0.25.4
-      '@esbuild/sunos-x64': 0.25.4
-      '@esbuild/win32-arm64': 0.25.4
-      '@esbuild/win32-ia32': 0.25.4
-      '@esbuild/win32-x64': 0.25.4
+      '@esbuild/aix-ppc64': 0.25.5
+      '@esbuild/android-arm': 0.25.5
+      '@esbuild/android-arm64': 0.25.5
+      '@esbuild/android-x64': 0.25.5
+      '@esbuild/darwin-arm64': 0.25.5
+      '@esbuild/darwin-x64': 0.25.5
+      '@esbuild/freebsd-arm64': 0.25.5
+      '@esbuild/freebsd-x64': 0.25.5
+      '@esbuild/linux-arm': 0.25.5
+      '@esbuild/linux-arm64': 0.25.5
+      '@esbuild/linux-ia32': 0.25.5
+      '@esbuild/linux-loong64': 0.25.5
+      '@esbuild/linux-mips64el': 0.25.5
+      '@esbuild/linux-ppc64': 0.25.5
+      '@esbuild/linux-riscv64': 0.25.5
+      '@esbuild/linux-s390x': 0.25.5
+      '@esbuild/linux-x64': 0.25.5
+      '@esbuild/netbsd-arm64': 0.25.5
+      '@esbuild/netbsd-x64': 0.25.5
+      '@esbuild/openbsd-arm64': 0.25.5
+      '@esbuild/openbsd-x64': 0.25.5
+      '@esbuild/sunos-x64': 0.25.5
+      '@esbuild/win32-arm64': 0.25.5
+      '@esbuild/win32-ia32': 0.25.5
+      '@esbuild/win32-x64': 0.25.5
 
   escalade@3.2.0: {}
 
@@ -4852,10 +4924,6 @@ snapshots:
     dependencies:
       reusify: 1.1.0
 
-  fdir@6.4.4(picomatch@4.0.2):
-    optionalDependencies:
-      picomatch: 4.0.2
-
   fdir@6.4.6(picomatch@4.0.2):
     optionalDependencies:
       picomatch: 4.0.2
@@ -5460,7 +5528,7 @@ snapshots:
 
   possible-typed-array-names@1.1.0: {}
 
-  postcss@8.5.3:
+  postcss@8.5.6:
     dependencies:
       nanoid: 3.3.11
       picocolors: 1.1.1
@@ -5590,30 +5658,30 @@ snapshots:
 
   reusify@1.1.0: {}
 
-  rollup@4.40.2:
+  rollup@4.44.0:
     dependencies:
-      '@types/estree': 1.0.7
+      '@types/estree': 1.0.8
     optionalDependencies:
-      '@rollup/rollup-android-arm-eabi': 4.40.2
-      '@rollup/rollup-android-arm64': 4.40.2
-      '@rollup/rollup-darwin-arm64': 4.40.2
-      '@rollup/rollup-darwin-x64': 4.40.2
-      '@rollup/rollup-freebsd-arm64': 4.40.2
-      '@rollup/rollup-freebsd-x64': 4.40.2
-      '@rollup/rollup-linux-arm-gnueabihf': 4.40.2
-      '@rollup/rollup-linux-arm-musleabihf': 4.40.2
-      '@rollup/rollup-linux-arm64-gnu': 4.40.2
-      '@rollup/rollup-linux-arm64-musl': 4.40.2
-      '@rollup/rollup-linux-loongarch64-gnu': 4.40.2
-      '@rollup/rollup-linux-powerpc64le-gnu': 4.40.2
-      '@rollup/rollup-linux-riscv64-gnu': 4.40.2
-      '@rollup/rollup-linux-riscv64-musl': 4.40.2
-      '@rollup/rollup-linux-s390x-gnu': 4.40.2
-      '@rollup/rollup-linux-x64-gnu': 4.40.2
-      '@rollup/rollup-linux-x64-musl': 4.40.2
-      '@rollup/rollup-win32-arm64-msvc': 4.40.2
-      '@rollup/rollup-win32-ia32-msvc': 4.40.2
-      '@rollup/rollup-win32-x64-msvc': 4.40.2
+      '@rollup/rollup-android-arm-eabi': 4.44.0
+      '@rollup/rollup-android-arm64': 4.44.0
+      '@rollup/rollup-darwin-arm64': 4.44.0
+      '@rollup/rollup-darwin-x64': 4.44.0
+      '@rollup/rollup-freebsd-arm64': 4.44.0
+      '@rollup/rollup-freebsd-x64': 4.44.0
+      '@rollup/rollup-linux-arm-gnueabihf': 4.44.0
+      '@rollup/rollup-linux-arm-musleabihf': 4.44.0
+      '@rollup/rollup-linux-arm64-gnu': 4.44.0
+      '@rollup/rollup-linux-arm64-musl': 4.44.0
+      '@rollup/rollup-linux-loongarch64-gnu': 4.44.0
+      '@rollup/rollup-linux-powerpc64le-gnu': 4.44.0
+      '@rollup/rollup-linux-riscv64-gnu': 4.44.0
+      '@rollup/rollup-linux-riscv64-musl': 4.44.0
+      '@rollup/rollup-linux-s390x-gnu': 4.44.0
+      '@rollup/rollup-linux-x64-gnu': 4.44.0
+      '@rollup/rollup-linux-x64-musl': 4.44.0
+      '@rollup/rollup-win32-arm64-msvc': 4.44.0
+      '@rollup/rollup-win32-ia32-msvc': 4.44.0
+      '@rollup/rollup-win32-x64-msvc': 4.44.0
       fsevents: 2.3.3
 
   run-parallel@1.2.0:
@@ -5828,11 +5896,6 @@ snapshots:
 
   tinyexec@0.3.2: {}
 
-  tinyglobby@0.2.13:
-    dependencies:
-      fdir: 6.4.4(picomatch@4.0.2)
-      picomatch: 4.0.2
-
   tinyglobby@0.2.14:
     dependencies:
       fdir: 6.4.6(picomatch@4.0.2)
@@ -5896,11 +5959,11 @@ snapshots:
       possible-typed-array-names: 1.1.0
       reflect.getprototypeof: 1.0.10
 
-  typescript-eslint@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3):
+  typescript-eslint@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3):
     dependencies:
-      '@typescript-eslint/eslint-plugin': 8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
-      '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
-      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      '@typescript-eslint/eslint-plugin': 8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      '@typescript-eslint/parser': 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
+      '@typescript-eslint/utils': 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
       eslint: 9.29.0(jiti@1.21.7)
       typescript: 5.8.3
     transitivePeerDependencies:
@@ -5944,7 +6007,7 @@ snapshots:
       debug: 4.4.1
       es-module-lexer: 1.7.0
       pathe: 2.0.3
-      vite: 6.3.5(@types/node@20.19.1)(jiti@1.21.7)
+      vite: 7.0.0(@types/node@20.19.1)(jiti@1.21.7)
     transitivePeerDependencies:
       - '@types/node'
       - jiti
@@ -5959,18 +6022,18 @@ snapshots:
       - tsx
       - yaml
 
-  vite-plugin-css-injected-by-js@3.5.2(vite@6.3.5(@types/node@20.19.1)(jiti@1.21.7)):
+  vite-plugin-css-injected-by-js@3.5.2(vite@7.0.0(@types/node@20.19.1)(jiti@1.21.7)):
     dependencies:
-      vite: 6.3.5(@types/node@20.19.1)(jiti@1.21.7)
+      vite: 7.0.0(@types/node@20.19.1)(jiti@1.21.7)
 
-  vite@6.3.5(@types/node@20.19.1)(jiti@1.21.7):
+  vite@7.0.0(@types/node@20.19.1)(jiti@1.21.7):
     dependencies:
-      esbuild: 0.25.4
-      fdir: 6.4.4(picomatch@4.0.2)
+      esbuild: 0.25.5
+      fdir: 6.4.6(picomatch@4.0.2)
       picomatch: 4.0.2
-      postcss: 8.5.3
-      rollup: 4.40.2
-      tinyglobby: 0.2.13
+      postcss: 8.5.6
+      rollup: 4.44.0
+      tinyglobby: 0.2.14
     optionalDependencies:
       '@types/node': 20.19.1
       fsevents: 2.3.3
@@ -5980,7 +6043,7 @@ snapshots:
     dependencies:
       '@types/chai': 5.2.2
       '@vitest/expect': 3.2.4
-      '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@20.19.1)(jiti@1.21.7))
+      '@vitest/mocker': 3.2.4(vite@7.0.0(@types/node@20.19.1)(jiti@1.21.7))
       '@vitest/pretty-format': 3.2.4
       '@vitest/runner': 3.2.4
       '@vitest/snapshot': 3.2.4
@@ -5998,7 +6061,7 @@ snapshots:
       tinyglobby: 0.2.14
       tinypool: 1.1.1
       tinyrainbow: 2.0.0
-      vite: 6.3.5(@types/node@20.19.1)(jiti@1.21.7)
+      vite: 7.0.0(@types/node@20.19.1)(jiti@1.21.7)
       vite-node: 3.2.4(@types/node@20.19.1)(jiti@1.21.7)
       why-is-node-running: 2.3.0
     optionalDependencies:

From 99a175ce54d755f92858909b77e65ddf062c7164 Mon Sep 17 00:00:00 2001
From: Wei-Yu Chen <60685934+Jasperora@users.noreply.github.com>
Date: Wed, 25 Jun 2025 21:19:56 +0800
Subject: [PATCH 184/381] Show tooltip when hovering on the button handling
 details panel (#52212)

---
 .../ui/src/layouts/Details/DetailsLayout.tsx  | 59 ++++++++++---------
 1 file changed, 32 insertions(+), 27 deletions(-)

diff --git a/airflow-core/src/airflow/ui/src/layouts/Details/DetailsLayout.tsx b/airflow-core/src/airflow/ui/src/layouts/Details/DetailsLayout.tsx
index d1d90cf803a06..a7c922454a006 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Details/DetailsLayout.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Details/DetailsLayout.tsx
@@ -36,6 +36,7 @@ import { ProgressBar } from "src/components/ui";
 import { Toaster } from "src/components/ui";
 import ActionButton from "src/components/ui/ActionButton";
 import { DAGWarningsModal } from "src/components/ui/DagWarningsModal";
+import { Tooltip } from "src/components/ui/Tooltip";
 import { OpenGroupsProvider } from "src/context/openGroups";
 
 import { DagBreadcrumb } from "./DagBreadcrumb";
@@ -82,21 +83,23 @@ export const DetailsLayout = ({ children, error, isLoading, tabs }: Props) => {
       <BackfillBanner dagId={dagId} />
       <Box flex={1} minH={0}>
         {isRightPanelCollapsed ? (
-          <IconButton
-            aria-label={translate("common:showDetailsPanel")}
-            bg="bg.surface"
-            borderRadius="full"
-            boxShadow="md"
-            cursor="pointer"
-            onClick={() => setIsRightPanelCollapsed(false)}
-            position="absolute"
-            right={0}
-            size="sm"
-            top="50%"
-            zIndex={10}
-          >
-            <FaChevronLeft />
-          </IconButton>
+          <Tooltip content={translate("common:showDetailsPanel")}>
+            <IconButton
+              aria-label={translate("common:showDetailsPanel")}
+              bg="bg.surface"
+              borderRadius="full"
+              boxShadow="md"
+              cursor="pointer"
+              onClick={() => setIsRightPanelCollapsed(false)}
+              position="absolute"
+              right={0}
+              size="sm"
+              top="50%"
+              zIndex={10}
+            >
+              <FaChevronLeft />
+            </IconButton>
+          </Tooltip>
         ) : undefined}
         <PanelGroup autoSaveId={dagId} direction="horizontal" ref={panelGroupRef}>
           <Panel defaultSize={dagView === "graph" ? 70 : 20} minSize={6}>
@@ -132,18 +135,20 @@ export const DetailsLayout = ({ children, error, isLoading, tabs }: Props) => {
                 position="relative"
                 w={0.5}
               >
-                <IconButton
-                  aria-label={translate("common:collapseDetailsPanel")}
-                  bg="bg.surface"
-                  borderRadius="full"
-                  boxShadow="md"
-                  cursor="pointer"
-                  onClick={() => setIsRightPanelCollapsed(true)}
-                  size="xs"
-                  zIndex={2}
-                >
-                  <FaChevronRight />
-                </IconButton>
+                <Tooltip content={translate("common:collapseDetailsPanel")}>
+                  <IconButton
+                    aria-label={translate("common:collapseDetailsPanel")}
+                    bg="bg.surface"
+                    borderRadius="full"
+                    boxShadow="md"
+                    cursor="pointer"
+                    onClick={() => setIsRightPanelCollapsed(true)}
+                    size="xs"
+                    zIndex={2}
+                  >
+                    <FaChevronRight />
+                  </IconButton>
+                </Tooltip>
               </Box>
             </PanelResizeHandle>
           )}

From 9ee65d666b0640de6f01f919859c2f6a84416e90 Mon Sep 17 00:00:00 2001
From: BBQing <33732539+BBQing@users.noreply.github.com>
Date: Wed, 25 Jun 2025 15:42:05 +0200
Subject: [PATCH 185/381] Fixed external links in Navigation buttons (#52220)

---
 .../src/airflow/ui/src/layouts/Nav/NavButton.tsx   | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/airflow-core/src/airflow/ui/src/layouts/Nav/NavButton.tsx b/airflow-core/src/airflow/ui/src/layouts/Nav/NavButton.tsx
index 4ebaa90b7c3ea..6c0eec7f18e7f 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Nav/NavButton.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Nav/NavButton.tsx
@@ -45,6 +45,13 @@ export const NavButton = ({ icon, isExternal = false, title, to, ...rest }: NavB
       <Box fontSize="xs">{title}</Box>
     </Button>
   ) : isExternal ? (
+    <Link href={to} px={2} rel="noopener noreferrer" target="_blank">
+      <Button {...styles} variant="ghost" {...rest}>
+        <Box alignSelf="center">{icon}</Box>
+        <Box fontSize="xs">{title}</Box>
+      </Button>
+    </Link>
+  ) : (
     <NavLink to={to}>
       {({ isActive }: { readonly isActive: boolean }) => (
         <Button {...styles} variant={isActive ? "solid" : "ghost"} {...rest}>
@@ -53,11 +60,4 @@ export const NavButton = ({ icon, isExternal = false, title, to, ...rest }: NavB
         </Button>
       )}
     </NavLink>
-  ) : (
-    <Link href={to} px={2} rel="noopener noreferrer" target="_blank">
-      <Button {...styles} variant="ghost" {...rest}>
-        <Box alignSelf="center">{icon}</Box>
-        <Box fontSize="xs">{title}</Box>
-      </Button>
-    </Link>
   );

From c31146a29fa36fd28a6be45742baeaab87e028d9 Mon Sep 17 00:00:00 2001
From: humit <jhjang1005@naver.com>
Date: Wed, 25 Jun 2025 22:52:15 +0900
Subject: [PATCH 186/381] Set downstream option to default on task instance
 clear (#52130)

* Set downstream default when clear task instance

* Set downstream default when mark TI success or failed
---
 .../components/Clear/TaskInstance/ClearTaskInstanceDialog.tsx    | 1 +
 .../components/MarkAs/TaskInstance/MarkTaskInstanceAsDialog.tsx  | 1 +
 2 files changed, 2 insertions(+)

diff --git a/airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/ClearTaskInstanceDialog.tsx b/airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/ClearTaskInstanceDialog.tsx
index a26f276601d67..7458b20489896 100644
--- a/airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/ClearTaskInstanceDialog.tsx
+++ b/airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/ClearTaskInstanceDialog.tsx
@@ -110,6 +110,7 @@ const ClearTaskInstanceDialog = ({ onClose, open, taskInstance }: Props) => {
         <Dialog.Body width="full">
           <Flex justifyContent="center">
             <SegmentedControl
+              defaultValues={["downstream"]}
               multiple
               onChange={setSelectedOptions}
               options={[
diff --git a/airflow-core/src/airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsDialog.tsx b/airflow-core/src/airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsDialog.tsx
index afde1862458f0..c95e27013a8a7 100644
--- a/airflow-core/src/airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsDialog.tsx
+++ b/airflow-core/src/airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsDialog.tsx
@@ -107,6 +107,7 @@ const MarkTaskInstanceAsDialog = ({ onClose, open, state, taskInstance }: Props)
         <Dialog.Body width="full">
           <Flex justifyContent="center">
             <SegmentedControl
+              defaultValues={["downstream"]}
               multiple
               onChange={setSelectedOptions}
               options={[

From 138d01decec3ef17664d7e357c0afdeb4d1d3a26 Mon Sep 17 00:00:00 2001
From: Ramon Vermeulen <ramonvermeulen98@gmail.com>
Date: Wed, 25 Jun 2025 15:58:17 +0200
Subject: [PATCH 187/381] feat: added `request_body` support in the
 `PowerBIDatasetRefreshOperator` (enables support for enhanced dataset
 refreshes) (#51397)

* feat: initial draft implementation for `request_body` support in the `PowerBIDatasetRefreshOperator` - not tested yet

* fix: reference to correct URL in case API changes in future

* test: update `TestPowerBITrigger`

* chore: pre-commit checks

* chore: remove TODOs

* test: add sample request_body to `TestPowerBIDatasetRefreshOperator`

* test: add example of `request_body` to system tests / examples

* chore: missing trailing comma
---
 .../airflow/providers/microsoft/azure/hooks/powerbi.py   | 6 +++++-
 .../providers/microsoft/azure/operators/powerbi.py       | 4 ++++
 .../providers/microsoft/azure/triggers/powerbi.py        | 8 ++++++--
 .../microsoft/azure/example_powerbi_dataset_refresh.py   | 6 ++++++
 .../tests/unit/microsoft/azure/operators/test_powerbi.py | 8 ++++++++
 .../tests/unit/microsoft/azure/triggers/test_powerbi.py  | 9 +++++++++
 6 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/powerbi.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/powerbi.py
index c8e9fa76424fd..0500e869de6df 100644
--- a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/powerbi.py
+++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/powerbi.py
@@ -189,12 +189,15 @@ async def get_refresh_details_by_refresh_id(
 
         return refresh_details
 
-    async def trigger_dataset_refresh(self, *, dataset_id: str, group_id: str) -> str:
+    async def trigger_dataset_refresh(
+        self, *, dataset_id: str, group_id: str, request_body: dict[str, Any] | None = None
+    ) -> str:
         """
         Triggers a refresh for the specified dataset from the given group id.
 
         :param dataset_id: The dataset id.
         :param group_id: The workspace id.
+        :param request_body: Additional arguments to pass to the request body, as described in https://learn.microsoft.com/en-us/rest/api/power-bi/datasets/refresh-dataset-in-group#request-body.
 
         :return: Request id of the dataset refresh request.
         """
@@ -207,6 +210,7 @@ async def trigger_dataset_refresh(self, *, dataset_id: str, group_id: str) -> st
                     "group_id": group_id,
                     "dataset_id": dataset_id,
                 },
+                data=request_body,
             )
 
             request_id = response.get("requestid")
diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/operators/powerbi.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/operators/powerbi.py
index 9abab3da977a3..444100dc667f7 100644
--- a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/operators/powerbi.py
+++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/operators/powerbi.py
@@ -72,6 +72,7 @@ class PowerBIDatasetRefreshOperator(BaseOperator):
     :param timeout: Time in seconds to wait for a dataset to reach a terminal status for asynchronous waits. Used only if ``wait_for_termination`` is True.
     :param check_interval: Number of seconds to wait before rechecking the
         refresh status.
+    :param request_body: Additional arguments to pass to the request body, as described in https://learn.microsoft.com/en-us/rest/api/power-bi/datasets/refresh-dataset-in-group#request-body.
     """
 
     template_fields: Sequence[str] = (
@@ -92,6 +93,7 @@ def __init__(
         proxies: dict | None = None,
         api_version: APIVersion | str | None = None,
         check_interval: int = 60,
+        request_body: dict[str, Any] | None = None,
         **kwargs,
     ) -> None:
         super().__init__(**kwargs)
@@ -102,6 +104,7 @@ def __init__(
         self.conn_id = conn_id
         self.timeout = timeout
         self.check_interval = check_interval
+        self.request_body = request_body
 
     @property
     def proxies(self) -> dict | None:
@@ -124,6 +127,7 @@ def execute(self, context: Context):
                     api_version=self.api_version,
                     check_interval=self.check_interval,
                     wait_for_termination=self.wait_for_termination,
+                    request_body=self.request_body,
                 ),
                 method_name=self.get_refresh_status.__name__,
             )
diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/triggers/powerbi.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/triggers/powerbi.py
index bcba15a2af1ff..042916f796637 100644
--- a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/triggers/powerbi.py
+++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/triggers/powerbi.py
@@ -20,7 +20,7 @@
 import asyncio
 import time
 from collections.abc import AsyncIterator
-from typing import TYPE_CHECKING
+from typing import TYPE_CHECKING, Any
 
 import tenacity
 
@@ -51,9 +51,9 @@ class PowerBITrigger(BaseTrigger):
     :param dataset_id: The dataset Id to refresh.
     :param dataset_refresh_id: The dataset refresh Id to poll for the status, if not provided a new refresh will be triggered.
     :param group_id: The workspace Id where dataset is located.
-    :param end_time: Time in seconds when trigger should stop polling.
     :param check_interval: Time in seconds to wait between each poll.
     :param wait_for_termination: Wait for the dataset refresh to complete or fail.
+    :param request_body: Additional arguments to pass to the request body, as described in https://learn.microsoft.com/en-us/rest/api/power-bi/datasets/refresh-dataset-in-group#request-body.
     """
 
     def __init__(
@@ -67,6 +67,7 @@ def __init__(
         api_version: APIVersion | str | None = None,
         check_interval: int = 60,
         wait_for_termination: bool = True,
+        request_body: dict[str, Any] | None = None,
     ):
         super().__init__()
         self.hook = PowerBIHook(conn_id=conn_id, proxies=proxies, api_version=api_version, timeout=timeout)
@@ -76,6 +77,7 @@ def __init__(
         self.group_id = group_id
         self.check_interval = check_interval
         self.wait_for_termination = wait_for_termination
+        self.request_body = request_body
 
     def serialize(self):
         """Serialize the trigger instance."""
@@ -91,6 +93,7 @@ def serialize(self):
                 "timeout": self.timeout,
                 "check_interval": self.check_interval,
                 "wait_for_termination": self.wait_for_termination,
+                "request_body": self.request_body,
             },
         )
 
@@ -113,6 +116,7 @@ async def run(self) -> AsyncIterator[TriggerEvent]:
             dataset_refresh_id = await self.hook.trigger_dataset_refresh(
                 dataset_id=self.dataset_id,
                 group_id=self.group_id,
+                request_body=self.request_body,
             )
 
             if dataset_refresh_id:
diff --git a/providers/microsoft/azure/tests/system/microsoft/azure/example_powerbi_dataset_refresh.py b/providers/microsoft/azure/tests/system/microsoft/azure/example_powerbi_dataset_refresh.py
index 5453caff6463b..b772405da8601 100644
--- a/providers/microsoft/azure/tests/system/microsoft/azure/example_powerbi_dataset_refresh.py
+++ b/providers/microsoft/azure/tests/system/microsoft/azure/example_powerbi_dataset_refresh.py
@@ -66,6 +66,12 @@ def create_connection(conn_id_name: str):
         group_id=GROUP_ID,
         check_interval=30,
         timeout=120,
+        request_body={
+            "type": "full",
+            "retryCount": 3,
+            "commitMode": "transactional",
+            "notifyOption": "MailOnFailure",
+        },
     )
     # [END howto_operator_powerbi_refresh_async]
 
diff --git a/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_powerbi.py b/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_powerbi.py
index 43794c43880f1..6d1bdddeef90c 100644
--- a/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_powerbi.py
+++ b/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_powerbi.py
@@ -39,6 +39,13 @@
 TASK_ID = "run_powerbi_operator"
 GROUP_ID = "group_id"
 DATASET_ID = "dataset_id"
+REQUEST_BODY = {
+    "type": "full",
+    "commitMode": "transactional",
+    "objects": [{"table": "Customer", "partition": "Robert"}],
+    "applyRefreshPolicy": "false",
+    "timeout": "05:00:00",
+}
 CONFIG = {
     "task_id": TASK_ID,
     "conn_id": DEFAULT_CONNECTION_CLIENT_SECRET,
@@ -46,6 +53,7 @@
     "dataset_id": DATASET_ID,
     "check_interval": 1,
     "timeout": 3,
+    "request_body": REQUEST_BODY,
 }
 NEW_REFRESH_REQUEST_ID = "5e2d9921-e91b-491f-b7e1-e7d8db49194c"
 
diff --git a/providers/microsoft/azure/tests/unit/microsoft/azure/triggers/test_powerbi.py b/providers/microsoft/azure/tests/unit/microsoft/azure/triggers/test_powerbi.py
index 950d707498e61..658b6e3046f3b 100644
--- a/providers/microsoft/azure/tests/unit/microsoft/azure/triggers/test_powerbi.py
+++ b/providers/microsoft/azure/tests/unit/microsoft/azure/triggers/test_powerbi.py
@@ -44,6 +44,13 @@
 TIMEOUT = 5
 MODULE = "airflow.providers.microsoft.azure"
 CHECK_INTERVAL = 1
+REQUEST_BODY = {
+    "type": "full",
+    "commitMode": "transactional",
+    "objects": [{"table": "Customer", "partition": "Robert"}],
+    "applyRefreshPolicy": "false",
+    "timeout": "05:00:00",
+}
 API_VERSION = "v1.0"
 
 
@@ -102,6 +109,7 @@ def test_powerbi_trigger_serialization(self, connection):
             check_interval=CHECK_INTERVAL,
             wait_for_termination=True,
             timeout=TIMEOUT,
+            request_body=REQUEST_BODY,
         )
 
         classpath, kwargs = powerbi_trigger.serialize()
@@ -116,6 +124,7 @@ def test_powerbi_trigger_serialization(self, connection):
             "api_version": API_VERSION,
             "check_interval": CHECK_INTERVAL,
             "wait_for_termination": True,
+            "request_body": REQUEST_BODY,
         }
 
     @pytest.mark.asyncio

From ccd79511cac606c59de88709d10f0a46fc68ad8e Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Wed, 25 Jun 2025 15:13:43 +0100
Subject: [PATCH 188/381] Remove db usage from http provider tests (#52227)

* Remove db usage from http provider tests

* Remove db usage from http provider tests

* Fix http hook tests

* Fix operators and triggers tests
---
 .../http/tests/unit/http/hooks/test_http.py   | 674 +++++++++---------
 .../tests/unit/http/operators/test_http.py    |  11 +-
 .../tests/unit/http/triggers/test_http.py     |  10 +-
 3 files changed, 348 insertions(+), 347 deletions(-)

diff --git a/providers/http/tests/unit/http/hooks/test_http.py b/providers/http/tests/unit/http/hooks/test_http.py
index 2bbf9f91ada7c..f3e9f8a81d059 100644
--- a/providers/http/tests/unit/http/hooks/test_http.py
+++ b/providers/http/tests/unit/http/hooks/test_http.py
@@ -71,9 +71,39 @@ def get_airflow_connection_with_login_and_password(conn_id: str = "http_default"
     return Connection(conn_id=conn_id, conn_type="http", host="test.com", login="username", password="pass")
 
 
+@pytest.fixture
+def setup_connections_with_extras(request, create_connection_without_db):
+    extra = request.param if hasattr(request, "param") else {}
+    create_connection_without_db(
+        Connection(
+            conn_id="http_conn_with_extras", conn_type="http", host="test:8080/", extra=json.dumps(extra)
+        )
+    )
+
+
 class TestHttpHook:
     """Test get, post and raise_for_status"""
 
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(
+                conn_id="http_default", conn_type="http", host="test:8080/", extra='{"bearer": "test"}'
+            )
+        )
+        create_connection_without_db(
+            Connection(conn_id="http_conn_without_bearer", conn_type="http", host="test.com", port=1234)
+        )
+        create_connection_without_db(
+            Connection(
+                conn_id="http_conn_with_user_pwd",
+                conn_type="http",
+                host="test.com",
+                login="username",
+                password="pass",
+            )
+        )
+
     def setup_method(self):
         import requests_mock
 
@@ -88,9 +118,8 @@ def test_raise_for_status_with_200(self, requests_mock):
         requests_mock.get(
             "http://test:8080/v1/test", status_code=200, text='{"status":{"status": 200}}', reason="OK"
         )
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection):
-            resp = self.get_hook.run("v1/test")
-            assert resp.text == '{"status":{"status": 200}}'
+        resp = self.get_hook.run("v1/test")
+        assert resp.text == '{"status":{"status": 200}}'
 
     def test_get_request_with_port(self, requests_mock):
         from requests.exceptions import MissingSchema
@@ -102,19 +131,17 @@ def test_get_request_with_port(self, requests_mock):
             reason="OK",
         )
 
-        with mock.patch(
-            "airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection_with_port
-        ):
-            expected_url = "http://test.com:1234/some/endpoint"
-            for endpoint in ["some/endpoint", "/some/endpoint"]:
-                with contextlib.suppress(MissingSchema):
-                    self.get_hook.run(endpoint)
+        expected_url = "http://test.com:1234/some/endpoint"
+        get_hook = HttpHook(method="GET", http_conn_id="http_conn_without_bearer")
+        for endpoint in ["some/endpoint", "/some/endpoint"]:
+            with contextlib.suppress(MissingSchema):
+                get_hook.run(endpoint)
 
-                assert requests_mock.call_count == 1
-                assert requests_mock.last_request.url == expected_url
-                assert requests_mock.last_request.method == "GET"
+            assert requests_mock.call_count == 1
+            assert requests_mock.last_request.url == expected_url
+            assert requests_mock.last_request.method == "GET"
 
-                requests_mock.reset()
+            requests_mock.reset()
 
     def test_get_request_do_not_raise_for_status_if_check_response_is_false(self, requests_mock):
         requests_mock.get(
@@ -123,15 +150,14 @@ def test_get_request_do_not_raise_for_status_if_check_response_is_false(self, re
             text='{"status":{"status": 404}}',
             reason="Bad request",
         )
+        resp = self.get_hook.run("v1/test", extra_options={"check_response": False})
+        assert resp.text == '{"status":{"status": 404}}'
 
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection):
-            resp = self.get_hook.run("v1/test", extra_options={"check_response": False})
-            assert resp.text == '{"status":{"status": 404}}'
-
+    # need to check last
+    @pytest.mark.parametrize("setup_connections_with_extras", [{"check_response": False}], indirect=True)
     def test_get_request_do_not_raise_for_status_if_check_response_is_false_in_connection(
-        self, requests_mock
+        self, setup_connections_with_extras, requests_mock
     ):
-        airflow_connection = get_airflow_connection_with_extra(extra={"check_response": False})
         requests_mock.get(
             "http://test:8080/v1/test",
             status_code=404,
@@ -139,95 +165,104 @@ def test_get_request_do_not_raise_for_status_if_check_response_is_false_in_conne
             reason="Bad request",
         )
 
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=airflow_connection):
-            resp = self.get_hook.run("v1/test")
-            assert resp.text == '{"status":{"status": 404}}'
+        get_hook = HttpHook(method="GET", http_conn_id="http_conn_with_extras")
+        resp = get_hook.run("v1/test")
+        assert resp.text == '{"status":{"status": 404}}'
 
     def test_hook_contains_header_from_extra_field(self):
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection):
-            expected_conn = get_airflow_connection()
-            conn = self.get_hook.get_conn()
-            assert dict(conn.headers, **json.loads(expected_conn.extra)) == conn.headers
-            assert conn.headers.get("bearer") == "test"
-
-    def test_hook_ignore_max_redirects_from_extra_field_as_header(self):
-        airflow_connection = get_airflow_connection_with_extra(extra={"bearer": "test", "max_redirects": 3})
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=airflow_connection):
-            expected_conn = airflow_connection()
-            conn = self.get_hook.get_conn()
-            assert dict(conn.headers, **json.loads(expected_conn.extra)) != conn.headers
-            assert conn.headers.get("bearer") == "test"
-            assert conn.headers.get("allow_redirects") is None
-            assert conn.proxies == {}
-            assert conn.stream is False
-            assert conn.verify is True
-            assert conn.cert is None
-            assert conn.max_redirects == 3
-            assert conn.trust_env is True
-
-    def test_hook_ignore_proxies_from_extra_field_as_header(self):
-        airflow_connection = get_airflow_connection_with_extra(
-            extra={"bearer": "test", "proxies": {"http": "http://proxy:80", "https": "https://proxy:80"}}
-        )
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=airflow_connection):
-            expected_conn = airflow_connection()
-            conn = self.get_hook.get_conn()
-            assert dict(conn.headers, **json.loads(expected_conn.extra)) != conn.headers
-            assert conn.headers.get("bearer") == "test"
-            assert conn.headers.get("proxies") is None
-            assert conn.proxies == {"http": "http://proxy:80", "https": "https://proxy:80"}
-            assert conn.stream is False
-            assert conn.verify is True
-            assert conn.cert is None
-            assert conn.max_redirects == DEFAULT_REDIRECT_LIMIT
-            assert conn.trust_env is True
-
-    def test_hook_ignore_verify_from_extra_field_as_header(self):
-        airflow_connection = get_airflow_connection_with_extra(extra={"bearer": "test", "verify": False})
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=airflow_connection):
-            expected_conn = airflow_connection()
-            conn = self.get_hook.get_conn()
-            assert dict(conn.headers, **json.loads(expected_conn.extra)) != conn.headers
-            assert conn.headers.get("bearer") == "test"
-            assert conn.headers.get("verify") is None
-            assert conn.proxies == {}
-            assert conn.stream is False
-            assert conn.verify is False
-            assert conn.cert is None
-            assert conn.max_redirects == DEFAULT_REDIRECT_LIMIT
-            assert conn.trust_env is True
-
-    def test_hook_ignore_cert_from_extra_field_as_header(self):
-        airflow_connection = get_airflow_connection_with_extra(
-            extra={"bearer": "test", "cert": "cert.crt", "stream": True}
+        conn = self.get_hook.get_conn()
+        assert dict(conn.headers, **{"bearer": "test"}) == conn.headers
+        assert conn.headers.get("bearer") == "test"
+
+    @pytest.mark.parametrize(
+        "setup_connections_with_extras", [{"bearer": "test", "max_redirects": 3}], indirect=True
+    )
+    def test_hook_ignore_max_redirects_from_extra_field_as_header(self, setup_connections_with_extras):
+        get_hook = HttpHook(method="GET", http_conn_id="http_conn_with_extras")
+        conn = get_hook.get_conn()
+        assert dict(conn.headers, **{"bearer": "test", "max_redirects": 3}) != conn.headers
+        assert conn.headers.get("bearer") == "test"
+        assert conn.headers.get("allow_redirects") is None
+        assert conn.proxies == {}
+        assert conn.stream is False
+        assert conn.verify is True
+        assert conn.cert is None
+        assert conn.max_redirects == 3
+        assert conn.trust_env is True
+
+    @pytest.mark.parametrize(
+        "setup_connections_with_extras",
+        [{"bearer": "test", "proxies": {"http": "http://proxy:80", "https": "https://proxy:80"}}],
+        indirect=True,
+    )
+    def test_hook_ignore_proxies_from_extra_field_as_header(self, setup_connections_with_extras):
+        get_hook = HttpHook(method="GET", http_conn_id="http_conn_with_extras")
+        conn = get_hook.get_conn()
+        assert (
+            dict(
+                conn.headers,
+                **{"bearer": "test", "proxies": {"http": "http://proxy:80", "https": "https://proxy:80"}},
+            )
+            != conn.headers
         )
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=airflow_connection):
-            expected_conn = airflow_connection()
-            conn = self.get_hook.get_conn()
-            assert dict(conn.headers, **json.loads(expected_conn.extra)) != conn.headers
-            assert conn.headers.get("bearer") == "test"
-            assert conn.headers.get("cert") is None
-            assert conn.proxies == {}
-            assert conn.stream is True
-            assert conn.verify is True
-            assert conn.cert == "cert.crt"
-            assert conn.max_redirects == DEFAULT_REDIRECT_LIMIT
-            assert conn.trust_env is True
-
-    def test_hook_ignore_trust_env_from_extra_field_as_header(self):
-        airflow_connection = get_airflow_connection_with_extra(extra={"bearer": "test", "trust_env": False})
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=airflow_connection):
-            expected_conn = airflow_connection()
-            conn = self.get_hook.get_conn()
-            assert dict(conn.headers, **json.loads(expected_conn.extra)) != conn.headers
-            assert conn.headers.get("bearer") == "test"
-            assert conn.headers.get("cert") is None
-            assert conn.proxies == {}
-            assert conn.stream is False
-            assert conn.verify is True
-            assert conn.cert is None
-            assert conn.max_redirects == DEFAULT_REDIRECT_LIMIT
-            assert conn.trust_env is False
+        assert conn.headers.get("bearer") == "test"
+        assert conn.headers.get("proxies") is None
+        assert conn.proxies == {"http": "http://proxy:80", "https": "https://proxy:80"}
+        assert conn.stream is False
+        assert conn.verify is True
+        assert conn.cert is None
+        assert conn.max_redirects == DEFAULT_REDIRECT_LIMIT
+        assert conn.trust_env is True
+
+    @pytest.mark.parametrize(
+        "setup_connections_with_extras", [{"bearer": "test", "verify": False}], indirect=True
+    )
+    def test_hook_ignore_verify_from_extra_field_as_header(self, setup_connections_with_extras):
+        get_hook = HttpHook(method="GET", http_conn_id="http_conn_with_extras")
+        conn = get_hook.get_conn()
+        assert dict(conn.headers, **{"bearer": "test", "verify": False}) != conn.headers
+        assert conn.headers.get("bearer") == "test"
+        assert conn.headers.get("verify") is None
+        assert conn.proxies == {}
+        assert conn.stream is False
+        assert conn.verify is False
+        assert conn.cert is None
+        assert conn.max_redirects == DEFAULT_REDIRECT_LIMIT
+        assert conn.trust_env is True
+
+    @pytest.mark.parametrize(
+        "setup_connections_with_extras",
+        [{"bearer": "test", "cert": "cert.crt", "stream": True}],
+        indirect=True,
+    )
+    def test_hook_ignore_cert_from_extra_field_as_header(self, setup_connections_with_extras):
+        get_hook = HttpHook(method="GET", http_conn_id="http_conn_with_extras")
+        conn = get_hook.get_conn()
+        assert dict(conn.headers, **{"bearer": "test", "cert": "cert.crt", "stream": True}) != conn.headers
+        assert conn.headers.get("bearer") == "test"
+        assert conn.headers.get("cert") is None
+        assert conn.proxies == {}
+        assert conn.stream is True
+        assert conn.verify is True
+        assert conn.cert == "cert.crt"
+        assert conn.max_redirects == DEFAULT_REDIRECT_LIMIT
+        assert conn.trust_env is True
+
+    @pytest.mark.parametrize(
+        "setup_connections_with_extras", [{"bearer": "test", "trust_env": False}], indirect=True
+    )
+    def test_hook_ignore_trust_env_from_extra_field_as_header(self, setup_connections_with_extras):
+        get_hook = HttpHook(method="GET", http_conn_id="http_conn_with_extras")
+        conn = get_hook.get_conn()
+        assert dict(conn.headers, **{"bearer": "test", "trust_env": False}) != conn.headers
+        assert conn.headers.get("bearer") == "test"
+        assert conn.headers.get("cert") is None
+        assert conn.proxies == {}
+        assert conn.stream is False
+        assert conn.verify is True
+        assert conn.cert is None
+        assert conn.max_redirects == DEFAULT_REDIRECT_LIMIT
+        assert conn.trust_env is False
 
     def test_hook_with_method_in_lowercase(self, requests_mock):
         from requests.exceptions import InvalidURL, MissingSchema
@@ -238,41 +273,35 @@ def test_hook_with_method_in_lowercase(self, requests_mock):
             text='{"status":{"status": 200}}',
             reason="OK",
         )
+        get_lowercase_hook = HttpHook(method="get", http_conn_id="http_conn_without_bearer")
+        data = "test params"
+        with contextlib.suppress(MissingSchema, InvalidURL):
+            get_lowercase_hook.run("v1/test", data=data)
 
-        with mock.patch(
-            "airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection_with_port
-        ):
-            data = "test params"
-            with contextlib.suppress(MissingSchema, InvalidURL):
-                self.get_lowercase_hook.run("v1/test", data=data)
+        assert requests_mock.call_count == 1
+        assert requests_mock.last_request.url == "http://test.com:1234/v1/test?test%20params"
+        assert requests_mock.last_request.method == "GET"
 
-            assert requests_mock.call_count == 1
-            assert requests_mock.last_request.url == "http://test.com:1234/v1/test?test%20params"
-            assert requests_mock.last_request.method == "GET"
-
-    @pytest.mark.db_test
     def test_hook_uses_provided_header(self):
         conn = self.get_hook.get_conn(headers={"bearer": "newT0k3n"})
         assert conn.headers.get("bearer") == "newT0k3n"
 
-    @pytest.mark.db_test
     def test_hook_has_no_header_from_extra(self):
+        self.get_hook.http_conn_id = "http_conn_without_bearer"
         conn = self.get_hook.get_conn()
         assert conn.headers.get("bearer") is None
 
     def test_hooks_header_from_extra_is_overridden(self):
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection):
-            conn = self.get_hook.get_conn(headers={"bearer": "newT0k3n"})
-            assert conn.headers.get("bearer") == "newT0k3n"
+        conn = self.get_hook.get_conn(headers={"bearer": "newT0k3n"})
+        assert conn.headers.get("bearer") == "newT0k3n"
 
     def test_post_request(self, requests_mock):
         requests_mock.post(
             "http://test:8080/v1/test", status_code=200, text='{"status":{"status": 200}}', reason="OK"
         )
 
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection):
-            resp = self.post_hook.run("v1/test")
-            assert resp.status_code == 200
+        resp = self.post_hook.run("v1/test")
+        assert resp.status_code == 200
 
     def test_post_request_with_error_code(self, requests_mock):
         requests_mock.post(
@@ -281,10 +310,8 @@ def test_post_request_with_error_code(self, requests_mock):
             text='{"status":{"status": 418}}',
             reason="I'm a teapot",
         )
-
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection):
-            with pytest.raises(AirflowException):
-                self.post_hook.run("v1/test")
+        with pytest.raises(AirflowException):
+            self.post_hook.run("v1/test")
 
     def test_post_request_do_not_raise_for_status_if_check_response_is_false(self, requests_mock):
         requests_mock.post(
@@ -294,9 +321,8 @@ def test_post_request_do_not_raise_for_status_if_check_response_is_false(self, r
             reason="I'm a teapot",
         )
 
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection):
-            resp = self.post_hook.run("v1/test", extra_options={"check_response": False})
-            assert resp.status_code == 418
+        resp = self.post_hook.run("v1/test", extra_options={"check_response": False})
+        assert resp.status_code == 418
 
     def test_post_request_raises_error_when_redirects_with_max_redirects_set_to_0(self, requests_mock):
         requests_mock.post(
@@ -310,37 +336,31 @@ def test_post_request_raises_error_when_redirects_with_max_redirects_set_to_0(se
             status_code=200,
             text='{"message": "OK"}',
         )
+        with pytest.raises(requests.exceptions.TooManyRedirects) as err:
+            self.post_hook.run("v1/test", extra_options={"max_redirects": 0})
 
-        with mock.patch(
-            "airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_dummy_connection
-        ):
-            with pytest.raises(requests.exceptions.TooManyRedirects) as err:
-                self.post_hook.run("v1/test", extra_options={"max_redirects": 0})
-
-            assert str(err.value) == "Exceeded 0 redirects."
-            history = requests_mock.request_history
-            assert len(history) == 1
-            assert history[0].url == "http://test:8080/v1/test"
-            assert history[0].method == "POST"
+        assert str(err.value) == "Exceeded 0 redirects."
+        history = requests_mock.request_history
+        assert len(history) == 1
+        assert history[0].url == "http://test:8080/v1/test"
+        assert history[0].method == "POST"
 
+    @pytest.mark.parametrize(
+        "setup_connections_with_extras", [{"bearer": "test", "check_response": False}], indirect=True
+    )
     def test_post_request_do_not_raise_for_status_if_check_response_is_false_within_extra(
-        self, requests_mock
+        self, setup_connections_with_extras, requests_mock
     ):
-        airflow_connection = get_airflow_connection_with_extra(
-            extra={"bearer": "test", "check_response": False}
-        )
         requests_mock.post(
             "http://test:8080/v1/test",
             status_code=418,
             text='{"status":{"status": 418}}',
             reason="I'm a teapot",
         )
+        post_hook = HttpHook(method="POST", http_conn_id="http_conn_with_extras")
+        resp = post_hook.run("v1/test")
+        assert resp.status_code == 418
 
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=airflow_connection):
-            resp = self.post_hook.run("v1/test")
-            assert resp.status_code == 418
-
-    @pytest.mark.db_test
     @mock.patch("requests.Session.send")
     def test_retry_on_conn_error(self, mock_session_send):
         retry_args = dict(
@@ -367,9 +387,8 @@ def test_run_with_advanced_retry(self, requests_mock):
             retry=tenacity.retry_if_exception_type(Exception),
             reraise=True,
         )
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection):
-            response = self.get_hook.run_with_advanced_retry(endpoint="v1/test", _retry_args=retry_args)
-            assert isinstance(response, requests.Response)
+        response = self.get_hook.run_with_advanced_retry(endpoint="v1/test", _retry_args=retry_args)
+        assert isinstance(response, requests.Response)
 
     def test_header_from_extra_and_run_method_are_merged(self):
         def run_and_return(unused_session, prepped_request, unused_extra_options, **kwargs):
@@ -379,11 +398,10 @@ def run_and_return(unused_session, prepped_request, unused_extra_options, **kwar
         with mock.patch(
             "airflow.providers.http.hooks.http.HttpHook.run_and_check", side_effect=run_and_return
         ):
-            with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection):
-                prepared_request = self.get_hook.run("v1/test", headers={"some_other_header": "test"})
-                actual = dict(prepared_request.headers)
-                assert actual.get("bearer") == "test"
-                assert actual.get("some_other_header") == "test"
+            prepared_request = self.get_hook.run("v1/test", headers={"some_other_header": "test"})
+            actual = dict(prepared_request.headers)
+            assert actual.get("bearer") == "test"
+            assert actual.get("some_other_header") == "test"
 
     @mock.patch("airflow.providers.http.hooks.http.HttpHook.get_connection")
     def test_http_connection(self, mock_get_connection):
@@ -448,137 +466,112 @@ def match_obj1(request):
 
         requests_mock.request(method=method, url="//test:8080/v1/test", additional_matcher=match_obj1)
 
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection):
-            # will raise NoMockAddress exception if obj1 != request.json()
-            HttpHook(method=method).run("v1/test", json=obj1)
+        # will raise NoMockAddress exception if obj1 != request.json()
+        HttpHook(method=method).run("v1/test", json=obj1)
 
     @mock.patch("requests.Session.send")
     def test_verify_set_to_true_by_default(self, mock_session_send):
-        with mock.patch(
-            "airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection_with_port
-        ):
-            self.get_hook.run("/some/endpoint")
-            mock_session_send.assert_called_once_with(
-                mock.ANY,
-                allow_redirects=True,
-                cert=None,
-                proxies={},
-                stream=False,
-                timeout=None,
-                verify=True,
-            )
+        self.get_hook.run("/some/endpoint")
+        mock_session_send.assert_called_once_with(
+            mock.ANY,
+            allow_redirects=True,
+            cert=None,
+            proxies={},
+            stream=False,
+            timeout=None,
+            verify=True,
+        )
 
     @mock.patch("requests.Session.send")
     @mock.patch.dict(os.environ, {"REQUESTS_CA_BUNDLE": "/tmp/test.crt"})
     def test_requests_ca_bundle_env_var(self, mock_session_send):
-        with mock.patch(
-            "airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection_with_port
-        ):
-            self.get_hook.run("/some/endpoint")
-
-            mock_session_send.assert_called_once_with(
-                mock.ANY,
-                allow_redirects=True,
-                cert=None,
-                proxies={},
-                stream=False,
-                timeout=None,
-                verify="/tmp/test.crt",
-            )
+        self.get_hook.run("/some/endpoint")
+
+        mock_session_send.assert_called_once_with(
+            mock.ANY,
+            allow_redirects=True,
+            cert=None,
+            proxies={},
+            stream=False,
+            timeout=None,
+            verify="/tmp/test.crt",
+        )
 
     @mock.patch("requests.Session.send")
     @mock.patch.dict(os.environ, {"REQUESTS_CA_BUNDLE": "/tmp/test.crt"})
     def test_verify_respects_requests_ca_bundle_env_var(self, mock_session_send):
-        with mock.patch(
-            "airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection_with_port
-        ):
-            self.get_hook.run("/some/endpoint", extra_options={"verify": True})
-
-            mock_session_send.assert_called_once_with(
-                mock.ANY,
-                allow_redirects=True,
-                cert=None,
-                proxies={},
-                stream=False,
-                timeout=None,
-                verify="/tmp/test.crt",
-            )
+        self.get_hook.run("/some/endpoint", extra_options={"verify": True})
+
+        mock_session_send.assert_called_once_with(
+            mock.ANY,
+            allow_redirects=True,
+            cert=None,
+            proxies={},
+            stream=False,
+            timeout=None,
+            verify="/tmp/test.crt",
+        )
 
     @mock.patch("requests.Session.send")
     @mock.patch.dict(os.environ, {"REQUESTS_CA_BUNDLE": "/tmp/test.crt"})
     def test_verify_false_parameter_overwrites_set_requests_ca_bundle_env_var(self, mock_session_send):
-        with mock.patch(
-            "airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection_with_port
-        ):
-            self.get_hook.run("/some/endpoint", extra_options={"verify": False})
-
-            mock_session_send.assert_called_once_with(
-                mock.ANY,
-                allow_redirects=True,
-                cert=None,
-                proxies={},
-                stream=False,
-                timeout=None,
-                verify=False,
-            )
+        self.get_hook.run("/some/endpoint", extra_options={"verify": False})
+
+        mock_session_send.assert_called_once_with(
+            mock.ANY,
+            allow_redirects=True,
+            cert=None,
+            proxies={},
+            stream=False,
+            timeout=None,
+            verify=False,
+        )
 
     def test_connection_success(self, requests_mock):
         requests_mock.get("http://test:8080", status_code=200, json={"status": {"status": 200}}, reason="OK")
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection):
-            status, msg = self.get_hook.test_connection()
-            assert status is True
-            assert msg == "Connection successfully tested"
+        status, msg = self.get_hook.test_connection()
+        assert status is True
+        assert msg == "Connection successfully tested"
 
     def test_connection_failure(self, requests_mock):
         requests_mock.get(
             "http://test:8080", status_code=500, json={"message": "internal server error"}, reason="NOT_OK"
         )
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection):
-            status, msg = self.get_hook.test_connection()
-            assert status is False
-            assert msg == "500:NOT_OK"
+        status, msg = self.get_hook.test_connection()
+        assert status is False
+        assert msg == "500:NOT_OK"
 
     @mock.patch("requests.auth.AuthBase.__init__")
     def test_loginless_custom_auth_initialized_with_no_args(self, auth):
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection):
-            auth.return_value = None
-            hook = HttpHook("GET", "http_default", AuthBase)
-            hook.get_conn()
-            auth.assert_called_once_with()
+        auth.return_value = None
+        hook = HttpHook("GET", "http_default", AuthBase)
+        hook.get_conn()
+        auth.assert_called_once_with()
 
     @mock.patch("requests.auth.AuthBase.__init__")
     def test_loginless_custom_auth_initialized_with_args(self, auth):
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection):
-            auth.return_value = None
-            auth_with_args = functools.partial(AuthBase, "test_arg")
-            hook = HttpHook("GET", "http_default", auth_with_args)
-            hook.get_conn()
-            auth.assert_called_once_with("test_arg")
+        auth.return_value = None
+        auth_with_args = functools.partial(AuthBase, "test_arg")
+        hook = HttpHook("GET", "http_default", auth_with_args)
+        hook.get_conn()
+        auth.assert_called_once_with("test_arg")
 
     @mock.patch("requests.auth.HTTPBasicAuth.__init__")
     def test_login_password_basic_auth_initialized(self, auth):
-        with mock.patch(
-            "airflow.hooks.base.BaseHook.get_connection",
-            side_effect=get_airflow_connection_with_login_and_password,
-        ):
-            auth.return_value = None
-            hook = HttpHook("GET", "http_default", HTTPBasicAuth)
-            hook.get_conn()
-            auth.assert_called_once_with("username", "pass")
+        auth.return_value = None
+        hook = HttpHook("GET", "http_conn_with_user_pwd", HTTPBasicAuth)
+        hook.get_conn()
+        auth.assert_called_once_with("username", "pass")
 
     @mock.patch("requests.auth.HTTPBasicAuth.__init__")
     def test_default_auth_not_initialized(self, auth):
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection):
-            auth.return_value = None
-            hook = HttpHook("GET", "http_default")
-            hook.get_conn()
-            auth.assert_not_called()
+        auth.return_value = None
+        hook = HttpHook("GET", "http_default")
+        hook.get_conn()
+        auth.assert_not_called()
 
     def test_keep_alive_enabled(self):
         with (
-            mock.patch(
-                "airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection_with_port
-            ),
             mock.patch(
                 "requests_toolbelt.adapters.socket_options.TCPKeepAliveAdapter.send"
             ) as tcp_keep_alive_send,
@@ -595,9 +588,6 @@ def test_keep_alive_enabled(self):
 
     def test_keep_alive_disabled(self):
         with (
-            mock.patch(
-                "airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection_with_port
-            ),
             mock.patch(
                 "requests_toolbelt.adapters.socket_options.TCPKeepAliveAdapter.send"
             ) as tcp_keep_alive_send,
@@ -625,18 +615,15 @@ def test_url_from_endpoint(self, base_url: str, endpoint: str, expected_url: str
         assert hook.url_from_endpoint(endpoint) == expected_url
 
     def test_custom_adapter(self):
-        with mock.patch(
-            "airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection_with_port
-        ):
-            custom_adapter = HTTPAdapter()
-            hook = HttpHook(method="GET", adapter=custom_adapter)
-            session = hook.get_conn()
-            assert isinstance(session.adapters["http://"], type(custom_adapter)), (
-                "Custom HTTP adapter not correctly mounted"
-            )
-            assert isinstance(session.adapters["https://"], type(custom_adapter)), (
-                "Custom HTTPS adapter not correctly mounted"
-            )
+        custom_adapter = HTTPAdapter()
+        hook = HttpHook(method="GET", adapter=custom_adapter)
+        session = hook.get_conn()
+        assert isinstance(session.adapters["http://"], type(custom_adapter)), (
+            "Custom HTTP adapter not correctly mounted"
+        )
+        assert isinstance(session.adapters["https://"], type(custom_adapter)), (
+            "Custom HTTPS adapter not correctly mounted"
+        )
 
     def test_process_extra_options_from_connection(self):
         extra_options = {}
@@ -671,6 +658,15 @@ def test_process_extra_options_from_connection(self):
 
 
 class TestHttpAsyncHook:
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(
+                conn_id="http_default", conn_type="http", host="test:8080/", extra='{"bearer": "test"}'
+            )
+        )
+        create_connection_without_db(Connection(conn_id="http_empty_conn", conn_type="http"))
+
     @pytest.mark.asyncio
     async def test_do_api_call_async_non_retryable_error(self, aioresponse):
         """Test api call asynchronously with non retryable error."""
@@ -706,7 +702,6 @@ async def test_do_api_call_async_retryable_error(self, caplog, aioresponse):
 
         assert "[Try 3 of 3] Request to http://httpbin.org/non_existent_endpoint failed" in caplog.text
 
-    @pytest.mark.db_test
     @pytest.mark.asyncio
     async def test_do_api_call_async_unknown_method(self):
         """Test api call asynchronously for unknown http method."""
@@ -729,11 +724,9 @@ async def test_async_post_request(self):
                 payload='{"status":{"status": 200}}',
                 reason="OK",
             )
-
-            with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection):
-                async with aiohttp.ClientSession() as session:
-                    resp = await hook.run(session=session, endpoint="v1/test")
-                    assert resp.status == 200
+            async with aiohttp.ClientSession() as session:
+                resp = await hook.run(session=session, endpoint="v1/test")
+                assert resp.status == 200
 
     @pytest.mark.asyncio
     async def test_async_post_request_with_error_code(self):
@@ -747,11 +740,9 @@ async def test_async_post_request_with_error_code(self):
                 payload='{"status":{"status": 418}}',
                 reason="I am teapot",
             )
-
-            with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection):
-                async with aiohttp.ClientSession() as session:
-                    with pytest.raises(AirflowException):
-                        await hook.run(session=session, endpoint="v1/test")
+            async with aiohttp.ClientSession() as session:
+                with pytest.raises(AirflowException):
+                    await hook.run(session=session, endpoint="v1/test")
 
     @pytest.mark.asyncio
     async def test_async_request_uses_connection_extra(self):
@@ -767,88 +758,84 @@ async def test_async_request_uses_connection_extra(self):
                 reason="OK",
             )
 
-            with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection):
-                hook = HttpAsyncHook()
-                with mock.patch("aiohttp.ClientSession.post", new_callable=mock.AsyncMock) as mocked_function:
-                    async with aiohttp.ClientSession() as session:
-                        await hook.run(session=session, endpoint="v1/test")
-                        headers = mocked_function.call_args.kwargs.get("headers")
-                        assert all(
-                            key in headers and headers[key] == value
-                            for key, value in connection_extra.items()
-                        )
+            hook = HttpAsyncHook()
+            with mock.patch("aiohttp.ClientSession.post", new_callable=mock.AsyncMock) as mocked_function:
+                async with aiohttp.ClientSession() as session:
+                    await hook.run(session=session, endpoint="v1/test")
+                    headers = mocked_function.call_args.kwargs.get("headers")
+                    assert all(
+                        key in headers and headers[key] == value for key, value in connection_extra.items()
+                    )
 
     @pytest.mark.asyncio
-    async def test_async_request_uses_connection_extra_with_requests_parameters(self):
+    @pytest.mark.parametrize(
+        "setup_connections_with_extras",
+        [
+            {
+                "bearer": "test",
+                "proxies": {"http": "http://proxy:80", "https": "https://proxy:80"},
+                "timeout": 60,
+                "verify": False,
+                "allow_redirects": False,
+                "max_redirects": 3,
+                "trust_env": False,
+            }
+        ],
+        indirect=True,
+    )
+    async def test_async_request_uses_connection_extra_with_requests_parameters(
+        self, setup_connections_with_extras
+    ):
         """Test api call asynchronously with a connection that has extra field."""
         connection_extra = {"bearer": "test"}
         proxy = {"http": "http://proxy:80", "https": "https://proxy:80"}
-        airflow_connection = get_airflow_connection_with_extra(
-            extra={
-                **connection_extra,
-                **{
-                    "proxies": proxy,
-                    "timeout": 60,
-                    "verify": False,
-                    "allow_redirects": False,
-                    "max_redirects": 3,
-                    "trust_env": False,
-                },
-            }
-        )
 
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=airflow_connection):
-            hook = HttpAsyncHook()
+        hook = HttpAsyncHook(http_conn_id="http_conn_with_extras")
 
-            with aioresponses() as m:
-                m.post(
-                    "http://test:8080/v1/test",
-                    status=200,
-                    payload='{"status":{"status": 200}}',
-                    reason="OK",
-                )
-
-                with mock.patch("aiohttp.ClientSession.post", new_callable=mock.AsyncMock) as mocked_function:
-                    async with aiohttp.ClientSession() as session:
-                        await hook.run(session=session, endpoint="v1/test")
-                        headers = mocked_function.call_args.kwargs.get("headers")
-                        assert all(
-                            key in headers and headers[key] == value
-                            for key, value in connection_extra.items()
-                        )
-                        assert mocked_function.call_args.kwargs.get("proxy") == proxy
-                        assert mocked_function.call_args.kwargs.get("timeout") == 60
-                        assert mocked_function.call_args.kwargs.get("verify_ssl") is False
-                        assert mocked_function.call_args.kwargs.get("allow_redirects") is False
-                        assert mocked_function.call_args.kwargs.get("max_redirects") == 3
-                        assert mocked_function.call_args.kwargs.get("trust_env") is False
+        with aioresponses() as m:
+            m.post(
+                "http://test:8080/v1/test",
+                status=200,
+                payload='{"status":{"status": 200}}',
+                reason="OK",
+            )
+
+            with mock.patch("aiohttp.ClientSession.post", new_callable=mock.AsyncMock) as mocked_function:
+                async with aiohttp.ClientSession() as session:
+                    await hook.run(session=session, endpoint="v1/test")
+                    headers = mocked_function.call_args.kwargs.get("headers")
+                    assert all(
+                        key in headers and headers[key] == value for key, value in connection_extra.items()
+                    )
+                    assert mocked_function.call_args.kwargs.get("proxy") == proxy
+                    assert mocked_function.call_args.kwargs.get("timeout") == 60
+                    assert mocked_function.call_args.kwargs.get("verify_ssl") is False
+                    assert mocked_function.call_args.kwargs.get("allow_redirects") is False
+                    assert mocked_function.call_args.kwargs.get("max_redirects") == 3
+                    assert mocked_function.call_args.kwargs.get("trust_env") is False
 
     @pytest.mark.asyncio
     async def test_build_request_url_from_connection(self):
         conn = get_airflow_connection()
         schema = conn.schema or "http"  # default to http
-        with mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=get_airflow_connection):
-            hook = HttpAsyncHook()
+        hook = HttpAsyncHook()
 
-            with aioresponses() as m:
-                m.post(
-                    f"{schema}://test:8080/v1/test",
-                    status=200,
-                    payload='{"status":{"status": 200}}',
-                    reason="OK",
-                )
+        with aioresponses() as m:
+            m.post(
+                f"{schema}://test:8080/v1/test",
+                status=200,
+                payload='{"status":{"status": 200}}',
+                reason="OK",
+            )
 
-            with mock.patch("aiohttp.ClientSession.post", new_callable=mock.AsyncMock) as mocked_function:
-                async with aiohttp.ClientSession() as session:
-                    await hook.run(session=session, endpoint="v1/test")
-                    assert mocked_function.call_args.args[0] == f"{schema}://{conn.host}v1/test"
+        with mock.patch("aiohttp.ClientSession.post", new_callable=mock.AsyncMock) as mocked_function:
+            async with aiohttp.ClientSession() as session:
+                await hook.run(session=session, endpoint="v1/test")
+                assert mocked_function.call_args.args[0] == f"{schema}://{conn.host}v1/test"
 
     @pytest.mark.asyncio
     async def test_build_request_url_from_endpoint_param(self):
-        def get_empty_conn(conn_id: str = "http_default"):
-            return Connection(conn_id=conn_id, conn_type="http")
-
-        hook = HttpAsyncHook()
+        hook = HttpAsyncHook(http_conn_id="http_empty_conn")
 
         with aioresponses() as m:
             m.post(
@@ -856,7 +843,6 @@ def get_empty_conn(conn_id: str = "http_default"):
             )
 
             with (
-                mock.patch("airflow.hooks.base.BaseHook.get_connection", side_effect=get_empty_conn),
                 mock.patch("aiohttp.ClientSession.post", new_callable=mock.AsyncMock) as mocked_function,
             ):
                 async with aiohttp.ClientSession() as session:
diff --git a/providers/http/tests/unit/http/operators/test_http.py b/providers/http/tests/unit/http/operators/test_http.py
index 31be860cef6c0..3a06fdca4dbab 100644
--- a/providers/http/tests/unit/http/operators/test_http.py
+++ b/providers/http/tests/unit/http/operators/test_http.py
@@ -33,6 +33,7 @@
 
 from airflow.exceptions import AirflowException, TaskDeferred
 from airflow.hooks import base
+from airflow.models import Connection
 from airflow.providers.http.hooks.http import HttpHook
 from airflow.providers.http.operators.http import HttpOperator
 from airflow.providers.http.triggers.http import HttpTrigger, serialize_auth_type
@@ -40,6 +41,14 @@
 
 @mock.patch.dict("os.environ", AIRFLOW_CONN_HTTP_EXAMPLE="http://www.example.com")
 class TestHttpOperator:
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(
+                conn_id="http_default", conn_type="http", host="test:8080/", extra='{"bearer": "test"}'
+            )
+        )
+
     def test_response_in_logs(self, requests_mock):
         """
         Test that when using HttpOperator with 'GET',
@@ -95,7 +104,6 @@ def test_filters_response(self, requests_mock):
         result = operator.execute({})
         assert result == {"value": 5}
 
-    @pytest.mark.db_test
     def test_async_defer_successfully(self, requests_mock):
         operator = HttpOperator(
             task_id="test_HTTP_op",
@@ -190,7 +198,6 @@ def pagination_function(response: Response) -> dict | None:
 
         assert result == [5, 10]
 
-    @pytest.mark.db_test
     def test_async_pagination(self, requests_mock):
         """
         Test that the HttpOperator calls asynchronously and repetitively
diff --git a/providers/http/tests/unit/http/triggers/test_http.py b/providers/http/tests/unit/http/triggers/test_http.py
index 8af78149b24a7..e2e6a9c5a95c8 100644
--- a/providers/http/tests/unit/http/triggers/test_http.py
+++ b/providers/http/tests/unit/http/triggers/test_http.py
@@ -30,6 +30,7 @@
 from requests.structures import CaseInsensitiveDict
 from yarl import URL
 
+from airflow.models import Connection
 from airflow.providers.http.triggers.http import HttpSensorTrigger, HttpTrigger
 from airflow.triggers.base import TriggerEvent
 
@@ -83,6 +84,14 @@ def client_response():
 
 
 class TestHttpTrigger:
+    @pytest.fixture(autouse=True)
+    def setup_connections(self, create_connection_without_db):
+        create_connection_without_db(
+            Connection(
+                conn_id="http_default", conn_type="http", host="test:8080/", extra='{"bearer": "test"}'
+            )
+        )
+
     @staticmethod
     def _mock_run_result(result_to_mock):
         f = Future()
@@ -151,7 +160,6 @@ async def test_convert_response(self, client_response):
         assert response.reason == client_response.reason
         assert dict(response.cookies) == dict(client_response.cookies)
 
-    @pytest.mark.db_test
     @pytest.mark.asyncio
     @mock.patch("aiohttp.client.ClientSession.post")
     async def test_trigger_on_post_with_data(self, mock_http_post, trigger):

From b95a5382cb61a74e263c7e42c4932649aabe3bad Mon Sep 17 00:00:00 2001
From: Ankit Chaurasia <8670962+sunank200@users.noreply.github.com>
Date: Wed, 25 Jun 2025 20:02:13 +0545
Subject: [PATCH 189/381] Document taskflow decorators and fix setup/teardown
 docstrings (#52181)

---
 task-sdk/docs/api.rst                         |  9 +++++++
 .../definitions/decorators/setup_teardown.py  | 25 +++++++++++++++++++
 2 files changed, 34 insertions(+)

diff --git a/task-sdk/docs/api.rst b/task-sdk/docs/api.rst
index 8605b234792a6..8c6fc526b5f5f 100644
--- a/task-sdk/docs/api.rst
+++ b/task-sdk/docs/api.rst
@@ -33,6 +33,15 @@ Decorators
 .. autoapifunction:: airflow.sdk.dag
 .. autoapifunction:: airflow.sdk.task
 
+Task Decorators:
+
+- ``@task.run_if(condition, skip_message=None)``
+  Run the task only if the given condition is met; otherwise the task is skipped.  The condition is a callable
+  that receives the task execution context and returns either a boolean or a tuple ``(bool, message)``.
+- ``@task.skip_if(condition, skip_message=None)``
+  Skip the task if the given condition is met, raising a skip exception with an optional message.
+- Provider-specific task decorators under ``@task.<provider>``, e.g. ``@task.python``, ``@task.docker``, etc., dynamically loaded from registered providers.
+
 .. autoapifunction:: airflow.sdk.task_group
 
 .. autoapifunction:: airflow.sdk.setup
diff --git a/task-sdk/src/airflow/sdk/definitions/decorators/setup_teardown.py b/task-sdk/src/airflow/sdk/definitions/decorators/setup_teardown.py
index 8df62d12aaadb..c53a84ea71bc8 100644
--- a/task-sdk/src/airflow/sdk/definitions/decorators/setup_teardown.py
+++ b/task-sdk/src/airflow/sdk/definitions/decorators/setup_teardown.py
@@ -35,6 +35,18 @@
 
 
 def setup_task(func: Callable) -> Callable:
+    """
+    Decorate a function to mark it as a setup task.
+
+    A setup task runs before all other tasks in its DAG or TaskGroup context
+    and can perform initialization or resource preparation.
+
+    Example::
+
+        @setup
+        def initialize_context(...):
+            ...
+    """
     # Using FunctionType here since _TaskDecorator is also a callable
     if isinstance(func, types.FunctionType):
         func = python_task(func)
@@ -45,6 +57,19 @@ def setup_task(func: Callable) -> Callable:
 
 
 def teardown_task(_func=None, *, on_failure_fail_dagrun: bool = False) -> Callable:
+    """
+    Decorate a function to mark it as a teardown task.
+
+    A teardown task runs after all main tasks in its DAG or TaskGroup context.
+    If ``on_failure_fail_dagrun=True``, a failure in teardown will mark the DAG run as failed.
+
+    Example::
+
+        @teardown(on_failure_fail_dagrun=True)
+        def cleanup(...):
+            ...
+    """
+
     def teardown(func: Callable) -> Callable:
         # Using FunctionType here since _TaskDecorator is also a callable
         if isinstance(func, types.FunctionType):

From 42cba9b2759cef2c5326a9128c6440fec2a755ef Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Wed, 25 Jun 2025 19:59:48 +0530
Subject: [PATCH 190/381] Move `EdgeInfoType` to Task SDK (#52180)

This is an internal class -- moving it where it belongs. Doesn't need newsfragment.
---
 airflow-core/src/airflow/utils/types.py       | 8 +-------
 task-sdk/src/airflow/sdk/definitions/dag.py   | 3 +--
 task-sdk/src/airflow/sdk/definitions/edges.py | 8 +++++++-
 3 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/airflow-core/src/airflow/utils/types.py b/airflow-core/src/airflow/utils/types.py
index 28822919e382e..de50f46eb7e17 100644
--- a/airflow-core/src/airflow/utils/types.py
+++ b/airflow-core/src/airflow/utils/types.py
@@ -17,7 +17,7 @@
 from __future__ import annotations
 
 import enum
-from typing import TYPE_CHECKING, TypedDict
+from typing import TYPE_CHECKING
 
 import airflow.sdk.definitions._internal.types
 
@@ -57,12 +57,6 @@ def from_run_id(run_id: str) -> DagRunType:
         return DagRunType.MANUAL
 
 
-class EdgeInfoType(TypedDict):
-    """Extra metadata that the DAG can store about an edge, usually generated from an EdgeModifier."""
-
-    label: str | None
-
-
 class DagRunTriggeredByType(enum.Enum):
     """Class with TriggeredBy types for DagRun."""
 
diff --git a/task-sdk/src/airflow/sdk/definitions/dag.py b/task-sdk/src/airflow/sdk/definitions/dag.py
index 11c419cef04d4..555207444db2e 100644
--- a/task-sdk/src/airflow/sdk/definitions/dag.py
+++ b/task-sdk/src/airflow/sdk/definitions/dag.py
@@ -76,10 +76,9 @@
 
     from airflow.sdk.definitions.abstractoperator import Operator
     from airflow.sdk.definitions.decorators import TaskDecoratorCollection
+    from airflow.sdk.definitions.edges import EdgeInfoType
     from airflow.sdk.definitions.taskgroup import TaskGroup
     from airflow.typing_compat import Self
-    from airflow.utils.types import EdgeInfoType
-
 
 log = logging.getLogger(__name__)
 
diff --git a/task-sdk/src/airflow/sdk/definitions/edges.py b/task-sdk/src/airflow/sdk/definitions/edges.py
index 4bc620645dc4a..39fafc4b932c8 100644
--- a/task-sdk/src/airflow/sdk/definitions/edges.py
+++ b/task-sdk/src/airflow/sdk/definitions/edges.py
@@ -17,7 +17,7 @@
 from __future__ import annotations
 
 from collections.abc import Sequence
-from typing import TYPE_CHECKING
+from typing import TYPE_CHECKING, TypedDict
 
 from airflow.sdk.definitions._internal.mixins import DependencyMixin
 
@@ -187,3 +187,9 @@ def add_edge_info(self, dag: DAG, upstream_id: str, downstream_id: str):
 def Label(label: str):
     """Create an EdgeModifier that sets a human-readable label on the edge."""
     return EdgeModifier(label=label)
+
+
+class EdgeInfoType(TypedDict):
+    """Extra metadata that the DAG can store about an edge, usually generated from an EdgeModifier."""
+
+    label: str | None

From 84a3acb05f693c88b9874e82775654d72bfb9e16 Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Wed, 25 Jun 2025 20:59:39 +0530
Subject: [PATCH 191/381] Add deprecation to `airflow/sensors/base.py` (#52249)

---
 airflow-core/src/airflow/sensors/__init__.py  |  6 ++++-
 airflow-core/src/airflow/sensors/base.py      | 24 -------------------
 .../databricks/sensors/databricks.py          |  4 ++--
 .../providers/dbt/cloud/sensors/dbt.py        |  7 +++++-
 .../http/tests/unit/http/sensors/test_http.py |  6 ++++-
 .../microsoft/azure/sensors/data_factory.py   |  7 +++++-
 .../providers/standard/sensors/bash.py        |  7 +++++-
 .../providers/standard/sensors/date_time.py   |  6 ++++-
 .../standard/sensors/external_task.py         |  2 +-
 .../providers/standard/sensors/filesystem.py  |  7 +++++-
 .../providers/standard/sensors/python.py      |  7 +++++-
 .../providers/standard/sensors/time.py        |  7 +++++-
 .../providers/standard/sensors/time_delta.py  | 10 +++++---
 .../providers/standard/sensors/weekday.py     |  7 +++++-
 14 files changed, 67 insertions(+), 40 deletions(-)
 delete mode 100644 airflow-core/src/airflow/sensors/base.py

diff --git a/airflow-core/src/airflow/sensors/__init__.py b/airflow-core/src/airflow/sensors/__init__.py
index 62a4037df2f66..db378f4550324 100644
--- a/airflow-core/src/airflow/sensors/__init__.py
+++ b/airflow-core/src/airflow/sensors/__init__.py
@@ -26,8 +26,12 @@
 
 from airflow.utils.deprecation_tools import add_deprecated_classes
 
-# TODO: Add definition from Task SDK here and remove `base.py` file
 __deprecated_classes = {
+    "base": {
+        "BaseSensorOperator": "airflow.sdk.bases.sensor.BaseSensorOperator",
+        "PokeReturnValue": "airflow.sdk.bases.sensor.PokeReturnValue",
+        "poke_mode_only": "airflow.sdk.bases.sensor.poke_mode_only",
+    },
     "python":{
         "PythonSensor": "airflow.providers.standard.sensors.python.PythonSensor",
     },
diff --git a/airflow-core/src/airflow/sensors/base.py b/airflow-core/src/airflow/sensors/base.py
deleted file mode 100644
index 71ae006f53437..0000000000000
--- a/airflow-core/src/airflow/sensors/base.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-from __future__ import annotations
-
-from airflow.sdk.bases.sensor import (
-    BaseSensorOperator as BaseSensorOperator,
-    PokeReturnValue as PokeReturnValue,
-    poke_mode_only as poke_mode_only,
-)
diff --git a/providers/databricks/src/airflow/providers/databricks/sensors/databricks.py b/providers/databricks/src/airflow/providers/databricks/sensors/databricks.py
index f417291f2c9e2..a10c5bdad4b3d 100644
--- a/providers/databricks/src/airflow/providers/databricks/sensors/databricks.py
+++ b/providers/databricks/src/airflow/providers/databricks/sensors/databricks.py
@@ -30,9 +30,9 @@
 from airflow.providers.databricks.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseSensorOperator
+    from airflow.sdk.bases.sensor import BaseSensorOperator
 else:
-    from airflow.sensors.base import BaseSensorOperator
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/dbt/cloud/src/airflow/providers/dbt/cloud/sensors/dbt.py b/providers/dbt/cloud/src/airflow/providers/dbt/cloud/sensors/dbt.py
index b628b77c22ce5..0e6ebeb6292d9 100644
--- a/providers/dbt/cloud/src/airflow/providers/dbt/cloud/sensors/dbt.py
+++ b/providers/dbt/cloud/src/airflow/providers/dbt/cloud/sensors/dbt.py
@@ -25,7 +25,12 @@
 from airflow.providers.dbt.cloud.hooks.dbt import DbtCloudHook, DbtCloudJobRunException, DbtCloudJobRunStatus
 from airflow.providers.dbt.cloud.triggers.dbt import DbtCloudRunJobTrigger
 from airflow.providers.dbt.cloud.utils.openlineage import generate_openlineage_events_from_dbt_cloud_run
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.dbt.cloud.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk.bases.sensor import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.providers.openlineage.extractors import OperatorLineage
diff --git a/providers/http/tests/unit/http/sensors/test_http.py b/providers/http/tests/unit/http/sensors/test_http.py
index 55c4f5ca5fb66..b2b74c1dc5bfa 100644
--- a/providers/http/tests/unit/http/sensors/test_http.py
+++ b/providers/http/tests/unit/http/sensors/test_http.py
@@ -387,7 +387,11 @@ def test_execute_is_deferred(self, mock_poke):
         assert isinstance(exc.value.trigger, HttpSensorTrigger), "Trigger is not a HttpTrigger"
 
     @mock.patch("airflow.providers.http.sensors.http.HttpSensor.defer")
-    @mock.patch("airflow.sensors.base.BaseSensorOperator.execute")
+    @mock.patch(
+        "airflow.sdk.bases.sensor.BaseSensorOperator.execute"
+        if AIRFLOW_V_3_0_PLUS
+        else "airflow.sensors.base.BaseSensorOperator.execute"
+    )
     def test_execute_not_defer_when_response_check_is_not_none(self, mock_execute, mock_defer):
         task = HttpSensor(
             task_id="run_now",
diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/data_factory.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/data_factory.py
index 30f55c01d27e1..441df722214b5 100644
--- a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/data_factory.py
+++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/data_factory.py
@@ -29,7 +29,12 @@
     AzureDataFactoryPipelineRunStatus,
 )
 from airflow.providers.microsoft.azure.triggers.data_factory import ADFPipelineRunStatusSensorTrigger
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.microsoft.azure.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk.bases.sensor import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/standard/src/airflow/providers/standard/sensors/bash.py b/providers/standard/src/airflow/providers/standard/sensors/bash.py
index 64a3220e48502..5e8dd0b24650f 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/bash.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/bash.py
@@ -24,7 +24,12 @@
 from typing import TYPE_CHECKING
 
 from airflow.exceptions import AirflowFailException
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk.bases.sensor import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/standard/src/airflow/providers/standard/sensors/date_time.py b/providers/standard/src/airflow/providers/standard/sensors/date_time.py
index b1c5b5da2976d..a2e2478109f59 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/date_time.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/date_time.py
@@ -24,9 +24,13 @@
 
 from airflow.providers.standard.triggers.temporal import DateTimeTrigger
 from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
-from airflow.sensors.base import BaseSensorOperator
 from airflow.utils import timezone
 
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk.bases.sensor import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+
 try:
     from airflow.triggers.base import StartTriggerArgs
 except ImportError:
diff --git a/providers/standard/src/airflow/providers/standard/sensors/external_task.py b/providers/standard/src/airflow/providers/standard/sensors/external_task.py
index cc27679773d4b..aa8a971a526b8 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/external_task.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/external_task.py
@@ -46,7 +46,7 @@
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.bases.sensor import BaseSensorOperator
 else:
-    from airflow.sensors.base import BaseSensorOperator
+    from airflow.sensors.base import BaseSensorOperator  # type:ignore[no-redef]
     from airflow.utils.session import NEW_SESSION, provide_session
 
 if TYPE_CHECKING:
diff --git a/providers/standard/src/airflow/providers/standard/sensors/filesystem.py b/providers/standard/src/airflow/providers/standard/sensors/filesystem.py
index 5f6f9e5a0fc61..10315dc88a97e 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/filesystem.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/filesystem.py
@@ -29,7 +29,12 @@
 from airflow.exceptions import AirflowException
 from airflow.providers.standard.hooks.filesystem import FSHook
 from airflow.providers.standard.triggers.file import FileTrigger
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk.bases.sensor import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 try:
     from airflow.triggers.base import StartTriggerArgs
diff --git a/providers/standard/src/airflow/providers/standard/sensors/python.py b/providers/standard/src/airflow/providers/standard/sensors/python.py
index 33d59b903ce83..37c7244ba2b6a 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/python.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/python.py
@@ -20,10 +20,15 @@
 from collections.abc import Mapping, Sequence
 from typing import TYPE_CHECKING, Any, Callable
 
-from airflow.sensors.base import BaseSensorOperator, PokeReturnValue
+from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils.context import context_merge
 from airflow.utils.operator_helpers import determine_kwargs
 
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk.bases.sensor import BaseSensorOperator, PokeReturnValue
+else:
+    from airflow.sensors.base import BaseSensorOperator, PokeReturnValue  # type: ignore[no-redef]
+
 if TYPE_CHECKING:
     try:
         from airflow.sdk.definitions.context import Context
diff --git a/providers/standard/src/airflow/providers/standard/sensors/time.py b/providers/standard/src/airflow/providers/standard/sensors/time.py
index a694ee3c5f924..ad02dc4dc82a9 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/time.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/time.py
@@ -25,7 +25,12 @@
 from airflow.configuration import conf
 from airflow.exceptions import AirflowProviderDeprecationWarning
 from airflow.providers.standard.triggers.temporal import DateTimeTrigger
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk.bases.sensor import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 try:
     from airflow.triggers.base import StartTriggerArgs
diff --git a/providers/standard/src/airflow/providers/standard/sensors/time_delta.py b/providers/standard/src/airflow/providers/standard/sensors/time_delta.py
index 40ad809343bb7..5b38a2b078e85 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/time_delta.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/time_delta.py
@@ -20,7 +20,7 @@
 import warnings
 from datetime import datetime, timedelta
 from time import sleep
-from typing import TYPE_CHECKING, Any, NoReturn
+from typing import TYPE_CHECKING, Any
 
 from deprecated.classic import deprecated
 from packaging.version import Version
@@ -29,9 +29,13 @@
 from airflow.exceptions import AirflowProviderDeprecationWarning, AirflowSkipException
 from airflow.providers.standard.triggers.temporal import DateTimeTrigger, TimeDeltaTrigger
 from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
-from airflow.sensors.base import BaseSensorOperator
 from airflow.utils import timezone
 
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk.bases.sensor import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+
 if TYPE_CHECKING:
     try:
         from airflow.sdk.definitions.context import Context
@@ -106,7 +110,7 @@ def poke(self, context: Context) -> bool:
     Asynchronous execution
     """
 
-    def execute(self, context: Context) -> bool | NoReturn:
+    def execute(self, context: Context) -> Any:
         """
         Depending on the deferrable flag, either execute the sensor in a blocking way or defer it.
 
diff --git a/providers/standard/src/airflow/providers/standard/sensors/weekday.py b/providers/standard/src/airflow/providers/standard/sensors/weekday.py
index 5b2fce987095e..6f3af7a318241 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/weekday.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/weekday.py
@@ -21,9 +21,14 @@
 from typing import TYPE_CHECKING
 
 from airflow.providers.standard.utils.weekday import WeekDay
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils import timezone
 
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk.bases.sensor import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+
 if TYPE_CHECKING:
     try:
         from airflow.sdk.definitions.context import Context

From f0c329641c49823f90e3b3cc51936b690c81917f Mon Sep 17 00:00:00 2001
From: Vincent <97131062+vincbeck@users.noreply.github.com>
Date: Wed, 25 Jun 2025 11:42:33 -0400
Subject: [PATCH 192/381] Clean up middlewares (#52116)

---
 .../src/airflow/api_fastapi/core_api/app.py   |  6 +--
 .../api_fastapi/core_api/middleware.py        | 39 -------------------
 2 files changed, 3 insertions(+), 42 deletions(-)
 delete mode 100644 airflow-core/src/airflow/api_fastapi/core_api/middleware.py

diff --git a/airflow-core/src/airflow/api_fastapi/core_api/app.py b/airflow-core/src/airflow/api_fastapi/core_api/app.py
index 253ef206e13a9..ad8938de994b6 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/app.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/app.py
@@ -30,7 +30,6 @@
 from starlette.templating import Jinja2Templates
 
 from airflow.api_fastapi.auth.tokens import get_signing_key
-from airflow.api_fastapi.core_api.middleware import FlaskExceptionsMiddleware
 from airflow.exceptions import AirflowException
 from airflow.settings import AIRFLOW_PATH
 
@@ -176,8 +175,9 @@ def init_error_handlers(app: FastAPI) -> None:
 def init_middlewares(app: FastAPI) -> None:
     from airflow.configuration import conf
 
-    app.add_middleware(FlaskExceptionsMiddleware)
-    if conf.getboolean("core", "simple_auth_manager_all_admins"):
+    if "SimpleAuthManager" in conf.get("core", "auth_manager") and conf.getboolean(
+        "core", "simple_auth_manager_all_admins"
+    ):
         from airflow.api_fastapi.auth.managers.simple.middleware import SimpleAllAdminMiddleware
 
         app.add_middleware(SimpleAllAdminMiddleware)
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/middleware.py b/airflow-core/src/airflow/api_fastapi/core_api/middleware.py
deleted file mode 100644
index e88c9acc5438a..0000000000000
--- a/airflow-core/src/airflow/api_fastapi/core_api/middleware.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-from __future__ import annotations
-
-from fastapi import HTTPException, Request
-from starlette.middleware.base import BaseHTTPMiddleware
-
-
-# Custom Middleware Class
-class FlaskExceptionsMiddleware(BaseHTTPMiddleware):
-    """Middleware that converts exceptions thrown in the Flask application to Fastapi exceptions."""
-
-    async def dispatch(self, request: Request, call_next):
-        response = await call_next(request)
-
-        # Check if the WSGI response contains an error
-        if response.status_code >= 400 and response.media_type == "application/json":
-            body = await response.json()
-            if "error" in body:
-                # Transform the WSGI app's exception into a FastAPI HTTPException
-                raise HTTPException(
-                    status_code=response.status_code,
-                    detail=body["error"],
-                )
-        return response

From ce8aa4d47622e15c34297c36a05755489cb91560 Mon Sep 17 00:00:00 2001
From: Vincent <97131062+vincbeck@users.noreply.github.com>
Date: Wed, 25 Jun 2025 13:16:18 -0400
Subject: [PATCH 193/381] Add token API for `KeycloakAuthManager` (#52112)

---
 .../unit/always/test_project_structure.py     |  1 +
 .../auth_manager/datamodels/__init__.py       | 16 +++++
 .../keycloak/auth_manager/datamodels/token.py | 35 +++++++++++
 .../auth_manager/keycloak_auth_manager.py     | 18 ++++++
 .../keycloak/auth_manager/routes/login.py     | 27 +-------
 .../keycloak/auth_manager/routes/token.py     | 62 +++++++++++++++++++
 .../keycloak/auth_manager/routes/conftest.py  | 47 ++++++++++++++
 .../auth_manager/routes/test_login.py         | 34 +---------
 .../auth_manager/routes/test_token.py         | 56 +++++++++++++++++
 9 files changed, 241 insertions(+), 55 deletions(-)
 create mode 100644 providers/keycloak/src/airflow/providers/keycloak/auth_manager/datamodels/__init__.py
 create mode 100644 providers/keycloak/src/airflow/providers/keycloak/auth_manager/datamodels/token.py
 create mode 100644 providers/keycloak/src/airflow/providers/keycloak/auth_manager/routes/token.py
 create mode 100644 providers/keycloak/tests/unit/keycloak/auth_manager/routes/conftest.py
 create mode 100644 providers/keycloak/tests/unit/keycloak/auth_manager/routes/test_token.py

diff --git a/airflow-core/tests/unit/always/test_project_structure.py b/airflow-core/tests/unit/always/test_project_structure.py
index 989aa2de1ba50..4809fa799f268 100644
--- a/airflow-core/tests/unit/always/test_project_structure.py
+++ b/airflow-core/tests/unit/always/test_project_structure.py
@@ -201,6 +201,7 @@ def test_providers_modules_should_have_tests(self):
             "providers/google/tests/unit/google/test_go_module_utils.py",
             "providers/google/tests/unit/google/test_version_compat.py",
             "providers/http/tests/unit/http/test_exceptions.py",
+            "providers/keycloak/tests/unit/keycloak/auth_manager/datamodels/test_token.py",
             "providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_adls.py",
             "providers/microsoft/azure/tests/unit/microsoft/azure/test_version_compat.py",
             "providers/openlineage/tests/unit/openlineage/test_version_compat.py",
diff --git a/providers/keycloak/src/airflow/providers/keycloak/auth_manager/datamodels/__init__.py b/providers/keycloak/src/airflow/providers/keycloak/auth_manager/datamodels/__init__.py
new file mode 100644
index 0000000000000..13a83393a9124
--- /dev/null
+++ b/providers/keycloak/src/airflow/providers/keycloak/auth_manager/datamodels/__init__.py
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
diff --git a/providers/keycloak/src/airflow/providers/keycloak/auth_manager/datamodels/token.py b/providers/keycloak/src/airflow/providers/keycloak/auth_manager/datamodels/token.py
new file mode 100644
index 0000000000000..16670f64356fb
--- /dev/null
+++ b/providers/keycloak/src/airflow/providers/keycloak/auth_manager/datamodels/token.py
@@ -0,0 +1,35 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+from pydantic import Field
+
+from airflow.api_fastapi.core_api.base import BaseModel, StrictBaseModel
+
+
+class TokenResponse(BaseModel):
+    """Token serializer for responses."""
+
+    access_token: str
+
+
+class TokenBody(StrictBaseModel):
+    """Token serializer for post bodies."""
+
+    username: str = Field()
+    password: str = Field()
diff --git a/providers/keycloak/src/airflow/providers/keycloak/auth_manager/keycloak_auth_manager.py b/providers/keycloak/src/airflow/providers/keycloak/auth_manager/keycloak_auth_manager.py
index 8dfd6979a6823..46406598a0fe5 100644
--- a/providers/keycloak/src/airflow/providers/keycloak/auth_manager/keycloak_auth_manager.py
+++ b/providers/keycloak/src/airflow/providers/keycloak/auth_manager/keycloak_auth_manager.py
@@ -23,6 +23,7 @@
 
 import requests
 from fastapi import FastAPI
+from keycloak import KeycloakOpenID
 
 from airflow.api_fastapi.app import AUTH_MANAGER_FASTAPI_APP_PREFIX
 from airflow.api_fastapi.auth.managers.base_auth_manager import BaseAuthManager
@@ -33,6 +34,7 @@
 from airflow.providers.keycloak.auth_manager.cli.definition import KEYCLOAK_AUTH_MANAGER_COMMANDS
 from airflow.providers.keycloak.auth_manager.constants import (
     CONF_CLIENT_ID_KEY,
+    CONF_CLIENT_SECRET_KEY,
     CONF_REALM_KEY,
     CONF_SECTION_NAME,
     CONF_SERVER_URL_KEY,
@@ -206,6 +208,7 @@ def filter_authorized_menu_items(
 
     def get_fastapi_app(self) -> FastAPI | None:
         from airflow.providers.keycloak.auth_manager.routes.login import login_router
+        from airflow.providers.keycloak.auth_manager.routes.token import token_router
 
         app = FastAPI(
             title="Keycloak auth manager sub application",
@@ -216,6 +219,7 @@ def get_fastapi_app(self) -> FastAPI | None:
             ),
         )
         app.include_router(login_router)
+        app.include_router(token_router)
 
         return app
 
@@ -230,6 +234,20 @@ def get_cli_commands() -> list[CLICommand]:
             ),
         ]
 
+    @staticmethod
+    def get_keycloak_client() -> KeycloakOpenID:
+        client_id = conf.get(CONF_SECTION_NAME, CONF_CLIENT_ID_KEY)
+        client_secret = conf.get(CONF_SECTION_NAME, CONF_CLIENT_SECRET_KEY)
+        realm = conf.get(CONF_SECTION_NAME, CONF_REALM_KEY)
+        server_url = conf.get(CONF_SECTION_NAME, CONF_SERVER_URL_KEY)
+
+        return KeycloakOpenID(
+            server_url=server_url,
+            client_id=client_id,
+            client_secret_key=client_secret,
+            realm_name=realm,
+        )
+
     def _is_authorized(
         self,
         *,
diff --git a/providers/keycloak/src/airflow/providers/keycloak/auth_manager/routes/login.py b/providers/keycloak/src/airflow/providers/keycloak/auth_manager/routes/login.py
index ef5b6ffb0e37b..49e6255a4df0b 100644
--- a/providers/keycloak/src/airflow/providers/keycloak/auth_manager/routes/login.py
+++ b/providers/keycloak/src/airflow/providers/keycloak/auth_manager/routes/login.py
@@ -20,20 +20,13 @@
 import logging
 
 from fastapi import Request  # noqa: TC002
-from keycloak import KeycloakOpenID
 from starlette.responses import HTMLResponse, RedirectResponse
 
 from airflow.api_fastapi.app import get_auth_manager
 from airflow.api_fastapi.auth.managers.base_auth_manager import COOKIE_NAME_JWT_TOKEN
 from airflow.api_fastapi.common.router import AirflowRouter
 from airflow.configuration import conf
-from airflow.providers.keycloak.auth_manager.constants import (
-    CONF_CLIENT_ID_KEY,
-    CONF_CLIENT_SECRET_KEY,
-    CONF_REALM_KEY,
-    CONF_SECTION_NAME,
-    CONF_SERVER_URL_KEY,
-)
+from airflow.providers.keycloak.auth_manager.keycloak_auth_manager import KeycloakAuthManager
 from airflow.providers.keycloak.auth_manager.user import KeycloakAuthManagerUser
 
 log = logging.getLogger(__name__)
@@ -43,7 +36,7 @@
 @login_router.get("/login")
 def login(request: Request) -> RedirectResponse:
     """Initiate the authentication."""
-    client = _get_keycloak_client()
+    client = KeycloakAuthManager.get_keycloak_client()
     redirect_uri = request.url_for("login_callback")
     auth_url = client.auth_url(redirect_uri=str(redirect_uri), scope="openid")
     return RedirectResponse(auth_url)
@@ -56,7 +49,7 @@ def login_callback(request: Request):
     if not code:
         return HTMLResponse("Missing code", status_code=400)
 
-    client = _get_keycloak_client()
+    client = KeycloakAuthManager.get_keycloak_client()
     redirect_uri = request.url_for("login_callback")
 
     tokens = client.token(
@@ -77,17 +70,3 @@ def login_callback(request: Request):
     secure = bool(conf.get("api", "ssl_cert", fallback=""))
     response.set_cookie(COOKIE_NAME_JWT_TOKEN, token, secure=secure)
     return response
-
-
-def _get_keycloak_client() -> KeycloakOpenID:
-    client_id = conf.get(CONF_SECTION_NAME, CONF_CLIENT_ID_KEY)
-    client_secret = conf.get(CONF_SECTION_NAME, CONF_CLIENT_SECRET_KEY)
-    realm = conf.get(CONF_SECTION_NAME, CONF_REALM_KEY)
-    server_url = conf.get(CONF_SECTION_NAME, CONF_SERVER_URL_KEY)
-
-    return KeycloakOpenID(
-        server_url=server_url,
-        client_id=client_id,
-        client_secret_key=client_secret,
-        realm_name=realm,
-    )
diff --git a/providers/keycloak/src/airflow/providers/keycloak/auth_manager/routes/token.py b/providers/keycloak/src/airflow/providers/keycloak/auth_manager/routes/token.py
new file mode 100644
index 0000000000000..e40434f6ff2c1
--- /dev/null
+++ b/providers/keycloak/src/airflow/providers/keycloak/auth_manager/routes/token.py
@@ -0,0 +1,62 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+import logging
+
+from fastapi import HTTPException
+from keycloak import KeycloakAuthenticationError
+from starlette import status
+
+from airflow.api_fastapi.app import get_auth_manager
+from airflow.api_fastapi.common.router import AirflowRouter
+from airflow.api_fastapi.core_api.openapi.exceptions import create_openapi_http_exception_doc
+from airflow.providers.keycloak.auth_manager.datamodels.token import TokenBody, TokenResponse
+from airflow.providers.keycloak.auth_manager.keycloak_auth_manager import KeycloakAuthManager
+from airflow.providers.keycloak.auth_manager.user import KeycloakAuthManagerUser
+
+log = logging.getLogger(__name__)
+token_router = AirflowRouter(tags=["KeycloakAuthManagerToken"])
+
+
+@token_router.post(
+    "/token",
+    status_code=status.HTTP_201_CREATED,
+    responses=create_openapi_http_exception_doc([status.HTTP_400_BAD_REQUEST, status.HTTP_401_UNAUTHORIZED]),
+)
+def create_token(body: TokenBody) -> TokenResponse:
+    client = KeycloakAuthManager.get_keycloak_client()
+
+    try:
+        tokens = client.token(body.username, body.password)
+    except KeycloakAuthenticationError:
+        raise HTTPException(
+            status_code=status.HTTP_401_UNAUTHORIZED,
+            detail="Invalid credentials",
+        )
+
+    userinfo = client.userinfo(tokens["access_token"])
+    user = KeycloakAuthManagerUser(
+        user_id=userinfo["sub"],
+        name=userinfo["preferred_username"],
+        access_token=tokens["access_token"],
+        refresh_token=tokens["refresh_token"],
+    )
+    token = get_auth_manager().generate_jwt(user)
+
+    return TokenResponse(access_token=token)
diff --git a/providers/keycloak/tests/unit/keycloak/auth_manager/routes/conftest.py b/providers/keycloak/tests/unit/keycloak/auth_manager/routes/conftest.py
new file mode 100644
index 0000000000000..1807778b86aeb
--- /dev/null
+++ b/providers/keycloak/tests/unit/keycloak/auth_manager/routes/conftest.py
@@ -0,0 +1,47 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import pytest
+from fastapi.testclient import TestClient
+
+from airflow.api_fastapi.app import create_app
+from airflow.providers.keycloak.auth_manager.constants import (
+    CONF_CLIENT_ID_KEY,
+    CONF_CLIENT_SECRET_KEY,
+    CONF_REALM_KEY,
+    CONF_SECTION_NAME,
+)
+
+from tests_common.test_utils.config import conf_vars
+
+
+@pytest.fixture
+def client():
+    with conf_vars(
+        {
+            (
+                "core",
+                "auth_manager",
+            ): "airflow.providers.keycloak.auth_manager.keycloak_auth_manager.KeycloakAuthManager",
+            (CONF_SECTION_NAME, CONF_CLIENT_ID_KEY): "test",
+            (CONF_SECTION_NAME, CONF_CLIENT_SECRET_KEY): "test",
+            (CONF_SECTION_NAME, CONF_REALM_KEY): "test",
+            (CONF_SECTION_NAME, "base_url"): "http://host.docker.internal:48080",
+        }
+    ):
+        yield TestClient(create_app())
diff --git a/providers/keycloak/tests/unit/keycloak/auth_manager/routes/test_login.py b/providers/keycloak/tests/unit/keycloak/auth_manager/routes/test_login.py
index d74040467b0b7..2604da765818d 100644
--- a/providers/keycloak/tests/unit/keycloak/auth_manager/routes/test_login.py
+++ b/providers/keycloak/tests/unit/keycloak/auth_manager/routes/test_login.py
@@ -18,39 +18,11 @@
 
 from unittest.mock import ANY, Mock, patch
 
-import pytest
-from fastapi.testclient import TestClient
-
-from airflow.api_fastapi.app import AUTH_MANAGER_FASTAPI_APP_PREFIX, create_app
-from airflow.providers.keycloak.auth_manager.constants import (
-    CONF_CLIENT_ID_KEY,
-    CONF_CLIENT_SECRET_KEY,
-    CONF_REALM_KEY,
-    CONF_SECTION_NAME,
-)
-
-from tests_common.test_utils.config import conf_vars
-
-
-@pytest.fixture
-def client():
-    with conf_vars(
-        {
-            (
-                "core",
-                "auth_manager",
-            ): "airflow.providers.keycloak.auth_manager.keycloak_auth_manager.KeycloakAuthManager",
-            (CONF_SECTION_NAME, CONF_CLIENT_ID_KEY): "test",
-            (CONF_SECTION_NAME, CONF_CLIENT_SECRET_KEY): "test",
-            (CONF_SECTION_NAME, CONF_REALM_KEY): "test",
-            (CONF_SECTION_NAME, "base_url"): "http://host.docker.internal:48080",
-        }
-    ):
-        yield TestClient(create_app())
+from airflow.api_fastapi.app import AUTH_MANAGER_FASTAPI_APP_PREFIX
 
 
 class TestLoginRouter:
-    @patch("airflow.providers.keycloak.auth_manager.routes.login._get_keycloak_client")
+    @patch("airflow.providers.keycloak.auth_manager.routes.login.KeycloakAuthManager.get_keycloak_client")
     def test_login(self, mock_get_keycloak_client, client):
         redirect_url = "redirect_url"
         mock_keycloak_client = Mock()
@@ -62,7 +34,7 @@ def test_login(self, mock_get_keycloak_client, client):
         assert response.headers["location"] == redirect_url
 
     @patch("airflow.providers.keycloak.auth_manager.routes.login.get_auth_manager")
-    @patch("airflow.providers.keycloak.auth_manager.routes.login._get_keycloak_client")
+    @patch("airflow.providers.keycloak.auth_manager.routes.login.KeycloakAuthManager.get_keycloak_client")
     def test_login_callback(self, mock_get_keycloak_client, mock_get_auth_manager, client):
         code = "code"
         token = "token"
diff --git a/providers/keycloak/tests/unit/keycloak/auth_manager/routes/test_token.py b/providers/keycloak/tests/unit/keycloak/auth_manager/routes/test_token.py
new file mode 100644
index 0000000000000..8e45100b26c56
--- /dev/null
+++ b/providers/keycloak/tests/unit/keycloak/auth_manager/routes/test_token.py
@@ -0,0 +1,56 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+from unittest.mock import Mock, patch
+
+from keycloak import KeycloakAuthenticationError
+
+from airflow.api_fastapi.app import AUTH_MANAGER_FASTAPI_APP_PREFIX
+
+
+class TestTokenRouter:
+    @patch("airflow.providers.keycloak.auth_manager.routes.login.KeycloakAuthManager.get_keycloak_client")
+    def test_create_token(self, mock_get_keycloak_client, client):
+        mock_keycloak_client = Mock()
+        mock_keycloak_client.token.return_value = {
+            "access_token": "access_token",
+            "refresh_token": "refresh_token",
+        }
+        mock_keycloak_client.userinfo.return_value = {"sub": "sub", "preferred_username": "username"}
+        mock_get_keycloak_client.return_value = mock_keycloak_client
+        response = client.post(
+            AUTH_MANAGER_FASTAPI_APP_PREFIX + "/token",
+            json={"username": "username", "password": "password"},
+        )
+
+        assert response.status_code == 201
+        mock_keycloak_client.token.assert_called_once_with("username", "password")
+        mock_keycloak_client.userinfo.assert_called_once_with("access_token")
+
+    @patch("airflow.providers.keycloak.auth_manager.routes.login.KeycloakAuthManager.get_keycloak_client")
+    def test_create_token_with_invalid_creds(self, mock_get_keycloak_client, client):
+        mock_keycloak_client = Mock()
+        mock_keycloak_client.token.side_effect = KeycloakAuthenticationError()
+        mock_get_keycloak_client.return_value = mock_keycloak_client
+        response = client.post(
+            AUTH_MANAGER_FASTAPI_APP_PREFIX + "/token",
+            json={"username": "username", "password": "password"},
+        )
+
+        assert response.status_code == 401
+        mock_keycloak_client.token.assert_called_once_with("username", "password")

From a6474e1b089069724115875d18fc01ad8232b5d1 Mon Sep 17 00:00:00 2001
From: Ash Berlin-Taylor <ash@apache.org>
Date: Wed, 25 Jun 2025 18:18:54 +0100
Subject: [PATCH 194/381] Remove side-effects in models/tests_dags affecting
 plugin manager tests (#52258)

I guess CI must not run this exact combination of tests together, but prior to
this change if you ran `pytest
airflow-core/tests/unit/models/test_dag.py::TestDag::test_bulk_write_to_db_assets
airflow-core/tests/unit/plugins/test_plugins_manager.py::TestPluginsManager::test_registering_plugin_listeners`
you would get a test failure.

The issue was caused by having two fixtures of the same name, a module level
`clean_plugins`, and a class level one. This is by design in Pytest and is how
to override plugins at different scopes.

This also explains why we had `listener_manager.clear()` in a finally block
when it should have been handled by the fixture
---
 .../unit/plugins/test_plugins_manager.py      | 32 +++++++++----------
 1 file changed, 15 insertions(+), 17 deletions(-)

diff --git a/airflow-core/tests/unit/plugins/test_plugins_manager.py b/airflow-core/tests/unit/plugins/test_plugins_manager.py
index 3b61297f0b1b9..addcc4745a2fc 100644
--- a/airflow-core/tests/unit/plugins/test_plugins_manager.py
+++ b/airflow-core/tests/unit/plugins/test_plugins_manager.py
@@ -49,7 +49,7 @@ def on_load(self, *args, **kwargs):
 
 
 @pytest.fixture(autouse=True, scope="module")
-def clean_plugins():
+def _clean_listeners():
     get_listener_manager().clear()
     yield
     get_listener_manager().clear()
@@ -268,22 +268,20 @@ class MacroPlugin(AirflowPlugin):
     def test_registering_plugin_listeners(self):
         from airflow import plugins_manager
 
-        try:
-            with mock.patch("airflow.plugins_manager.plugins", []):
-                plugins_manager.load_plugins_from_plugin_directory()
-                plugins_manager.integrate_listener_plugins(get_listener_manager())
-
-                assert get_listener_manager().has_listeners
-                listeners = get_listener_manager().pm.get_plugins()
-                listener_names = [el.__name__ if inspect.ismodule(el) else qualname(el) for el in listeners]
-                # sort names as order of listeners is not guaranteed
-                assert sorted(listener_names) == [
-                    "airflow.example_dags.plugins.event_listener",
-                    "unit.listeners.class_listener.ClassBasedListener",
-                    "unit.listeners.empty_listener",
-                ]
-        finally:
-            get_listener_manager().clear()
+        assert not get_listener_manager().has_listeners
+        with mock.patch("airflow.plugins_manager.plugins", []):
+            plugins_manager.load_plugins_from_plugin_directory()
+            plugins_manager.integrate_listener_plugins(get_listener_manager())
+
+            assert get_listener_manager().has_listeners
+            listeners = get_listener_manager().pm.get_plugins()
+            listener_names = [el.__name__ if inspect.ismodule(el) else qualname(el) for el in listeners]
+            # sort names as order of listeners is not guaranteed
+            assert sorted(listener_names) == [
+                "airflow.example_dags.plugins.event_listener",
+                "unit.listeners.class_listener.ClassBasedListener",
+                "unit.listeners.empty_listener",
+            ]
 
     @skip_if_force_lowest_dependencies_marker
     def test_should_import_plugin_from_providers(self):

From 262cd8167da107618c3d3e5d7057530b5be3236b Mon Sep 17 00:00:00 2001
From: Jed Cunningham <66968678+jedcunningham@users.noreply.github.com>
Date: Wed, 25 Jun 2025 11:50:37 -0600
Subject: [PATCH 195/381] Remove latest flag from core release issue generation
 cli (#52256)

We always provide the current/prior flags anyways, so we do not need to
support this flag.
---
 dev/README_RELEASE_AIRFLOW.md                 |  3 +-
 dev/breeze/doc/images/output-commands.svg     |  4 +-
 ...management_generate-issue-content-core.svg | 40 +++++++++----------
 ...management_generate-issue-content-core.txt |  2 +-
 .../commands/release_management_commands.py   | 20 +---------
 .../release_management_commands_config.py     |  1 -
 .../src/airflow_breeze/utils/version_utils.py | 22 ----------
 7 files changed, 25 insertions(+), 67 deletions(-)

diff --git a/dev/README_RELEASE_AIRFLOW.md b/dev/README_RELEASE_AIRFLOW.md
index e64b11af80bda..a56177b937c39 100644
--- a/dev/README_RELEASE_AIRFLOW.md
+++ b/dev/README_RELEASE_AIRFLOW.md
@@ -373,8 +373,7 @@ uv tool install -e ./dev/breeze
 - Generate the body of the issue using the below command:
 
   ```shell script
-    breeze release-management generate-issue-content-core --previous-release <PREVIOUS_VERSION>
-    --current-release ${VERSION}
+    breeze release-management generate-issue-content-core --previous-release <PREVIOUS_VERSION> --current-release ${VERSION}
     ```
 
 ## Publish release candidate documentation (staging)
diff --git a/dev/breeze/doc/images/output-commands.svg b/dev/breeze/doc/images/output-commands.svg
index 234bfa5ee81a3..c82c8759006e7 100644
--- a/dev/breeze/doc/images/output-commands.svg
+++ b/dev/breeze/doc/images/output-commands.svg
@@ -329,8 +329,8 @@
 </text><text class="breeze-help-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-help-line-11)">│</text><text class="breeze-help-r7" x="768.6" y="288.4" textLength="671" clip-path="url(#breeze-help-line-11)">gremlin&#160;|&#160;kafka&#160;|&#160;kerberos&#160;|&#160;keycloak&#160;|&#160;mongo&#160;|&#160;mssql&#160;|</text><text class="breeze-help-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-help-line-11)">│</text><text class="breeze-help-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-help-line-11)">
 </text><text class="breeze-help-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-help-line-12)">│</text><text class="breeze-help-r7" x="768.6" y="312.8" textLength="671" clip-path="url(#breeze-help-line-12)">openlineage&#160;|&#160;otel&#160;|&#160;pinot&#160;|&#160;qdrant&#160;|&#160;redis&#160;|&#160;statsd&#160;|&#160;</text><text class="breeze-help-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-help-line-12)">│</text><text class="breeze-help-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-help-line-12)">
 </text><text class="breeze-help-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-help-line-13)">│</text><text class="breeze-help-r7" x="768.6" y="337.2" textLength="671" clip-path="url(#breeze-help-line-13)">trino&#160;|&#160;ydb)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-help-line-13)">│</text><text class="breeze-help-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-help-line-13)">
-</text><text class="breeze-help-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-help-line-14)">│</text><text class="breeze-help-r4" x="24.4" y="361.6" textLength="317.2" clip-path="url(#breeze-help-line-14)">--standalone-dag-processor</text><text class="breeze-help-r1" x="341.6" y="361.6" textLength="12.2" clip-path="url(#breeze-help-line-14)">/</text><text class="breeze-help-r4" x="353.8" y="361.6" textLength="341.6" clip-path="url(#breeze-help-line-14)">--no-standalone-dag-processo</text><text class="breeze-help-r1" x="768.6" y="361.6" textLength="671" clip-path="url(#breeze-help-line-14)">Run&#160;standalone&#160;dag&#160;processor&#160;for&#160;start-airflow&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-help-line-14)">│</text><text class="breeze-help-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-help-line-14)">
-</text><text class="breeze-help-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-help-line-15)">│</text><text class="breeze-help-r4" x="24.4" y="386" textLength="12.2" clip-path="url(#breeze-help-line-15)">r</text><text class="breeze-help-r1" x="768.6" y="386" textLength="671" clip-path="url(#breeze-help-line-15)">(required&#160;for&#160;Airflow&#160;3).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-help-line-15)">│</text><text class="breeze-help-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-help-line-15)">
+</text><text class="breeze-help-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-help-line-14)">│</text><text class="breeze-help-r4" x="24.4" y="361.6" textLength="317.2" clip-path="url(#breeze-help-line-14)">--standalone-dag-processor</text><text class="breeze-help-r1" x="341.6" y="361.6" textLength="12.2" clip-path="url(#breeze-help-line-14)">/</text><text class="breeze-help-r4" x="353.8" y="361.6" textLength="341.6" clip-path="url(#breeze-help-line-14)">--no-standalone-dag-process…</text><text class="breeze-help-r1" x="768.6" y="361.6" textLength="671" clip-path="url(#breeze-help-line-14)">Run&#160;standalone&#160;dag&#160;processor&#160;for&#160;start-airflow&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-help-line-14)">│</text><text class="breeze-help-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-help-line-14)">
+</text><text class="breeze-help-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-help-line-15)">│</text><text class="breeze-help-r1" x="768.6" y="386" textLength="671" clip-path="url(#breeze-help-line-15)">(required&#160;for&#160;Airflow&#160;3).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-help-line-15)">│</text><text class="breeze-help-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-help-line-15)">
 </text><text class="breeze-help-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-help-line-16)">│</text><text class="breeze-help-r5" x="768.6" y="410.4" textLength="671" clip-path="url(#breeze-help-line-16)">[default:&#160;standalone-dag-processor]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-help-line-16)">│</text><text class="breeze-help-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-help-line-16)">
 </text><text class="breeze-help-r5" x="0" y="434.8" textLength="1464" clip-path="url(#breeze-help-line-17)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-help-line-17)">
 </text><text class="breeze-help-r5" x="0" y="459.2" textLength="24.4" clip-path="url(#breeze-help-line-18)">╭─</text><text class="breeze-help-r5" x="24.4" y="459.2" textLength="463.6" clip-path="url(#breeze-help-line-18)">&#160;Docker&#160;Compose&#160;selection&#160;and&#160;cleanup&#160;</text><text class="breeze-help-r5" x="488" y="459.2" textLength="951.6" clip-path="url(#breeze-help-line-18)">──────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="459.2" textLength="24.4" clip-path="url(#breeze-help-line-18)">─╮</text><text class="breeze-help-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-help-line-18)">
diff --git a/dev/breeze/doc/images/output_release-management_generate-issue-content-core.svg b/dev/breeze/doc/images/output_release-management_generate-issue-content-core.svg
index 4cef9035b119a..68a1adb591985 100644
--- a/dev/breeze/doc/images/output_release-management_generate-issue-content-core.svg
+++ b/dev/breeze/doc/images/output_release-management_generate-issue-content-core.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 538.0" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 513.5999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -38,12 +38,14 @@
 .breeze-release-management-generate-issue-content-core-r4 { fill: #68a0b3;font-weight: bold }
 .breeze-release-management-generate-issue-content-core-r5 { fill: #868887 }
 .breeze-release-management-generate-issue-content-core-r6 { fill: #8d7b39 }
-.breeze-release-management-generate-issue-content-core-r7 { fill: #98a84b;font-weight: bold }
+.breeze-release-management-generate-issue-content-core-r7 { fill: #cc555a }
+.breeze-release-management-generate-issue-content-core-r8 { fill: #8a4346 }
+.breeze-release-management-generate-issue-content-core-r9 { fill: #98a84b;font-weight: bold }
     </style>
 
     <defs>
     <clipPath id="breeze-release-management-generate-issue-content-core-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="487.0" />
+      <rect x="0" y="0" width="1463.0" height="462.59999999999997" />
     </clipPath>
     <clipPath id="breeze-release-management-generate-issue-content-core-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -99,12 +101,9 @@
 <clipPath id="breeze-release-management-generate-issue-content-core-line-17">
     <rect x="0" y="416.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="breeze-release-management-generate-issue-content-core-line-18">
-    <rect x="0" y="440.7" width="1464" height="24.65"/>
-            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="536" rx="8"/><text class="breeze-release-management-generate-issue-content-core-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;generate-issue-content-core</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="511.6" rx="8"/><text class="breeze-release-management-generate-issue-content-core-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;generate-issue-content-core</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -120,20 +119,19 @@
 </text><text class="breeze-release-management-generate-issue-content-core-r1" x="12.2" y="93.2" textLength="646.6" clip-path="url(#breeze-release-management-generate-issue-content-core-line-3)">Generates&#160;content&#160;for&#160;issue&#160;to&#160;test&#160;the&#160;core&#160;release.</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-3)">
 </text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-4)">
 </text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-core-line-5)">╭─</text><text class="breeze-release-management-generate-issue-content-core-r5" x="24.4" y="142" textLength="268.4" clip-path="url(#breeze-release-management-generate-issue-content-core-line-5)">&#160;Generate&#160;issue&#160;flags&#160;</text><text class="breeze-release-management-generate-issue-content-core-r5" x="292.8" y="142" textLength="1146.8" clip-path="url(#breeze-release-management-generate-issue-content-core-line-5)">──────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-core-line-5)">─╮</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-5)">
-</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-6)">│</text><text class="breeze-release-management-generate-issue-content-core-r4" x="24.4" y="166.4" textLength="170.8" clip-path="url(#breeze-release-management-generate-issue-content-core-line-6)">--github-token</text><text class="breeze-release-management-generate-issue-content-core-r1" x="292.8" y="166.4" textLength="1146.8" clip-path="url(#breeze-release-management-generate-issue-content-core-line-6)">GitHub&#160;token&#160;used&#160;to&#160;authenticate.&#160;You&#160;can&#160;set&#160;omit&#160;it&#160;if&#160;you&#160;have&#160;GITHUB_TOKEN&#160;env&#160;variable&#160;&#160;</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-6)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-6)">
-</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-7)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="292.8" y="190.8" textLength="1146.8" clip-path="url(#breeze-release-management-generate-issue-content-core-line-7)">set.&#160;Can&#160;be&#160;generated&#160;with:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-7)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-7)">
-</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-8)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="292.8" y="215.2" textLength="1146.8" clip-path="url(#breeze-release-management-generate-issue-content-core-line-8)">https://github.com/settings/tokens/new?description=Read%20sssues&amp;scopes=repo:status&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-8)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-8)">
-</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-9)">│</text><text class="breeze-release-management-generate-issue-content-core-r6" x="292.8" y="239.6" textLength="1146.8" clip-path="url(#breeze-release-management-generate-issue-content-core-line-9)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-9)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-9)">
-</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-10)">│</text><text class="breeze-release-management-generate-issue-content-core-r4" x="24.4" y="264" textLength="219.6" clip-path="url(#breeze-release-management-generate-issue-content-core-line-10)">--previous-release</text><text class="breeze-release-management-generate-issue-content-core-r1" x="292.8" y="264" textLength="817.4" clip-path="url(#breeze-release-management-generate-issue-content-core-line-10)">commit&#160;reference&#160;(for&#160;example&#160;hash&#160;or&#160;tag)&#160;of&#160;the&#160;previous&#160;release.</text><text class="breeze-release-management-generate-issue-content-core-r6" x="1122.4" y="264" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-10)">(TEXT)</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-10)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-10)">
-</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-11)">│</text><text class="breeze-release-management-generate-issue-content-core-r4" x="24.4" y="288.4" textLength="207.4" clip-path="url(#breeze-release-management-generate-issue-content-core-line-11)">--current-release</text><text class="breeze-release-management-generate-issue-content-core-r1" x="292.8" y="288.4" textLength="805.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-11)">commit&#160;reference&#160;(for&#160;example&#160;hash&#160;or&#160;tag)&#160;of&#160;the&#160;current&#160;release.</text><text class="breeze-release-management-generate-issue-content-core-r6" x="1110.2" y="288.4" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-11)">(TEXT)</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-11)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-11)">
-</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-12)">│</text><text class="breeze-release-management-generate-issue-content-core-r4" x="24.4" y="312.8" textLength="219.6" clip-path="url(#breeze-release-management-generate-issue-content-core-line-12)">--excluded-pr-list</text><text class="breeze-release-management-generate-issue-content-core-r1" x="292.8" y="312.8" textLength="646.6" clip-path="url(#breeze-release-management-generate-issue-content-core-line-12)">Coma-separated&#160;list&#160;of&#160;PRs&#160;to&#160;exclude&#160;from&#160;the&#160;issue.</text><text class="breeze-release-management-generate-issue-content-core-r6" x="951.6" y="312.8" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-12)">(TEXT)</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-12)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-12)">
-</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-13)">│</text><text class="breeze-release-management-generate-issue-content-core-r4" x="24.4" y="337.2" textLength="195.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-13)">--limit-pr-count</text><text class="breeze-release-management-generate-issue-content-core-r1" x="292.8" y="337.2" textLength="805.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-13)">Limit&#160;PR&#160;count&#160;processes&#160;(useful&#160;for&#160;testing&#160;small&#160;subset&#160;of&#160;PRs).</text><text class="breeze-release-management-generate-issue-content-core-r6" x="1110.2" y="337.2" textLength="109.8" clip-path="url(#breeze-release-management-generate-issue-content-core-line-13)">(INTEGER)</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-13)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-13)">
-</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-14)">│</text><text class="breeze-release-management-generate-issue-content-core-r4" x="24.4" y="361.6" textLength="97.6" clip-path="url(#breeze-release-management-generate-issue-content-core-line-14)">--latest</text><text class="breeze-release-management-generate-issue-content-core-r1" x="292.8" y="361.6" textLength="707.6" clip-path="url(#breeze-release-management-generate-issue-content-core-line-14)">Run&#160;the&#160;command&#160;against&#160;latest&#160;released&#160;version&#160;of&#160;airflow</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-14)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-14)">
-</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="386" textLength="1464" clip-path="url(#breeze-release-management-generate-issue-content-core-line-15)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-15)">
-</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="410.4" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-core-line-16)">╭─</text><text class="breeze-release-management-generate-issue-content-core-r5" x="24.4" y="410.4" textLength="195.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-16)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-generate-issue-content-core-r5" x="219.6" y="410.4" textLength="1220" clip-path="url(#breeze-release-management-generate-issue-content-core-line-16)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1439.6" y="410.4" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-core-line-16)">─╮</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-16)">
-</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-17)">│</text><text class="breeze-release-management-generate-issue-content-core-r4" x="24.4" y="434.8" textLength="109.8" clip-path="url(#breeze-release-management-generate-issue-content-core-line-17)">--verbose</text><text class="breeze-release-management-generate-issue-content-core-r7" x="158.6" y="434.8" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-core-line-17)">-v</text><text class="breeze-release-management-generate-issue-content-core-r1" x="207.4" y="434.8" textLength="585.6" clip-path="url(#breeze-release-management-generate-issue-content-core-line-17)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-17)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-17)">
-</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-18)">│</text><text class="breeze-release-management-generate-issue-content-core-r4" x="24.4" y="459.2" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-18)">--help</text><text class="breeze-release-management-generate-issue-content-core-r7" x="158.6" y="459.2" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-core-line-18)">-h</text><text class="breeze-release-management-generate-issue-content-core-r1" x="207.4" y="459.2" textLength="329.4" clip-path="url(#breeze-release-management-generate-issue-content-core-line-18)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-18)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-18)">
-</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="483.6" textLength="1464" clip-path="url(#breeze-release-management-generate-issue-content-core-line-19)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-19)">
+</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-6)">│</text><text class="breeze-release-management-generate-issue-content-core-r4" x="61" y="166.4" textLength="170.8" clip-path="url(#breeze-release-management-generate-issue-content-core-line-6)">--github-token</text><text class="breeze-release-management-generate-issue-content-core-r1" x="329.4" y="166.4" textLength="1110.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-6)">GitHub&#160;token&#160;used&#160;to&#160;authenticate.&#160;You&#160;can&#160;set&#160;omit&#160;it&#160;if&#160;you&#160;have&#160;GITHUB_TOKEN&#160;env&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-6)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-6)">
+</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-7)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="329.4" y="190.8" textLength="1110.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-7)">variable&#160;set.&#160;Can&#160;be&#160;generated&#160;with:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-7)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-7)">
+</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-8)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="329.4" y="215.2" textLength="1110.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-8)">https://github.com/settings/tokens/new?description=Read%20sssues&amp;scopes=repo:status&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-8)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-8)">
+</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-9)">│</text><text class="breeze-release-management-generate-issue-content-core-r6" x="329.4" y="239.6" textLength="1110.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-9)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-9)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-9)">
+</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-10)">│</text><text class="breeze-release-management-generate-issue-content-core-r7" x="24.4" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-10)">*</text><text class="breeze-release-management-generate-issue-content-core-r4" x="61" y="264" textLength="219.6" clip-path="url(#breeze-release-management-generate-issue-content-core-line-10)">--previous-release</text><text class="breeze-release-management-generate-issue-content-core-r1" x="329.4" y="264" textLength="817.4" clip-path="url(#breeze-release-management-generate-issue-content-core-line-10)">commit&#160;reference&#160;(for&#160;example&#160;hash&#160;or&#160;tag)&#160;of&#160;the&#160;previous&#160;release.</text><text class="breeze-release-management-generate-issue-content-core-r6" x="1159" y="264" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-10)">(TEXT)</text><text class="breeze-release-management-generate-issue-content-core-r8" x="1244.4" y="264" textLength="122" clip-path="url(#breeze-release-management-generate-issue-content-core-line-10)">[required]</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-10)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-10)">
+</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-11)">│</text><text class="breeze-release-management-generate-issue-content-core-r7" x="24.4" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-11)">*</text><text class="breeze-release-management-generate-issue-content-core-r4" x="61" y="288.4" textLength="207.4" clip-path="url(#breeze-release-management-generate-issue-content-core-line-11)">--current-release</text><text class="breeze-release-management-generate-issue-content-core-r1" x="329.4" y="288.4" textLength="805.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-11)">commit&#160;reference&#160;(for&#160;example&#160;hash&#160;or&#160;tag)&#160;of&#160;the&#160;current&#160;release.</text><text class="breeze-release-management-generate-issue-content-core-r6" x="1146.8" y="288.4" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-11)">(TEXT)</text><text class="breeze-release-management-generate-issue-content-core-r8" x="1232.2" y="288.4" textLength="122" clip-path="url(#breeze-release-management-generate-issue-content-core-line-11)">[required]</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-11)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-11)">
+</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-12)">│</text><text class="breeze-release-management-generate-issue-content-core-r4" x="61" y="312.8" textLength="219.6" clip-path="url(#breeze-release-management-generate-issue-content-core-line-12)">--excluded-pr-list</text><text class="breeze-release-management-generate-issue-content-core-r1" x="329.4" y="312.8" textLength="646.6" clip-path="url(#breeze-release-management-generate-issue-content-core-line-12)">Coma-separated&#160;list&#160;of&#160;PRs&#160;to&#160;exclude&#160;from&#160;the&#160;issue.</text><text class="breeze-release-management-generate-issue-content-core-r6" x="988.2" y="312.8" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-12)">(TEXT)</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-12)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-12)">
+</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-13)">│</text><text class="breeze-release-management-generate-issue-content-core-r4" x="61" y="337.2" textLength="195.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-13)">--limit-pr-count</text><text class="breeze-release-management-generate-issue-content-core-r1" x="329.4" y="337.2" textLength="805.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-13)">Limit&#160;PR&#160;count&#160;processes&#160;(useful&#160;for&#160;testing&#160;small&#160;subset&#160;of&#160;PRs).</text><text class="breeze-release-management-generate-issue-content-core-r6" x="1146.8" y="337.2" textLength="109.8" clip-path="url(#breeze-release-management-generate-issue-content-core-line-13)">(INTEGER)</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-13)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-13)">
+</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="361.6" textLength="1464" clip-path="url(#breeze-release-management-generate-issue-content-core-line-14)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-14)">
+</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="386" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-core-line-15)">╭─</text><text class="breeze-release-management-generate-issue-content-core-r5" x="24.4" y="386" textLength="195.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-15)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-generate-issue-content-core-r5" x="219.6" y="386" textLength="1220" clip-path="url(#breeze-release-management-generate-issue-content-core-line-15)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1439.6" y="386" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-core-line-15)">─╮</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-15)">
+</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-16)">│</text><text class="breeze-release-management-generate-issue-content-core-r4" x="24.4" y="410.4" textLength="109.8" clip-path="url(#breeze-release-management-generate-issue-content-core-line-16)">--verbose</text><text class="breeze-release-management-generate-issue-content-core-r9" x="158.6" y="410.4" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-core-line-16)">-v</text><text class="breeze-release-management-generate-issue-content-core-r1" x="207.4" y="410.4" textLength="585.6" clip-path="url(#breeze-release-management-generate-issue-content-core-line-16)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-16)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-16)">
+</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-17)">│</text><text class="breeze-release-management-generate-issue-content-core-r4" x="24.4" y="434.8" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-17)">--help</text><text class="breeze-release-management-generate-issue-content-core-r9" x="158.6" y="434.8" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-core-line-17)">-h</text><text class="breeze-release-management-generate-issue-content-core-r1" x="207.4" y="434.8" textLength="329.4" clip-path="url(#breeze-release-management-generate-issue-content-core-line-17)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-release-management-generate-issue-content-core-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-17)">│</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-17)">
+</text><text class="breeze-release-management-generate-issue-content-core-r5" x="0" y="459.2" textLength="1464" clip-path="url(#breeze-release-management-generate-issue-content-core-line-18)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-issue-content-core-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-core-line-18)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_release-management_generate-issue-content-core.txt b/dev/breeze/doc/images/output_release-management_generate-issue-content-core.txt
index b35e23d09d408..ff9db17bc0776 100644
--- a/dev/breeze/doc/images/output_release-management_generate-issue-content-core.txt
+++ b/dev/breeze/doc/images/output_release-management_generate-issue-content-core.txt
@@ -1 +1 @@
-00382e6b2a84a1edbf77eb5ed0a9df72
+4392efab41586255c9af6b05b028399a
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index a22d77912331b..47830d1cbcad1 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -174,7 +174,6 @@
 )
 from airflow_breeze.utils.shared_options import get_dry_run, get_verbose
 from airflow_breeze.utils.version_utils import (
-    get_latest_airflow_version,
     is_local_package_version,
 )
 from airflow_breeze.utils.versions import is_pre_release
@@ -2727,11 +2726,13 @@ def generate_issue_content_helm_chart(
     "--previous-release",
     type=str,
     help="commit reference (for example hash or tag) of the previous release.",
+    required=True,
 )
 @click.option(
     "--current-release",
     type=str,
     help="commit reference (for example hash or tag) of the current release.",
+    required=True,
 )
 @click.option("--excluded-pr-list", type=str, help="Coma-separated list of PRs to exclude from the issue.")
 @click.option(
@@ -2740,11 +2741,6 @@ def generate_issue_content_helm_chart(
     default=None,
     help="Limit PR count processes (useful for testing small subset of PRs).",
 )
-@click.option(
-    "--latest",
-    is_flag=True,
-    help="Run the command against latest released version of airflow",
-)
 @option_verbose
 def generate_issue_content_core(
     github_token: str,
@@ -2752,7 +2748,6 @@ def generate_issue_content_core(
     current_release: str,
     excluded_pr_list: str,
     limit_pr_count: int | None,
-    latest: bool,
 ):
     generate_issue_content(
         github_token,
@@ -2761,7 +2756,6 @@ def generate_issue_content_core(
         excluded_pr_list,
         limit_pr_count,
         is_helm_chart=False,
-        latest=latest,
     )
 
 
@@ -3753,7 +3747,6 @@ def generate_issue_content(
     excluded_pr_list: str,
     limit_pr_count: int | None,
     is_helm_chart: bool,
-    latest: bool = False,
 ):
     from github import Github, Issue, PullRequest, UnknownObjectException
 
@@ -3763,15 +3756,6 @@ def generate_issue_content(
     previous = previous_release
     current = current_release
 
-    if latest:
-        latest_airflow_version = get_latest_airflow_version()
-        previous = str(latest_airflow_version)
-        current = os.getenv("VERSION", "HEAD")
-        if current == "HEAD":
-            get_console().print(
-                "\n[warning]Environment variable VERSION not set, setting current release version as 'HEAD'\n"
-            )
-
     changes = get_changes(verbose, previous, current, is_helm_chart)
     change_prs = [change.pr for change in changes]
     if excluded_pr_list:
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
index ad9c275a40a83..d27c61835f3fd 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
@@ -350,7 +350,6 @@
                 "--current-release",
                 "--excluded-pr-list",
                 "--limit-pr-count",
-                "--latest",
             ],
         }
     ],
diff --git a/dev/breeze/src/airflow_breeze/utils/version_utils.py b/dev/breeze/src/airflow_breeze/utils/version_utils.py
index eabee9a4b44ef..d6e290097838f 100644
--- a/dev/breeze/src/airflow_breeze/utils/version_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/version_utils.py
@@ -17,28 +17,6 @@
 from __future__ import annotations
 
 
-def get_latest_helm_chart_version():
-    import requests
-
-    response = requests.get("https://airflow.apache.org/_gen/packages-metadata.json")
-    data = response.json()
-    for package in data:
-        if package["package-name"] == "helm-chart":
-            stable_version = package["stable-version"]
-            return stable_version
-
-
-def get_latest_airflow_version():
-    import requests
-
-    response = requests.get(
-        "https://pypi.org/pypi/apache-airflow/json", headers={"User-Agent": "Python requests"}
-    )
-    response.raise_for_status()
-    latest_released_version = response.json()["info"]["version"]
-    return latest_released_version
-
-
 def remove_local_version_suffix(version_suffix: str) -> str:
     if "+" in version_suffix:
         return version_suffix.split("+")[0]

From d81798088a63198d19ffc74279d87e8b57a79736 Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Thu, 26 Jun 2025 10:11:49 +0530
Subject: [PATCH 196/381] Updating issue content generation in GH workflows
 (#52271)

---
 .github/workflows/basic-tests.yml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/basic-tests.yml b/.github/workflows/basic-tests.yml
index 8b46ddffd7b63..e206aa75de767 100644
--- a/.github/workflows/basic-tests.yml
+++ b/.github/workflows/basic-tests.yml
@@ -363,4 +363,5 @@ jobs:
         run: git fetch --tags >/dev/null 2>&1 || true
       - name: "Test airflow core issue generation automatically"
         run: |
-          breeze release-management generate-issue-content-core --limit-pr-count 25 --latest --verbose
+          breeze release-management generate-issue-content-core --limit-pr-count 2
+          --previous-release 3.0.1 --current-release 3.0.2 --verbose

From b070c3a99742fc0dd725f44dc8a6459a16ceb7ae Mon Sep 17 00:00:00 2001
From: Shahar Epstein <60007259+shahar1@users.noreply.github.com>
Date: Thu, 26 Jun 2025 12:34:54 +0300
Subject: [PATCH 197/381] Fix docstring typo in dag_processing/manager.py
 (#52266)

---
 airflow-core/src/airflow/dag_processing/manager.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/airflow-core/src/airflow/dag_processing/manager.py b/airflow-core/src/airflow/dag_processing/manager.py
index 36b1bf3e478b2..aebba824231e3 100644
--- a/airflow-core/src/airflow/dag_processing/manager.py
+++ b/airflow-core/src/airflow/dag_processing/manager.py
@@ -151,7 +151,7 @@ class DagFileProcessorManager(LoggingMixin):
     over again, but no more often than the specified interval.
 
     :param max_runs: The number of times to parse each file. -1 for unlimited.
-    :param bundles_names_to_parse: List of bundle names to parse. If None, all bundles are parsed.
+    :param bundle_names_to_parse: List of bundle names to parse. If None, all bundles are parsed.
     :param processor_timeout: How long to wait before timing out a DAG file processor
     """
 

From fda3fdac39063113c6476346c9e1057471e683c5 Mon Sep 17 00:00:00 2001
From: Kyungjun Lee <kyungjunlee.me@gmail.com>
Date: Thu, 26 Jun 2025 18:45:13 +0900
Subject: [PATCH 198/381] Clean up remaining DB-dependent tests from OpenSearch
 provider (#52235)

* DEL: remove pytestmark

* DEL: remove pytestmark in os_response

* DEL: remove pytestmark in operator

* CHG: opensearch in .pre-commit-config.yaml and Mark DB-dependent tests in test_os_task_handler with @pytest.mark.db_test

* CHORE: Enable db_test pre-commit check for OpenSearch hooks/operators

* DEL: check-pytest-mark-db-test-in-providers about opensearch in pre-commit-config.yaml
---
 .../opensearch/log/test_os_json_formatter.py    |  1 -
 .../unit/opensearch/log/test_os_response.py     |  1 -
 .../unit/opensearch/log/test_os_task_handler.py | 17 +++++++++++++++--
 .../opensearch/operators/test_opensearch.py     |  1 -
 4 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/providers/opensearch/tests/unit/opensearch/log/test_os_json_formatter.py b/providers/opensearch/tests/unit/opensearch/log/test_os_json_formatter.py
index e85f02b56beea..14700b44737fb 100644
--- a/providers/opensearch/tests/unit/opensearch/log/test_os_json_formatter.py
+++ b/providers/opensearch/tests/unit/opensearch/log/test_os_json_formatter.py
@@ -29,7 +29,6 @@
 )
 
 opensearchpy = pytest.importorskip("opensearchpy")
-pytestmark = pytest.mark.db_test
 
 
 class TestOpensearchJSONFormatter:
diff --git a/providers/opensearch/tests/unit/opensearch/log/test_os_response.py b/providers/opensearch/tests/unit/opensearch/log/test_os_response.py
index 31af433754ff4..f7f36b6732fb4 100644
--- a/providers/opensearch/tests/unit/opensearch/log/test_os_response.py
+++ b/providers/opensearch/tests/unit/opensearch/log/test_os_response.py
@@ -31,7 +31,6 @@
 from airflow.providers.opensearch.log.os_task_handler import OpensearchTaskHandler
 
 opensearchpy = pytest.importorskip("opensearchpy")
-pytestmark = pytest.mark.db_test
 
 
 class TestHitAndHitMetaAndOpenSearchResponse:
diff --git a/providers/opensearch/tests/unit/opensearch/log/test_os_task_handler.py b/providers/opensearch/tests/unit/opensearch/log/test_os_task_handler.py
index ee90e3c622081..fb51c56e469ec 100644
--- a/providers/opensearch/tests/unit/opensearch/log/test_os_task_handler.py
+++ b/providers/opensearch/tests/unit/opensearch/log/test_os_task_handler.py
@@ -48,7 +48,6 @@
 from unit.opensearch.conftest import MockClient
 
 opensearchpy = pytest.importorskip("opensearchpy")
-pytestmark = pytest.mark.db_test
 
 ES_PROVIDER_YAML_FILE = AIRFLOW_PROVIDERS_ROOT_PATH / "elasticsearch" / "provider.yaml"
 
@@ -191,6 +190,7 @@ def test_client_with_patterns(self):
         )
         assert handler.index_patterns == patterns
 
+    @pytest.mark.db_test
     def test_read(self, ti):
         ts = pendulum.now()
         logs, metadatas = self.os_task_handler.read(
@@ -220,6 +220,7 @@ def test_read(self, ti):
         assert not metadata["end_of_log"]
         assert timezone.parse(metadata["last_log_timestamp"]) > ts
 
+    @pytest.mark.db_test
     def test_read_with_patterns(self, ti):
         ts = pendulum.now()
         with mock.patch.object(self.os_task_handler, "index_patterns", new="test_*,other_*"):
@@ -250,6 +251,7 @@ def test_read_with_patterns(self, ti):
         assert not metadata["end_of_log"]
         assert timezone.parse(metadata["last_log_timestamp"]) > ts
 
+    @pytest.mark.db_test
     def test_read_with_patterns_no_match(self, ti):
         ts = pendulum.now()
         with mock.patch.object(self.os_task_handler, "index_patterns", new="test_other_*,test_another_*"):
@@ -284,6 +286,7 @@ def test_read_with_patterns_no_match(self, ti):
         # last_log_timestamp won't change if no log lines read.
         assert timezone.parse(metadata["last_log_timestamp"]) == ts
 
+    @pytest.mark.db_test
     def test_read_with_missing_index(self, ti):
         ts = pendulum.now()
         with mock.patch.object(self.os_task_handler, "index_patterns", new="nonexistent,test_*"):
@@ -304,6 +307,7 @@ def test_read_with_missing_index(self, ti):
                     )
 
     @pytest.mark.parametrize("seconds", [3, 6])
+    @pytest.mark.db_test
     def test_read_missing_logs(self, seconds, create_task_instance):
         """
         When the log actually isn't there to be found, we only want to wait for 5 seconds.
@@ -359,6 +363,7 @@ def test_read_missing_logs(self, seconds, create_task_instance):
             assert metadatas[0]["offset"] == "0"
             assert timezone.parse(metadatas[0]["last_log_timestamp"]) == ts
 
+    @pytest.mark.db_test
     def test_read_with_none_metadata(self, ti):
         logs, metadatas = self.os_task_handler.read(ti, 1)
 
@@ -386,10 +391,12 @@ def test_read_with_none_metadata(self, ti):
         assert not metadata["end_of_log"]
         assert timezone.parse(metadata["last_log_timestamp"]) < pendulum.now()
 
+    @pytest.mark.db_test
     def test_set_context(self, ti):
         self.os_task_handler.set_context(ti)
         assert self.os_task_handler.mark_end_on_close
 
+    @pytest.mark.db_test
     def test_set_context_w_json_format_and_write_stdout(self, ti):
         formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
         self.os_task_handler.formatter = formatter
@@ -397,6 +404,7 @@ def test_set_context_w_json_format_and_write_stdout(self, ti):
         self.os_task_handler.json_format = True
         self.os_task_handler.set_context(ti)
 
+    @pytest.mark.db_test
     def test_close(self, ti):
         formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
         self.os_task_handler.formatter = formatter
@@ -413,6 +421,7 @@ def test_close(self, ti):
             assert log_line.endswith(self.end_of_log_mark.strip())
         assert self.os_task_handler.closed
 
+    @pytest.mark.db_test
     def test_close_no_mark_end(self, ti):
         ti.raw = True
         self.os_task_handler.set_context(ti)
@@ -423,6 +432,7 @@ def test_close_no_mark_end(self, ti):
             assert self.end_of_log_mark not in log_file.read()
         assert self.os_task_handler.closed
 
+    @pytest.mark.db_test
     def test_close_closed(self, ti):
         self.os_task_handler.closed = True
         self.os_task_handler.set_context(ti)
@@ -432,6 +442,7 @@ def test_close_closed(self, ti):
         ) as log_file:
             assert len(log_file.read()) == 0
 
+    @pytest.mark.db_test
     def test_close_with_no_handler(self, ti):
         self.os_task_handler.set_context(ti)
         self.os_task_handler.handler = None
@@ -442,6 +453,7 @@ def test_close_with_no_handler(self, ti):
             assert len(log_file.read()) == 0
         assert self.os_task_handler.closed
 
+    @pytest.mark.db_test
     def test_close_with_no_stream(self, ti):
         self.os_task_handler.set_context(ti)
         self.os_task_handler.handler.stream = None
@@ -461,18 +473,19 @@ def test_close_with_no_stream(self, ti):
             assert self.end_of_log_mark in log_file.read()
         assert self.os_task_handler.closed
 
+    @pytest.mark.db_test
     def test_render_log_id(self, ti):
         assert self.os_task_handler._render_log_id(ti, 1) == self.LOG_ID
 
         self.os_task_handler.json_format = True
         assert self.os_task_handler._render_log_id(ti, 1) == self.JSON_LOG_ID
 
-    #
     def test_clean_date(self):
         clean_execution_date = self.os_task_handler._clean_date(datetime(2016, 7, 8, 9, 10, 11, 12))
         assert clean_execution_date == "2016_07_08T09_10_11_000012"
 
     @mock.patch("sys.__stdout__", new_callable=StringIO)
+    @pytest.mark.db_test
     def test_dynamic_offset(self, stdout_mock, ti, time_machine):
         # arrange
         handler = OpensearchTaskHandler(
diff --git a/providers/opensearch/tests/unit/opensearch/operators/test_opensearch.py b/providers/opensearch/tests/unit/opensearch/operators/test_opensearch.py
index fd42a91a71dd6..02eb9c2d68e71 100644
--- a/providers/opensearch/tests/unit/opensearch/operators/test_opensearch.py
+++ b/providers/opensearch/tests/unit/opensearch/operators/test_opensearch.py
@@ -28,7 +28,6 @@
 from airflow.utils.timezone import datetime
 
 opensearchpy = pytest.importorskip("opensearchpy")
-pytestmark = pytest.mark.db_test
 
 
 TEST_DAG_ID = "unit_tests"

From 85e559d747f399313cb760cd8e99596e8efa427a Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Thu, 26 Jun 2025 15:24:53 +0530
Subject: [PATCH 199/381] Fix multi line release command in CI (#52281)

---
 .github/workflows/basic-tests.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/basic-tests.yml b/.github/workflows/basic-tests.yml
index e206aa75de767..3183ace6b0095 100644
--- a/.github/workflows/basic-tests.yml
+++ b/.github/workflows/basic-tests.yml
@@ -363,5 +363,5 @@ jobs:
         run: git fetch --tags >/dev/null 2>&1 || true
       - name: "Test airflow core issue generation automatically"
         run: |
-          breeze release-management generate-issue-content-core --limit-pr-count 2
-          --previous-release 3.0.1 --current-release 3.0.2 --verbose
+          breeze release-management generate-issue-content-core \
+            --limit-pr-count 2 --previous-release 3.0.1 --current-release 3.0.2 --verbose

From 79d5740cc2e053a2f98a97690bd1e86823a438f1 Mon Sep 17 00:00:00 2001
From: Satish Chinthanippu <satish.chinthanippu@teradata.com>
Date: Thu, 26 Jun 2025 03:02:42 -0700
Subject: [PATCH 200/381] Enhanced the BTEQ operator to ensure platform
 independence. (#52252)

* OS platform dependent code changed to platform independent (#59)

Co-authored-by: Satish Ch <satishchinthanippu@gmail.com>

* Bteq platform independent (#61)

* OS platform dependent code changed to platform independent

* mac platform verified and adjusted code to work with zsh and normal shell

---------

Co-authored-by: Satish Ch <satishchinthanippu@gmail.com>

---------

Co-authored-by: Satish Ch <satishchinthanippu@gmail.com>
---
 .../airflow/providers/teradata/hooks/bteq.py  |  18 +-
 .../providers/teradata/operators/bteq.py      |   2 -
 .../providers/teradata/utils/bteq_util.py     |  37 +++-
 .../tests/unit/teradata/hooks/test_bteq.py    |  32 ++-
 .../unit/teradata/operators/test_bteq.py      |   4 +-
 .../unit/teradata/utils/test_bteq_util.py     | 201 ++++++++++++++++--
 6 files changed, 265 insertions(+), 29 deletions(-)

diff --git a/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py b/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py
index 89aac594ddb18..dae400a638825 100644
--- a/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py
+++ b/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py
@@ -29,6 +29,8 @@
 from airflow.providers.ssh.hooks.ssh import SSHHook
 from airflow.providers.teradata.hooks.ttu import TtuHook
 from airflow.providers.teradata.utils.bteq_util import (
+    get_remote_tmp_dir,
+    identify_os,
     prepare_bteq_command_for_local_execution,
     prepare_bteq_command_for_remote_execution,
     transfer_file_sftp,
@@ -161,7 +163,13 @@ def _transfer_to_and_execute_bteq_on_remote(
                     password = generate_random_password()  # Encryption/Decryption password
                     encrypted_file_path = os.path.join(tmp_dir, "bteq_script.enc")
                     generate_encrypted_file_with_openssl(file_path, password, encrypted_file_path)
+                    if not remote_working_dir:
+                        remote_working_dir = get_remote_tmp_dir(ssh_client)
+                        self.log.debug(
+                            "Transferring encrypted BTEQ script to remote host: %s", remote_working_dir
+                        )
                     remote_encrypted_path = os.path.join(remote_working_dir or "", "bteq_script.enc")
+                    remote_encrypted_path = remote_encrypted_path.replace("/", "\\")
 
                     transfer_file_sftp(ssh_client, encrypted_file_path, remote_encrypted_path)
 
@@ -219,14 +227,20 @@ def _transfer_to_and_execute_bteq_on_remote(
             if encrypted_file_path and os.path.exists(encrypted_file_path):
                 os.remove(encrypted_file_path)
             # Cleanup: Delete the remote temporary file
-            if encrypted_file_path:
-                cleanup_en_command = f"rm -f {remote_encrypted_path}"
+            if remote_encrypted_path:
                 if self.ssh_hook and self.ssh_hook.get_conn():
                     with self.ssh_hook.get_conn() as ssh_client:
                         if ssh_client is None:
                             raise AirflowException(
                                 "Failed to establish SSH connection. `ssh_client` is None."
                             )
+                        # Detect OS
+                        os_info = identify_os(ssh_client)
+                        if "windows" in os_info:
+                            cleanup_en_command = f'del /f /q "{remote_encrypted_path}"'
+                        else:
+                            cleanup_en_command = f"rm -f '{remote_encrypted_path}'"
+                        self.log.debug("cleaning up remote file: %s", cleanup_en_command)
                         ssh_client.exec_command(cleanup_en_command)
 
     def execute_bteq_script_at_local(
diff --git a/providers/teradata/src/airflow/providers/teradata/operators/bteq.py b/providers/teradata/src/airflow/providers/teradata/operators/bteq.py
index 22779be9bfb33..c1373d51e9cd1 100644
--- a/providers/teradata/src/airflow/providers/teradata/operators/bteq.py
+++ b/providers/teradata/src/airflow/providers/teradata/operators/bteq.py
@@ -141,8 +141,6 @@ def execute(self, context: Context) -> int | None:
         elif self.bteq_script_encoding == "UTF16":
             self.temp_file_read_encoding = "UTF-16"
 
-        if not self.remote_working_dir:
-            self.remote_working_dir = "/tmp"
         # Handling execution on local:
         if not self._ssh_hook:
             if self.sql:
diff --git a/providers/teradata/src/airflow/providers/teradata/utils/bteq_util.py b/providers/teradata/src/airflow/providers/teradata/utils/bteq_util.py
index 0741ebb20090c..591e4c085c874 100644
--- a/providers/teradata/src/airflow/providers/teradata/utils/bteq_util.py
+++ b/providers/teradata/src/airflow/providers/teradata/utils/bteq_util.py
@@ -28,6 +28,11 @@
 from airflow.exceptions import AirflowException
 
 
+def identify_os(ssh_client: SSHClient) -> str:
+    stdin, stdout, stderr = ssh_client.exec_command("uname || ver")
+    return stdout.read().decode().lower()
+
+
 def verify_bteq_installed():
     """Verify if BTEQ is installed and available in the system's PATH."""
     if shutil.which("bteq") is None:
@@ -36,7 +41,23 @@ def verify_bteq_installed():
 
 def verify_bteq_installed_remote(ssh_client: SSHClient):
     """Verify if BTEQ is installed on the remote machine."""
-    stdin, stdout, stderr = ssh_client.exec_command("which bteq")
+    # Detect OS
+    os_info = identify_os(ssh_client)
+
+    if "windows" in os_info:
+        check_cmd = "where bteq"
+    elif "darwin" in os_info:
+        # Check if zsh exists first
+        stdin, stdout, stderr = ssh_client.exec_command("command -v zsh")
+        zsh_path = stdout.read().strip()
+        if zsh_path:
+            check_cmd = 'zsh -l -c "which bteq"'
+        else:
+            check_cmd = "which bteq"
+    else:
+        check_cmd = "which bteq"
+
+    stdin, stdout, stderr = ssh_client.exec_command(check_cmd)
     exit_status = stdout.channel.recv_exit_status()
     output = stdout.read().strip()
     error = stderr.read().strip()
@@ -53,6 +74,20 @@ def transfer_file_sftp(ssh_client, local_path, remote_path):
     sftp.close()
 
 
+def get_remote_tmp_dir(ssh_client):
+    os_info = identify_os(ssh_client)
+
+    if "windows" in os_info:
+        # Try getting Windows temp dir
+        stdin, stdout, stderr = ssh_client.exec_command("echo %TEMP%")
+        tmp_dir = stdout.read().decode().strip()
+        if not tmp_dir:
+            tmp_dir = "C:\\Temp"
+    else:
+        tmp_dir = "/tmp"
+    return tmp_dir
+
+
 # We can not pass host details with bteq command when executing on remote machine. Instead, we will prepare .logon in bteq script itself to avoid risk of
 # exposing sensitive information
 def prepare_bteq_script_for_remote_execution(conn: dict[str, Any], sql: str) -> str:
diff --git a/providers/teradata/tests/unit/teradata/hooks/test_bteq.py b/providers/teradata/tests/unit/teradata/hooks/test_bteq.py
index 46b50e652b597..38269ecb99d17 100644
--- a/providers/teradata/tests/unit/teradata/hooks/test_bteq.py
+++ b/providers/teradata/tests/unit/teradata/hooks/test_bteq.py
@@ -240,7 +240,14 @@ def test_execute_bteq_script_at_remote_success(
     mock_ssh_hook.get_conn.return_value.__enter__.return_value = mock_ssh_client
     mock_ssh_hook_class.return_value = mock_ssh_hook
 
-    # Instantiate BteqHook with ssh_conn_id (will use mocked SSHHook)
+    # Mock exec_command to simulate 'uname || ver'
+    mock_stdin = MagicMock()
+    mock_stdout = MagicMock()
+    mock_stderr = MagicMock()
+    mock_stdout.read.return_value = b"Linux\n"
+    mock_ssh_client.exec_command.return_value = (mock_stdin, mock_stdout, mock_stderr)
+
+    # Instantiate BteqHook
     hook = BteqHook(ssh_conn_id="ssh_conn_id", teradata_conn_id="teradata_conn")
 
     # Call method under test
@@ -342,13 +349,28 @@ def test_remote_execution_cleanup_on_exception(
     temp_dir = "/tmp"
     local_file_path = os.path.join(temp_dir, "bteq_script.txt")
     remote_working_dir = temp_dir
-
-    # Make sure the local encrypted file exists for cleanup
     encrypted_file_path = os.path.join(temp_dir, "bteq_script.enc")
+
+    # Create dummy local encrypted file
     with open(encrypted_file_path, "w") as f:
         f.write("dummy")
 
-    with pytest.raises(AirflowException):
+    # Simulate decrypt failing
+    mock_decrypt.side_effect = Exception("mocked exception")
+
+    # Patch exec_command for remote cleanup (identify_os, rm)
+    ssh_client = hook_with_ssh.ssh_hook.get_conn.return_value.__enter__.return_value
+
+    mock_stdin = MagicMock()
+    mock_stdout = MagicMock()
+    mock_stderr = MagicMock()
+
+    # For identify_os ("uname || ver")
+    mock_stdout.read.return_value = b"Linux\n"
+    ssh_client.exec_command.return_value = (mock_stdin, mock_stdout, mock_stderr)
+
+    # Run the test
+    with pytest.raises(AirflowException, match="mocked exception"):
         hook_with_ssh._transfer_to_and_execute_bteq_on_remote(
             file_path=local_file_path,
             remote_working_dir=remote_working_dir,
@@ -360,5 +382,5 @@ def test_remote_execution_cleanup_on_exception(
             tmp_dir=temp_dir,
         )
 
-    # After exception, encrypted file should be deleted
+    # Verify local encrypted file is deleted
     assert not os.path.exists(encrypted_file_path)
diff --git a/providers/teradata/tests/unit/teradata/operators/test_bteq.py b/providers/teradata/tests/unit/teradata/operators/test_bteq.py
index d6690096aa83f..0e9a0ed0b150d 100644
--- a/providers/teradata/tests/unit/teradata/operators/test_bteq.py
+++ b/providers/teradata/tests/unit/teradata/operators/test_bteq.py
@@ -51,7 +51,7 @@ def test_execute(self, mock_hook_init, mock_execute_bteq):
 
         # Then
         mock_hook_init.assert_called_once_with(teradata_conn_id=teradata_conn_id, ssh_conn_id=None)
-        mock_execute_bteq.assert_called_once_with(sql + "\n.EXIT", "/tmp", "", 600, None, "", None, "UTF-8")
+        mock_execute_bteq.assert_called_once_with(sql + "\n.EXIT", None, "", 600, None, "", None, "UTF-8")
         assert result == "BTEQ execution result"
 
     @mock.patch.object(BteqHook, "execute_bteq_script")
@@ -81,7 +81,7 @@ def test_execute_sql_only(self, mock_hook_init, mock_execute_bteq):
         mock_hook_init.assert_called_once_with(teradata_conn_id=teradata_conn_id, ssh_conn_id=None)
         mock_execute_bteq.assert_called_once_with(
             sql + "\n.EXIT",  # Assuming the prepare_bteq_script_for_local_execution appends ".EXIT"
-            "/tmp",  # default remote_working_dir
+            None,  # default remote_working_dir
             "",  # bteq_script_encoding (default ASCII => empty string)
             600,  # timeout default
             None,  # timeout_rc
diff --git a/providers/teradata/tests/unit/teradata/utils/test_bteq_util.py b/providers/teradata/tests/unit/teradata/utils/test_bteq_util.py
index f0ee54aaa6804..78f2624d01e94 100644
--- a/providers/teradata/tests/unit/teradata/utils/test_bteq_util.py
+++ b/providers/teradata/tests/unit/teradata/utils/test_bteq_util.py
@@ -19,12 +19,13 @@
 import os
 import stat
 import unittest
-from unittest.mock import MagicMock, patch
+from unittest.mock import MagicMock, call, patch
 
 import pytest
 
 from airflow.exceptions import AirflowException
 from airflow.providers.teradata.utils.bteq_util import (
+    identify_os,
     is_valid_encoding,
     is_valid_file,
     is_valid_remote_bteq_script_file,
@@ -38,6 +39,62 @@
 
 
 class TestBteqUtils:
+    def test_identify_os_linux(self):
+        # Arrange
+        ssh_client = MagicMock()
+        stdout_mock = MagicMock()
+        stdout_mock.read.return_value = b"Linux\n"
+        ssh_client.exec_command.return_value = (MagicMock(), stdout_mock, MagicMock())
+
+        # Act
+        os_info = identify_os(ssh_client)
+
+        # Assert
+        ssh_client.exec_command.assert_called_once_with("uname || ver")
+        assert os_info == "linux\n"
+
+    def test_identify_os_windows(self):
+        # Arrange
+        ssh_client = MagicMock()
+        stdout_mock = MagicMock()
+        stdout_mock.read.return_value = b"Microsoft Windows [Version 10.0.19045.3324]\n"
+        ssh_client.exec_command.return_value = (MagicMock(), stdout_mock, MagicMock())
+
+        # Act
+        os_info = identify_os(ssh_client)
+
+        # Assert
+        ssh_client.exec_command.assert_called_once_with("uname || ver")
+        assert "windows" in os_info
+
+    def test_identify_os_macos(self):
+        # Arrange
+        ssh_client = MagicMock()
+        stdout_mock = MagicMock()
+        stdout_mock.read.return_value = b"Darwin\n"
+        ssh_client.exec_command.return_value = (MagicMock(), stdout_mock, MagicMock())
+
+        # Act
+        os_info = identify_os(ssh_client)
+
+        # Assert
+        ssh_client.exec_command.assert_called_once_with("uname || ver")
+        assert os_info == "darwin\n"
+
+    def test_identify_os_empty_response(self):
+        # Arrange
+        ssh_client = MagicMock()
+        stdout_mock = MagicMock()
+        stdout_mock.read.return_value = b""
+        ssh_client.exec_command.return_value = (MagicMock(), stdout_mock, MagicMock())
+
+        # Act
+        os_info = identify_os(ssh_client)
+
+        # Assert
+        ssh_client.exec_command.assert_called_once_with("uname || ver")
+        assert os_info == ""
+
     @patch("shutil.which")
     def test_verify_bteq_installed_success(self, mock_which):
         mock_which.return_value = "/usr/bin/bteq"
@@ -65,6 +122,132 @@ def test_prepare_bteq_script_for_local_execution(self):
         assert "SELECT 1;" in script
         assert ".EXIT" in script
 
+    @patch("airflow.providers.teradata.utils.bteq_util.identify_os", return_value="linux")
+    def test_verify_bteq_installed_remote_linux(self, mock_os):
+        ssh_client = MagicMock()
+        stdout_mock = MagicMock()
+        stdout_mock.read.return_value = b"/usr/bin/bteq"
+        stdout_mock.channel.recv_exit_status.return_value = 0
+
+        ssh_client.exec_command.return_value = (MagicMock(), stdout_mock, MagicMock())
+
+        verify_bteq_installed_remote(ssh_client)
+        ssh_client.exec_command.assert_called_once_with("which bteq")
+
+    @patch("airflow.providers.teradata.utils.bteq_util.identify_os", return_value="windows")
+    def test_verify_bteq_installed_remote_windows(self, mock_os):
+        ssh_client = MagicMock()
+        stdout_mock = MagicMock()
+        stdout_mock.read.return_value = b"C:\\Program Files\\bteq.exe"
+        stdout_mock.channel.recv_exit_status.return_value = 0
+
+        ssh_client.exec_command.return_value = (MagicMock(), stdout_mock, MagicMock())
+
+        verify_bteq_installed_remote(ssh_client)
+        ssh_client.exec_command.assert_called_once_with("where bteq")
+
+    @patch("airflow.providers.teradata.utils.bteq_util.identify_os", return_value="darwin")
+    def test_verify_bteq_installed_remote_macos(self, mock_os):
+        ssh_client = MagicMock()
+        stdout_mock = MagicMock()
+        stdout_mock.read.return_value = b"/usr/local/bin/bteq"
+        stdout_mock.channel.recv_exit_status.return_value = 0
+
+        ssh_client.exec_command.return_value = (MagicMock(), stdout_mock, MagicMock())
+
+        verify_bteq_installed_remote(ssh_client)
+
+        ssh_client.exec_command.assert_has_calls(
+            [
+                call("command -v zsh"),
+                call('zsh -l -c "which bteq"'),
+            ]
+        )
+
+    @patch("airflow.providers.teradata.utils.bteq_util.identify_os", return_value="darwin")
+    def test_verify_bteq_installed_remote_macos_which_called_when_no_zsh(self, mock_os):
+        ssh_client = MagicMock()
+
+        # Mock for "command -v zsh" returning empty (no zsh)
+        stdin_mock_1 = MagicMock()
+        stdout_mock_1 = MagicMock()
+        stderr_mock_1 = MagicMock()
+        stdout_mock_1.read.return_value = b""  # No zsh path found
+        stderr_mock_1.read.return_value = b""  # Return empty bytes here!
+        ssh_client.exec_command.side_effect = [
+            (stdin_mock_1, stdout_mock_1, stderr_mock_1),  # command -v zsh
+            (MagicMock(), MagicMock(), MagicMock()),  # which bteq
+        ]
+
+        # Mock for "which bteq" command response
+        stdin_mock_2 = MagicMock()
+        stdout_mock_2 = MagicMock()
+        stderr_mock_2 = MagicMock()
+        stdout_mock_2.channel.recv_exit_status.return_value = 0
+        stdout_mock_2.read.return_value = b"/usr/local/bin/bteq"
+        stderr_mock_2.read.return_value = b""  # Also return bytes here
+
+        # Since side_effect was already assigned, override second call manually
+        ssh_client.exec_command.side_effect = [
+            (stdin_mock_1, stdout_mock_1, stderr_mock_1),  # command -v zsh
+            (stdin_mock_2, stdout_mock_2, stderr_mock_2),  # which bteq
+        ]
+
+        verify_bteq_installed_remote(ssh_client)
+
+        ssh_client.exec_command.assert_has_calls(
+            [
+                call("command -v zsh"),
+                call("which bteq"),
+            ]
+        )
+
+    @patch("airflow.providers.teradata.utils.bteq_util.identify_os", return_value="darwin")
+    def test_verify_bteq_installed_remote_macos_which_fails_no_zsh(self, mock_os):
+        ssh_client = MagicMock()
+
+        # Mock for "command -v zsh" returning empty (no zsh)
+        stdin_mock_1 = MagicMock()
+        stdout_mock_1 = MagicMock()
+        stderr_mock_1 = MagicMock()
+        stdout_mock_1.read.return_value = b""  # No zsh path found
+        ssh_client.exec_command.side_effect = [
+            (stdin_mock_1, stdout_mock_1, stderr_mock_1),  # command -v zsh
+            (MagicMock(), MagicMock(), MagicMock()),  # which bteq
+        ]
+
+        # For which bteq failure
+        ssh_client.exec_command.return_value[1].channel.recv_exit_status.return_value = 1
+        ssh_client.exec_command.return_value[1].read.return_value = b""
+        ssh_client.exec_command.return_value[2].read.return_value = b"command not found"
+
+        with pytest.raises(AirflowException) as exc_info:
+            verify_bteq_installed_remote(ssh_client)
+
+        assert "BTEQ is not installed or not available in PATH" in str(exc_info.value)
+
+        ssh_client.exec_command.assert_has_calls(
+            [
+                call("command -v zsh"),
+                call("which bteq"),
+            ]
+        )
+
+    @patch("airflow.providers.teradata.utils.bteq_util.identify_os", return_value="linux")
+    def test_verify_bteq_installed_remote_fail(self, mock_os):
+        ssh_client = MagicMock()
+        stdout_mock = MagicMock()
+        stderr_mock = MagicMock()
+        stdout_mock.read.return_value = b""
+        stderr_mock.read.return_value = b"command not found"
+        stdout_mock.channel.recv_exit_status.return_value = 1
+
+        ssh_client.exec_command.return_value = (MagicMock(), stdout_mock, stderr_mock)
+
+        with pytest.raises(AirflowException, match="BTEQ is not installed or not available in PATH"):
+            verify_bteq_installed_remote(ssh_client)
+        ssh_client.exec_command.assert_called_once_with("which bteq")
+
     @patch("paramiko.SSHClient.exec_command")
     def test_verify_bteq_installed_remote_success(self, mock_exec):
         mock_stdin = MagicMock()
@@ -81,22 +264,6 @@ def test_verify_bteq_installed_remote_success(self, mock_exec):
         # Should not raise
         verify_bteq_installed_remote(ssh_client)
 
-    @patch("paramiko.SSHClient.exec_command")
-    def test_verify_bteq_installed_remote_fail(self, mock_exec):
-        mock_stdin = MagicMock()
-        mock_stdout = MagicMock()
-        mock_stderr = MagicMock()
-        mock_stdout.channel.recv_exit_status.return_value = 1
-        mock_stdout.read.return_value = b""
-        mock_stderr.read.return_value = b"command not found"
-        mock_exec.return_value = (mock_stdin, mock_stdout, mock_stderr)
-
-        ssh_client = MagicMock()
-        ssh_client.exec_command = mock_exec
-
-        with pytest.raises(AirflowException):
-            verify_bteq_installed_remote(ssh_client)
-
     @patch("paramiko.SSHClient.open_sftp")
     def test_transfer_file_sftp(self, mock_open_sftp):
         mock_sftp = MagicMock()

From 8846bef4f9cfc220ebf4aa68758ff798f0d17b05 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Thu, 26 Jun 2025 12:27:41 +0200
Subject: [PATCH 201/381] Unify selecting constraints option when installing
 airflow (#52274)

Due to the way how it historically got added - we had two ways of
selecting whether we are installing airlfow dyanmically in breeze
with or without constraints:

* --install-airflow-with-constraints - was used in a few places
* --skip-airflow-constraints - was used in other places

The logic to handle those were broken at places where they
contradicted each other. This PR unifies it and only uses
the --install-airflow-with-constraints flag in all the places
where we need to determine whether constraints are used or not
and it fixes the logic.

The logic of installation had been reviewed, refactored into
separate methods doing smaller tasks and more diagnostics was
added.
---
 .github/workflows/test-providers.yml          |   3 +-
 ...agement_install-provider-distributions.svg | 162 +++++---
 ...agement_install-provider-distributions.txt |   2 +-
 ...nagement_verify-provider-distributions.svg |  94 +++--
 ...nagement_verify-provider-distributions.txt |   2 +-
 dev/breeze/doc/images/output_shell.svg        | 162 ++++----
 dev/breeze/doc/images/output_shell.txt        |   2 +-
 .../doc/images/output_start-airflow.svg       |  96 +++--
 .../doc/images/output_start-airflow.txt       |   2 +-
 .../airflow_breeze/commands/common_options.py |  16 +
 .../common_package_installation_options.py    |  14 -
 .../commands/developer_commands.py            |  22 +-
 .../commands/developer_commands_config.py     |   3 +-
 .../commands/release_management_commands.py   |  13 +-
 .../release_management_commands_config.py     |   3 +-
 .../commands/testing_commands.py              |   2 +-
 .../src/airflow_breeze/params/shell_params.py |   2 -
 scripts/ci/docker-compose/devcontainer.env    |   2 +-
 .../install_airflow_and_providers.py          | 348 ++++++++----------
 19 files changed, 477 insertions(+), 473 deletions(-)

diff --git a/.github/workflows/test-providers.yml b/.github/workflows/test-providers.yml
index 279adf0c303e7..525e8e8599a9d 100644
--- a/.github/workflows/test-providers.yml
+++ b/.github/workflows/test-providers.yml
@@ -138,7 +138,8 @@ jobs:
       - name: "Install and verify wheel provider distributions"
         env:
           DISTRIBUTION_FORMAT: ${{ matrix.package-format }}
-          AIRFLOW_SKIP_CONSTRAINTS: "${{ inputs.upgrade-to-newer-dependencies }}"
+          # yamllint disable rule:line-length
+          INSTALL_AIRFLOW_WITH_CONSTRAINTS: "${{ inputs.upgrade-to-newer-dependencies == 'true' && 'false' || 'true' }}"
         run: >
           breeze release-management verify-provider-distributions
           --use-distributions-from-dist
diff --git a/dev/breeze/doc/images/output_release-management_install-provider-distributions.svg b/dev/breeze/doc/images/output_release-management_install-provider-distributions.svg
index 57fc23ccfb74a..700503f144096 100644
--- a/dev/breeze/doc/images/output_release-management_install-provider-distributions.svg
+++ b/dev/breeze/doc/images/output_release-management_install-provider-distributions.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1684.8" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 2002.0" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-release-management-install-provider-distributions-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="1633.8" />
+      <rect x="0" y="0" width="1463.0" height="1951.0" />
     </clipPath>
     <clipPath id="breeze-release-management-install-provider-distributions-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -243,9 +243,48 @@
 <clipPath id="breeze-release-management-install-provider-distributions-line-65">
     <rect x="0" y="1587.5" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-release-management-install-provider-distributions-line-66">
+    <rect x="0" y="1611.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-install-provider-distributions-line-67">
+    <rect x="0" y="1636.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-install-provider-distributions-line-68">
+    <rect x="0" y="1660.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-install-provider-distributions-line-69">
+    <rect x="0" y="1685.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-install-provider-distributions-line-70">
+    <rect x="0" y="1709.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-install-provider-distributions-line-71">
+    <rect x="0" y="1733.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-install-provider-distributions-line-72">
+    <rect x="0" y="1758.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-install-provider-distributions-line-73">
+    <rect x="0" y="1782.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-install-provider-distributions-line-74">
+    <rect x="0" y="1807.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-install-provider-distributions-line-75">
+    <rect x="0" y="1831.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-install-provider-distributions-line-76">
+    <rect x="0" y="1855.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-install-provider-distributions-line-77">
+    <rect x="0" y="1880.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-install-provider-distributions-line-78">
+    <rect x="0" y="1904.7" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1682.8" rx="8"/><text class="breeze-release-management-install-provider-distributions-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;install-provider-distributions</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2000" rx="8"/><text class="breeze-release-management-install-provider-distributions-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;install-provider-distributions</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -270,58 +309,71 @@
 </text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-12)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="312.8" textLength="231.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-12)">--github-repository</text><text class="breeze-release-management-install-provider-distributions-r6" x="280.6" y="312.8" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-12)">-g</text><text class="breeze-release-management-install-provider-distributions-r1" x="329.4" y="312.8" textLength="585.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-12)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-release-management-install-provider-distributions-r7" x="927.2" y="312.8" textLength="73.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-12)">(TEXT)</text><text class="breeze-release-management-install-provider-distributions-r5" x="1012.6" y="312.8" textLength="305" clip-path="url(#breeze-release-management-install-provider-distributions-line-12)">[default:&#160;apache/airflow]</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-12)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-12)">
 </text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="337.2" textLength="1464" clip-path="url(#breeze-release-management-install-provider-distributions-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-13)">
 </text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="361.6" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-14)">╭─</text><text class="breeze-release-management-install-provider-distributions-r5" x="24.4" y="361.6" textLength="512.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-14)">&#160;Installing&#160;packages&#160;after&#160;entering&#160;shell&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="536.8" y="361.6" textLength="902.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-14)">──────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-install-provider-distributions-r5" x="1439.6" y="361.6" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-14)">─╮</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-14)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-15)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="386" textLength="366" clip-path="url(#breeze-release-management-install-provider-distributions-line-15)">--airflow-constraints-location</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="386" textLength="902.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-15)">Location&#160;of&#160;airflow&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;local&#160;context&#160;file).</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-15)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-15)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-16)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="475.8" y="410.4" textLength="902.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-16)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-16)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-16)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-17)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="434.8" textLength="317.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-17)">--airflow-constraints-mode</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="434.8" textLength="866.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-17)">Mode&#160;of&#160;constraints&#160;for&#160;Airflow&#160;for&#160;CI&#160;image&#160;building.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-17)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-17)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-18)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="475.8" y="459.2" textLength="866.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-18)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;constraints-no-providers)</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-18)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-18)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-19)">│</text><text class="breeze-release-management-install-provider-distributions-r5" x="475.8" y="483.6" textLength="866.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-19)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-19)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-19)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-20)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="508" textLength="378.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-20)">--airflow-constraints-reference</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="508" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-20)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;airflow&#160;installation&#160;(used&#160;in&#160;calculated&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-20)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-20)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-21)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="532.4" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-21)">constraints&#160;URL).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-21)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-21)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-22)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="475.8" y="556.8" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-22)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-22)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-22)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-23)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="581.2" textLength="195.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-23)">--airflow-extras</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="581.2" textLength="378.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-23)">Airflow&#160;extras&#160;to&#160;install&#160;when&#160;</text><text class="breeze-release-management-install-provider-distributions-r4" x="854" y="581.2" textLength="256.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-23)">--use-airflow-version</text><text class="breeze-release-management-install-provider-distributions-r1" x="1110.2" y="581.2" textLength="97.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-23)">&#160;is&#160;used</text><text class="breeze-release-management-install-provider-distributions-r7" x="1220" y="581.2" textLength="73.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-23)">(TEXT)</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-23)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-23)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-24)">│</text><text class="breeze-release-management-install-provider-distributions-r5" x="475.8" y="605.6" textLength="732" clip-path="url(#breeze-release-management-install-provider-distributions-line-24)">[default:&#160;&quot;&quot;]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-24)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-24)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-25)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="630" textLength="317.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-25)">--airflow-skip-constraints</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="630" textLength="573.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-25)">Do&#160;not&#160;use&#160;constraints&#160;when&#160;installing&#160;airflow.</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-25)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-25)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-26)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="654.4" textLength="341.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-26)">--clean-airflow-installation</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="654.4" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-26)">Clean&#160;the&#160;airflow&#160;installation&#160;before&#160;installing&#160;version&#160;specified&#160;by&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-26)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-26)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-27)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="475.8" y="678.8" textLength="256.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-27)">--use-airflow-version</text><text class="breeze-release-management-install-provider-distributions-r1" x="732" y="678.8" textLength="707.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-27)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-27)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-27)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-28)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="703.2" textLength="341.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-28)">--install-selected-providers</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="703.2" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-28)">Comma-separated&#160;list&#160;of&#160;providers&#160;selected&#160;to&#160;be&#160;installed&#160;(implies&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-28)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-28)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-29)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="475.8" y="727.6" textLength="353.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-29)">--use-distributions-from-dist</text><text class="breeze-release-management-install-provider-distributions-r1" x="829.6" y="727.6" textLength="610" clip-path="url(#breeze-release-management-install-provider-distributions-line-29)">).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-29)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-29)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-30)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="475.8" y="752" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-30)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-30)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-30)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-31)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="776.4" textLength="256.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-31)">--distribution-format</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="776.4" textLength="658.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-31)">Format&#160;of&#160;packages&#160;that&#160;should&#160;be&#160;installed&#160;from&#160;dist.</text><text class="breeze-release-management-install-provider-distributions-r7" x="1146.8" y="776.4" textLength="183" clip-path="url(#breeze-release-management-install-provider-distributions-line-31)">(wheel&#160;|&#160;sdist)</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-31)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-31)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-32)">│</text><text class="breeze-release-management-install-provider-distributions-r5" x="475.8" y="800.8" textLength="658.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-32)">[default:&#160;wheel]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-32)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-32)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-33)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="825.2" textLength="390.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-33)">--providers-constraints-location</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="825.2" textLength="927.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-33)">Location&#160;of&#160;providers&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;local&#160;context&#160;file).</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-33)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-33)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-34)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="475.8" y="849.6" textLength="927.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-34)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-34)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-34)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-35)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="874" textLength="341.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-35)">--providers-constraints-mode</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="874" textLength="866.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-35)">Mode&#160;of&#160;constraints&#160;for&#160;Providers&#160;for&#160;CI&#160;image&#160;building.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="874" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-35)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-35)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-36)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="475.8" y="898.4" textLength="866.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-36)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;constraints-no-providers)</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="898.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-36)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-36)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-37)">│</text><text class="breeze-release-management-install-provider-distributions-r5" x="475.8" y="922.8" textLength="866.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-37)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="922.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-37)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-37)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-38)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="947.2" textLength="402.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-38)">--providers-constraints-reference</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="947.2" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-38)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;providers&#160;installation&#160;(used&#160;in&#160;calculated&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-38)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-38)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-39)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="971.6" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-39)">constraints&#160;URL).&#160;Can&#160;be&#160;&#x27;default&#x27;&#160;in&#160;which&#160;case&#160;the&#160;default&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-39)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-39)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-40)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="996" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-40)">constraints-reference&#160;is&#160;used.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="996" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-40)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-40)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-41)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="475.8" y="1020.4" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-41)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-41)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-41)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-42)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1044.8" textLength="341.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-42)">--providers-skip-constraints</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="1044.8" textLength="597.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-42)">Do&#160;not&#160;use&#160;constraints&#160;when&#160;installing&#160;providers.</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-42)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-42)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-43)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1069.2" textLength="256.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-43)">--use-airflow-version</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="1069.2" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-43)">Use&#160;(reinstall&#160;at&#160;entry)&#160;Airflow&#160;version&#160;from&#160;PyPI.&#160;It&#160;can&#160;also&#160;be&#160;version&#160;(to&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1069.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-43)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-43)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-44)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="1093.6" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-44)">install&#160;from&#160;PyPI),&#160;`none`,&#160;`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder,&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1093.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-44)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-44)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-45)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="1118" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-45)">or&#160;VCS&#160;URL&#160;to&#160;install&#160;from&#160;(https://pip.pypa.io/en/stable/topics/vcs-support/).</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1118" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-45)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-45)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-46)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="1142.4" textLength="97.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-46)">Implies&#160;</text><text class="breeze-release-management-install-provider-distributions-r4" x="573.4" y="1142.4" textLength="183" clip-path="url(#breeze-release-management-install-provider-distributions-line-46)">--mount-sources</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="1142.4" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-46)">&#160;`remove`.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1142.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-46)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-46)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-47)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="475.8" y="1166.8" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-47)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1166.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-47)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1166.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-47)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-48)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1191.2" textLength="244" clip-path="url(#breeze-release-management-install-provider-distributions-line-48)">--allow-pre-releases</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="1191.2" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-48)">Allow&#160;pre-releases&#160;of&#160;Airflow,&#160;task-sdk&#160;and&#160;providers&#160;to&#160;be&#160;installed.&#160;Set&#160;to&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1191.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-48)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-48)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-49)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="1215.6" textLength="427" clip-path="url(#breeze-release-management-install-provider-distributions-line-49)">true&#160;automatically&#160;for&#160;pre-release&#160;</text><text class="breeze-release-management-install-provider-distributions-r4" x="902.8" y="1215.6" textLength="256.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-49)">--use-airflow-version</text><text class="breeze-release-management-install-provider-distributions-r1" x="1159" y="1215.6" textLength="280.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-49)">)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1215.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-49)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-49)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-50)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1240" textLength="353.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-50)">--use-distributions-from-dist</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="1240" textLength="402.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-50)">Install&#160;all&#160;found&#160;distributions&#160;(</text><text class="breeze-release-management-install-provider-distributions-r4" x="878.4" y="1240" textLength="256.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-50)">--distribution-format</text><text class="breeze-release-management-install-provider-distributions-r1" x="1134.6" y="1240" textLength="305" clip-path="url(#breeze-release-management-install-provider-distributions-line-50)">&#160;determines&#160;type)&#160;from&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1240" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-50)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-50)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-51)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="475.8" y="1264.4" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-51)">&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1264.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-51)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-51)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1288.8" textLength="1464" clip-path="url(#breeze-release-management-install-provider-distributions-line-52)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-52)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1313.2" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-53)">╭─</text><text class="breeze-release-management-install-provider-distributions-r5" x="24.4" y="1313.2" textLength="219.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-53)">&#160;Parallel&#160;running&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="244" y="1313.2" textLength="1195.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-53)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-install-provider-distributions-r5" x="1439.6" y="1313.2" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-53)">─╮</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1313.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-53)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-54)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1337.6" textLength="207.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-54)">--run-in-parallel</text><text class="breeze-release-management-install-provider-distributions-r1" x="378.2" y="1337.6" textLength="854" clip-path="url(#breeze-release-management-install-provider-distributions-line-54)">Run&#160;the&#160;operation&#160;in&#160;parallel&#160;on&#160;all&#160;or&#160;selected&#160;subset&#160;of&#160;parameters.</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1337.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-54)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-54)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-55)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1362" textLength="158.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-55)">--parallelism</text><text class="breeze-release-management-install-provider-distributions-r1" x="378.2" y="1362" textLength="915" clip-path="url(#breeze-release-management-install-provider-distributions-line-55)">Maximum&#160;number&#160;of&#160;processes&#160;to&#160;use&#160;while&#160;running&#160;the&#160;operation&#160;in&#160;parallel.</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1362" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-55)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-55)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-56)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="378.2" y="1386.4" textLength="915" clip-path="url(#breeze-release-management-install-provider-distributions-line-56)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1386.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-56)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-56)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-57)">│</text><text class="breeze-release-management-install-provider-distributions-r5" x="378.2" y="1410.8" textLength="915" clip-path="url(#breeze-release-management-install-provider-distributions-line-57)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1410.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-57)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-57)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-58)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1435.2" textLength="170.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-58)">--skip-cleanup</text><text class="breeze-release-management-install-provider-distributions-r1" x="378.2" y="1435.2" textLength="732" clip-path="url(#breeze-release-management-install-provider-distributions-line-58)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1435.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-58)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-58)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-59)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1459.6" textLength="305" clip-path="url(#breeze-release-management-install-provider-distributions-line-59)">--include-success-outputs</text><text class="breeze-release-management-install-provider-distributions-r1" x="378.2" y="1459.6" textLength="841.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-59)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;runs&#160;(not&#160;shown&#160;by&#160;default).</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1459.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-59)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-59)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-60)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1484" textLength="207.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-60)">--debug-resources</text><text class="breeze-release-management-install-provider-distributions-r1" x="378.2" y="1484" textLength="768.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-60)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;running&#160;in&#160;parallel.</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1484" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-60)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-60)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1508.4" textLength="1464" clip-path="url(#breeze-release-management-install-provider-distributions-line-61)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-61)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1532.8" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-62)">╭─</text><text class="breeze-release-management-install-provider-distributions-r5" x="24.4" y="1532.8" textLength="195.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-62)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="219.6" y="1532.8" textLength="1220" clip-path="url(#breeze-release-management-install-provider-distributions-line-62)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-install-provider-distributions-r5" x="1439.6" y="1532.8" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-62)">─╮</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-62)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-63)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1557.2" textLength="109.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-63)">--dry-run</text><text class="breeze-release-management-install-provider-distributions-r6" x="158.6" y="1557.2" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-63)">-D</text><text class="breeze-release-management-install-provider-distributions-r1" x="207.4" y="1557.2" textLength="719.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-63)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1557.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-63)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-63)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-64)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1581.6" textLength="109.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-64)">--verbose</text><text class="breeze-release-management-install-provider-distributions-r6" x="158.6" y="1581.6" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-64)">-v</text><text class="breeze-release-management-install-provider-distributions-r1" x="207.4" y="1581.6" textLength="585.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-64)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1581.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-64)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-64)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-65)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1606" textLength="73.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-65)">--help</text><text class="breeze-release-management-install-provider-distributions-r6" x="158.6" y="1606" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-65)">-h</text><text class="breeze-release-management-install-provider-distributions-r1" x="207.4" y="1606" textLength="329.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-65)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1606" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-65)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-65)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1630.4" textLength="1464" clip-path="url(#breeze-release-management-install-provider-distributions-line-66)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-66)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-15)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="386" textLength="366" clip-path="url(#breeze-release-management-install-provider-distributions-line-15)">--airflow-constraints-location</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="386" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-15)">Location&#160;of&#160;airflow&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-15)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-15)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-16)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="410.4" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-16)">local&#160;context&#160;file).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-16)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-16)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-17)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="756.4" y="434.8" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-17)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-17)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-17)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-18)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="459.2" textLength="317.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-18)">--airflow-constraints-mode</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="459.2" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-18)">Mode&#160;of&#160;constraints&#160;for&#160;Airflow&#160;for&#160;CI&#160;image&#160;building.&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-18)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-18)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-19)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="756.4" y="483.6" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-19)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-19)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-19)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-20)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="756.4" y="508" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-20)">constraints-no-providers)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-20)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-20)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-21)">│</text><text class="breeze-release-management-install-provider-distributions-r5" x="756.4" y="532.4" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-21)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-21)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-21)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-22)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="556.8" textLength="378.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-22)">--airflow-constraints-reference</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="556.8" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-22)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;airflow&#160;installation&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-22)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-22)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-23)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="581.2" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-23)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-23)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-23)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-24)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="756.4" y="605.6" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-24)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-24)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-24)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-25)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="630" textLength="195.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-25)">--airflow-extras</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="630" textLength="378.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-25)">Airflow&#160;extras&#160;to&#160;install&#160;when&#160;</text><text class="breeze-release-management-install-provider-distributions-r4" x="1134.6" y="630" textLength="256.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-25)">--use-airflow-version</text><text class="breeze-release-management-install-provider-distributions-r1" x="1390.8" y="630" textLength="48.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-25)">&#160;is&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-25)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-25)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-26)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="654.4" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-26)">used&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-26)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-26)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-27)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="756.4" y="678.8" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-27)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-27)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-27)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-28)">│</text><text class="breeze-release-management-install-provider-distributions-r5" x="756.4" y="703.2" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-28)">[default:&#160;&quot;&quot;]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-28)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-28)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-29)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="727.6" textLength="341.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-29)">--clean-airflow-installation</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="727.6" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-29)">Clean&#160;the&#160;airflow&#160;installation&#160;before&#160;installing&#160;version</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-29)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-29)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-30)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="752" textLength="158.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-30)">specified&#160;by&#160;</text><text class="breeze-release-management-install-provider-distributions-r4" x="915" y="752" textLength="256.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-30)">--use-airflow-version</text><text class="breeze-release-management-install-provider-distributions-r1" x="1171.2" y="752" textLength="268.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-30)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-30)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-30)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-31)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="776.4" textLength="414.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-31)">--install-airflow-with-constraints</text><text class="breeze-release-management-install-provider-distributions-r1" x="439.2" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-31)">/</text><text class="breeze-release-management-install-provider-distributions-r4" x="451.4" y="776.4" textLength="256.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-31)">--no-install-airflow-</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="776.4" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-31)">Install&#160;airflow&#160;in&#160;a&#160;separate&#160;step,&#160;with&#160;constraints&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-31)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-31)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-32)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="800.8" textLength="195.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-32)">with-constraints</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="800.8" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-32)">determined&#160;from&#160;package&#160;or&#160;airflow&#160;version.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-32)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-32)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-33)">│</text><text class="breeze-release-management-install-provider-distributions-r5" x="756.4" y="825.2" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-33)">[default:&#160;install-airflow-with-constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-33)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-33)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-34)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="849.6" textLength="341.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-34)">--install-selected-providers</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="849.6" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-34)">Comma-separated&#160;list&#160;of&#160;providers&#160;selected&#160;to&#160;be&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-34)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-34)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-35)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="874" textLength="231.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-35)">installed&#160;(implies&#160;</text><text class="breeze-release-management-install-provider-distributions-r4" x="988.2" y="874" textLength="353.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-35)">--use-distributions-from-dist</text><text class="breeze-release-management-install-provider-distributions-r1" x="1342" y="874" textLength="97.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-35)">).&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="874" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-35)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-35)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-36)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="756.4" y="898.4" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-36)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="898.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-36)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-36)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-37)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="922.8" textLength="256.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-37)">--distribution-format</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="922.8" textLength="658.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-37)">Format&#160;of&#160;packages&#160;that&#160;should&#160;be&#160;installed&#160;from&#160;dist.</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="922.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-37)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-37)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-38)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="756.4" y="947.2" textLength="658.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-38)">(wheel&#160;|&#160;sdist)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-38)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-38)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-39)">│</text><text class="breeze-release-management-install-provider-distributions-r5" x="756.4" y="971.6" textLength="658.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-39)">[default:&#160;wheel]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-39)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-39)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-40)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="996" textLength="390.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-40)">--providers-constraints-location</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="996" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-40)">Location&#160;of&#160;providers&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="996" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-40)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-40)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-41)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="1020.4" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-41)">local&#160;context&#160;file).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-41)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-41)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-42)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="756.4" y="1044.8" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-42)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-42)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-42)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-43)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1069.2" textLength="341.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-43)">--providers-constraints-mode</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="1069.2" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-43)">Mode&#160;of&#160;constraints&#160;for&#160;Providers&#160;for&#160;CI&#160;image&#160;building.</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1069.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-43)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-43)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-44)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="756.4" y="1093.6" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-44)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1093.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-44)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-44)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-45)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="756.4" y="1118" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-45)">constraints-no-providers)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1118" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-45)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-45)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-46)">│</text><text class="breeze-release-management-install-provider-distributions-r5" x="756.4" y="1142.4" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-46)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1142.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-46)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-46)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-47)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1166.8" textLength="402.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-47)">--providers-constraints-reference</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="1166.8" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-47)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;providers&#160;installation&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1166.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-47)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1166.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-47)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-48)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="1191.2" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-48)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;Can&#160;be&#160;&#x27;default&#x27;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1191.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-48)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-48)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-49)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="1215.6" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-49)">in&#160;which&#160;case&#160;the&#160;default&#160;constraints-reference&#160;is&#160;used.</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1215.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-49)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-49)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-50)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="756.4" y="1240" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-50)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1240" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-50)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-50)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-51)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1264.4" textLength="341.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-51)">--providers-skip-constraints</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="1264.4" textLength="597.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-51)">Do&#160;not&#160;use&#160;constraints&#160;when&#160;installing&#160;providers.</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1264.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-51)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-51)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-52)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1288.8" textLength="256.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-52)">--use-airflow-version</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="1288.8" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-52)">Use&#160;(reinstall&#160;at&#160;entry)&#160;Airflow&#160;version&#160;from&#160;PyPI.&#160;It&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1288.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-52)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-52)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-53)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="1313.2" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-53)">can&#160;also&#160;be&#160;version&#160;(to&#160;install&#160;from&#160;PyPI),&#160;`none`,&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1313.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-53)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1313.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-53)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-54)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="1337.6" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-54)">`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder,&#160;or&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1337.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-54)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-54)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-55)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="1362" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-55)">VCS&#160;URL&#160;to&#160;install&#160;from&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1362" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-55)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-55)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-56)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="1386.4" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-56)">(https://pip.pypa.io/en/stable/topics/vcs-support/).&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1386.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-56)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-56)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-57)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="1410.8" textLength="97.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-57)">Implies&#160;</text><text class="breeze-release-management-install-provider-distributions-r4" x="854" y="1410.8" textLength="183" clip-path="url(#breeze-release-management-install-provider-distributions-line-57)">--mount-sources</text><text class="breeze-release-management-install-provider-distributions-r1" x="1037" y="1410.8" textLength="402.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-57)">&#160;`remove`.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1410.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-57)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-57)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-58)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="756.4" y="1435.2" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-58)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1435.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-58)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-58)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-59)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1459.6" textLength="244" clip-path="url(#breeze-release-management-install-provider-distributions-line-59)">--allow-pre-releases</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="1459.6" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-59)">Allow&#160;pre-releases&#160;of&#160;Airflow,&#160;task-sdk&#160;and&#160;providers&#160;to</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1459.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-59)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-59)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-60)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="1484" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-60)">be&#160;installed.&#160;Set&#160;to&#160;true&#160;automatically&#160;for&#160;pre-release&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1484" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-60)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-60)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-61)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="756.4" y="1508.4" textLength="256.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-61)">--use-airflow-version</text><text class="breeze-release-management-install-provider-distributions-r1" x="1012.6" y="1508.4" textLength="427" clip-path="url(#breeze-release-management-install-provider-distributions-line-61)">)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1508.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-61)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-61)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-62)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1532.8" textLength="353.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-62)">--use-distributions-from-dist</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="1532.8" textLength="402.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-62)">Install&#160;all&#160;found&#160;distributions&#160;(</text><text class="breeze-release-management-install-provider-distributions-r4" x="1159" y="1532.8" textLength="256.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-62)">--distribution-format</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1532.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-62)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-62)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-63)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="1557.2" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-63)">determines&#160;type)&#160;from&#160;&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1557.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-63)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-63)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-64)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="756.4" y="1581.6" textLength="683.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-64)">breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1581.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-64)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-64)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1606" textLength="1464" clip-path="url(#breeze-release-management-install-provider-distributions-line-65)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-65)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1630.4" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-66)">╭─</text><text class="breeze-release-management-install-provider-distributions-r5" x="24.4" y="1630.4" textLength="219.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-66)">&#160;Parallel&#160;running&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="244" y="1630.4" textLength="1195.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-66)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-install-provider-distributions-r5" x="1439.6" y="1630.4" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-66)">─╮</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-66)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-67)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1654.8" textLength="207.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-67)">--run-in-parallel</text><text class="breeze-release-management-install-provider-distributions-r1" x="378.2" y="1654.8" textLength="854" clip-path="url(#breeze-release-management-install-provider-distributions-line-67)">Run&#160;the&#160;operation&#160;in&#160;parallel&#160;on&#160;all&#160;or&#160;selected&#160;subset&#160;of&#160;parameters.</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1654.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-67)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-67)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-68)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1679.2" textLength="158.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-68)">--parallelism</text><text class="breeze-release-management-install-provider-distributions-r1" x="378.2" y="1679.2" textLength="915" clip-path="url(#breeze-release-management-install-provider-distributions-line-68)">Maximum&#160;number&#160;of&#160;processes&#160;to&#160;use&#160;while&#160;running&#160;the&#160;operation&#160;in&#160;parallel.</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1679.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-68)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-68)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-69)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="378.2" y="1703.6" textLength="915" clip-path="url(#breeze-release-management-install-provider-distributions-line-69)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1703.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-69)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-69)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-70)">│</text><text class="breeze-release-management-install-provider-distributions-r5" x="378.2" y="1728" textLength="915" clip-path="url(#breeze-release-management-install-provider-distributions-line-70)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1728" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-70)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-70)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-71)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1752.4" textLength="170.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-71)">--skip-cleanup</text><text class="breeze-release-management-install-provider-distributions-r1" x="378.2" y="1752.4" textLength="732" clip-path="url(#breeze-release-management-install-provider-distributions-line-71)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1752.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-71)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1752.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-71)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-72)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1776.8" textLength="305" clip-path="url(#breeze-release-management-install-provider-distributions-line-72)">--include-success-outputs</text><text class="breeze-release-management-install-provider-distributions-r1" x="378.2" y="1776.8" textLength="841.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-72)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;runs&#160;(not&#160;shown&#160;by&#160;default).</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1776.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-72)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1776.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-72)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-73)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1801.2" textLength="207.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-73)">--debug-resources</text><text class="breeze-release-management-install-provider-distributions-r1" x="378.2" y="1801.2" textLength="768.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-73)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;running&#160;in&#160;parallel.</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1801.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-73)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-73)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1825.6" textLength="1464" clip-path="url(#breeze-release-management-install-provider-distributions-line-74)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-74)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1850" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-75)">╭─</text><text class="breeze-release-management-install-provider-distributions-r5" x="24.4" y="1850" textLength="195.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-75)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="219.6" y="1850" textLength="1220" clip-path="url(#breeze-release-management-install-provider-distributions-line-75)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-install-provider-distributions-r5" x="1439.6" y="1850" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-75)">─╮</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-75)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-76)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1874.4" textLength="109.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-76)">--dry-run</text><text class="breeze-release-management-install-provider-distributions-r6" x="158.6" y="1874.4" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-76)">-D</text><text class="breeze-release-management-install-provider-distributions-r1" x="207.4" y="1874.4" textLength="719.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-76)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1874.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-76)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-76)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1898.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-77)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1898.8" textLength="109.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-77)">--verbose</text><text class="breeze-release-management-install-provider-distributions-r6" x="158.6" y="1898.8" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-77)">-v</text><text class="breeze-release-management-install-provider-distributions-r1" x="207.4" y="1898.8" textLength="585.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-77)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1898.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-77)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-77)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1923.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-78)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="1923.2" textLength="73.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-78)">--help</text><text class="breeze-release-management-install-provider-distributions-r6" x="158.6" y="1923.2" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-78)">-h</text><text class="breeze-release-management-install-provider-distributions-r1" x="207.4" y="1923.2" textLength="329.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-78)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="1923.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-78)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-78)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="1947.6" textLength="1464" clip-path="url(#breeze-release-management-install-provider-distributions-line-79)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="1947.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-79)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_release-management_install-provider-distributions.txt b/dev/breeze/doc/images/output_release-management_install-provider-distributions.txt
index cda7885959e1f..89c64b6e4d93f 100644
--- a/dev/breeze/doc/images/output_release-management_install-provider-distributions.txt
+++ b/dev/breeze/doc/images/output_release-management_install-provider-distributions.txt
@@ -1 +1 @@
-cfe5f24c120f2db2847a2417ef25c611
+c04ca4aa246f2fd444efed0308474fa1
diff --git a/dev/breeze/doc/images/output_release-management_verify-provider-distributions.svg b/dev/breeze/doc/images/output_release-management_verify-provider-distributions.svg
index 074762d0d1011..abffb682a0826 100644
--- a/dev/breeze/doc/images/output_release-management_verify-provider-distributions.svg
+++ b/dev/breeze/doc/images/output_release-management_verify-provider-distributions.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1806.8" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 1782.3999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-release-management-verify-provider-distributions-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="1755.8" />
+      <rect x="0" y="0" width="1463.0" height="1731.3999999999999" />
     </clipPath>
     <clipPath id="breeze-release-management-verify-provider-distributions-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -255,12 +255,9 @@
 <clipPath id="breeze-release-management-verify-provider-distributions-line-69">
     <rect x="0" y="1685.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="breeze-release-management-verify-provider-distributions-line-70">
-    <rect x="0" y="1709.5" width="1464" height="24.65"/>
-            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1804.8" rx="8"/><text class="breeze-release-management-verify-provider-distributions-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;verify-provider-distributions</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1780.4" rx="8"/><text class="breeze-release-management-verify-provider-distributions-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;verify-provider-distributions</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -299,49 +296,48 @@
 </text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-26)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="654.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-26)">used&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-26)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-26)">
 </text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-27)">│</text><text class="breeze-release-management-verify-provider-distributions-r7" x="756.4" y="678.8" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-27)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-27)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-27)">
 </text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-28)">│</text><text class="breeze-release-management-verify-provider-distributions-r5" x="756.4" y="703.2" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-28)">[default:&#160;&quot;&quot;]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-28)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-28)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-29)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="727.6" textLength="317.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-29)">--airflow-skip-constraints</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="727.6" textLength="573.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-29)">Do&#160;not&#160;use&#160;constraints&#160;when&#160;installing&#160;airflow.</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-29)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-29)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-30)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="752" textLength="341.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-30)">--clean-airflow-installation</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="752" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-30)">Clean&#160;the&#160;airflow&#160;installation&#160;before&#160;installing&#160;version</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-30)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-30)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-31)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="776.4" textLength="158.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-31)">specified&#160;by&#160;</text><text class="breeze-release-management-verify-provider-distributions-r4" x="915" y="776.4" textLength="256.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-31)">--use-airflow-version</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1171.2" y="776.4" textLength="268.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-31)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-31)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-31)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-32)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="800.8" textLength="414.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-32)">--install-airflow-with-constraints</text><text class="breeze-release-management-verify-provider-distributions-r1" x="439.2" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-32)">/</text><text class="breeze-release-management-verify-provider-distributions-r4" x="451.4" y="800.8" textLength="256.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-32)">--no-install-airflow-</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="800.8" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-32)">Install&#160;airflow&#160;in&#160;a&#160;separate&#160;step,&#160;with&#160;constraints&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-32)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-32)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-33)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="825.2" textLength="195.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-33)">with-constraints</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="825.2" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-33)">determined&#160;from&#160;package&#160;or&#160;airflow&#160;version.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-33)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-33)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-34)">│</text><text class="breeze-release-management-verify-provider-distributions-r5" x="756.4" y="849.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-34)">[default:&#160;no-install-airflow-with-constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-34)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-34)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-35)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="874" textLength="341.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-35)">--install-selected-providers</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="874" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-35)">Comma-separated&#160;list&#160;of&#160;providers&#160;selected&#160;to&#160;be&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="874" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-35)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-35)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-36)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="898.4" textLength="231.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-36)">installed&#160;(implies&#160;</text><text class="breeze-release-management-verify-provider-distributions-r4" x="988.2" y="898.4" textLength="353.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-36)">--use-distributions-from-dist</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1342" y="898.4" textLength="97.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-36)">).&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="898.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-36)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-36)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-37)">│</text><text class="breeze-release-management-verify-provider-distributions-r7" x="756.4" y="922.8" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-37)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="922.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-37)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-37)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-38)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="947.2" textLength="256.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-38)">--distribution-format</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="947.2" textLength="658.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-38)">Format&#160;of&#160;packages&#160;that&#160;should&#160;be&#160;installed&#160;from&#160;dist.</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-38)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-38)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-39)">│</text><text class="breeze-release-management-verify-provider-distributions-r7" x="756.4" y="971.6" textLength="658.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-39)">(wheel&#160;|&#160;sdist)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-39)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-39)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-40)">│</text><text class="breeze-release-management-verify-provider-distributions-r5" x="756.4" y="996" textLength="658.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-40)">[default:&#160;wheel]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="996" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-40)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-40)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-41)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="1020.4" textLength="390.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-41)">--providers-constraints-location</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1020.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-41)">Location&#160;of&#160;providers&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-41)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-41)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-42)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1044.8" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-42)">local&#160;context&#160;file).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-42)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-42)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-43)">│</text><text class="breeze-release-management-verify-provider-distributions-r7" x="756.4" y="1069.2" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-43)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1069.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-43)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-43)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-44)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="1093.6" textLength="341.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-44)">--providers-constraints-mode</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1093.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-44)">Mode&#160;of&#160;constraints&#160;for&#160;Providers&#160;for&#160;CI&#160;image&#160;building.</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1093.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-44)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-44)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-45)">│</text><text class="breeze-release-management-verify-provider-distributions-r7" x="756.4" y="1118" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-45)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1118" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-45)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-45)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-46)">│</text><text class="breeze-release-management-verify-provider-distributions-r7" x="756.4" y="1142.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-46)">constraints-no-providers)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1142.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-46)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-46)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-47)">│</text><text class="breeze-release-management-verify-provider-distributions-r5" x="756.4" y="1166.8" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-47)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1166.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-47)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1166.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-47)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-48)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="1191.2" textLength="402.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-48)">--providers-constraints-reference</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1191.2" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-48)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;providers&#160;installation&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1191.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-48)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-48)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-49)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1215.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-49)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;Can&#160;be&#160;&#x27;default&#x27;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1215.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-49)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-49)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-50)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1240" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-50)">in&#160;which&#160;case&#160;the&#160;default&#160;constraints-reference&#160;is&#160;used.</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1240" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-50)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-50)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-51)">│</text><text class="breeze-release-management-verify-provider-distributions-r7" x="756.4" y="1264.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-51)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1264.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-51)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-51)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-52)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="1288.8" textLength="341.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-52)">--providers-skip-constraints</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1288.8" textLength="597.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-52)">Do&#160;not&#160;use&#160;constraints&#160;when&#160;installing&#160;providers.</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1288.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-52)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-52)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-53)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="1313.2" textLength="256.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-53)">--use-airflow-version</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1313.2" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-53)">Use&#160;(reinstall&#160;at&#160;entry)&#160;Airflow&#160;version&#160;from&#160;PyPI.&#160;It&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1313.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-53)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1313.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-53)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-54)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1337.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-54)">can&#160;also&#160;be&#160;version&#160;(to&#160;install&#160;from&#160;PyPI),&#160;`none`,&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1337.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-54)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-54)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-55)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1362" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-55)">`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder,&#160;or&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1362" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-55)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-55)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-56)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1386.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-56)">VCS&#160;URL&#160;to&#160;install&#160;from&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1386.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-56)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-56)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-57)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1410.8" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-57)">(https://pip.pypa.io/en/stable/topics/vcs-support/).&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1410.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-57)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-57)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-58)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1435.2" textLength="97.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-58)">Implies&#160;</text><text class="breeze-release-management-verify-provider-distributions-r4" x="854" y="1435.2" textLength="183" clip-path="url(#breeze-release-management-verify-provider-distributions-line-58)">--mount-sources</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1037" y="1435.2" textLength="402.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-58)">&#160;`remove`.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1435.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-58)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-58)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-59)">│</text><text class="breeze-release-management-verify-provider-distributions-r7" x="756.4" y="1459.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-59)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1459.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-59)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-59)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-60)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="1484" textLength="244" clip-path="url(#breeze-release-management-verify-provider-distributions-line-60)">--allow-pre-releases</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1484" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-60)">Allow&#160;pre-releases&#160;of&#160;Airflow,&#160;task-sdk&#160;and&#160;providers&#160;to</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1484" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-60)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-60)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-61)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1508.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-61)">be&#160;installed.&#160;Set&#160;to&#160;true&#160;automatically&#160;for&#160;pre-release&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1508.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-61)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-61)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-62)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="756.4" y="1532.8" textLength="256.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-62)">--use-airflow-version</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1012.6" y="1532.8" textLength="427" clip-path="url(#breeze-release-management-verify-provider-distributions-line-62)">)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1532.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-62)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-62)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-63)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="1557.2" textLength="353.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-63)">--use-distributions-from-dist</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1557.2" textLength="402.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-63)">Install&#160;all&#160;found&#160;distributions&#160;(</text><text class="breeze-release-management-verify-provider-distributions-r4" x="1159" y="1557.2" textLength="256.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-63)">--distribution-format</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1557.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-63)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-63)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-64)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1581.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-64)">determines&#160;type)&#160;from&#160;&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1581.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-64)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-64)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-65)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1606" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-65)">breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1606" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-65)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-65)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1630.4" textLength="1464" clip-path="url(#breeze-release-management-verify-provider-distributions-line-66)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-66)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1654.8" textLength="24.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-67)">╭─</text><text class="breeze-release-management-verify-provider-distributions-r5" x="24.4" y="1654.8" textLength="195.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-67)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="219.6" y="1654.8" textLength="1220" clip-path="url(#breeze-release-management-verify-provider-distributions-line-67)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1439.6" y="1654.8" textLength="24.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-67)">─╮</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-67)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-68)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="1679.2" textLength="109.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-68)">--dry-run</text><text class="breeze-release-management-verify-provider-distributions-r6" x="158.6" y="1679.2" textLength="24.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-68)">-D</text><text class="breeze-release-management-verify-provider-distributions-r1" x="207.4" y="1679.2" textLength="719.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-68)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1679.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-68)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-68)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-69)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="1703.6" textLength="109.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-69)">--verbose</text><text class="breeze-release-management-verify-provider-distributions-r6" x="158.6" y="1703.6" textLength="24.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-69)">-v</text><text class="breeze-release-management-verify-provider-distributions-r1" x="207.4" y="1703.6" textLength="585.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-69)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1703.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-69)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-69)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-70)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="1728" textLength="73.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-70)">--help</text><text class="breeze-release-management-verify-provider-distributions-r6" x="158.6" y="1728" textLength="24.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-70)">-h</text><text class="breeze-release-management-verify-provider-distributions-r1" x="207.4" y="1728" textLength="329.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-70)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1728" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-70)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-70)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1752.4" textLength="1464" clip-path="url(#breeze-release-management-verify-provider-distributions-line-71)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1752.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-71)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-29)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="727.6" textLength="341.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-29)">--clean-airflow-installation</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="727.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-29)">Clean&#160;the&#160;airflow&#160;installation&#160;before&#160;installing&#160;version</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-29)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-29)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-30)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="752" textLength="158.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-30)">specified&#160;by&#160;</text><text class="breeze-release-management-verify-provider-distributions-r4" x="915" y="752" textLength="256.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-30)">--use-airflow-version</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1171.2" y="752" textLength="268.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-30)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-30)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-30)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-31)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="776.4" textLength="414.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-31)">--install-airflow-with-constraints</text><text class="breeze-release-management-verify-provider-distributions-r1" x="439.2" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-31)">/</text><text class="breeze-release-management-verify-provider-distributions-r4" x="451.4" y="776.4" textLength="256.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-31)">--no-install-airflow-</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="776.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-31)">Install&#160;airflow&#160;in&#160;a&#160;separate&#160;step,&#160;with&#160;constraints&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-31)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-31)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-32)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="800.8" textLength="195.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-32)">with-constraints</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="800.8" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-32)">determined&#160;from&#160;package&#160;or&#160;airflow&#160;version.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-32)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-32)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-33)">│</text><text class="breeze-release-management-verify-provider-distributions-r5" x="756.4" y="825.2" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-33)">[default:&#160;no-install-airflow-with-constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-33)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-33)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-34)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="849.6" textLength="341.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-34)">--install-selected-providers</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="849.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-34)">Comma-separated&#160;list&#160;of&#160;providers&#160;selected&#160;to&#160;be&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-34)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-34)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-35)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="874" textLength="231.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-35)">installed&#160;(implies&#160;</text><text class="breeze-release-management-verify-provider-distributions-r4" x="988.2" y="874" textLength="353.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-35)">--use-distributions-from-dist</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1342" y="874" textLength="97.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-35)">).&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="874" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-35)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-35)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-36)">│</text><text class="breeze-release-management-verify-provider-distributions-r7" x="756.4" y="898.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-36)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="898.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-36)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-36)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-37)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="922.8" textLength="256.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-37)">--distribution-format</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="922.8" textLength="658.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-37)">Format&#160;of&#160;packages&#160;that&#160;should&#160;be&#160;installed&#160;from&#160;dist.</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="922.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-37)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-37)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-38)">│</text><text class="breeze-release-management-verify-provider-distributions-r7" x="756.4" y="947.2" textLength="658.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-38)">(wheel&#160;|&#160;sdist)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-38)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-38)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-39)">│</text><text class="breeze-release-management-verify-provider-distributions-r5" x="756.4" y="971.6" textLength="658.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-39)">[default:&#160;wheel]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-39)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-39)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-40)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="996" textLength="390.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-40)">--providers-constraints-location</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="996" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-40)">Location&#160;of&#160;providers&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="996" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-40)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-40)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-41)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1020.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-41)">local&#160;context&#160;file).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-41)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-41)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-42)">│</text><text class="breeze-release-management-verify-provider-distributions-r7" x="756.4" y="1044.8" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-42)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-42)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-42)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-43)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="1069.2" textLength="341.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-43)">--providers-constraints-mode</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1069.2" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-43)">Mode&#160;of&#160;constraints&#160;for&#160;Providers&#160;for&#160;CI&#160;image&#160;building.</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1069.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-43)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-43)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-44)">│</text><text class="breeze-release-management-verify-provider-distributions-r7" x="756.4" y="1093.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-44)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1093.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-44)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-44)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-45)">│</text><text class="breeze-release-management-verify-provider-distributions-r7" x="756.4" y="1118" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-45)">constraints-no-providers)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1118" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-45)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-45)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-46)">│</text><text class="breeze-release-management-verify-provider-distributions-r5" x="756.4" y="1142.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-46)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1142.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-46)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-46)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-47)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="1166.8" textLength="402.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-47)">--providers-constraints-reference</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1166.8" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-47)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;providers&#160;installation&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1166.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-47)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1166.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-47)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-48)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1191.2" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-48)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;Can&#160;be&#160;&#x27;default&#x27;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1191.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-48)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-48)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-49)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1215.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-49)">in&#160;which&#160;case&#160;the&#160;default&#160;constraints-reference&#160;is&#160;used.</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1215.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-49)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-49)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-50)">│</text><text class="breeze-release-management-verify-provider-distributions-r7" x="756.4" y="1240" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-50)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1240" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-50)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-50)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-51)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="1264.4" textLength="341.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-51)">--providers-skip-constraints</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1264.4" textLength="597.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-51)">Do&#160;not&#160;use&#160;constraints&#160;when&#160;installing&#160;providers.</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1264.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-51)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-51)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-52)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="1288.8" textLength="256.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-52)">--use-airflow-version</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1288.8" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-52)">Use&#160;(reinstall&#160;at&#160;entry)&#160;Airflow&#160;version&#160;from&#160;PyPI.&#160;It&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1288.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-52)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-52)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-53)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1313.2" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-53)">can&#160;also&#160;be&#160;version&#160;(to&#160;install&#160;from&#160;PyPI),&#160;`none`,&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1313.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-53)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1313.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-53)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-54)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1337.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-54)">`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder,&#160;or&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1337.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-54)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-54)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-55)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1362" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-55)">VCS&#160;URL&#160;to&#160;install&#160;from&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1362" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-55)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-55)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-56)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1386.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-56)">(https://pip.pypa.io/en/stable/topics/vcs-support/).&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1386.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-56)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-56)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-57)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1410.8" textLength="97.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-57)">Implies&#160;</text><text class="breeze-release-management-verify-provider-distributions-r4" x="854" y="1410.8" textLength="183" clip-path="url(#breeze-release-management-verify-provider-distributions-line-57)">--mount-sources</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1037" y="1410.8" textLength="402.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-57)">&#160;`remove`.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1410.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-57)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-57)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-58)">│</text><text class="breeze-release-management-verify-provider-distributions-r7" x="756.4" y="1435.2" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-58)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1435.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-58)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-58)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-59)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="1459.6" textLength="244" clip-path="url(#breeze-release-management-verify-provider-distributions-line-59)">--allow-pre-releases</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1459.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-59)">Allow&#160;pre-releases&#160;of&#160;Airflow,&#160;task-sdk&#160;and&#160;providers&#160;to</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1459.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-59)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-59)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-60)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1484" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-60)">be&#160;installed.&#160;Set&#160;to&#160;true&#160;automatically&#160;for&#160;pre-release&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1484" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-60)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-60)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-61)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="756.4" y="1508.4" textLength="256.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-61)">--use-airflow-version</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1012.6" y="1508.4" textLength="427" clip-path="url(#breeze-release-management-verify-provider-distributions-line-61)">)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1508.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-61)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-61)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-62)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="1532.8" textLength="353.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-62)">--use-distributions-from-dist</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1532.8" textLength="402.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-62)">Install&#160;all&#160;found&#160;distributions&#160;(</text><text class="breeze-release-management-verify-provider-distributions-r4" x="1159" y="1532.8" textLength="256.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-62)">--distribution-format</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1532.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-62)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-62)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-63)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1557.2" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-63)">determines&#160;type)&#160;from&#160;&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1557.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-63)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-63)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-64)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="756.4" y="1581.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-64)">breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1581.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-64)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-64)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1606" textLength="1464" clip-path="url(#breeze-release-management-verify-provider-distributions-line-65)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-65)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1630.4" textLength="24.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-66)">╭─</text><text class="breeze-release-management-verify-provider-distributions-r5" x="24.4" y="1630.4" textLength="195.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-66)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="219.6" y="1630.4" textLength="1220" clip-path="url(#breeze-release-management-verify-provider-distributions-line-66)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1439.6" y="1630.4" textLength="24.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-66)">─╮</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-66)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-67)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="1654.8" textLength="109.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-67)">--dry-run</text><text class="breeze-release-management-verify-provider-distributions-r6" x="158.6" y="1654.8" textLength="24.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-67)">-D</text><text class="breeze-release-management-verify-provider-distributions-r1" x="207.4" y="1654.8" textLength="719.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-67)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1654.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-67)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-67)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-68)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="1679.2" textLength="109.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-68)">--verbose</text><text class="breeze-release-management-verify-provider-distributions-r6" x="158.6" y="1679.2" textLength="24.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-68)">-v</text><text class="breeze-release-management-verify-provider-distributions-r1" x="207.4" y="1679.2" textLength="585.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-68)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1679.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-68)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-68)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-69)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="1703.6" textLength="73.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-69)">--help</text><text class="breeze-release-management-verify-provider-distributions-r6" x="158.6" y="1703.6" textLength="24.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-69)">-h</text><text class="breeze-release-management-verify-provider-distributions-r1" x="207.4" y="1703.6" textLength="329.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-69)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="1703.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-69)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-69)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="1728" textLength="1464" clip-path="url(#breeze-release-management-verify-provider-distributions-line-70)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-70)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_release-management_verify-provider-distributions.txt b/dev/breeze/doc/images/output_release-management_verify-provider-distributions.txt
index b99cd9f8576e2..889a731bf110b 100644
--- a/dev/breeze/doc/images/output_release-management_verify-provider-distributions.txt
+++ b/dev/breeze/doc/images/output_release-management_verify-provider-distributions.txt
@@ -1 +1 @@
-0e329f01241fba5f0dcab0c7e2d77870
+26b34f4a3b053d7114ffc7dee194c87b
diff --git a/dev/breeze/doc/images/output_shell.svg b/dev/breeze/doc/images/output_shell.svg
index b38b77b2dc5a5..2eebfe4d89fb7 100644
--- a/dev/breeze/doc/images/output_shell.svg
+++ b/dev/breeze/doc/images/output_shell.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 4271.2" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 4246.8" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-shell-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="4220.2" />
+      <rect x="0" y="0" width="1463.0" height="4195.8" />
     </clipPath>
     <clipPath id="breeze-shell-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -558,12 +558,9 @@
 <clipPath id="breeze-shell-line-170">
     <rect x="0" y="4149.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="breeze-shell-line-171">
-    <rect x="0" y="4173.9" width="1464" height="24.65"/>
-            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="4269.2" rx="8"/><text class="breeze-shell-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;shell</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="4244.8" rx="8"/><text class="breeze-shell-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;shell</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -669,83 +666,82 @@
 </text><text class="breeze-shell-r5" x="0" y="2289.2" textLength="12.2" clip-path="url(#breeze-shell-line-93)">│</text><text class="breeze-shell-r1" x="756.4" y="2289.2" textLength="683.2" clip-path="url(#breeze-shell-line-93)">used&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2289.2" textLength="12.2" clip-path="url(#breeze-shell-line-93)">│</text><text class="breeze-shell-r1" x="1464" y="2289.2" textLength="12.2" clip-path="url(#breeze-shell-line-93)">
 </text><text class="breeze-shell-r5" x="0" y="2313.6" textLength="12.2" clip-path="url(#breeze-shell-line-94)">│</text><text class="breeze-shell-r7" x="756.4" y="2313.6" textLength="683.2" clip-path="url(#breeze-shell-line-94)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2313.6" textLength="12.2" clip-path="url(#breeze-shell-line-94)">│</text><text class="breeze-shell-r1" x="1464" y="2313.6" textLength="12.2" clip-path="url(#breeze-shell-line-94)">
 </text><text class="breeze-shell-r5" x="0" y="2338" textLength="12.2" clip-path="url(#breeze-shell-line-95)">│</text><text class="breeze-shell-r5" x="756.4" y="2338" textLength="683.2" clip-path="url(#breeze-shell-line-95)">[default:&#160;&quot;&quot;]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2338" textLength="12.2" clip-path="url(#breeze-shell-line-95)">│</text><text class="breeze-shell-r1" x="1464" y="2338" textLength="12.2" clip-path="url(#breeze-shell-line-95)">
-</text><text class="breeze-shell-r5" x="0" y="2362.4" textLength="12.2" clip-path="url(#breeze-shell-line-96)">│</text><text class="breeze-shell-r4" x="24.4" y="2362.4" textLength="317.2" clip-path="url(#breeze-shell-line-96)">--airflow-skip-constraints</text><text class="breeze-shell-r1" x="756.4" y="2362.4" textLength="573.4" clip-path="url(#breeze-shell-line-96)">Do&#160;not&#160;use&#160;constraints&#160;when&#160;installing&#160;airflow.</text><text class="breeze-shell-r5" x="1451.8" y="2362.4" textLength="12.2" clip-path="url(#breeze-shell-line-96)">│</text><text class="breeze-shell-r1" x="1464" y="2362.4" textLength="12.2" clip-path="url(#breeze-shell-line-96)">
-</text><text class="breeze-shell-r5" x="0" y="2386.8" textLength="12.2" clip-path="url(#breeze-shell-line-97)">│</text><text class="breeze-shell-r4" x="24.4" y="2386.8" textLength="341.6" clip-path="url(#breeze-shell-line-97)">--clean-airflow-installation</text><text class="breeze-shell-r1" x="756.4" y="2386.8" textLength="683.2" clip-path="url(#breeze-shell-line-97)">Clean&#160;the&#160;airflow&#160;installation&#160;before&#160;installing&#160;version</text><text class="breeze-shell-r5" x="1451.8" y="2386.8" textLength="12.2" clip-path="url(#breeze-shell-line-97)">│</text><text class="breeze-shell-r1" x="1464" y="2386.8" textLength="12.2" clip-path="url(#breeze-shell-line-97)">
-</text><text class="breeze-shell-r5" x="0" y="2411.2" textLength="12.2" clip-path="url(#breeze-shell-line-98)">│</text><text class="breeze-shell-r1" x="756.4" y="2411.2" textLength="158.6" clip-path="url(#breeze-shell-line-98)">specified&#160;by&#160;</text><text class="breeze-shell-r4" x="915" y="2411.2" textLength="256.2" clip-path="url(#breeze-shell-line-98)">--use-airflow-version</text><text class="breeze-shell-r1" x="1171.2" y="2411.2" textLength="268.4" clip-path="url(#breeze-shell-line-98)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2411.2" textLength="12.2" clip-path="url(#breeze-shell-line-98)">│</text><text class="breeze-shell-r1" x="1464" y="2411.2" textLength="12.2" clip-path="url(#breeze-shell-line-98)">
-</text><text class="breeze-shell-r5" x="0" y="2435.6" textLength="12.2" clip-path="url(#breeze-shell-line-99)">│</text><text class="breeze-shell-r4" x="24.4" y="2435.6" textLength="329.4" clip-path="url(#breeze-shell-line-99)">--force-lowest-dependencies</text><text class="breeze-shell-r1" x="756.4" y="2435.6" textLength="683.2" clip-path="url(#breeze-shell-line-99)">Run&#160;tests&#160;for&#160;the&#160;lowest&#160;direct&#160;dependencies&#160;of&#160;Airflow&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2435.6" textLength="12.2" clip-path="url(#breeze-shell-line-99)">│</text><text class="breeze-shell-r1" x="1464" y="2435.6" textLength="12.2" clip-path="url(#breeze-shell-line-99)">
-</text><text class="breeze-shell-r5" x="0" y="2460" textLength="12.2" clip-path="url(#breeze-shell-line-100)">│</text><text class="breeze-shell-r1" x="756.4" y="2460" textLength="683.2" clip-path="url(#breeze-shell-line-100)">or&#160;selected&#160;provider&#160;if&#160;`Provider[PROVIDER_ID]`&#160;is&#160;used&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2460" textLength="12.2" clip-path="url(#breeze-shell-line-100)">│</text><text class="breeze-shell-r1" x="1464" y="2460" textLength="12.2" clip-path="url(#breeze-shell-line-100)">
-</text><text class="breeze-shell-r5" x="0" y="2484.4" textLength="12.2" clip-path="url(#breeze-shell-line-101)">│</text><text class="breeze-shell-r1" x="756.4" y="2484.4" textLength="683.2" clip-path="url(#breeze-shell-line-101)">as&#160;test&#160;type.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2484.4" textLength="12.2" clip-path="url(#breeze-shell-line-101)">│</text><text class="breeze-shell-r1" x="1464" y="2484.4" textLength="12.2" clip-path="url(#breeze-shell-line-101)">
-</text><text class="breeze-shell-r5" x="0" y="2508.8" textLength="12.2" clip-path="url(#breeze-shell-line-102)">│</text><text class="breeze-shell-r4" x="24.4" y="2508.8" textLength="134.2" clip-path="url(#breeze-shell-line-102)">--test-type</text><text class="breeze-shell-r1" x="756.4" y="2508.8" textLength="683.2" clip-path="url(#breeze-shell-line-102)">Type&#160;for&#160;shell&#160;tests&#160;to&#160;run&#160;-&#160;used&#160;when&#160;forcing&#160;lowest&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2508.8" textLength="12.2" clip-path="url(#breeze-shell-line-102)">│</text><text class="breeze-shell-r1" x="1464" y="2508.8" textLength="12.2" clip-path="url(#breeze-shell-line-102)">
-</text><text class="breeze-shell-r5" x="0" y="2533.2" textLength="12.2" clip-path="url(#breeze-shell-line-103)">│</text><text class="breeze-shell-r1" x="756.4" y="2533.2" textLength="683.2" clip-path="url(#breeze-shell-line-103)">dependencies&#160;to&#160;determine&#160;which&#160;distribution&#160;to&#160;force&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2533.2" textLength="12.2" clip-path="url(#breeze-shell-line-103)">│</text><text class="breeze-shell-r1" x="1464" y="2533.2" textLength="12.2" clip-path="url(#breeze-shell-line-103)">
-</text><text class="breeze-shell-r5" x="0" y="2557.6" textLength="12.2" clip-path="url(#breeze-shell-line-104)">│</text><text class="breeze-shell-r1" x="756.4" y="2557.6" textLength="683.2" clip-path="url(#breeze-shell-line-104)">lowest&#160;dependencies&#160;for&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2557.6" textLength="12.2" clip-path="url(#breeze-shell-line-104)">│</text><text class="breeze-shell-r1" x="1464" y="2557.6" textLength="12.2" clip-path="url(#breeze-shell-line-104)">
-</text><text class="breeze-shell-r5" x="0" y="2582" textLength="12.2" clip-path="url(#breeze-shell-line-105)">│</text><text class="breeze-shell-r7" x="756.4" y="2582" textLength="683.2" clip-path="url(#breeze-shell-line-105)">(All&#160;|&#160;All-Long&#160;|&#160;All-Quarantined&#160;|&#160;All-Postgres&#160;|&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2582" textLength="12.2" clip-path="url(#breeze-shell-line-105)">│</text><text class="breeze-shell-r1" x="1464" y="2582" textLength="12.2" clip-path="url(#breeze-shell-line-105)">
-</text><text class="breeze-shell-r5" x="0" y="2606.4" textLength="12.2" clip-path="url(#breeze-shell-line-106)">│</text><text class="breeze-shell-r7" x="756.4" y="2606.4" textLength="683.2" clip-path="url(#breeze-shell-line-106)">All-MySQL&#160;|&#160;API&#160;|&#160;Always&#160;|&#160;CLI&#160;|&#160;Core&#160;|&#160;Other&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2606.4" textLength="12.2" clip-path="url(#breeze-shell-line-106)">│</text><text class="breeze-shell-r1" x="1464" y="2606.4" textLength="12.2" clip-path="url(#breeze-shell-line-106)">
-</text><text class="breeze-shell-r5" x="0" y="2630.8" textLength="12.2" clip-path="url(#breeze-shell-line-107)">│</text><text class="breeze-shell-r7" x="756.4" y="2630.8" textLength="683.2" clip-path="url(#breeze-shell-line-107)">Serialization)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2630.8" textLength="12.2" clip-path="url(#breeze-shell-line-107)">│</text><text class="breeze-shell-r1" x="1464" y="2630.8" textLength="12.2" clip-path="url(#breeze-shell-line-107)">
-</text><text class="breeze-shell-r5" x="0" y="2655.2" textLength="12.2" clip-path="url(#breeze-shell-line-108)">│</text><text class="breeze-shell-r5" x="756.4" y="2655.2" textLength="683.2" clip-path="url(#breeze-shell-line-108)">[default:&#160;All]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2655.2" textLength="12.2" clip-path="url(#breeze-shell-line-108)">│</text><text class="breeze-shell-r1" x="1464" y="2655.2" textLength="12.2" clip-path="url(#breeze-shell-line-108)">
-</text><text class="breeze-shell-r5" x="0" y="2679.6" textLength="12.2" clip-path="url(#breeze-shell-line-109)">│</text><text class="breeze-shell-r4" x="24.4" y="2679.6" textLength="244" clip-path="url(#breeze-shell-line-109)">--excluded-providers</text><text class="breeze-shell-r1" x="756.4" y="2679.6" textLength="683.2" clip-path="url(#breeze-shell-line-109)">JSON-string&#160;of&#160;dictionary&#160;containing&#160;excluded&#160;providers&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2679.6" textLength="12.2" clip-path="url(#breeze-shell-line-109)">│</text><text class="breeze-shell-r1" x="1464" y="2679.6" textLength="12.2" clip-path="url(#breeze-shell-line-109)">
-</text><text class="breeze-shell-r5" x="0" y="2704" textLength="12.2" clip-path="url(#breeze-shell-line-110)">│</text><text class="breeze-shell-r1" x="756.4" y="2704" textLength="683.2" clip-path="url(#breeze-shell-line-110)">per&#160;python&#160;version&#160;({&#x27;3.12&#x27;:&#160;[&#x27;provider&#x27;]})&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2704" textLength="12.2" clip-path="url(#breeze-shell-line-110)">│</text><text class="breeze-shell-r1" x="1464" y="2704" textLength="12.2" clip-path="url(#breeze-shell-line-110)">
-</text><text class="breeze-shell-r5" x="0" y="2728.4" textLength="12.2" clip-path="url(#breeze-shell-line-111)">│</text><text class="breeze-shell-r7" x="756.4" y="2728.4" textLength="683.2" clip-path="url(#breeze-shell-line-111)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2728.4" textLength="12.2" clip-path="url(#breeze-shell-line-111)">│</text><text class="breeze-shell-r1" x="1464" y="2728.4" textLength="12.2" clip-path="url(#breeze-shell-line-111)">
-</text><text class="breeze-shell-r5" x="0" y="2752.8" textLength="12.2" clip-path="url(#breeze-shell-line-112)">│</text><text class="breeze-shell-r4" x="24.4" y="2752.8" textLength="414.8" clip-path="url(#breeze-shell-line-112)">--install-airflow-with-constraints</text><text class="breeze-shell-r1" x="439.2" y="2752.8" textLength="12.2" clip-path="url(#breeze-shell-line-112)">/</text><text class="breeze-shell-r4" x="451.4" y="2752.8" textLength="256.2" clip-path="url(#breeze-shell-line-112)">--no-install-airflow-</text><text class="breeze-shell-r1" x="756.4" y="2752.8" textLength="683.2" clip-path="url(#breeze-shell-line-112)">Install&#160;airflow&#160;in&#160;a&#160;separate&#160;step,&#160;with&#160;constraints&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2752.8" textLength="12.2" clip-path="url(#breeze-shell-line-112)">│</text><text class="breeze-shell-r1" x="1464" y="2752.8" textLength="12.2" clip-path="url(#breeze-shell-line-112)">
-</text><text class="breeze-shell-r5" x="0" y="2777.2" textLength="12.2" clip-path="url(#breeze-shell-line-113)">│</text><text class="breeze-shell-r4" x="24.4" y="2777.2" textLength="195.2" clip-path="url(#breeze-shell-line-113)">with-constraints</text><text class="breeze-shell-r1" x="756.4" y="2777.2" textLength="683.2" clip-path="url(#breeze-shell-line-113)">determined&#160;from&#160;package&#160;or&#160;airflow&#160;version.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2777.2" textLength="12.2" clip-path="url(#breeze-shell-line-113)">│</text><text class="breeze-shell-r1" x="1464" y="2777.2" textLength="12.2" clip-path="url(#breeze-shell-line-113)">
-</text><text class="breeze-shell-r5" x="0" y="2801.6" textLength="12.2" clip-path="url(#breeze-shell-line-114)">│</text><text class="breeze-shell-r5" x="756.4" y="2801.6" textLength="683.2" clip-path="url(#breeze-shell-line-114)">[default:&#160;install-airflow-with-constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2801.6" textLength="12.2" clip-path="url(#breeze-shell-line-114)">│</text><text class="breeze-shell-r1" x="1464" y="2801.6" textLength="12.2" clip-path="url(#breeze-shell-line-114)">
-</text><text class="breeze-shell-r5" x="0" y="2826" textLength="12.2" clip-path="url(#breeze-shell-line-115)">│</text><text class="breeze-shell-r4" x="24.4" y="2826" textLength="341.6" clip-path="url(#breeze-shell-line-115)">--install-selected-providers</text><text class="breeze-shell-r1" x="756.4" y="2826" textLength="683.2" clip-path="url(#breeze-shell-line-115)">Comma-separated&#160;list&#160;of&#160;providers&#160;selected&#160;to&#160;be&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2826" textLength="12.2" clip-path="url(#breeze-shell-line-115)">│</text><text class="breeze-shell-r1" x="1464" y="2826" textLength="12.2" clip-path="url(#breeze-shell-line-115)">
-</text><text class="breeze-shell-r5" x="0" y="2850.4" textLength="12.2" clip-path="url(#breeze-shell-line-116)">│</text><text class="breeze-shell-r1" x="756.4" y="2850.4" textLength="231.8" clip-path="url(#breeze-shell-line-116)">installed&#160;(implies&#160;</text><text class="breeze-shell-r4" x="988.2" y="2850.4" textLength="353.8" clip-path="url(#breeze-shell-line-116)">--use-distributions-from-dist</text><text class="breeze-shell-r1" x="1342" y="2850.4" textLength="97.6" clip-path="url(#breeze-shell-line-116)">).&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2850.4" textLength="12.2" clip-path="url(#breeze-shell-line-116)">│</text><text class="breeze-shell-r1" x="1464" y="2850.4" textLength="12.2" clip-path="url(#breeze-shell-line-116)">
-</text><text class="breeze-shell-r5" x="0" y="2874.8" textLength="12.2" clip-path="url(#breeze-shell-line-117)">│</text><text class="breeze-shell-r7" x="756.4" y="2874.8" textLength="683.2" clip-path="url(#breeze-shell-line-117)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2874.8" textLength="12.2" clip-path="url(#breeze-shell-line-117)">│</text><text class="breeze-shell-r1" x="1464" y="2874.8" textLength="12.2" clip-path="url(#breeze-shell-line-117)">
-</text><text class="breeze-shell-r5" x="0" y="2899.2" textLength="12.2" clip-path="url(#breeze-shell-line-118)">│</text><text class="breeze-shell-r4" x="24.4" y="2899.2" textLength="256.2" clip-path="url(#breeze-shell-line-118)">--distribution-format</text><text class="breeze-shell-r1" x="756.4" y="2899.2" textLength="658.8" clip-path="url(#breeze-shell-line-118)">Format&#160;of&#160;packages&#160;that&#160;should&#160;be&#160;installed&#160;from&#160;dist.</text><text class="breeze-shell-r5" x="1451.8" y="2899.2" textLength="12.2" clip-path="url(#breeze-shell-line-118)">│</text><text class="breeze-shell-r1" x="1464" y="2899.2" textLength="12.2" clip-path="url(#breeze-shell-line-118)">
-</text><text class="breeze-shell-r5" x="0" y="2923.6" textLength="12.2" clip-path="url(#breeze-shell-line-119)">│</text><text class="breeze-shell-r7" x="756.4" y="2923.6" textLength="658.8" clip-path="url(#breeze-shell-line-119)">(wheel&#160;|&#160;sdist)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2923.6" textLength="12.2" clip-path="url(#breeze-shell-line-119)">│</text><text class="breeze-shell-r1" x="1464" y="2923.6" textLength="12.2" clip-path="url(#breeze-shell-line-119)">
-</text><text class="breeze-shell-r5" x="0" y="2948" textLength="12.2" clip-path="url(#breeze-shell-line-120)">│</text><text class="breeze-shell-r5" x="756.4" y="2948" textLength="658.8" clip-path="url(#breeze-shell-line-120)">[default:&#160;wheel]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2948" textLength="12.2" clip-path="url(#breeze-shell-line-120)">│</text><text class="breeze-shell-r1" x="1464" y="2948" textLength="12.2" clip-path="url(#breeze-shell-line-120)">
-</text><text class="breeze-shell-r5" x="0" y="2972.4" textLength="12.2" clip-path="url(#breeze-shell-line-121)">│</text><text class="breeze-shell-r4" x="24.4" y="2972.4" textLength="390.4" clip-path="url(#breeze-shell-line-121)">--providers-constraints-location</text><text class="breeze-shell-r1" x="756.4" y="2972.4" textLength="683.2" clip-path="url(#breeze-shell-line-121)">Location&#160;of&#160;providers&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2972.4" textLength="12.2" clip-path="url(#breeze-shell-line-121)">│</text><text class="breeze-shell-r1" x="1464" y="2972.4" textLength="12.2" clip-path="url(#breeze-shell-line-121)">
-</text><text class="breeze-shell-r5" x="0" y="2996.8" textLength="12.2" clip-path="url(#breeze-shell-line-122)">│</text><text class="breeze-shell-r1" x="756.4" y="2996.8" textLength="683.2" clip-path="url(#breeze-shell-line-122)">local&#160;context&#160;file).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2996.8" textLength="12.2" clip-path="url(#breeze-shell-line-122)">│</text><text class="breeze-shell-r1" x="1464" y="2996.8" textLength="12.2" clip-path="url(#breeze-shell-line-122)">
-</text><text class="breeze-shell-r5" x="0" y="3021.2" textLength="12.2" clip-path="url(#breeze-shell-line-123)">│</text><text class="breeze-shell-r7" x="756.4" y="3021.2" textLength="683.2" clip-path="url(#breeze-shell-line-123)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3021.2" textLength="12.2" clip-path="url(#breeze-shell-line-123)">│</text><text class="breeze-shell-r1" x="1464" y="3021.2" textLength="12.2" clip-path="url(#breeze-shell-line-123)">
-</text><text class="breeze-shell-r5" x="0" y="3045.6" textLength="12.2" clip-path="url(#breeze-shell-line-124)">│</text><text class="breeze-shell-r4" x="24.4" y="3045.6" textLength="341.6" clip-path="url(#breeze-shell-line-124)">--providers-constraints-mode</text><text class="breeze-shell-r1" x="756.4" y="3045.6" textLength="683.2" clip-path="url(#breeze-shell-line-124)">Mode&#160;of&#160;constraints&#160;for&#160;Providers&#160;for&#160;CI&#160;image&#160;building.</text><text class="breeze-shell-r5" x="1451.8" y="3045.6" textLength="12.2" clip-path="url(#breeze-shell-line-124)">│</text><text class="breeze-shell-r1" x="1464" y="3045.6" textLength="12.2" clip-path="url(#breeze-shell-line-124)">
-</text><text class="breeze-shell-r5" x="0" y="3070" textLength="12.2" clip-path="url(#breeze-shell-line-125)">│</text><text class="breeze-shell-r7" x="756.4" y="3070" textLength="683.2" clip-path="url(#breeze-shell-line-125)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3070" textLength="12.2" clip-path="url(#breeze-shell-line-125)">│</text><text class="breeze-shell-r1" x="1464" y="3070" textLength="12.2" clip-path="url(#breeze-shell-line-125)">
-</text><text class="breeze-shell-r5" x="0" y="3094.4" textLength="12.2" clip-path="url(#breeze-shell-line-126)">│</text><text class="breeze-shell-r7" x="756.4" y="3094.4" textLength="683.2" clip-path="url(#breeze-shell-line-126)">constraints-no-providers)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3094.4" textLength="12.2" clip-path="url(#breeze-shell-line-126)">│</text><text class="breeze-shell-r1" x="1464" y="3094.4" textLength="12.2" clip-path="url(#breeze-shell-line-126)">
-</text><text class="breeze-shell-r5" x="0" y="3118.8" textLength="12.2" clip-path="url(#breeze-shell-line-127)">│</text><text class="breeze-shell-r5" x="756.4" y="3118.8" textLength="683.2" clip-path="url(#breeze-shell-line-127)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3118.8" textLength="12.2" clip-path="url(#breeze-shell-line-127)">│</text><text class="breeze-shell-r1" x="1464" y="3118.8" textLength="12.2" clip-path="url(#breeze-shell-line-127)">
-</text><text class="breeze-shell-r5" x="0" y="3143.2" textLength="12.2" clip-path="url(#breeze-shell-line-128)">│</text><text class="breeze-shell-r4" x="24.4" y="3143.2" textLength="402.6" clip-path="url(#breeze-shell-line-128)">--providers-constraints-reference</text><text class="breeze-shell-r1" x="756.4" y="3143.2" textLength="683.2" clip-path="url(#breeze-shell-line-128)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;providers&#160;installation&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3143.2" textLength="12.2" clip-path="url(#breeze-shell-line-128)">│</text><text class="breeze-shell-r1" x="1464" y="3143.2" textLength="12.2" clip-path="url(#breeze-shell-line-128)">
-</text><text class="breeze-shell-r5" x="0" y="3167.6" textLength="12.2" clip-path="url(#breeze-shell-line-129)">│</text><text class="breeze-shell-r1" x="756.4" y="3167.6" textLength="683.2" clip-path="url(#breeze-shell-line-129)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;Can&#160;be&#160;&#x27;default&#x27;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3167.6" textLength="12.2" clip-path="url(#breeze-shell-line-129)">│</text><text class="breeze-shell-r1" x="1464" y="3167.6" textLength="12.2" clip-path="url(#breeze-shell-line-129)">
-</text><text class="breeze-shell-r5" x="0" y="3192" textLength="12.2" clip-path="url(#breeze-shell-line-130)">│</text><text class="breeze-shell-r1" x="756.4" y="3192" textLength="683.2" clip-path="url(#breeze-shell-line-130)">in&#160;which&#160;case&#160;the&#160;default&#160;constraints-reference&#160;is&#160;used.</text><text class="breeze-shell-r5" x="1451.8" y="3192" textLength="12.2" clip-path="url(#breeze-shell-line-130)">│</text><text class="breeze-shell-r1" x="1464" y="3192" textLength="12.2" clip-path="url(#breeze-shell-line-130)">
-</text><text class="breeze-shell-r5" x="0" y="3216.4" textLength="12.2" clip-path="url(#breeze-shell-line-131)">│</text><text class="breeze-shell-r7" x="756.4" y="3216.4" textLength="683.2" clip-path="url(#breeze-shell-line-131)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3216.4" textLength="12.2" clip-path="url(#breeze-shell-line-131)">│</text><text class="breeze-shell-r1" x="1464" y="3216.4" textLength="12.2" clip-path="url(#breeze-shell-line-131)">
-</text><text class="breeze-shell-r5" x="0" y="3240.8" textLength="12.2" clip-path="url(#breeze-shell-line-132)">│</text><text class="breeze-shell-r4" x="24.4" y="3240.8" textLength="341.6" clip-path="url(#breeze-shell-line-132)">--providers-skip-constraints</text><text class="breeze-shell-r1" x="756.4" y="3240.8" textLength="597.8" clip-path="url(#breeze-shell-line-132)">Do&#160;not&#160;use&#160;constraints&#160;when&#160;installing&#160;providers.</text><text class="breeze-shell-r5" x="1451.8" y="3240.8" textLength="12.2" clip-path="url(#breeze-shell-line-132)">│</text><text class="breeze-shell-r1" x="1464" y="3240.8" textLength="12.2" clip-path="url(#breeze-shell-line-132)">
-</text><text class="breeze-shell-r5" x="0" y="3265.2" textLength="12.2" clip-path="url(#breeze-shell-line-133)">│</text><text class="breeze-shell-r4" x="24.4" y="3265.2" textLength="256.2" clip-path="url(#breeze-shell-line-133)">--use-airflow-version</text><text class="breeze-shell-r1" x="756.4" y="3265.2" textLength="683.2" clip-path="url(#breeze-shell-line-133)">Use&#160;(reinstall&#160;at&#160;entry)&#160;Airflow&#160;version&#160;from&#160;PyPI.&#160;It&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3265.2" textLength="12.2" clip-path="url(#breeze-shell-line-133)">│</text><text class="breeze-shell-r1" x="1464" y="3265.2" textLength="12.2" clip-path="url(#breeze-shell-line-133)">
-</text><text class="breeze-shell-r5" x="0" y="3289.6" textLength="12.2" clip-path="url(#breeze-shell-line-134)">│</text><text class="breeze-shell-r1" x="756.4" y="3289.6" textLength="683.2" clip-path="url(#breeze-shell-line-134)">can&#160;also&#160;be&#160;version&#160;(to&#160;install&#160;from&#160;PyPI),&#160;`none`,&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3289.6" textLength="12.2" clip-path="url(#breeze-shell-line-134)">│</text><text class="breeze-shell-r1" x="1464" y="3289.6" textLength="12.2" clip-path="url(#breeze-shell-line-134)">
-</text><text class="breeze-shell-r5" x="0" y="3314" textLength="12.2" clip-path="url(#breeze-shell-line-135)">│</text><text class="breeze-shell-r1" x="756.4" y="3314" textLength="683.2" clip-path="url(#breeze-shell-line-135)">`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder,&#160;or&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3314" textLength="12.2" clip-path="url(#breeze-shell-line-135)">│</text><text class="breeze-shell-r1" x="1464" y="3314" textLength="12.2" clip-path="url(#breeze-shell-line-135)">
-</text><text class="breeze-shell-r5" x="0" y="3338.4" textLength="12.2" clip-path="url(#breeze-shell-line-136)">│</text><text class="breeze-shell-r1" x="756.4" y="3338.4" textLength="683.2" clip-path="url(#breeze-shell-line-136)">VCS&#160;URL&#160;to&#160;install&#160;from&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3338.4" textLength="12.2" clip-path="url(#breeze-shell-line-136)">│</text><text class="breeze-shell-r1" x="1464" y="3338.4" textLength="12.2" clip-path="url(#breeze-shell-line-136)">
-</text><text class="breeze-shell-r5" x="0" y="3362.8" textLength="12.2" clip-path="url(#breeze-shell-line-137)">│</text><text class="breeze-shell-r1" x="756.4" y="3362.8" textLength="683.2" clip-path="url(#breeze-shell-line-137)">(https://pip.pypa.io/en/stable/topics/vcs-support/).&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3362.8" textLength="12.2" clip-path="url(#breeze-shell-line-137)">│</text><text class="breeze-shell-r1" x="1464" y="3362.8" textLength="12.2" clip-path="url(#breeze-shell-line-137)">
-</text><text class="breeze-shell-r5" x="0" y="3387.2" textLength="12.2" clip-path="url(#breeze-shell-line-138)">│</text><text class="breeze-shell-r1" x="756.4" y="3387.2" textLength="97.6" clip-path="url(#breeze-shell-line-138)">Implies&#160;</text><text class="breeze-shell-r4" x="854" y="3387.2" textLength="183" clip-path="url(#breeze-shell-line-138)">--mount-sources</text><text class="breeze-shell-r1" x="1037" y="3387.2" textLength="402.6" clip-path="url(#breeze-shell-line-138)">&#160;`remove`.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3387.2" textLength="12.2" clip-path="url(#breeze-shell-line-138)">│</text><text class="breeze-shell-r1" x="1464" y="3387.2" textLength="12.2" clip-path="url(#breeze-shell-line-138)">
-</text><text class="breeze-shell-r5" x="0" y="3411.6" textLength="12.2" clip-path="url(#breeze-shell-line-139)">│</text><text class="breeze-shell-r7" x="756.4" y="3411.6" textLength="683.2" clip-path="url(#breeze-shell-line-139)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3411.6" textLength="12.2" clip-path="url(#breeze-shell-line-139)">│</text><text class="breeze-shell-r1" x="1464" y="3411.6" textLength="12.2" clip-path="url(#breeze-shell-line-139)">
-</text><text class="breeze-shell-r5" x="0" y="3436" textLength="12.2" clip-path="url(#breeze-shell-line-140)">│</text><text class="breeze-shell-r4" x="24.4" y="3436" textLength="244" clip-path="url(#breeze-shell-line-140)">--allow-pre-releases</text><text class="breeze-shell-r1" x="756.4" y="3436" textLength="683.2" clip-path="url(#breeze-shell-line-140)">Allow&#160;pre-releases&#160;of&#160;Airflow,&#160;task-sdk&#160;and&#160;providers&#160;to</text><text class="breeze-shell-r5" x="1451.8" y="3436" textLength="12.2" clip-path="url(#breeze-shell-line-140)">│</text><text class="breeze-shell-r1" x="1464" y="3436" textLength="12.2" clip-path="url(#breeze-shell-line-140)">
-</text><text class="breeze-shell-r5" x="0" y="3460.4" textLength="12.2" clip-path="url(#breeze-shell-line-141)">│</text><text class="breeze-shell-r1" x="756.4" y="3460.4" textLength="683.2" clip-path="url(#breeze-shell-line-141)">be&#160;installed.&#160;Set&#160;to&#160;true&#160;automatically&#160;for&#160;pre-release&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3460.4" textLength="12.2" clip-path="url(#breeze-shell-line-141)">│</text><text class="breeze-shell-r1" x="1464" y="3460.4" textLength="12.2" clip-path="url(#breeze-shell-line-141)">
-</text><text class="breeze-shell-r5" x="0" y="3484.8" textLength="12.2" clip-path="url(#breeze-shell-line-142)">│</text><text class="breeze-shell-r4" x="756.4" y="3484.8" textLength="256.2" clip-path="url(#breeze-shell-line-142)">--use-airflow-version</text><text class="breeze-shell-r1" x="1012.6" y="3484.8" textLength="427" clip-path="url(#breeze-shell-line-142)">)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3484.8" textLength="12.2" clip-path="url(#breeze-shell-line-142)">│</text><text class="breeze-shell-r1" x="1464" y="3484.8" textLength="12.2" clip-path="url(#breeze-shell-line-142)">
-</text><text class="breeze-shell-r5" x="0" y="3509.2" textLength="12.2" clip-path="url(#breeze-shell-line-143)">│</text><text class="breeze-shell-r4" x="24.4" y="3509.2" textLength="353.8" clip-path="url(#breeze-shell-line-143)">--use-distributions-from-dist</text><text class="breeze-shell-r1" x="756.4" y="3509.2" textLength="402.6" clip-path="url(#breeze-shell-line-143)">Install&#160;all&#160;found&#160;distributions&#160;(</text><text class="breeze-shell-r4" x="1159" y="3509.2" textLength="256.2" clip-path="url(#breeze-shell-line-143)">--distribution-format</text><text class="breeze-shell-r5" x="1451.8" y="3509.2" textLength="12.2" clip-path="url(#breeze-shell-line-143)">│</text><text class="breeze-shell-r1" x="1464" y="3509.2" textLength="12.2" clip-path="url(#breeze-shell-line-143)">
-</text><text class="breeze-shell-r5" x="0" y="3533.6" textLength="12.2" clip-path="url(#breeze-shell-line-144)">│</text><text class="breeze-shell-r1" x="756.4" y="3533.6" textLength="683.2" clip-path="url(#breeze-shell-line-144)">determines&#160;type)&#160;from&#160;&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3533.6" textLength="12.2" clip-path="url(#breeze-shell-line-144)">│</text><text class="breeze-shell-r1" x="1464" y="3533.6" textLength="12.2" clip-path="url(#breeze-shell-line-144)">
-</text><text class="breeze-shell-r5" x="0" y="3558" textLength="12.2" clip-path="url(#breeze-shell-line-145)">│</text><text class="breeze-shell-r1" x="756.4" y="3558" textLength="683.2" clip-path="url(#breeze-shell-line-145)">breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3558" textLength="12.2" clip-path="url(#breeze-shell-line-145)">│</text><text class="breeze-shell-r1" x="1464" y="3558" textLength="12.2" clip-path="url(#breeze-shell-line-145)">
-</text><text class="breeze-shell-r5" x="0" y="3582.4" textLength="12.2" clip-path="url(#breeze-shell-line-146)">│</text><text class="breeze-shell-r4" x="24.4" y="3582.4" textLength="378.2" clip-path="url(#breeze-shell-line-146)">--install-airflow-python-client</text><text class="breeze-shell-r1" x="756.4" y="3582.4" textLength="683.2" clip-path="url(#breeze-shell-line-146)">Install&#160;airflow&#160;python&#160;client&#160;packages&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3582.4" textLength="12.2" clip-path="url(#breeze-shell-line-146)">│</text><text class="breeze-shell-r1" x="1464" y="3582.4" textLength="12.2" clip-path="url(#breeze-shell-line-146)">
-</text><text class="breeze-shell-r5" x="0" y="3606.8" textLength="12.2" clip-path="url(#breeze-shell-line-147)">│</text><text class="breeze-shell-r1" x="756.4" y="3606.8" textLength="12.2" clip-path="url(#breeze-shell-line-147)">(</text><text class="breeze-shell-r4" x="768.6" y="3606.8" textLength="256.2" clip-path="url(#breeze-shell-line-147)">--distribution-format</text><text class="breeze-shell-r1" x="1024.8" y="3606.8" textLength="414.8" clip-path="url(#breeze-shell-line-147)">&#160;determines&#160;type)&#160;from&#160;&#x27;dist&#x27;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3606.8" textLength="12.2" clip-path="url(#breeze-shell-line-147)">│</text><text class="breeze-shell-r1" x="1464" y="3606.8" textLength="12.2" clip-path="url(#breeze-shell-line-147)">
-</text><text class="breeze-shell-r5" x="0" y="3631.2" textLength="12.2" clip-path="url(#breeze-shell-line-148)">│</text><text class="breeze-shell-r1" x="756.4" y="3631.2" textLength="683.2" clip-path="url(#breeze-shell-line-148)">folder&#160;when&#160;entering&#160;breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3631.2" textLength="12.2" clip-path="url(#breeze-shell-line-148)">│</text><text class="breeze-shell-r1" x="1464" y="3631.2" textLength="12.2" clip-path="url(#breeze-shell-line-148)">
-</text><text class="breeze-shell-r5" x="0" y="3655.6" textLength="1464" clip-path="url(#breeze-shell-line-149)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="3655.6" textLength="12.2" clip-path="url(#breeze-shell-line-149)">
-</text><text class="breeze-shell-r5" x="0" y="3680" textLength="24.4" clip-path="url(#breeze-shell-line-150)">╭─</text><text class="breeze-shell-r5" x="24.4" y="3680" textLength="610" clip-path="url(#breeze-shell-line-150)">&#160;Upgrading/downgrading/removing&#160;selected&#160;packages&#160;</text><text class="breeze-shell-r5" x="634.4" y="3680" textLength="805.2" clip-path="url(#breeze-shell-line-150)">──────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="3680" textLength="24.4" clip-path="url(#breeze-shell-line-150)">─╮</text><text class="breeze-shell-r1" x="1464" y="3680" textLength="12.2" clip-path="url(#breeze-shell-line-150)">
-</text><text class="breeze-shell-r5" x="0" y="3704.4" textLength="12.2" clip-path="url(#breeze-shell-line-151)">│</text><text class="breeze-shell-r4" x="24.4" y="3704.4" textLength="170.8" clip-path="url(#breeze-shell-line-151)">--upgrade-boto</text><text class="breeze-shell-r1" x="341.6" y="3704.4" textLength="866.2" clip-path="url(#breeze-shell-line-151)">Remove&#160;aiobotocore&#160;and&#160;upgrade&#160;botocore&#160;and&#160;boto&#160;to&#160;the&#160;latest&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y="3704.4" textLength="12.2" clip-path="url(#breeze-shell-line-151)">│</text><text class="breeze-shell-r1" x="1464" y="3704.4" textLength="12.2" clip-path="url(#breeze-shell-line-151)">
-</text><text class="breeze-shell-r5" x="0" y="3728.8" textLength="12.2" clip-path="url(#breeze-shell-line-152)">│</text><text class="breeze-shell-r4" x="24.4" y="3728.8" textLength="268.4" clip-path="url(#breeze-shell-line-152)">--downgrade-sqlalchemy</text><text class="breeze-shell-r1" x="341.6" y="3728.8" textLength="610" clip-path="url(#breeze-shell-line-152)">Downgrade&#160;SQLAlchemy&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y="3728.8" textLength="12.2" clip-path="url(#breeze-shell-line-152)">│</text><text class="breeze-shell-r1" x="1464" y="3728.8" textLength="12.2" clip-path="url(#breeze-shell-line-152)">
-</text><text class="breeze-shell-r5" x="0" y="3753.2" textLength="12.2" clip-path="url(#breeze-shell-line-153)">│</text><text class="breeze-shell-r4" x="24.4" y="3753.2" textLength="244" clip-path="url(#breeze-shell-line-153)">--downgrade-pendulum</text><text class="breeze-shell-r1" x="341.6" y="3753.2" textLength="585.6" clip-path="url(#breeze-shell-line-153)">Downgrade&#160;Pendulum&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y="3753.2" textLength="12.2" clip-path="url(#breeze-shell-line-153)">│</text><text class="breeze-shell-r1" x="1464" y="3753.2" textLength="12.2" clip-path="url(#breeze-shell-line-153)">
-</text><text class="breeze-shell-r5" x="0" y="3777.6" textLength="1464" clip-path="url(#breeze-shell-line-154)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="3777.6" textLength="12.2" clip-path="url(#breeze-shell-line-154)">
-</text><text class="breeze-shell-r5" x="0" y="3802" textLength="24.4" clip-path="url(#breeze-shell-line-155)">╭─</text><text class="breeze-shell-r5" x="24.4" y="3802" textLength="183" clip-path="url(#breeze-shell-line-155)">&#160;DB&#160;test&#160;flags&#160;</text><text class="breeze-shell-r5" x="207.4" y="3802" textLength="1232.2" clip-path="url(#breeze-shell-line-155)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="3802" textLength="24.4" clip-path="url(#breeze-shell-line-155)">─╮</text><text class="breeze-shell-r1" x="1464" y="3802" textLength="12.2" clip-path="url(#breeze-shell-line-155)">
-</text><text class="breeze-shell-r5" x="0" y="3826.4" textLength="12.2" clip-path="url(#breeze-shell-line-156)">│</text><text class="breeze-shell-r4" x="24.4" y="3826.4" textLength="231.8" clip-path="url(#breeze-shell-line-156)">--run-db-tests-only</text><text class="breeze-shell-r1" x="305" y="3826.4" textLength="475.8" clip-path="url(#breeze-shell-line-156)">Only&#160;runs&#160;tests&#160;that&#160;require&#160;a&#160;database</text><text class="breeze-shell-r5" x="1451.8" y="3826.4" textLength="12.2" clip-path="url(#breeze-shell-line-156)">│</text><text class="breeze-shell-r1" x="1464" y="3826.4" textLength="12.2" clip-path="url(#breeze-shell-line-156)">
-</text><text class="breeze-shell-r5" x="0" y="3850.8" textLength="12.2" clip-path="url(#breeze-shell-line-157)">│</text><text class="breeze-shell-r4" x="24.4" y="3850.8" textLength="183" clip-path="url(#breeze-shell-line-157)">--skip-db-tests</text><text class="breeze-shell-r1" x="305" y="3850.8" textLength="414.8" clip-path="url(#breeze-shell-line-157)">Skip&#160;tests&#160;that&#160;require&#160;a&#160;database</text><text class="breeze-shell-r5" x="1451.8" y="3850.8" textLength="12.2" clip-path="url(#breeze-shell-line-157)">│</text><text class="breeze-shell-r1" x="1464" y="3850.8" textLength="12.2" clip-path="url(#breeze-shell-line-157)">
-</text><text class="breeze-shell-r5" x="0" y="3875.2" textLength="1464" clip-path="url(#breeze-shell-line-158)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="3875.2" textLength="12.2" clip-path="url(#breeze-shell-line-158)">
-</text><text class="breeze-shell-r5" x="0" y="3899.6" textLength="24.4" clip-path="url(#breeze-shell-line-159)">╭─</text><text class="breeze-shell-r5" x="24.4" y="3899.6" textLength="183" clip-path="url(#breeze-shell-line-159)">&#160;Other&#160;options&#160;</text><text class="breeze-shell-r5" x="207.4" y="3899.6" textLength="1232.2" clip-path="url(#breeze-shell-line-159)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="3899.6" textLength="24.4" clip-path="url(#breeze-shell-line-159)">─╮</text><text class="breeze-shell-r1" x="1464" y="3899.6" textLength="12.2" clip-path="url(#breeze-shell-line-159)">
-</text><text class="breeze-shell-r5" x="0" y="3924" textLength="12.2" clip-path="url(#breeze-shell-line-160)">│</text><text class="breeze-shell-r4" x="24.4" y="3924" textLength="256.2" clip-path="url(#breeze-shell-line-160)">--forward-credentials</text><text class="breeze-shell-r6" x="305" y="3924" textLength="24.4" clip-path="url(#breeze-shell-line-160)">-f</text><text class="breeze-shell-r1" x="353.8" y="3924" textLength="634.4" clip-path="url(#breeze-shell-line-160)">Forward&#160;local&#160;credentials&#160;to&#160;container&#160;when&#160;running.</text><text class="breeze-shell-r5" x="1451.8" y="3924" textLength="12.2" clip-path="url(#breeze-shell-line-160)">│</text><text class="breeze-shell-r1" x="1464" y="3924" textLength="12.2" clip-path="url(#breeze-shell-line-160)">
-</text><text class="breeze-shell-r5" x="0" y="3948.4" textLength="12.2" clip-path="url(#breeze-shell-line-161)">│</text><text class="breeze-shell-r4" x="24.4" y="3948.4" textLength="122" clip-path="url(#breeze-shell-line-161)">--max-time</text><text class="breeze-shell-r1" x="353.8" y="3948.4" textLength="1049.2" clip-path="url(#breeze-shell-line-161)">Maximum&#160;time&#160;that&#160;the&#160;command&#160;should&#160;take&#160;-&#160;if&#160;it&#160;takes&#160;longer,&#160;the&#160;command&#160;will&#160;fail.</text><text class="breeze-shell-r5" x="1451.8" y="3948.4" textLength="12.2" clip-path="url(#breeze-shell-line-161)">│</text><text class="breeze-shell-r1" x="1464" y="3948.4" textLength="12.2" clip-path="url(#breeze-shell-line-161)">
-</text><text class="breeze-shell-r5" x="0" y="3972.8" textLength="12.2" clip-path="url(#breeze-shell-line-162)">│</text><text class="breeze-shell-r7" x="353.8" y="3972.8" textLength="1049.2" clip-path="url(#breeze-shell-line-162)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3972.8" textLength="12.2" clip-path="url(#breeze-shell-line-162)">│</text><text class="breeze-shell-r1" x="1464" y="3972.8" textLength="12.2" clip-path="url(#breeze-shell-line-162)">
-</text><text class="breeze-shell-r5" x="0" y="3997.2" textLength="12.2" clip-path="url(#breeze-shell-line-163)">│</text><text class="breeze-shell-r4" x="24.4" y="3997.2" textLength="219.6" clip-path="url(#breeze-shell-line-163)">--verbose-commands</text><text class="breeze-shell-r1" x="353.8" y="3997.2" textLength="414.8" clip-path="url(#breeze-shell-line-163)">Show&#160;details&#160;of&#160;commands&#160;executed.</text><text class="breeze-shell-r5" x="1451.8" y="3997.2" textLength="12.2" clip-path="url(#breeze-shell-line-163)">│</text><text class="breeze-shell-r1" x="1464" y="3997.2" textLength="12.2" clip-path="url(#breeze-shell-line-163)">
-</text><text class="breeze-shell-r5" x="0" y="4021.6" textLength="12.2" clip-path="url(#breeze-shell-line-164)">│</text><text class="breeze-shell-r4" x="24.4" y="4021.6" textLength="244" clip-path="url(#breeze-shell-line-164)">--keep-env-variables</text><text class="breeze-shell-r1" x="353.8" y="4021.6" textLength="1000.4" clip-path="url(#breeze-shell-line-164)">Do&#160;not&#160;clear&#160;environment&#160;variables&#160;that&#160;might&#160;have&#160;side&#160;effect&#160;while&#160;running&#160;tests</text><text class="breeze-shell-r5" x="1451.8" y="4021.6" textLength="12.2" clip-path="url(#breeze-shell-line-164)">│</text><text class="breeze-shell-r1" x="1464" y="4021.6" textLength="12.2" clip-path="url(#breeze-shell-line-164)">
-</text><text class="breeze-shell-r5" x="0" y="4046" textLength="12.2" clip-path="url(#breeze-shell-line-165)">│</text><text class="breeze-shell-r4" x="24.4" y="4046" textLength="183" clip-path="url(#breeze-shell-line-165)">--no-db-cleanup</text><text class="breeze-shell-r1" x="353.8" y="4046" textLength="597.8" clip-path="url(#breeze-shell-line-165)">Do&#160;not&#160;clear&#160;the&#160;database&#160;before&#160;each&#160;test&#160;module</text><text class="breeze-shell-r5" x="1451.8" y="4046" textLength="12.2" clip-path="url(#breeze-shell-line-165)">│</text><text class="breeze-shell-r1" x="1464" y="4046" textLength="12.2" clip-path="url(#breeze-shell-line-165)">
-</text><text class="breeze-shell-r5" x="0" y="4070.4" textLength="1464" clip-path="url(#breeze-shell-line-166)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="4070.4" textLength="12.2" clip-path="url(#breeze-shell-line-166)">
-</text><text class="breeze-shell-r5" x="0" y="4094.8" textLength="24.4" clip-path="url(#breeze-shell-line-167)">╭─</text><text class="breeze-shell-r5" x="24.4" y="4094.8" textLength="195.2" clip-path="url(#breeze-shell-line-167)">&#160;Common&#160;options&#160;</text><text class="breeze-shell-r5" x="219.6" y="4094.8" textLength="1220" clip-path="url(#breeze-shell-line-167)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="4094.8" textLength="24.4" clip-path="url(#breeze-shell-line-167)">─╮</text><text class="breeze-shell-r1" x="1464" y="4094.8" textLength="12.2" clip-path="url(#breeze-shell-line-167)">
-</text><text class="breeze-shell-r5" x="0" y="4119.2" textLength="12.2" clip-path="url(#breeze-shell-line-168)">│</text><text class="breeze-shell-r4" x="24.4" y="4119.2" textLength="97.6" clip-path="url(#breeze-shell-line-168)">--answer</text><text class="breeze-shell-r6" x="158.6" y="4119.2" textLength="24.4" clip-path="url(#breeze-shell-line-168)">-a</text><text class="breeze-shell-r1" x="207.4" y="4119.2" textLength="317.2" clip-path="url(#breeze-shell-line-168)">Force&#160;answer&#160;to&#160;questions.</text><text class="breeze-shell-r7" x="536.8" y="4119.2" textLength="353.8" clip-path="url(#breeze-shell-line-168)">(y&#160;|&#160;n&#160;|&#160;q&#160;|&#160;yes&#160;|&#160;no&#160;|&#160;quit)</text><text class="breeze-shell-r5" x="1451.8" y="4119.2" textLength="12.2" clip-path="url(#breeze-shell-line-168)">│</text><text class="breeze-shell-r1" x="1464" y="4119.2" textLength="12.2" clip-path="url(#breeze-shell-line-168)">
-</text><text class="breeze-shell-r5" x="0" y="4143.6" textLength="12.2" clip-path="url(#breeze-shell-line-169)">│</text><text class="breeze-shell-r4" x="24.4" y="4143.6" textLength="109.8" clip-path="url(#breeze-shell-line-169)">--dry-run</text><text class="breeze-shell-r6" x="158.6" y="4143.6" textLength="24.4" clip-path="url(#breeze-shell-line-169)">-D</text><text class="breeze-shell-r1" x="207.4" y="4143.6" textLength="719.8" clip-path="url(#breeze-shell-line-169)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-shell-r5" x="1451.8" y="4143.6" textLength="12.2" clip-path="url(#breeze-shell-line-169)">│</text><text class="breeze-shell-r1" x="1464" y="4143.6" textLength="12.2" clip-path="url(#breeze-shell-line-169)">
-</text><text class="breeze-shell-r5" x="0" y="4168" textLength="12.2" clip-path="url(#breeze-shell-line-170)">│</text><text class="breeze-shell-r4" x="24.4" y="4168" textLength="109.8" clip-path="url(#breeze-shell-line-170)">--verbose</text><text class="breeze-shell-r6" x="158.6" y="4168" textLength="24.4" clip-path="url(#breeze-shell-line-170)">-v</text><text class="breeze-shell-r1" x="207.4" y="4168" textLength="585.6" clip-path="url(#breeze-shell-line-170)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-shell-r5" x="1451.8" y="4168" textLength="12.2" clip-path="url(#breeze-shell-line-170)">│</text><text class="breeze-shell-r1" x="1464" y="4168" textLength="12.2" clip-path="url(#breeze-shell-line-170)">
-</text><text class="breeze-shell-r5" x="0" y="4192.4" textLength="12.2" clip-path="url(#breeze-shell-line-171)">│</text><text class="breeze-shell-r4" x="24.4" y="4192.4" textLength="73.2" clip-path="url(#breeze-shell-line-171)">--help</text><text class="breeze-shell-r6" x="158.6" y="4192.4" textLength="24.4" clip-path="url(#breeze-shell-line-171)">-h</text><text class="breeze-shell-r1" x="207.4" y="4192.4" textLength="329.4" clip-path="url(#breeze-shell-line-171)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-shell-r5" x="1451.8" y="4192.4" textLength="12.2" clip-path="url(#breeze-shell-line-171)">│</text><text class="breeze-shell-r1" x="1464" y="4192.4" textLength="12.2" clip-path="url(#breeze-shell-line-171)">
-</text><text class="breeze-shell-r5" x="0" y="4216.8" textLength="1464" clip-path="url(#breeze-shell-line-172)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="4216.8" textLength="12.2" clip-path="url(#breeze-shell-line-172)">
+</text><text class="breeze-shell-r5" x="0" y="2362.4" textLength="12.2" clip-path="url(#breeze-shell-line-96)">│</text><text class="breeze-shell-r4" x="24.4" y="2362.4" textLength="341.6" clip-path="url(#breeze-shell-line-96)">--clean-airflow-installation</text><text class="breeze-shell-r1" x="756.4" y="2362.4" textLength="683.2" clip-path="url(#breeze-shell-line-96)">Clean&#160;the&#160;airflow&#160;installation&#160;before&#160;installing&#160;version</text><text class="breeze-shell-r5" x="1451.8" y="2362.4" textLength="12.2" clip-path="url(#breeze-shell-line-96)">│</text><text class="breeze-shell-r1" x="1464" y="2362.4" textLength="12.2" clip-path="url(#breeze-shell-line-96)">
+</text><text class="breeze-shell-r5" x="0" y="2386.8" textLength="12.2" clip-path="url(#breeze-shell-line-97)">│</text><text class="breeze-shell-r1" x="756.4" y="2386.8" textLength="158.6" clip-path="url(#breeze-shell-line-97)">specified&#160;by&#160;</text><text class="breeze-shell-r4" x="915" y="2386.8" textLength="256.2" clip-path="url(#breeze-shell-line-97)">--use-airflow-version</text><text class="breeze-shell-r1" x="1171.2" y="2386.8" textLength="268.4" clip-path="url(#breeze-shell-line-97)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2386.8" textLength="12.2" clip-path="url(#breeze-shell-line-97)">│</text><text class="breeze-shell-r1" x="1464" y="2386.8" textLength="12.2" clip-path="url(#breeze-shell-line-97)">
+</text><text class="breeze-shell-r5" x="0" y="2411.2" textLength="12.2" clip-path="url(#breeze-shell-line-98)">│</text><text class="breeze-shell-r4" x="24.4" y="2411.2" textLength="329.4" clip-path="url(#breeze-shell-line-98)">--force-lowest-dependencies</text><text class="breeze-shell-r1" x="756.4" y="2411.2" textLength="683.2" clip-path="url(#breeze-shell-line-98)">Run&#160;tests&#160;for&#160;the&#160;lowest&#160;direct&#160;dependencies&#160;of&#160;Airflow&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2411.2" textLength="12.2" clip-path="url(#breeze-shell-line-98)">│</text><text class="breeze-shell-r1" x="1464" y="2411.2" textLength="12.2" clip-path="url(#breeze-shell-line-98)">
+</text><text class="breeze-shell-r5" x="0" y="2435.6" textLength="12.2" clip-path="url(#breeze-shell-line-99)">│</text><text class="breeze-shell-r1" x="756.4" y="2435.6" textLength="683.2" clip-path="url(#breeze-shell-line-99)">or&#160;selected&#160;provider&#160;if&#160;`Provider[PROVIDER_ID]`&#160;is&#160;used&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2435.6" textLength="12.2" clip-path="url(#breeze-shell-line-99)">│</text><text class="breeze-shell-r1" x="1464" y="2435.6" textLength="12.2" clip-path="url(#breeze-shell-line-99)">
+</text><text class="breeze-shell-r5" x="0" y="2460" textLength="12.2" clip-path="url(#breeze-shell-line-100)">│</text><text class="breeze-shell-r1" x="756.4" y="2460" textLength="683.2" clip-path="url(#breeze-shell-line-100)">as&#160;test&#160;type.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2460" textLength="12.2" clip-path="url(#breeze-shell-line-100)">│</text><text class="breeze-shell-r1" x="1464" y="2460" textLength="12.2" clip-path="url(#breeze-shell-line-100)">
+</text><text class="breeze-shell-r5" x="0" y="2484.4" textLength="12.2" clip-path="url(#breeze-shell-line-101)">│</text><text class="breeze-shell-r4" x="24.4" y="2484.4" textLength="134.2" clip-path="url(#breeze-shell-line-101)">--test-type</text><text class="breeze-shell-r1" x="756.4" y="2484.4" textLength="683.2" clip-path="url(#breeze-shell-line-101)">Type&#160;for&#160;shell&#160;tests&#160;to&#160;run&#160;-&#160;used&#160;when&#160;forcing&#160;lowest&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2484.4" textLength="12.2" clip-path="url(#breeze-shell-line-101)">│</text><text class="breeze-shell-r1" x="1464" y="2484.4" textLength="12.2" clip-path="url(#breeze-shell-line-101)">
+</text><text class="breeze-shell-r5" x="0" y="2508.8" textLength="12.2" clip-path="url(#breeze-shell-line-102)">│</text><text class="breeze-shell-r1" x="756.4" y="2508.8" textLength="683.2" clip-path="url(#breeze-shell-line-102)">dependencies&#160;to&#160;determine&#160;which&#160;distribution&#160;to&#160;force&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2508.8" textLength="12.2" clip-path="url(#breeze-shell-line-102)">│</text><text class="breeze-shell-r1" x="1464" y="2508.8" textLength="12.2" clip-path="url(#breeze-shell-line-102)">
+</text><text class="breeze-shell-r5" x="0" y="2533.2" textLength="12.2" clip-path="url(#breeze-shell-line-103)">│</text><text class="breeze-shell-r1" x="756.4" y="2533.2" textLength="683.2" clip-path="url(#breeze-shell-line-103)">lowest&#160;dependencies&#160;for&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2533.2" textLength="12.2" clip-path="url(#breeze-shell-line-103)">│</text><text class="breeze-shell-r1" x="1464" y="2533.2" textLength="12.2" clip-path="url(#breeze-shell-line-103)">
+</text><text class="breeze-shell-r5" x="0" y="2557.6" textLength="12.2" clip-path="url(#breeze-shell-line-104)">│</text><text class="breeze-shell-r7" x="756.4" y="2557.6" textLength="683.2" clip-path="url(#breeze-shell-line-104)">(All&#160;|&#160;All-Long&#160;|&#160;All-Quarantined&#160;|&#160;All-Postgres&#160;|&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2557.6" textLength="12.2" clip-path="url(#breeze-shell-line-104)">│</text><text class="breeze-shell-r1" x="1464" y="2557.6" textLength="12.2" clip-path="url(#breeze-shell-line-104)">
+</text><text class="breeze-shell-r5" x="0" y="2582" textLength="12.2" clip-path="url(#breeze-shell-line-105)">│</text><text class="breeze-shell-r7" x="756.4" y="2582" textLength="683.2" clip-path="url(#breeze-shell-line-105)">All-MySQL&#160;|&#160;API&#160;|&#160;Always&#160;|&#160;CLI&#160;|&#160;Core&#160;|&#160;Other&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2582" textLength="12.2" clip-path="url(#breeze-shell-line-105)">│</text><text class="breeze-shell-r1" x="1464" y="2582" textLength="12.2" clip-path="url(#breeze-shell-line-105)">
+</text><text class="breeze-shell-r5" x="0" y="2606.4" textLength="12.2" clip-path="url(#breeze-shell-line-106)">│</text><text class="breeze-shell-r7" x="756.4" y="2606.4" textLength="683.2" clip-path="url(#breeze-shell-line-106)">Serialization)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2606.4" textLength="12.2" clip-path="url(#breeze-shell-line-106)">│</text><text class="breeze-shell-r1" x="1464" y="2606.4" textLength="12.2" clip-path="url(#breeze-shell-line-106)">
+</text><text class="breeze-shell-r5" x="0" y="2630.8" textLength="12.2" clip-path="url(#breeze-shell-line-107)">│</text><text class="breeze-shell-r5" x="756.4" y="2630.8" textLength="683.2" clip-path="url(#breeze-shell-line-107)">[default:&#160;All]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2630.8" textLength="12.2" clip-path="url(#breeze-shell-line-107)">│</text><text class="breeze-shell-r1" x="1464" y="2630.8" textLength="12.2" clip-path="url(#breeze-shell-line-107)">
+</text><text class="breeze-shell-r5" x="0" y="2655.2" textLength="12.2" clip-path="url(#breeze-shell-line-108)">│</text><text class="breeze-shell-r4" x="24.4" y="2655.2" textLength="244" clip-path="url(#breeze-shell-line-108)">--excluded-providers</text><text class="breeze-shell-r1" x="756.4" y="2655.2" textLength="683.2" clip-path="url(#breeze-shell-line-108)">JSON-string&#160;of&#160;dictionary&#160;containing&#160;excluded&#160;providers&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2655.2" textLength="12.2" clip-path="url(#breeze-shell-line-108)">│</text><text class="breeze-shell-r1" x="1464" y="2655.2" textLength="12.2" clip-path="url(#breeze-shell-line-108)">
+</text><text class="breeze-shell-r5" x="0" y="2679.6" textLength="12.2" clip-path="url(#breeze-shell-line-109)">│</text><text class="breeze-shell-r1" x="756.4" y="2679.6" textLength="683.2" clip-path="url(#breeze-shell-line-109)">per&#160;python&#160;version&#160;({&#x27;3.12&#x27;:&#160;[&#x27;provider&#x27;]})&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2679.6" textLength="12.2" clip-path="url(#breeze-shell-line-109)">│</text><text class="breeze-shell-r1" x="1464" y="2679.6" textLength="12.2" clip-path="url(#breeze-shell-line-109)">
+</text><text class="breeze-shell-r5" x="0" y="2704" textLength="12.2" clip-path="url(#breeze-shell-line-110)">│</text><text class="breeze-shell-r7" x="756.4" y="2704" textLength="683.2" clip-path="url(#breeze-shell-line-110)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2704" textLength="12.2" clip-path="url(#breeze-shell-line-110)">│</text><text class="breeze-shell-r1" x="1464" y="2704" textLength="12.2" clip-path="url(#breeze-shell-line-110)">
+</text><text class="breeze-shell-r5" x="0" y="2728.4" textLength="12.2" clip-path="url(#breeze-shell-line-111)">│</text><text class="breeze-shell-r4" x="24.4" y="2728.4" textLength="414.8" clip-path="url(#breeze-shell-line-111)">--install-airflow-with-constraints</text><text class="breeze-shell-r1" x="439.2" y="2728.4" textLength="12.2" clip-path="url(#breeze-shell-line-111)">/</text><text class="breeze-shell-r4" x="451.4" y="2728.4" textLength="256.2" clip-path="url(#breeze-shell-line-111)">--no-install-airflow-</text><text class="breeze-shell-r1" x="756.4" y="2728.4" textLength="683.2" clip-path="url(#breeze-shell-line-111)">Install&#160;airflow&#160;in&#160;a&#160;separate&#160;step,&#160;with&#160;constraints&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2728.4" textLength="12.2" clip-path="url(#breeze-shell-line-111)">│</text><text class="breeze-shell-r1" x="1464" y="2728.4" textLength="12.2" clip-path="url(#breeze-shell-line-111)">
+</text><text class="breeze-shell-r5" x="0" y="2752.8" textLength="12.2" clip-path="url(#breeze-shell-line-112)">│</text><text class="breeze-shell-r4" x="24.4" y="2752.8" textLength="195.2" clip-path="url(#breeze-shell-line-112)">with-constraints</text><text class="breeze-shell-r1" x="756.4" y="2752.8" textLength="683.2" clip-path="url(#breeze-shell-line-112)">determined&#160;from&#160;package&#160;or&#160;airflow&#160;version.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2752.8" textLength="12.2" clip-path="url(#breeze-shell-line-112)">│</text><text class="breeze-shell-r1" x="1464" y="2752.8" textLength="12.2" clip-path="url(#breeze-shell-line-112)">
+</text><text class="breeze-shell-r5" x="0" y="2777.2" textLength="12.2" clip-path="url(#breeze-shell-line-113)">│</text><text class="breeze-shell-r5" x="756.4" y="2777.2" textLength="683.2" clip-path="url(#breeze-shell-line-113)">[default:&#160;install-airflow-with-constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2777.2" textLength="12.2" clip-path="url(#breeze-shell-line-113)">│</text><text class="breeze-shell-r1" x="1464" y="2777.2" textLength="12.2" clip-path="url(#breeze-shell-line-113)">
+</text><text class="breeze-shell-r5" x="0" y="2801.6" textLength="12.2" clip-path="url(#breeze-shell-line-114)">│</text><text class="breeze-shell-r4" x="24.4" y="2801.6" textLength="341.6" clip-path="url(#breeze-shell-line-114)">--install-selected-providers</text><text class="breeze-shell-r1" x="756.4" y="2801.6" textLength="683.2" clip-path="url(#breeze-shell-line-114)">Comma-separated&#160;list&#160;of&#160;providers&#160;selected&#160;to&#160;be&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2801.6" textLength="12.2" clip-path="url(#breeze-shell-line-114)">│</text><text class="breeze-shell-r1" x="1464" y="2801.6" textLength="12.2" clip-path="url(#breeze-shell-line-114)">
+</text><text class="breeze-shell-r5" x="0" y="2826" textLength="12.2" clip-path="url(#breeze-shell-line-115)">│</text><text class="breeze-shell-r1" x="756.4" y="2826" textLength="231.8" clip-path="url(#breeze-shell-line-115)">installed&#160;(implies&#160;</text><text class="breeze-shell-r4" x="988.2" y="2826" textLength="353.8" clip-path="url(#breeze-shell-line-115)">--use-distributions-from-dist</text><text class="breeze-shell-r1" x="1342" y="2826" textLength="97.6" clip-path="url(#breeze-shell-line-115)">).&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2826" textLength="12.2" clip-path="url(#breeze-shell-line-115)">│</text><text class="breeze-shell-r1" x="1464" y="2826" textLength="12.2" clip-path="url(#breeze-shell-line-115)">
+</text><text class="breeze-shell-r5" x="0" y="2850.4" textLength="12.2" clip-path="url(#breeze-shell-line-116)">│</text><text class="breeze-shell-r7" x="756.4" y="2850.4" textLength="683.2" clip-path="url(#breeze-shell-line-116)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2850.4" textLength="12.2" clip-path="url(#breeze-shell-line-116)">│</text><text class="breeze-shell-r1" x="1464" y="2850.4" textLength="12.2" clip-path="url(#breeze-shell-line-116)">
+</text><text class="breeze-shell-r5" x="0" y="2874.8" textLength="12.2" clip-path="url(#breeze-shell-line-117)">│</text><text class="breeze-shell-r4" x="24.4" y="2874.8" textLength="256.2" clip-path="url(#breeze-shell-line-117)">--distribution-format</text><text class="breeze-shell-r1" x="756.4" y="2874.8" textLength="658.8" clip-path="url(#breeze-shell-line-117)">Format&#160;of&#160;packages&#160;that&#160;should&#160;be&#160;installed&#160;from&#160;dist.</text><text class="breeze-shell-r5" x="1451.8" y="2874.8" textLength="12.2" clip-path="url(#breeze-shell-line-117)">│</text><text class="breeze-shell-r1" x="1464" y="2874.8" textLength="12.2" clip-path="url(#breeze-shell-line-117)">
+</text><text class="breeze-shell-r5" x="0" y="2899.2" textLength="12.2" clip-path="url(#breeze-shell-line-118)">│</text><text class="breeze-shell-r7" x="756.4" y="2899.2" textLength="658.8" clip-path="url(#breeze-shell-line-118)">(wheel&#160;|&#160;sdist)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2899.2" textLength="12.2" clip-path="url(#breeze-shell-line-118)">│</text><text class="breeze-shell-r1" x="1464" y="2899.2" textLength="12.2" clip-path="url(#breeze-shell-line-118)">
+</text><text class="breeze-shell-r5" x="0" y="2923.6" textLength="12.2" clip-path="url(#breeze-shell-line-119)">│</text><text class="breeze-shell-r5" x="756.4" y="2923.6" textLength="658.8" clip-path="url(#breeze-shell-line-119)">[default:&#160;wheel]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2923.6" textLength="12.2" clip-path="url(#breeze-shell-line-119)">│</text><text class="breeze-shell-r1" x="1464" y="2923.6" textLength="12.2" clip-path="url(#breeze-shell-line-119)">
+</text><text class="breeze-shell-r5" x="0" y="2948" textLength="12.2" clip-path="url(#breeze-shell-line-120)">│</text><text class="breeze-shell-r4" x="24.4" y="2948" textLength="390.4" clip-path="url(#breeze-shell-line-120)">--providers-constraints-location</text><text class="breeze-shell-r1" x="756.4" y="2948" textLength="683.2" clip-path="url(#breeze-shell-line-120)">Location&#160;of&#160;providers&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2948" textLength="12.2" clip-path="url(#breeze-shell-line-120)">│</text><text class="breeze-shell-r1" x="1464" y="2948" textLength="12.2" clip-path="url(#breeze-shell-line-120)">
+</text><text class="breeze-shell-r5" x="0" y="2972.4" textLength="12.2" clip-path="url(#breeze-shell-line-121)">│</text><text class="breeze-shell-r1" x="756.4" y="2972.4" textLength="683.2" clip-path="url(#breeze-shell-line-121)">local&#160;context&#160;file).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2972.4" textLength="12.2" clip-path="url(#breeze-shell-line-121)">│</text><text class="breeze-shell-r1" x="1464" y="2972.4" textLength="12.2" clip-path="url(#breeze-shell-line-121)">
+</text><text class="breeze-shell-r5" x="0" y="2996.8" textLength="12.2" clip-path="url(#breeze-shell-line-122)">│</text><text class="breeze-shell-r7" x="756.4" y="2996.8" textLength="683.2" clip-path="url(#breeze-shell-line-122)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2996.8" textLength="12.2" clip-path="url(#breeze-shell-line-122)">│</text><text class="breeze-shell-r1" x="1464" y="2996.8" textLength="12.2" clip-path="url(#breeze-shell-line-122)">
+</text><text class="breeze-shell-r5" x="0" y="3021.2" textLength="12.2" clip-path="url(#breeze-shell-line-123)">│</text><text class="breeze-shell-r4" x="24.4" y="3021.2" textLength="341.6" clip-path="url(#breeze-shell-line-123)">--providers-constraints-mode</text><text class="breeze-shell-r1" x="756.4" y="3021.2" textLength="683.2" clip-path="url(#breeze-shell-line-123)">Mode&#160;of&#160;constraints&#160;for&#160;Providers&#160;for&#160;CI&#160;image&#160;building.</text><text class="breeze-shell-r5" x="1451.8" y="3021.2" textLength="12.2" clip-path="url(#breeze-shell-line-123)">│</text><text class="breeze-shell-r1" x="1464" y="3021.2" textLength="12.2" clip-path="url(#breeze-shell-line-123)">
+</text><text class="breeze-shell-r5" x="0" y="3045.6" textLength="12.2" clip-path="url(#breeze-shell-line-124)">│</text><text class="breeze-shell-r7" x="756.4" y="3045.6" textLength="683.2" clip-path="url(#breeze-shell-line-124)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3045.6" textLength="12.2" clip-path="url(#breeze-shell-line-124)">│</text><text class="breeze-shell-r1" x="1464" y="3045.6" textLength="12.2" clip-path="url(#breeze-shell-line-124)">
+</text><text class="breeze-shell-r5" x="0" y="3070" textLength="12.2" clip-path="url(#breeze-shell-line-125)">│</text><text class="breeze-shell-r7" x="756.4" y="3070" textLength="683.2" clip-path="url(#breeze-shell-line-125)">constraints-no-providers)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3070" textLength="12.2" clip-path="url(#breeze-shell-line-125)">│</text><text class="breeze-shell-r1" x="1464" y="3070" textLength="12.2" clip-path="url(#breeze-shell-line-125)">
+</text><text class="breeze-shell-r5" x="0" y="3094.4" textLength="12.2" clip-path="url(#breeze-shell-line-126)">│</text><text class="breeze-shell-r5" x="756.4" y="3094.4" textLength="683.2" clip-path="url(#breeze-shell-line-126)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3094.4" textLength="12.2" clip-path="url(#breeze-shell-line-126)">│</text><text class="breeze-shell-r1" x="1464" y="3094.4" textLength="12.2" clip-path="url(#breeze-shell-line-126)">
+</text><text class="breeze-shell-r5" x="0" y="3118.8" textLength="12.2" clip-path="url(#breeze-shell-line-127)">│</text><text class="breeze-shell-r4" x="24.4" y="3118.8" textLength="402.6" clip-path="url(#breeze-shell-line-127)">--providers-constraints-reference</text><text class="breeze-shell-r1" x="756.4" y="3118.8" textLength="683.2" clip-path="url(#breeze-shell-line-127)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;providers&#160;installation&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3118.8" textLength="12.2" clip-path="url(#breeze-shell-line-127)">│</text><text class="breeze-shell-r1" x="1464" y="3118.8" textLength="12.2" clip-path="url(#breeze-shell-line-127)">
+</text><text class="breeze-shell-r5" x="0" y="3143.2" textLength="12.2" clip-path="url(#breeze-shell-line-128)">│</text><text class="breeze-shell-r1" x="756.4" y="3143.2" textLength="683.2" clip-path="url(#breeze-shell-line-128)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;Can&#160;be&#160;&#x27;default&#x27;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3143.2" textLength="12.2" clip-path="url(#breeze-shell-line-128)">│</text><text class="breeze-shell-r1" x="1464" y="3143.2" textLength="12.2" clip-path="url(#breeze-shell-line-128)">
+</text><text class="breeze-shell-r5" x="0" y="3167.6" textLength="12.2" clip-path="url(#breeze-shell-line-129)">│</text><text class="breeze-shell-r1" x="756.4" y="3167.6" textLength="683.2" clip-path="url(#breeze-shell-line-129)">in&#160;which&#160;case&#160;the&#160;default&#160;constraints-reference&#160;is&#160;used.</text><text class="breeze-shell-r5" x="1451.8" y="3167.6" textLength="12.2" clip-path="url(#breeze-shell-line-129)">│</text><text class="breeze-shell-r1" x="1464" y="3167.6" textLength="12.2" clip-path="url(#breeze-shell-line-129)">
+</text><text class="breeze-shell-r5" x="0" y="3192" textLength="12.2" clip-path="url(#breeze-shell-line-130)">│</text><text class="breeze-shell-r7" x="756.4" y="3192" textLength="683.2" clip-path="url(#breeze-shell-line-130)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3192" textLength="12.2" clip-path="url(#breeze-shell-line-130)">│</text><text class="breeze-shell-r1" x="1464" y="3192" textLength="12.2" clip-path="url(#breeze-shell-line-130)">
+</text><text class="breeze-shell-r5" x="0" y="3216.4" textLength="12.2" clip-path="url(#breeze-shell-line-131)">│</text><text class="breeze-shell-r4" x="24.4" y="3216.4" textLength="341.6" clip-path="url(#breeze-shell-line-131)">--providers-skip-constraints</text><text class="breeze-shell-r1" x="756.4" y="3216.4" textLength="597.8" clip-path="url(#breeze-shell-line-131)">Do&#160;not&#160;use&#160;constraints&#160;when&#160;installing&#160;providers.</text><text class="breeze-shell-r5" x="1451.8" y="3216.4" textLength="12.2" clip-path="url(#breeze-shell-line-131)">│</text><text class="breeze-shell-r1" x="1464" y="3216.4" textLength="12.2" clip-path="url(#breeze-shell-line-131)">
+</text><text class="breeze-shell-r5" x="0" y="3240.8" textLength="12.2" clip-path="url(#breeze-shell-line-132)">│</text><text class="breeze-shell-r4" x="24.4" y="3240.8" textLength="256.2" clip-path="url(#breeze-shell-line-132)">--use-airflow-version</text><text class="breeze-shell-r1" x="756.4" y="3240.8" textLength="683.2" clip-path="url(#breeze-shell-line-132)">Use&#160;(reinstall&#160;at&#160;entry)&#160;Airflow&#160;version&#160;from&#160;PyPI.&#160;It&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3240.8" textLength="12.2" clip-path="url(#breeze-shell-line-132)">│</text><text class="breeze-shell-r1" x="1464" y="3240.8" textLength="12.2" clip-path="url(#breeze-shell-line-132)">
+</text><text class="breeze-shell-r5" x="0" y="3265.2" textLength="12.2" clip-path="url(#breeze-shell-line-133)">│</text><text class="breeze-shell-r1" x="756.4" y="3265.2" textLength="683.2" clip-path="url(#breeze-shell-line-133)">can&#160;also&#160;be&#160;version&#160;(to&#160;install&#160;from&#160;PyPI),&#160;`none`,&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3265.2" textLength="12.2" clip-path="url(#breeze-shell-line-133)">│</text><text class="breeze-shell-r1" x="1464" y="3265.2" textLength="12.2" clip-path="url(#breeze-shell-line-133)">
+</text><text class="breeze-shell-r5" x="0" y="3289.6" textLength="12.2" clip-path="url(#breeze-shell-line-134)">│</text><text class="breeze-shell-r1" x="756.4" y="3289.6" textLength="683.2" clip-path="url(#breeze-shell-line-134)">`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder,&#160;or&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3289.6" textLength="12.2" clip-path="url(#breeze-shell-line-134)">│</text><text class="breeze-shell-r1" x="1464" y="3289.6" textLength="12.2" clip-path="url(#breeze-shell-line-134)">
+</text><text class="breeze-shell-r5" x="0" y="3314" textLength="12.2" clip-path="url(#breeze-shell-line-135)">│</text><text class="breeze-shell-r1" x="756.4" y="3314" textLength="683.2" clip-path="url(#breeze-shell-line-135)">VCS&#160;URL&#160;to&#160;install&#160;from&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3314" textLength="12.2" clip-path="url(#breeze-shell-line-135)">│</text><text class="breeze-shell-r1" x="1464" y="3314" textLength="12.2" clip-path="url(#breeze-shell-line-135)">
+</text><text class="breeze-shell-r5" x="0" y="3338.4" textLength="12.2" clip-path="url(#breeze-shell-line-136)">│</text><text class="breeze-shell-r1" x="756.4" y="3338.4" textLength="683.2" clip-path="url(#breeze-shell-line-136)">(https://pip.pypa.io/en/stable/topics/vcs-support/).&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3338.4" textLength="12.2" clip-path="url(#breeze-shell-line-136)">│</text><text class="breeze-shell-r1" x="1464" y="3338.4" textLength="12.2" clip-path="url(#breeze-shell-line-136)">
+</text><text class="breeze-shell-r5" x="0" y="3362.8" textLength="12.2" clip-path="url(#breeze-shell-line-137)">│</text><text class="breeze-shell-r1" x="756.4" y="3362.8" textLength="97.6" clip-path="url(#breeze-shell-line-137)">Implies&#160;</text><text class="breeze-shell-r4" x="854" y="3362.8" textLength="183" clip-path="url(#breeze-shell-line-137)">--mount-sources</text><text class="breeze-shell-r1" x="1037" y="3362.8" textLength="402.6" clip-path="url(#breeze-shell-line-137)">&#160;`remove`.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3362.8" textLength="12.2" clip-path="url(#breeze-shell-line-137)">│</text><text class="breeze-shell-r1" x="1464" y="3362.8" textLength="12.2" clip-path="url(#breeze-shell-line-137)">
+</text><text class="breeze-shell-r5" x="0" y="3387.2" textLength="12.2" clip-path="url(#breeze-shell-line-138)">│</text><text class="breeze-shell-r7" x="756.4" y="3387.2" textLength="683.2" clip-path="url(#breeze-shell-line-138)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3387.2" textLength="12.2" clip-path="url(#breeze-shell-line-138)">│</text><text class="breeze-shell-r1" x="1464" y="3387.2" textLength="12.2" clip-path="url(#breeze-shell-line-138)">
+</text><text class="breeze-shell-r5" x="0" y="3411.6" textLength="12.2" clip-path="url(#breeze-shell-line-139)">│</text><text class="breeze-shell-r4" x="24.4" y="3411.6" textLength="244" clip-path="url(#breeze-shell-line-139)">--allow-pre-releases</text><text class="breeze-shell-r1" x="756.4" y="3411.6" textLength="683.2" clip-path="url(#breeze-shell-line-139)">Allow&#160;pre-releases&#160;of&#160;Airflow,&#160;task-sdk&#160;and&#160;providers&#160;to</text><text class="breeze-shell-r5" x="1451.8" y="3411.6" textLength="12.2" clip-path="url(#breeze-shell-line-139)">│</text><text class="breeze-shell-r1" x="1464" y="3411.6" textLength="12.2" clip-path="url(#breeze-shell-line-139)">
+</text><text class="breeze-shell-r5" x="0" y="3436" textLength="12.2" clip-path="url(#breeze-shell-line-140)">│</text><text class="breeze-shell-r1" x="756.4" y="3436" textLength="683.2" clip-path="url(#breeze-shell-line-140)">be&#160;installed.&#160;Set&#160;to&#160;true&#160;automatically&#160;for&#160;pre-release&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3436" textLength="12.2" clip-path="url(#breeze-shell-line-140)">│</text><text class="breeze-shell-r1" x="1464" y="3436" textLength="12.2" clip-path="url(#breeze-shell-line-140)">
+</text><text class="breeze-shell-r5" x="0" y="3460.4" textLength="12.2" clip-path="url(#breeze-shell-line-141)">│</text><text class="breeze-shell-r4" x="756.4" y="3460.4" textLength="256.2" clip-path="url(#breeze-shell-line-141)">--use-airflow-version</text><text class="breeze-shell-r1" x="1012.6" y="3460.4" textLength="427" clip-path="url(#breeze-shell-line-141)">)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3460.4" textLength="12.2" clip-path="url(#breeze-shell-line-141)">│</text><text class="breeze-shell-r1" x="1464" y="3460.4" textLength="12.2" clip-path="url(#breeze-shell-line-141)">
+</text><text class="breeze-shell-r5" x="0" y="3484.8" textLength="12.2" clip-path="url(#breeze-shell-line-142)">│</text><text class="breeze-shell-r4" x="24.4" y="3484.8" textLength="353.8" clip-path="url(#breeze-shell-line-142)">--use-distributions-from-dist</text><text class="breeze-shell-r1" x="756.4" y="3484.8" textLength="402.6" clip-path="url(#breeze-shell-line-142)">Install&#160;all&#160;found&#160;distributions&#160;(</text><text class="breeze-shell-r4" x="1159" y="3484.8" textLength="256.2" clip-path="url(#breeze-shell-line-142)">--distribution-format</text><text class="breeze-shell-r5" x="1451.8" y="3484.8" textLength="12.2" clip-path="url(#breeze-shell-line-142)">│</text><text class="breeze-shell-r1" x="1464" y="3484.8" textLength="12.2" clip-path="url(#breeze-shell-line-142)">
+</text><text class="breeze-shell-r5" x="0" y="3509.2" textLength="12.2" clip-path="url(#breeze-shell-line-143)">│</text><text class="breeze-shell-r1" x="756.4" y="3509.2" textLength="683.2" clip-path="url(#breeze-shell-line-143)">determines&#160;type)&#160;from&#160;&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3509.2" textLength="12.2" clip-path="url(#breeze-shell-line-143)">│</text><text class="breeze-shell-r1" x="1464" y="3509.2" textLength="12.2" clip-path="url(#breeze-shell-line-143)">
+</text><text class="breeze-shell-r5" x="0" y="3533.6" textLength="12.2" clip-path="url(#breeze-shell-line-144)">│</text><text class="breeze-shell-r1" x="756.4" y="3533.6" textLength="683.2" clip-path="url(#breeze-shell-line-144)">breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3533.6" textLength="12.2" clip-path="url(#breeze-shell-line-144)">│</text><text class="breeze-shell-r1" x="1464" y="3533.6" textLength="12.2" clip-path="url(#breeze-shell-line-144)">
+</text><text class="breeze-shell-r5" x="0" y="3558" textLength="12.2" clip-path="url(#breeze-shell-line-145)">│</text><text class="breeze-shell-r4" x="24.4" y="3558" textLength="378.2" clip-path="url(#breeze-shell-line-145)">--install-airflow-python-client</text><text class="breeze-shell-r1" x="756.4" y="3558" textLength="683.2" clip-path="url(#breeze-shell-line-145)">Install&#160;airflow&#160;python&#160;client&#160;packages&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3558" textLength="12.2" clip-path="url(#breeze-shell-line-145)">│</text><text class="breeze-shell-r1" x="1464" y="3558" textLength="12.2" clip-path="url(#breeze-shell-line-145)">
+</text><text class="breeze-shell-r5" x="0" y="3582.4" textLength="12.2" clip-path="url(#breeze-shell-line-146)">│</text><text class="breeze-shell-r1" x="756.4" y="3582.4" textLength="12.2" clip-path="url(#breeze-shell-line-146)">(</text><text class="breeze-shell-r4" x="768.6" y="3582.4" textLength="256.2" clip-path="url(#breeze-shell-line-146)">--distribution-format</text><text class="breeze-shell-r1" x="1024.8" y="3582.4" textLength="414.8" clip-path="url(#breeze-shell-line-146)">&#160;determines&#160;type)&#160;from&#160;&#x27;dist&#x27;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3582.4" textLength="12.2" clip-path="url(#breeze-shell-line-146)">│</text><text class="breeze-shell-r1" x="1464" y="3582.4" textLength="12.2" clip-path="url(#breeze-shell-line-146)">
+</text><text class="breeze-shell-r5" x="0" y="3606.8" textLength="12.2" clip-path="url(#breeze-shell-line-147)">│</text><text class="breeze-shell-r1" x="756.4" y="3606.8" textLength="683.2" clip-path="url(#breeze-shell-line-147)">folder&#160;when&#160;entering&#160;breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3606.8" textLength="12.2" clip-path="url(#breeze-shell-line-147)">│</text><text class="breeze-shell-r1" x="1464" y="3606.8" textLength="12.2" clip-path="url(#breeze-shell-line-147)">
+</text><text class="breeze-shell-r5" x="0" y="3631.2" textLength="1464" clip-path="url(#breeze-shell-line-148)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="3631.2" textLength="12.2" clip-path="url(#breeze-shell-line-148)">
+</text><text class="breeze-shell-r5" x="0" y="3655.6" textLength="24.4" clip-path="url(#breeze-shell-line-149)">╭─</text><text class="breeze-shell-r5" x="24.4" y="3655.6" textLength="610" clip-path="url(#breeze-shell-line-149)">&#160;Upgrading/downgrading/removing&#160;selected&#160;packages&#160;</text><text class="breeze-shell-r5" x="634.4" y="3655.6" textLength="805.2" clip-path="url(#breeze-shell-line-149)">──────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="3655.6" textLength="24.4" clip-path="url(#breeze-shell-line-149)">─╮</text><text class="breeze-shell-r1" x="1464" y="3655.6" textLength="12.2" clip-path="url(#breeze-shell-line-149)">
+</text><text class="breeze-shell-r5" x="0" y="3680" textLength="12.2" clip-path="url(#breeze-shell-line-150)">│</text><text class="breeze-shell-r4" x="24.4" y="3680" textLength="170.8" clip-path="url(#breeze-shell-line-150)">--upgrade-boto</text><text class="breeze-shell-r1" x="341.6" y="3680" textLength="866.2" clip-path="url(#breeze-shell-line-150)">Remove&#160;aiobotocore&#160;and&#160;upgrade&#160;botocore&#160;and&#160;boto&#160;to&#160;the&#160;latest&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y="3680" textLength="12.2" clip-path="url(#breeze-shell-line-150)">│</text><text class="breeze-shell-r1" x="1464" y="3680" textLength="12.2" clip-path="url(#breeze-shell-line-150)">
+</text><text class="breeze-shell-r5" x="0" y="3704.4" textLength="12.2" clip-path="url(#breeze-shell-line-151)">│</text><text class="breeze-shell-r4" x="24.4" y="3704.4" textLength="268.4" clip-path="url(#breeze-shell-line-151)">--downgrade-sqlalchemy</text><text class="breeze-shell-r1" x="341.6" y="3704.4" textLength="610" clip-path="url(#breeze-shell-line-151)">Downgrade&#160;SQLAlchemy&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y="3704.4" textLength="12.2" clip-path="url(#breeze-shell-line-151)">│</text><text class="breeze-shell-r1" x="1464" y="3704.4" textLength="12.2" clip-path="url(#breeze-shell-line-151)">
+</text><text class="breeze-shell-r5" x="0" y="3728.8" textLength="12.2" clip-path="url(#breeze-shell-line-152)">│</text><text class="breeze-shell-r4" x="24.4" y="3728.8" textLength="244" clip-path="url(#breeze-shell-line-152)">--downgrade-pendulum</text><text class="breeze-shell-r1" x="341.6" y="3728.8" textLength="585.6" clip-path="url(#breeze-shell-line-152)">Downgrade&#160;Pendulum&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y="3728.8" textLength="12.2" clip-path="url(#breeze-shell-line-152)">│</text><text class="breeze-shell-r1" x="1464" y="3728.8" textLength="12.2" clip-path="url(#breeze-shell-line-152)">
+</text><text class="breeze-shell-r5" x="0" y="3753.2" textLength="1464" clip-path="url(#breeze-shell-line-153)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="3753.2" textLength="12.2" clip-path="url(#breeze-shell-line-153)">
+</text><text class="breeze-shell-r5" x="0" y="3777.6" textLength="24.4" clip-path="url(#breeze-shell-line-154)">╭─</text><text class="breeze-shell-r5" x="24.4" y="3777.6" textLength="183" clip-path="url(#breeze-shell-line-154)">&#160;DB&#160;test&#160;flags&#160;</text><text class="breeze-shell-r5" x="207.4" y="3777.6" textLength="1232.2" clip-path="url(#breeze-shell-line-154)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="3777.6" textLength="24.4" clip-path="url(#breeze-shell-line-154)">─╮</text><text class="breeze-shell-r1" x="1464" y="3777.6" textLength="12.2" clip-path="url(#breeze-shell-line-154)">
+</text><text class="breeze-shell-r5" x="0" y="3802" textLength="12.2" clip-path="url(#breeze-shell-line-155)">│</text><text class="breeze-shell-r4" x="24.4" y="3802" textLength="231.8" clip-path="url(#breeze-shell-line-155)">--run-db-tests-only</text><text class="breeze-shell-r1" x="305" y="3802" textLength="475.8" clip-path="url(#breeze-shell-line-155)">Only&#160;runs&#160;tests&#160;that&#160;require&#160;a&#160;database</text><text class="breeze-shell-r5" x="1451.8" y="3802" textLength="12.2" clip-path="url(#breeze-shell-line-155)">│</text><text class="breeze-shell-r1" x="1464" y="3802" textLength="12.2" clip-path="url(#breeze-shell-line-155)">
+</text><text class="breeze-shell-r5" x="0" y="3826.4" textLength="12.2" clip-path="url(#breeze-shell-line-156)">│</text><text class="breeze-shell-r4" x="24.4" y="3826.4" textLength="183" clip-path="url(#breeze-shell-line-156)">--skip-db-tests</text><text class="breeze-shell-r1" x="305" y="3826.4" textLength="414.8" clip-path="url(#breeze-shell-line-156)">Skip&#160;tests&#160;that&#160;require&#160;a&#160;database</text><text class="breeze-shell-r5" x="1451.8" y="3826.4" textLength="12.2" clip-path="url(#breeze-shell-line-156)">│</text><text class="breeze-shell-r1" x="1464" y="3826.4" textLength="12.2" clip-path="url(#breeze-shell-line-156)">
+</text><text class="breeze-shell-r5" x="0" y="3850.8" textLength="1464" clip-path="url(#breeze-shell-line-157)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="3850.8" textLength="12.2" clip-path="url(#breeze-shell-line-157)">
+</text><text class="breeze-shell-r5" x="0" y="3875.2" textLength="24.4" clip-path="url(#breeze-shell-line-158)">╭─</text><text class="breeze-shell-r5" x="24.4" y="3875.2" textLength="183" clip-path="url(#breeze-shell-line-158)">&#160;Other&#160;options&#160;</text><text class="breeze-shell-r5" x="207.4" y="3875.2" textLength="1232.2" clip-path="url(#breeze-shell-line-158)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="3875.2" textLength="24.4" clip-path="url(#breeze-shell-line-158)">─╮</text><text class="breeze-shell-r1" x="1464" y="3875.2" textLength="12.2" clip-path="url(#breeze-shell-line-158)">
+</text><text class="breeze-shell-r5" x="0" y="3899.6" textLength="12.2" clip-path="url(#breeze-shell-line-159)">│</text><text class="breeze-shell-r4" x="24.4" y="3899.6" textLength="256.2" clip-path="url(#breeze-shell-line-159)">--forward-credentials</text><text class="breeze-shell-r6" x="305" y="3899.6" textLength="24.4" clip-path="url(#breeze-shell-line-159)">-f</text><text class="breeze-shell-r1" x="353.8" y="3899.6" textLength="634.4" clip-path="url(#breeze-shell-line-159)">Forward&#160;local&#160;credentials&#160;to&#160;container&#160;when&#160;running.</text><text class="breeze-shell-r5" x="1451.8" y="3899.6" textLength="12.2" clip-path="url(#breeze-shell-line-159)">│</text><text class="breeze-shell-r1" x="1464" y="3899.6" textLength="12.2" clip-path="url(#breeze-shell-line-159)">
+</text><text class="breeze-shell-r5" x="0" y="3924" textLength="12.2" clip-path="url(#breeze-shell-line-160)">│</text><text class="breeze-shell-r4" x="24.4" y="3924" textLength="122" clip-path="url(#breeze-shell-line-160)">--max-time</text><text class="breeze-shell-r1" x="353.8" y="3924" textLength="1049.2" clip-path="url(#breeze-shell-line-160)">Maximum&#160;time&#160;that&#160;the&#160;command&#160;should&#160;take&#160;-&#160;if&#160;it&#160;takes&#160;longer,&#160;the&#160;command&#160;will&#160;fail.</text><text class="breeze-shell-r5" x="1451.8" y="3924" textLength="12.2" clip-path="url(#breeze-shell-line-160)">│</text><text class="breeze-shell-r1" x="1464" y="3924" textLength="12.2" clip-path="url(#breeze-shell-line-160)">
+</text><text class="breeze-shell-r5" x="0" y="3948.4" textLength="12.2" clip-path="url(#breeze-shell-line-161)">│</text><text class="breeze-shell-r7" x="353.8" y="3948.4" textLength="1049.2" clip-path="url(#breeze-shell-line-161)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3948.4" textLength="12.2" clip-path="url(#breeze-shell-line-161)">│</text><text class="breeze-shell-r1" x="1464" y="3948.4" textLength="12.2" clip-path="url(#breeze-shell-line-161)">
+</text><text class="breeze-shell-r5" x="0" y="3972.8" textLength="12.2" clip-path="url(#breeze-shell-line-162)">│</text><text class="breeze-shell-r4" x="24.4" y="3972.8" textLength="219.6" clip-path="url(#breeze-shell-line-162)">--verbose-commands</text><text class="breeze-shell-r1" x="353.8" y="3972.8" textLength="414.8" clip-path="url(#breeze-shell-line-162)">Show&#160;details&#160;of&#160;commands&#160;executed.</text><text class="breeze-shell-r5" x="1451.8" y="3972.8" textLength="12.2" clip-path="url(#breeze-shell-line-162)">│</text><text class="breeze-shell-r1" x="1464" y="3972.8" textLength="12.2" clip-path="url(#breeze-shell-line-162)">
+</text><text class="breeze-shell-r5" x="0" y="3997.2" textLength="12.2" clip-path="url(#breeze-shell-line-163)">│</text><text class="breeze-shell-r4" x="24.4" y="3997.2" textLength="244" clip-path="url(#breeze-shell-line-163)">--keep-env-variables</text><text class="breeze-shell-r1" x="353.8" y="3997.2" textLength="1000.4" clip-path="url(#breeze-shell-line-163)">Do&#160;not&#160;clear&#160;environment&#160;variables&#160;that&#160;might&#160;have&#160;side&#160;effect&#160;while&#160;running&#160;tests</text><text class="breeze-shell-r5" x="1451.8" y="3997.2" textLength="12.2" clip-path="url(#breeze-shell-line-163)">│</text><text class="breeze-shell-r1" x="1464" y="3997.2" textLength="12.2" clip-path="url(#breeze-shell-line-163)">
+</text><text class="breeze-shell-r5" x="0" y="4021.6" textLength="12.2" clip-path="url(#breeze-shell-line-164)">│</text><text class="breeze-shell-r4" x="24.4" y="4021.6" textLength="183" clip-path="url(#breeze-shell-line-164)">--no-db-cleanup</text><text class="breeze-shell-r1" x="353.8" y="4021.6" textLength="597.8" clip-path="url(#breeze-shell-line-164)">Do&#160;not&#160;clear&#160;the&#160;database&#160;before&#160;each&#160;test&#160;module</text><text class="breeze-shell-r5" x="1451.8" y="4021.6" textLength="12.2" clip-path="url(#breeze-shell-line-164)">│</text><text class="breeze-shell-r1" x="1464" y="4021.6" textLength="12.2" clip-path="url(#breeze-shell-line-164)">
+</text><text class="breeze-shell-r5" x="0" y="4046" textLength="1464" clip-path="url(#breeze-shell-line-165)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="4046" textLength="12.2" clip-path="url(#breeze-shell-line-165)">
+</text><text class="breeze-shell-r5" x="0" y="4070.4" textLength="24.4" clip-path="url(#breeze-shell-line-166)">╭─</text><text class="breeze-shell-r5" x="24.4" y="4070.4" textLength="195.2" clip-path="url(#breeze-shell-line-166)">&#160;Common&#160;options&#160;</text><text class="breeze-shell-r5" x="219.6" y="4070.4" textLength="1220" clip-path="url(#breeze-shell-line-166)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="4070.4" textLength="24.4" clip-path="url(#breeze-shell-line-166)">─╮</text><text class="breeze-shell-r1" x="1464" y="4070.4" textLength="12.2" clip-path="url(#breeze-shell-line-166)">
+</text><text class="breeze-shell-r5" x="0" y="4094.8" textLength="12.2" clip-path="url(#breeze-shell-line-167)">│</text><text class="breeze-shell-r4" x="24.4" y="4094.8" textLength="97.6" clip-path="url(#breeze-shell-line-167)">--answer</text><text class="breeze-shell-r6" x="158.6" y="4094.8" textLength="24.4" clip-path="url(#breeze-shell-line-167)">-a</text><text class="breeze-shell-r1" x="207.4" y="4094.8" textLength="317.2" clip-path="url(#breeze-shell-line-167)">Force&#160;answer&#160;to&#160;questions.</text><text class="breeze-shell-r7" x="536.8" y="4094.8" textLength="353.8" clip-path="url(#breeze-shell-line-167)">(y&#160;|&#160;n&#160;|&#160;q&#160;|&#160;yes&#160;|&#160;no&#160;|&#160;quit)</text><text class="breeze-shell-r5" x="1451.8" y="4094.8" textLength="12.2" clip-path="url(#breeze-shell-line-167)">│</text><text class="breeze-shell-r1" x="1464" y="4094.8" textLength="12.2" clip-path="url(#breeze-shell-line-167)">
+</text><text class="breeze-shell-r5" x="0" y="4119.2" textLength="12.2" clip-path="url(#breeze-shell-line-168)">│</text><text class="breeze-shell-r4" x="24.4" y="4119.2" textLength="109.8" clip-path="url(#breeze-shell-line-168)">--dry-run</text><text class="breeze-shell-r6" x="158.6" y="4119.2" textLength="24.4" clip-path="url(#breeze-shell-line-168)">-D</text><text class="breeze-shell-r1" x="207.4" y="4119.2" textLength="719.8" clip-path="url(#breeze-shell-line-168)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-shell-r5" x="1451.8" y="4119.2" textLength="12.2" clip-path="url(#breeze-shell-line-168)">│</text><text class="breeze-shell-r1" x="1464" y="4119.2" textLength="12.2" clip-path="url(#breeze-shell-line-168)">
+</text><text class="breeze-shell-r5" x="0" y="4143.6" textLength="12.2" clip-path="url(#breeze-shell-line-169)">│</text><text class="breeze-shell-r4" x="24.4" y="4143.6" textLength="109.8" clip-path="url(#breeze-shell-line-169)">--verbose</text><text class="breeze-shell-r6" x="158.6" y="4143.6" textLength="24.4" clip-path="url(#breeze-shell-line-169)">-v</text><text class="breeze-shell-r1" x="207.4" y="4143.6" textLength="585.6" clip-path="url(#breeze-shell-line-169)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-shell-r5" x="1451.8" y="4143.6" textLength="12.2" clip-path="url(#breeze-shell-line-169)">│</text><text class="breeze-shell-r1" x="1464" y="4143.6" textLength="12.2" clip-path="url(#breeze-shell-line-169)">
+</text><text class="breeze-shell-r5" x="0" y="4168" textLength="12.2" clip-path="url(#breeze-shell-line-170)">│</text><text class="breeze-shell-r4" x="24.4" y="4168" textLength="73.2" clip-path="url(#breeze-shell-line-170)">--help</text><text class="breeze-shell-r6" x="158.6" y="4168" textLength="24.4" clip-path="url(#breeze-shell-line-170)">-h</text><text class="breeze-shell-r1" x="207.4" y="4168" textLength="329.4" clip-path="url(#breeze-shell-line-170)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-shell-r5" x="1451.8" y="4168" textLength="12.2" clip-path="url(#breeze-shell-line-170)">│</text><text class="breeze-shell-r1" x="1464" y="4168" textLength="12.2" clip-path="url(#breeze-shell-line-170)">
+</text><text class="breeze-shell-r5" x="0" y="4192.4" textLength="1464" clip-path="url(#breeze-shell-line-171)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="4192.4" textLength="12.2" clip-path="url(#breeze-shell-line-171)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_shell.txt b/dev/breeze/doc/images/output_shell.txt
index 41da4085f9418..8650401fe3735 100644
--- a/dev/breeze/doc/images/output_shell.txt
+++ b/dev/breeze/doc/images/output_shell.txt
@@ -1 +1 @@
-f26f35825705d41fba54a52a5383f02e
+00e479003b0f0fd2e7e81d0703a4b829
diff --git a/dev/breeze/doc/images/output_start-airflow.svg b/dev/breeze/doc/images/output_start-airflow.svg
index cf371f2c197ea..5e5e599f53334 100644
--- a/dev/breeze/doc/images/output_start-airflow.svg
+++ b/dev/breeze/doc/images/output_start-airflow.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 3173.2" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 3270.7999999999997" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-start-airflow-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="3122.2" />
+      <rect x="0" y="0" width="1463.0" height="3219.7999999999997" />
     </clipPath>
     <clipPath id="breeze-start-airflow-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -426,9 +426,21 @@
 <clipPath id="breeze-start-airflow-line-126">
     <rect x="0" y="3075.9" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-start-airflow-line-127">
+    <rect x="0" y="3100.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-start-airflow-line-128">
+    <rect x="0" y="3124.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-start-airflow-line-129">
+    <rect x="0" y="3149.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-start-airflow-line-130">
+    <rect x="0" y="3173.5" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="3171.2" rx="8"/><text class="breeze-start-airflow-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;start-airflow</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="3268.8" rx="8"/><text class="breeze-start-airflow-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;start-airflow</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -529,43 +541,47 @@
 </text><text class="breeze-start-airflow-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-88)">│</text><text class="breeze-start-airflow-r7" x="475.8" y="2167.2" textLength="963.8" clip-path="url(#breeze-start-airflow-line-88)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2167.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-88)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-88)">
 </text><text class="breeze-start-airflow-r5" x="0" y="2191.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-89)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2191.6" textLength="195.2" clip-path="url(#breeze-start-airflow-line-89)">--airflow-extras</text><text class="breeze-start-airflow-r1" x="475.8" y="2191.6" textLength="378.2" clip-path="url(#breeze-start-airflow-line-89)">Airflow&#160;extras&#160;to&#160;install&#160;when&#160;</text><text class="breeze-start-airflow-r4" x="854" y="2191.6" textLength="256.2" clip-path="url(#breeze-start-airflow-line-89)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="1110.2" y="2191.6" textLength="97.6" clip-path="url(#breeze-start-airflow-line-89)">&#160;is&#160;used</text><text class="breeze-start-airflow-r7" x="1220" y="2191.6" textLength="73.2" clip-path="url(#breeze-start-airflow-line-89)">(TEXT)</text><text class="breeze-start-airflow-r5" x="1451.8" y="2191.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-89)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2191.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-89)">
 </text><text class="breeze-start-airflow-r5" x="0" y="2216" textLength="12.2" clip-path="url(#breeze-start-airflow-line-90)">│</text><text class="breeze-start-airflow-r5" x="475.8" y="2216" textLength="732" clip-path="url(#breeze-start-airflow-line-90)">[default:&#160;&quot;&quot;]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2216" textLength="12.2" clip-path="url(#breeze-start-airflow-line-90)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2216" textLength="12.2" clip-path="url(#breeze-start-airflow-line-90)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2240.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-91)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2240.4" textLength="317.2" clip-path="url(#breeze-start-airflow-line-91)">--airflow-skip-constraints</text><text class="breeze-start-airflow-r1" x="475.8" y="2240.4" textLength="573.4" clip-path="url(#breeze-start-airflow-line-91)">Do&#160;not&#160;use&#160;constraints&#160;when&#160;installing&#160;airflow.</text><text class="breeze-start-airflow-r5" x="1451.8" y="2240.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-91)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2240.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-91)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2264.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-92)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2264.8" textLength="341.6" clip-path="url(#breeze-start-airflow-line-92)">--clean-airflow-installation</text><text class="breeze-start-airflow-r1" x="475.8" y="2264.8" textLength="963.8" clip-path="url(#breeze-start-airflow-line-92)">Clean&#160;the&#160;airflow&#160;installation&#160;before&#160;installing&#160;version&#160;specified&#160;by&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2264.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-92)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2264.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-92)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2289.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-93)">│</text><text class="breeze-start-airflow-r4" x="475.8" y="2289.2" textLength="256.2" clip-path="url(#breeze-start-airflow-line-93)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="732" y="2289.2" textLength="707.6" clip-path="url(#breeze-start-airflow-line-93)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2289.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-93)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2289.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-93)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2313.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-94)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2313.6" textLength="341.6" clip-path="url(#breeze-start-airflow-line-94)">--install-selected-providers</text><text class="breeze-start-airflow-r1" x="475.8" y="2313.6" textLength="963.8" clip-path="url(#breeze-start-airflow-line-94)">Comma-separated&#160;list&#160;of&#160;providers&#160;selected&#160;to&#160;be&#160;installed&#160;(implies&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2313.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-94)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2313.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-94)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2338" textLength="12.2" clip-path="url(#breeze-start-airflow-line-95)">│</text><text class="breeze-start-airflow-r4" x="475.8" y="2338" textLength="353.8" clip-path="url(#breeze-start-airflow-line-95)">--use-distributions-from-dist</text><text class="breeze-start-airflow-r1" x="829.6" y="2338" textLength="610" clip-path="url(#breeze-start-airflow-line-95)">).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2338" textLength="12.2" clip-path="url(#breeze-start-airflow-line-95)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2338" textLength="12.2" clip-path="url(#breeze-start-airflow-line-95)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2362.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-96)">│</text><text class="breeze-start-airflow-r7" x="475.8" y="2362.4" textLength="963.8" clip-path="url(#breeze-start-airflow-line-96)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2362.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-96)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2362.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-96)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2386.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-97)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2386.8" textLength="256.2" clip-path="url(#breeze-start-airflow-line-97)">--distribution-format</text><text class="breeze-start-airflow-r1" x="475.8" y="2386.8" textLength="658.8" clip-path="url(#breeze-start-airflow-line-97)">Format&#160;of&#160;packages&#160;that&#160;should&#160;be&#160;installed&#160;from&#160;dist.</text><text class="breeze-start-airflow-r7" x="1146.8" y="2386.8" textLength="183" clip-path="url(#breeze-start-airflow-line-97)">(wheel&#160;|&#160;sdist)</text><text class="breeze-start-airflow-r5" x="1451.8" y="2386.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-97)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2386.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-97)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2411.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-98)">│</text><text class="breeze-start-airflow-r5" x="475.8" y="2411.2" textLength="658.8" clip-path="url(#breeze-start-airflow-line-98)">[default:&#160;wheel]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2411.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-98)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2411.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-98)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2435.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-99)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2435.6" textLength="390.4" clip-path="url(#breeze-start-airflow-line-99)">--providers-constraints-location</text><text class="breeze-start-airflow-r1" x="475.8" y="2435.6" textLength="927.2" clip-path="url(#breeze-start-airflow-line-99)">Location&#160;of&#160;providers&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;local&#160;context&#160;file).</text><text class="breeze-start-airflow-r5" x="1451.8" y="2435.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-99)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2435.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-99)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2460" textLength="12.2" clip-path="url(#breeze-start-airflow-line-100)">│</text><text class="breeze-start-airflow-r7" x="475.8" y="2460" textLength="927.2" clip-path="url(#breeze-start-airflow-line-100)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2460" textLength="12.2" clip-path="url(#breeze-start-airflow-line-100)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2460" textLength="12.2" clip-path="url(#breeze-start-airflow-line-100)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2484.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-101)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2484.4" textLength="341.6" clip-path="url(#breeze-start-airflow-line-101)">--providers-constraints-mode</text><text class="breeze-start-airflow-r1" x="475.8" y="2484.4" textLength="866.2" clip-path="url(#breeze-start-airflow-line-101)">Mode&#160;of&#160;constraints&#160;for&#160;Providers&#160;for&#160;CI&#160;image&#160;building.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2484.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-101)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2484.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-101)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2508.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-102)">│</text><text class="breeze-start-airflow-r7" x="475.8" y="2508.8" textLength="866.2" clip-path="url(#breeze-start-airflow-line-102)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;constraints-no-providers)</text><text class="breeze-start-airflow-r5" x="1451.8" y="2508.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-102)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2508.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-102)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2533.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-103)">│</text><text class="breeze-start-airflow-r5" x="475.8" y="2533.2" textLength="866.2" clip-path="url(#breeze-start-airflow-line-103)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2533.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-103)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2533.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-103)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2557.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-104)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2557.6" textLength="402.6" clip-path="url(#breeze-start-airflow-line-104)">--providers-constraints-reference</text><text class="breeze-start-airflow-r1" x="475.8" y="2557.6" textLength="963.8" clip-path="url(#breeze-start-airflow-line-104)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;providers&#160;installation&#160;(used&#160;in&#160;calculated&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2557.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-104)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2557.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-104)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2582" textLength="12.2" clip-path="url(#breeze-start-airflow-line-105)">│</text><text class="breeze-start-airflow-r1" x="475.8" y="2582" textLength="963.8" clip-path="url(#breeze-start-airflow-line-105)">constraints&#160;URL).&#160;Can&#160;be&#160;&#x27;default&#x27;&#160;in&#160;which&#160;case&#160;the&#160;default&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2582" textLength="12.2" clip-path="url(#breeze-start-airflow-line-105)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2582" textLength="12.2" clip-path="url(#breeze-start-airflow-line-105)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2606.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-106)">│</text><text class="breeze-start-airflow-r1" x="475.8" y="2606.4" textLength="963.8" clip-path="url(#breeze-start-airflow-line-106)">constraints-reference&#160;is&#160;used.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2606.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-106)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2606.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-106)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2630.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-107)">│</text><text class="breeze-start-airflow-r7" x="475.8" y="2630.8" textLength="963.8" clip-path="url(#breeze-start-airflow-line-107)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2630.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-107)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2630.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-107)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2655.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-108)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2655.2" textLength="341.6" clip-path="url(#breeze-start-airflow-line-108)">--providers-skip-constraints</text><text class="breeze-start-airflow-r1" x="475.8" y="2655.2" textLength="597.8" clip-path="url(#breeze-start-airflow-line-108)">Do&#160;not&#160;use&#160;constraints&#160;when&#160;installing&#160;providers.</text><text class="breeze-start-airflow-r5" x="1451.8" y="2655.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-108)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2655.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-108)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2679.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-109)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2679.6" textLength="256.2" clip-path="url(#breeze-start-airflow-line-109)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="475.8" y="2679.6" textLength="963.8" clip-path="url(#breeze-start-airflow-line-109)">Use&#160;(reinstall&#160;at&#160;entry)&#160;Airflow&#160;version&#160;from&#160;PyPI.&#160;It&#160;can&#160;also&#160;be&#160;version&#160;(to&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2679.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-109)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2679.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-109)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2704" textLength="12.2" clip-path="url(#breeze-start-airflow-line-110)">│</text><text class="breeze-start-airflow-r1" x="475.8" y="2704" textLength="963.8" clip-path="url(#breeze-start-airflow-line-110)">install&#160;from&#160;PyPI),&#160;`none`,&#160;`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder,&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2704" textLength="12.2" clip-path="url(#breeze-start-airflow-line-110)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2704" textLength="12.2" clip-path="url(#breeze-start-airflow-line-110)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2728.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-111)">│</text><text class="breeze-start-airflow-r1" x="475.8" y="2728.4" textLength="963.8" clip-path="url(#breeze-start-airflow-line-111)">or&#160;VCS&#160;URL&#160;to&#160;install&#160;from&#160;(https://pip.pypa.io/en/stable/topics/vcs-support/).</text><text class="breeze-start-airflow-r5" x="1451.8" y="2728.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-111)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2728.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-111)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2752.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-112)">│</text><text class="breeze-start-airflow-r1" x="475.8" y="2752.8" textLength="97.6" clip-path="url(#breeze-start-airflow-line-112)">Implies&#160;</text><text class="breeze-start-airflow-r4" x="573.4" y="2752.8" textLength="183" clip-path="url(#breeze-start-airflow-line-112)">--mount-sources</text><text class="breeze-start-airflow-r1" x="756.4" y="2752.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-112)">&#160;`remove`.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2752.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-112)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2752.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-112)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2777.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-113)">│</text><text class="breeze-start-airflow-r7" x="475.8" y="2777.2" textLength="963.8" clip-path="url(#breeze-start-airflow-line-113)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2777.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-113)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2777.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-113)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2801.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-114)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2801.6" textLength="244" clip-path="url(#breeze-start-airflow-line-114)">--allow-pre-releases</text><text class="breeze-start-airflow-r1" x="475.8" y="2801.6" textLength="963.8" clip-path="url(#breeze-start-airflow-line-114)">Allow&#160;pre-releases&#160;of&#160;Airflow,&#160;task-sdk&#160;and&#160;providers&#160;to&#160;be&#160;installed.&#160;Set&#160;to&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2801.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-114)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2801.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-114)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2826" textLength="12.2" clip-path="url(#breeze-start-airflow-line-115)">│</text><text class="breeze-start-airflow-r1" x="475.8" y="2826" textLength="427" clip-path="url(#breeze-start-airflow-line-115)">true&#160;automatically&#160;for&#160;pre-release&#160;</text><text class="breeze-start-airflow-r4" x="902.8" y="2826" textLength="256.2" clip-path="url(#breeze-start-airflow-line-115)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="1159" y="2826" textLength="280.6" clip-path="url(#breeze-start-airflow-line-115)">)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2826" textLength="12.2" clip-path="url(#breeze-start-airflow-line-115)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2826" textLength="12.2" clip-path="url(#breeze-start-airflow-line-115)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2850.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-116)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2850.4" textLength="353.8" clip-path="url(#breeze-start-airflow-line-116)">--use-distributions-from-dist</text><text class="breeze-start-airflow-r1" x="475.8" y="2850.4" textLength="402.6" clip-path="url(#breeze-start-airflow-line-116)">Install&#160;all&#160;found&#160;distributions&#160;(</text><text class="breeze-start-airflow-r4" x="878.4" y="2850.4" textLength="256.2" clip-path="url(#breeze-start-airflow-line-116)">--distribution-format</text><text class="breeze-start-airflow-r1" x="1134.6" y="2850.4" textLength="305" clip-path="url(#breeze-start-airflow-line-116)">&#160;determines&#160;type)&#160;from&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2850.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-116)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2850.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-116)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2874.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-117)">│</text><text class="breeze-start-airflow-r1" x="475.8" y="2874.8" textLength="963.8" clip-path="url(#breeze-start-airflow-line-117)">&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2874.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-117)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2874.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-117)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2899.2" textLength="1464" clip-path="url(#breeze-start-airflow-line-118)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="2899.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-118)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2923.6" textLength="24.4" clip-path="url(#breeze-start-airflow-line-119)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="2923.6" textLength="183" clip-path="url(#breeze-start-airflow-line-119)">&#160;Other&#160;options&#160;</text><text class="breeze-start-airflow-r5" x="207.4" y="2923.6" textLength="1232.2" clip-path="url(#breeze-start-airflow-line-119)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="2923.6" textLength="24.4" clip-path="url(#breeze-start-airflow-line-119)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="2923.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-119)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2948" textLength="12.2" clip-path="url(#breeze-start-airflow-line-120)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2948" textLength="256.2" clip-path="url(#breeze-start-airflow-line-120)">--forward-credentials</text><text class="breeze-start-airflow-r6" x="305" y="2948" textLength="24.4" clip-path="url(#breeze-start-airflow-line-120)">-f</text><text class="breeze-start-airflow-r1" x="353.8" y="2948" textLength="634.4" clip-path="url(#breeze-start-airflow-line-120)">Forward&#160;local&#160;credentials&#160;to&#160;container&#160;when&#160;running.</text><text class="breeze-start-airflow-r5" x="1451.8" y="2948" textLength="12.2" clip-path="url(#breeze-start-airflow-line-120)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2948" textLength="12.2" clip-path="url(#breeze-start-airflow-line-120)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2972.4" textLength="1464" clip-path="url(#breeze-start-airflow-line-121)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="2972.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-121)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2996.8" textLength="24.4" clip-path="url(#breeze-start-airflow-line-122)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="2996.8" textLength="195.2" clip-path="url(#breeze-start-airflow-line-122)">&#160;Common&#160;options&#160;</text><text class="breeze-start-airflow-r5" x="219.6" y="2996.8" textLength="1220" clip-path="url(#breeze-start-airflow-line-122)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="2996.8" textLength="24.4" clip-path="url(#breeze-start-airflow-line-122)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="2996.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-122)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3021.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-123)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3021.2" textLength="97.6" clip-path="url(#breeze-start-airflow-line-123)">--answer</text><text class="breeze-start-airflow-r6" x="158.6" y="3021.2" textLength="24.4" clip-path="url(#breeze-start-airflow-line-123)">-a</text><text class="breeze-start-airflow-r1" x="207.4" y="3021.2" textLength="317.2" clip-path="url(#breeze-start-airflow-line-123)">Force&#160;answer&#160;to&#160;questions.</text><text class="breeze-start-airflow-r7" x="536.8" y="3021.2" textLength="353.8" clip-path="url(#breeze-start-airflow-line-123)">(y&#160;|&#160;n&#160;|&#160;q&#160;|&#160;yes&#160;|&#160;no&#160;|&#160;quit)</text><text class="breeze-start-airflow-r5" x="1451.8" y="3021.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-123)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3021.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-123)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3045.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-124)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3045.6" textLength="109.8" clip-path="url(#breeze-start-airflow-line-124)">--dry-run</text><text class="breeze-start-airflow-r6" x="158.6" y="3045.6" textLength="24.4" clip-path="url(#breeze-start-airflow-line-124)">-D</text><text class="breeze-start-airflow-r1" x="207.4" y="3045.6" textLength="719.8" clip-path="url(#breeze-start-airflow-line-124)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-start-airflow-r5" x="1451.8" y="3045.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-124)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3045.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-124)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3070" textLength="12.2" clip-path="url(#breeze-start-airflow-line-125)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3070" textLength="109.8" clip-path="url(#breeze-start-airflow-line-125)">--verbose</text><text class="breeze-start-airflow-r6" x="158.6" y="3070" textLength="24.4" clip-path="url(#breeze-start-airflow-line-125)">-v</text><text class="breeze-start-airflow-r1" x="207.4" y="3070" textLength="585.6" clip-path="url(#breeze-start-airflow-line-125)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-start-airflow-r5" x="1451.8" y="3070" textLength="12.2" clip-path="url(#breeze-start-airflow-line-125)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3070" textLength="12.2" clip-path="url(#breeze-start-airflow-line-125)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3094.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-126)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3094.4" textLength="73.2" clip-path="url(#breeze-start-airflow-line-126)">--help</text><text class="breeze-start-airflow-r6" x="158.6" y="3094.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-126)">-h</text><text class="breeze-start-airflow-r1" x="207.4" y="3094.4" textLength="329.4" clip-path="url(#breeze-start-airflow-line-126)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-start-airflow-r5" x="1451.8" y="3094.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-126)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3094.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-126)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3118.8" textLength="1464" clip-path="url(#breeze-start-airflow-line-127)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="3118.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-127)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2240.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-91)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2240.4" textLength="341.6" clip-path="url(#breeze-start-airflow-line-91)">--clean-airflow-installation</text><text class="breeze-start-airflow-r1" x="475.8" y="2240.4" textLength="963.8" clip-path="url(#breeze-start-airflow-line-91)">Clean&#160;the&#160;airflow&#160;installation&#160;before&#160;installing&#160;version&#160;specified&#160;by&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2240.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-91)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2240.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-91)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2264.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-92)">│</text><text class="breeze-start-airflow-r4" x="475.8" y="2264.8" textLength="256.2" clip-path="url(#breeze-start-airflow-line-92)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="732" y="2264.8" textLength="707.6" clip-path="url(#breeze-start-airflow-line-92)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2264.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-92)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2264.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-92)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2289.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-93)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2289.2" textLength="341.6" clip-path="url(#breeze-start-airflow-line-93)">--install-selected-providers</text><text class="breeze-start-airflow-r1" x="475.8" y="2289.2" textLength="963.8" clip-path="url(#breeze-start-airflow-line-93)">Comma-separated&#160;list&#160;of&#160;providers&#160;selected&#160;to&#160;be&#160;installed&#160;(implies&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2289.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-93)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2289.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-93)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2313.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-94)">│</text><text class="breeze-start-airflow-r4" x="475.8" y="2313.6" textLength="353.8" clip-path="url(#breeze-start-airflow-line-94)">--use-distributions-from-dist</text><text class="breeze-start-airflow-r1" x="829.6" y="2313.6" textLength="610" clip-path="url(#breeze-start-airflow-line-94)">).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2313.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-94)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2313.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-94)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2338" textLength="12.2" clip-path="url(#breeze-start-airflow-line-95)">│</text><text class="breeze-start-airflow-r7" x="475.8" y="2338" textLength="963.8" clip-path="url(#breeze-start-airflow-line-95)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2338" textLength="12.2" clip-path="url(#breeze-start-airflow-line-95)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2338" textLength="12.2" clip-path="url(#breeze-start-airflow-line-95)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2362.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-96)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2362.4" textLength="256.2" clip-path="url(#breeze-start-airflow-line-96)">--distribution-format</text><text class="breeze-start-airflow-r1" x="475.8" y="2362.4" textLength="658.8" clip-path="url(#breeze-start-airflow-line-96)">Format&#160;of&#160;packages&#160;that&#160;should&#160;be&#160;installed&#160;from&#160;dist.</text><text class="breeze-start-airflow-r7" x="1146.8" y="2362.4" textLength="183" clip-path="url(#breeze-start-airflow-line-96)">(wheel&#160;|&#160;sdist)</text><text class="breeze-start-airflow-r5" x="1451.8" y="2362.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-96)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2362.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-96)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2386.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-97)">│</text><text class="breeze-start-airflow-r5" x="475.8" y="2386.8" textLength="658.8" clip-path="url(#breeze-start-airflow-line-97)">[default:&#160;wheel]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2386.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-97)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2386.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-97)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2411.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-98)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2411.2" textLength="390.4" clip-path="url(#breeze-start-airflow-line-98)">--providers-constraints-location</text><text class="breeze-start-airflow-r1" x="475.8" y="2411.2" textLength="927.2" clip-path="url(#breeze-start-airflow-line-98)">Location&#160;of&#160;providers&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;local&#160;context&#160;file).</text><text class="breeze-start-airflow-r5" x="1451.8" y="2411.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-98)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2411.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-98)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2435.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-99)">│</text><text class="breeze-start-airflow-r7" x="475.8" y="2435.6" textLength="927.2" clip-path="url(#breeze-start-airflow-line-99)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2435.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-99)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2435.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-99)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2460" textLength="12.2" clip-path="url(#breeze-start-airflow-line-100)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2460" textLength="341.6" clip-path="url(#breeze-start-airflow-line-100)">--providers-constraints-mode</text><text class="breeze-start-airflow-r1" x="475.8" y="2460" textLength="866.2" clip-path="url(#breeze-start-airflow-line-100)">Mode&#160;of&#160;constraints&#160;for&#160;Providers&#160;for&#160;CI&#160;image&#160;building.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2460" textLength="12.2" clip-path="url(#breeze-start-airflow-line-100)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2460" textLength="12.2" clip-path="url(#breeze-start-airflow-line-100)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2484.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-101)">│</text><text class="breeze-start-airflow-r7" x="475.8" y="2484.4" textLength="866.2" clip-path="url(#breeze-start-airflow-line-101)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;constraints-no-providers)</text><text class="breeze-start-airflow-r5" x="1451.8" y="2484.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-101)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2484.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-101)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2508.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-102)">│</text><text class="breeze-start-airflow-r5" x="475.8" y="2508.8" textLength="866.2" clip-path="url(#breeze-start-airflow-line-102)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2508.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-102)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2508.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-102)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2533.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-103)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2533.2" textLength="402.6" clip-path="url(#breeze-start-airflow-line-103)">--providers-constraints-reference</text><text class="breeze-start-airflow-r1" x="475.8" y="2533.2" textLength="963.8" clip-path="url(#breeze-start-airflow-line-103)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;providers&#160;installation&#160;(used&#160;in&#160;calculated&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2533.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-103)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2533.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-103)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2557.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-104)">│</text><text class="breeze-start-airflow-r1" x="475.8" y="2557.6" textLength="963.8" clip-path="url(#breeze-start-airflow-line-104)">constraints&#160;URL).&#160;Can&#160;be&#160;&#x27;default&#x27;&#160;in&#160;which&#160;case&#160;the&#160;default&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2557.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-104)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2557.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-104)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2582" textLength="12.2" clip-path="url(#breeze-start-airflow-line-105)">│</text><text class="breeze-start-airflow-r1" x="475.8" y="2582" textLength="963.8" clip-path="url(#breeze-start-airflow-line-105)">constraints-reference&#160;is&#160;used.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2582" textLength="12.2" clip-path="url(#breeze-start-airflow-line-105)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2582" textLength="12.2" clip-path="url(#breeze-start-airflow-line-105)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2606.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-106)">│</text><text class="breeze-start-airflow-r7" x="475.8" y="2606.4" textLength="963.8" clip-path="url(#breeze-start-airflow-line-106)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2606.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-106)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2606.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-106)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2630.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-107)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2630.8" textLength="341.6" clip-path="url(#breeze-start-airflow-line-107)">--providers-skip-constraints</text><text class="breeze-start-airflow-r1" x="475.8" y="2630.8" textLength="597.8" clip-path="url(#breeze-start-airflow-line-107)">Do&#160;not&#160;use&#160;constraints&#160;when&#160;installing&#160;providers.</text><text class="breeze-start-airflow-r5" x="1451.8" y="2630.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-107)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2630.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-107)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2655.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-108)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2655.2" textLength="256.2" clip-path="url(#breeze-start-airflow-line-108)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="475.8" y="2655.2" textLength="963.8" clip-path="url(#breeze-start-airflow-line-108)">Use&#160;(reinstall&#160;at&#160;entry)&#160;Airflow&#160;version&#160;from&#160;PyPI.&#160;It&#160;can&#160;also&#160;be&#160;version&#160;(to&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2655.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-108)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2655.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-108)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2679.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-109)">│</text><text class="breeze-start-airflow-r1" x="475.8" y="2679.6" textLength="963.8" clip-path="url(#breeze-start-airflow-line-109)">install&#160;from&#160;PyPI),&#160;`none`,&#160;`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder,&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2679.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-109)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2679.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-109)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2704" textLength="12.2" clip-path="url(#breeze-start-airflow-line-110)">│</text><text class="breeze-start-airflow-r1" x="475.8" y="2704" textLength="963.8" clip-path="url(#breeze-start-airflow-line-110)">or&#160;VCS&#160;URL&#160;to&#160;install&#160;from&#160;(https://pip.pypa.io/en/stable/topics/vcs-support/).</text><text class="breeze-start-airflow-r5" x="1451.8" y="2704" textLength="12.2" clip-path="url(#breeze-start-airflow-line-110)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2704" textLength="12.2" clip-path="url(#breeze-start-airflow-line-110)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2728.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-111)">│</text><text class="breeze-start-airflow-r1" x="475.8" y="2728.4" textLength="97.6" clip-path="url(#breeze-start-airflow-line-111)">Implies&#160;</text><text class="breeze-start-airflow-r4" x="573.4" y="2728.4" textLength="183" clip-path="url(#breeze-start-airflow-line-111)">--mount-sources</text><text class="breeze-start-airflow-r1" x="756.4" y="2728.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-111)">&#160;`remove`.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2728.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-111)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2728.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-111)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2752.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-112)">│</text><text class="breeze-start-airflow-r7" x="475.8" y="2752.8" textLength="963.8" clip-path="url(#breeze-start-airflow-line-112)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2752.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-112)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2752.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-112)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2777.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-113)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2777.2" textLength="244" clip-path="url(#breeze-start-airflow-line-113)">--allow-pre-releases</text><text class="breeze-start-airflow-r1" x="475.8" y="2777.2" textLength="963.8" clip-path="url(#breeze-start-airflow-line-113)">Allow&#160;pre-releases&#160;of&#160;Airflow,&#160;task-sdk&#160;and&#160;providers&#160;to&#160;be&#160;installed.&#160;Set&#160;to&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2777.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-113)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2777.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-113)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2801.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-114)">│</text><text class="breeze-start-airflow-r1" x="475.8" y="2801.6" textLength="427" clip-path="url(#breeze-start-airflow-line-114)">true&#160;automatically&#160;for&#160;pre-release&#160;</text><text class="breeze-start-airflow-r4" x="902.8" y="2801.6" textLength="256.2" clip-path="url(#breeze-start-airflow-line-114)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="1159" y="2801.6" textLength="280.6" clip-path="url(#breeze-start-airflow-line-114)">)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2801.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-114)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2801.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-114)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2826" textLength="12.2" clip-path="url(#breeze-start-airflow-line-115)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2826" textLength="353.8" clip-path="url(#breeze-start-airflow-line-115)">--use-distributions-from-dist</text><text class="breeze-start-airflow-r1" x="475.8" y="2826" textLength="402.6" clip-path="url(#breeze-start-airflow-line-115)">Install&#160;all&#160;found&#160;distributions&#160;(</text><text class="breeze-start-airflow-r4" x="878.4" y="2826" textLength="256.2" clip-path="url(#breeze-start-airflow-line-115)">--distribution-format</text><text class="breeze-start-airflow-r1" x="1134.6" y="2826" textLength="305" clip-path="url(#breeze-start-airflow-line-115)">&#160;determines&#160;type)&#160;from&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2826" textLength="12.2" clip-path="url(#breeze-start-airflow-line-115)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2826" textLength="12.2" clip-path="url(#breeze-start-airflow-line-115)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2850.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-116)">│</text><text class="breeze-start-airflow-r1" x="475.8" y="2850.4" textLength="963.8" clip-path="url(#breeze-start-airflow-line-116)">&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2850.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-116)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2850.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-116)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2874.8" textLength="1464" clip-path="url(#breeze-start-airflow-line-117)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="2874.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-117)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2899.2" textLength="24.4" clip-path="url(#breeze-start-airflow-line-118)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="2899.2" textLength="183" clip-path="url(#breeze-start-airflow-line-118)">&#160;Other&#160;options&#160;</text><text class="breeze-start-airflow-r5" x="207.4" y="2899.2" textLength="1232.2" clip-path="url(#breeze-start-airflow-line-118)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="2899.2" textLength="24.4" clip-path="url(#breeze-start-airflow-line-118)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="2899.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-118)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2923.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-119)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2923.6" textLength="256.2" clip-path="url(#breeze-start-airflow-line-119)">--forward-credentials</text><text class="breeze-start-airflow-r6" x="305" y="2923.6" textLength="24.4" clip-path="url(#breeze-start-airflow-line-119)">-f</text><text class="breeze-start-airflow-r1" x="353.8" y="2923.6" textLength="634.4" clip-path="url(#breeze-start-airflow-line-119)">Forward&#160;local&#160;credentials&#160;to&#160;container&#160;when&#160;running.</text><text class="breeze-start-airflow-r5" x="1451.8" y="2923.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-119)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2923.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-119)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2948" textLength="1464" clip-path="url(#breeze-start-airflow-line-120)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="2948" textLength="12.2" clip-path="url(#breeze-start-airflow-line-120)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2972.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-121)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="2972.4" textLength="195.2" clip-path="url(#breeze-start-airflow-line-121)">&#160;Common&#160;options&#160;</text><text class="breeze-start-airflow-r5" x="219.6" y="2972.4" textLength="1220" clip-path="url(#breeze-start-airflow-line-121)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="2972.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-121)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="2972.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-121)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2996.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-122)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2996.8" textLength="97.6" clip-path="url(#breeze-start-airflow-line-122)">--answer</text><text class="breeze-start-airflow-r6" x="719.8" y="2996.8" textLength="24.4" clip-path="url(#breeze-start-airflow-line-122)">-a</text><text class="breeze-start-airflow-r1" x="768.6" y="2996.8" textLength="353.8" clip-path="url(#breeze-start-airflow-line-122)">Force&#160;answer&#160;to&#160;questions.&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2996.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-122)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2996.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-122)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3021.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-123)">│</text><text class="breeze-start-airflow-r7" x="768.6" y="3021.2" textLength="353.8" clip-path="url(#breeze-start-airflow-line-123)">(y&#160;|&#160;n&#160;|&#160;q&#160;|&#160;yes&#160;|&#160;no&#160;|&#160;quit)</text><text class="breeze-start-airflow-r5" x="1451.8" y="3021.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-123)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3021.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-123)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3045.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-124)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3045.6" textLength="109.8" clip-path="url(#breeze-start-airflow-line-124)">--dry-run</text><text class="breeze-start-airflow-r6" x="719.8" y="3045.6" textLength="24.4" clip-path="url(#breeze-start-airflow-line-124)">-D</text><text class="breeze-start-airflow-r1" x="768.6" y="3045.6" textLength="671" clip-path="url(#breeze-start-airflow-line-124)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3045.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-124)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3045.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-124)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3070" textLength="12.2" clip-path="url(#breeze-start-airflow-line-125)">│</text><text class="breeze-start-airflow-r1" x="768.6" y="3070" textLength="671" clip-path="url(#breeze-start-airflow-line-125)">executed.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3070" textLength="12.2" clip-path="url(#breeze-start-airflow-line-125)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3070" textLength="12.2" clip-path="url(#breeze-start-airflow-line-125)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3094.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-126)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3094.4" textLength="414.8" clip-path="url(#breeze-start-airflow-line-126)">--install-airflow-with-constraints</text><text class="breeze-start-airflow-r1" x="439.2" y="3094.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-126)">/</text><text class="breeze-start-airflow-r4" x="451.4" y="3094.4" textLength="244" clip-path="url(#breeze-start-airflow-line-126)">--no-install-airflow</text><text class="breeze-start-airflow-r1" x="768.6" y="3094.4" textLength="671" clip-path="url(#breeze-start-airflow-line-126)">Install&#160;airflow&#160;in&#160;a&#160;separate&#160;step,&#160;with&#160;constraints&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3094.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-126)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3094.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-126)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3118.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-127)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3118.8" textLength="207.4" clip-path="url(#breeze-start-airflow-line-127)">-with-constraints</text><text class="breeze-start-airflow-r1" x="768.6" y="3118.8" textLength="671" clip-path="url(#breeze-start-airflow-line-127)">determined&#160;from&#160;package&#160;or&#160;airflow&#160;version.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3118.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-127)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3118.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-127)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3143.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-128)">│</text><text class="breeze-start-airflow-r5" x="768.6" y="3143.2" textLength="671" clip-path="url(#breeze-start-airflow-line-128)">[default:&#160;install-airflow-with-constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3143.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-128)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3143.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-128)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3167.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-129)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3167.6" textLength="109.8" clip-path="url(#breeze-start-airflow-line-129)">--verbose</text><text class="breeze-start-airflow-r6" x="719.8" y="3167.6" textLength="24.4" clip-path="url(#breeze-start-airflow-line-129)">-v</text><text class="breeze-start-airflow-r1" x="768.6" y="3167.6" textLength="585.6" clip-path="url(#breeze-start-airflow-line-129)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-start-airflow-r5" x="1451.8" y="3167.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-129)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3167.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-129)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3192" textLength="12.2" clip-path="url(#breeze-start-airflow-line-130)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3192" textLength="73.2" clip-path="url(#breeze-start-airflow-line-130)">--help</text><text class="breeze-start-airflow-r6" x="719.8" y="3192" textLength="24.4" clip-path="url(#breeze-start-airflow-line-130)">-h</text><text class="breeze-start-airflow-r1" x="768.6" y="3192" textLength="329.4" clip-path="url(#breeze-start-airflow-line-130)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-start-airflow-r5" x="1451.8" y="3192" textLength="12.2" clip-path="url(#breeze-start-airflow-line-130)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3192" textLength="12.2" clip-path="url(#breeze-start-airflow-line-130)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3216.4" textLength="1464" clip-path="url(#breeze-start-airflow-line-131)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="3216.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-131)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_start-airflow.txt b/dev/breeze/doc/images/output_start-airflow.txt
index 8cabb42e921bd..bd5fbeafe8e04 100644
--- a/dev/breeze/doc/images/output_start-airflow.txt
+++ b/dev/breeze/doc/images/output_start-airflow.txt
@@ -1 +1 @@
-a99b51b3e51bd9e82e88d4944279dcd9
+055a450825e9a8ff29477615629cffc2
diff --git a/dev/breeze/src/airflow_breeze/commands/common_options.py b/dev/breeze/src/airflow_breeze/commands/common_options.py
index 9f8655f606535..a0ebdd694f6d3 100644
--- a/dev/breeze/src/airflow_breeze/commands/common_options.py
+++ b/dev/breeze/src/airflow_breeze/commands/common_options.py
@@ -443,6 +443,22 @@ def _set_default_from_parent(ctx: click.core.Context, option: click.core.Option,
     type=VerboseOption(),
     callback=_set_default_from_parent,
 )
+option_install_airflow_with_constraints = click.option(
+    "--install-airflow-with-constraints/--no-install-airflow-with-constraints",
+    is_flag=True,
+    default=False,
+    show_default=True,
+    envvar="INSTALL_AIRFLOW_WITH_CONSTRAINTS",
+    help="Install airflow in a separate step, with constraints determined from package or airflow version.",
+)
+option_install_airflow_with_constraints_default_true = click.option(
+    "--install-airflow-with-constraints/--no-install-airflow-with-constraints",
+    is_flag=True,
+    default=True,
+    show_default=True,
+    envvar="INSTALL_AIRFLOW_WITH_CONSTRAINTS",
+    help="Install airflow in a separate step, with constraints determined from package or airflow version.",
+)
 
 
 def _is_number_greater_than_expected(value: str) -> bool:
diff --git a/dev/breeze/src/airflow_breeze/commands/common_package_installation_options.py b/dev/breeze/src/airflow_breeze/commands/common_package_installation_options.py
index 700045a10af5c..d271d7918af24 100644
--- a/dev/breeze/src/airflow_breeze/commands/common_package_installation_options.py
+++ b/dev/breeze/src/airflow_breeze/commands/common_package_installation_options.py
@@ -55,20 +55,6 @@
     show_default=True,
     help="Mode of constraints for Airflow for CI image building.",
 )
-option_airflow_skip_constraints = click.option(
-    "--airflow-skip-constraints",
-    is_flag=True,
-    help="Do not use constraints when installing airflow.",
-    envvar="AIRFLOW_SKIP_CONSTRAINTS",
-)
-option_install_airflow_with_constraints = click.option(
-    "--install-airflow-with-constraints/--no-install-airflow-with-constraints",
-    is_flag=True,
-    default=False,
-    show_default=True,
-    envvar="INSTALL_AIRFLOW_WITH_CONSTRAINTS",
-    help="Install airflow in a separate step, with constraints determined from package or airflow version.",
-)
 option_install_selected_providers = click.option(
     "--install-selected-providers",
     help="Comma-separated list of providers selected to be installed (implies --use-distributions-from-dist).",
diff --git a/dev/breeze/src/airflow_breeze/commands/developer_commands.py b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
index b8f85f6a23d0c..e4f032108fd10 100644
--- a/dev/breeze/src/airflow_breeze/commands/developer_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
@@ -51,6 +51,7 @@
     option_github_repository,
     option_include_not_ready_providers,
     option_include_removed_providers,
+    option_install_airflow_with_constraints_default_true,
     option_installation_distribution_format,
     option_keep_env_variables,
     option_max_time,
@@ -74,7 +75,6 @@
     option_airflow_constraints_location,
     option_airflow_constraints_mode_ci,
     option_airflow_constraints_reference,
-    option_airflow_skip_constraints,
     option_install_selected_providers,
     option_providers_constraints_location,
     option_providers_constraints_mode_ci,
@@ -220,16 +220,6 @@ def run(self):
     is_flag=True,
     envvar="WARN_IMAGE_UPGRADE_NEEDED",
 )
-
-option_install_airflow_with_constraints_default_true = click.option(
-    "--install-airflow-with-constraints/--no-install-airflow-with-constraints",
-    is_flag=True,
-    default=True,
-    show_default=True,
-    envvar="INSTALL_AIRFLOW_WITH_CONSTRAINTS",
-    help="Install airflow in a separate step, with constraints determined from package or airflow version.",
-)
-
 option_install_airflow_python_client = click.option(
     "--install-airflow-python-client",
     is_flag=True,
@@ -286,7 +276,6 @@ def run(self):
 @option_airflow_constraints_mode_ci
 @option_airflow_constraints_reference
 @option_airflow_extras
-@option_airflow_skip_constraints
 @option_answer
 @option_backend
 @option_builder
@@ -344,7 +333,6 @@ def shell(
     airflow_constraints_mode: str,
     airflow_constraints_reference: str,
     airflow_extras: str,
-    airflow_skip_constraints: bool,
     backend: str,
     builder: str,
     celery_broker: str,
@@ -417,7 +405,6 @@ def shell(
         airflow_constraints_mode=airflow_constraints_mode,
         airflow_constraints_reference=airflow_constraints_reference,
         airflow_extras=airflow_extras,
-        airflow_skip_constraints=airflow_skip_constraints,
         allow_pre_releases=allow_pre_releases,
         backend=backend,
         builder=builder,
@@ -513,7 +500,6 @@ def shell(
 @option_airflow_constraints_mode_ci
 @option_airflow_constraints_reference
 @option_airflow_extras
-@option_airflow_skip_constraints
 @option_auth_manager_start_airflow
 @option_answer
 @option_backend
@@ -530,6 +516,7 @@ def shell(
 @option_github_repository
 @option_installation_distribution_format
 @option_install_selected_providers
+@option_install_airflow_with_constraints_default_true
 @option_all_integration
 @option_load_default_connections
 @option_load_example_dags
@@ -556,7 +543,7 @@ def start_airflow(
     airflow_constraints_location: str,
     airflow_constraints_reference: str,
     airflow_extras: str,
-    airflow_skip_constraints: bool,
+    install_airflow_with_constraints: bool,
     allow_pre_releases: bool,
     auth_manager: str,
     backend: str,
@@ -627,7 +614,6 @@ def start_airflow(
         airflow_constraints_mode=airflow_constraints_mode,
         airflow_constraints_reference=airflow_constraints_reference,
         airflow_extras=airflow_extras,
-        airflow_skip_constraints=airflow_skip_constraints,
         allow_pre_releases=allow_pre_releases,
         auth_manager=auth_manager,
         backend=backend,
@@ -645,7 +631,7 @@ def start_airflow(
         github_repository=github_repository,
         integration=integration,
         install_selected_providers=install_selected_providers,
-        install_airflow_with_constraints=True,
+        install_airflow_with_constraints=install_airflow_with_constraints,
         load_default_connections=load_default_connections,
         load_example_dags=load_example_dags,
         mount_sources=mount_sources,
diff --git a/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py b/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py
index fb3e43f51036f..bb5e449d03837 100644
--- a/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py
@@ -147,7 +147,6 @@
                 "--airflow-constraints-mode",
                 "--airflow-constraints-reference",
                 "--airflow-extras",
-                "--airflow-skip-constraints",
                 "--clean-airflow-installation",
                 "--force-lowest-dependencies",
                 "--test-type",
@@ -273,8 +272,8 @@
                 "--airflow-constraints-mode",
                 "--airflow-constraints-reference",
                 "--airflow-extras",
-                "--airflow-skip-constraints",
                 "--clean-airflow-installation",
+                "--install-airflow-with-constraints",
                 "--install-selected-providers",
                 "--distribution-format",
                 "--providers-constraints-location",
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index 47830d1cbcad1..603ec7a59ff82 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -60,6 +60,8 @@
     option_include_not_ready_providers,
     option_include_removed_providers,
     option_include_success_outputs,
+    option_install_airflow_with_constraints,
+    option_install_airflow_with_constraints_default_true,
     option_installation_distribution_format,
     option_mount_sources,
     option_parallelism,
@@ -78,8 +80,6 @@
     option_airflow_constraints_mode_ci,
     option_airflow_constraints_mode_update,
     option_airflow_constraints_reference,
-    option_airflow_skip_constraints,
-    option_install_airflow_with_constraints,
     option_install_selected_providers,
     option_providers_constraints_location,
     option_providers_constraints_mode_ci,
@@ -1442,11 +1442,11 @@ def _run_command_for_providers(
 @option_airflow_constraints_location
 @option_airflow_constraints_reference
 @option_airflow_extras
-@option_airflow_skip_constraints
 @option_clean_airflow_installation
 @option_debug_resources
 @option_dry_run
 @option_github_repository
+@option_install_airflow_with_constraints_default_true
 @option_include_success_outputs
 @option_install_selected_providers
 @option_installation_distribution_format
@@ -1467,7 +1467,7 @@ def install_provider_distributions(
     airflow_constraints_location: str,
     airflow_constraints_mode: str,
     airflow_constraints_reference: str,
-    airflow_skip_constraints: bool,
+    install_airflow_with_constraints: bool,
     airflow_extras: str,
     allow_pre_releases: bool,
     clean_airflow_installation: bool,
@@ -1496,7 +1496,7 @@ def install_provider_distributions(
         airflow_constraints_mode=airflow_constraints_mode,
         airflow_constraints_reference=airflow_constraints_reference,
         airflow_extras=airflow_extras,
-        airflow_skip_constraints=airflow_skip_constraints,
+        install_airflow_with_constraints=install_airflow_with_constraints,
         allow_pre_releases=allow_pre_releases,
         # We just want to install the providers by entrypoint
         # we do not need to run any command in the container
@@ -1594,7 +1594,6 @@ def install_provider_distributions(
 @option_airflow_constraints_location
 @option_airflow_constraints_reference
 @option_airflow_extras
-@option_airflow_skip_constraints
 @option_clean_airflow_installation
 @option_dry_run
 @option_github_repository
@@ -1627,7 +1626,6 @@ def verify_provider_distributions(
     providers_constraints_reference: str,
     providers_skip_constraints: bool,
     python: str,
-    airflow_skip_constraints: bool,
     use_airflow_version: str | None,
     allow_pre_releases: bool,
     use_distributions_from_dist: bool,
@@ -1643,7 +1641,6 @@ def verify_provider_distributions(
         airflow_constraints_mode=airflow_constraints_mode,
         airflow_constraints_reference=airflow_constraints_reference,
         airflow_extras=airflow_extras,
-        airflow_skip_constraints=airflow_skip_constraints,
         allow_pre_releases=allow_pre_releases,
         clean_airflow_installation=clean_airflow_installation,
         github_repository=github_repository,
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
index d27c61835f3fd..5f0d86d5fbbae 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
@@ -166,7 +166,6 @@
                 "--airflow-constraints-mode",
                 "--airflow-constraints-reference",
                 "--airflow-extras",
-                "--airflow-skip-constraints",
                 "--clean-airflow-installation",
                 "--install-airflow-with-constraints",
                 "--install-selected-providers",
@@ -197,8 +196,8 @@
                 "--airflow-constraints-mode",
                 "--airflow-constraints-reference",
                 "--airflow-extras",
-                "--airflow-skip-constraints",
                 "--clean-airflow-installation",
+                "--install-airflow-with-constraints",
                 "--install-selected-providers",
                 "--distribution-format",
                 "--providers-constraints-location",
diff --git a/dev/breeze/src/airflow_breeze/commands/testing_commands.py b/dev/breeze/src/airflow_breeze/commands/testing_commands.py
index 7ce1022569824..7f88b8bffaf44 100644
--- a/dev/breeze/src/airflow_breeze/commands/testing_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/testing_commands.py
@@ -43,6 +43,7 @@
     option_github_repository,
     option_image_name,
     option_include_success_outputs,
+    option_install_airflow_with_constraints,
     option_keep_env_variables,
     option_mount_sources,
     option_mysql_version,
@@ -61,7 +62,6 @@
 )
 from airflow_breeze.commands.common_package_installation_options import (
     option_airflow_constraints_reference,
-    option_install_airflow_with_constraints,
     option_providers_constraints_location,
     option_providers_skip_constraints,
     option_use_distributions_from_dist,
diff --git a/dev/breeze/src/airflow_breeze/params/shell_params.py b/dev/breeze/src/airflow_breeze/params/shell_params.py
index 8abb7181560a7..628001fd111e6 100644
--- a/dev/breeze/src/airflow_breeze/params/shell_params.py
+++ b/dev/breeze/src/airflow_breeze/params/shell_params.py
@@ -140,7 +140,6 @@ class ShellParams:
     airflow_constraints_mode: str = ALLOWED_CONSTRAINTS_MODES_CI[0]
     airflow_constraints_reference: str = ""
     airflow_extras: str = ""
-    airflow_skip_constraints: bool = False
     allow_pre_releases: bool = False
     auth_manager: str = ALLOWED_AUTH_MANAGERS[0]
     backend: str = ALLOWED_BACKENDS[0]
@@ -525,7 +524,6 @@ def env_variables_for_docker_commands(self) -> dict[str, str]:
         _set_var(_env, "AIRFLOW_CONSTRAINTS_REFERENCE", self.airflow_constraints_reference)
         _set_var(_env, "AIRFLOW_ENV", "development")
         _set_var(_env, "AIRFLOW_EXTRAS", self.airflow_extras)
-        _set_var(_env, "AIRFLOW_SKIP_CONSTRAINTS", self.airflow_skip_constraints)
         _set_var(_env, "AIRFLOW_IMAGE_KUBERNETES", self.airflow_image_kubernetes)
         _set_var(_env, "AIRFLOW_VERSION", self.airflow_version)
         _set_var(_env, "AIRFLOW__API_AUTH__JWT_SECRET", b64encode(os.urandom(16)).decode("utf-8"))
diff --git a/scripts/ci/docker-compose/devcontainer.env b/scripts/ci/docker-compose/devcontainer.env
index 03e301fdeb458..8f7ae95aba554 100644
--- a/scripts/ci/docker-compose/devcontainer.env
+++ b/scripts/ci/docker-compose/devcontainer.env
@@ -45,6 +45,7 @@ HOST_GROUP_ID=
 HOST_OS="linux"
 INIT_SCRIPT_FILE="init.sh"
 INSTALL_AIRFLOW_VERSION=
+INSTALL_AIRFLOW_WITH_CONSTRAINTS=
 AIRFLOW_CONSTRAINTS_MODE=
 INSTALL_SELECTED_PROVIDERS=
 USE_AIRFLOW_VERSION=
@@ -60,7 +61,6 @@ POSTGRES_VERSION=10
 PYTHONDONTWRITEBYTECODE="true"
 REMOVE_ARM_PACKAGES="false"
 RUN_TESTS="false"
-AIRFLOW_SKIP_CONSTRAINTS="false"
 SKIP_SSH_SETUP="true"
 SKIP_ENVIRONMENT_INITIALIZATION="false"
 START_AIRFLOW="false"
diff --git a/scripts/in_container/install_airflow_and_providers.py b/scripts/in_container/install_airflow_and_providers.py
index 787fc9c6f80e4..05a437178b9c3 100755
--- a/scripts/in_container/install_airflow_and_providers.py
+++ b/scripts/in_container/install_airflow_and_providers.py
@@ -135,10 +135,10 @@ def get_airflow_constraints_location(
     airflow_package_version: str | None,
     github_repository: str,
     python_version: str,
-    airflow_skip_constraints: bool,
+    install_airflow_with_constraints: bool,
 ) -> str | None:
     """For Airflow we determine constraints in this order of preference:
-    * AIRFLOW_SKIP_CONSTRAINTS=true - no constraints
+    * INSTALL_AIRFLOW_WITH_CONSTRAINTS=false - no constraints
     * AIRFLOW_CONSTRAINTS_LOCATION -  constraints from this location (url)
     * AIRFLOW_CONSTRAINTS_REFERENCE + constraints mode if specified
     * if we know airflow version "constraints-VERSION" + constraints mode
@@ -146,7 +146,7 @@ def get_airflow_constraints_location(
     * constraints-main + constraints mode - as fallback
     """
     console.print("[bright_blue]Determining airflow constraints location")
-    if airflow_skip_constraints:
+    if not install_airflow_with_constraints:
         console.print("[bright_blue]Skipping airflow constraints.")
         return None
     if airflow_constraints_location:
@@ -213,7 +213,6 @@ class InstallationSpec(NamedTuple):
     airflow_core_distribution: str | None
     airflow_constraints_location: str | None
     airflow_task_sdk_distribution: str | None
-    airflow_task_sdk_constraints_location: str | None
     airflow_ctl_distribution: str | None
     airflow_ctl_constraints_location: str | None
     provider_distributions: list[str]
@@ -229,7 +228,7 @@ def find_installation_spec(
     airflow_constraints_location: str | None,
     airflow_constraints_reference: str,
     airflow_extras: str,
-    airflow_skip_constraints: bool,
+    install_airflow_with_constraints: bool,
     default_constraints_branch: str,
     github_repository: str,
     install_selected_providers: str,
@@ -283,7 +282,7 @@ def find_installation_spec(
             if airflow_version:
                 console.print(f"[bright_blue]Using airflow version retrieved from package: {airflow_version}")
                 airflow_constraints_location = get_airflow_constraints_location(
-                    airflow_skip_constraints=airflow_skip_constraints,
+                    install_airflow_with_constraints=install_airflow_with_constraints,
                     airflow_constraints_mode=airflow_constraints_mode,
                     airflow_constraints_location=airflow_constraints_location,
                     airflow_constraints_reference=airflow_constraints_reference,
@@ -296,26 +295,13 @@ def find_installation_spec(
                 airflow_distribution_spec += airflow_extras
         # We always install latest task-sdk - it's independent from Airflow
         airflow_task_sdk_spec = find_airflow_task_sdk_package(extension)
-        if airflow_task_sdk_spec:
-            airflow_task_sdk_constraints_location = get_airflow_constraints_location(
-                airflow_skip_constraints=airflow_skip_constraints,
-                airflow_constraints_mode=airflow_constraints_mode,
-                airflow_constraints_location=airflow_constraints_location,
-                airflow_constraints_reference=airflow_constraints_reference,
-                airflow_package_version="main",
-                default_constraints_branch=default_constraints_branch,
-                github_repository=github_repository,
-                python_version=python_version,
-            )
-        else:
-            airflow_task_sdk_constraints_location = None
         airflow_task_sdk_distribution = airflow_task_sdk_spec
 
         # We always install latest ctl - it's independent of Airflow
         airflow_ctl_spec = find_airflow_ctl_sdk_package(extension=extension)
         if airflow_ctl_spec:
             airflow_ctl_constraints_location = get_airflow_constraints_location(
-                airflow_skip_constraints=airflow_skip_constraints,
+                install_airflow_with_constraints=install_airflow_with_constraints,
                 airflow_constraints_mode=airflow_constraints_mode,
                 airflow_constraints_location=airflow_constraints_location,
                 airflow_constraints_reference=airflow_constraints_reference,
@@ -333,7 +319,6 @@ def find_installation_spec(
         airflow_core_distribution_spec = None
         airflow_constraints_location = None
         airflow_task_sdk_distribution = None
-        airflow_task_sdk_constraints_location = None
         airflow_ctl_distribution = None
         airflow_ctl_constraints_location = None
     elif use_airflow_version.startswith(ALLOWED_VCS_PROTOCOLS):
@@ -345,7 +330,7 @@ def find_installation_spec(
             airflow_distribution_spec = use_airflow_version
             airflow_core_distribution_spec = use_airflow_version
         airflow_constraints_location = get_airflow_constraints_location(
-            airflow_skip_constraints=airflow_skip_constraints,
+            install_airflow_with_constraints=install_airflow_with_constraints,
             airflow_constraints_mode=airflow_constraints_mode,
             airflow_constraints_location=airflow_constraints_location,
             airflow_constraints_reference=airflow_constraints_reference,
@@ -357,7 +342,7 @@ def find_installation_spec(
         console.print(f"\nInstalling airflow task-sdk from remote spec {use_airflow_version}\n")
         airflow_task_sdk_distribution = f"apache-airflow-task-sdk @ {use_airflow_version}"
         airflow_constraints_location = get_airflow_constraints_location(
-            airflow_skip_constraints=airflow_skip_constraints,
+            install_airflow_with_constraints=install_airflow_with_constraints,
             airflow_constraints_mode=airflow_constraints_mode,
             airflow_constraints_location=airflow_constraints_location,
             airflow_constraints_reference=airflow_constraints_reference,
@@ -366,11 +351,10 @@ def find_installation_spec(
             github_repository=github_repository,
             python_version=python_version,
         )
-        airflow_task_sdk_constraints_location = None
         console.print(f"\nInstalling airflow ctl from remote spec {use_airflow_version}\n")
         airflow_ctl_distribution = f"apache-airflow-ctl @ {use_airflow_version}"
         airflow_ctl_constraints_location = get_airflow_constraints_location(
-            airflow_skip_constraints=airflow_skip_constraints,
+            install_airflow_with_constraints=install_airflow_with_constraints,
             airflow_constraints_mode=airflow_constraints_mode,
             airflow_constraints_location=airflow_constraints_location,
             airflow_constraints_reference=airflow_constraints_reference,
@@ -391,7 +375,7 @@ def find_installation_spec(
             f"apache-airflow-core=={use_airflow_version}" if not use_airflow_version.startswith("2") else None
         )
         airflow_constraints_location = get_airflow_constraints_location(
-            airflow_skip_constraints=airflow_skip_constraints,
+            install_airflow_with_constraints=install_airflow_with_constraints,
             airflow_constraints_mode=airflow_constraints_mode,
             airflow_constraints_location=airflow_constraints_location,
             airflow_constraints_reference=airflow_constraints_reference,
@@ -404,7 +388,6 @@ def find_installation_spec(
             "\nDo not install airflow task-sdk. It should be installed automatically if needed by providers."
         )
         airflow_task_sdk_distribution = None
-        airflow_task_sdk_constraints_location = None
 
         console.print(
             "\nDo not install airflow ctl. It should be installed automatically if needed by providers."
@@ -436,7 +419,6 @@ def find_installation_spec(
         airflow_core_distribution=airflow_core_distribution_spec,
         airflow_constraints_location=airflow_constraints_location,
         airflow_task_sdk_distribution=airflow_task_sdk_distribution,
-        airflow_task_sdk_constraints_location=airflow_task_sdk_constraints_location,
         airflow_ctl_distribution=airflow_ctl_distribution,
         airflow_ctl_constraints_location=airflow_ctl_constraints_location,
         provider_distributions=provider_distributions_list,
@@ -493,14 +475,6 @@ def find_installation_spec(
     envvar="AIRFLOW_EXTRAS",
     help="Airflow extras to install",
 )
-@click.option(
-    "--airflow-skip-constraints",
-    is_flag=True,
-    default=False,
-    show_default=True,
-    envvar="AIRFLOW_SKIP_CONSTRAINTS",
-    help="Skip constraints for airflow installation if set.",
-)
 @click.option(
     "--default-constraints-branch",
     required=True,
@@ -608,7 +582,6 @@ def install_airflow_and_providers(
     airflow_constraints_location: str,
     airflow_constraints_reference: str,
     airflow_extras: str,
-    airflow_skip_constraints: bool,
     default_constraints_branch: str,
     github_actions: bool,
     github_repository: str,
@@ -630,7 +603,7 @@ def install_airflow_and_providers(
         airflow_constraints_location=airflow_constraints_location,
         airflow_constraints_reference=airflow_constraints_reference,
         airflow_extras=airflow_extras,
-        airflow_skip_constraints=airflow_skip_constraints,
+        install_airflow_with_constraints=install_airflow_with_constraints,
         default_constraints_branch=default_constraints_branch,
         github_repository=github_repository,
         install_selected_providers=install_selected_providers,
@@ -643,163 +616,13 @@ def install_airflow_and_providers(
         use_airflow_version=use_airflow_version,
         use_distributions_from_dist=use_distributions_from_dist,
     )
-    if installation_spec.airflow_distribution and install_airflow_with_constraints:
-        console.print("[bright_blue]Installing airflow with constraints")
-        console.print(
-            "[bright_blue]Airflow constraints location: ", installation_spec.airflow_constraints_location
-        )
-        console.print("[bright_blue]Airflow distribution", installation_spec.airflow_distribution)
-        console.print("[bright_blue]Airflow core distribution", installation_spec.airflow_core_distribution)
-        console.print(
-            "[bright_blue]Airflow task-sdk constraints location: ",
-            installation_spec.airflow_task_sdk_constraints_location,
-        )
-        console.print(
-            "[bright_blue]Airflow task-sdk distribution", installation_spec.airflow_task_sdk_distribution
-        )
-        console.print(
-            "[bright_blue]Airflow ctl constraints location: ",
-            installation_spec.airflow_ctl_constraints_location,
-        )
-        console.print("[bright_blue]Airflow ctl distribution", installation_spec.airflow_ctl_distribution)
-        base_install_airflow_cmd = [
-            "/usr/local/bin/uv",
-            "pip",
-            "install",
-        ]
-        if installation_spec.pre_release:
-            console.print("[bright_blue]Allowing pre-release versions of airflow")
-            base_install_airflow_cmd.append("--pre")
-        base_install_airflow_cmd.append(installation_spec.airflow_distribution)
-        console.print(
-            f"\n[bright_blue]Installing airflow distribution: {installation_spec.airflow_distribution} with constraints"
-        )
-        if installation_spec.airflow_core_distribution:
-            console.print(
-                f"\n[bright_blue]Installing airflow core distribution: {installation_spec.airflow_core_distribution} with constraints"
-            )
-            base_install_airflow_cmd.append(installation_spec.airflow_core_distribution)
-        install_airflow_cmd = base_install_airflow_cmd.copy()
-        if installation_spec.airflow_constraints_location:
-            console.print(f"[bright_blue]Use constraints: {installation_spec.airflow_constraints_location}")
-            install_airflow_cmd.extend(["--constraint", installation_spec.airflow_constraints_location])
-        console.print()
-        result = run_command(install_airflow_cmd, github_actions=github_actions, check=False)
-        if result.returncode != 0:
-            console.print(
-                "[warning]Installation with constraints failed - might be because pre-installed provider"
-                " has conflicting dependencies in PyPI. Falling back to a non-constraint installation."
-            )
-            run_command(base_install_airflow_cmd, github_actions=github_actions, check=True)
-        if installation_spec.airflow_task_sdk_distribution:
-            base_install_airflow_task_sdk_cmd = base_install_airflow_cmd.copy()
-            base_install_airflow_task_sdk_cmd[-1] = installation_spec.airflow_task_sdk_distribution
-            console.print(
-                f"\n[bright_blue]Installing airflow task-sdk distribution: "
-                f"{installation_spec.airflow_task_sdk_distribution} with constraints"
-            )
-            # if airflow is also being installed we should add airflow to the base_install_providers_cmd
-            # to avoid accidentally upgrading airflow to a version that is different than installed in the
-            # previous step
-            if installation_spec.airflow_distribution:
-                base_install_airflow_task_sdk_cmd.append(installation_spec.airflow_distribution)
-            install_airflow_task_sdk_cmd = base_install_airflow_task_sdk_cmd.copy()
-            if installation_spec.airflow_task_sdk_constraints_location:
-                console.print(
-                    f"[bright_blue]Use constraints: {installation_spec.airflow_task_sdk_constraints_location}"
-                )
-                install_airflow_task_sdk_cmd.extend(
-                    ["--constraint", installation_spec.airflow_task_sdk_constraints_location]
-                )
-            console.print()
-            run_command(install_airflow_task_sdk_cmd, github_actions=github_actions, check=True)
-            if result.returncode != 0:
-                console.print(
-                    "[warning]Installation with constraints failed - might be because there are"
-                    " conflicting dependencies in PyPI. Falling back to a non-constraint installation."
-                )
-                run_command(base_install_airflow_cmd, github_actions=github_actions, check=True)
+    if install_airflow_with_constraints:
+        if installation_spec.airflow_distribution:
+            _install_only_airflow_airflow_core_task_sdk_with_constraints(installation_spec, github_actions)
         if installation_spec.airflow_ctl_distribution:
-            base_install_airflow_ctl_cmd = base_install_airflow_cmd.copy()
-            base_install_airflow_ctl_cmd[-1] = installation_spec.airflow_ctl_distribution
-            console.print(
-                f"\n[bright_blue]Installing airflow ctl distribution: "
-                f"{installation_spec.airflow_ctl_distribution} with constraints"
-            )
-            # if airflow is also being installed we should add airflow to the base_install_providers_cmd
-            # to avoid accidentally upgrading airflow to a version that is different from installed in the
-            # previous step
-            if installation_spec.airflow_distribution:
-                base_install_airflow_ctl_cmd.append(installation_spec.airflow_distribution)
-            install_airflow_ctl_cmd = base_install_airflow_ctl_cmd.copy()
-            if installation_spec.airflow_ctl_constraints_location:
-                console.print(
-                    f"[bright_blue]Use constraints: {installation_spec.airflow_ctl_constraints_location}"
-                )
-                install_airflow_ctl_cmd.extend(
-                    ["--constraint", installation_spec.airflow_ctl_constraints_location]
-                )
-            console.print()
-            run_command(install_airflow_ctl_cmd, github_actions=github_actions, check=True)
-            if result.returncode != 0:
-                console.print(
-                    "[warning]Installation with constraints failed - might be because there are"
-                    " conflicting dependencies in PyPI. Falling back to a non-constraint installation."
-                )
-                run_command(base_install_airflow_cmd, github_actions=github_actions, check=True)
+            _install_airflow_ctl_with_constraints(installation_spec, github_actions)
     if installation_spec.provider_distributions or not install_airflow_with_constraints:
-        console.print("[bright_blue]Installing airflow without constraints")
-        base_install_providers_cmd = [
-            "/usr/local/bin/uv",
-            "pip",
-            "install",
-        ]
-        if installation_spec.pre_release:
-            base_install_providers_cmd.append("--pre")
-        if not install_airflow_with_constraints and installation_spec.airflow_distribution:
-            console.print(
-                f"\n[bright_blue]Installing airflow distribution: {installation_spec.airflow_distribution} without constraints"
-            )
-            base_install_providers_cmd.append(installation_spec.airflow_distribution)
-            if installation_spec.airflow_core_distribution:
-                console.print(
-                    f"\n[bright_blue]Installing airflow core distribution: {installation_spec.airflow_core_distribution} without constraints"
-                )
-                base_install_providers_cmd.append(installation_spec.airflow_core_distribution)
-            if installation_spec.airflow_task_sdk_distribution:
-                console.print(
-                    f"\n[bright_blue]Installing task-sdk distribution: {installation_spec.airflow_task_sdk_distribution} without constraints"
-                )
-                base_install_providers_cmd.append(installation_spec.airflow_task_sdk_distribution)
-        console.print("\n[bright_blue]Installing provider distributions without constraints:")
-        for provider_package in sorted(installation_spec.provider_distributions):
-            console.print(f"  {provider_package}")
-        console.print()
-        for provider_package in installation_spec.provider_distributions:
-            base_install_providers_cmd.append(provider_package)
-        install_providers_command = base_install_providers_cmd.copy()
-        # if airflow is also being installed we should add airflow to the base_install_providers_cmd
-        # to avoid accidentally upgrading airflow to a version that is different than installed in the
-        # previous step
-        if installation_spec.airflow_distribution:
-            base_install_providers_cmd.append(installation_spec.airflow_distribution)
-        if installation_spec.provider_constraints_location:
-            console.print(
-                f"[bright_blue]with constraints: {installation_spec.provider_constraints_location}\n"
-            )
-            install_providers_command.extend(
-                ["--constraint", installation_spec.provider_constraints_location]
-            )
-            console.print()
-            result = run_command(install_providers_command, github_actions=github_actions, check=False)
-            if result.returncode != 0:
-                console.print(
-                    "[warning]Installation with constraints failed - might be because pre-installed provider"
-                    " has conflicting dependencies in PyPI. Falling back to a non-constraint installation."
-                )
-                run_command(base_install_providers_cmd, github_actions=github_actions, check=True)
-        else:
-            run_command(base_install_providers_cmd, github_actions=github_actions, check=True)
+        _install_airflow_and_optionally_providers_together(installation_spec, github_actions)
     if mount_sources in ["tests", "remove"]:
         console.print("[bright_blue]Uninstall editable packages installed in CI image")
         command = [
@@ -881,5 +704,144 @@ def install_airflow_and_providers(
     console.print("\n[green]Done!")
 
 
+def _install_airflow_and_optionally_providers_together(
+    installation_spec: InstallationSpec, github_actions: bool
+):
+    console.print("[bright_blue]Installing airflow and optionally providers together")
+    base_install_cmd = [
+        "/usr/local/bin/uv",
+        "pip",
+        "install",
+    ]
+    if installation_spec.pre_release:
+        base_install_cmd.append("--pre")
+    if installation_spec.airflow_distribution:
+        console.print(
+            f"\n[bright_blue]Adding airflow distribution to installation: {installation_spec.airflow_distribution} "
+        )
+        base_install_cmd.append(installation_spec.airflow_distribution)
+    if installation_spec.airflow_core_distribution:
+        console.print(
+            f"\n[bright_blue]Adding airflow core distribution to installation: {installation_spec.airflow_core_distribution}"
+        )
+        base_install_cmd.append(installation_spec.airflow_core_distribution)
+    if installation_spec.airflow_task_sdk_distribution:
+        console.print(
+            f"\n[bright_blue]Adding task-sdk distribution to installation: {installation_spec.airflow_task_sdk_distribution}"
+        )
+        base_install_cmd.append(installation_spec.airflow_task_sdk_distribution)
+    if installation_spec.airflow_ctl_distribution:
+        console.print(
+            f"\n[bright_blue]Adding airflow ctl distribution to installation: {installation_spec.airflow_ctl_distribution}"
+        )
+        base_install_cmd.append(installation_spec.airflow_ctl_distribution)
+    console.print("\n[bright_blue]Adding provider distributions to installation:")
+    for provider_package in sorted(installation_spec.provider_distributions):
+        console.print(f"  {provider_package}")
+    console.print()
+    for provider_package in installation_spec.provider_distributions:
+        base_install_cmd.append(provider_package)
+    install_providers_command = base_install_cmd.copy()
+    if installation_spec.provider_constraints_location:
+        console.print(
+            f"[bright_blue]Installing with provider constraints: {installation_spec.provider_constraints_location}\n"
+        )
+        install_providers_command.extend(["--constraint", installation_spec.provider_constraints_location])
+        console.print()
+        result = run_command(install_providers_command, github_actions=github_actions, check=False)
+        if result.returncode != 0:
+            console.print(
+                "[warning]Installation with constraints failed - might be because pre-installed provider"
+                " has conflicting dependencies in PyPI. Falling back to a non-constraint installation."
+            )
+            run_command(base_install_cmd, github_actions=github_actions, check=True)
+    else:
+        run_command(base_install_cmd, github_actions=github_actions, check=True)
+
+
+def _install_airflow_ctl_with_constraints(installation_spec: InstallationSpec, github_actions: bool):
+    console.print(
+        f"\n[bright_blue]Installing airflow ctl distribution: "
+        f"{installation_spec.airflow_ctl_distribution} with constraints"
+    )
+    base_install_airflow_ctl_cmd = [
+        "/usr/local/bin/uv",
+        "pip",
+        "install",
+    ]
+    # if airflow is also being installed we should add airflow to the base_install_providers_cmd
+    # to avoid accidentally upgrading airflow to a version that is different from installed in the
+    # previous step
+    if installation_spec.airflow_distribution:
+        base_install_airflow_ctl_cmd.append(installation_spec.airflow_distribution)
+    install_airflow_ctl_cmd = base_install_airflow_ctl_cmd.copy()
+    if installation_spec.airflow_ctl_constraints_location:
+        console.print(f"[bright_blue]Use constraints: {installation_spec.airflow_ctl_constraints_location}")
+        install_airflow_ctl_cmd.extend(["--constraint", installation_spec.airflow_ctl_constraints_location])
+    console.print()
+    result = run_command(install_airflow_ctl_cmd, github_actions=github_actions, check=True)
+    if result.returncode != 0:
+        console.print(
+            "[warning]Installation with constraints failed - might be because there are"
+            " conflicting dependencies in PyPI. Falling back to a non-constraint installation."
+        )
+        run_command(base_install_airflow_ctl_cmd, github_actions=github_actions, check=True)
+
+
+def _install_only_airflow_airflow_core_task_sdk_with_constraints(
+    installation_spec: InstallationSpec, github_actions: bool
+) -> None:
+    console.print("[bright_blue]Installing airflow core, task-sdk with constraints")
+    console.print(
+        "[bright_blue]Airflow constraints location: ", installation_spec.airflow_constraints_location
+    )
+    console.print("[bright_blue]Airflow distribution", installation_spec.airflow_distribution)
+    console.print("[bright_blue]Airflow core distribution", installation_spec.airflow_core_distribution)
+    console.print(
+        "[bright_blue]Airflow task-sdk distribution", installation_spec.airflow_task_sdk_distribution
+    )
+    console.print(
+        "[bright_blue]Airflow ctl constraints location: ",
+        installation_spec.airflow_ctl_constraints_location,
+    )
+    base_install_airflow_cmd = [
+        "/usr/local/bin/uv",
+        "pip",
+        "install",
+    ]
+    if installation_spec.pre_release:
+        console.print("[bright_blue]Allowing pre-release versions of airflow")
+        base_install_airflow_cmd.append("--pre")
+    if installation_spec.airflow_distribution:
+        console.print(
+            f"\n[bright_blue]Installing airflow distribution: {installation_spec.airflow_distribution} with constraints"
+        )
+        base_install_airflow_cmd.append(installation_spec.airflow_distribution)
+    if installation_spec.airflow_core_distribution:
+        console.print(
+            f"\n[bright_blue]Installing airflow core distribution: {installation_spec.airflow_core_distribution} with constraints"
+        )
+        base_install_airflow_cmd.append(installation_spec.airflow_core_distribution)
+    if installation_spec.airflow_task_sdk_distribution:
+        base_install_airflow_cmd.append(installation_spec.airflow_task_sdk_distribution)
+        console.print(
+            f"\n[bright_blue]Installing airflow task-sdk distribution: "
+            f"{installation_spec.airflow_task_sdk_distribution} with constraints"
+        )
+        console.print()
+    install_airflow_cmd = base_install_airflow_cmd.copy()
+    if installation_spec.airflow_constraints_location:
+        console.print(f"[bright_blue]Use constraints: {installation_spec.airflow_constraints_location}")
+        install_airflow_cmd.extend(["--constraint", installation_spec.airflow_constraints_location])
+    console.print()
+    result = run_command(install_airflow_cmd, github_actions=github_actions, check=False)
+    if result.returncode != 0:
+        console.print(
+            "[warning]Installation with constraints failed - might be because pre-installed provider"
+            " has conflicting dependencies in PyPI. Falling back to a non-constraint installation."
+        )
+        run_command(base_install_airflow_cmd, github_actions=github_actions, check=True)
+
+
 if __name__ == "__main__":
     install_airflow_and_providers()

From 7f694ad5101f9985ee48b44c7aa27631857eaf78 Mon Sep 17 00:00:00 2001
From: Seongho Kim <55729930+ksh24865@users.noreply.github.com>
Date: Thu, 26 Jun 2025 20:43:40 +0900
Subject: [PATCH 202/381] Enhance Variable set method to use upsert instead of
 delsert (#48547)

---
 airflow-core/src/airflow/models/variable.py   | 46 +++++++++++++++++--
 .../tests/unit/models/test_variable.py        | 21 +++++++++
 2 files changed, 63 insertions(+), 4 deletions(-)

diff --git a/airflow-core/src/airflow/models/variable.py b/airflow-core/src/airflow/models/variable.py
index 5537e66e802f6..2c9138f7c695d 100644
--- a/airflow-core/src/airflow/models/variable.py
+++ b/airflow-core/src/airflow/models/variable.py
@@ -186,7 +186,7 @@ def set(
         """
         Set a value for an Airflow Variable with a given Key.
 
-        This operation overwrites an existing variable.
+        This operation overwrites an existing variable using the session's dialect-specific upsert operation.
 
         :param key: Variable Key
         :param value: Value to set for the Variable
@@ -231,9 +231,47 @@ def set(
             ctx = create_session()
 
         with ctx as session:
-            Variable.delete(key, session=session)
-            session.add(Variable(key=key, val=stored_value, description=description))
-            session.flush()
+            new_variable = Variable(key=key, val=stored_value, description=description)
+
+            val = new_variable._val
+            is_encrypted = new_variable.is_encrypted
+
+            # Import dialect-specific insert function
+            if (dialect_name := session.get_bind().dialect.name) == "postgresql":
+                from sqlalchemy.dialects.postgresql import insert
+            elif dialect_name == "mysql":
+                from sqlalchemy.dialects.mysql import insert
+            else:
+                from sqlalchemy.dialects.sqlite import insert
+
+            # Create the insert statement (common for all dialects)
+            stmt = insert(Variable).values(
+                key=key,
+                val=val,
+                description=description,
+                is_encrypted=is_encrypted,
+            )
+
+            # Apply dialect-specific upsert
+            if dialect_name == "mysql":
+                # MySQL: ON DUPLICATE KEY UPDATE
+                stmt = stmt.on_duplicate_key_update(
+                    val=val,
+                    description=description,
+                    is_encrypted=is_encrypted,
+                )
+            else:
+                # PostgreSQL and SQLite: ON CONFLICT DO UPDATE
+                stmt = stmt.on_conflict_do_update(
+                    index_elements=["key"],
+                    set_=dict(
+                        val=val,
+                        description=description,
+                        is_encrypted=is_encrypted,
+                    ),
+                )
+
+            session.execute(stmt)
             # invalidate key in cache for faster propagation
             # we cannot save the value set because it's possible that it's shadowed by a custom backend
             # (see call to check_for_write_conflict above)
diff --git a/airflow-core/tests/unit/models/test_variable.py b/airflow-core/tests/unit/models/test_variable.py
index 6c36c52e914f5..dd49406a8df70 100644
--- a/airflow-core/tests/unit/models/test_variable.py
+++ b/airflow-core/tests/unit/models/test_variable.py
@@ -121,6 +121,27 @@ def test_variable_set_with_env_variable(self, caplog, session):
             "EnvironmentVariablesBackend"
         )
 
+    def test_variable_set_update_existing(self, session):
+        Variable.set(key="test_key", value="initial_value", session=session)
+
+        initial_var = session.query(Variable).filter(Variable.key == "test_key").one()
+        initial_id = initial_var.id
+
+        # Need to expire session cache to fetch fresh data from db on next query
+        # Without this, SQLAlchemy will return the cached object with old values
+        # instead of querying the database again for the updated values
+        session.expire(initial_var)
+
+        Variable.set(key="test_key", value="updated_value", session=session)
+
+        updated_var = session.query(Variable).filter(Variable.key == "test_key").one()
+
+        # 1. The ID remains the same (no delete-insert)
+        assert updated_var.id == initial_id, "Variable ID should remain the same after update"
+
+        # 2. The value is updated to the new value
+        assert updated_var.val == "updated_value", "Variable value should be updated to the new value"
+
     @mock.patch("airflow.models.variable.ensure_secrets_loaded")
     def test_variable_set_with_extra_secret_backend(self, mock_ensure_secrets, caplog, session):
         caplog.set_level(logging.WARNING, logger=variable.log.name)

From a041a2a3671337bbf743ec671542cf35e1e6c42f Mon Sep 17 00:00:00 2001
From: Kevin Yang <85313829+sjyangkevin@users.noreply.github.com>
Date: Thu, 26 Jun 2025 07:45:59 -0400
Subject: [PATCH 203/381] Enable Serde for Pydantic BaseModel and Subclasses
 (#51059)

This adds serialization and deserialization support for arbitrary pydantic objects, while still maintaining security.
---------

Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
---
 .../src/airflow/serialization/serde.py        |  13 +-
 .../serialization/serializers/bignum.py       |   8 +-
 .../serialization/serializers/builtin.py      |  12 +-
 .../serialization/serializers/datetime.py     |  12 +-
 .../serialization/serializers/deltalake.py    |   6 +-
 .../serialization/serializers/iceberg.py      |   6 +-
 .../serialization/serializers/numpy.py        |  10 +-
 .../serialization/serializers/pandas.py       |  13 +-
 .../serialization/serializers/pydantic.py     |  79 ++++++++++++
 .../serialization/serializers/timezone.py     |   6 +-
 .../src/airflow/serialization/typing.py       |  32 +++++
 .../serializers/test_serializers.py           | 115 ++++++++++++++----
 .../tests/unit/serialization/test_serde.py    |  15 +++
 13 files changed, 271 insertions(+), 56 deletions(-)
 create mode 100644 airflow-core/src/airflow/serialization/serializers/pydantic.py
 create mode 100644 airflow-core/src/airflow/serialization/typing.py

diff --git a/airflow-core/src/airflow/serialization/serde.py b/airflow-core/src/airflow/serialization/serde.py
index 0268ad91206d8..0f1e948d8db2a 100644
--- a/airflow-core/src/airflow/serialization/serde.py
+++ b/airflow-core/src/airflow/serialization/serde.py
@@ -32,6 +32,7 @@
 
 import airflow.serialization.serializers
 from airflow.configuration import conf
+from airflow.serialization.typing import is_pydantic_model
 from airflow.stats import Stats
 from airflow.utils.module_loading import import_string, iter_namespace, qualname
 
@@ -52,6 +53,7 @@
 OLD_SOURCE = "__source"
 OLD_DATA = "__var"
 OLD_DICT = "dict"
+PYDANTIC_MODEL_QUALNAME = "pydantic.main.BaseModel"
 
 DEFAULT_VERSION = 0
 
@@ -145,6 +147,12 @@ def serialize(o: object, depth: int = 0) -> U | None:
         qn = "builtins.tuple"
         classname = qn
 
+    if is_pydantic_model(o):
+        # to match the generic Pydantic serializer and deserializer in _serializers and _deserializers
+        qn = PYDANTIC_MODEL_QUALNAME
+        # the actual Pydantic model class to encode
+        classname = qualname(o)
+
     # if there is a builtin serializer available use that
     if qn in _serializers:
         data, serialized_classname, version, is_serialized = _serializers[qn].serialize(o)
@@ -256,7 +264,10 @@ def deserialize(o: T | None, full=True, type_hint: Any = None) -> object:
 
     # registered deserializer
     if classname in _deserializers:
-        return _deserializers[classname].deserialize(classname, version, deserialize(value))
+        return _deserializers[classname].deserialize(cls, version, deserialize(value))
+    if is_pydantic_model(cls):
+        if PYDANTIC_MODEL_QUALNAME in _deserializers:
+            return _deserializers[PYDANTIC_MODEL_QUALNAME].deserialize(cls, version, deserialize(value))
 
     # class has deserialization function
     if hasattr(cls, "deserialize"):
diff --git a/airflow-core/src/airflow/serialization/serializers/bignum.py b/airflow-core/src/airflow/serialization/serializers/bignum.py
index 769e78491e9e4..5bb89cb386c6d 100644
--- a/airflow-core/src/airflow/serialization/serializers/bignum.py
+++ b/airflow-core/src/airflow/serialization/serializers/bignum.py
@@ -47,13 +47,13 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
     return float(o), name, __version__, True
 
 
-def deserialize(classname: str, version: int, data: object) -> decimal.Decimal:
+def deserialize(cls: type, version: int, data: object) -> decimal.Decimal:
     from decimal import Decimal
 
     if version > __version__:
-        raise TypeError(f"serialized {version} of {classname} > {__version__}")
+        raise TypeError(f"serialized {version} of {qualname(cls)} > {__version__}")
 
-    if classname != qualname(Decimal):
-        raise TypeError(f"{classname} != {qualname(Decimal)}")
+    if cls is not Decimal:
+        raise TypeError(f"do not know how to deserialize {qualname(cls)}")
 
     return Decimal(str(data))
diff --git a/airflow-core/src/airflow/serialization/serializers/builtin.py b/airflow-core/src/airflow/serialization/serializers/builtin.py
index b0ee8cb713dfb..076831a05dabc 100644
--- a/airflow-core/src/airflow/serialization/serializers/builtin.py
+++ b/airflow-core/src/airflow/serialization/serializers/builtin.py
@@ -35,20 +35,20 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
     return list(cast("list", o)), qualname(o), __version__, True
 
 
-def deserialize(classname: str, version: int, data: list) -> tuple | set | frozenset:
+def deserialize(cls: type, version: int, data: list) -> tuple | set | frozenset:
     if version > __version__:
-        raise TypeError("serialized version is newer than class version")
+        raise TypeError(f"serialized version {version} is newer than class version {__version__}")
 
-    if classname == qualname(tuple):
+    if cls is tuple:
         return tuple(data)
 
-    if classname == qualname(set):
+    if cls is set:
         return set(data)
 
-    if classname == qualname(frozenset):
+    if cls is frozenset:
         return frozenset(data)
 
-    raise TypeError(f"do not know how to deserialize {classname}")
+    raise TypeError(f"do not know how to deserialize {qualname(cls)}")
 
 
 def stringify(classname: str, version: int, data: list) -> str:
diff --git a/airflow-core/src/airflow/serialization/serializers/datetime.py b/airflow-core/src/airflow/serialization/serializers/datetime.py
index 69058b8c02a8b..38009bbc468d1 100644
--- a/airflow-core/src/airflow/serialization/serializers/datetime.py
+++ b/airflow-core/src/airflow/serialization/serializers/datetime.py
@@ -59,7 +59,7 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
     return "", "", 0, False
 
 
-def deserialize(classname: str, version: int, data: dict | str) -> datetime.date | datetime.timedelta:
+def deserialize(cls: type, version: int, data: dict | str) -> datetime.date | datetime.timedelta:
     import datetime
 
     from pendulum import DateTime
@@ -86,16 +86,16 @@ def deserialize(classname: str, version: int, data: dict | str) -> datetime.date
                 else None
             )
 
-    if classname == qualname(datetime.datetime) and isinstance(data, dict):
+    if cls is datetime.datetime and isinstance(data, dict):
         return datetime.datetime.fromtimestamp(float(data[TIMESTAMP]), tz=tz)
 
-    if classname == qualname(DateTime) and isinstance(data, dict):
+    if cls is DateTime and isinstance(data, dict):
         return DateTime.fromtimestamp(float(data[TIMESTAMP]), tz=tz)
 
-    if classname == qualname(datetime.timedelta) and isinstance(data, (str, float)):
+    if cls is datetime.timedelta and isinstance(data, (str, float)):
         return datetime.timedelta(seconds=float(data))
 
-    if classname == qualname(datetime.date) and isinstance(data, str):
+    if cls is datetime.date and isinstance(data, str):
         return datetime.date.fromisoformat(data)
 
-    raise TypeError(f"unknown date/time format {classname}")
+    raise TypeError(f"unknown date/time format {qualname(cls)}")
diff --git a/airflow-core/src/airflow/serialization/serializers/deltalake.py b/airflow-core/src/airflow/serialization/serializers/deltalake.py
index 60456baf8007c..a79b231788134 100644
--- a/airflow-core/src/airflow/serialization/serializers/deltalake.py
+++ b/airflow-core/src/airflow/serialization/serializers/deltalake.py
@@ -55,7 +55,7 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
     return data, qualname(o), __version__, True
 
 
-def deserialize(classname: str, version: int, data: dict):
+def deserialize(cls: type, version: int, data: dict):
     from deltalake.table import DeltaTable
 
     from airflow.models.crypto import get_fernet
@@ -63,7 +63,7 @@ def deserialize(classname: str, version: int, data: dict):
     if version > __version__:
         raise TypeError("serialized version is newer than class version")
 
-    if classname == qualname(DeltaTable):
+    if cls is DeltaTable:
         fernet = get_fernet()
         properties = {}
         for k, v in data["storage_options"].items():
@@ -76,4 +76,4 @@ def deserialize(classname: str, version: int, data: dict):
 
         return DeltaTable(data["table_uri"], version=data["version"], storage_options=storage_options)
 
-    raise TypeError(f"do not know how to deserialize {classname}")
+    raise TypeError(f"do not know how to deserialize {qualname(cls)}")
diff --git a/airflow-core/src/airflow/serialization/serializers/iceberg.py b/airflow-core/src/airflow/serialization/serializers/iceberg.py
index 3b03381fef389..018732c29fe35 100644
--- a/airflow-core/src/airflow/serialization/serializers/iceberg.py
+++ b/airflow-core/src/airflow/serialization/serializers/iceberg.py
@@ -55,7 +55,7 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
     return data, qualname(o), __version__, True
 
 
-def deserialize(classname: str, version: int, data: dict):
+def deserialize(cls: type, version: int, data: dict):
     from pyiceberg.catalog import load_catalog
     from pyiceberg.table import Table
 
@@ -64,7 +64,7 @@ def deserialize(classname: str, version: int, data: dict):
     if version > __version__:
         raise TypeError("serialized version is newer than class version")
 
-    if classname == qualname(Table):
+    if cls is Table:
         fernet = get_fernet()
         properties = {}
         for k, v in data["catalog_properties"].items():
@@ -73,4 +73,4 @@ def deserialize(classname: str, version: int, data: dict):
         catalog = load_catalog(data["identifier"][0], **properties)
         return catalog.load_table((data["identifier"][1], data["identifier"][2]))
 
-    raise TypeError(f"do not know how to deserialize {classname}")
+    raise TypeError(f"do not know how to deserialize {qualname(cls)}")
diff --git a/airflow-core/src/airflow/serialization/serializers/numpy.py b/airflow-core/src/airflow/serialization/serializers/numpy.py
index c31244c587844..35620692e4564 100644
--- a/airflow-core/src/airflow/serialization/serializers/numpy.py
+++ b/airflow-core/src/airflow/serialization/serializers/numpy.py
@@ -80,11 +80,13 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
     return "", "", 0, False
 
 
-def deserialize(classname: str, version: int, data: str) -> Any:
+def deserialize(cls: type, version: int, data: str) -> Any:
     if version > __version__:
         raise TypeError("serialized version is newer than class version")
 
-    if classname not in deserializers:
-        raise TypeError(f"unsupported {classname} found for numpy deserialization")
+    allowed_deserialize_classes = [import_string(classname) for classname in deserializers]
 
-    return import_string(classname)(data)
+    if cls not in allowed_deserialize_classes:
+        raise TypeError(f"unsupported {qualname(cls)} found for numpy deserialization")
+
+    return cls(data)
diff --git a/airflow-core/src/airflow/serialization/serializers/pandas.py b/airflow-core/src/airflow/serialization/serializers/pandas.py
index d805e4b95c01e..73f64ce86b4fa 100644
--- a/airflow-core/src/airflow/serialization/serializers/pandas.py
+++ b/airflow-core/src/airflow/serialization/serializers/pandas.py
@@ -53,17 +53,22 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
     return buf.getvalue().hex().decode("utf-8"), qualname(o), __version__, True
 
 
-def deserialize(classname: str, version: int, data: object) -> pd.DataFrame:
+def deserialize(cls: type, version: int, data: object) -> pd.DataFrame:
     if version > __version__:
-        raise TypeError(f"serialized {version} of {classname} > {__version__}")
+        raise TypeError(f"serialized {version} of {qualname(cls)} > {__version__}")
 
-    from pyarrow import parquet as pq
+    import pandas as pd
+
+    if cls is not pd.DataFrame:
+        raise TypeError(f"do not know how to deserialize {qualname(cls)}")
 
     if not isinstance(data, str):
-        raise TypeError(f"serialized {classname} has wrong data type {type(data)}")
+        raise TypeError(f"serialized {qualname(cls)} has wrong data type {type(data)}")
 
     from io import BytesIO
 
+    from pyarrow import parquet as pq
+
     with BytesIO(bytes.fromhex(data)) as buf:
         df = pq.read_table(buf).to_pandas()
 
diff --git a/airflow-core/src/airflow/serialization/serializers/pydantic.py b/airflow-core/src/airflow/serialization/serializers/pydantic.py
new file mode 100644
index 0000000000000..b1a483a152a09
--- /dev/null
+++ b/airflow-core/src/airflow/serialization/serializers/pydantic.py
@@ -0,0 +1,79 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, cast
+
+from airflow.serialization.typing import is_pydantic_model
+from airflow.utils.module_loading import qualname
+
+if TYPE_CHECKING:
+    from pydantic import BaseModel
+
+    from airflow.serialization.serde import U
+
+serializers = [
+    "pydantic.main.BaseModel",
+]
+deserializers = serializers
+
+__version__ = 1
+
+
+def serialize(o: object) -> tuple[U, str, int, bool]:
+    """
+    Serialize a Pydantic BaseModel instance into a dict of built-in types.
+
+    Returns a tuple of:
+    - serialized data (as built-in types)
+    - fixed class name for registration (BaseModel)
+    - version number
+    - is_serialized flag (True if handled)
+    """
+    if not is_pydantic_model(o):
+        return "", "", 0, False
+
+    model = cast("BaseModel", o)  # for mypy
+    data = model.model_dump()
+
+    return data, qualname(o), __version__, True
+
+
+def deserialize(cls: type, version: int, data: dict):
+    """
+    Deserialize a Pydantic class.
+
+    Pydantic models can be serialized into a Python dictionary via `pydantic.main.BaseModel.model_dump`
+    and the dictionary can be deserialized through `pydantic.main.BaseModel.model_validate`. This function
+    can deserialize arbitrary Pydantic models that are in `allowed_deserialization_classes`.
+
+    :param cls: The actual model class
+    :param version: Serialization version (must not exceed __version__)
+    :param data: Dictionary with built-in types, typically from model_dump()
+    :return: An instance of the actual Pydantic model
+    """
+    if version > __version__:
+        raise TypeError(f"Serialized version {version} is newer than the supported version {__version__}")
+
+    if not is_pydantic_model(cls):
+        # no deserializer available
+        raise TypeError(f"No deserializer found for {qualname(cls)}")
+
+    # Perform validation-based reconstruction
+    model = cast("BaseModel", cls)  # for mypy
+    return model.model_validate(data)
diff --git a/airflow-core/src/airflow/serialization/serializers/timezone.py b/airflow-core/src/airflow/serialization/serializers/timezone.py
index 9f2ef7cef65ac..8bc067bc2ffaf 100644
--- a/airflow-core/src/airflow/serialization/serializers/timezone.py
+++ b/airflow-core/src/airflow/serialization/serializers/timezone.py
@@ -67,16 +67,16 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
     return "", "", 0, False
 
 
-def deserialize(classname: str, version: int, data: object) -> Any:
+def deserialize(cls: type, version: int, data: object) -> Any:
     from airflow.utils.timezone import parse_timezone
 
     if not isinstance(data, (str, int)):
         raise TypeError(f"{data} is not of type int or str but of {type(data)}")
 
     if version > __version__:
-        raise TypeError(f"serialized {version} of {classname} > {__version__}")
+        raise TypeError(f"serialized {version} of {qualname(cls)} > {__version__}")
 
-    if classname == "backports.zoneinfo.ZoneInfo" and isinstance(data, str):
+    if qualname(cls) == "backports.zoneinfo.ZoneInfo" and isinstance(data, str):
         from zoneinfo import ZoneInfo
 
         return ZoneInfo(data)
diff --git a/airflow-core/src/airflow/serialization/typing.py b/airflow-core/src/airflow/serialization/typing.py
new file mode 100644
index 0000000000000..a6169b23a78d5
--- /dev/null
+++ b/airflow-core/src/airflow/serialization/typing.py
@@ -0,0 +1,32 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+from typing import Any
+
+
+def is_pydantic_model(cls: Any) -> bool:
+    """
+    Return True if the class is a pydantic.main.BaseModel.
+
+    Checking is done by attributes as it is significantly faster than
+    using isinstance.
+    """
+    # __pydantic_fields__ is always present on Pydantic V2 models and is a dict[str, FieldInfo]
+    # __pydantic_validator__ is an internal validator object, always set after model build
+    return hasattr(cls, "__pydantic_fields__") and hasattr(cls, "__pydantic_validator__")
diff --git a/airflow-core/tests/unit/serialization/serializers/test_serializers.py b/airflow-core/tests/unit/serialization/serializers/test_serializers.py
index 53eb160ec1aff..b3d1507f1e484 100644
--- a/airflow-core/tests/unit/serialization/serializers/test_serializers.py
+++ b/airflow-core/tests/unit/serialization/serializers/test_serializers.py
@@ -23,6 +23,7 @@
 from zoneinfo import ZoneInfo
 
 import numpy as np
+import pandas as pd
 import pendulum
 import pendulum.tz
 import pytest
@@ -31,11 +32,11 @@
 from packaging import version
 from pendulum import DateTime
 from pendulum.tz.timezone import FixedTimezone, Timezone
+from pydantic import BaseModel, Field
 
 from airflow.sdk.definitions.param import Param, ParamsDict
 from airflow.serialization.serde import CLASSNAME, DATA, VERSION, _stringify, decode, deserialize, serialize
 from airflow.serialization.serializers import builtin
-from airflow.utils.module_loading import qualname
 
 from tests_common.test_utils.markers import skip_if_force_lowest_dependencies_marker
 
@@ -60,6 +61,13 @@ def utcoffset(self, dt):
         return datetime.timedelta(hours=2)
 
 
+class FooBarModel(BaseModel):
+    """Pydantic BaseModel for testing Pydantic Serialization/Deserialization."""
+
+    banana: float = 1.1
+    foo: str = Field()
+
+
 @skip_if_force_lowest_dependencies_marker
 class TestSerializers:
     def test_datetime(self):
@@ -190,20 +198,26 @@ def test_bignum_serialize_non_decimal(self):
 
         assert serialize(12345) == ("", "", 0, False)
 
+    def test_bignum_deserialize_decimal(self):
+        from airflow.serialization.serializers.bignum import deserialize
+
+        res = deserialize(decimal.Decimal, 1, decimal.Decimal(12345))
+        assert res == decimal.Decimal(12345)
+
     @pytest.mark.parametrize(
         ("klass", "version", "payload", "msg"),
         [
             (
-                "decimal.Decimal",
+                decimal.Decimal,
                 999,
                 "0",
-                r"serialized 999 of decimal\.Decimal",  # newer version
+                r"serialized 999 of decimal\.Decimal > 1",  # newer version
             ),
             (
-                "wrong.ClassName",
+                str,
                 1,
                 "0",
-                r"wrong\.ClassName != .*Decimal",  # wrong classname
+                r"do not know how to deserialize builtins\.str",  # wrong classname
             ),
         ],
     )
@@ -235,8 +249,8 @@ def test_numpy_serializers(self):
     @pytest.mark.parametrize(
         ("klass", "ver", "value", "msg"),
         [
-            ("numpy.int32", 999, 123, r"serialized version is newer"),
-            ("numpy.float32", 1, 123, r"unsupported numpy\.float32"),
+            (np.int32, 999, 123, r"serialized version is newer"),
+            (np.float32, 1, 123, r"unsupported numpy\.float32"),
         ],
     )
     def test_numpy_deserialize_errors(self, klass, ver, value, msg):
@@ -265,17 +279,23 @@ def test_pandas_serializers(self):
         assert serialize(123) == ("", "", 0, False)
 
     @pytest.mark.parametrize(
-        ("version", "data", "msg"),
+        ("klass", "version", "data", "msg"),
         [
-            (999, "", r"serialized 999 .* > 1"),  # version too new
-            (1, 123, r"wrong data type .*<class 'int'>"),  # bad payload type
+            (pd.DataFrame, 999, "", r"serialized 999 of pandas.core.frame.DataFrame > 1"),  # version too new
+            (
+                pd.DataFrame,
+                1,
+                123,
+                r"serialized pandas.core.frame.DataFrame has wrong data type .*<class 'int'>",
+            ),  # bad payload type
+            (str, 1, "", r"do not know how to deserialize builtins.str"),  # bad class
         ],
     )
-    def test_pandas_deserialize_errors(self, version, data, msg):
+    def test_pandas_deserialize_errors(self, klass, version, data, msg):
         from airflow.serialization.serializers.pandas import deserialize
 
         with pytest.raises(TypeError, match=msg):
-            deserialize("pandas.core.frame.DataFrame", version, data)
+            deserialize(klass, version, data)
 
     def test_iceberg(self):
         pytest.importorskip("pyiceberg", minversion="2.0.0")
@@ -367,6 +387,32 @@ def test_kubernetes_serializer(self, monkeypatch):
         assert serialize(pod) == ("", "", 0, False)
         assert serialize(123) == ("", "", 0, False)
 
+    def test_pydantic(self):
+        m = FooBarModel(banana=3.14, foo="hello")
+        e = serialize(m)
+        d = deserialize(e)
+
+        assert m.banana == d.banana
+        assert m.foo == d.foo
+
+    @pytest.mark.parametrize(
+        "klass, version, data, msg",
+        [
+            (
+                FooBarModel,
+                999,
+                FooBarModel(banana=3.14, foo="hello"),
+                "Serialized version 999 is newer than the supported version 1",
+            ),
+            (str, 1, "", r"No deserializer found for builtins\.str"),
+        ],
+    )
+    def test_pydantic_deserialize_errors(self, klass, version, data, msg):
+        from airflow.serialization.serializers.pydantic import deserialize
+
+        with pytest.raises(TypeError, match=msg):
+            deserialize(klass, version, data)
+
     @pytest.mark.skipif(not PENDULUM3, reason="Test case for pendulum~=3")
     @pytest.mark.parametrize(
         "ser_value, expected",
@@ -528,15 +574,15 @@ def test_timezone_serialize_no_name(self):
     def test_timezone_deserialize_zoneinfo(self):
         from airflow.serialization.serializers.timezone import deserialize
 
-        zi = deserialize("backports.zoneinfo.ZoneInfo", 1, "Asia/Taipei")
+        zi = deserialize(ZoneInfo, 1, "Asia/Taipei")
         assert isinstance(zi, ZoneInfo)
         assert zi.key == "Asia/Taipei"
 
     @pytest.mark.parametrize(
         "klass, version, data, msg",
         [
-            ("pendulum.tz.timezone.FixedTimezone", 1, 1.23, "is not of type int or str"),
-            ("pendulum.tz.timezone.FixedTimezone", 999, "UTC", "serialized 999 .* > 1"),
+            (FixedTimezone, 1, 1.23, "is not of type int or str"),
+            (FixedTimezone, 999, "UTC", "serialized 999 .* > 1"),
         ],
     )
     def test_timezone_deserialize_errors(self, klass, version, data, msg):
@@ -570,14 +616,39 @@ def test_json_schema_load_dag_schema_dict(self, monkeypatch):
             load_dag_schema_dict()
         assert "Schema file schema.json does not exists" in str(ctx.value)
 
-    def test_builtin_deserialize_frozenset(self):
-        res = builtin.deserialize(qualname(frozenset), 1, [13, 14])
-        assert isinstance(res, frozenset)
-        assert res == frozenset({13, 14})
+    @pytest.mark.parametrize(
+        "klass, version, data",
+        [(tuple, 1, [11, 12]), (set, 1, [11, 12]), (frozenset, 1, [11, 12])],
+    )
+    def test_builtin_deserialize(self, klass, version, data):
+        res = builtin.deserialize(klass, version, klass(data))
+        assert isinstance(res, klass)
+        assert res == klass(data)
 
-    def test_builtin_deserialize_version_too_new(self):
-        with pytest.raises(TypeError, match="serialized version is newer than class version"):
-            builtin.deserialize(qualname(tuple), 999, [1, 2])
+    @pytest.mark.parametrize(
+        "klass, version, data, msg",
+        [
+            (tuple, 999, [11, 12], r"serialized version 999 is newer than class version 1"),
+            (set, 2, [11, 12], r"serialized version 2 is newer than class version 1"),
+            (frozenset, 13, [11, 12], r"serialized version 13 is newer than class version 1"),
+        ],
+    )
+    def test_builtin_deserialize_version_too_new(self, klass, version, data, msg):
+        with pytest.raises(TypeError, match=msg):
+            builtin.deserialize(klass, version, data)
+
+    @pytest.mark.parametrize(
+        "klass, version, data, msg",
+        [
+            (str, 1, "11, 12", r"do not know how to deserialize builtins\.str"),
+            (int, 1, 11, r"do not know how to deserialize builtins\.int"),
+            (bool, 1, True, r"do not know how to deserialize builtins\.bool"),
+            (float, 1, 0.999, r"do not know how to deserialize builtins\.float"),
+        ],
+    )
+    def test_builtin_deserialize_wrong_types(self, klass, version, data, msg):
+        with pytest.raises(TypeError, match=msg):
+            builtin.deserialize(klass, version, data)
 
     @pytest.mark.parametrize(
         "func, msg",
diff --git a/airflow-core/tests/unit/serialization/test_serde.py b/airflow-core/tests/unit/serialization/test_serde.py
index 6b716f581fcbf..560569689cf89 100644
--- a/airflow-core/tests/unit/serialization/test_serde.py
+++ b/airflow-core/tests/unit/serialization/test_serde.py
@@ -259,6 +259,21 @@ def test_allow_list_for_imports(self):
 
         assert f"{qualname(Z)} was not found in allow list" in str(ex.value)
 
+    @conf_vars(
+        {
+            ("core", "allowed_deserialization_classes"): "airflow.*",
+        }
+    )
+    @pytest.mark.usefixtures("recalculate_patterns")
+    def test_allow_list_for_deserialize_pydantic_model(self):
+        # for Pydantic model to be deserialized, it must be in `allowed_deserialization_classes`
+        i = U(x=7, v=V(w=W(x=42), s=["hello", "world"], t=(1, 2, 3), c=99), u=("extra", 123))
+        e = serialize(i)
+        with pytest.raises(ImportError) as ex:
+            deserialize(e)
+
+        assert f"{qualname(U)} was not found in allow list" in str(ex.value)
+
     @conf_vars(
         {
             ("core", "allowed_deserialization_classes"): "unit.airflow.*",

From 37b943cdffd6ca1c5621297d2137ce7a03ddf127 Mon Sep 17 00:00:00 2001
From: Satish Chinthanippu <satish.chinthanippu@teradata.com>
Date: Thu, 26 Jun 2025 18:37:45 +0530
Subject: [PATCH 204/381] Documentation improved

---
 providers/teradata/docs/operators/bteq.rst | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/providers/teradata/docs/operators/bteq.rst b/providers/teradata/docs/operators/bteq.rst
index 2424aa9855e1f..ab9ebf0430505 100644
--- a/providers/teradata/docs/operators/bteq.rst
+++ b/providers/teradata/docs/operators/bteq.rst
@@ -22,7 +22,7 @@ BteqOperator
 
 The :class:`~airflow.providers.teradata.operators.bteq.BteqOperator` enables execution of SQL statements or BTEQ (Basic Teradata Query) scripts using the Teradata BTEQ utility, which can be installed either locally or accessed remotely via SSH.
 
-This is useful for executing administrative operations, batch queries, or ETL tasks in Teradata environments using the Teradata BTEQ utility.
+This is useful for executing administrative operations, batch queries, or ELT tasks in Teradata environments using the Teradata BTEQ utility.
 
 .. note::
 
@@ -47,6 +47,13 @@ Make sure your Teradata Airflow connection is defined with the required fields:
 
 You can define a remote host with a separate SSH connection using the ``ssh_conn_id``.
 
+Ensure that the Teradata BTEQ utility is installed on the machine where the SQL statements or scripts will be executed. This could be:
+
+- The **local machine** where Airflow runs the task, for local execution.
+- The **remote host** accessed via SSH, for remote execution.
+
+If executing remotely, also ensure that an SSH server (e.g., ``sshd``) is running and accessible on the remote machine.
+
 .. note::
 
    For improved security, it is **highly recommended** to use
@@ -59,6 +66,8 @@ You can define a remote host with a separate SSH connection using the ``ssh_conn
    https://airflow.apache.org/docs/apache-airflow/stable/howto/connection/ssh.html
 
 
+
+
 To execute arbitrary SQL or BTEQ commands in a Teradata database, use the
 :class:`~airflow.providers.teradata.operators.bteq.BteqOperator`.
 

From f641ef38e4a8789a253f984e1ff6696c6b8e13f6 Mon Sep 17 00:00:00 2001
From: Dominik <105610163+dominikhei@users.noreply.github.com>
Date: Thu, 26 Jun 2025 15:38:41 +0200
Subject: [PATCH 205/381] Use base AWS classes in Glue Trigger / Sensor and
 implement custom waiter (#52243)

* Adjusted the GlueJobSensor to inherit from AwsBaseSensor

* Changed timeout logic and added further tests

* Renamed test case due to removal of max_retries param

* Added custom GlueJob waiter

* Added new params to GlueJobOperator and fixed GlueTrigger tests

* Refined params of operator, trigger and hook
---
 .../providers/amazon/aws/hooks/glue.py        |  1 -
 .../providers/amazon/aws/operators/glue.py    | 19 ++++--
 .../providers/amazon/aws/sensors/glue.py      | 68 +++++++++++++++----
 .../providers/amazon/aws/triggers/glue.py     | 61 ++++++++++-------
 .../providers/amazon/aws/waiters/glue.json    | 55 +++++++++++++++
 .../unit/amazon/aws/sensors/test_glue.py      | 65 +++++++++++++++++-
 .../unit/amazon/aws/triggers/test_glue.py     | 56 ++++++++-------
 .../unit/amazon/aws/waiters/test_glue.py      | 45 +++++++++++-
 8 files changed, 304 insertions(+), 66 deletions(-)

diff --git a/providers/amazon/src/airflow/providers/amazon/aws/hooks/glue.py b/providers/amazon/src/airflow/providers/amazon/aws/hooks/glue.py
index 7093120ceafd0..ceb1c99928282 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/hooks/glue.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/hooks/glue.py
@@ -46,7 +46,6 @@ class GlueJobHook(AwsBaseHook):
     :param script_location: path to etl script on s3
     :param retry_limit: Maximum number of times to retry this job if it fails
     :param num_of_dpus: Number of AWS Glue DPUs to allocate to this Job
-    :param region_name: aws region name (example: us-east-1)
     :param iam_role_name: AWS IAM Role for Glue Job Execution. If set `iam_role_arn` must equal None.
     :param iam_role_arn: AWS IAM Role ARN for Glue Job Execution, If set `iam_role_name` must equal None.
     :param create_job_kwargs: Extra arguments for Glue Job Creation
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/operators/glue.py b/providers/amazon/src/airflow/providers/amazon/aws/operators/glue.py
index 4b80d47b046c8..5cf8f2ecb5ff1 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/operators/glue.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/operators/glue.py
@@ -60,7 +60,6 @@ class GlueJobOperator(AwsBaseOperator[GlueJobHook]):
     :param script_args: etl script arguments and AWS Glue arguments (templated)
     :param retry_limit: The maximum number of times to retry this job if it fails
     :param num_of_dpus: Number of AWS Glue DPUs to allocate to this Job.
-    :param region_name: aws region name (example: us-east-1)
     :param s3_bucket: S3 bucket where logs and local etl script will be uploaded
     :param iam_role_name: AWS IAM Role for Glue Job Execution. If set `iam_role_arn` must equal None.
     :param iam_role_arn: AWS IAM ARN for Glue Job Execution. If set `iam_role_name` must equal None.
@@ -79,6 +78,17 @@ class GlueJobOperator(AwsBaseOperator[GlueJobHook]):
         Thus if status is returned immediately it might end up in case of more than 1 concurrent run.
         It is recommended to set this parameter to 10 when you are using concurrency=1.
         For more information see: https://repost.aws/questions/QUaKgpLBMPSGWO0iq2Fob_bw/glue-run-concurrent-jobs#ANFpCL2fRnQRqgDFuIU_rpvA
+
+    :param aws_conn_id: The Airflow connection used for AWS credentials.
+        If this is ``None`` or empty then the default boto3 behaviour is used. If
+        running Airflow in a distributed manner and aws_conn_id is None or
+        empty, then default boto3 configuration would be used (and must be
+        maintained on each worker node).
+    :param region_name: AWS region_name. If not specified then the default boto3 behaviour is used.
+    :param verify: Whether or not to verify SSL certificates. See:
+        https://boto3.amazonaws.com/v1/documentation/api/latest/reference/core/session.html
+    :param botocore_config: Configuration dictionary (key-values) for botocore client. See:
+        https://botocore.amazonaws.com/v1/documentation/api/latest/reference/config.html
     """
 
     aws_hook_class = GlueJobHook
@@ -122,9 +132,9 @@ def __init__(
         verbose: bool = False,
         replace_script_file: bool = False,
         update_config: bool = False,
-        job_poll_interval: int | float = 6,
         stop_job_run_on_kill: bool = False,
         sleep_before_return: int = 0,
+        job_poll_interval: int | float = 6,
         **kwargs,
     ):
         super().__init__(**kwargs)
@@ -231,7 +241,8 @@ def execute(self, context: Context):
                     run_id=self._job_run_id,
                     verbose=self.verbose,
                     aws_conn_id=self.aws_conn_id,
-                    job_poll_interval=self.job_poll_interval,
+                    waiter_delay=int(self.job_poll_interval),
+                    waiter_max_attempts=self.retry_limit,
                 ),
                 method_name="execute_complete",
             )
@@ -254,7 +265,7 @@ def execute_complete(self, context: Context, event: dict[str, Any] | None = None
 
         if validated_event["status"] != "success":
             raise AirflowException(f"Error in glue job: {validated_event}")
-        return validated_event["value"]
+        return validated_event["run_id"]
 
     def on_kill(self):
         """Cancel the running AWS Glue Job."""
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/sensors/glue.py b/providers/amazon/src/airflow/providers/amazon/aws/sensors/glue.py
index fb360f9102171..6437d5513cd90 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/sensors/glue.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/sensors/glue.py
@@ -18,7 +18,6 @@
 from __future__ import annotations
 
 from collections.abc import Sequence
-from functools import cached_property
 from typing import TYPE_CHECKING, Any
 
 from airflow.configuration import conf
@@ -28,16 +27,16 @@
 from airflow.providers.amazon.aws.triggers.glue import (
     GlueDataQualityRuleRecommendationRunCompleteTrigger,
     GlueDataQualityRuleSetEvaluationRunCompleteTrigger,
+    GlueJobCompleteTrigger,
 )
 from airflow.providers.amazon.aws.utils import validate_execute_complete_event
 from airflow.providers.amazon.aws.utils.mixins import aws_template_fields
-from airflow.sensors.base import BaseSensorOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
 
 
-class GlueJobSensor(BaseSensorOperator):
+class GlueJobSensor(AwsBaseSensor[GlueJobHook]):
     """
     Waits for an AWS Glue Job to reach any of the status below.
 
@@ -50,9 +49,29 @@ class GlueJobSensor(BaseSensorOperator):
     :param job_name: The AWS Glue Job unique name
     :param run_id: The AWS Glue current running job identifier
     :param verbose: If True, more Glue Job Run logs show in the Airflow Task Logs.  (default: False)
+    :param deferrable: If True, the sensor will operate in deferrable mode. This mode requires aiobotocore
+        module to be installed.
+        (default: False, but can be overridden in config file by setting default_deferrable to True)
+    :param poke_interval: Polling period in seconds to check for the status of the job. (default: 120)
+    :param max_retries: Number of times before returning the current state. (default: 60)
+
+    :param aws_conn_id: The Airflow connection used for AWS credentials.
+        If this is ``None`` or empty then the default boto3 behaviour is used. If
+        running Airflow in a distributed manner and aws_conn_id is None or
+        empty, then default boto3 configuration would be used (and must be
+        maintained on each worker node).
+    :param region_name: AWS region_name. If not specified then the default boto3 behaviour is used.
+    :param verify: Whether to verify SSL certificates. See:
+        https://boto3.amazonaws.com/v1/documentation/api/latest/reference/core/session.html
+    :param botocore_config: Configuration dictionary (key-values) for botocore client. See:
+        https://botocore.amazonaws.com/v1/documentation/api/latest/reference/config.html
     """
 
-    template_fields: Sequence[str] = ("job_name", "run_id")
+    SUCCESS_STATES = ("SUCCEEDED",)
+    FAILURE_STATES = ("FAILED", "STOPPED", "TIMEOUT")
+
+    aws_hook_class = GlueJobHook
+    template_fields: Sequence[str] = aws_template_fields("job_name", "run_id")
 
     def __init__(
         self,
@@ -60,6 +79,9 @@ def __init__(
         job_name: str,
         run_id: str,
         verbose: bool = False,
+        deferrable: bool = conf.getboolean("operators", "default_deferrable", fallback=False),
+        poke_interval: int = 120,
+        max_retries: int = 60,
         aws_conn_id: str | None = "aws_default",
         **kwargs,
     ):
@@ -67,24 +89,46 @@ def __init__(
         self.job_name = job_name
         self.run_id = run_id
         self.verbose = verbose
+        self.deferrable = deferrable
+        self.poke_interval = poke_interval
+        self.max_retries = max_retries
         self.aws_conn_id = aws_conn_id
-        self.success_states: list[str] = ["SUCCEEDED"]
-        self.errored_states: list[str] = ["FAILED", "STOPPED", "TIMEOUT"]
         self.next_log_tokens = GlueJobHook.LogContinuationTokens()
 
-    @cached_property
-    def hook(self):
-        return GlueJobHook(aws_conn_id=self.aws_conn_id)
+    def execute(self, context: Context) -> Any:
+        if self.deferrable:
+            self.defer(
+                trigger=GlueJobCompleteTrigger(
+                    job_name=self.job_name,
+                    run_id=self.run_id,
+                    verbose=self.verbose,
+                    aws_conn_id=self.aws_conn_id,
+                    waiter_delay=int(self.poke_interval),
+                    waiter_max_attempts=self.max_retries,
+                ),
+                method_name="execute_complete",
+            )
+        else:
+            super().execute(context=context)
 
-    def poke(self, context: Context):
+    def execute_complete(self, context: Context, event: dict[str, Any] | None = None) -> None:
+        validated_event = validate_execute_complete_event(event)
+
+        if validated_event["status"] != "success":
+            message = f"Error: AWS Glue Job: {validated_event}"
+            raise AirflowException(message)
+
+        self.log.info("AWS Glue Job completed.")
+
+    def poke(self, context: Context) -> bool:
         self.log.info("Poking for job run status :for Glue Job %s and ID %s", self.job_name, self.run_id)
         job_state = self.hook.get_job_state(job_name=self.job_name, run_id=self.run_id)
 
         try:
-            if job_state in self.success_states:
+            if job_state in self.SUCCESS_STATES:
                 self.log.info("Exiting Job %s Run State: %s", self.run_id, job_state)
                 return True
-            if job_state in self.errored_states:
+            if job_state in self.FAILURE_STATES:
                 job_error_message = "Exiting Job %s Run State: %s", self.run_id, job_state
                 self.log.info(job_error_message)
                 raise AirflowException(job_error_message)
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/triggers/glue.py b/providers/amazon/src/airflow/providers/amazon/aws/triggers/glue.py
index 4a56f47689a1b..6314bce52886f 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/triggers/glue.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/triggers/glue.py
@@ -31,49 +31,62 @@
 from airflow.triggers.base import BaseTrigger, TriggerEvent
 
 
-class GlueJobCompleteTrigger(BaseTrigger):
+class GlueJobCompleteTrigger(AwsBaseWaiterTrigger):
     """
     Watches for a glue job, triggers when it finishes.
 
     :param job_name: glue job name
     :param run_id: the ID of the specific run to watch for that job
     :param verbose: whether to print the job's logs in airflow logs or not
-    :param aws_conn_id: The Airflow connection used for AWS credentials.
+    :param waiter_delay: The amount of time in seconds to wait between attempts. (default: 60)
+    :param waiter_max_attempts: The maximum number of attempts to be made. (default: 75)
+    :param aws_conn_id: The Airflow connection used for AWS credentials
+    :param region_name: Optional aws region name (example: us-east-1). Uses region from connection
+        if not specified.
+    :param verify: Whether or not to verify SSL certificates.
+    :param botocore_config: Configuration dictionary (key-values) for botocore client.
     """
 
     def __init__(
         self,
         job_name: str,
         run_id: str,
-        verbose: bool,
-        aws_conn_id: str | None,
-        job_poll_interval: int | float,
+        verbose: bool = False,
+        waiter_delay: int = 60,
+        waiter_max_attempts: int = 75,
+        aws_conn_id: str | None = "aws_default",
+        region_name: str | None = None,
+        verify: bool | str | None = None,
+        botocore_config: dict | None = None,
     ):
-        super().__init__()
+        super().__init__(
+            serialized_fields={"job_name": job_name, "run_id": run_id, "verbose": verbose},
+            waiter_name="job_complete",
+            waiter_args={"JobName": job_name, "RunId": run_id},
+            failure_message="AWS Glue job failed.",
+            status_message="Status of AWS Glue job is",
+            status_queries=["JobRun.JobRunState"],
+            return_key="run_id",
+            return_value=run_id,
+            waiter_delay=waiter_delay,
+            waiter_max_attempts=waiter_max_attempts,
+            aws_conn_id=aws_conn_id,
+            region_name=region_name,
+            verify=verify,
+            botocore_config=botocore_config,
+        )
         self.job_name = job_name
         self.run_id = run_id
         self.verbose = verbose
-        self.aws_conn_id = aws_conn_id
-        self.job_poll_interval = job_poll_interval
 
-    def serialize(self) -> tuple[str, dict[str, Any]]:
-        return (
-            # dynamically generate the fully qualified name of the class
-            self.__class__.__module__ + "." + self.__class__.__qualname__,
-            {
-                "job_name": self.job_name,
-                "run_id": self.run_id,
-                "verbose": self.verbose,
-                "aws_conn_id": self.aws_conn_id,
-                "job_poll_interval": self.job_poll_interval,
-            },
+    def hook(self) -> AwsGenericHook:
+        return GlueJobHook(
+            aws_conn_id=self.aws_conn_id,
+            region_name=self.region_name,
+            verify=self.verify,
+            config=self.botocore_config,
         )
 
-    async def run(self) -> AsyncIterator[TriggerEvent]:
-        hook = GlueJobHook(aws_conn_id=self.aws_conn_id, job_poll_interval=self.job_poll_interval)
-        await hook.async_job_completion(self.job_name, self.run_id, self.verbose)
-        yield TriggerEvent({"status": "success", "message": "Job done", "value": self.run_id})
-
 
 class GlueCatalogPartitionTrigger(BaseTrigger):
     """
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/waiters/glue.json b/providers/amazon/src/airflow/providers/amazon/aws/waiters/glue.json
index 2fb355809dab4..68a4842ce0bae 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/waiters/glue.json
+++ b/providers/amazon/src/airflow/providers/amazon/aws/waiters/glue.json
@@ -1,6 +1,61 @@
 {
     "version": 2,
     "waiters": {
+        "job_complete": {
+            "operation": "GetJobRun",
+            "delay": 60,
+            "maxAttempts": 75,
+            "acceptors": [
+                {
+                    "matcher": "path",
+                    "argument": "JobRun.JobRunState",
+                    "expected": "STARTING",
+                    "state": "retry"
+                },
+                {
+                    "matcher": "path",
+                    "argument": "JobRun.JobRunState",
+                    "expected": "RUNNING",
+                    "state": "retry"
+                },
+                {
+                    "matcher": "path",
+                    "argument": "JobRun.JobRunState",
+                    "expected": "STOPPING",
+                    "state": "retry"
+                },
+                {
+                    "matcher": "path",
+                    "argument": "JobRun.JobRunState",
+                    "expected": "STOPPED",
+                    "state": "failure"
+                },
+                {
+                    "matcher": "path",
+                    "argument": "JobRun.JobRunState",
+                    "expected": "FAILED",
+                    "state": "failure"
+                },
+                {
+                    "matcher": "path",
+                    "argument": "JobRun.JobRunState",
+                    "expected": "ERROR",
+                    "state": "failure"
+                },
+                {
+                    "matcher": "path",
+                    "argument": "JobRun.JobRunState",
+                    "expected": "TIMEOUT",
+                    "state": "failure"
+                },
+                {
+                    "matcher": "path",
+                    "argument": "JobRun.JobRunState",
+                    "expected": "SUCCEEDED",
+                    "state": "success"
+                }
+            ]
+        },
         "crawler_ready": {
             "operation": "GetCrawler",
             "delay": 5,
diff --git a/providers/amazon/tests/unit/amazon/aws/sensors/test_glue.py b/providers/amazon/tests/unit/amazon/aws/sensors/test_glue.py
index 2d4925a016c18..ef57439523bc6 100644
--- a/providers/amazon/tests/unit/amazon/aws/sensors/test_glue.py
+++ b/providers/amazon/tests/unit/amazon/aws/sensors/test_glue.py
@@ -21,7 +21,7 @@
 
 import pytest
 
-from airflow.exceptions import AirflowException
+from airflow.exceptions import AirflowException, TaskDeferred
 from airflow.providers.amazon.aws.hooks.glue import GlueJobHook
 from airflow.providers.amazon.aws.sensors.glue import GlueJobSensor
 
@@ -152,3 +152,66 @@ def test_fail_poke(self, get_job_state):
         job_error_message = "Exiting Job"
         with pytest.raises(AirflowException, match=job_error_message):
             op.poke(context={})
+
+    def test_deferrable_execute_raises_task_deferred(self):
+        job_name = "job_name"
+        job_run_id = "job_run_id"
+        sensor = GlueJobSensor(
+            task_id="test_glue_job_sensor",
+            job_name=job_name,
+            run_id=job_run_id,
+            deferrable=True,
+            poke_interval=1,
+            timeout=5,
+        )
+        with pytest.raises(TaskDeferred):
+            sensor.execute({})
+
+    @mock.patch.object(GlueJobSensor, "defer")
+    def test_default_timeout(self, mock_defer):
+        mock_defer.side_effect = TaskDeferred(trigger=mock.Mock(), method_name="execute_complete")
+        sensor = GlueJobSensor(
+            task_id="test_glue_job_sensor",
+            job_name="job_name",
+            run_id="job_run_id",
+            deferrable=True,
+            poke_interval=5,
+            max_retries=30,
+        )
+        with pytest.raises(TaskDeferred):
+            sensor.execute({})
+        call_kwargs = mock_defer.call_args.kwargs["trigger"]
+        assert call_kwargs.attempts == 30
+        mock_defer.assert_called_once()
+
+    def test_default_args(self):
+        job_name = "job_name"
+        job_run_id = "job_run_id"
+        sensor = GlueJobSensor(
+            task_id="test_glue_job_sensor",
+            job_name=job_name,
+            run_id=job_run_id,
+        )
+        assert sensor.poke_interval == 120
+        assert sensor.verbose is False
+        assert sensor.deferrable is False or isinstance(sensor.deferrable, bool)
+        assert sensor.aws_conn_id == "aws_default"
+
+    def test_custom_args(self):
+        job_name = "job_name"
+        job_run_id = "job_run_id"
+        sensor = GlueJobSensor(
+            task_id="test_glue_job_sensor",
+            job_name=job_name,
+            run_id=job_run_id,
+            verbose=True,
+            deferrable=True,
+            poke_interval=10,
+            aws_conn_id="custom_conn",
+            max_retries=20,
+        )
+        assert sensor.verbose is True
+        assert sensor.deferrable is True
+        assert sensor.poke_interval == 10
+        assert sensor.aws_conn_id == "custom_conn"
+        assert sensor.max_retries == 20
diff --git a/providers/amazon/tests/unit/amazon/aws/triggers/test_glue.py b/providers/amazon/tests/unit/amazon/aws/triggers/test_glue.py
index 354d70cfab6ed..d9b8ccaa452c9 100644
--- a/providers/amazon/tests/unit/amazon/aws/triggers/test_glue.py
+++ b/providers/amazon/tests/unit/amazon/aws/triggers/test_glue.py
@@ -40,47 +40,55 @@
 
 class TestGlueJobTrigger:
     @pytest.mark.asyncio
-    @mock.patch.object(GlueJobHook, "async_get_job_state")
-    async def test_wait_job(self, get_state_mock: mock.MagicMock):
+    @mock.patch.object(GlueJobHook, "get_waiter")
+    @mock.patch.object(GlueJobHook, "get_async_conn")
+    async def test_wait_job(self, mock_async_conn, mock_get_waiter):
+        mock_async_conn.__aenter__.return_value = mock.MagicMock()
+        mock_get_waiter().wait = AsyncMock()
         trigger = GlueJobCompleteTrigger(
             job_name="job_name",
             run_id="JobRunId",
             verbose=False,
             aws_conn_id="aws_conn_id",
-            job_poll_interval=0.1,
+            waiter_max_attempts=3,
+            waiter_delay=10,
         )
-        get_state_mock.side_effect = [
-            "RUNNING",
-            "RUNNING",
-            "SUCCEEDED",
-        ]
-
         generator = trigger.run()
         event = await generator.asend(None)  # type:ignore[attr-defined]
 
-        assert get_state_mock.call_count == 3
+        assert_expected_waiter_type(mock_get_waiter, "job_complete")
+        mock_get_waiter().wait.assert_called_once()
         assert event.payload["status"] == "success"
+        assert event.payload["run_id"] == "JobRunId"
 
     @pytest.mark.asyncio
-    @mock.patch.object(GlueJobHook, "async_get_job_state")
-    async def test_wait_job_failed(self, get_state_mock: mock.MagicMock):
+    @mock.patch.object(GlueJobHook, "get_waiter")
+    @mock.patch.object(GlueJobHook, "get_async_conn")
+    async def test_wait_job_failed(self, mock_async_conn, mock_get_waiter):
+        mock_async_conn.__aenter__.return_value = mock.MagicMock()
+        from botocore.exceptions import WaiterError
+
+        mock_get_waiter().wait = AsyncMock(
+            side_effect=WaiterError(
+                name="job_complete",
+                reason="Waiter encountered a terminal failure state",
+                last_response={"JobRun": {"JobRunState": "FAILED"}},
+            )
+        )
+
         trigger = GlueJobCompleteTrigger(
             job_name="job_name",
             run_id="JobRunId",
             verbose=False,
             aws_conn_id="aws_conn_id",
-            job_poll_interval=0.1,
+            waiter_max_attempts=3,
+            waiter_delay=10,
         )
-        get_state_mock.side_effect = [
-            "RUNNING",
-            "RUNNING",
-            "FAILED",
-        ]
+        generator = trigger.run()
 
         with pytest.raises(AirflowException):
-            await trigger.run().asend(None)  # type:ignore[attr-defined]
-
-        assert get_state_mock.call_count == 3
+            await generator.asend(None)  # type:ignore[attr-defined]
+        assert_expected_waiter_type(mock_get_waiter, "job_complete")
 
     def test_serialization(self):
         trigger = GlueJobCompleteTrigger(
@@ -88,7 +96,8 @@ def test_serialization(self):
             run_id="JobRunId",
             verbose=False,
             aws_conn_id="aws_conn_id",
-            job_poll_interval=0.1,
+            waiter_max_attempts=3,
+            waiter_delay=10,
         )
         classpath, kwargs = trigger.serialize()
         assert classpath == "airflow.providers.amazon.aws.triggers.glue.GlueJobCompleteTrigger"
@@ -97,7 +106,8 @@ def test_serialization(self):
             "run_id": "JobRunId",
             "verbose": False,
             "aws_conn_id": "aws_conn_id",
-            "job_poll_interval": 0.1,
+            "waiter_max_attempts": 3,
+            "waiter_delay": 10,
         }
 
 
diff --git a/providers/amazon/tests/unit/amazon/aws/waiters/test_glue.py b/providers/amazon/tests/unit/amazon/aws/waiters/test_glue.py
index 431082ee21f39..e4f8fb39e7fb2 100644
--- a/providers/amazon/tests/unit/amazon/aws/waiters/test_glue.py
+++ b/providers/amazon/tests/unit/amazon/aws/waiters/test_glue.py
@@ -22,7 +22,7 @@
 import botocore
 import pytest
 
-from airflow.providers.amazon.aws.hooks.glue import GlueDataQualityHook
+from airflow.providers.amazon.aws.hooks.glue import GlueDataQualityHook, GlueJobHook
 from airflow.providers.amazon.aws.sensors.glue import (
     GlueDataQualityRuleRecommendationRunSensor,
     GlueDataQualityRuleSetEvaluationRunSensor,
@@ -104,3 +104,46 @@ def test_data_quality_rule_recommendation_run_wait(self, mock_get_job):
         GlueDataQualityHook().get_waiter(self.WAITER_NAME).wait(
             RunIc="run_id", WaiterConfig={"Delay": 0.01, "MaxAttempts": 3}
         )
+
+
+class TestGlueJobCompleteCustomWaiterBase:
+    @pytest.fixture(autouse=True)
+    def mock_conn(self, monkeypatch):
+        self.client = boto3.client("glue")
+        monkeypatch.setattr(GlueJobHook, "conn", self.client)
+
+
+class TestGlueJobCompleteWaiter(TestGlueJobCompleteCustomWaiterBase):
+    WAITER_NAME = "job_complete"
+
+    @pytest.fixture
+    def mock_get_job(self):
+        with mock.patch.object(self.client, "get_job_run") as mock_getter:
+            yield mock_getter
+
+    @pytest.mark.parametrize("state", ["SUCCEEDED"])
+    def test_glue_job_run_success(self, state, mock_get_job):
+        mock_get_job.return_value = {"JobRun": {"JobRunState": state}}
+
+        GlueJobHook().get_waiter(self.WAITER_NAME).wait(JobName="example", RunId="run_id")
+
+    @pytest.mark.parametrize("state", ["STOPPED", "FAILED", "ERROR", "TIMEOUT"])
+    def test_glue_job_run_failure(self, state, mock_get_job):
+        mock_get_job.return_value = {"JobRun": {"JobRunState": state}}
+
+        with pytest.raises(botocore.exceptions.WaiterError):
+            GlueJobHook().get_waiter(self.WAITER_NAME).wait(JobName="example", RunId="run_id")
+
+    @pytest.mark.parametrize("intermediate", ["STARTING", "RUNNING", "STOPPING"])
+    def test_glue_job_run_retry_then_success(self, intermediate, mock_get_job):
+        mock_get_job.side_effect = [
+            {"JobRun": {"JobRunState": intermediate}},
+            {"JobRun": {"JobRunState": intermediate}},
+            {"JobRun": {"JobRunState": "SUCCEEDED"}},
+        ]
+
+        GlueJobHook().get_waiter(self.WAITER_NAME).wait(
+            JobName="example",
+            RunId="run_id",
+            WaiterConfig={"Delay": 0.01, "MaxAttempts": 3},
+        )

From 63b2207ec7e0b8a243a807235763f8a2c70e75e9 Mon Sep 17 00:00:00 2001
From: Aryan Khurana <101019909+AryanK1511@users.noreply.github.com>
Date: Thu, 26 Jun 2025 09:40:35 -0400
Subject: [PATCH 206/381] Handle exceptions when fetching status in GlueJobHook
 (#52262)

* Handle exceptions when fetching status in GlueJobHook

* Add api_retry_args to the ALLOWED_THICK_HOOKS_PARAMETERS dictionary for GlueJobHook
---
 .../providers/amazon/aws/hooks/glue.py        |  88 ++++++++++++-
 .../tests/unit/amazon/aws/hooks/test_glue.py  | 121 ++++++++++++++++++
 .../amazon/aws/hooks/test_hooks_signature.py  |   1 +
 3 files changed, 204 insertions(+), 6 deletions(-)

diff --git a/providers/amazon/src/airflow/providers/amazon/aws/hooks/glue.py b/providers/amazon/src/airflow/providers/amazon/aws/hooks/glue.py
index ceb1c99928282..cdf9347009098 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/hooks/glue.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/hooks/glue.py
@@ -24,6 +24,14 @@
 from typing import Any
 
 from botocore.exceptions import ClientError
+from tenacity import (
+    AsyncRetrying,
+    Retrying,
+    before_sleep_log,
+    retry_if_exception,
+    stop_after_attempt,
+    wait_exponential,
+)
 
 from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning
 from airflow.providers.amazon.aws.hooks.base_aws import AwsBaseHook
@@ -50,6 +58,7 @@ class GlueJobHook(AwsBaseHook):
     :param iam_role_arn: AWS IAM Role ARN for Glue Job Execution, If set `iam_role_name` must equal None.
     :param create_job_kwargs: Extra arguments for Glue Job Creation
     :param update_config: Update job configuration on Glue (default: False)
+    :param api_retry_args: An optional dictionary with arguments passed to ``tenacity.Retrying`` & ``tenacity.AsyncRetrying`` classes.
 
     Additional arguments (such as ``aws_conn_id``) may be specified and
     are passed down to the underlying AwsBaseHook.
@@ -79,6 +88,7 @@ def __init__(
         create_job_kwargs: dict | None = None,
         update_config: bool = False,
         job_poll_interval: int | float = 6,
+        api_retry_args: dict[Any, Any] | None = None,
         *args,
         **kwargs,
     ):
@@ -95,6 +105,17 @@ def __init__(
         self.update_config = update_config
         self.job_poll_interval = job_poll_interval
 
+        self.retry_config: dict[str, Any] = {
+            "retry": retry_if_exception(self._should_retry_on_error),
+            "wait": wait_exponential(multiplier=1, min=1, max=60),
+            "stop": stop_after_attempt(5),
+            "before_sleep": before_sleep_log(self.log, log_level=20),
+            "reraise": True,
+        }
+
+        if api_retry_args:
+            self.retry_config.update(api_retry_args)
+
         worker_type_exists = "WorkerType" in self.create_job_kwargs
         num_workers_exists = "NumberOfWorkers" in self.create_job_kwargs
 
@@ -115,6 +136,29 @@ def __init__(
         kwargs["client_type"] = "glue"
         super().__init__(*args, **kwargs)
 
+    def _should_retry_on_error(self, exception: BaseException) -> bool:
+        """
+        Determine if an exception should trigger a retry.
+
+        :param exception: The exception that occurred
+        :return: True if the exception should trigger a retry, False otherwise
+        """
+        if isinstance(exception, ClientError):
+            error_code = exception.response.get("Error", {}).get("Code", "")
+            retryable_errors = {
+                "ThrottlingException",
+                "RequestLimitExceeded",
+                "ServiceUnavailable",
+                "InternalFailure",
+                "InternalServerError",
+                "TooManyRequestsException",
+                "RequestTimeout",
+                "RequestTimeoutException",
+                "HttpTimeoutException",
+            }
+            return error_code in retryable_errors
+        return False
+
     def create_glue_job_config(self) -> dict:
         default_command = {
             "Name": "glueetl",
@@ -216,8 +260,21 @@ def get_job_state(self, job_name: str, run_id: str) -> str:
         :param run_id: The job-run ID of the predecessor job run
         :return: State of the Glue job
         """
-        job_run = self.conn.get_job_run(JobName=job_name, RunId=run_id, PredecessorsIncluded=True)
-        return job_run["JobRun"]["JobRunState"]
+        for attempt in Retrying(**self.retry_config):
+            with attempt:
+                try:
+                    job_run = self.conn.get_job_run(JobName=job_name, RunId=run_id, PredecessorsIncluded=True)
+                    return job_run["JobRun"]["JobRunState"]
+                except ClientError as e:
+                    self.log.error("Failed to get job state for job %s run %s: %s", job_name, run_id, e)
+                    raise
+                except Exception as e:
+                    self.log.error(
+                        "Unexpected error getting job state for job %s run %s: %s", job_name, run_id, e
+                    )
+                    raise
+        # This should never be reached due to reraise=True, but mypy needs it
+        raise RuntimeError("Unexpected end of retry loop")
 
     async def async_get_job_state(self, job_name: str, run_id: str) -> str:
         """
@@ -225,9 +282,22 @@ async def async_get_job_state(self, job_name: str, run_id: str) -> str:
 
         The async version of get_job_state.
         """
-        async with await self.get_async_conn() as client:
-            job_run = await client.get_job_run(JobName=job_name, RunId=run_id)
-        return job_run["JobRun"]["JobRunState"]
+        async for attempt in AsyncRetrying(**self.retry_config):
+            with attempt:
+                try:
+                    async with await self.get_async_conn() as client:
+                        job_run = await client.get_job_run(JobName=job_name, RunId=run_id)
+                    return job_run["JobRun"]["JobRunState"]
+                except ClientError as e:
+                    self.log.error("Failed to get job state for job %s run %s: %s", job_name, run_id, e)
+                    raise
+                except Exception as e:
+                    self.log.error(
+                        "Unexpected error getting job state for job %s run %s: %s", job_name, run_id, e
+                    )
+                    raise
+        # This should never be reached due to reraise=True, but mypy needs it
+        raise RuntimeError("Unexpected end of retry loop")
 
     @cached_property
     def logs_hook(self):
@@ -371,7 +441,7 @@ def _handle_state(
         )
         return None
 
-    def has_job(self, job_name) -> bool:
+    def has_job(self, job_name: str) -> bool:
         """
         Check if the job already exists.
 
@@ -421,6 +491,9 @@ def get_or_create_glue_job(self) -> str | None:
 
         :return:Name of the Job
         """
+        if self.job_name is None:
+            raise ValueError("job_name must be set to get or create a Glue job")
+
         if self.has_job(self.job_name):
             return self.job_name
 
@@ -440,6 +513,9 @@ def create_or_update_glue_job(self) -> str | None:
 
         :return:Name of the Job
         """
+        if self.job_name is None:
+            raise ValueError("job_name must be set to create or update a Glue job")
+
         config = self.create_glue_job_config()
 
         if self.has_job(self.job_name):
diff --git a/providers/amazon/tests/unit/amazon/aws/hooks/test_glue.py b/providers/amazon/tests/unit/amazon/aws/hooks/test_glue.py
index de1de82273890..df3e98401ae74 100644
--- a/providers/amazon/tests/unit/amazon/aws/hooks/test_glue.py
+++ b/providers/amazon/tests/unit/amazon/aws/hooks/test_glue.py
@@ -479,6 +479,127 @@ async def test_async_job_completion_failure(self, get_state_mock: MagicMock):
 
         assert get_state_mock.call_count == 3
 
+    @mock.patch.object(GlueJobHook, "conn")
+    def test_get_job_state_success(self, mock_conn):
+        hook = GlueJobHook()
+        job_name = "test_job"
+        run_id = "test_run_id"
+        expected_state = "SUCCEEDED"
+
+        mock_conn.get_job_run.return_value = {"JobRun": {"JobRunState": expected_state}}
+
+        result = hook.get_job_state(job_name, run_id)
+
+        assert result == expected_state
+        mock_conn.get_job_run.assert_called_once_with(
+            JobName=job_name, RunId=run_id, PredecessorsIncluded=True
+        )
+
+    @mock.patch.object(GlueJobHook, "conn")
+    def test_get_job_state_retry_on_client_error(self, mock_conn):
+        hook = GlueJobHook()
+        job_name = "test_job"
+        run_id = "test_run_id"
+        expected_state = "SUCCEEDED"
+
+        mock_conn.get_job_run.side_effect = [
+            ClientError(
+                {"Error": {"Code": "ThrottlingException", "Message": "Rate exceeded"}}, "get_job_run"
+            ),
+            {"JobRun": {"JobRunState": expected_state}},
+        ]
+
+        result = hook.get_job_state(job_name, run_id)
+
+        assert result == expected_state
+        assert mock_conn.get_job_run.call_count == 2
+
+    @mock.patch.object(GlueJobHook, "conn")
+    def test_get_job_state_fails_after_all_retries(self, mock_conn):
+        """Test get_job_state raises exception when all retries are exhausted."""
+        hook = GlueJobHook()
+        job_name = "test_job"
+        run_id = "test_run_id"
+
+        mock_conn.get_job_run.side_effect = ClientError(
+            {"Error": {"Code": "ThrottlingException", "Message": "Rate exceeded"}}, "get_job_run"
+        )
+
+        with pytest.raises(ClientError) as exc_info:
+            hook.get_job_state(job_name, run_id)
+
+        assert exc_info.value.response["Error"]["Code"] == "ThrottlingException"
+        assert mock_conn.get_job_run.call_count == 5
+
+    @pytest.mark.asyncio
+    @mock.patch.object(GlueJobHook, "get_async_conn")
+    async def test_async_get_job_state_success(self, mock_get_async_conn):
+        hook = GlueJobHook()
+        job_name = "test_job"
+        run_id = "test_run_id"
+        expected_state = "RUNNING"
+
+        mock_client = mock.AsyncMock()
+        mock_client.get_job_run.return_value = {"JobRun": {"JobRunState": expected_state}}
+        mock_context = mock.AsyncMock()
+        mock_context.__aenter__.return_value = mock_client
+        mock_context.__aexit__.return_value = None
+        mock_get_async_conn.return_value = mock_context
+
+        result = await hook.async_get_job_state(job_name, run_id)
+
+        assert result == expected_state
+        mock_client.get_job_run.assert_called_once_with(JobName=job_name, RunId=run_id)
+
+    @pytest.mark.asyncio
+    @mock.patch.object(GlueJobHook, "get_async_conn")
+    async def test_async_get_job_state_retry_on_client_error(self, mock_get_async_conn):
+        hook = GlueJobHook()
+        job_name = "test_job"
+        run_id = "test_run_id"
+        expected_state = "FAILED"
+
+        mock_client = mock.AsyncMock()
+        mock_client.get_job_run.side_effect = [
+            ClientError(
+                {"Error": {"Code": "ServiceUnavailable", "Message": "Service temporarily unavailable"}},
+                "get_job_run",
+            ),
+            {"JobRun": {"JobRunState": expected_state}},
+        ]
+        mock_context = mock.AsyncMock()
+        mock_context.__aenter__.return_value = mock_client
+        mock_context.__aexit__.return_value = None
+        mock_get_async_conn.return_value = mock_context
+
+        result = await hook.async_get_job_state(job_name, run_id)
+
+        assert result == expected_state
+        assert mock_client.get_job_run.call_count == 2
+
+    @pytest.mark.asyncio
+    @mock.patch.object(GlueJobHook, "get_async_conn")
+    async def test_async_get_job_state_fails_after_all_retries(self, mock_get_async_conn):
+        hook = GlueJobHook()
+        job_name = "test_job"
+        run_id = "test_run_id"
+
+        mock_client = mock.AsyncMock()
+        mock_client.get_job_run.side_effect = ClientError(
+            {"Error": {"Code": "ServiceUnavailable", "Message": "Service temporarily unavailable"}},
+            "get_job_run",
+        )
+        mock_context = mock.AsyncMock()
+        mock_context.__aenter__.return_value = mock_client
+        mock_context.__aexit__.return_value = None
+        mock_get_async_conn.return_value = mock_context
+
+        with pytest.raises(ClientError) as exc_info:
+            await hook.async_get_job_state(job_name, run_id)
+
+        assert exc_info.value.response["Error"]["Code"] == "ServiceUnavailable"
+        assert mock_client.get_job_run.call_count == 5
+
 
 class TestGlueDataQualityHook:
     RUN_ID = "1234"
diff --git a/providers/amazon/tests/unit/amazon/aws/hooks/test_hooks_signature.py b/providers/amazon/tests/unit/amazon/aws/hooks/test_hooks_signature.py
index f2537226183bd..fc5654961def8 100644
--- a/providers/amazon/tests/unit/amazon/aws/hooks/test_hooks_signature.py
+++ b/providers/amazon/tests/unit/amazon/aws/hooks/test_hooks_signature.py
@@ -58,6 +58,7 @@
         "retry_limit",
         "num_of_dpus",
         "script_location",
+        "api_retry_args",
     },
     "S3Hook": {"transfer_config_args", "aws_conn_id", "extra_args"},
 }

From 885e40c5c77abab39fd51678bddf436fff2ae7e8 Mon Sep 17 00:00:00 2001
From: Jake Roach <116606359+jroachgolf84@users.noreply.github.com>
Date: Thu, 26 Jun 2025 10:07:57 -0400
Subject: [PATCH 207/381] Ensure  `HttpHook.run()` does not alter
 `extra_options` passed to it (#51893)

* Prevent alteration of the extra_options dict

* Removing TODO's

* Updating unit test naming, no change in logic

* Removing pop logic in favor of get, where applicable

* Changing deepcopy to shallow copy

* Validating that extra_options is not modified
---
 .../src/airflow/providers/http/hooks/http.py  | 135 +++++++++++-------
 .../http/tests/unit/http/hooks/test_http.py   |   9 +-
 2 files changed, 90 insertions(+), 54 deletions(-)

diff --git a/providers/http/src/airflow/providers/http/hooks/http.py b/providers/http/src/airflow/providers/http/hooks/http.py
index aabc5af4a418d..99281fbe0e928 100644
--- a/providers/http/src/airflow/providers/http/hooks/http.py
+++ b/providers/http/src/airflow/providers/http/hooks/http.py
@@ -17,6 +17,7 @@
 # under the License.
 from __future__ import annotations
 
+import copy
 from typing import TYPE_CHECKING, Any, Callable
 from urllib.parse import urlparse
 
@@ -48,37 +49,50 @@ def _url_from_endpoint(base_url: str | None, endpoint: str | None) -> str:
     return (base_url or "") + (endpoint or "")
 
 
-def _process_extra_options_from_connection(conn: Connection, extra_options: dict[str, Any]) -> dict:
-    extra = conn.extra_dejson
-    stream = extra.pop("stream", None)
-    cert = extra.pop("cert", None)
-    proxies = extra.pop("proxies", extra.pop("proxy", None))
-    timeout = extra.pop("timeout", None)
-    verify_ssl = extra.pop("verify", extra.pop("verify_ssl", None))
-    allow_redirects = extra.pop("allow_redirects", None)
-    max_redirects = extra.pop("max_redirects", None)
-    trust_env = extra.pop("trust_env", None)
-    check_response = extra.pop("check_response", None)
-
-    if stream is not None and "stream" not in extra_options:
-        extra_options["stream"] = stream
-    if cert is not None and "cert" not in extra_options:
-        extra_options["cert"] = cert
-    if proxies is not None and "proxy" not in extra_options:
-        extra_options["proxy"] = proxies
-    if timeout is not None and "timeout" not in extra_options:
-        extra_options["timeout"] = timeout
-    if verify_ssl is not None and "verify_ssl" not in extra_options:
-        extra_options["verify_ssl"] = verify_ssl
-    if allow_redirects is not None and "allow_redirects" not in extra_options:
-        extra_options["allow_redirects"] = allow_redirects
-    if max_redirects is not None and "max_redirects" not in extra_options:
-        extra_options["max_redirects"] = max_redirects
-    if trust_env is not None and "trust_env" not in extra_options:
-        extra_options["trust_env"] = trust_env
-    if check_response is not None and "check_response" not in extra_options:
-        extra_options["check_response"] = check_response
-    return extra
+def _process_extra_options_from_connection(
+    conn: Connection, extra_options: dict[str, Any]
+) -> tuple[dict[str, Any], dict[str, Any]]:
+    """
+    Return the updated extra options from the connection, as well as those passed.
+
+    :param conn: The HTTP Connection object passed to the Hook
+    :param extra_options: Use-defined extra options
+    :return: (tuple)
+    """
+    # Copy, to prevent changing conn.extra_dejson and extra_options
+    conn_extra_options: dict = copy.copy(conn.extra_dejson)
+    passed_extra_options: dict = copy.copy(extra_options)
+
+    stream = conn_extra_options.pop("stream", None)
+    cert = conn_extra_options.pop("cert", None)
+    proxies = conn_extra_options.pop("proxies", conn_extra_options.pop("proxy", None))
+    timeout = conn_extra_options.pop("timeout", None)
+    verify_ssl = conn_extra_options.pop("verify", conn_extra_options.pop("verify_ssl", None))
+    allow_redirects = conn_extra_options.pop("allow_redirects", None)
+    max_redirects = conn_extra_options.pop("max_redirects", None)
+    trust_env = conn_extra_options.pop("trust_env", None)
+    check_response = conn_extra_options.pop("check_response", None)
+
+    if stream is not None and "stream" not in passed_extra_options:
+        passed_extra_options["stream"] = stream
+    if cert is not None and "cert" not in passed_extra_options:
+        passed_extra_options["cert"] = cert
+    if proxies is not None and "proxy" not in passed_extra_options:
+        passed_extra_options["proxy"] = proxies
+    if timeout is not None and "timeout" not in passed_extra_options:
+        passed_extra_options["timeout"] = timeout
+    if verify_ssl is not None and "verify_ssl" not in passed_extra_options:
+        passed_extra_options["verify_ssl"] = verify_ssl
+    if allow_redirects is not None and "allow_redirects" not in passed_extra_options:
+        passed_extra_options["allow_redirects"] = allow_redirects
+    if max_redirects is not None and "max_redirects" not in passed_extra_options:
+        passed_extra_options["max_redirects"] = max_redirects
+    if trust_env is not None and "trust_env" not in passed_extra_options:
+        passed_extra_options["trust_env"] = trust_env
+    if check_response is not None and "check_response" not in passed_extra_options:
+        passed_extra_options["check_response"] = check_response
+
+    return conn_extra_options, passed_extra_options
 
 
 class HttpHook(BaseHook):
@@ -96,7 +110,6 @@ class HttpHook(BaseHook):
     :param tcp_keep_alive_count: The TCP Keep Alive count parameter (corresponds to ``socket.TCP_KEEPCNT``)
     :param tcp_keep_alive_interval: The TCP Keep Alive interval parameter (corresponds to
         ``socket.TCP_KEEPINTVL``)
-    :param auth_args: extra arguments used to initialize the auth_type if different than default HTTPBasicAuth
     """
 
     conn_name_attr = "http_conn_id"
@@ -135,6 +148,8 @@ def __init__(
         else:
             self.keep_alive_adapter = None
 
+        self.merged_extra: dict = {}
+
     @property
     def auth_type(self):
         return self._auth_type or HTTPBasicAuth
@@ -159,8 +174,14 @@ def get_conn(
         connection = self.get_connection(self.http_conn_id)
         self._set_base_url(connection)
         session = self._configure_session_from_auth(session, connection)
+
+        # Since get_conn can be called outside of run, we'll check this again
+        extra_options = extra_options or {}
+
         if connection.extra or extra_options:
+            # These are being passed from to _configure_session_from_extra, no manipulation has been done yet
             session = self._configure_session_from_extra(session, connection, extra_options)
+
         session = self._configure_session_from_mount_adapters(session)
         if self.default_headers:
             session.headers.update(self.default_headers)
@@ -194,21 +215,33 @@ def _extract_auth(self, connection: Connection) -> Any | None:
         return None
 
     def _configure_session_from_extra(
-        self, session: Session, connection: Connection, extra_options: dict[str, Any] | None = None
+        self, session: Session, connection: Connection, extra_options: dict[str, Any]
     ) -> Session:
-        if extra_options is None:
-            extra_options = {}
-        headers = _process_extra_options_from_connection(connection, extra_options)
-        session.proxies = extra_options.pop("proxies", extra_options.pop("proxy", {}))
-        session.stream = extra_options.pop("stream", False)
-        session.verify = extra_options.pop("verify", extra_options.pop("verify_ssl", True))
-        session.cert = extra_options.pop("cert", None)
-        session.max_redirects = extra_options.pop("max_redirects", DEFAULT_REDIRECT_LIMIT)
-        session.trust_env = extra_options.pop("trust_env", True)
+        """
+        Configure the session using both the extra field from the Connection and passed in extra_options.
+
+        :param session: (Session)
+        :param connection: HTTP Connection passed into Hook
+        :param extra_options: (dict)
+        :return: (Session)
+        """
+        # This is going to update self.merged_extra, which will be used below
+        conn_extra_options, self.merged_extra = _process_extra_options_from_connection(
+            connection, extra_options
+        )
+
+        session.proxies = self.merged_extra.get("proxies", self.merged_extra.get("proxy", {}))
+        session.stream = self.merged_extra.get("stream", False)
+        session.verify = self.merged_extra.get("verify", self.merged_extra.get("verify_ssl", True))
+        session.cert = self.merged_extra.get("cert", None)
+        session.max_redirects = self.merged_extra.get("max_redirects", DEFAULT_REDIRECT_LIMIT)
+        session.trust_env = self.merged_extra.get("trust_env", True)
+
         try:
-            session.headers.update(headers)
+            session.headers.update(conn_extra_options)
         except TypeError:
             self.log.warning("Connection to %s has invalid extra field.", connection.host)
+
         return session
 
     def _configure_session_from_mount_adapters(self, session: Session) -> Session:
@@ -245,9 +278,7 @@ def run(
             For example, ``run(json=obj)`` is passed as ``requests.Request(json=obj)``
         """
         extra_options = extra_options or {}
-
-        session = self.get_conn(headers, extra_options)
-
+        session = self.get_conn(headers, extra_options)  # This sets self.merged_extra, which is used later
         url = self.url_from_endpoint(endpoint)
 
         if self.method == "GET":
@@ -262,7 +293,9 @@ def run(
 
         prepped_request = session.prepare_request(req)
         self.log.debug("Sending '%s' to url: %s", self.method, url)
-        return self.run_and_check(session, prepped_request, extra_options)
+
+        # This is referencing self.merged_extra, which is update by _process ...
+        return self.run_and_check(session, prepped_request, self.merged_extra)
 
     def check_response(self, response: Response) -> None:
         """
@@ -294,8 +327,6 @@ def run_and_check(
             i.e. ``{'check_response': False}`` to avoid checking raising exceptions on non 2XX
             or 3XX status codes
         """
-        extra_options = extra_options or {}
-
         settings = session.merge_environment_settings(
             prepped_request.url,
             proxies=session.proxies,
@@ -439,10 +470,12 @@ async def run(
             if conn.login:
                 auth = self.auth_type(conn.login, conn.password)
             if conn.extra:
-                extra = _process_extra_options_from_connection(conn=conn, extra_options=extra_options)
+                conn_extra_options, extra_options = _process_extra_options_from_connection(
+                    conn=conn, extra_options=extra_options
+                )
 
                 try:
-                    _headers.update(extra)
+                    _headers.update(conn_extra_options)
                 except TypeError:
                     self.log.warning("Connection to %s has invalid extra field.", conn.host)
         if headers:
diff --git a/providers/http/tests/unit/http/hooks/test_http.py b/providers/http/tests/unit/http/hooks/test_http.py
index f3e9f8a81d059..9f60fee30edac 100644
--- a/providers/http/tests/unit/http/hooks/test_http.py
+++ b/providers/http/tests/unit/http/hooks/test_http.py
@@ -642,9 +642,11 @@ def test_process_extra_options_from_connection(self):
             }
         )()
 
-        actual = _process_extra_options_from_connection(conn=conn, extra_options=extra_options)
+        actual_conn_extra, actual_merged_extra = _process_extra_options_from_connection(
+            conn=conn, extra_options=extra_options
+        )
 
-        assert extra_options == {
+        assert actual_merged_extra == {
             "cert": "cert.crt",
             "stream": True,
             "proxy": proxy,
@@ -654,7 +656,8 @@ def test_process_extra_options_from_connection(self):
             "max_redirects": 3,
             "trust_env": False,
         }
-        assert actual == {"bearer": "test"}
+        assert actual_conn_extra == {"bearer": "test"}
+        assert extra_options == {}
 
 
 class TestHttpAsyncHook:

From 8409fb816124f1875c4fc467a9ecf13ecda78086 Mon Sep 17 00:00:00 2001
From: Pierre Jeambrun <pierrejbrun@gmail.com>
Date: Thu, 26 Jun 2025 16:08:23 +0200
Subject: [PATCH 208/381] Remove double call to plugin init (#52291)

---
 airflow-core/src/airflow/api_fastapi/app.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/airflow-core/src/airflow/api_fastapi/app.py b/airflow-core/src/airflow/api_fastapi/app.py
index 2d2afef0f2609..36b59630d0b65 100644
--- a/airflow-core/src/airflow/api_fastapi/app.py
+++ b/airflow-core/src/airflow/api_fastapi/app.py
@@ -170,7 +170,6 @@ def init_plugins(app: FastAPI) -> None:
     """Integrate FastAPI app, middlewares and UI plugins."""
     from airflow import plugins_manager
 
-    plugins_manager.initialize_fastapi_plugins()
     plugins_manager.initialize_fastapi_plugins()
 
     # After calling initialize_fastapi_plugins, fastapi_apps cannot be None anymore.

From 593dc557c2c780d7097b2cea35a08815daec70c9 Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Thu, 26 Jun 2025 15:17:34 +0100
Subject: [PATCH 209/381] Remove unused import Sequence from the
 celery_executor.py (#52290)

---
 .../src/airflow/providers/celery/executors/celery_executor.py    | 1 -
 1 file changed, 1 deletion(-)

diff --git a/providers/celery/src/airflow/providers/celery/executors/celery_executor.py b/providers/celery/src/airflow/providers/celery/executors/celery_executor.py
index 3b97475bab2c2..6160b055a3ef9 100644
--- a/providers/celery/src/airflow/providers/celery/executors/celery_executor.py
+++ b/providers/celery/src/airflow/providers/celery/executors/celery_executor.py
@@ -30,7 +30,6 @@
 import operator
 import time
 from collections import Counter
-from collections.abc import Sequence
 from concurrent.futures import ProcessPoolExecutor
 from multiprocessing import cpu_count
 from typing import TYPE_CHECKING, Any

From 003566820cecf6c6a2ad14fb22366d3c03e60207 Mon Sep 17 00:00:00 2001
From: Atul Singh <atulkumar.singh@astronomer.io>
Date: Thu, 26 Jun 2025 19:50:28 +0530
Subject: [PATCH 210/381] Deprecated import fix for TimeDeltaSensorAsync in
 example dags (#52285)

Co-authored-by: Atul Singh <atulsingh@Atuls-MacBook-Pro.local>
---
 .../example_dags/example_time_delta_sensor_async.py        | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/airflow-core/src/airflow/example_dags/example_time_delta_sensor_async.py b/airflow-core/src/airflow/example_dags/example_time_delta_sensor_async.py
index 7b847e6871e37..726fa2cf5c5df 100644
--- a/airflow-core/src/airflow/example_dags/example_time_delta_sensor_async.py
+++ b/airflow-core/src/airflow/example_dags/example_time_delta_sensor_async.py
@@ -16,8 +16,7 @@
 # specific language governing permissions and limitations
 # under the License.
 """
-Example DAG demonstrating ``TimeDeltaSensorAsync``, a drop in replacement for ``TimeDeltaSensor`` that
-defers and doesn't occupy a worker slot while it waits
+Example DAG demonstrating ``TimeDeltaSensor``, that defers and doesn't occupy a worker slot while it waits
 """
 
 from __future__ import annotations
@@ -27,7 +26,7 @@
 import pendulum
 
 from airflow.providers.standard.operators.empty import EmptyOperator
-from airflow.providers.standard.sensors.time_delta import TimeDeltaSensorAsync
+from airflow.providers.standard.sensors.time_delta import TimeDeltaSensor
 from airflow.sdk import DAG
 
 with DAG(
@@ -37,6 +36,6 @@
     catchup=False,
     tags=["example"],
 ) as dag:
-    wait = TimeDeltaSensorAsync(task_id="wait", delta=datetime.timedelta(seconds=30))
+    wait = TimeDeltaSensor(task_id="wait", delta=datetime.timedelta(seconds=30), deferrable=True)
     finish = EmptyOperator(task_id="finish")
     wait >> finish

From eaa8ca07a42a813444a67cd262a0a41f24a5d4f7 Mon Sep 17 00:00:00 2001
From: Daniel Standish <15932138+dstandish@users.noreply.github.com>
Date: Thu, 26 Jun 2025 08:53:56 -0700
Subject: [PATCH 211/381] Grid view optimization (#51805)

The headline here is, with 6k tasks in a dag, loading time for 10 runs drops from 1.5m to < 10s in a quick local test.

I split it into smaller more purpose-specific requests that each do less. So we have one request for just the structure, and another one for TI states (per dag run). I also find ways to stop refreshing when there's no active dag run (or the particular dag run is not active and its tis don't need refreshing. I also changed the "latest dag run" query (which checks for a new run triggered externally to be simpler dedicated endpoint. It runs every couple seconds even when there is nothing going on and now it takes 10ms instead of 300ms.

---------

Co-authored-by: Jed Cunningham <66968678+jedcunningham@users.noreply.github.com>
---
 .../core_api/datamodels/ui/common.py          |  43 ++
 .../core_api/datamodels/ui/grid.py            |  17 +-
 .../core_api/openapi/_private_ui.yaml         | 438 ++++++++++++++++-
 .../api_fastapi/core_api/routes/ui/grid.py    | 345 +++++++++++++-
 .../api_fastapi/core_api/services/ui/grid.py  |  60 +++
 .../airflow/ui/openapi-gen/queries/common.ts  |  35 ++
 .../ui/openapi-gen/queries/ensureQueryData.ts |  79 ++++
 .../ui/openapi-gen/queries/prefetch.ts        |  79 ++++
 .../airflow/ui/openapi-gen/queries/queries.ts |  79 ++++
 .../ui/openapi-gen/queries/suspense.ts        |  79 ++++
 .../ui/openapi-gen/requests/schemas.gen.ts    | 215 ++++++++-
 .../ui/openapi-gen/requests/services.gen.ts   | 133 +++++-
 .../ui/openapi-gen/requests/types.gen.ts      | 181 ++++++-
 .../ui/src/components/DurationChart.tsx       |  17 +-
 .../ui/src/layouts/Details/DagRunSelect.tsx   |  23 +-
 .../ui/src/layouts/Details/Grid/Bar.tsx       |  19 +-
 .../ui/src/layouts/Details/Grid/Grid.tsx      |  70 +--
 .../Details/Grid/TaskInstancesColumn.tsx      |   5 +-
 .../ui/src/layouts/Details/Grid/utils.ts      |  46 +-
 .../ui/src/layouts/Details/ToggleGroups.tsx   |  15 +-
 .../ui/src/pages/Dag/Overview/Overview.tsx    |  26 +-
 .../src/airflow/ui/src/pages/DagRuns.tsx      |   4 +-
 .../ui/src/pages/Task/GroupTaskHeader.tsx     |   5 +-
 .../src/airflow/ui/src/pages/Task/Task.tsx    |  18 +-
 .../src/airflow/ui/src/queries/useGrid.ts     |  72 ---
 .../src/airflow/ui/src/queries/useGridRuns.ts |  44 ++
 .../ui/src/queries/useGridStructure.ts        |  49 ++
 .../ui/src/queries/useGridTISummaries.ts      |  46 ++
 .../ui/src/queries/useRefreshOnNewDagRuns.ts  |  12 +-
 .../src/airflow/ui/src/utils/groupTask.ts     |  11 +-
 airflow-core/src/airflow/utils/task_group.py  |  38 ++
 .../core_api/routes/ui/test_grid.py           | 446 ++++++------------
 32 files changed, 2231 insertions(+), 518 deletions(-)
 delete mode 100644 airflow-core/src/airflow/ui/src/queries/useGrid.ts
 create mode 100644 airflow-core/src/airflow/ui/src/queries/useGridRuns.ts
 create mode 100644 airflow-core/src/airflow/ui/src/queries/useGridStructure.ts
 create mode 100644 airflow-core/src/airflow/ui/src/queries/useGridTISummaries.ts

diff --git a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/ui/common.py b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/ui/common.py
index cc4d7913b2244..0f315326194e5 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/ui/common.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/ui/common.py
@@ -17,9 +17,14 @@
 
 from __future__ import annotations
 
+from datetime import datetime
 from typing import Generic, Literal, TypeVar
 
+from pydantic import computed_field
+
 from airflow.api_fastapi.core_api.base import BaseModel
+from airflow.utils.state import TaskInstanceState
+from airflow.utils.types import DagRunType
 
 
 class BaseEdgeResponse(BaseModel):
@@ -52,8 +57,46 @@ class BaseNodeResponse(BaseModel):
 N = TypeVar("N", bound=BaseNodeResponse)
 
 
+class GridNodeResponse(BaseModel):
+    """Base Node serializer for responses."""
+
+    id: str
+    label: str
+    children: list[GridNodeResponse] | None = None
+    is_mapped: bool | None
+    setup_teardown_type: Literal["setup", "teardown"] | None = None
+
+
+class GridRunsResponse(BaseModel):
+    """Base Node serializer for responses."""
+
+    dag_id: str
+    run_id: str
+    queued_at: datetime | None
+    start_date: datetime | None
+    end_date: datetime | None
+    run_after: datetime
+    state: TaskInstanceState | None
+    run_type: DagRunType
+
+    @computed_field
+    def duration(self) -> int | None:
+        if self.start_date and self.end_date:
+            return (self.end_date - self.start_date).seconds
+        return None
+
+
 class BaseGraphResponse(BaseModel, Generic[E, N]):
     """Base Graph serializer for responses."""
 
     edges: list[E]
     nodes: list[N]
+
+
+class LatestRunResponse(BaseModel):
+    """Base Node serializer for responses."""
+
+    id: int
+    dag_id: str
+    run_id: str
+    run_after: datetime
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/ui/grid.py b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/ui/grid.py
index 822eb6f3e1a89..48ea0ece79495 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/ui/grid.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/ui/grid.py
@@ -21,7 +21,6 @@
 
 from pydantic import BaseModel, Field
 
-from airflow.api_fastapi.core_api.datamodels.ui.structure import StructureDataResponse
 from airflow.utils.state import DagRunState, TaskInstanceState
 from airflow.utils.types import DagRunType
 
@@ -40,6 +39,13 @@ class GridTaskInstanceSummary(BaseModel):
     note: str | None
 
 
+class LightGridTaskInstanceSummary(BaseModel):
+    """Task Instance Summary model for the Grid UI."""
+
+    task_id: str
+    state: TaskInstanceState | None
+
+
 class GridDAGRunwithTIs(BaseModel):
     """DAG Run model for the Grid UI."""
 
@@ -57,8 +63,15 @@ class GridDAGRunwithTIs(BaseModel):
     task_instances: list[GridTaskInstanceSummary]
 
 
+class GridTISummaries(BaseModel):
+    """DAG Run model for the Grid UI."""
+
+    run_id: str
+    dag_id: str
+    task_instances: list[LightGridTaskInstanceSummary]
+
+
 class GridResponse(BaseModel):
     """Response model for the Grid UI."""
 
     dag_runs: list[GridDAGRunwithTIs]
-    structure: StructureDataResponse
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml b/airflow-core/src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml
index 660580cbe8400..ffb90dcf6e03f 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml
+++ b/airflow-core/src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml
@@ -604,6 +604,293 @@ paths:
             application/json:
               schema:
                 $ref: '#/components/schemas/HTTPValidationError'
+  /ui/grid/structure/{dag_id}:
+    get:
+      tags:
+      - Grid
+      summary: Get Dag Structure
+      description: Return dag structure for grid view.
+      operationId: get_dag_structure
+      security:
+      - OAuth2PasswordBearer: []
+      parameters:
+      - name: dag_id
+        in: path
+        required: true
+        schema:
+          type: string
+          title: Dag Id
+      - name: offset
+        in: query
+        required: false
+        schema:
+          type: integer
+          minimum: 0
+          default: 0
+          title: Offset
+      - name: limit
+        in: query
+        required: false
+        schema:
+          type: integer
+          minimum: 0
+          default: 50
+          title: Limit
+      - name: order_by
+        in: query
+        required: false
+        schema:
+          type: string
+          default: id
+          title: Order By
+      - name: run_after_gte
+        in: query
+        required: false
+        schema:
+          anyOf:
+          - type: string
+            format: date-time
+          - type: 'null'
+          title: Run After Gte
+      - name: run_after_lte
+        in: query
+        required: false
+        schema:
+          anyOf:
+          - type: string
+            format: date-time
+          - type: 'null'
+          title: Run After Lte
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/GridNodeResponse'
+                title: Response Get Dag Structure
+        '400':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPExceptionResponse'
+          description: Bad Request
+        '404':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPExceptionResponse'
+          description: Not Found
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+  /ui/grid/runs/{dag_id}:
+    get:
+      tags:
+      - Grid
+      summary: Get Grid Runs
+      description: Get info about a run for the grid.
+      operationId: get_grid_runs
+      security:
+      - OAuth2PasswordBearer: []
+      parameters:
+      - name: dag_id
+        in: path
+        required: true
+        schema:
+          type: string
+          title: Dag Id
+      - name: offset
+        in: query
+        required: false
+        schema:
+          type: integer
+          minimum: 0
+          default: 0
+          title: Offset
+      - name: limit
+        in: query
+        required: false
+        schema:
+          type: integer
+          minimum: 0
+          default: 50
+          title: Limit
+      - name: order_by
+        in: query
+        required: false
+        schema:
+          type: string
+          default: id
+          title: Order By
+      - name: run_after_gte
+        in: query
+        required: false
+        schema:
+          anyOf:
+          - type: string
+            format: date-time
+          - type: 'null'
+          title: Run After Gte
+      - name: run_after_lte
+        in: query
+        required: false
+        schema:
+          anyOf:
+          - type: string
+            format: date-time
+          - type: 'null'
+          title: Run After Lte
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/GridRunsResponse'
+                title: Response Get Grid Runs
+        '400':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPExceptionResponse'
+          description: Bad Request
+        '404':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPExceptionResponse'
+          description: Not Found
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+  /ui/grid/ti_summaries/{dag_id}/{run_id}:
+    get:
+      tags:
+      - Grid
+      summary: Get Grid Ti Summaries
+      description: 'Get states for TIs / "groups" of TIs.
+
+
+        Essentially this is to know what color to put in the squares in the grid.
+
+
+        The tricky part here is that we aggregate the state for groups and mapped
+        tasks.
+
+
+        We don''t add all the TIs for mapped TIs -- we only add one entry for the
+        mapped task and
+
+        its state is an aggregate of its TI states.
+
+
+        And for task groups, we add a "task" for that which is not really a task but
+        is just
+
+        an entry that represents the group (so that we can show a filled in box when
+        the group
+
+        is not expanded) and its state is an agg of those within it.'
+      operationId: get_grid_ti_summaries
+      security:
+      - OAuth2PasswordBearer: []
+      parameters:
+      - name: dag_id
+        in: path
+        required: true
+        schema:
+          type: string
+          title: Dag Id
+      - name: run_id
+        in: path
+        required: true
+        schema:
+          type: string
+          title: Run Id
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GridTISummaries'
+        '400':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPExceptionResponse'
+          description: Bad Request
+        '404':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPExceptionResponse'
+          description: Not Found
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+  /ui/grid/latest_run/{dag_id}:
+    get:
+      tags:
+      - Grid
+      summary: Get Latest Run
+      description: 'Get information about the latest dag run by run_after.
+
+
+        This is used by the UI to figure out if it needs to rerun queries and resume
+        auto refresh.'
+      operationId: get_latest_run
+      security:
+      - OAuth2PasswordBearer: []
+      parameters:
+      - name: dag_id
+        in: path
+        required: true
+        schema:
+          type: string
+          title: Dag Id
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                anyOf:
+                - $ref: '#/components/schemas/LatestRunResponse'
+                - type: 'null'
+                title: Response Get Latest Run
+        '400':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPExceptionResponse'
+          description: Bad Request
+        '404':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPExceptionResponse'
+          description: Not Found
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
 components:
   schemas:
     BackfillCollectionResponse:
@@ -1469,6 +1756,41 @@ components:
       - task_instances
       title: GridDAGRunwithTIs
       description: DAG Run model for the Grid UI.
+    GridNodeResponse:
+      properties:
+        id:
+          type: string
+          title: Id
+        label:
+          type: string
+          title: Label
+        children:
+          anyOf:
+          - items:
+              $ref: '#/components/schemas/GridNodeResponse'
+            type: array
+          - type: 'null'
+          title: Children
+        is_mapped:
+          anyOf:
+          - type: boolean
+          - type: 'null'
+          title: Is Mapped
+        setup_teardown_type:
+          anyOf:
+          - type: string
+            enum:
+            - setup
+            - teardown
+          - type: 'null'
+          title: Setup Teardown Type
+      type: object
+      required:
+      - id
+      - label
+      - is_mapped
+      title: GridNodeResponse
+      description: Base Node serializer for responses.
     GridResponse:
       properties:
         dag_runs:
@@ -1476,14 +1798,86 @@ components:
             $ref: '#/components/schemas/GridDAGRunwithTIs'
           type: array
           title: Dag Runs
-        structure:
-          $ref: '#/components/schemas/StructureDataResponse'
       type: object
       required:
       - dag_runs
-      - structure
       title: GridResponse
       description: Response model for the Grid UI.
+    GridRunsResponse:
+      properties:
+        dag_id:
+          type: string
+          title: Dag Id
+        run_id:
+          type: string
+          title: Run Id
+        queued_at:
+          anyOf:
+          - type: string
+            format: date-time
+          - type: 'null'
+          title: Queued At
+        start_date:
+          anyOf:
+          - type: string
+            format: date-time
+          - type: 'null'
+          title: Start Date
+        end_date:
+          anyOf:
+          - type: string
+            format: date-time
+          - type: 'null'
+          title: End Date
+        run_after:
+          type: string
+          format: date-time
+          title: Run After
+        state:
+          anyOf:
+          - $ref: '#/components/schemas/TaskInstanceState'
+          - type: 'null'
+        run_type:
+          $ref: '#/components/schemas/DagRunType'
+        duration:
+          anyOf:
+          - type: integer
+          - type: 'null'
+          title: Duration
+          readOnly: true
+      type: object
+      required:
+      - dag_id
+      - run_id
+      - queued_at
+      - start_date
+      - end_date
+      - run_after
+      - state
+      - run_type
+      - duration
+      title: GridRunsResponse
+      description: Base Node serializer for responses.
+    GridTISummaries:
+      properties:
+        run_id:
+          type: string
+          title: Run Id
+        dag_id:
+          type: string
+          title: Dag Id
+        task_instances:
+          items:
+            $ref: '#/components/schemas/LightGridTaskInstanceSummary'
+          type: array
+          title: Task Instances
+      type: object
+      required:
+      - run_id
+      - dag_id
+      - task_instances
+      title: GridTISummaries
+      description: DAG Run model for the Grid UI.
     GridTaskInstanceSummary:
       properties:
         task_id:
@@ -1579,6 +1973,44 @@ components:
       - task_instance_states
       title: HistoricalMetricDataResponse
       description: Historical Metric Data serializer for responses.
+    LatestRunResponse:
+      properties:
+        id:
+          type: integer
+          title: Id
+        dag_id:
+          type: string
+          title: Dag Id
+        run_id:
+          type: string
+          title: Run Id
+        run_after:
+          type: string
+          format: date-time
+          title: Run After
+      type: object
+      required:
+      - id
+      - dag_id
+      - run_id
+      - run_after
+      title: LatestRunResponse
+      description: Base Node serializer for responses.
+    LightGridTaskInstanceSummary:
+      properties:
+        task_id:
+          type: string
+          title: Task Id
+        state:
+          anyOf:
+          - $ref: '#/components/schemas/TaskInstanceState'
+          - type: 'null'
+      type: object
+      required:
+      - task_id
+      - state
+      title: LightGridTaskInstanceSummary
+      description: Task Instance Summary model for the Grid UI.
     MenuItem:
       type: string
       enum:
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/routes/ui/grid.py b/airflow-core/src/airflow/api_fastapi/core_api/routes/ui/grid.py
index 09409335c2c09..ce1a582a511f7 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/routes/ui/grid.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/routes/ui/grid.py
@@ -42,23 +42,35 @@
     datetime_range_filter_factory,
 )
 from airflow.api_fastapi.common.router import AirflowRouter
+from airflow.api_fastapi.core_api.datamodels.ui.common import (
+    GridNodeResponse,
+    GridRunsResponse,
+    LatestRunResponse,
+)
 from airflow.api_fastapi.core_api.datamodels.ui.grid import (
     GridDAGRunwithTIs,
     GridResponse,
+    GridTISummaries,
 )
 from airflow.api_fastapi.core_api.openapi.exceptions import create_openapi_http_exception_doc
 from airflow.api_fastapi.core_api.security import requires_access_dag
 from airflow.api_fastapi.core_api.services.ui.grid import (
+    _find_aggregates,
+    _merge_node_dicts,
     fill_task_instance_summaries,
     get_child_task_map,
-    get_combined_structure,
-    get_structure_from_dag,
     get_task_group_map,
 )
-from airflow.models import DagRun, TaskInstance
 from airflow.models.dag_version import DagVersion
+from airflow.models.dagrun import DagRun
+from airflow.models.serialized_dag import SerializedDagModel
+from airflow.models.taskinstance import TaskInstance
 from airflow.models.taskinstancehistory import TaskInstanceHistory
 from airflow.utils.state import TaskInstanceState
+from airflow.utils.task_group import (
+    get_task_group_children_getter,
+    task_group_to_dict_grid,
+)
 
 log = structlog.get_logger(logger_name=__name__)
 grid_router = AirflowRouter(prefix="/grid", tags=["Grid"])
@@ -71,6 +83,7 @@
         Depends(requires_access_dag(method="GET", access_entity=DagAccessEntity.TASK_INSTANCE)),
         Depends(requires_access_dag(method="GET", access_entity=DagAccessEntity.RUN)),
     ],
+    response_model_exclude_none=True,
 )
 def grid_data(
     dag_id: str,
@@ -124,11 +137,9 @@ def grid_data(
     )
 
     dag_runs = list(session.scalars(dag_runs_select_filter).unique())
-
     # Check if there are any DAG Runs with given criteria to eliminate unnecessary queries/errors
     if not dag_runs:
-        structure = get_structure_from_dag(dag=dag)
-        return GridResponse(dag_runs=[], structure=structure)
+        return GridResponse(dag_runs=[])
 
     # Retrieve, sort and encode the Task Instances
     tis_of_dag_runs, _ = paginated_select(
@@ -257,8 +268,324 @@ def grid_data(
         )
         for dag_run in dag_runs
     ]
+    return GridResponse(dag_runs=grid_dag_runs)
+
+
+def _get_latest_serdag(dag_id, session):
+    serdag = session.scalar(
+        select(SerializedDagModel)
+        .where(
+            SerializedDagModel.dag_id == dag_id,
+        )
+        .order_by(SerializedDagModel.id.desc())
+        .limit(1)
+    )
+    if not serdag:
+        raise HTTPException(
+            status.HTTP_404_NOT_FOUND,
+            f"Dag with id {dag_id} was not found",
+        )
+    return serdag
+
+
+def _get_serdag(dag_id, dag_version_id, session) -> SerializedDagModel | None:
+    # this is a simplification - we account for structure based on the first task
+    version = session.scalar(select(DagVersion).where(DagVersion.id == dag_version_id))
+    if not version:
+        version = session.scalar(
+            select(DagVersion)
+            .where(
+                DagVersion.dag_id == dag_id,
+            )
+            .order_by(DagVersion.id)  # ascending cus this is mostly for pre-3.0 upgrade
+            .limit(1)
+        )
+    if not (serdag := version.serialized_dag):
+        log.error(
+            "No serialized dag found",
+            dag_id=dag_id,
+            version_id=version.id,
+            version_number=version.version_number,
+        )
+    return serdag
+
+
+@grid_router.get(
+    "/structure/{dag_id}",
+    responses=create_openapi_http_exception_doc([status.HTTP_400_BAD_REQUEST, status.HTTP_404_NOT_FOUND]),
+    dependencies=[
+        Depends(requires_access_dag(method="GET", access_entity=DagAccessEntity.TASK_INSTANCE)),
+        Depends(requires_access_dag(method="GET", access_entity=DagAccessEntity.RUN)),
+    ],
+    response_model_exclude_none=True,
+)
+def get_dag_structure(
+    dag_id: str,
+    session: SessionDep,
+    offset: QueryOffset,
+    limit: QueryLimit,
+    order_by: Annotated[
+        SortParam,
+        Depends(SortParam(["run_after", "logical_date", "start_date", "end_date"], DagRun).dynamic_depends()),
+    ],
+    run_after: Annotated[RangeFilter, Depends(datetime_range_filter_factory("run_after", DagRun))],
+) -> list[GridNodeResponse]:
+    """Return dag structure for grid view."""
+    latest_serdag = _get_latest_serdag(dag_id, session)
+    latest_dag = latest_serdag.dag
 
-    flat_tis = itertools.chain.from_iterable(tis_by_run_id.values())
-    structure = get_combined_structure(task_instances=flat_tis, session=session)
+    # Retrieve, sort the previous DAG Runs
+    base_query = select(DagRun.id).where(DagRun.dag_id == dag_id)
+    # This comparison is to fall back to DAG timetable when no order_by is provided
+    if order_by.value == order_by.get_primary_key_string():
+        ordering = list(latest_dag.timetable.run_ordering)
+        order_by = SortParam(
+            allowed_attrs=ordering,
+            model=DagRun,
+        ).set_value(ordering[0])
+    dag_runs_select_filter, _ = paginated_select(
+        statement=base_query,
+        order_by=order_by,
+        offset=offset,
+        filters=[run_after],
+        limit=limit,
+    )
+    run_ids = list(session.scalars(dag_runs_select_filter))
+
+    task_group_sort = get_task_group_children_getter()
+    if not run_ids:
+        nodes = [task_group_to_dict_grid(x) for x in task_group_sort(latest_dag.task_group)]
+        return nodes
 
-    return GridResponse(dag_runs=grid_dag_runs, structure=structure)
+    serdags = session.scalars(
+        select(SerializedDagModel).where(
+            SerializedDagModel.dag_version_id.in_(
+                select(TaskInstance.dag_version_id)
+                .join(TaskInstance.dag_run)
+                .where(
+                    DagRun.id.in_(run_ids),
+                    SerializedDagModel.id != latest_serdag.id,
+                )
+            )
+        )
+    )
+    merged_nodes: list[GridNodeResponse] = []
+    dags = [latest_dag]
+    for serdag in serdags:
+        if serdag:
+            dags.append(serdag.dag)
+    for dag in dags:
+        nodes = [task_group_to_dict_grid(x) for x in task_group_sort(dag.task_group)]
+        _merge_node_dicts(merged_nodes, nodes)
+
+    return merged_nodes
+
+
+@grid_router.get(
+    "/runs/{dag_id}",
+    responses=create_openapi_http_exception_doc(
+        [
+            status.HTTP_400_BAD_REQUEST,
+            status.HTTP_404_NOT_FOUND,
+        ]
+    ),
+    dependencies=[
+        Depends(
+            requires_access_dag(
+                method="GET",
+                access_entity=DagAccessEntity.TASK_INSTANCE,
+            )
+        ),
+        Depends(
+            requires_access_dag(
+                method="GET",
+                access_entity=DagAccessEntity.RUN,
+            )
+        ),
+    ],
+    response_model_exclude_none=True,
+)
+def get_grid_runs(
+    dag_id: str,
+    session: SessionDep,
+    offset: QueryOffset,
+    limit: QueryLimit,
+    order_by: Annotated[
+        SortParam,
+        Depends(
+            SortParam(
+                [
+                    "run_after",
+                    "logical_date",
+                    "start_date",
+                    "end_date",
+                ],
+                DagRun,
+            ).dynamic_depends()
+        ),
+    ],
+    run_after: Annotated[RangeFilter, Depends(datetime_range_filter_factory("run_after", DagRun))],
+) -> list[GridRunsResponse]:
+    """Get info about a run for the grid."""
+    # Retrieve, sort the previous DAG Runs
+    base_query = select(
+        DagRun.dag_id,
+        DagRun.run_id,
+        DagRun.queued_at,
+        DagRun.start_date,
+        DagRun.end_date,
+        DagRun.run_after,
+        DagRun.state,
+        DagRun.run_type,
+    ).where(DagRun.dag_id == dag_id)
+
+    # This comparison is to fall back to DAG timetable when no order_by is provided
+    if order_by.value == order_by.get_primary_key_string():
+        latest_serdag = _get_latest_serdag(dag_id, session)
+        latest_dag = latest_serdag.dag
+        ordering = list(latest_dag.timetable.run_ordering)
+        order_by = SortParam(
+            allowed_attrs=ordering,
+            model=DagRun,
+        ).set_value(ordering[0])
+    dag_runs_select_filter, _ = paginated_select(
+        statement=base_query,
+        order_by=order_by,
+        offset=offset,
+        filters=[run_after],
+        limit=limit,
+    )
+    return session.execute(dag_runs_select_filter)
+
+
+@grid_router.get(
+    "/ti_summaries/{dag_id}/{run_id}",
+    responses=create_openapi_http_exception_doc(
+        [
+            status.HTTP_400_BAD_REQUEST,
+            status.HTTP_404_NOT_FOUND,
+        ]
+    ),
+    dependencies=[
+        Depends(
+            requires_access_dag(
+                method="GET",
+                access_entity=DagAccessEntity.TASK_INSTANCE,
+            )
+        ),
+        Depends(
+            requires_access_dag(
+                method="GET",
+                access_entity=DagAccessEntity.RUN,
+            )
+        ),
+    ],
+    response_model_exclude_none=True,
+)
+def get_grid_ti_summaries(
+    dag_id: str,
+    run_id: str,
+    session: SessionDep,
+) -> GridTISummaries:
+    """
+    Get states for TIs / "groups" of TIs.
+
+    Essentially this is to know what color to put in the squares in the grid.
+
+    The tricky part here is that we aggregate the state for groups and mapped tasks.
+
+    We don't add all the TIs for mapped TIs -- we only add one entry for the mapped task and
+    its state is an aggregate of its TI states.
+
+    And for task groups, we add a "task" for that which is not really a task but is just
+    an entry that represents the group (so that we can show a filled in box when the group
+    is not expanded) and its state is an agg of those within it.
+    """
+    tis_of_dag_runs, _ = paginated_select(
+        statement=(
+            select(
+                TaskInstance.task_id,
+                TaskInstance.state,
+                TaskInstance.dag_version_id,
+            )
+            .where(TaskInstance.dag_id == dag_id)
+            .where(
+                TaskInstance.run_id == run_id,
+            )
+        ),
+        filters=[],
+        order_by=SortParam(allowed_attrs=["task_id", "run_id"], model=TaskInstance).set_value("task_id"),
+        limit=None,
+        return_total_entries=False,
+    )
+    task_instances = list(session.execute(tis_of_dag_runs))
+    task_id_states = collections.defaultdict(list)
+    for ti in task_instances:
+        task_id_states[ti.task_id].append(ti.state)
+
+    serdag = _get_serdag(
+        dag_id=dag_id,
+        dag_version_id=task_instances[0].dag_version_id,
+        session=session,
+    )
+    if not serdag:
+        raise HTTPException(status.HTTP_404_NOT_FOUND, f"Dag with id {dag_id} was not found")
+    tis = list(
+        _find_aggregates(
+            node=serdag.dag.task_group,
+            parent_node=None,
+            ti_states=task_id_states,
+        )
+    )
+
+    return {  # type: ignore[return-value]
+        "run_id": run_id,
+        "dag_id": dag_id,
+        "task_instances": list(tis),
+    }
+
+
+@grid_router.get(
+    "/latest_run/{dag_id}",
+    responses=create_openapi_http_exception_doc(
+        [
+            status.HTTP_400_BAD_REQUEST,
+            status.HTTP_404_NOT_FOUND,
+        ]
+    ),
+    dependencies=[
+        Depends(
+            requires_access_dag(
+                method="GET",
+                access_entity=DagAccessEntity.TASK_INSTANCE,
+            )
+        ),
+        Depends(
+            requires_access_dag(
+                method="GET",
+                access_entity=DagAccessEntity.RUN,
+            )
+        ),
+    ],
+    response_model_exclude_none=True,
+)
+def get_latest_run(
+    dag_id: str,
+    session: SessionDep,
+) -> LatestRunResponse | None:
+    """
+    Get information about the latest dag run by run_after.
+
+    This is used by the UI to figure out if it needs to rerun queries and resume auto refresh.
+    """
+    return session.execute(
+        select(
+            DagRun.id,
+            DagRun.dag_id,
+            DagRun.run_id,
+            DagRun.run_after,
+        )
+        .where(DagRun.dag_id == dag_id)
+        .order_by(DagRun.run_after.desc())
+        .limit(1)
+    ).one_or_none()
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/services/ui/grid.py b/airflow-core/src/airflow/api_fastapi/core_api/services/ui/grid.py
index 346676e14cd48..a69cafb7bbbda 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/services/ui/grid.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/services/ui/grid.py
@@ -18,6 +18,8 @@
 from __future__ import annotations
 
 import contextlib
+from collections import Counter
+from collections.abc import Iterable
 from uuid import UUID
 
 import structlog
@@ -309,3 +311,61 @@ def _get_node_by_id(nodes, node_id):
         if node["id"] == node_id:
             return node
     return {}
+
+
+def _is_task_node_mapped_task_group(task_node: BaseOperator | MappedTaskGroup | TaskMap | None) -> bool:
+    """Check if the Task Node is a Mapped Task Group."""
+    return type(task_node) is MappedTaskGroup
+
+
+def agg_state(states):
+    states = Counter(states)
+    for state in state_priority:
+        if state in states:
+            return state
+    return "no_status"
+
+
+def _find_aggregates(
+    node: TaskGroup | BaseOperator | MappedTaskGroup | TaskMap,
+    parent_node: TaskGroup | BaseOperator | MappedTaskGroup | TaskMap | None,
+    ti_states: dict[str, list[str]],
+) -> Iterable[dict]:
+    """Recursively fill the Task Group Map."""
+    node_id = node.node_id
+    parent_id = parent_node.node_id if parent_node else None
+
+    if node is None:
+        return
+
+    if isinstance(node, MappedOperator):
+        yield {
+            "task_id": node_id,
+            "type": "mapped_task",
+            "parent_id": parent_id,
+            "state": agg_state(ti_states[node_id]),
+        }
+
+        return
+    if isinstance(node, TaskGroup):
+        states = []
+        for child in get_task_group_children_getter()(node):
+            for child_node in _find_aggregates(node=child, parent_node=node, ti_states=ti_states):
+                states.append(child_node["state"])
+                yield child_node
+        if node_id:
+            yield {
+                "task_id": node_id,
+                "type": "group",
+                "parent_id": parent_id,
+                "state": agg_state(states),
+            }
+        return
+    if isinstance(node, BaseOperator):
+        yield {
+            "task_id": node_id,
+            "type": "task",
+            "parent_id": parent_id,
+            "state": agg_state(ti_states[node_id]),
+        }
+        return
diff --git a/airflow-core/src/airflow/ui/openapi-gen/queries/common.ts b/airflow-core/src/airflow/ui/openapi-gen/queries/common.ts
index 4c187c5575a21..d538e3e617596 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/queries/common.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/queries/common.ts
@@ -669,6 +669,41 @@ export const UseGridServiceGridDataKeyFn = ({ dagId, includeDownstream, includeU
   runType?: string[];
   state?: string[];
 }, queryKey?: Array<unknown>) => [useGridServiceGridDataKey, ...(queryKey ?? [{ dagId, includeDownstream, includeUpstream, limit, logicalDateGte, logicalDateLte, offset, orderBy, root, runAfterGte, runAfterLte, runType, state }])];
+export type GridServiceGetDagStructureDefaultResponse = Awaited<ReturnType<typeof GridService.getDagStructure>>;
+export type GridServiceGetDagStructureQueryResult<TData = GridServiceGetDagStructureDefaultResponse, TError = unknown> = UseQueryResult<TData, TError>;
+export const useGridServiceGetDagStructureKey = "GridServiceGetDagStructure";
+export const UseGridServiceGetDagStructureKeyFn = ({ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }: {
+  dagId: string;
+  limit?: number;
+  offset?: number;
+  orderBy?: string;
+  runAfterGte?: string;
+  runAfterLte?: string;
+}, queryKey?: Array<unknown>) => [useGridServiceGetDagStructureKey, ...(queryKey ?? [{ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }])];
+export type GridServiceGetGridRunsDefaultResponse = Awaited<ReturnType<typeof GridService.getGridRuns>>;
+export type GridServiceGetGridRunsQueryResult<TData = GridServiceGetGridRunsDefaultResponse, TError = unknown> = UseQueryResult<TData, TError>;
+export const useGridServiceGetGridRunsKey = "GridServiceGetGridRuns";
+export const UseGridServiceGetGridRunsKeyFn = ({ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }: {
+  dagId: string;
+  limit?: number;
+  offset?: number;
+  orderBy?: string;
+  runAfterGte?: string;
+  runAfterLte?: string;
+}, queryKey?: Array<unknown>) => [useGridServiceGetGridRunsKey, ...(queryKey ?? [{ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }])];
+export type GridServiceGetGridTiSummariesDefaultResponse = Awaited<ReturnType<typeof GridService.getGridTiSummaries>>;
+export type GridServiceGetGridTiSummariesQueryResult<TData = GridServiceGetGridTiSummariesDefaultResponse, TError = unknown> = UseQueryResult<TData, TError>;
+export const useGridServiceGetGridTiSummariesKey = "GridServiceGetGridTiSummaries";
+export const UseGridServiceGetGridTiSummariesKeyFn = ({ dagId, runId }: {
+  dagId: string;
+  runId: string;
+}, queryKey?: Array<unknown>) => [useGridServiceGetGridTiSummariesKey, ...(queryKey ?? [{ dagId, runId }])];
+export type GridServiceGetLatestRunDefaultResponse = Awaited<ReturnType<typeof GridService.getLatestRun>>;
+export type GridServiceGetLatestRunQueryResult<TData = GridServiceGetLatestRunDefaultResponse, TError = unknown> = UseQueryResult<TData, TError>;
+export const useGridServiceGetLatestRunKey = "GridServiceGetLatestRun";
+export const UseGridServiceGetLatestRunKeyFn = ({ dagId }: {
+  dagId: string;
+}, queryKey?: Array<unknown>) => [useGridServiceGetLatestRunKey, ...(queryKey ?? [{ dagId }])];
 export type AssetServiceCreateAssetEventMutationResult = Awaited<ReturnType<typeof AssetService.createAssetEvent>>;
 export type AssetServiceMaterializeAssetMutationResult = Awaited<ReturnType<typeof AssetService.materializeAsset>>;
 export type BackfillServiceCreateBackfillMutationResult = Awaited<ReturnType<typeof BackfillService.createBackfill>>;
diff --git a/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts b/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts
index a82b28a403ac2..5ba5f5f3620c7 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts
@@ -1259,3 +1259,82 @@ export const ensureUseGridServiceGridDataData = (queryClient: QueryClient, { dag
   runType?: string[];
   state?: string[];
 }) => queryClient.ensureQueryData({ queryKey: Common.UseGridServiceGridDataKeyFn({ dagId, includeDownstream, includeUpstream, limit, logicalDateGte, logicalDateLte, offset, orderBy, root, runAfterGte, runAfterLte, runType, state }), queryFn: () => GridService.gridData({ dagId, includeDownstream, includeUpstream, limit, logicalDateGte, logicalDateLte, offset, orderBy, root, runAfterGte, runAfterLte, runType, state }) });
+/**
+* Get Dag Structure
+* Return dag structure for grid view.
+* @param data The data for the request.
+* @param data.dagId
+* @param data.offset
+* @param data.limit
+* @param data.orderBy
+* @param data.runAfterGte
+* @param data.runAfterLte
+* @returns GridNodeResponse Successful Response
+* @throws ApiError
+*/
+export const ensureUseGridServiceGetDagStructureData = (queryClient: QueryClient, { dagId, limit, offset, orderBy, runAfterGte, runAfterLte }: {
+  dagId: string;
+  limit?: number;
+  offset?: number;
+  orderBy?: string;
+  runAfterGte?: string;
+  runAfterLte?: string;
+}) => queryClient.ensureQueryData({ queryKey: Common.UseGridServiceGetDagStructureKeyFn({ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }), queryFn: () => GridService.getDagStructure({ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }) });
+/**
+* Get Grid Runs
+* Get info about a run for the grid.
+* @param data The data for the request.
+* @param data.dagId
+* @param data.offset
+* @param data.limit
+* @param data.orderBy
+* @param data.runAfterGte
+* @param data.runAfterLte
+* @returns GridRunsResponse Successful Response
+* @throws ApiError
+*/
+export const ensureUseGridServiceGetGridRunsData = (queryClient: QueryClient, { dagId, limit, offset, orderBy, runAfterGte, runAfterLte }: {
+  dagId: string;
+  limit?: number;
+  offset?: number;
+  orderBy?: string;
+  runAfterGte?: string;
+  runAfterLte?: string;
+}) => queryClient.ensureQueryData({ queryKey: Common.UseGridServiceGetGridRunsKeyFn({ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }), queryFn: () => GridService.getGridRuns({ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }) });
+/**
+* Get Grid Ti Summaries
+* Get states for TIs / "groups" of TIs.
+*
+* Essentially this is to know what color to put in the squares in the grid.
+*
+* The tricky part here is that we aggregate the state for groups and mapped tasks.
+*
+* We don't add all the TIs for mapped TIs -- we only add one entry for the mapped task and
+* its state is an aggregate of its TI states.
+*
+* And for task groups, we add a "task" for that which is not really a task but is just
+* an entry that represents the group (so that we can show a filled in box when the group
+* is not expanded) and its state is an agg of those within it.
+* @param data The data for the request.
+* @param data.dagId
+* @param data.runId
+* @returns GridTISummaries Successful Response
+* @throws ApiError
+*/
+export const ensureUseGridServiceGetGridTiSummariesData = (queryClient: QueryClient, { dagId, runId }: {
+  dagId: string;
+  runId: string;
+}) => queryClient.ensureQueryData({ queryKey: Common.UseGridServiceGetGridTiSummariesKeyFn({ dagId, runId }), queryFn: () => GridService.getGridTiSummaries({ dagId, runId }) });
+/**
+* Get Latest Run
+* Get information about the latest dag run by run_after.
+*
+* This is used by the UI to figure out if it needs to rerun queries and resume auto refresh.
+* @param data The data for the request.
+* @param data.dagId
+* @returns unknown Successful Response
+* @throws ApiError
+*/
+export const ensureUseGridServiceGetLatestRunData = (queryClient: QueryClient, { dagId }: {
+  dagId: string;
+}) => queryClient.ensureQueryData({ queryKey: Common.UseGridServiceGetLatestRunKeyFn({ dagId }), queryFn: () => GridService.getLatestRun({ dagId }) });
diff --git a/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts b/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts
index 041d8282ecf64..f878624e22eb4 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts
@@ -1259,3 +1259,82 @@ export const prefetchUseGridServiceGridData = (queryClient: QueryClient, { dagId
   runType?: string[];
   state?: string[];
 }) => queryClient.prefetchQuery({ queryKey: Common.UseGridServiceGridDataKeyFn({ dagId, includeDownstream, includeUpstream, limit, logicalDateGte, logicalDateLte, offset, orderBy, root, runAfterGte, runAfterLte, runType, state }), queryFn: () => GridService.gridData({ dagId, includeDownstream, includeUpstream, limit, logicalDateGte, logicalDateLte, offset, orderBy, root, runAfterGte, runAfterLte, runType, state }) });
+/**
+* Get Dag Structure
+* Return dag structure for grid view.
+* @param data The data for the request.
+* @param data.dagId
+* @param data.offset
+* @param data.limit
+* @param data.orderBy
+* @param data.runAfterGte
+* @param data.runAfterLte
+* @returns GridNodeResponse Successful Response
+* @throws ApiError
+*/
+export const prefetchUseGridServiceGetDagStructure = (queryClient: QueryClient, { dagId, limit, offset, orderBy, runAfterGte, runAfterLte }: {
+  dagId: string;
+  limit?: number;
+  offset?: number;
+  orderBy?: string;
+  runAfterGte?: string;
+  runAfterLte?: string;
+}) => queryClient.prefetchQuery({ queryKey: Common.UseGridServiceGetDagStructureKeyFn({ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }), queryFn: () => GridService.getDagStructure({ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }) });
+/**
+* Get Grid Runs
+* Get info about a run for the grid.
+* @param data The data for the request.
+* @param data.dagId
+* @param data.offset
+* @param data.limit
+* @param data.orderBy
+* @param data.runAfterGte
+* @param data.runAfterLte
+* @returns GridRunsResponse Successful Response
+* @throws ApiError
+*/
+export const prefetchUseGridServiceGetGridRuns = (queryClient: QueryClient, { dagId, limit, offset, orderBy, runAfterGte, runAfterLte }: {
+  dagId: string;
+  limit?: number;
+  offset?: number;
+  orderBy?: string;
+  runAfterGte?: string;
+  runAfterLte?: string;
+}) => queryClient.prefetchQuery({ queryKey: Common.UseGridServiceGetGridRunsKeyFn({ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }), queryFn: () => GridService.getGridRuns({ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }) });
+/**
+* Get Grid Ti Summaries
+* Get states for TIs / "groups" of TIs.
+*
+* Essentially this is to know what color to put in the squares in the grid.
+*
+* The tricky part here is that we aggregate the state for groups and mapped tasks.
+*
+* We don't add all the TIs for mapped TIs -- we only add one entry for the mapped task and
+* its state is an aggregate of its TI states.
+*
+* And for task groups, we add a "task" for that which is not really a task but is just
+* an entry that represents the group (so that we can show a filled in box when the group
+* is not expanded) and its state is an agg of those within it.
+* @param data The data for the request.
+* @param data.dagId
+* @param data.runId
+* @returns GridTISummaries Successful Response
+* @throws ApiError
+*/
+export const prefetchUseGridServiceGetGridTiSummaries = (queryClient: QueryClient, { dagId, runId }: {
+  dagId: string;
+  runId: string;
+}) => queryClient.prefetchQuery({ queryKey: Common.UseGridServiceGetGridTiSummariesKeyFn({ dagId, runId }), queryFn: () => GridService.getGridTiSummaries({ dagId, runId }) });
+/**
+* Get Latest Run
+* Get information about the latest dag run by run_after.
+*
+* This is used by the UI to figure out if it needs to rerun queries and resume auto refresh.
+* @param data The data for the request.
+* @param data.dagId
+* @returns unknown Successful Response
+* @throws ApiError
+*/
+export const prefetchUseGridServiceGetLatestRun = (queryClient: QueryClient, { dagId }: {
+  dagId: string;
+}) => queryClient.prefetchQuery({ queryKey: Common.UseGridServiceGetLatestRunKeyFn({ dagId }), queryFn: () => GridService.getLatestRun({ dagId }) });
diff --git a/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts b/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts
index ca8a496c167e7..3e3ba37467f1c 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts
@@ -1260,6 +1260,85 @@ export const useGridServiceGridData = <TData = Common.GridServiceGridDataDefault
   state?: string[];
 }, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">) => useQuery<TData, TError>({ queryKey: Common.UseGridServiceGridDataKeyFn({ dagId, includeDownstream, includeUpstream, limit, logicalDateGte, logicalDateLte, offset, orderBy, root, runAfterGte, runAfterLte, runType, state }, queryKey), queryFn: () => GridService.gridData({ dagId, includeDownstream, includeUpstream, limit, logicalDateGte, logicalDateLte, offset, orderBy, root, runAfterGte, runAfterLte, runType, state }) as TData, ...options });
 /**
+* Get Dag Structure
+* Return dag structure for grid view.
+* @param data The data for the request.
+* @param data.dagId
+* @param data.offset
+* @param data.limit
+* @param data.orderBy
+* @param data.runAfterGte
+* @param data.runAfterLte
+* @returns GridNodeResponse Successful Response
+* @throws ApiError
+*/
+export const useGridServiceGetDagStructure = <TData = Common.GridServiceGetDagStructureDefaultResponse, TError = unknown, TQueryKey extends Array<unknown> = unknown[]>({ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }: {
+  dagId: string;
+  limit?: number;
+  offset?: number;
+  orderBy?: string;
+  runAfterGte?: string;
+  runAfterLte?: string;
+}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">) => useQuery<TData, TError>({ queryKey: Common.UseGridServiceGetDagStructureKeyFn({ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }, queryKey), queryFn: () => GridService.getDagStructure({ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }) as TData, ...options });
+/**
+* Get Grid Runs
+* Get info about a run for the grid.
+* @param data The data for the request.
+* @param data.dagId
+* @param data.offset
+* @param data.limit
+* @param data.orderBy
+* @param data.runAfterGte
+* @param data.runAfterLte
+* @returns GridRunsResponse Successful Response
+* @throws ApiError
+*/
+export const useGridServiceGetGridRuns = <TData = Common.GridServiceGetGridRunsDefaultResponse, TError = unknown, TQueryKey extends Array<unknown> = unknown[]>({ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }: {
+  dagId: string;
+  limit?: number;
+  offset?: number;
+  orderBy?: string;
+  runAfterGte?: string;
+  runAfterLte?: string;
+}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">) => useQuery<TData, TError>({ queryKey: Common.UseGridServiceGetGridRunsKeyFn({ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }, queryKey), queryFn: () => GridService.getGridRuns({ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }) as TData, ...options });
+/**
+* Get Grid Ti Summaries
+* Get states for TIs / "groups" of TIs.
+*
+* Essentially this is to know what color to put in the squares in the grid.
+*
+* The tricky part here is that we aggregate the state for groups and mapped tasks.
+*
+* We don't add all the TIs for mapped TIs -- we only add one entry for the mapped task and
+* its state is an aggregate of its TI states.
+*
+* And for task groups, we add a "task" for that which is not really a task but is just
+* an entry that represents the group (so that we can show a filled in box when the group
+* is not expanded) and its state is an agg of those within it.
+* @param data The data for the request.
+* @param data.dagId
+* @param data.runId
+* @returns GridTISummaries Successful Response
+* @throws ApiError
+*/
+export const useGridServiceGetGridTiSummaries = <TData = Common.GridServiceGetGridTiSummariesDefaultResponse, TError = unknown, TQueryKey extends Array<unknown> = unknown[]>({ dagId, runId }: {
+  dagId: string;
+  runId: string;
+}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">) => useQuery<TData, TError>({ queryKey: Common.UseGridServiceGetGridTiSummariesKeyFn({ dagId, runId }, queryKey), queryFn: () => GridService.getGridTiSummaries({ dagId, runId }) as TData, ...options });
+/**
+* Get Latest Run
+* Get information about the latest dag run by run_after.
+*
+* This is used by the UI to figure out if it needs to rerun queries and resume auto refresh.
+* @param data The data for the request.
+* @param data.dagId
+* @returns unknown Successful Response
+* @throws ApiError
+*/
+export const useGridServiceGetLatestRun = <TData = Common.GridServiceGetLatestRunDefaultResponse, TError = unknown, TQueryKey extends Array<unknown> = unknown[]>({ dagId }: {
+  dagId: string;
+}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">) => useQuery<TData, TError>({ queryKey: Common.UseGridServiceGetLatestRunKeyFn({ dagId }, queryKey), queryFn: () => GridService.getLatestRun({ dagId }) as TData, ...options });
+/**
 * Create Asset Event
 * Create asset events.
 * @param data The data for the request.
diff --git a/airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts b/airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts
index 17e46fa8bb18f..2ebe843edb37e 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts
@@ -1259,3 +1259,82 @@ export const useGridServiceGridDataSuspense = <TData = Common.GridServiceGridDat
   runType?: string[];
   state?: string[];
 }, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">) => useSuspenseQuery<TData, TError>({ queryKey: Common.UseGridServiceGridDataKeyFn({ dagId, includeDownstream, includeUpstream, limit, logicalDateGte, logicalDateLte, offset, orderBy, root, runAfterGte, runAfterLte, runType, state }, queryKey), queryFn: () => GridService.gridData({ dagId, includeDownstream, includeUpstream, limit, logicalDateGte, logicalDateLte, offset, orderBy, root, runAfterGte, runAfterLte, runType, state }) as TData, ...options });
+/**
+* Get Dag Structure
+* Return dag structure for grid view.
+* @param data The data for the request.
+* @param data.dagId
+* @param data.offset
+* @param data.limit
+* @param data.orderBy
+* @param data.runAfterGte
+* @param data.runAfterLte
+* @returns GridNodeResponse Successful Response
+* @throws ApiError
+*/
+export const useGridServiceGetDagStructureSuspense = <TData = Common.GridServiceGetDagStructureDefaultResponse, TError = unknown, TQueryKey extends Array<unknown> = unknown[]>({ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }: {
+  dagId: string;
+  limit?: number;
+  offset?: number;
+  orderBy?: string;
+  runAfterGte?: string;
+  runAfterLte?: string;
+}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">) => useSuspenseQuery<TData, TError>({ queryKey: Common.UseGridServiceGetDagStructureKeyFn({ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }, queryKey), queryFn: () => GridService.getDagStructure({ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }) as TData, ...options });
+/**
+* Get Grid Runs
+* Get info about a run for the grid.
+* @param data The data for the request.
+* @param data.dagId
+* @param data.offset
+* @param data.limit
+* @param data.orderBy
+* @param data.runAfterGte
+* @param data.runAfterLte
+* @returns GridRunsResponse Successful Response
+* @throws ApiError
+*/
+export const useGridServiceGetGridRunsSuspense = <TData = Common.GridServiceGetGridRunsDefaultResponse, TError = unknown, TQueryKey extends Array<unknown> = unknown[]>({ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }: {
+  dagId: string;
+  limit?: number;
+  offset?: number;
+  orderBy?: string;
+  runAfterGte?: string;
+  runAfterLte?: string;
+}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">) => useSuspenseQuery<TData, TError>({ queryKey: Common.UseGridServiceGetGridRunsKeyFn({ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }, queryKey), queryFn: () => GridService.getGridRuns({ dagId, limit, offset, orderBy, runAfterGte, runAfterLte }) as TData, ...options });
+/**
+* Get Grid Ti Summaries
+* Get states for TIs / "groups" of TIs.
+*
+* Essentially this is to know what color to put in the squares in the grid.
+*
+* The tricky part here is that we aggregate the state for groups and mapped tasks.
+*
+* We don't add all the TIs for mapped TIs -- we only add one entry for the mapped task and
+* its state is an aggregate of its TI states.
+*
+* And for task groups, we add a "task" for that which is not really a task but is just
+* an entry that represents the group (so that we can show a filled in box when the group
+* is not expanded) and its state is an agg of those within it.
+* @param data The data for the request.
+* @param data.dagId
+* @param data.runId
+* @returns GridTISummaries Successful Response
+* @throws ApiError
+*/
+export const useGridServiceGetGridTiSummariesSuspense = <TData = Common.GridServiceGetGridTiSummariesDefaultResponse, TError = unknown, TQueryKey extends Array<unknown> = unknown[]>({ dagId, runId }: {
+  dagId: string;
+  runId: string;
+}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">) => useSuspenseQuery<TData, TError>({ queryKey: Common.UseGridServiceGetGridTiSummariesKeyFn({ dagId, runId }, queryKey), queryFn: () => GridService.getGridTiSummaries({ dagId, runId }) as TData, ...options });
+/**
+* Get Latest Run
+* Get information about the latest dag run by run_after.
+*
+* This is used by the UI to figure out if it needs to rerun queries and resume auto refresh.
+* @param data The data for the request.
+* @param data.dagId
+* @returns unknown Successful Response
+* @throws ApiError
+*/
+export const useGridServiceGetLatestRunSuspense = <TData = Common.GridServiceGetLatestRunDefaultResponse, TError = unknown, TQueryKey extends Array<unknown> = unknown[]>({ dagId }: {
+  dagId: string;
+}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">) => useSuspenseQuery<TData, TError>({ queryKey: Common.UseGridServiceGetLatestRunKeyFn({ dagId }, queryKey), queryFn: () => GridService.getLatestRun({ dagId }) as TData, ...options });
diff --git a/airflow-core/src/airflow/ui/openapi-gen/requests/schemas.gen.ts b/airflow-core/src/airflow/ui/openapi-gen/requests/schemas.gen.ts
index 6f5f33136e54f..fceda3e7af1e2 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/requests/schemas.gen.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/requests/schemas.gen.ts
@@ -6732,6 +6732,60 @@ export const $GridDAGRunwithTIs = {
     description: 'DAG Run model for the Grid UI.'
 } as const;
 
+export const $GridNodeResponse = {
+    properties: {
+        id: {
+            type: 'string',
+            title: 'Id'
+        },
+        label: {
+            type: 'string',
+            title: 'Label'
+        },
+        children: {
+            anyOf: [
+                {
+                    items: {
+                        '$ref': '#/components/schemas/GridNodeResponse'
+                    },
+                    type: 'array'
+                },
+                {
+                    type: 'null'
+                }
+            ],
+            title: 'Children'
+        },
+        is_mapped: {
+            anyOf: [
+                {
+                    type: 'boolean'
+                },
+                {
+                    type: 'null'
+                }
+            ],
+            title: 'Is Mapped'
+        },
+        setup_teardown_type: {
+            anyOf: [
+                {
+                    type: 'string',
+                    enum: ['setup', 'teardown']
+                },
+                {
+                    type: 'null'
+                }
+            ],
+            title: 'Setup Teardown Type'
+        }
+    },
+    type: 'object',
+    required: ['id', 'label', 'is_mapped'],
+    title: 'GridNodeResponse',
+    description: 'Base Node serializer for responses.'
+} as const;
+
 export const $GridResponse = {
     properties: {
         dag_runs: {
@@ -6740,17 +6794,121 @@ export const $GridResponse = {
             },
             type: 'array',
             title: 'Dag Runs'
-        },
-        structure: {
-            '$ref': '#/components/schemas/StructureDataResponse'
         }
     },
     type: 'object',
-    required: ['dag_runs', 'structure'],
+    required: ['dag_runs'],
     title: 'GridResponse',
     description: 'Response model for the Grid UI.'
 } as const;
 
+export const $GridRunsResponse = {
+    properties: {
+        dag_id: {
+            type: 'string',
+            title: 'Dag Id'
+        },
+        run_id: {
+            type: 'string',
+            title: 'Run Id'
+        },
+        queued_at: {
+            anyOf: [
+                {
+                    type: 'string',
+                    format: 'date-time'
+                },
+                {
+                    type: 'null'
+                }
+            ],
+            title: 'Queued At'
+        },
+        start_date: {
+            anyOf: [
+                {
+                    type: 'string',
+                    format: 'date-time'
+                },
+                {
+                    type: 'null'
+                }
+            ],
+            title: 'Start Date'
+        },
+        end_date: {
+            anyOf: [
+                {
+                    type: 'string',
+                    format: 'date-time'
+                },
+                {
+                    type: 'null'
+                }
+            ],
+            title: 'End Date'
+        },
+        run_after: {
+            type: 'string',
+            format: 'date-time',
+            title: 'Run After'
+        },
+        state: {
+            anyOf: [
+                {
+                    '$ref': '#/components/schemas/TaskInstanceState'
+                },
+                {
+                    type: 'null'
+                }
+            ]
+        },
+        run_type: {
+            '$ref': '#/components/schemas/DagRunType'
+        },
+        duration: {
+            anyOf: [
+                {
+                    type: 'integer'
+                },
+                {
+                    type: 'null'
+                }
+            ],
+            title: 'Duration',
+            readOnly: true
+        }
+    },
+    type: 'object',
+    required: ['dag_id', 'run_id', 'queued_at', 'start_date', 'end_date', 'run_after', 'state', 'run_type', 'duration'],
+    title: 'GridRunsResponse',
+    description: 'Base Node serializer for responses.'
+} as const;
+
+export const $GridTISummaries = {
+    properties: {
+        run_id: {
+            type: 'string',
+            title: 'Run Id'
+        },
+        dag_id: {
+            type: 'string',
+            title: 'Dag Id'
+        },
+        task_instances: {
+            items: {
+                '$ref': '#/components/schemas/LightGridTaskInstanceSummary'
+            },
+            type: 'array',
+            title: 'Task Instances'
+        }
+    },
+    type: 'object',
+    required: ['run_id', 'dag_id', 'task_instances'],
+    title: 'GridTISummaries',
+    description: 'DAG Run model for the Grid UI.'
+} as const;
+
 export const $GridTaskInstanceSummary = {
     properties: {
         task_id: {
@@ -6861,6 +7019,55 @@ export const $HistoricalMetricDataResponse = {
     description: 'Historical Metric Data serializer for responses.'
 } as const;
 
+export const $LatestRunResponse = {
+    properties: {
+        id: {
+            type: 'integer',
+            title: 'Id'
+        },
+        dag_id: {
+            type: 'string',
+            title: 'Dag Id'
+        },
+        run_id: {
+            type: 'string',
+            title: 'Run Id'
+        },
+        run_after: {
+            type: 'string',
+            format: 'date-time',
+            title: 'Run After'
+        }
+    },
+    type: 'object',
+    required: ['id', 'dag_id', 'run_id', 'run_after'],
+    title: 'LatestRunResponse',
+    description: 'Base Node serializer for responses.'
+} as const;
+
+export const $LightGridTaskInstanceSummary = {
+    properties: {
+        task_id: {
+            type: 'string',
+            title: 'Task Id'
+        },
+        state: {
+            anyOf: [
+                {
+                    '$ref': '#/components/schemas/TaskInstanceState'
+                },
+                {
+                    type: 'null'
+                }
+            ]
+        }
+    },
+    type: 'object',
+    required: ['task_id', 'state'],
+    title: 'LightGridTaskInstanceSummary',
+    description: 'Task Instance Summary model for the Grid UI.'
+} as const;
+
 export const $MenuItem = {
     type: 'string',
     enum: ['Assets', 'Audit Log', 'Config', 'Connections', 'Dags', 'Docs', 'Plugins', 'Pools', 'Providers', 'Variables', 'XComs'],
diff --git a/airflow-core/src/airflow/ui/openapi-gen/requests/services.gen.ts b/airflow-core/src/airflow/ui/openapi-gen/requests/services.gen.ts
index 08ae1f9bb0052..02acbbca34361 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/requests/services.gen.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/requests/services.gen.ts
@@ -3,7 +3,7 @@
 import type { CancelablePromise } from './core/CancelablePromise';
 import { OpenAPI } from './core/OpenAPI';
 import { request as __request } from './core/request';
-import type { GetAssetsData, GetAssetsResponse, GetAssetAliasesData, GetAssetAliasesResponse, GetAssetAliasData, GetAssetAliasResponse, GetAssetEventsData, GetAssetEventsResponse, CreateAssetEventData, CreateAssetEventResponse, MaterializeAssetData, MaterializeAssetResponse, GetAssetQueuedEventsData, GetAssetQueuedEventsResponse, DeleteAssetQueuedEventsData, DeleteAssetQueuedEventsResponse, GetAssetData, GetAssetResponse, GetDagAssetQueuedEventsData, GetDagAssetQueuedEventsResponse, DeleteDagAssetQueuedEventsData, DeleteDagAssetQueuedEventsResponse, GetDagAssetQueuedEventData, GetDagAssetQueuedEventResponse, DeleteDagAssetQueuedEventData, DeleteDagAssetQueuedEventResponse, NextRunAssetsData, NextRunAssetsResponse, ListBackfillsData, ListBackfillsResponse, CreateBackfillData, CreateBackfillResponse, GetBackfillData, GetBackfillResponse, PauseBackfillData, PauseBackfillResponse, UnpauseBackfillData, UnpauseBackfillResponse, CancelBackfillData, CancelBackfillResponse, CreateBackfillDryRunData, CreateBackfillDryRunResponse, ListBackfillsUiData, ListBackfillsUiResponse, DeleteConnectionData, DeleteConnectionResponse, GetConnectionData, GetConnectionResponse, PatchConnectionData, PatchConnectionResponse, GetConnectionsData, GetConnectionsResponse, PostConnectionData, PostConnectionResponse, BulkConnectionsData, BulkConnectionsResponse, TestConnectionData, TestConnectionResponse, CreateDefaultConnectionsResponse, HookMetaDataResponse, GetDagRunData, GetDagRunResponse, DeleteDagRunData, DeleteDagRunResponse, PatchDagRunData, PatchDagRunResponse, GetUpstreamAssetEventsData, GetUpstreamAssetEventsResponse, ClearDagRunData, ClearDagRunResponse, GetDagRunsData, GetDagRunsResponse, TriggerDagRunData, TriggerDagRunResponse, GetListDagRunsBatchData, GetListDagRunsBatchResponse, GetDagSourceData, GetDagSourceResponse, GetDagStatsData, GetDagStatsResponse, GetDagReportsData, GetDagReportsResponse, GetConfigData, GetConfigResponse, GetConfigValueData, GetConfigValueResponse, GetConfigsResponse, ListDagWarningsData, ListDagWarningsResponse, GetDagsData, GetDagsResponse, PatchDagsData, PatchDagsResponse, GetDagData, GetDagResponse, PatchDagData, PatchDagResponse, DeleteDagData, DeleteDagResponse, GetDagDetailsData, GetDagDetailsResponse, GetDagTagsData, GetDagTagsResponse, GetDagsUiData, GetDagsUiResponse, GetEventLogData, GetEventLogResponse, GetEventLogsData, GetEventLogsResponse, GetExtraLinksData, GetExtraLinksResponse, GetTaskInstanceData, GetTaskInstanceResponse, PatchTaskInstanceData, PatchTaskInstanceResponse, DeleteTaskInstanceData, DeleteTaskInstanceResponse, GetMappedTaskInstancesData, GetMappedTaskInstancesResponse, GetTaskInstanceDependenciesByMapIndexData, GetTaskInstanceDependenciesByMapIndexResponse, GetTaskInstanceDependenciesData, GetTaskInstanceDependenciesResponse, GetTaskInstanceTriesData, GetTaskInstanceTriesResponse, GetMappedTaskInstanceTriesData, GetMappedTaskInstanceTriesResponse, GetMappedTaskInstanceData, GetMappedTaskInstanceResponse, PatchTaskInstanceByMapIndexData, PatchTaskInstanceByMapIndexResponse, GetTaskInstancesData, GetTaskInstancesResponse, BulkTaskInstancesData, BulkTaskInstancesResponse, GetTaskInstancesBatchData, GetTaskInstancesBatchResponse, GetTaskInstanceTryDetailsData, GetTaskInstanceTryDetailsResponse, GetMappedTaskInstanceTryDetailsData, GetMappedTaskInstanceTryDetailsResponse, PostClearTaskInstancesData, PostClearTaskInstancesResponse, PatchTaskInstanceDryRunByMapIndexData, PatchTaskInstanceDryRunByMapIndexResponse, PatchTaskInstanceDryRunData, PatchTaskInstanceDryRunResponse, GetLogData, GetLogResponse, GetExternalLogUrlData, GetExternalLogUrlResponse, GetImportErrorData, GetImportErrorResponse, GetImportErrorsData, GetImportErrorsResponse, GetJobsData, GetJobsResponse, GetPluginsData, GetPluginsResponse, ImportErrorsResponse, DeletePoolData, DeletePoolResponse, GetPoolData, GetPoolResponse, PatchPoolData, PatchPoolResponse, GetPoolsData, GetPoolsResponse, PostPoolData, PostPoolResponse, BulkPoolsData, BulkPoolsResponse, GetProvidersData, GetProvidersResponse, GetXcomEntryData, GetXcomEntryResponse, UpdateXcomEntryData, UpdateXcomEntryResponse, GetXcomEntriesData, GetXcomEntriesResponse, CreateXcomEntryData, CreateXcomEntryResponse, GetTasksData, GetTasksResponse, GetTaskData, GetTaskResponse, DeleteVariableData, DeleteVariableResponse, GetVariableData, GetVariableResponse, PatchVariableData, PatchVariableResponse, GetVariablesData, GetVariablesResponse, PostVariableData, PostVariableResponse, BulkVariablesData, BulkVariablesResponse, ReparseDagFileData, ReparseDagFileResponse, GetDagVersionData, GetDagVersionResponse, GetDagVersionsData, GetDagVersionsResponse, GetHealthResponse, GetVersionResponse, LoginData, LoginResponse, LogoutData, LogoutResponse, GetAuthMenusResponse, GetDependenciesData, GetDependenciesResponse, HistoricalMetricsData, HistoricalMetricsResponse, DagStatsResponse2, StructureDataData, StructureDataResponse2, GridDataData, GridDataResponse } from './types.gen';
+import type { GetAssetsData, GetAssetsResponse, GetAssetAliasesData, GetAssetAliasesResponse, GetAssetAliasData, GetAssetAliasResponse, GetAssetEventsData, GetAssetEventsResponse, CreateAssetEventData, CreateAssetEventResponse, MaterializeAssetData, MaterializeAssetResponse, GetAssetQueuedEventsData, GetAssetQueuedEventsResponse, DeleteAssetQueuedEventsData, DeleteAssetQueuedEventsResponse, GetAssetData, GetAssetResponse, GetDagAssetQueuedEventsData, GetDagAssetQueuedEventsResponse, DeleteDagAssetQueuedEventsData, DeleteDagAssetQueuedEventsResponse, GetDagAssetQueuedEventData, GetDagAssetQueuedEventResponse, DeleteDagAssetQueuedEventData, DeleteDagAssetQueuedEventResponse, NextRunAssetsData, NextRunAssetsResponse, ListBackfillsData, ListBackfillsResponse, CreateBackfillData, CreateBackfillResponse, GetBackfillData, GetBackfillResponse, PauseBackfillData, PauseBackfillResponse, UnpauseBackfillData, UnpauseBackfillResponse, CancelBackfillData, CancelBackfillResponse, CreateBackfillDryRunData, CreateBackfillDryRunResponse, ListBackfillsUiData, ListBackfillsUiResponse, DeleteConnectionData, DeleteConnectionResponse, GetConnectionData, GetConnectionResponse, PatchConnectionData, PatchConnectionResponse, GetConnectionsData, GetConnectionsResponse, PostConnectionData, PostConnectionResponse, BulkConnectionsData, BulkConnectionsResponse, TestConnectionData, TestConnectionResponse, CreateDefaultConnectionsResponse, HookMetaDataResponse, GetDagRunData, GetDagRunResponse, DeleteDagRunData, DeleteDagRunResponse, PatchDagRunData, PatchDagRunResponse, GetUpstreamAssetEventsData, GetUpstreamAssetEventsResponse, ClearDagRunData, ClearDagRunResponse, GetDagRunsData, GetDagRunsResponse, TriggerDagRunData, TriggerDagRunResponse, GetListDagRunsBatchData, GetListDagRunsBatchResponse, GetDagSourceData, GetDagSourceResponse, GetDagStatsData, GetDagStatsResponse, GetDagReportsData, GetDagReportsResponse, GetConfigData, GetConfigResponse, GetConfigValueData, GetConfigValueResponse, GetConfigsResponse, ListDagWarningsData, ListDagWarningsResponse, GetDagsData, GetDagsResponse, PatchDagsData, PatchDagsResponse, GetDagData, GetDagResponse, PatchDagData, PatchDagResponse, DeleteDagData, DeleteDagResponse, GetDagDetailsData, GetDagDetailsResponse, GetDagTagsData, GetDagTagsResponse, GetDagsUiData, GetDagsUiResponse, GetEventLogData, GetEventLogResponse, GetEventLogsData, GetEventLogsResponse, GetExtraLinksData, GetExtraLinksResponse, GetTaskInstanceData, GetTaskInstanceResponse, PatchTaskInstanceData, PatchTaskInstanceResponse, DeleteTaskInstanceData, DeleteTaskInstanceResponse, GetMappedTaskInstancesData, GetMappedTaskInstancesResponse, GetTaskInstanceDependenciesByMapIndexData, GetTaskInstanceDependenciesByMapIndexResponse, GetTaskInstanceDependenciesData, GetTaskInstanceDependenciesResponse, GetTaskInstanceTriesData, GetTaskInstanceTriesResponse, GetMappedTaskInstanceTriesData, GetMappedTaskInstanceTriesResponse, GetMappedTaskInstanceData, GetMappedTaskInstanceResponse, PatchTaskInstanceByMapIndexData, PatchTaskInstanceByMapIndexResponse, GetTaskInstancesData, GetTaskInstancesResponse, BulkTaskInstancesData, BulkTaskInstancesResponse, GetTaskInstancesBatchData, GetTaskInstancesBatchResponse, GetTaskInstanceTryDetailsData, GetTaskInstanceTryDetailsResponse, GetMappedTaskInstanceTryDetailsData, GetMappedTaskInstanceTryDetailsResponse, PostClearTaskInstancesData, PostClearTaskInstancesResponse, PatchTaskInstanceDryRunByMapIndexData, PatchTaskInstanceDryRunByMapIndexResponse, PatchTaskInstanceDryRunData, PatchTaskInstanceDryRunResponse, GetLogData, GetLogResponse, GetExternalLogUrlData, GetExternalLogUrlResponse, GetImportErrorData, GetImportErrorResponse, GetImportErrorsData, GetImportErrorsResponse, GetJobsData, GetJobsResponse, GetPluginsData, GetPluginsResponse, ImportErrorsResponse, DeletePoolData, DeletePoolResponse, GetPoolData, GetPoolResponse, PatchPoolData, PatchPoolResponse, GetPoolsData, GetPoolsResponse, PostPoolData, PostPoolResponse, BulkPoolsData, BulkPoolsResponse, GetProvidersData, GetProvidersResponse, GetXcomEntryData, GetXcomEntryResponse, UpdateXcomEntryData, UpdateXcomEntryResponse, GetXcomEntriesData, GetXcomEntriesResponse, CreateXcomEntryData, CreateXcomEntryResponse, GetTasksData, GetTasksResponse, GetTaskData, GetTaskResponse, DeleteVariableData, DeleteVariableResponse, GetVariableData, GetVariableResponse, PatchVariableData, PatchVariableResponse, GetVariablesData, GetVariablesResponse, PostVariableData, PostVariableResponse, BulkVariablesData, BulkVariablesResponse, ReparseDagFileData, ReparseDagFileResponse, GetDagVersionData, GetDagVersionResponse, GetDagVersionsData, GetDagVersionsResponse, GetHealthResponse, GetVersionResponse, LoginData, LoginResponse, LogoutData, LogoutResponse, GetAuthMenusResponse, GetDependenciesData, GetDependenciesResponse, HistoricalMetricsData, HistoricalMetricsResponse, DagStatsResponse2, StructureDataData, StructureDataResponse2, GridDataData, GridDataResponse, GetDagStructureData, GetDagStructureResponse, GetGridRunsData, GetGridRunsResponse, GetGridTiSummariesData, GetGridTiSummariesResponse, GetLatestRunData, GetLatestRunResponse } from './types.gen';
 
 export class AssetService {
     /**
@@ -3481,4 +3481,135 @@ export class GridService {
         });
     }
     
+    /**
+     * Get Dag Structure
+     * Return dag structure for grid view.
+     * @param data The data for the request.
+     * @param data.dagId
+     * @param data.offset
+     * @param data.limit
+     * @param data.orderBy
+     * @param data.runAfterGte
+     * @param data.runAfterLte
+     * @returns GridNodeResponse Successful Response
+     * @throws ApiError
+     */
+    public static getDagStructure(data: GetDagStructureData): CancelablePromise<GetDagStructureResponse> {
+        return __request(OpenAPI, {
+            method: 'GET',
+            url: '/ui/grid/structure/{dag_id}',
+            path: {
+                dag_id: data.dagId
+            },
+            query: {
+                offset: data.offset,
+                limit: data.limit,
+                order_by: data.orderBy,
+                run_after_gte: data.runAfterGte,
+                run_after_lte: data.runAfterLte
+            },
+            errors: {
+                400: 'Bad Request',
+                404: 'Not Found',
+                422: 'Validation Error'
+            }
+        });
+    }
+    
+    /**
+     * Get Grid Runs
+     * Get info about a run for the grid.
+     * @param data The data for the request.
+     * @param data.dagId
+     * @param data.offset
+     * @param data.limit
+     * @param data.orderBy
+     * @param data.runAfterGte
+     * @param data.runAfterLte
+     * @returns GridRunsResponse Successful Response
+     * @throws ApiError
+     */
+    public static getGridRuns(data: GetGridRunsData): CancelablePromise<GetGridRunsResponse> {
+        return __request(OpenAPI, {
+            method: 'GET',
+            url: '/ui/grid/runs/{dag_id}',
+            path: {
+                dag_id: data.dagId
+            },
+            query: {
+                offset: data.offset,
+                limit: data.limit,
+                order_by: data.orderBy,
+                run_after_gte: data.runAfterGte,
+                run_after_lte: data.runAfterLte
+            },
+            errors: {
+                400: 'Bad Request',
+                404: 'Not Found',
+                422: 'Validation Error'
+            }
+        });
+    }
+    
+    /**
+     * Get Grid Ti Summaries
+     * Get states for TIs / "groups" of TIs.
+     *
+     * Essentially this is to know what color to put in the squares in the grid.
+     *
+     * The tricky part here is that we aggregate the state for groups and mapped tasks.
+     *
+     * We don't add all the TIs for mapped TIs -- we only add one entry for the mapped task and
+     * its state is an aggregate of its TI states.
+     *
+     * And for task groups, we add a "task" for that which is not really a task but is just
+     * an entry that represents the group (so that we can show a filled in box when the group
+     * is not expanded) and its state is an agg of those within it.
+     * @param data The data for the request.
+     * @param data.dagId
+     * @param data.runId
+     * @returns GridTISummaries Successful Response
+     * @throws ApiError
+     */
+    public static getGridTiSummaries(data: GetGridTiSummariesData): CancelablePromise<GetGridTiSummariesResponse> {
+        return __request(OpenAPI, {
+            method: 'GET',
+            url: '/ui/grid/ti_summaries/{dag_id}/{run_id}',
+            path: {
+                dag_id: data.dagId,
+                run_id: data.runId
+            },
+            errors: {
+                400: 'Bad Request',
+                404: 'Not Found',
+                422: 'Validation Error'
+            }
+        });
+    }
+    
+    /**
+     * Get Latest Run
+     * Get information about the latest dag run by run_after.
+     *
+     * This is used by the UI to figure out if it needs to rerun queries and resume auto refresh.
+     * @param data The data for the request.
+     * @param data.dagId
+     * @returns unknown Successful Response
+     * @throws ApiError
+     */
+    public static getLatestRun(data: GetLatestRunData): CancelablePromise<GetLatestRunResponse> {
+        return __request(OpenAPI, {
+            method: 'GET',
+            url: '/ui/grid/latest_run/{dag_id}',
+            path: {
+                dag_id: data.dagId
+            },
+            errors: {
+                400: 'Bad Request',
+                404: 'Not Found',
+                422: 'Validation Error'
+            }
+        });
+    }
+    
 }
\ No newline at end of file
diff --git a/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts b/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts
index 692a290abccfe..18c4d48a09f94 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts
@@ -1713,12 +1713,46 @@ export type GridDAGRunwithTIs = {
     task_instances: Array<GridTaskInstanceSummary>;
 };
 
+/**
+ * Base Node serializer for responses.
+ */
+export type GridNodeResponse = {
+    id: string;
+    label: string;
+    children?: Array<GridNodeResponse> | null;
+    is_mapped: boolean | null;
+    setup_teardown_type?: 'setup' | 'teardown' | null;
+};
+
 /**
  * Response model for the Grid UI.
  */
 export type GridResponse = {
     dag_runs: Array<GridDAGRunwithTIs>;
-    structure: StructureDataResponse;
+};
+
+/**
+ * Base Node serializer for responses.
+ */
+export type GridRunsResponse = {
+    dag_id: string;
+    run_id: string;
+    queued_at: string | null;
+    start_date: string | null;
+    end_date: string | null;
+    run_after: string;
+    state: TaskInstanceState | null;
+    run_type: DagRunType;
+    readonly duration: number | null;
+};
+
+/**
+ * DAG Run model for the Grid UI.
+ */
+export type GridTISummaries = {
+    run_id: string;
+    dag_id: string;
+    task_instances: Array<LightGridTaskInstanceSummary>;
 };
 
 /**
@@ -1747,6 +1781,24 @@ export type HistoricalMetricDataResponse = {
     task_instance_states: TaskInstanceStateCount;
 };
 
+/**
+ * Base Node serializer for responses.
+ */
+export type LatestRunResponse = {
+    id: number;
+    dag_id: string;
+    run_id: string;
+    run_after: string;
+};
+
+/**
+ * Task Instance Summary model for the Grid UI.
+ */
+export type LightGridTaskInstanceSummary = {
+    task_id: string;
+    state: TaskInstanceState | null;
+};
+
 /**
  * Define all menu items defined in the menu.
  */
@@ -2826,6 +2878,41 @@ export type GridDataData = {
 
 export type GridDataResponse = GridResponse;
 
+export type GetDagStructureData = {
+    dagId: string;
+    limit?: number;
+    offset?: number;
+    orderBy?: string;
+    runAfterGte?: string | null;
+    runAfterLte?: string | null;
+};
+
+export type GetDagStructureResponse = Array<GridNodeResponse>;
+
+export type GetGridRunsData = {
+    dagId: string;
+    limit?: number;
+    offset?: number;
+    orderBy?: string;
+    runAfterGte?: string | null;
+    runAfterLte?: string | null;
+};
+
+export type GetGridRunsResponse = Array<GridRunsResponse>;
+
+export type GetGridTiSummariesData = {
+    dagId: string;
+    runId: string;
+};
+
+export type GetGridTiSummariesResponse = GridTISummaries;
+
+export type GetLatestRunData = {
+    dagId: string;
+};
+
+export type GetLatestRunResponse = LatestRunResponse | null;
+
 export type $OpenApiTs = {
     '/api/v2/assets': {
         get: {
@@ -5757,4 +5844,96 @@ export type $OpenApiTs = {
             };
         };
     };
+    '/ui/grid/structure/{dag_id}': {
+        get: {
+            req: GetDagStructureData;
+            res: {
+                /**
+                 * Successful Response
+                 */
+                200: Array<GridNodeResponse>;
+                /**
+                 * Bad Request
+                 */
+                400: HTTPExceptionResponse;
+                /**
+                 * Not Found
+                 */
+                404: HTTPExceptionResponse;
+                /**
+                 * Validation Error
+                 */
+                422: HTTPValidationError;
+            };
+        };
+    };
+    '/ui/grid/runs/{dag_id}': {
+        get: {
+            req: GetGridRunsData;
+            res: {
+                /**
+                 * Successful Response
+                 */
+                200: Array<GridRunsResponse>;
+                /**
+                 * Bad Request
+                 */
+                400: HTTPExceptionResponse;
+                /**
+                 * Not Found
+                 */
+                404: HTTPExceptionResponse;
+                /**
+                 * Validation Error
+                 */
+                422: HTTPValidationError;
+            };
+        };
+    };
+    '/ui/grid/ti_summaries/{dag_id}/{run_id}': {
+        get: {
+            req: GetGridTiSummariesData;
+            res: {
+                /**
+                 * Successful Response
+                 */
+                200: GridTISummaries;
+                /**
+                 * Bad Request
+                 */
+                400: HTTPExceptionResponse;
+                /**
+                 * Not Found
+                 */
+                404: HTTPExceptionResponse;
+                /**
+                 * Validation Error
+                 */
+                422: HTTPValidationError;
+            };
+        };
+    };
+    '/ui/grid/latest_run/{dag_id}': {
+        get: {
+            req: GetLatestRunData;
+            res: {
+                /**
+                 * Successful Response
+                 */
+                200: LatestRunResponse | null;
+                /**
+                 * Bad Request
+                 */
+                400: HTTPExceptionResponse;
+                /**
+                 * Not Found
+                 */
+                404: HTTPExceptionResponse;
+                /**
+                 * Validation Error
+                 */
+                422: HTTPValidationError;
+            };
+        };
+    };
 };
\ No newline at end of file
diff --git a/airflow-core/src/airflow/ui/src/components/DurationChart.tsx b/airflow-core/src/airflow/ui/src/components/DurationChart.tsx
index a6159a1f91d36..190ee70d496e6 100644
--- a/airflow-core/src/airflow/ui/src/components/DurationChart.tsx
+++ b/airflow-core/src/airflow/ui/src/components/DurationChart.tsx
@@ -34,7 +34,7 @@ import { Bar } from "react-chartjs-2";
 import { useTranslation } from "react-i18next";
 import { useNavigate } from "react-router-dom";
 
-import type { TaskInstanceResponse, DAGRunResponse } from "openapi/requests/types.gen";
+import type { TaskInstanceResponse, GridRunsResponse } from "openapi/requests/types.gen";
 import { system } from "src/theme";
 
 ChartJS.register(
@@ -54,7 +54,7 @@ const average = (ctx: PartialEventContext, index: number) => {
   return values === undefined ? 0 : values.reduce((initial, next) => initial + next, 0) / values.length;
 };
 
-type RunResponse = DAGRunResponse | TaskInstanceResponse;
+type RunResponse = GridRunsResponse | TaskInstanceResponse;
 
 const getDuration = (start: string, end: string | null) => dayjs.duration(dayjs(end).diff(start)).asSeconds();
 
@@ -115,7 +115,7 @@ export const DurationChart = ({
               data: entries.map((entry: RunResponse) => {
                 switch (kind) {
                   case "Dag Run": {
-                    const run = entry as DAGRunResponse;
+                    const run = entry as GridRunsResponse;
 
                     return run.queued_at !== null && run.start_date !== null && run.queued_at < run.start_date
                       ? Number(getDuration(run.queued_at, run.start_date))
@@ -158,18 +158,19 @@ export const DurationChart = ({
               return;
             }
 
-            const entry = entries[element.index];
-            const baseUrl = `/dags/${entry?.dag_id}/runs/${entry?.dag_run_id}`;
-
             switch (kind) {
               case "Dag Run": {
+                const entry = entries[element.index] as GridRunsResponse | undefined;
+                const baseUrl = `/dags/${entry?.dag_id}/runs/${entry?.run_id}`;
+
                 navigate(baseUrl);
                 break;
               }
               case "Task Instance": {
-                const taskInstance = entry as TaskInstanceResponse;
+                const entry = entries[element.index] as TaskInstanceResponse | undefined;
+                const baseUrl = `/dags/${entry?.dag_id}/runs/${entry?.dag_run_id}`;
 
-                navigate(`${baseUrl}/tasks/${taskInstance.task_id}`);
+                navigate(`${baseUrl}/tasks/${entry?.task_id}`);
                 break;
               }
               default:
diff --git a/airflow-core/src/airflow/ui/src/layouts/Details/DagRunSelect.tsx b/airflow-core/src/airflow/ui/src/layouts/Details/DagRunSelect.tsx
index f73d9c3d49a2e..459a281ae70d2 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Details/DagRunSelect.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Details/DagRunSelect.tsx
@@ -21,13 +21,13 @@ import { forwardRef, useMemo } from "react";
 import { useTranslation } from "react-i18next";
 import { useNavigate, useParams } from "react-router-dom";
 
-import type { GridDAGRunwithTIs } from "openapi/requests/types.gen";
+import type { GridRunsResponse } from "openapi/requests/types.gen";
 import { StateBadge } from "src/components/StateBadge";
 import Time from "src/components/Time";
-import { useGrid } from "src/queries/useGrid";
+import { useGridRuns } from "src/queries/useGridRuns.ts";
 
 type DagRunSelected = {
-  run: GridDAGRunwithTIs;
+  run: GridRunsResponse;
   value: string;
 };
 
@@ -40,34 +40,33 @@ export const DagRunSelect = forwardRef<HTMLDivElement, DagRunSelectProps>(({ lim
   const { t: translate } = useTranslation(["dag", "common"]);
   const navigate = useNavigate();
 
-  const { data, isLoading } = useGrid(limit);
-
+  const { data: gridRuns, isLoading } = useGridRuns({ limit });
   const runOptions = useMemo(
     () =>
       createListCollection({
-        items: (data?.dag_runs ?? []).map((dr: GridDAGRunwithTIs) => ({
+        items: (gridRuns ?? []).map((dr: GridRunsResponse) => ({
           run: dr,
-          value: dr.dag_run_id,
+          value: dr.run_id,
         })),
       }),
-    [data],
+    [gridRuns],
   );
 
   const selectDagRun = ({ items }: SelectValueChangeDetails<DagRunSelected>) => {
-    const run = items.length > 0 ? `/runs/${items[0]?.run.dag_run_id}` : "";
+    const runPartialPath = items.length > 0 ? `/runs/${items[0]?.run.run_id}` : "";
 
     navigate({
-      pathname: `/dags/${dagId}${run}/${taskId === undefined ? "" : `tasks/${taskId}`}`,
+      pathname: `/dags/${dagId}${runPartialPath}/${taskId === undefined ? "" : `tasks/${taskId}`}`,
     });
   };
 
-  const selectedRun = (data?.dag_runs ?? []).find((dr) => dr.dag_run_id === runId);
+  const selectedRun = (gridRuns ?? []).find((dr) => dr.run_id === runId);
 
   return (
     <Select.Root
       collection={runOptions}
       data-testid="dag-run-select"
-      disabled={isLoading || !data?.dag_runs}
+      disabled={isLoading || !gridRuns}
       onValueChange={selectDagRun}
       ref={ref}
       size="sm"
diff --git a/airflow-core/src/airflow/ui/src/layouts/Details/Grid/Bar.tsx b/airflow-core/src/airflow/ui/src/layouts/Details/Grid/Bar.tsx
index 90480f8f79221..dbcc965c61f74 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Details/Grid/Bar.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Details/Grid/Bar.tsx
@@ -19,27 +19,30 @@
 import { Flex, Box } from "@chakra-ui/react";
 import { useParams, useSearchParams } from "react-router-dom";
 
+import type { GridRunsResponse } from "openapi/requests";
 import { RunTypeIcon } from "src/components/RunTypeIcon";
+import { useGridTiSummaries } from "src/queries/useGridTISummaries.ts";
 
 import { GridButton } from "./GridButton";
 import { TaskInstancesColumn } from "./TaskInstancesColumn";
-import type { GridTask, RunWithDuration } from "./utils";
+import type { GridTask } from "./utils";
 
 const BAR_HEIGHT = 100;
 
 type Props = {
   readonly max: number;
   readonly nodes: Array<GridTask>;
-  readonly run: RunWithDuration;
+  readonly run: GridRunsResponse;
 };
 
 export const Bar = ({ max, nodes, run }: Props) => {
   const { dagId = "", runId } = useParams();
   const [searchParams] = useSearchParams();
 
-  const isSelected = runId === run.dag_run_id;
+  const isSelected = runId === run.run_id;
 
   const search = searchParams.toString();
+  const { data: gridTISummaries } = useGridTiSummaries(run);
 
   return (
     <Box
@@ -62,11 +65,11 @@ export const Bar = ({ max, nodes, run }: Props) => {
           color="white"
           dagId={dagId}
           flexDir="column"
-          height={`${(run.duration / max) * BAR_HEIGHT}px`}
+          height={`${((run.duration ?? 0) / max) * BAR_HEIGHT}px`}
           justifyContent="flex-end"
           label={run.run_after}
           minHeight="14px"
-          runId={run.dag_run_id}
+          runId={run.run_id}
           searchParams={search}
           state={run.state}
           zIndex={1}
@@ -74,7 +77,11 @@ export const Bar = ({ max, nodes, run }: Props) => {
           {run.run_type !== "scheduled" && <RunTypeIcon runType={run.run_type} size="10px" />}
         </GridButton>
       </Flex>
-      <TaskInstancesColumn nodes={nodes} runId={run.dag_run_id} taskInstances={run.task_instances} />
+      <TaskInstancesColumn
+        nodes={nodes}
+        runId={run.run_id}
+        taskInstances={gridTISummaries?.task_instances ?? []}
+      />
     </Box>
   );
 };
diff --git a/airflow-core/src/airflow/ui/src/layouts/Details/Grid/Grid.tsx b/airflow-core/src/airflow/ui/src/layouts/Details/Grid/Grid.tsx
index 5a407c355e4b3..59b8d250c6407 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Details/Grid/Grid.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Details/Grid/Grid.tsx
@@ -19,19 +19,22 @@
 import { Box, Flex, IconButton } from "@chakra-ui/react";
 import dayjs from "dayjs";
 import dayjsDuration from "dayjs/plugin/duration";
-import { useMemo } from "react";
+import { useEffect, useMemo, useState } from "react";
 import { useTranslation } from "react-i18next";
 import { FiChevronsRight } from "react-icons/fi";
 import { Link, useParams } from "react-router-dom";
 
+import type { GridRunsResponse } from "openapi/requests";
 import { useOpenGroups } from "src/context/openGroups";
-import { useGrid } from "src/queries/useGrid";
+import { useGridRuns } from "src/queries/useGridRuns.ts";
+import { useGridStructure } from "src/queries/useGridStructure.ts";
+import { isStatePending } from "src/utils";
 
 import { Bar } from "./Bar";
 import { DurationAxis } from "./DurationAxis";
 import { DurationTick } from "./DurationTick";
 import { TaskNames } from "./TaskNames";
-import { flattenNodes, type RunWithDuration } from "./utils";
+import { flattenNodes } from "./utils";
 
 dayjs.extend(dayjsDuration);
 
@@ -41,36 +44,47 @@ type Props = {
 
 export const Grid = ({ limit }: Props) => {
   const { t: translate } = useTranslation("dag");
+
+  const [selectedIsVisible, setSelectedIsVisible] = useState<boolean | undefined>();
+  const [hasActiveRun, setHasActiveRun] = useState<boolean | undefined>();
   const { openGroupIds } = useOpenGroups();
-  const { dagId = "" } = useParams();
+  const { dagId = "", runId = "" } = useParams();
 
-  const { data: gridData, isLoading, runAfter } = useGrid(limit);
+  const { data: gridRuns, isLoading } = useGridRuns({ limit });
 
-  const runs: Array<RunWithDuration> = useMemo(
-    () =>
-      (gridData?.dag_runs ?? []).map((run) => {
-        const duration = dayjs
-          .duration(dayjs(run.end_date ?? undefined).diff(run.start_date ?? undefined))
-          .asSeconds();
+  // Check if the selected dag run is inside of the grid response, if not, we'll update the grid filters
+  // Eventually we should redo the api endpoint to make this work better
+  useEffect(() => {
+    if (gridRuns && runId) {
+      const run = gridRuns.find((dr: GridRunsResponse) => dr.run_id === runId);
 
-        return {
-          ...run,
-          duration,
-        };
-      }),
-    [gridData?.dag_runs],
-  );
+      if (!run) {
+        setSelectedIsVisible(false);
+      }
+    }
+  }, [runId, gridRuns, selectedIsVisible, setSelectedIsVisible]);
+
+  useEffect(() => {
+    if (gridRuns) {
+      const run = gridRuns.some((dr: GridRunsResponse) => isStatePending(dr.state));
 
+      if (!run) {
+        setHasActiveRun(false);
+      }
+    }
+  }, [gridRuns, setHasActiveRun]);
+
+  const { data: dagStructure } = useGridStructure({ hasActiveRun, limit });
   // calculate dag run bar heights relative to max
   const max = Math.max.apply(
     undefined,
-    runs.map((dr) => dr.duration),
-  );
-
-  const { flatNodes } = useMemo(
-    () => flattenNodes(gridData === undefined ? [] : gridData.structure.nodes, openGroupIds),
-    [gridData, openGroupIds],
+    gridRuns === undefined
+      ? []
+      : gridRuns
+          .map((dr: GridRunsResponse) => dr.duration)
+          .filter((duration: number | null): duration is number => duration !== null),
   );
+  const { flatNodes } = useMemo(() => flattenNodes(dagStructure, openGroupIds), [dagStructure, openGroupIds]);
 
   return (
     <Flex justifyContent="flex-start" position="relative" pt={50} width="100%">
@@ -83,7 +97,7 @@ export const Grid = ({ limit }: Props) => {
           <DurationAxis top="50px" />
           <DurationAxis top="4px" />
           <Flex flexDirection="column-reverse" height="100px" position="relative" width="100%">
-            {Boolean(runs.length) && (
+            {Boolean(gridRuns?.length) && (
               <>
                 <DurationTick bottom="92px" duration={max} />
                 <DurationTick bottom="46px" duration={max / 2} />
@@ -92,11 +106,11 @@ export const Grid = ({ limit }: Props) => {
             )}
           </Flex>
           <Flex flexDirection="row-reverse">
-            {runs.map((dr) => (
-              <Bar key={dr.dag_run_id} max={max} nodes={flatNodes} run={dr} />
+            {gridRuns?.map((dr: GridRunsResponse) => (
+              <Bar key={dr.run_id} max={max} nodes={flatNodes} run={dr} />
             ))}
           </Flex>
-          {runAfter === undefined ? undefined : (
+          {selectedIsVisible === undefined || !selectedIsVisible ? undefined : (
             <Link to={`/dags/${dagId}`}>
               <IconButton
                 aria-label={translate("grid.buttons.resetToLatest")}
diff --git a/airflow-core/src/airflow/ui/src/layouts/Details/Grid/TaskInstancesColumn.tsx b/airflow-core/src/airflow/ui/src/layouts/Details/Grid/TaskInstancesColumn.tsx
index 726911882694a..ad864fe1f2acd 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Details/Grid/TaskInstancesColumn.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Details/Grid/TaskInstancesColumn.tsx
@@ -19,7 +19,7 @@
 import { Box } from "@chakra-ui/react";
 import { useParams, useSearchParams } from "react-router-dom";
 
-import type { GridTaskInstanceSummary } from "openapi/requests/types.gen";
+import type { LightGridTaskInstanceSummary } from "openapi/requests/types.gen";
 
 import { GridTI } from "./GridTI";
 import type { GridTask } from "./utils";
@@ -28,7 +28,7 @@ type Props = {
   readonly depth?: number;
   readonly nodes: Array<GridTask>;
   readonly runId: string;
-  readonly taskInstances: Array<GridTaskInstanceSummary>;
+  readonly taskInstances: Array<LightGridTaskInstanceSummary>;
 };
 
 export const TaskInstancesColumn = ({ nodes, runId, taskInstances }: Props) => {
@@ -37,6 +37,7 @@ export const TaskInstancesColumn = ({ nodes, runId, taskInstances }: Props) => {
   const search = searchParams.toString();
 
   return nodes.map((node) => {
+    // todo: how does this work with mapped? same task id for multiple tis
     const taskInstance = taskInstances.find((ti) => ti.task_id === node.id);
 
     if (!taskInstance) {
diff --git a/airflow-core/src/airflow/ui/src/layouts/Details/Grid/utils.ts b/airflow-core/src/airflow/ui/src/layouts/Details/Grid/utils.ts
index 4b17098faff63..d278597267a14 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Details/Grid/utils.ts
+++ b/airflow-core/src/airflow/ui/src/layouts/Details/Grid/utils.ts
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import type { GridDAGRunwithTIs, NodeResponse } from "openapi/requests/types.gen";
+import type { GridDAGRunwithTIs, GridNodeResponse } from "openapi/requests/types.gen";
 
 export type RunWithDuration = {
   duration: number;
@@ -26,31 +26,33 @@ export type GridTask = {
   depth: number;
   isGroup?: boolean;
   isOpen?: boolean;
-} & NodeResponse;
+} & GridNodeResponse;
 
-export const flattenNodes = (nodes: Array<NodeResponse>, openGroupIds: Array<string>, depth: number = 0) => {
+export const flattenNodes = (
+  nodes: Array<GridNodeResponse> | undefined,
+  openGroupIds: Array<string>,
+  depth: number = 0,
+) => {
   let flatNodes: Array<GridTask> = [];
   let allGroupIds: Array<string> = [];
 
-  nodes.forEach((node) => {
-    if (node.type === "task") {
-      if (node.children) {
-        const { children, ...rest } = node;
-
-        flatNodes.push({ ...rest, depth, isGroup: true, isOpen: openGroupIds.includes(node.id) });
-        allGroupIds.push(node.id);
-
-        const { allGroupIds: childGroupIds, flatNodes: childNodes } = flattenNodes(
-          children,
-          openGroupIds,
-          depth + 1,
-        );
-
-        flatNodes = [...flatNodes, ...(openGroupIds.includes(node.id) ? childNodes : [])];
-        allGroupIds = [...allGroupIds, ...childGroupIds];
-      } else {
-        flatNodes.push({ ...node, depth });
-      }
+  nodes?.forEach((node) => {
+    if (node.children) {
+      const { children, ...rest } = node;
+
+      flatNodes.push({ ...rest, depth, isGroup: true, isOpen: openGroupIds.includes(node.id) });
+      allGroupIds.push(node.id);
+
+      const { allGroupIds: childGroupIds, flatNodes: childNodes } = flattenNodes(
+        children,
+        openGroupIds,
+        depth + 1,
+      );
+
+      flatNodes = [...flatNodes, ...(openGroupIds.includes(node.id) ? childNodes : [])];
+      allGroupIds = [...allGroupIds, ...childGroupIds];
+    } else {
+      flatNodes.push({ ...node, depth });
     }
   });
 
diff --git a/airflow-core/src/airflow/ui/src/layouts/Details/ToggleGroups.tsx b/airflow-core/src/airflow/ui/src/layouts/Details/ToggleGroups.tsx
index a412a99af2e95..69ffc13866a2f 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Details/ToggleGroups.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Details/ToggleGroups.tsx
@@ -21,23 +21,22 @@ import { useMemo } from "react";
 import { useTranslation } from "react-i18next";
 import { MdExpand, MdCompress } from "react-icons/md";
 import { useParams } from "react-router-dom";
+import { useLocalStorage } from "usehooks-ts";
 
-import { useStructureServiceStructureData } from "openapi/queries";
 import { useOpenGroups } from "src/context/openGroups";
+import { useGridStructure } from "src/queries/useGridStructure.ts";
 
 import { flattenNodes } from "./Grid/utils";
 
 export const ToggleGroups = (props: ButtonGroupProps) => {
   const { t: translate } = useTranslation();
-  const { dagId = "" } = useParams();
-  const { data: structure } = useStructureServiceStructureData({
-    dagId,
-  });
   const { openGroupIds, setOpenGroupIds } = useOpenGroups();
-
+  const { dagId = "" } = useParams();
+  const [limit] = useLocalStorage<number>(`dag_runs_limit-${dagId}`, 10);
+  const { data: dagStructure } = useGridStructure({ limit });
   const { allGroupIds } = useMemo(
-    () => flattenNodes(structure?.nodes ?? [], openGroupIds),
-    [structure?.nodes, openGroupIds],
+    () => flattenNodes(dagStructure, openGroupIds),
+    [dagStructure, openGroupIds],
   );
 
   // Don't show button if the DAG has no task groups
diff --git a/airflow-core/src/airflow/ui/src/pages/Dag/Overview/Overview.tsx b/airflow-core/src/airflow/ui/src/pages/Dag/Overview/Overview.tsx
index 20e6126de6a6e..665b47b5da492 100644
--- a/airflow-core/src/airflow/ui/src/pages/Dag/Overview/Overview.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Dag/Overview/Overview.tsx
@@ -21,6 +21,7 @@ import dayjs from "dayjs";
 import { lazy, useState, Suspense } from "react";
 import { useTranslation } from "react-i18next";
 import { useParams } from "react-router-dom";
+import { useLocalStorage } from "usehooks-ts";
 
 import {
   useAssetServiceGetAssetEvents,
@@ -31,7 +32,7 @@ import { AssetEvents } from "src/components/Assets/AssetEvents";
 import { DurationChart } from "src/components/DurationChart";
 import TimeRangeSelector from "src/components/TimeRangeSelector";
 import { TrendCountButton } from "src/components/TrendCountButton";
-import { isStatePending, useAutoRefresh } from "src/utils";
+import { useGridRuns } from "src/queries/useGridRuns.ts";
 
 const FailedLogs = lazy(() => import("./FailedLogs"));
 
@@ -46,8 +47,6 @@ export const Overview = () => {
   const [endDate, setEndDate] = useState(now.toISOString());
   const [assetSortBy, setAssetSortBy] = useState("-timestamp");
 
-  const refetchInterval = useAutoRefresh({});
-
   const { data: failedTasks, isLoading } = useTaskInstanceServiceGetTaskInstances({
     dagId: dagId ?? "",
     dagRunId: "~",
@@ -57,28 +56,17 @@ export const Overview = () => {
     state: ["failed"],
   });
 
+  const [limit] = useLocalStorage<number>(`dag_runs_limit-${dagId}`, 10);
   const { data: failedRuns, isLoading: isLoadingFailedRuns } = useDagRunServiceGetDagRuns({
     dagId: dagId ?? "",
+    limit,
     runAfterGte: startDate,
     runAfterLte: endDate,
     state: ["failed"],
   });
-
-  const { data: runs, isLoading: isLoadingRuns } = useDagRunServiceGetDagRuns(
-    {
-      dagId: dagId ?? "",
-      limit: 14,
-      orderBy: "-run_after",
-    },
-    undefined,
-    {
-      refetchInterval: (query) =>
-        query.state.data?.dag_runs.some((run) => isStatePending(run.state)) ? refetchInterval : false,
-    },
-  );
-
+  const { data: gridRuns, isLoading: isLoadingRuns } = useGridRuns({ limit });
   const { data: assetEventsData, isLoading: isLoadingAssetEvents } = useAssetServiceGetAssetEvents({
-    limit: 6,
+    limit,
     orderBy: assetSortBy,
     sourceDagId: dagId,
     timestampGte: startDate,
@@ -133,7 +121,7 @@ export const Overview = () => {
           {isLoadingRuns ? (
             <Skeleton height="200px" w="full" />
           ) : (
-            <DurationChart entries={runs?.dag_runs.slice().reverse()} kind="Dag Run" />
+            <DurationChart entries={gridRuns?.slice().reverse()} kind="Dag Run" />
           )}
         </Box>
         {assetEventsData && assetEventsData.total_entries > 0 ? (
diff --git a/airflow-core/src/airflow/ui/src/pages/DagRuns.tsx b/airflow-core/src/airflow/ui/src/pages/DagRuns.tsx
index 5bb722ecbd114..3e46a185be366 100644
--- a/airflow-core/src/airflow/ui/src/pages/DagRuns.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/DagRuns.tsx
@@ -24,6 +24,7 @@ import type { TFunction } from "i18next";
 import { useCallback } from "react";
 import { useTranslation } from "react-i18next";
 import { Link as RouterLink, useParams, useSearchParams } from "react-router-dom";
+import { useLocalStorage } from "usehooks-ts";
 
 import { useDagRunServiceGetDagRuns } from "openapi/queries";
 import type { DAGRunResponse, DagRunState, DagRunType } from "openapi/requests/types.gen";
@@ -162,12 +163,13 @@ export const DagRuns = () => {
   const endDate = searchParams.get(END_DATE_PARAM);
 
   const refetchInterval = useAutoRefresh({});
+  const [limit] = useLocalStorage<number>(`dag_runs_limit-${dagId}`, 10);
 
   const { data, error, isLoading } = useDagRunServiceGetDagRuns(
     {
       dagId: dagId ?? "~",
       endDateLte: endDate ?? undefined,
-      limit: pagination.pageSize,
+      limit,
       offset: pagination.pageIndex * pagination.pageSize,
       orderBy,
       runType: filteredType === null ? undefined : [filteredType],
diff --git a/airflow-core/src/airflow/ui/src/pages/Task/GroupTaskHeader.tsx b/airflow-core/src/airflow/ui/src/pages/Task/GroupTaskHeader.tsx
index fc0a2f29233f5..34d55dc345846 100644
--- a/airflow-core/src/airflow/ui/src/pages/Task/GroupTaskHeader.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Task/GroupTaskHeader.tsx
@@ -18,9 +18,8 @@
  */
 import { AiOutlineGroup } from "react-icons/ai";
 
-import type { NodeResponse } from "openapi/requests/types.gen";
 import { HeaderCard } from "src/components/HeaderCard";
 
-export const GroupTaskHeader = ({ groupTask }: { readonly groupTask: NodeResponse }) => (
-  <HeaderCard icon={<AiOutlineGroup />} stats={[]} title={groupTask.label} />
+export const GroupTaskHeader = ({ title }: { readonly title: string }) => (
+  <HeaderCard icon={<AiOutlineGroup />} stats={[]} title={title} />
 );
diff --git a/airflow-core/src/airflow/ui/src/pages/Task/Task.tsx b/airflow-core/src/airflow/ui/src/pages/Task/Task.tsx
index 1095642b3d2c5..e082c8dfe8ead 100644
--- a/airflow-core/src/airflow/ui/src/pages/Task/Task.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Task/Task.tsx
@@ -22,8 +22,9 @@ import { LuChartColumn } from "react-icons/lu";
 import { MdOutlineEventNote, MdOutlineTask } from "react-icons/md";
 import { useParams } from "react-router-dom";
 
-import { useDagServiceGetDagDetails, useGridServiceGridData, useTaskServiceGetTask } from "openapi/queries";
+import { useDagServiceGetDagDetails, useTaskServiceGetTask } from "openapi/queries";
 import { DetailsLayout } from "src/layouts/Details/DetailsLayout";
+import { useGridStructure } from "src/queries/useGridStructure.ts";
 import { getGroupTask } from "src/utils/groupTask";
 
 import { GroupTaskHeader } from "./GroupTaskHeader";
@@ -49,18 +50,9 @@ export const Task = () => {
     enabled: groupId === undefined,
   });
 
-  const { data: gridData } = useGridServiceGridData(
-    {
-      dagId,
-      includeDownstream: true,
-      includeUpstream: true,
-    },
-    undefined,
-    { enabled: groupId !== undefined },
-  );
+  const { data: dagStructure } = useGridStructure({ limit: 1 });
 
-  const groupTask =
-    groupId === undefined ? undefined : getGroupTask(gridData?.structure.nodes ?? [], groupId);
+  const groupTask = getGroupTask(dagStructure, groupId);
 
   const {
     data: dag,
@@ -79,7 +71,7 @@ export const Task = () => {
         tabs={displayTabs}
       >
         {task === undefined ? undefined : <Header task={task} />}
-        {groupTask ? <GroupTaskHeader groupTask={groupTask} /> : undefined}
+        {groupTask ? <GroupTaskHeader title={groupTask.label} /> : undefined}
       </DetailsLayout>
     </ReactFlowProvider>
   );
diff --git a/airflow-core/src/airflow/ui/src/queries/useGrid.ts b/airflow-core/src/airflow/ui/src/queries/useGrid.ts
deleted file mode 100644
index 9ebd1a02d6e47..0000000000000
--- a/airflow-core/src/airflow/ui/src/queries/useGrid.ts
+++ /dev/null
@@ -1,72 +0,0 @@
-/*!
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-import { keepPreviousData } from "@tanstack/react-query";
-import { useEffect, useState } from "react";
-import { useParams } from "react-router-dom";
-
-import { useDagRunServiceGetDagRun, useGridServiceGridData } from "openapi/queries";
-import type { GridResponse } from "openapi/requests/types.gen";
-import { isStatePending, useAutoRefresh } from "src/utils";
-
-export const useGrid = (limit: number) => {
-  const { dagId = "", runId = "" } = useParams();
-  const [runAfter, setRunAfter] = useState<string | undefined>();
-
-  const { data: dagRun } = useDagRunServiceGetDagRun(
-    {
-      dagId,
-      dagRunId: runId,
-    },
-    undefined,
-    { enabled: runId !== "" },
-  );
-
-  const refetchInterval = useAutoRefresh({ dagId });
-
-  // This is necessary for keepPreviousData
-  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-arguments
-  const { data: gridData, ...rest } = useGridServiceGridData<GridResponse>(
-    {
-      dagId,
-      limit,
-      orderBy: "-run_after",
-      runAfterLte: runAfter,
-    },
-    undefined,
-    {
-      placeholderData: keepPreviousData,
-      refetchInterval: (query) =>
-        query.state.data?.dag_runs.some((dr) => isStatePending(dr.state)) && refetchInterval,
-    },
-  );
-
-  // Check if the selected dag run is inside of the grid response, if not, we'll update the grid filters
-  // Eventually we should redo the api endpoint to make this work better
-  useEffect(() => {
-    if (gridData?.dag_runs && dagRun) {
-      const hasRun = gridData.dag_runs.find((dr) => dr.dag_run_id === dagRun.dag_run_id);
-
-      if (!hasRun) {
-        setRunAfter(dagRun.run_after);
-      }
-    }
-  }, [dagRun, gridData?.dag_runs, runAfter]);
-
-  return { data: gridData, runAfter, ...rest };
-};
diff --git a/airflow-core/src/airflow/ui/src/queries/useGridRuns.ts b/airflow-core/src/airflow/ui/src/queries/useGridRuns.ts
new file mode 100644
index 0000000000000..096630852d435
--- /dev/null
+++ b/airflow-core/src/airflow/ui/src/queries/useGridRuns.ts
@@ -0,0 +1,44 @@
+/*!
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { useParams } from "react-router-dom";
+
+import { useGridServiceGetGridRuns } from "openapi/queries";
+import { isStatePending, useAutoRefresh } from "src/utils";
+
+export const useGridRuns = ({ limit }: { limit: number }) => {
+  const { dagId = "" } = useParams();
+
+  const defaultRefetchInterval = useAutoRefresh({ dagId });
+
+  const { data: GridRuns, ...rest } = useGridServiceGetGridRuns(
+    {
+      dagId,
+      limit,
+      orderBy: "-run_after",
+    },
+    undefined,
+    {
+      placeholderData: (prev) => prev,
+      refetchInterval: (query) =>
+        query.state.data?.some((run) => isStatePending(run.state)) && defaultRefetchInterval,
+    },
+  );
+
+  return { data: GridRuns, ...rest };
+};
diff --git a/airflow-core/src/airflow/ui/src/queries/useGridStructure.ts b/airflow-core/src/airflow/ui/src/queries/useGridStructure.ts
new file mode 100644
index 0000000000000..eaeaede6050e6
--- /dev/null
+++ b/airflow-core/src/airflow/ui/src/queries/useGridStructure.ts
@@ -0,0 +1,49 @@
+/*!
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { useParams } from "react-router-dom";
+
+import { useGridServiceGetDagStructure } from "openapi/queries";
+import { useAutoRefresh } from "src/utils";
+
+export const useGridStructure = ({
+  hasActiveRun = undefined,
+  limit,
+}: {
+  hasActiveRun?: boolean;
+  limit?: number;
+}) => {
+  const { dagId = "" } = useParams();
+  const refetchInterval = useAutoRefresh({ dagId });
+
+  // This is necessary for keepPreviousData
+  const { data: dagStructure, ...rest } = useGridServiceGetDagStructure(
+    {
+      dagId,
+      limit,
+      orderBy: "-run_after",
+    },
+    undefined,
+    {
+      placeholderData: (prev) => prev,
+      refetchInterval: hasActiveRun ? refetchInterval : false,
+    },
+  );
+
+  return { data: dagStructure, ...rest };
+};
diff --git a/airflow-core/src/airflow/ui/src/queries/useGridTISummaries.ts b/airflow-core/src/airflow/ui/src/queries/useGridTISummaries.ts
new file mode 100644
index 0000000000000..5bd3d1b85f014
--- /dev/null
+++ b/airflow-core/src/airflow/ui/src/queries/useGridTISummaries.ts
@@ -0,0 +1,46 @@
+/*!
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { useParams } from "react-router-dom";
+
+import { useGridServiceGetGridTiSummaries } from "openapi/queries";
+import type { GridRunsResponse } from "openapi/requests";
+import { isStatePending, useAutoRefresh } from "src/utils";
+
+export const useGridTiSummaries = (run: GridRunsResponse) => {
+  const { dagId = "" } = useParams();
+
+  const refetchInterval = useAutoRefresh({ dagId });
+
+  const { data: gridTiSummaries, ...rest } = useGridServiceGetGridTiSummaries(
+    {
+      dagId,
+      runId: run.run_id,
+    },
+    undefined,
+    {
+      placeholderData: (prev) => prev,
+      refetchInterval: (query) =>
+        (isStatePending(run.state) ||
+          query.state.data?.task_instances.some((ti) => isStatePending(ti.state))) &&
+        refetchInterval,
+    },
+  );
+
+  return { data: gridTiSummaries, ...rest };
+};
diff --git a/airflow-core/src/airflow/ui/src/queries/useRefreshOnNewDagRuns.ts b/airflow-core/src/airflow/ui/src/queries/useRefreshOnNewDagRuns.ts
index 0df7402082e42..9f67c249d03c3 100644
--- a/airflow-core/src/airflow/ui/src/queries/useRefreshOnNewDagRuns.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useRefreshOnNewDagRuns.ts
@@ -20,13 +20,15 @@ import { useQueryClient } from "@tanstack/react-query";
 import { useEffect, useRef } from "react";
 
 import {
-  useDagRunServiceGetDagRuns,
   useDagServiceGetDagDetailsKey,
   UseDagRunServiceGetDagRunsKeyFn,
   UseDagServiceGetDagDetailsKeyFn,
   useDagServiceGetDagsUi,
   UseGridServiceGridDataKeyFn,
   UseTaskInstanceServiceGetTaskInstancesKeyFn,
+  useGridServiceGetLatestRun,
+  UseGridServiceGetDagStructureKeyFn,
+  UseGridServiceGetGridRunsKeyFn,
 } from "openapi/queries";
 
 import { useConfig } from "./useConfig";
@@ -36,15 +38,15 @@ export const useRefreshOnNewDagRuns = (dagId: string, hasPendingRuns: boolean |
   const previousDagRunIdRef = useRef<string>();
   const autoRefreshInterval = useConfig("auto_refresh_interval") as number;
 
-  const { data } = useDagRunServiceGetDagRuns({ dagId, limit: 1, orderBy: "-run_after" }, undefined, {
+  const { data } = useGridServiceGetLatestRun({ dagId }, undefined, {
     enabled: Boolean(dagId) && !hasPendingRuns,
     refetchInterval: Boolean(autoRefreshInterval) ? autoRefreshInterval * 1000 : 5000,
   });
 
   useEffect(() => {
-    const latestDagRun = data?.dag_runs[0];
+    const latestDagRun = data;
 
-    const latestDagRunId = latestDagRun?.dag_run_id;
+    const latestDagRunId = latestDagRun?.run_id;
 
     if ((latestDagRunId ?? "") && previousDagRunIdRef.current !== latestDagRunId) {
       previousDagRunIdRef.current = latestDagRunId;
@@ -56,6 +58,8 @@ export const useRefreshOnNewDagRuns = (dagId: string, hasPendingRuns: boolean |
         UseDagRunServiceGetDagRunsKeyFn({ dagId }, [{ dagId }]),
         UseTaskInstanceServiceGetTaskInstancesKeyFn({ dagId, dagRunId: "~" }, [{ dagId, dagRunId: "~" }]),
         UseGridServiceGridDataKeyFn({ dagId }, [{ dagId }]),
+        UseGridServiceGetDagStructureKeyFn({ dagId }, [{ dagId }]),
+        UseGridServiceGetGridRunsKeyFn({ dagId }, [{ dagId }]),
       ];
 
       queryKeys.forEach((key) => {
diff --git a/airflow-core/src/airflow/ui/src/utils/groupTask.ts b/airflow-core/src/airflow/ui/src/utils/groupTask.ts
index 8b736dc7c8a9f..3438da3b77bed 100644
--- a/airflow-core/src/airflow/ui/src/utils/groupTask.ts
+++ b/airflow-core/src/airflow/ui/src/utils/groupTask.ts
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import type { NodeResponse } from "openapi/requests/types.gen";
+import type { GridNodeResponse } from "openapi/requests/types.gen";
 
 /**
  * Finds a task node by its ID in a tree of nodes
@@ -24,12 +24,15 @@ import type { NodeResponse } from "openapi/requests/types.gen";
  * @param targetId - ID of the node to find
  * @returns The found node or undefined if not found
  */
-export const getGroupTask = (nodes: Array<NodeResponse>, targetId: string): NodeResponse | undefined => {
-  if (!nodes.length || !targetId) {
+export const getGroupTask = (
+  nodes: Array<GridNodeResponse> | undefined,
+  targetId: string | undefined,
+): GridNodeResponse | undefined => {
+  if (nodes === undefined || targetId === undefined || !nodes.length || !targetId) {
     return undefined;
   }
 
-  const queue: Array<NodeResponse> = [...nodes];
+  const queue: Array<GridNodeResponse> = [...nodes];
   const [root] = targetId.split(".");
 
   while (queue.length > 0) {
diff --git a/airflow-core/src/airflow/utils/task_group.py b/airflow-core/src/airflow/utils/task_group.py
index fa7396b85e800..bcae2baa88d6d 100644
--- a/airflow-core/src/airflow/utils/task_group.py
+++ b/airflow-core/src/airflow/utils/task_group.py
@@ -94,3 +94,41 @@ def task_group_to_dict(task_item_or_group, parent_group_is_mapped=False):
         "children": children,
         "type": "task",
     }
+
+
+def task_group_to_dict_grid(task_item_or_group, parent_group_is_mapped=False):
+    """Create a nested dict representation of this TaskGroup and its children used to construct the Graph."""
+    from airflow.sdk.definitions._internal.abstractoperator import AbstractOperator
+    from airflow.sdk.definitions.mappedoperator import MappedOperator
+
+    if isinstance(task := task_item_or_group, AbstractOperator):
+        is_mapped = None
+        if isinstance(task, MappedOperator) or parent_group_is_mapped:
+            is_mapped = True
+        setup_teardown_type = None
+        if task.is_setup is True:
+            setup_teardown_type = "setup"
+        elif task.is_teardown is True:
+            setup_teardown_type = "teardown"
+        return {
+            "id": task.task_id,
+            "label": task.label,
+            "is_mapped": is_mapped,
+            "children": None,
+            "setup_teardown_type": setup_teardown_type,
+        }
+
+    task_group = task_item_or_group
+    task_group_sort = get_task_group_children_getter()
+    is_mapped_group = isinstance(task_group, MappedTaskGroup)
+    children = [
+        task_group_to_dict_grid(x, parent_group_is_mapped=parent_group_is_mapped or is_mapped_group)
+        for x in task_group_sort(task_group)
+    ]
+
+    return {
+        "id": task_group.group_id,
+        "label": task_group.label,
+        "is_mapped": is_mapped_group or None,
+        "children": children or None,
+    }
diff --git a/airflow-core/tests/unit/api_fastapi/core_api/routes/ui/test_grid.py b/airflow-core/tests/unit/api_fastapi/core_api/routes/ui/test_grid.py
index 181d64b3a1716..908ebb24bebf4 100644
--- a/airflow-core/tests/unit/api_fastapi/core_api/routes/ui/test_grid.py
+++ b/airflow-core/tests/unit/api_fastapi/core_api/routes/ui/test_grid.py
@@ -42,6 +42,7 @@
 DAG_ID = "test_dag"
 DAG_ID_2 = "test_dag_2"
 DAG_ID_3 = "test_dag_3"
+DAG_ID_4 = "test_dag_4"
 TASK_ID = "task"
 TASK_ID_2 = "task2"
 TASK_ID_3 = "task3"
@@ -59,11 +60,9 @@
     "data_interval_start": "2024-11-29T00:00:00Z",
     "end_date": "2024-12-31T00:00:00Z",
     "logical_date": "2024-11-30T00:00:00Z",
-    "note": None,
-    "queued_at": None,
+    "run_after": "2024-11-30T00:00:00Z",
     "run_type": "scheduled",
     "start_date": "2016-01-01T00:00:00Z",
-    "run_after": "2024-11-30T00:00:00Z",
     "state": "success",
     "task_instances": [
         {
@@ -82,10 +81,6 @@
                 "up_for_retry": 0,
                 "upstream_failed": 0,
             },
-            "end_date": None,
-            "note": None,
-            "queued_dttm": None,
-            "start_date": None,
             "state": "success",
             "task_count": 3,
             "task_id": "mapped_task_group",
@@ -107,10 +102,6 @@
                 "up_for_retry": 0,
                 "upstream_failed": 0,
             },
-            "end_date": None,
-            "note": None,
-            "queued_dttm": None,
-            "start_date": None,
             "state": "success",
             "task_count": 2,
             "task_id": "task_group.inner_task_group",
@@ -132,10 +123,6 @@
                 "up_for_retry": 0,
                 "upstream_failed": 0,
             },
-            "end_date": None,
-            "note": None,
-            "queued_dttm": None,
-            "start_date": None,
             "state": "success",
             "task_count": 5,
             "task_id": "task_group",
@@ -157,10 +144,6 @@
                 "up_for_retry": 0,
                 "upstream_failed": 0,
             },
-            "end_date": None,
-            "note": None,
-            "queued_dttm": None,
-            "start_date": None,
             "state": "success",
             "task_count": 1,
             "task_id": "mapped_task_2",
@@ -182,10 +165,6 @@
                 "up_for_retry": 0,
                 "upstream_failed": 0,
             },
-            "end_date": None,
-            "note": None,
-            "queued_dttm": None,
-            "start_date": None,
             "state": "success",
             "task_count": 3,
             "task_id": "mapped_task_group.subtask",
@@ -207,10 +186,6 @@
                 "up_for_retry": 0,
                 "upstream_failed": 0,
             },
-            "end_date": None,
-            "note": None,
-            "queued_dttm": None,
-            "start_date": None,
             "state": "success",
             "task_count": 1,
             "task_id": "task",
@@ -232,10 +207,6 @@
                 "up_for_retry": 0,
                 "upstream_failed": 0,
             },
-            "end_date": None,
-            "note": None,
-            "queued_dttm": None,
-            "start_date": None,
             "state": "success",
             "task_count": 2,
             "task_id": "task_group.inner_task_group.inner_task_group_sub_task",
@@ -257,10 +228,6 @@
                 "up_for_retry": 0,
                 "upstream_failed": 0,
             },
-            "end_date": None,
-            "note": None,
-            "queued_dttm": None,
-            "start_date": None,
             "state": "success",
             "task_count": 4,
             "task_id": "task_group.mapped_task",
@@ -275,8 +242,6 @@
     "data_interval_start": "2024-11-29T00:00:00Z",
     "end_date": "2024-12-31T00:00:00Z",
     "logical_date": "2024-12-01T00:00:00Z",
-    "note": None,
-    "queued_at": None,
     "run_after": "2024-11-30T00:00:00Z",
     "run_type": "manual",
     "start_date": "2016-01-01T00:00:00Z",
@@ -299,8 +264,6 @@
                 "upstream_failed": 0,
             },
             "end_date": "2024-12-30T01:02:03Z",
-            "note": None,
-            "queued_dttm": None,
             "start_date": "2024-12-30T01:00:00Z",
             "state": "running",
             "task_count": 3,
@@ -323,11 +286,6 @@
                 "up_for_retry": 0,
                 "upstream_failed": 0,
             },
-            "end_date": None,
-            "note": None,
-            "queued_dttm": None,
-            "start_date": None,
-            "state": None,
             "task_count": 2,
             "task_id": "task_group.inner_task_group",
             "try_number": 0,
@@ -348,11 +306,6 @@
                 "up_for_retry": 0,
                 "upstream_failed": 0,
             },
-            "end_date": None,
-            "note": None,
-            "queued_dttm": None,
-            "start_date": None,
-            "state": None,
             "task_count": 5,
             "task_id": "task_group",
             "try_number": 0,
@@ -373,11 +326,6 @@
                 "up_for_retry": 0,
                 "upstream_failed": 0,
             },
-            "end_date": None,
-            "note": None,
-            "queued_dttm": None,
-            "start_date": None,
-            "state": None,
             "task_count": 1,
             "task_id": "mapped_task_2",
             "try_number": 0,
@@ -399,8 +347,6 @@
                 "upstream_failed": 0,
             },
             "end_date": "2024-12-30T01:02:03Z",
-            "note": None,
-            "queued_dttm": None,
             "start_date": "2024-12-30T01:00:00Z",
             "state": "running",
             "task_count": 3,
@@ -423,10 +369,6 @@
                 "up_for_retry": 0,
                 "upstream_failed": 0,
             },
-            "end_date": None,
-            "note": None,
-            "queued_dttm": None,
-            "start_date": None,
             "state": "success",
             "task_count": 1,
             "task_id": "task",
@@ -448,11 +390,6 @@
                 "up_for_retry": 0,
                 "upstream_failed": 0,
             },
-            "end_date": None,
-            "note": None,
-            "queued_dttm": None,
-            "start_date": None,
-            "state": None,
             "task_count": 2,
             "task_id": "task_group.inner_task_group.inner_task_group_sub_task",
             "try_number": 0,
@@ -473,11 +410,6 @@
                 "up_for_retry": 0,
                 "upstream_failed": 0,
             },
-            "end_date": None,
-            "note": None,
-            "queued_dttm": None,
-            "start_date": None,
-            "state": None,
             "task_count": 4,
             "task_id": "task_group.mapped_task",
             "try_number": 0,
@@ -485,103 +417,6 @@
     ],
 }
 
-STRUCTURE = {
-    "edges": [],
-    "nodes": [
-        {
-            "asset_condition_type": None,
-            "children": [
-                {
-                    "asset_condition_type": None,
-                    "children": None,
-                    "id": "mapped_task_group.subtask",
-                    "is_mapped": True,
-                    "label": "subtask",
-                    "operator": "MockOperator",
-                    "setup_teardown_type": None,
-                    "tooltip": None,
-                    "type": "task",
-                },
-            ],
-            "id": "mapped_task_group",
-            "is_mapped": True,
-            "label": "mapped_task_group",
-            "operator": None,
-            "setup_teardown_type": None,
-            "tooltip": "",
-            "type": "task",
-        },
-        {
-            "asset_condition_type": None,
-            "children": None,
-            "id": "task",
-            "is_mapped": None,
-            "label": "task",
-            "operator": "EmptyOperator",
-            "setup_teardown_type": None,
-            "tooltip": None,
-            "type": "task",
-        },
-        {
-            "asset_condition_type": None,
-            "children": [
-                {
-                    "asset_condition_type": None,
-                    "children": [
-                        {
-                            "asset_condition_type": None,
-                            "children": None,
-                            "id": "task_group.inner_task_group.inner_task_group_sub_task",
-                            "is_mapped": True,
-                            "label": "inner_task_group_sub_task",
-                            "operator": "MockOperator",
-                            "setup_teardown_type": None,
-                            "tooltip": None,
-                            "type": "task",
-                        },
-                    ],
-                    "id": "task_group.inner_task_group",
-                    "is_mapped": False,
-                    "label": "inner_task_group",
-                    "operator": None,
-                    "setup_teardown_type": None,
-                    "tooltip": "",
-                    "type": "task",
-                },
-                {
-                    "asset_condition_type": None,
-                    "children": None,
-                    "id": "task_group.mapped_task",
-                    "is_mapped": True,
-                    "label": "mapped_task",
-                    "operator": "MockOperator",
-                    "setup_teardown_type": None,
-                    "tooltip": None,
-                    "type": "task",
-                },
-            ],
-            "id": "task_group",
-            "is_mapped": False,
-            "label": "task_group",
-            "operator": None,
-            "setup_teardown_type": None,
-            "tooltip": "",
-            "type": "task",
-        },
-        {
-            "asset_condition_type": None,
-            "children": None,
-            "id": "mapped_task_2",
-            "is_mapped": True,
-            "label": "mapped_task_2",
-            "operator": "MockOperator",
-            "setup_teardown_type": None,
-            "tooltip": None,
-            "type": "task",
-        },
-    ],
-}
-
 
 @pytest.fixture(autouse=True, scope="module")
 def examples_dag_bag():
@@ -692,6 +527,35 @@ def mapped_task_group(arg1):
         ti.state = TaskInstanceState.SUCCESS
         ti.end_date = None
 
+    # DAG 4 for testing removed task
+    with dag_maker(dag_id=DAG_ID_4, serialized=True, session=session) as dag_4:
+        t1 = EmptyOperator(task_id="t1")
+        t2 = EmptyOperator(task_id="t2")
+        with TaskGroup(group_id=f"{TASK_GROUP_ID}-1") as tg1:
+            with TaskGroup(group_id=f"{TASK_GROUP_ID}-2") as tg2:
+                EmptyOperator(task_id="t3")
+                EmptyOperator(task_id="t4")
+                EmptyOperator(task_id="t5")
+            t6 = EmptyOperator(task_id="t6")
+            tg2 >> t6
+        t7 = EmptyOperator(task_id="t7")
+        t1 >> t2 >> tg1 >> t7
+
+    logical_date = timezone.datetime(2024, 11, 30)
+    data_interval = dag_4.timetable.infer_manual_data_interval(run_after=logical_date)
+    run_4 = dag_maker.create_dagrun(
+        run_id="run_4-1",
+        state=DagRunState.SUCCESS,
+        run_type=DagRunType.SCHEDULED,
+        start_date=logical_date,
+        logical_date=logical_date,
+        data_interval=data_interval,
+        **triggered_by_kwargs,
+    )
+    for ti in run_4.task_instances:
+        ti.state = "success"
+    session.commit()
+
 
 @pytest.fixture(autouse=True)
 def _clean():
@@ -714,7 +578,6 @@ def test_should_response_200(self, test_client):
         response = test_client.get(f"/grid/{DAG_ID}")
         assert response.status_code == 200
         assert response.json() == {
-            "structure": STRUCTURE,
             "dag_runs": [GRID_RUN_1, GRID_RUN_2],
         }
 
@@ -724,7 +587,6 @@ def test_should_response_200(self, test_client):
             (
                 "logical_date",
                 {
-                    "structure": STRUCTURE,
                     "dag_runs": [
                         GRID_RUN_1,
                         GRID_RUN_2,
@@ -734,7 +596,6 @@ def test_should_response_200(self, test_client):
             (
                 "-logical_date",
                 {
-                    "structure": STRUCTURE,
                     "dag_runs": [
                         GRID_RUN_2,
                         GRID_RUN_1,
@@ -744,7 +605,6 @@ def test_should_response_200(self, test_client):
             (
                 "run_after",
                 {
-                    "structure": STRUCTURE,
                     "dag_runs": [
                         GRID_RUN_1,
                         GRID_RUN_2,
@@ -754,7 +614,6 @@ def test_should_response_200(self, test_client):
             (
                 "-run_after",
                 {
-                    "structure": STRUCTURE,
                     "dag_runs": [
                         GRID_RUN_2,
                         GRID_RUN_1,
@@ -775,7 +634,6 @@ def test_should_response_200_order_by(self, test_client, order_by, expected):
                 "true",
                 "false",
                 {
-                    "structure": STRUCTURE,
                     "dag_runs": [
                         {
                             **GRID_RUN_1,
@@ -796,10 +654,6 @@ def test_should_response_200_order_by(self, test_client, order_by, expected):
                                         "up_for_retry": 0,
                                         "upstream_failed": 0,
                                     },
-                                    "end_date": None,
-                                    "note": None,
-                                    "queued_dttm": None,
-                                    "start_date": None,
                                     "state": "success",
                                     "task_count": 3,
                                     "task_id": "mapped_task_group",
@@ -821,10 +675,6 @@ def test_should_response_200_order_by(self, test_client, order_by, expected):
                                         "up_for_retry": 0,
                                         "upstream_failed": 0,
                                     },
-                                    "end_date": None,
-                                    "note": None,
-                                    "queued_dttm": None,
-                                    "start_date": None,
                                     "state": "success",
                                     "task_count": 3,
                                     "task_id": "mapped_task_group.subtask",
@@ -852,8 +702,6 @@ def test_should_response_200_order_by(self, test_client, order_by, expected):
                                         "upstream_failed": 0,
                                     },
                                     "end_date": "2024-12-30T01:02:03Z",
-                                    "note": None,
-                                    "queued_dttm": None,
                                     "start_date": "2024-12-30T01:00:00Z",
                                     "state": "running",
                                     "task_count": 3,
@@ -877,8 +725,6 @@ def test_should_response_200_order_by(self, test_client, order_by, expected):
                                         "upstream_failed": 0,
                                     },
                                     "end_date": "2024-12-30T01:02:03Z",
-                                    "note": None,
-                                    "queued_dttm": None,
                                     "start_date": "2024-12-30T01:00:00Z",
                                     "state": "running",
                                     "task_count": 3,
@@ -894,7 +740,6 @@ def test_should_response_200_order_by(self, test_client, order_by, expected):
                 "false",
                 "true",
                 {
-                    "structure": STRUCTURE,
                     "dag_runs": [
                         {
                             **GRID_RUN_1,
@@ -915,10 +760,6 @@ def test_should_response_200_order_by(self, test_client, order_by, expected):
                                         "up_for_retry": 0,
                                         "upstream_failed": 0,
                                     },
-                                    "end_date": None,
-                                    "note": None,
-                                    "queued_dttm": None,
-                                    "start_date": None,
                                     "state": "success",
                                     "task_count": 3,
                                     "task_id": "mapped_task_group",
@@ -940,10 +781,6 @@ def test_should_response_200_order_by(self, test_client, order_by, expected):
                                         "up_for_retry": 0,
                                         "upstream_failed": 0,
                                     },
-                                    "end_date": None,
-                                    "note": None,
-                                    "queued_dttm": None,
-                                    "start_date": None,
                                     "state": "success",
                                     "task_count": 3,
                                     "task_id": "mapped_task_group.subtask",
@@ -971,8 +808,6 @@ def test_should_response_200_order_by(self, test_client, order_by, expected):
                                         "upstream_failed": 0,
                                     },
                                     "end_date": "2024-12-30T01:02:03Z",
-                                    "note": None,
-                                    "queued_dttm": None,
                                     "start_date": "2024-12-30T01:00:00Z",
                                     "state": "running",
                                     "task_count": 3,
@@ -996,8 +831,6 @@ def test_should_response_200_order_by(self, test_client, order_by, expected):
                                         "upstream_failed": 0,
                                     },
                                     "end_date": "2024-12-30T01:02:03Z",
-                                    "note": None,
-                                    "queued_dttm": None,
                                     "start_date": "2024-12-30T01:00:00Z",
                                     "state": "running",
                                     "task_count": 3,
@@ -1031,14 +864,12 @@ def test_should_response_200_include_upstream_downstream(
             (
                 1,
                 {
-                    "structure": STRUCTURE,
                     "dag_runs": [GRID_RUN_1],
                 },
             ),
             (
                 2,
                 {
-                    "structure": STRUCTURE,
                     "dag_runs": [GRID_RUN_1, GRID_RUN_2],
                 },
             ),
@@ -1058,7 +889,6 @@ def test_should_response_200_limit(self, test_client, limit, expected):
                     "logical_date_lte": timezone.datetime(2024, 11, 30),
                 },
                 {
-                    "structure": STRUCTURE,
                     "dag_runs": [GRID_RUN_1],
                 },
             ),
@@ -1067,7 +897,7 @@ def test_should_response_200_limit(self, test_client, limit, expected):
                     "logical_date_gte": timezone.datetime(2024, 10, 30),
                     "logical_date_lte": timezone.datetime(2024, 10, 30),
                 },
-                {"dag_runs": [], "structure": STRUCTURE},
+                {"dag_runs": []},
             ),
             (
                 {
@@ -1075,7 +905,6 @@ def test_should_response_200_limit(self, test_client, limit, expected):
                     "run_after_lte": timezone.datetime(2024, 11, 30),
                 },
                 {
-                    "structure": STRUCTURE,
                     "dag_runs": [GRID_RUN_1, GRID_RUN_2],
                 },
             ),
@@ -1084,7 +913,7 @@ def test_should_response_200_limit(self, test_client, limit, expected):
                     "run_after_gte": timezone.datetime(2024, 10, 30),
                     "run_after_lte": timezone.datetime(2024, 10, 30),
                 },
-                {"dag_runs": [], "structure": STRUCTURE},
+                {"dag_runs": []},
             ),
         ],
     )
@@ -1102,14 +931,12 @@ def test_should_response_200_date_filters(self, test_client, params, expected):
             (
                 ["manual"],
                 {
-                    "structure": STRUCTURE,
                     "dag_runs": [GRID_RUN_2],
                 },
             ),
             (
                 ["scheduled"],
                 {
-                    "structure": STRUCTURE,
                     "dag_runs": [GRID_RUN_1],
                 },
             ),
@@ -1140,20 +967,18 @@ def test_should_response_200_run_types_invalid(self, test_client, run_type, expe
             (
                 ["success"],
                 {
-                    "structure": STRUCTURE,
                     "dag_runs": [GRID_RUN_1],
                 },
             ),
             (
                 ["failed"],
                 {
-                    "structure": STRUCTURE,
                     "dag_runs": [GRID_RUN_2],
                 },
             ),
             (
                 ["running"],
-                {"dag_runs": [], "structure": STRUCTURE},
+                {"dag_runs": []},
             ),
         ],
     )
@@ -1194,22 +1019,6 @@ def test_should_response_200_without_dag_run(self, test_client):
         assert response.status_code == 200
         assert response.json() == {
             "dag_runs": [],
-            "structure": {
-                "nodes": [
-                    {
-                        "asset_condition_type": None,
-                        "children": None,
-                        "id": "task2",
-                        "is_mapped": None,
-                        "label": "task2",
-                        "operator": "EmptyOperator",
-                        "setup_teardown_type": None,
-                        "tooltip": None,
-                        "type": "task",
-                    },
-                ],
-                "edges": [],
-            },
         }
 
     def test_should_response_200_with_deleted_task_and_taskgroup(self, session, test_client):
@@ -1225,68 +1034,15 @@ def test_should_response_200_with_deleted_task_and_taskgroup(self, session, test
         response = test_client.get(f"/grid/{DAG_ID_3}")
         assert response.status_code == 200
         assert response.json() == {
-            "structure": {
-                "edges": [],
-                "nodes": [
-                    {
-                        "asset_condition_type": None,
-                        "children": None,
-                        "id": "task3",
-                        "is_mapped": None,
-                        "label": "task3",
-                        "operator": "EmptyOperator",
-                        "setup_teardown_type": None,
-                        "tooltip": None,
-                        "type": "task",
-                    },
-                    {
-                        "asset_condition_type": None,
-                        "children": None,
-                        "id": "task4",
-                        "is_mapped": None,
-                        "label": "task4",
-                        "operator": "EmptyOperator",
-                        "setup_teardown_type": None,
-                        "tooltip": None,
-                        "type": "task",
-                    },
-                    {
-                        "asset_condition_type": None,
-                        "children": [
-                            {
-                                "asset_condition_type": None,
-                                "children": None,
-                                "id": "task_group.inner_task",
-                                "is_mapped": None,
-                                "label": "inner_task",
-                                "operator": "EmptyOperator",
-                                "setup_teardown_type": None,
-                                "tooltip": None,
-                                "type": "task",
-                            },
-                        ],
-                        "id": "task_group",
-                        "is_mapped": False,
-                        "label": "task_group",
-                        "operator": None,
-                        "setup_teardown_type": None,
-                        "tooltip": "",
-                        "type": "task",
-                    },
-                ],
-            },
             "dag_runs": [
                 {
                     "dag_run_id": "run_3",
                     "data_interval_end": "2024-11-30T00:00:00Z",
                     "data_interval_start": "2024-11-29T00:00:00Z",
-                    "end_date": None,
                     "logical_date": "2024-11-30T00:00:00Z",
-                    "note": None,
                     "queued_at": "2024-12-31T00:00:00Z",
                     "run_after": "2024-11-30T00:00:00Z",
                     "run_type": "scheduled",
-                    "start_date": None,
                     "state": "queued",
                     "task_instances": [
                         {
@@ -1305,10 +1061,6 @@ def test_should_response_200_with_deleted_task_and_taskgroup(self, session, test
                                 "up_for_retry": 0,
                                 "upstream_failed": 0,
                             },
-                            "end_date": None,
-                            "note": None,
-                            "queued_dttm": None,
-                            "start_date": None,
                             "state": "success",
                             "task_count": 1,
                             "task_id": "task_group",
@@ -1330,10 +1082,6 @@ def test_should_response_200_with_deleted_task_and_taskgroup(self, session, test
                                 "up_for_retry": 0,
                                 "upstream_failed": 0,
                             },
-                            "end_date": None,
-                            "note": None,
-                            "queued_dttm": None,
-                            "start_date": None,
                             "state": "success",
                             "task_count": 1,
                             "task_id": "task3",
@@ -1355,10 +1103,6 @@ def test_should_response_200_with_deleted_task_and_taskgroup(self, session, test
                                 "up_for_retry": 0,
                                 "upstream_failed": 0,
                             },
-                            "end_date": None,
-                            "note": None,
-                            "queued_dttm": None,
-                            "start_date": None,
                             "state": "success",
                             "task_count": 1,
                             "task_id": "task_group.inner_task",
@@ -1372,8 +1116,6 @@ def test_should_response_200_with_deleted_task_and_taskgroup(self, session, test
                     "data_interval_start": "2024-11-29T00:00:00Z",
                     "end_date": "2024-12-31T00:00:00Z",
                     "logical_date": "2024-12-01T00:00:00Z",
-                    "note": None,
-                    "queued_at": None,
                     "run_after": "2024-11-30T00:00:00Z",
                     "run_type": "manual",
                     "start_date": "2024-11-30T00:00:00Z",
@@ -1395,10 +1137,6 @@ def test_should_response_200_with_deleted_task_and_taskgroup(self, session, test
                                 "up_for_retry": 0,
                                 "upstream_failed": 0,
                             },
-                            "end_date": None,
-                            "note": None,
-                            "queued_dttm": None,
-                            "start_date": None,
                             "state": "success",
                             "task_count": 1,
                             "task_id": "task3",
@@ -1408,3 +1146,119 @@ def test_should_response_200_with_deleted_task_and_taskgroup(self, session, test
                 },
             ],
         }
+
+    def test_get_dag_structure(self, session, test_client):
+        session.commit()
+        response = test_client.get(f"/grid/structure/{DAG_ID}?limit=5")
+        assert response.status_code == 200
+        assert response.json() == [
+            {
+                "children": [{"id": "mapped_task_group.subtask", "is_mapped": True, "label": "subtask"}],
+                "id": "mapped_task_group",
+                "is_mapped": True,
+                "label": "mapped_task_group",
+            },
+            {"id": "task", "label": "task"},
+            {
+                "children": [
+                    {
+                        "children": [
+                            {
+                                "id": "task_group.inner_task_group.inner_task_group_sub_task",
+                                "is_mapped": True,
+                                "label": "inner_task_group_sub_task",
+                            }
+                        ],
+                        "id": "task_group.inner_task_group",
+                        "label": "inner_task_group",
+                    },
+                    {"id": "task_group.mapped_task", "is_mapped": True, "label": "mapped_task"},
+                ],
+                "id": "task_group",
+                "label": "task_group",
+            },
+            {"id": "mapped_task_2", "is_mapped": True, "label": "mapped_task_2"},
+        ]
+
+    def test_get_grid_runs(self, session, test_client):
+        session.commit()
+        response = test_client.get(f"/grid/runs/{DAG_ID}?limit=5")
+        assert response.status_code == 200
+        assert response.json() == [
+            {
+                "dag_id": "test_dag",
+                "duration": 0,
+                "end_date": "2024-12-31T00:00:00Z",
+                "run_after": "2024-11-30T00:00:00Z",
+                "run_id": "run_1",
+                "run_type": "scheduled",
+                "start_date": "2016-01-01T00:00:00Z",
+                "state": "success",
+            },
+            {
+                "dag_id": "test_dag",
+                "duration": 0,
+                "end_date": "2024-12-31T00:00:00Z",
+                "run_after": "2024-11-30T00:00:00Z",
+                "run_id": "run_2",
+                "run_type": "manual",
+                "start_date": "2016-01-01T00:00:00Z",
+                "state": "failed",
+            },
+        ]
+
+    def test_grid_ti_summaries_group(self, session, test_client):
+        run_id = "run_4-1"
+        session.commit()
+        response = test_client.get(f"/grid/ti_summaries/{DAG_ID_4}/{run_id}")
+        assert response.status_code == 200
+        actual = response.json()
+        expected = {
+            "dag_id": "test_dag_4",
+            "run_id": "run_4-1",
+            "task_instances": [
+                {"state": "success", "task_id": "t1"},
+                {"state": "success", "task_id": "t2"},
+                {"state": "success", "task_id": "t7"},
+                {"state": "success", "task_id": "task_group-1"},
+                {"state": "success", "task_id": "task_group-1.t6"},
+                {"state": "success", "task_id": "task_group-1.task_group-2"},
+                {"state": "success", "task_id": "task_group-1.task_group-2.t3"},
+                {"state": "success", "task_id": "task_group-1.task_group-2.t4"},
+                {"state": "success", "task_id": "task_group-1.task_group-2.t5"},
+            ],
+        }
+        for obj in actual, expected:
+            tis = obj["task_instances"]
+            tis[:] = sorted(tis, key=lambda x: x["task_id"])
+        assert actual == expected
+
+    def test_grid_ti_summaries_mapped(self, session, test_client):
+        run_id = "run_2"
+        session.commit()
+        response = test_client.get(f"/grid/ti_summaries/{DAG_ID}/{run_id}")
+        assert response.status_code == 200
+        data = response.json()
+        actual = data["task_instances"]
+
+        def sort_dict(in_dict):
+            in_dict = sorted(in_dict, key=lambda x: x["task_id"])
+            out = []
+            for d in in_dict:
+                n = {k: d[k] for k in sorted(d, reverse=True)}
+                out.append(n)
+            return out
+
+        expected = [
+            {"task_id": "mapped_task_group", "state": "running"},
+            {"task_id": "task_group.inner_task_group"},
+            {"task_id": "task_group"},
+            {"task_id": "mapped_task_2"},
+            {"task_id": "mapped_task_group.subtask", "state": "running"},
+            {"task_id": "task", "state": "success"},
+            {"task_id": "task_group.inner_task_group.inner_task_group_sub_task"},
+            {"task_id": "task_group.mapped_task"},
+        ]
+        expected = sort_dict(expected)
+        actual = sort_dict(actual)
+        assert actual == expected

From 121a31f0647901ea598ed26cd89dcfd39f51f986 Mon Sep 17 00:00:00 2001
From: Pierre Jeambrun <pierrejbrun@gmail.com>
Date: Thu, 26 Jun 2025 18:49:36 +0200
Subject: [PATCH 212/381] Add React Apps to plugin (#52255)

Unrelated CI failure.
---
 .../administration-and-deployment/plugins.rst | 42 +++++++--
 .../docs/howto/custom-view-plugin.rst         | 12 ++-
 .../core_api/datamodels/plugins.py            | 22 ++++-
 .../openapi/v2-rest-api-generated.yaml        | 59 +++++++++++-
 airflow-core/src/airflow/plugins_manager.py   |  8 +-
 .../ui/openapi-gen/requests/schemas.gen.ts    | 87 ++++++++++++++++--
 .../ui/openapi-gen/requests/types.gen.ts      | 19 +++-
 .../unit/cli/commands/test_plugins_command.py | 10 ++
 .../tests/unit/plugins/test_plugin.py         | 10 ++
 .../airflowctl/api/datamodels/generated.py    | 92 +++++++++++--------
 .../tests_common/test_utils/mock_plugins.py   |  1 +
 docs/spelling_wordlist.txt                    |  1 +
 12 files changed, 299 insertions(+), 64 deletions(-)

diff --git a/airflow-core/docs/administration-and-deployment/plugins.rst b/airflow-core/docs/administration-and-deployment/plugins.rst
index 2daa6036ddb11..c0a1b5129db59 100644
--- a/airflow-core/docs/administration-and-deployment/plugins.rst
+++ b/airflow-core/docs/administration-and-deployment/plugins.rst
@@ -108,8 +108,10 @@ looks like:
         fastapi_apps = []
         # A list of dictionaries containing FastAPI middleware factory objects and some metadata. See the example below.
         fastapi_root_middlewares = []
-        # A list of dictionaries containing iframe views and some metadata. See the example below.
+        # A list of dictionaries containing external views and some metadata. See the example below.
         external_views = []
+        # A list of dictionaries containing react apps and some metadata. See the example below.
+        react_apps = []
 
         # A callback to perform actions when Airflow starts and the plugin is loaded.
         # NOTE: Ensure your plugin has *args, and **kwargs in the method definition
@@ -194,27 +196,50 @@ definitions in Airflow.
         "name": "Name of the Middleware",
     }
 
-    # Creating a iframe view that will be rendered in the Airflow UI.
+    # Creating an external view that will be rendered in the Airflow UI.
     external_view_with_metadata = {
-        "name": "Name of the Iframe View as displayed in the UI",
+        # Name of the external view, this will be displayed in the UI.
+        "name": "Name of the External View",
         # Source URL of the external view. This URL can be templated using context variables, depending on the location where the external view is rendered
         # the context variables available will be different, i.e a subset of (DAG_ID, RUN_ID, TASK_ID, MAP_INDEX).
-        "href": "https://example.com/{DAG_ID}/{RUN_ID}/{TASK_ID}",
-        # Destination of the iframe view. This is used to determine where the iframe will be loaded in the UI.
+        "href": "https://example.com/{DAG_ID}/{RUN_ID}/{TASK_ID}/{MAP_INDEX}",
+        # Destination of the external view. This is used to determine where the view will be loaded in the UI.
         # Supported locations are Literal["nav", "dag", "dag_run", "task", "task_instance"], default to "nav".
         "destination": "dag_run",
         # Optional icon, url to an svg file.
         "icon": "https://example.com/icon.svg",
         # Optional dark icon for the dark theme, url to an svg file. If not provided, "icon" will be used for both light and dark themes.
         "icon_dark_mode": "https://example.com/dark_icon.svg",
-        # Optional parameters, relative URL location for the iframe rendering. If not provided, external view will be rendeded as an external link. Should
-        # not contain a leading slash.
-        "url_route": "my_iframe_view",
+        # Optional parameters, relative URL location for the External View rendering. If not provided, external view will be rendeded as an external link. If provided
+        # will be rendered inside an Iframe in the UI. Should not contain a leading slash.
+        "url_route": "my_external_view",
         # Optional category, only relevant for destination "nav". This is used to group the external links in the navigation bar.  We will match the existing
         # menus of ["browse", "docs", "admin", "user"] and if there's no match then create a new menu.
         "category": "browse",
     }
 
+    react_app_with_metadata = {
+        # Name of the React app, this will be displayed in the UI.
+        "name": "Name of the React App",
+        # Bundle URL of the React app. This is the URL where the React app is served from. It can be a static file or a CDN.
+        # This URL can be templated using context variables, depending on the location where the external view is rendered
+        # the context variables available will be different, i.e a subset of (DAG_ID, RUN_ID, TASK_ID, MAP_INDEX).
+        "bundle_url": "https://example.com/static/js/my_react_app.js",
+        # Destination of the react app. This is used to determine where the app will be loaded in the UI.
+        # Supported locations are Literal["nav", "dag", "dag_run", "task", "task_instance"], default to "nav".
+        # It can also be put inside of an existing page, the supported views are ["dashboard", "dag_overview", "task_overview"]
+        "destination": "dag_run",
+        # Optional icon, url to an svg file.
+        "icon": "https://example.com/icon.svg",
+        # Optional dark icon for the dark theme, url to an svg file. If not provided, "icon" will be used for both light and dark themes.
+        "icon_dark_mode": "https://example.com/dark_icon.svg",
+        # URL route for the React app, relative to the Airflow UI base URL. Should not contain a leading slash.
+        "url_route": "my_react_app",
+        # Optional category, only relevant for destination "nav". This is used to group the react apps in the navigation bar. We will match the existing
+        # menus of ["browse", "docs", "admin", "user"] and if there's no match then create a new menu.
+        "category": "browse",
+    }
+
 
     # Defining the plugin class
     class AirflowTestPlugin(AirflowPlugin):
@@ -223,6 +248,7 @@ definitions in Airflow.
         fastapi_apps = [app_with_metadata]
         fastapi_root_middlewares = [middleware_with_metadata]
         external_views = [external_view_with_metadata]
+        react_apps = [react_app_with_metadata]
 
 .. seealso:: :doc:`/howto/define-extra-link`
 
diff --git a/airflow-core/docs/howto/custom-view-plugin.rst b/airflow-core/docs/howto/custom-view-plugin.rst
index 74a2891f47615..38111354b9f5b 100644
--- a/airflow-core/docs/howto/custom-view-plugin.rst
+++ b/airflow-core/docs/howto/custom-view-plugin.rst
@@ -24,7 +24,7 @@ core UI using the Plugin manager.
 
 Plugins integrate with the Airflow core RestAPI. In this plugin,
 three object references are derived from the base class ``airflow.plugins_manager.AirflowPlugin``.
-They are fastapi_apps, fastapi_root_middlewares and external_views.
+They are fastapi_apps, fastapi_root_middlewares, external_views and react_apps.
 
 Using fastapi_apps in Airflow plugin, the core RestAPI can be extended
 to support extra endpoints to serve custom static file or any other json/application responses.
@@ -39,10 +39,16 @@ initialization parameters and some metadata information like the name are passed
 
 Using external_views in Airflow plugin, allows to register custom views that are rendered in iframes or external link
 in the Airflow UI. This is useful for integrating external applications or custom dashboards into the Airflow UI.
-In this object reference, the list of dictionaries with the view name, iframe src (templatable), destination and
+In this object reference, the list of dictionaries with the view name, href (templatable), destination and
 optional parameters like the icon and url_route are passed on.
 
-Information and code samples to register ``fastapi_apps``, ``fastapi_root_middlewares`` and ``external_views`` are
+Using react_apps  in Airflow plugin, allows to register custom React applications that can be rendered
+in the Airflow UI. This is useful for integrating custom React components or applications into the Airflow UI.
+In this object reference, the list of dictionaries with the app name, bundle_url (where to load the js assets, templatable), destination and
+optional parameters like the icon and url_route are passed on.
+
+
+Information and code samples to register ``fastapi_apps``, ``fastapi_root_middlewares``, ``external_views`` and ``react_apps`` are
 available in :doc:`plugin </administration-and-deployment/plugins>`.
 
 Support for Airflow 2 plugins
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/plugins.py b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/plugins.py
index daf712a8eda0e..61d4ec8a0842b 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/plugins.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/plugins.py
@@ -69,13 +69,12 @@ class AppBuilderMenuItemResponse(BaseModel):
     category: str | None = None
 
 
-class ExternalViewResponse(BaseModel):
-    """Serializer for IFrame Plugin responses."""
+class BaseUIResponse(BaseModel):
+    """Base serializer for UI Plugin responses."""
 
     model_config = ConfigDict(extra="allow")
 
     name: str
-    href: str
     icon: str | None = None
     icon_dark_mode: str | None = None
     url_route: str | None = None
@@ -83,6 +82,22 @@ class ExternalViewResponse(BaseModel):
     destination: Literal["nav", "dag", "dag_run", "task", "task_instance"] = "nav"
 
 
+class ExternalViewResponse(BaseUIResponse):
+    """Serializer for External View Plugin responses."""
+
+    model_config = ConfigDict(extra="allow")
+
+    href: str
+
+
+class ReactAppResponse(BaseUIResponse):
+    """Serializer for React App Plugin responses."""
+
+    model_config = ConfigDict(extra="allow")
+
+    bundle_url: str
+
+
 class PluginResponse(BaseModel):
     """Plugin serializer."""
 
@@ -94,6 +109,7 @@ class PluginResponse(BaseModel):
     external_views: list[ExternalViewResponse] = Field(
         description="Aggregate all external views. Both 'external_views' and 'appbuilder_menu_items' are included here."
     )
+    react_apps: list[ReactAppResponse]
     appbuilder_views: list[AppBuilderViewResponse]
     appbuilder_menu_items: list[AppBuilderMenuItemResponse] = Field(
         deprecated="Kept for backward compatibility, use `external_views` instead.",
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml b/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml
index 478316b43369a..a3fd6d5cbd805 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml
+++ b/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml
@@ -9297,9 +9297,6 @@ components:
         name:
           type: string
           title: Name
-        href:
-          type: string
-          title: Href
         icon:
           anyOf:
           - type: string
@@ -9330,13 +9327,16 @@ components:
           - task_instance
           title: Destination
           default: nav
+        href:
+          type: string
+          title: Href
       additionalProperties: true
       type: object
       required:
       - name
       - href
       title: ExternalViewResponse
-      description: Serializer for IFrame Plugin responses.
+      description: Serializer for External View Plugin responses.
     ExtraLinkCollectionResponse:
       properties:
         extra_links:
@@ -9691,6 +9691,11 @@ components:
           title: External Views
           description: Aggregate all external views. Both 'external_views' and 'appbuilder_menu_items'
             are included here.
+        react_apps:
+          items:
+            $ref: '#/components/schemas/ReactAppResponse'
+          type: array
+          title: React Apps
         appbuilder_views:
           items:
             $ref: '#/components/schemas/AppBuilderViewResponse'
@@ -9733,6 +9738,7 @@ components:
       - fastapi_apps
       - fastapi_root_middlewares
       - external_views
+      - react_apps
       - appbuilder_views
       - appbuilder_menu_items
       - global_operator_extra_links
@@ -9930,6 +9936,51 @@ components:
       - dag_display_name
       title: QueuedEventResponse
       description: Queued Event serializer for responses..
+    ReactAppResponse:
+      properties:
+        name:
+          type: string
+          title: Name
+        icon:
+          anyOf:
+          - type: string
+          - type: 'null'
+          title: Icon
+        icon_dark_mode:
+          anyOf:
+          - type: string
+          - type: 'null'
+          title: Icon Dark Mode
+        url_route:
+          anyOf:
+          - type: string
+          - type: 'null'
+          title: Url Route
+        category:
+          anyOf:
+          - type: string
+          - type: 'null'
+          title: Category
+        destination:
+          type: string
+          enum:
+          - nav
+          - dag
+          - dag_run
+          - task
+          - task_instance
+          title: Destination
+          default: nav
+        bundle_url:
+          type: string
+          title: Bundle Url
+      additionalProperties: true
+      type: object
+      required:
+      - name
+      - bundle_url
+      title: ReactAppResponse
+      description: Serializer for React App Plugin responses.
     ReprocessBehavior:
       type: string
       enum:
diff --git a/airflow-core/src/airflow/plugins_manager.py b/airflow-core/src/airflow/plugins_manager.py
index 8874864286b77..2b0b324e9e352 100644
--- a/airflow-core/src/airflow/plugins_manager.py
+++ b/airflow-core/src/airflow/plugins_manager.py
@@ -70,6 +70,7 @@
 fastapi_apps: list[Any] | None = None
 fastapi_root_middlewares: list[Any] | None = None
 external_views: list[Any] | None = None
+react_apps: list[Any] | None = None
 menu_links: list[Any] | None = None
 flask_appbuilder_views: list[Any] | None = None
 flask_appbuilder_menu_links: list[Any] | None = None
@@ -92,6 +93,7 @@
     "fastapi_apps",
     "fastapi_root_middlewares",
     "external_views",
+    "react_apps",
     "menu_links",
     "appbuilder_views",
     "appbuilder_menu_items",
@@ -157,6 +159,7 @@ class AirflowPlugin:
     fastapi_apps: list[Any] = []
     fastapi_root_middlewares: list[Any] = []
     external_views: list[Any] = []
+    react_apps: list[Any] = []
     menu_links: list[Any] = []
     appbuilder_views: list[Any] = []
     appbuilder_menu_items: list[Any] = []
@@ -372,8 +375,9 @@ def initialize_ui_plugins():
     """Collect extension points for the UI."""
     global plugins
     global external_views
+    global react_apps
 
-    if external_views is not None:
+    if external_views is not None and react_apps is not None:
         return
 
     ensure_plugins_loaded()
@@ -384,9 +388,11 @@ def initialize_ui_plugins():
     log.debug("Initialize UI plugin")
 
     external_views = []
+    react_apps = []
 
     for plugin in plugins:
         external_views.extend(plugin.external_views)
+        react_apps.extend(plugin.react_apps)
 
 
 def initialize_flask_plugins():
diff --git a/airflow-core/src/airflow/ui/openapi-gen/requests/schemas.gen.ts b/airflow-core/src/airflow/ui/openapi-gen/requests/schemas.gen.ts
index fceda3e7af1e2..ef5a2f6a57ea6 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/requests/schemas.gen.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/requests/schemas.gen.ts
@@ -3268,10 +3268,6 @@ export const $ExternalViewResponse = {
             type: 'string',
             title: 'Name'
         },
-        href: {
-            type: 'string',
-            title: 'Href'
-        },
         icon: {
             anyOf: [
                 {
@@ -3321,13 +3317,17 @@ export const $ExternalViewResponse = {
             enum: ['nav', 'dag', 'dag_run', 'task', 'task_instance'],
             title: 'Destination',
             default: 'nav'
+        },
+        href: {
+            type: 'string',
+            title: 'Href'
         }
     },
     additionalProperties: true,
     type: 'object',
     required: ['name', 'href'],
     title: 'ExternalViewResponse',
-    description: 'Serializer for IFrame Plugin responses.'
+    description: 'Serializer for External View Plugin responses.'
 } as const;
 
 export const $ExtraLinkCollectionResponse = {
@@ -3847,6 +3847,13 @@ export const $PluginResponse = {
             title: 'External Views',
             description: "Aggregate all external views. Both 'external_views' and 'appbuilder_menu_items' are included here."
         },
+        react_apps: {
+            items: {
+                '$ref': '#/components/schemas/ReactAppResponse'
+            },
+            type: 'array',
+            title: 'React Apps'
+        },
         appbuilder_views: {
             items: {
                 '$ref': '#/components/schemas/AppBuilderViewResponse'
@@ -3896,7 +3903,7 @@ export const $PluginResponse = {
         }
     },
     type: 'object',
-    required: ['name', 'macros', 'flask_blueprints', 'fastapi_apps', 'fastapi_root_middlewares', 'external_views', 'appbuilder_views', 'appbuilder_menu_items', 'global_operator_extra_links', 'operator_extra_links', 'source', 'listeners', 'timetables'],
+    required: ['name', 'macros', 'flask_blueprints', 'fastapi_apps', 'fastapi_root_middlewares', 'external_views', 'react_apps', 'appbuilder_views', 'appbuilder_menu_items', 'global_operator_extra_links', 'operator_extra_links', 'source', 'listeners', 'timetables'],
     title: 'PluginResponse',
     description: 'Plugin serializer.'
 } as const;
@@ -4152,6 +4159,74 @@ export const $QueuedEventResponse = {
     description: 'Queued Event serializer for responses..'
 } as const;
 
+export const $ReactAppResponse = {
+    properties: {
+        name: {
+            type: 'string',
+            title: 'Name'
+        },
+        icon: {
+            anyOf: [
+                {
+                    type: 'string'
+                },
+                {
+                    type: 'null'
+                }
+            ],
+            title: 'Icon'
+        },
+        icon_dark_mode: {
+            anyOf: [
+                {
+                    type: 'string'
+                },
+                {
+                    type: 'null'
+                }
+            ],
+            title: 'Icon Dark Mode'
+        },
+        url_route: {
+            anyOf: [
+                {
+                    type: 'string'
+                },
+                {
+                    type: 'null'
+                }
+            ],
+            title: 'Url Route'
+        },
+        category: {
+            anyOf: [
+                {
+                    type: 'string'
+                },
+                {
+                    type: 'null'
+                }
+            ],
+            title: 'Category'
+        },
+        destination: {
+            type: 'string',
+            enum: ['nav', 'dag', 'dag_run', 'task', 'task_instance'],
+            title: 'Destination',
+            default: 'nav'
+        },
+        bundle_url: {
+            type: 'string',
+            title: 'Bundle Url'
+        }
+    },
+    additionalProperties: true,
+    type: 'object',
+    required: ['name', 'bundle_url'],
+    title: 'ReactAppResponse',
+    description: 'Serializer for React App Plugin responses.'
+} as const;
+
 export const $ReprocessBehavior = {
     type: 'string',
     enum: ['failed', 'completed', 'none'],
diff --git a/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts b/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts
index 18c4d48a09f94..e22e3cb52f714 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts
@@ -872,16 +872,16 @@ export type ExternalLogUrlResponse = {
 };
 
 /**
- * Serializer for IFrame Plugin responses.
+ * Serializer for External View Plugin responses.
  */
 export type ExternalViewResponse = {
     name: string;
-    href: string;
     icon?: string | null;
     icon_dark_mode?: string | null;
     url_route?: string | null;
     category?: string | null;
     destination?: 'nav' | 'dag' | 'dag_run' | 'task' | 'task_instance';
+    href: string;
     [key: string]: unknown | string;
 };
 
@@ -1042,6 +1042,7 @@ export type PluginResponse = {
      * Aggregate all external views. Both 'external_views' and 'appbuilder_menu_items' are included here.
      */
     external_views: Array<ExternalViewResponse>;
+    react_apps: Array<ReactAppResponse>;
     appbuilder_views: Array<AppBuilderViewResponse>;
     /**
      * @deprecated
@@ -1133,6 +1134,20 @@ export type QueuedEventResponse = {
     dag_display_name: string;
 };
 
+/**
+ * Serializer for React App Plugin responses.
+ */
+export type ReactAppResponse = {
+    name: string;
+    icon?: string | null;
+    icon_dark_mode?: string | null;
+    url_route?: string | null;
+    category?: string | null;
+    destination?: 'nav' | 'dag' | 'dag_run' | 'task' | 'task_instance';
+    bundle_url: string;
+    [key: string]: unknown | string;
+};
+
 /**
  * Internal enum for setting reprocess behavior in a backfill.
  *
diff --git a/airflow-core/tests/unit/cli/commands/test_plugins_command.py b/airflow-core/tests/unit/cli/commands/test_plugins_command.py
index 885a8b2510fe6..c6362935c1315 100644
--- a/airflow-core/tests/unit/cli/commands/test_plugins_command.py
+++ b/airflow-core/tests/unit/cli/commands/test_plugins_command.py
@@ -100,6 +100,16 @@ def test_should_display_one_plugin(self):
                         "category": "browse",
                     },
                 ],
+                "react_apps": [
+                    {
+                        "name": "Test React App",
+                        "bundle_url": "https://example.com/test-plugin-bundle.js",
+                        "icon": "https://raw.githubusercontent.com/lucide-icons/lucide/refs/heads/main/icons/plug.svg",
+                        "url_route": "test_react_app",
+                        "destination": "nav",
+                        "category": "browse",
+                    }
+                ],
                 "appbuilder_views": [
                     {
                         "name": "Test View",
diff --git a/airflow-core/tests/unit/plugins/test_plugin.py b/airflow-core/tests/unit/plugins/test_plugin.py
index 7901e1cc99b55..c4c1fac515016 100644
--- a/airflow-core/tests/unit/plugins/test_plugin.py
+++ b/airflow-core/tests/unit/plugins/test_plugin.py
@@ -111,6 +111,15 @@ async def dispatch(self, request, call_next):
     "category": "browse",
 }
 
+react_app_with_metadata = {
+    "name": "Test React App",
+    "bundle_url": "https://example.com/test-plugin-bundle.js",
+    "icon": "https://raw.githubusercontent.com/lucide-icons/lucide/refs/heads/main/icons/plug.svg",
+    "url_route": "test_react_app",
+    "destination": "nav",
+    "category": "browse",
+}
+
 
 # Extend an existing class to avoid the need to implement the full interface
 class CustomCronDataIntervalTimetable(CronDataIntervalTimetable):
@@ -130,6 +139,7 @@ class AirflowTestPlugin(AirflowPlugin):
     fastapi_apps = [app_with_metadata]
     fastapi_root_middlewares = [middleware_with_metadata]
     external_views = [external_view_with_metadata]
+    react_apps = [react_app_with_metadata]
     appbuilder_views = [v_appbuilder_package]
     appbuilder_menu_items = [appbuilder_mitem, appbuilder_mitem_toplevel]
     global_operator_extra_links = [
diff --git a/airflow-ctl/src/airflowctl/api/datamodels/generated.py b/airflow-ctl/src/airflowctl/api/datamodels/generated.py
index 86e1ba25d70f5..d09287840c67e 100644
--- a/airflow-ctl/src/airflowctl/api/datamodels/generated.py
+++ b/airflow-ctl/src/airflowctl/api/datamodels/generated.py
@@ -524,19 +524,19 @@ class Destination(str, Enum):
 
 class ExternalViewResponse(BaseModel):
     """
-    Serializer for IFrame Plugin responses.
+    Serializer for External View Plugin responses.
     """
 
     model_config = ConfigDict(
         extra="allow",
     )
     name: Annotated[str, Field(title="Name")]
-    href: Annotated[str, Field(title="Href")]
     icon: Annotated[str | None, Field(title="Icon")] = None
     icon_dark_mode: Annotated[str | None, Field(title="Icon Dark Mode")] = None
     url_route: Annotated[str | None, Field(title="Url Route")] = None
     category: Annotated[str | None, Field(title="Category")] = None
     destination: Annotated[Destination | None, Field(title="Destination")] = "nav"
+    href: Annotated[str, Field(title="Href")]
 
 
 class ExtraLinkCollectionResponse(BaseModel):
@@ -637,34 +637,6 @@ class PluginImportErrorResponse(BaseModel):
     error: Annotated[str, Field(title="Error")]
 
 
-class PluginResponse(BaseModel):
-    """
-    Plugin serializer.
-    """
-
-    name: Annotated[str, Field(title="Name")]
-    macros: Annotated[list[str], Field(title="Macros")]
-    flask_blueprints: Annotated[list[str], Field(title="Flask Blueprints")]
-    fastapi_apps: Annotated[list[FastAPIAppResponse], Field(title="Fastapi Apps")]
-    fastapi_root_middlewares: Annotated[
-        list[FastAPIRootMiddlewareResponse], Field(title="Fastapi Root Middlewares")
-    ]
-    external_views: Annotated[
-        list[ExternalViewResponse],
-        Field(
-            description="Aggregate all external views. Both 'external_views' and 'appbuilder_menu_items' are included here.",
-            title="External Views",
-        ),
-    ]
-    appbuilder_views: Annotated[list[AppBuilderViewResponse], Field(title="Appbuilder Views")]
-    appbuilder_menu_items: Annotated[list[AppBuilderMenuItemResponse], Field(title="Appbuilder Menu Items")]
-    global_operator_extra_links: Annotated[list[str], Field(title="Global Operator Extra Links")]
-    operator_extra_links: Annotated[list[str], Field(title="Operator Extra Links")]
-    source: Annotated[str, Field(title="Source")]
-    listeners: Annotated[list[str], Field(title="Listeners")]
-    timetables: Annotated[list[str], Field(title="Timetables")]
-
-
 class PoolBody(BaseModel):
     """
     Pool serializer for post bodies.
@@ -731,6 +703,23 @@ class QueuedEventResponse(BaseModel):
     dag_display_name: Annotated[str, Field(title="Dag Display Name")]
 
 
+class ReactAppResponse(BaseModel):
+    """
+    Serializer for React App Plugin responses.
+    """
+
+    model_config = ConfigDict(
+        extra="allow",
+    )
+    name: Annotated[str, Field(title="Name")]
+    icon: Annotated[str | None, Field(title="Icon")] = None
+    icon_dark_mode: Annotated[str | None, Field(title="Icon Dark Mode")] = None
+    url_route: Annotated[str | None, Field(title="Url Route")] = None
+    category: Annotated[str | None, Field(title="Category")] = None
+    destination: Annotated[Destination | None, Field(title="Destination")] = "nav"
+    bundle_url: Annotated[str, Field(title="Bundle Url")]
+
+
 class ReprocessBehavior(str, Enum):
     """
     Internal enum for setting reprocess behavior in a backfill.
@@ -1484,22 +1473,42 @@ class PatchTaskInstanceBody(BaseModel):
     include_past: Annotated[bool | None, Field(title="Include Past")] = False
 
 
-class PluginCollectionResponse(BaseModel):
+class PluginImportErrorCollectionResponse(BaseModel):
     """
-    Plugin Collection serializer.
+    Plugin Import Error Collection serializer.
     """
 
-    plugins: Annotated[list[PluginResponse], Field(title="Plugins")]
+    import_errors: Annotated[list[PluginImportErrorResponse], Field(title="Import Errors")]
     total_entries: Annotated[int, Field(title="Total Entries")]
 
 
-class PluginImportErrorCollectionResponse(BaseModel):
+class PluginResponse(BaseModel):
     """
-    Plugin Import Error Collection serializer.
+    Plugin serializer.
     """
 
-    import_errors: Annotated[list[PluginImportErrorResponse], Field(title="Import Errors")]
-    total_entries: Annotated[int, Field(title="Total Entries")]
+    name: Annotated[str, Field(title="Name")]
+    macros: Annotated[list[str], Field(title="Macros")]
+    flask_blueprints: Annotated[list[str], Field(title="Flask Blueprints")]
+    fastapi_apps: Annotated[list[FastAPIAppResponse], Field(title="Fastapi Apps")]
+    fastapi_root_middlewares: Annotated[
+        list[FastAPIRootMiddlewareResponse], Field(title="Fastapi Root Middlewares")
+    ]
+    external_views: Annotated[
+        list[ExternalViewResponse],
+        Field(
+            description="Aggregate all external views. Both 'external_views' and 'appbuilder_menu_items' are included here.",
+            title="External Views",
+        ),
+    ]
+    react_apps: Annotated[list[ReactAppResponse], Field(title="React Apps")]
+    appbuilder_views: Annotated[list[AppBuilderViewResponse], Field(title="Appbuilder Views")]
+    appbuilder_menu_items: Annotated[list[AppBuilderMenuItemResponse], Field(title="Appbuilder Menu Items")]
+    global_operator_extra_links: Annotated[list[str], Field(title="Global Operator Extra Links")]
+    operator_extra_links: Annotated[list[str], Field(title="Operator Extra Links")]
+    source: Annotated[str, Field(title="Source")]
+    listeners: Annotated[list[str], Field(title="Listeners")]
+    timetables: Annotated[list[str], Field(title="Timetables")]
 
 
 class PoolCollectionResponse(BaseModel):
@@ -1771,6 +1780,15 @@ class DagStatsCollectionResponse(BaseModel):
     total_entries: Annotated[int, Field(title="Total Entries")]
 
 
+class PluginCollectionResponse(BaseModel):
+    """
+    Plugin Collection serializer.
+    """
+
+    plugins: Annotated[list[PluginResponse], Field(title="Plugins")]
+    total_entries: Annotated[int, Field(title="Total Entries")]
+
+
 class TaskCollectionResponse(BaseModel):
     """
     Task collection serializer for responses.
diff --git a/devel-common/src/tests_common/test_utils/mock_plugins.py b/devel-common/src/tests_common/test_utils/mock_plugins.py
index 7426df1801d11..5d2440bc2d534 100644
--- a/devel-common/src/tests_common/test_utils/mock_plugins.py
+++ b/devel-common/src/tests_common/test_utils/mock_plugins.py
@@ -29,6 +29,7 @@
     "fastapi_apps",
     "fastapi_root_middlewares",
     "external_views",
+    "react_apps",
     "menu_links",
     "flask_appbuilder_views",
     "flask_appbuilder_menu_links",
diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt
index 36cdf13b293fa..a146fb417b2df 100644
--- a/docs/spelling_wordlist.txt
+++ b/docs/spelling_wordlist.txt
@@ -831,6 +831,7 @@ hotfix
 Hou
 howto
 hql
+href
 html
 htmlcontent
 Http

From 9275f7b284bc57377eba30b766d1fef21a636ffc Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Thu, 26 Jun 2025 22:46:49 +0200
Subject: [PATCH 213/381] Skip test that needs the .git folder when it is
 missing (#52305)

When you run breeze tests in breeze - by default .git folder is
missing because it is not mounted to inside breeze. This can be
remediated with `breeze shell --mount all` but this test should
simply not run if .git folder is missing.
---
 dev/breeze/tests/test_selective_checks.py | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/dev/breeze/tests/test_selective_checks.py b/dev/breeze/tests/test_selective_checks.py
index 9b67138a9a707..cc3b5e4abc0df 100644
--- a/dev/breeze/tests/test_selective_checks.py
+++ b/dev/breeze/tests/test_selective_checks.py
@@ -36,6 +36,7 @@
 )
 from airflow_breeze.utils.functools_cache import clearable_cache
 from airflow_breeze.utils.packages import get_available_distributions
+from airflow_breeze.utils.path_utils import AIRFLOW_ROOT_PATH
 from airflow_breeze.utils.selective_checks import (
     ALL_CI_SELECTIVE_TEST_TYPES,
     SelectiveChecks,
@@ -1274,6 +1275,10 @@ def test_expected_output_pull_request_main(
     assert_outputs_are_printed(expected_outputs, str(stderr))
 
 
+@pytest.mark.skipif(
+    not (AIRFLOW_ROOT_PATH / ".git").exists(),
+    reason="This test should not run if .git folder is missing (for example by default in breeze container)",
+)
 @pytest.mark.parametrize(
     "files, commit_ref, expected_outputs",
     [

From 1c0c01d99bacec79f1e9e2ea5c6b3fe64e434895 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Thu, 26 Jun 2025 22:47:20 +0200
Subject: [PATCH 214/381] Python versions in shell params are strings (#52306)

The versions were "floats" and it accidentally worked because
they were coerced to strings, but with 3.10 it will be coerced to
the "3.1" string.
---
 dev/breeze/tests/test_shell_params.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/dev/breeze/tests/test_shell_params.py b/dev/breeze/tests/test_shell_params.py
index e4eeb409d4f19..dbcd085ae56d1 100644
--- a/dev/breeze/tests/test_shell_params.py
+++ b/dev/breeze/tests/test_shell_params.py
@@ -33,7 +33,7 @@
     [
         pytest.param(
             {},
-            {"python": 3.12},
+            {"python": "3.12"},
             {
                 "DEFAULT_BRANCH": AIRFLOW_BRANCH,
                 "AIRFLOW_CI_IMAGE": f"ghcr.io/apache/airflow/{AIRFLOW_BRANCH}/ci/python3.12",
@@ -43,7 +43,7 @@
         ),
         pytest.param(
             {},
-            {"python": 3.9},
+            {"python": "3.9"},
             {
                 "AIRFLOW_CI_IMAGE": f"ghcr.io/apache/airflow/{AIRFLOW_BRANCH}/ci/python3.9",
                 "PYTHON_MAJOR_MINOR_VERSION": "3.9",

From 4a9067621fc9898cf2fdd214b89664aed5527cae Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Thu, 26 Jun 2025 22:54:48 +0200
Subject: [PATCH 215/381] Bump pymssql version to 2.3.5 (#52307)

There is a problem with 2.3.4 that the .whl files for MacOS are
broken / missing and when installing with Python 3.10 on MacOS,
pymssql installation fails. Since this is only pymssql, we can
easily bump it to 2.3.5 to avoid it - it is the latest version
installed anyway in main now.
---
 providers/microsoft/mssql/pyproject.toml | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/providers/microsoft/mssql/pyproject.toml b/providers/microsoft/mssql/pyproject.toml
index d7a4e899adb40..79a23ed201a2e 100644
--- a/providers/microsoft/mssql/pyproject.toml
+++ b/providers/microsoft/mssql/pyproject.toml
@@ -59,13 +59,7 @@ requires-python = "~=3.9"
 dependencies = [
     "apache-airflow>=2.10.0",
     "apache-airflow-providers-common-sql>=1.23.0",
-    # pymssql 2.3.3 release to PyPI has been broken on 1st of April 2025
-    # and it is not possible to install it on Linux. We need to exclude it
-    # and either it will be fixed in the next release or we will need to
-    # remove the exclusion if it is fixed and missing packages are uploaded
-    # to PyPI.
-    # Issue: https://github.com/pymssql/pymssql/issues/927
-    "pymssql>=2.3.0,!=2.3.3",
+    "pymssql>=2.3.5",
     # The methodtools dependency can be removed with min airflow version >=2.9.1
     # as it was added in https://github.com/apache/airflow/pull/37757
     "methodtools>=0.4.7",

From 9c7c72c6dd40b1e8de5ff29116c7c408789d6e2b Mon Sep 17 00:00:00 2001
From: Elad Kalif <45845474+eladkal@users.noreply.github.com>
Date: Fri, 27 Jun 2025 00:38:11 +0300
Subject: [PATCH 216/381] Remove pre-commit check-daysago-import-from-utils
 (#52304)

* Remove pre-commit check-daysago-import-from-utils

* fixes
---
 .pre-commit-config.yaml                       |   6 -
 contributing-docs/08_static_code_checks.rst   |   2 -
 dev/breeze/doc/images/output-commands.svg     |   4 +-
 .../doc/images/output_static-checks.svg       | 160 +++++++++---------
 .../doc/images/output_static-checks.txt       |   2 +-
 .../src/airflow_breeze/pre_commit_ids.py      |   1 -
 6 files changed, 81 insertions(+), 94 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 3f0ed6026d5f9..c31f3d6d7b153 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -868,12 +868,6 @@ repos:
         entry: "LoggingMixin\\(\\)"
         files: \.py$
         pass_filenames: true
-      - id: check-daysago-import-from-utils
-        language: pygrep
-        name: days_ago imported from airflow.utils.dates
-        entry: "(airflow\\.){0,1}utils\\.dates\\.days_ago"
-        files: \.py$
-        pass_filenames: true
       - id: check-start-date-not-used-in-defaults
         language: pygrep
         name: start_date not in default_args
diff --git a/contributing-docs/08_static_code_checks.rst b/contributing-docs/08_static_code_checks.rst
index 2081419349f2c..db0c4e3129d7b 100644
--- a/contributing-docs/08_static_code_checks.rst
+++ b/contributing-docs/08_static_code_checks.rst
@@ -155,8 +155,6 @@ require Breeze Docker image to be built locally.
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
 | check-core-deprecation-classes                            | Verify usage of Airflow deprecation classes in core    |         |
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-daysago-import-from-utils                           | days_ago imported from airflow.utils.dates             |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
 | check-decorated-operator-implements-custom-name           | Check @task decorator implements custom_operator_name  |         |
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
 | check-default-configuration                               | Check the default configuration                        | *       |
diff --git a/dev/breeze/doc/images/output-commands.svg b/dev/breeze/doc/images/output-commands.svg
index c82c8759006e7..234bfa5ee81a3 100644
--- a/dev/breeze/doc/images/output-commands.svg
+++ b/dev/breeze/doc/images/output-commands.svg
@@ -329,8 +329,8 @@
 </text><text class="breeze-help-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-help-line-11)">│</text><text class="breeze-help-r7" x="768.6" y="288.4" textLength="671" clip-path="url(#breeze-help-line-11)">gremlin&#160;|&#160;kafka&#160;|&#160;kerberos&#160;|&#160;keycloak&#160;|&#160;mongo&#160;|&#160;mssql&#160;|</text><text class="breeze-help-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-help-line-11)">│</text><text class="breeze-help-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-help-line-11)">
 </text><text class="breeze-help-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-help-line-12)">│</text><text class="breeze-help-r7" x="768.6" y="312.8" textLength="671" clip-path="url(#breeze-help-line-12)">openlineage&#160;|&#160;otel&#160;|&#160;pinot&#160;|&#160;qdrant&#160;|&#160;redis&#160;|&#160;statsd&#160;|&#160;</text><text class="breeze-help-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-help-line-12)">│</text><text class="breeze-help-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-help-line-12)">
 </text><text class="breeze-help-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-help-line-13)">│</text><text class="breeze-help-r7" x="768.6" y="337.2" textLength="671" clip-path="url(#breeze-help-line-13)">trino&#160;|&#160;ydb)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-help-line-13)">│</text><text class="breeze-help-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-help-line-13)">
-</text><text class="breeze-help-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-help-line-14)">│</text><text class="breeze-help-r4" x="24.4" y="361.6" textLength="317.2" clip-path="url(#breeze-help-line-14)">--standalone-dag-processor</text><text class="breeze-help-r1" x="341.6" y="361.6" textLength="12.2" clip-path="url(#breeze-help-line-14)">/</text><text class="breeze-help-r4" x="353.8" y="361.6" textLength="341.6" clip-path="url(#breeze-help-line-14)">--no-standalone-dag-process…</text><text class="breeze-help-r1" x="768.6" y="361.6" textLength="671" clip-path="url(#breeze-help-line-14)">Run&#160;standalone&#160;dag&#160;processor&#160;for&#160;start-airflow&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-help-line-14)">│</text><text class="breeze-help-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-help-line-14)">
-</text><text class="breeze-help-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-help-line-15)">│</text><text class="breeze-help-r1" x="768.6" y="386" textLength="671" clip-path="url(#breeze-help-line-15)">(required&#160;for&#160;Airflow&#160;3).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-help-line-15)">│</text><text class="breeze-help-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-help-line-15)">
+</text><text class="breeze-help-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-help-line-14)">│</text><text class="breeze-help-r4" x="24.4" y="361.6" textLength="317.2" clip-path="url(#breeze-help-line-14)">--standalone-dag-processor</text><text class="breeze-help-r1" x="341.6" y="361.6" textLength="12.2" clip-path="url(#breeze-help-line-14)">/</text><text class="breeze-help-r4" x="353.8" y="361.6" textLength="341.6" clip-path="url(#breeze-help-line-14)">--no-standalone-dag-processo</text><text class="breeze-help-r1" x="768.6" y="361.6" textLength="671" clip-path="url(#breeze-help-line-14)">Run&#160;standalone&#160;dag&#160;processor&#160;for&#160;start-airflow&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-help-line-14)">│</text><text class="breeze-help-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-help-line-14)">
+</text><text class="breeze-help-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-help-line-15)">│</text><text class="breeze-help-r4" x="24.4" y="386" textLength="12.2" clip-path="url(#breeze-help-line-15)">r</text><text class="breeze-help-r1" x="768.6" y="386" textLength="671" clip-path="url(#breeze-help-line-15)">(required&#160;for&#160;Airflow&#160;3).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-help-line-15)">│</text><text class="breeze-help-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-help-line-15)">
 </text><text class="breeze-help-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-help-line-16)">│</text><text class="breeze-help-r5" x="768.6" y="410.4" textLength="671" clip-path="url(#breeze-help-line-16)">[default:&#160;standalone-dag-processor]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-help-line-16)">│</text><text class="breeze-help-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-help-line-16)">
 </text><text class="breeze-help-r5" x="0" y="434.8" textLength="1464" clip-path="url(#breeze-help-line-17)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-help-line-17)">
 </text><text class="breeze-help-r5" x="0" y="459.2" textLength="24.4" clip-path="url(#breeze-help-line-18)">╭─</text><text class="breeze-help-r5" x="24.4" y="459.2" textLength="463.6" clip-path="url(#breeze-help-line-18)">&#160;Docker&#160;Compose&#160;selection&#160;and&#160;cleanup&#160;</text><text class="breeze-help-r5" x="488" y="459.2" textLength="951.6" clip-path="url(#breeze-help-line-18)">──────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="459.2" textLength="24.4" clip-path="url(#breeze-help-line-18)">─╮</text><text class="breeze-help-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-help-line-18)">
diff --git a/dev/breeze/doc/images/output_static-checks.svg b/dev/breeze/doc/images/output_static-checks.svg
index d7ef8a1294667..9918dedfb8bfb 100644
--- a/dev/breeze/doc/images/output_static-checks.svg
+++ b/dev/breeze/doc/images/output_static-checks.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 2270.4" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 2246.0" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-static-checks-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="2219.4" />
+      <rect x="0" y="0" width="1463.0" height="2195.0" />
     </clipPath>
     <clipPath id="breeze-static-checks-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -312,12 +312,9 @@
 <clipPath id="breeze-static-checks-line-88">
     <rect x="0" y="2148.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="breeze-static-checks-line-89">
-    <rect x="0" y="2173.1" width="1464" height="24.65"/>
-            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2268.4" rx="8"/><text class="breeze-static-checks-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;static-checks</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2244" rx="8"/><text class="breeze-static-checks-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;static-checks</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -342,82 +339,81 @@
 </text><text class="breeze-static-checks-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-12)">│</text><text class="breeze-static-checks-r7" x="451.4" y="312.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-12)">check-changelog-format&#160;|&#160;check-changelog-has-no-duplicates&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-12)">│</text><text class="breeze-static-checks-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-12)">
 </text><text class="breeze-static-checks-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-13)">│</text><text class="breeze-static-checks-r7" x="451.4" y="337.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-13)">check-cncf-k8s-only-for-executors&#160;|&#160;check-code-deprecations&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-13)">│</text><text class="breeze-static-checks-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-13)">
 </text><text class="breeze-static-checks-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-14)">│</text><text class="breeze-static-checks-r7" x="451.4" y="361.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-14)">check-common-compat-used-for-openlineage&#160;|&#160;check-core-deprecation-classes&#160;|&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-14)">│</text><text class="breeze-static-checks-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-14)">
-</text><text class="breeze-static-checks-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-static-checks-line-15)">│</text><text class="breeze-static-checks-r7" x="451.4" y="386" textLength="988.2" clip-path="url(#breeze-static-checks-line-15)">check-daysago-import-from-utils&#160;|&#160;check-decorated-operator-implements-custom-name</text><text class="breeze-static-checks-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-static-checks-line-15)">│</text><text class="breeze-static-checks-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-static-checks-line-15)">
-</text><text class="breeze-static-checks-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-16)">│</text><text class="breeze-static-checks-r7" x="451.4" y="410.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-16)">|&#160;check-default-configuration&#160;|&#160;check-deferrable-default&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-16)">│</text><text class="breeze-static-checks-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-16)">
-</text><text class="breeze-static-checks-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-17)">│</text><text class="breeze-static-checks-r7" x="451.4" y="434.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-17)">check-docstring-param-types&#160;|&#160;check-example-dags-urls&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-17)">│</text><text class="breeze-static-checks-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-17)">
-</text><text class="breeze-static-checks-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-18)">│</text><text class="breeze-static-checks-r7" x="451.4" y="459.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-18)">check-executables-have-shebangs&#160;|&#160;check-extra-packages-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-18)">│</text><text class="breeze-static-checks-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-18)">
-</text><text class="breeze-static-checks-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-19)">│</text><text class="breeze-static-checks-r7" x="451.4" y="483.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-19)">check-extras-order&#160;|&#160;check-fab-migrations&#160;|&#160;check-for-inclusive-language&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-19)">│</text><text class="breeze-static-checks-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-19)">
-</text><text class="breeze-static-checks-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-static-checks-line-20)">│</text><text class="breeze-static-checks-r7" x="451.4" y="508" textLength="988.2" clip-path="url(#breeze-static-checks-line-20)">check-get-lineage-collector-providers&#160;|&#160;check-hooks-apply&#160;|&#160;check-i18n-json&#160;|&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-static-checks-line-20)">│</text><text class="breeze-static-checks-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-static-checks-line-20)">
-</text><text class="breeze-static-checks-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-21)">│</text><text class="breeze-static-checks-r7" x="451.4" y="532.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-21)">check-imports-in-providers&#160;|&#160;check-incorrect-use-of-LoggingMixin&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-21)">│</text><text class="breeze-static-checks-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-21)">
-</text><text class="breeze-static-checks-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-22)">│</text><text class="breeze-static-checks-r7" x="451.4" y="556.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-22)">check-init-decorator-arguments&#160;|&#160;check-integrations-list-consistent&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-22)">│</text><text class="breeze-static-checks-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-22)">
-</text><text class="breeze-static-checks-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-23)">│</text><text class="breeze-static-checks-r7" x="451.4" y="581.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-23)">check-lazy-logging&#160;|&#160;check-links-to-example-dags-do-not-use-hardcoded-versions&#160;|&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-23)">│</text><text class="breeze-static-checks-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-23)">
-</text><text class="breeze-static-checks-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-24)">│</text><text class="breeze-static-checks-r7" x="451.4" y="605.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-24)">check-merge-conflict&#160;|&#160;check-min-python-version&#160;|&#160;check-newsfragments-are-valid&#160;|</text><text class="breeze-static-checks-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-24)">│</text><text class="breeze-static-checks-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-24)">
-</text><text class="breeze-static-checks-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-static-checks-line-25)">│</text><text class="breeze-static-checks-r7" x="451.4" y="630" textLength="988.2" clip-path="url(#breeze-static-checks-line-25)">check-no-airflow-deprecation-in-providers&#160;|&#160;check-no-providers-in-core-examples&#160;|</text><text class="breeze-static-checks-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-static-checks-line-25)">│</text><text class="breeze-static-checks-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-static-checks-line-25)">
-</text><text class="breeze-static-checks-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-26)">│</text><text class="breeze-static-checks-r7" x="451.4" y="654.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-26)">check-only-new-session-with-provide-session&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-26)">│</text><text class="breeze-static-checks-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-26)">
-</text><text class="breeze-static-checks-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-27)">│</text><text class="breeze-static-checks-r7" x="451.4" y="678.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-27)">check-persist-credentials-disabled-in-github-workflows&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-27)">│</text><text class="breeze-static-checks-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-27)">
-</text><text class="breeze-static-checks-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-28)">│</text><text class="breeze-static-checks-r7" x="451.4" y="703.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-28)">check-pre-commit-information-consistent&#160;|&#160;check-provide-create-sessions-imports&#160;|</text><text class="breeze-static-checks-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-28)">│</text><text class="breeze-static-checks-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-28)">
-</text><text class="breeze-static-checks-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-29)">│</text><text class="breeze-static-checks-r7" x="451.4" y="727.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-29)">check-provider-docs-valid&#160;|&#160;check-provider-yaml-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-29)">│</text><text class="breeze-static-checks-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-29)">
-</text><text class="breeze-static-checks-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-static-checks-line-30)">│</text><text class="breeze-static-checks-r7" x="451.4" y="752" textLength="988.2" clip-path="url(#breeze-static-checks-line-30)">check-providers-subpackages-init-file-exist&#160;|&#160;check-pydevd-left-in-code&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-static-checks-line-30)">│</text><text class="breeze-static-checks-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-static-checks-line-30)">
-</text><text class="breeze-static-checks-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-31)">│</text><text class="breeze-static-checks-r7" x="451.4" y="776.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-31)">check-pytest-mark-db-test-in-providers&#160;|&#160;check-revision-heads-map&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-31)">│</text><text class="breeze-static-checks-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-31)">
-</text><text class="breeze-static-checks-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-32)">│</text><text class="breeze-static-checks-r7" x="451.4" y="800.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-32)">check-safe-filter-usage-in-html&#160;|&#160;check-significant-newsfragments-are-valid&#160;|&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-32)">│</text><text class="breeze-static-checks-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-32)">
-</text><text class="breeze-static-checks-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-33)">│</text><text class="breeze-static-checks-r7" x="451.4" y="825.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-33)">check-sql-dependency-common-data-structure&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-33)">│</text><text class="breeze-static-checks-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-33)">
-</text><text class="breeze-static-checks-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-34)">│</text><text class="breeze-static-checks-r7" x="451.4" y="849.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-34)">check-start-date-not-used-in-defaults&#160;|&#160;check-system-tests-present&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-34)">│</text><text class="breeze-static-checks-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-34)">
-</text><text class="breeze-static-checks-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-static-checks-line-35)">│</text><text class="breeze-static-checks-r7" x="451.4" y="874" textLength="988.2" clip-path="url(#breeze-static-checks-line-35)">check-system-tests-tocs&#160;|&#160;check-taskinstance-tis-attrs&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="874" textLength="12.2" clip-path="url(#breeze-static-checks-line-35)">│</text><text class="breeze-static-checks-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-static-checks-line-35)">
-</text><text class="breeze-static-checks-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-36)">│</text><text class="breeze-static-checks-r7" x="451.4" y="898.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-36)">check-template-context-variable-in-sync&#160;|&#160;check-template-fields-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="898.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-36)">│</text><text class="breeze-static-checks-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-36)">
-</text><text class="breeze-static-checks-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-37)">│</text><text class="breeze-static-checks-r7" x="451.4" y="922.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-37)">check-tests-in-the-right-folders&#160;|&#160;check-tests-unittest-testcase&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="922.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-37)">│</text><text class="breeze-static-checks-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-37)">
-</text><text class="breeze-static-checks-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-38)">│</text><text class="breeze-static-checks-r7" x="451.4" y="947.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-38)">check-urlparse-usage-in-code&#160;|&#160;check-xml&#160;|&#160;check-zip-file-is-not-committed&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="947.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-38)">│</text><text class="breeze-static-checks-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-38)">
-</text><text class="breeze-static-checks-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-39)">│</text><text class="breeze-static-checks-r7" x="451.4" y="971.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-39)">codespell&#160;|&#160;compile-fab-assets&#160;|&#160;compile-ui-assets&#160;|&#160;compile-ui-assets-dev&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="971.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-39)">│</text><text class="breeze-static-checks-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-39)">
-</text><text class="breeze-static-checks-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-static-checks-line-40)">│</text><text class="breeze-static-checks-r7" x="451.4" y="996" textLength="988.2" clip-path="url(#breeze-static-checks-line-40)">create-missing-init-py-files-tests&#160;|&#160;debug-statements&#160;|&#160;detect-private-key&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="996" textLength="12.2" clip-path="url(#breeze-static-checks-line-40)">│</text><text class="breeze-static-checks-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-static-checks-line-40)">
-</text><text class="breeze-static-checks-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-41)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1020.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-41)">doctoc&#160;|&#160;end-of-file-fixer&#160;|&#160;fix-encoding-pragma&#160;|&#160;flynt&#160;|&#160;gci&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-41)">│</text><text class="breeze-static-checks-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-41)">
-</text><text class="breeze-static-checks-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1044.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-42)">generate-airflow-diagrams&#160;|&#160;generate-airflowctl-datamodels&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">│</text><text class="breeze-static-checks-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">
-</text><text class="breeze-static-checks-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1069.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-43)">generate-airflowctl-help-images&#160;|&#160;generate-openapi-spec&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1069.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">│</text><text class="breeze-static-checks-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">
-</text><text class="breeze-static-checks-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1093.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-44)">generate-openapi-spec-fab&#160;|&#160;generate-pypi-readme&#160;|&#160;generate-tasksdk-datamodels&#160;|&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1093.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">│</text><text class="breeze-static-checks-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">
-</text><text class="breeze-static-checks-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-static-checks-line-45)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1118" textLength="988.2" clip-path="url(#breeze-static-checks-line-45)">generate-volumes-for-sources&#160;|&#160;go-mockery&#160;|&#160;go-mod-tidy&#160;|&#160;gofmt&#160;|&#160;identity&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1118" textLength="12.2" clip-path="url(#breeze-static-checks-line-45)">│</text><text class="breeze-static-checks-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-static-checks-line-45)">
-</text><text class="breeze-static-checks-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1142.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-46)">insert-license&#160;|&#160;kubeconform&#160;|&#160;lint-chart-schema&#160;|&#160;lint-dockerfile&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1142.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">│</text><text class="breeze-static-checks-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">
-</text><text class="breeze-static-checks-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1166.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-47)">lint-helm-chart&#160;|&#160;lint-json-schema&#160;|&#160;lint-markdown&#160;|&#160;mixed-line-ending&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1166.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">│</text><text class="breeze-static-checks-r1" x="1464" y="1166.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">
-</text><text class="breeze-static-checks-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1191.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-48)">mypy-airflow-core&#160;|&#160;mypy-airflow-ctl&#160;|&#160;mypy-dev&#160;|&#160;mypy-devel-common&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1191.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">│</text><text class="breeze-static-checks-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">
-</text><text class="breeze-static-checks-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1215.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-49)">mypy-providers&#160;|&#160;mypy-task-sdk&#160;|&#160;pretty-format-json&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1215.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">│</text><text class="breeze-static-checks-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">
-</text><text class="breeze-static-checks-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-static-checks-line-50)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1240" textLength="988.2" clip-path="url(#breeze-static-checks-line-50)">prevent-deprecated-sqlalchemy-usage&#160;|&#160;pylint&#160;|&#160;python-no-log-warn&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1240" textLength="12.2" clip-path="url(#breeze-static-checks-line-50)">│</text><text class="breeze-static-checks-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-static-checks-line-50)">
-</text><text class="breeze-static-checks-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1264.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-51)">replace-bad-characters&#160;|&#160;rst-backticks&#160;|&#160;ruff&#160;|&#160;ruff-format&#160;|&#160;shellcheck&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1264.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">│</text><text class="breeze-static-checks-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">
-</text><text class="breeze-static-checks-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1288.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-52)">trailing-whitespace&#160;|&#160;ts-compile-lint-simple-auth-manager-ui&#160;|&#160;ts-compile-lint-ui</text><text class="breeze-static-checks-r5" x="1451.8" y="1288.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">│</text><text class="breeze-static-checks-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">
-</text><text class="breeze-static-checks-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1313.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-53)">|&#160;update-black-version&#160;|&#160;update-breeze-cmd-output&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1313.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">│</text><text class="breeze-static-checks-r1" x="1464" y="1313.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">
-</text><text class="breeze-static-checks-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1337.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-54)">update-breeze-readme-config-hash&#160;|&#160;update-chart-dependencies&#160;|&#160;update-er-diagram&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1337.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">│</text><text class="breeze-static-checks-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">
-</text><text class="breeze-static-checks-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-static-checks-line-55)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1362" textLength="988.2" clip-path="url(#breeze-static-checks-line-55)">|&#160;update-in-the-wild-to-be-sorted&#160;|&#160;update-inlined-dockerfile-scripts&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1362" textLength="12.2" clip-path="url(#breeze-static-checks-line-55)">│</text><text class="breeze-static-checks-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#breeze-static-checks-line-55)">
-</text><text class="breeze-static-checks-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1386.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-56)">update-installed-providers-to-be-sorted&#160;|&#160;update-installers-and-pre-commit&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1386.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">│</text><text class="breeze-static-checks-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">
-</text><text class="breeze-static-checks-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1410.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-57)">update-local-yml-file&#160;|&#160;update-migration-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1410.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text class="breeze-static-checks-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">
-</text><text class="breeze-static-checks-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1435.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-58)">update-providers-build-files&#160;|&#160;update-providers-dependencies&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text class="breeze-static-checks-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">
-</text><text class="breeze-static-checks-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1459.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-59)">update-pyproject-toml&#160;|&#160;update-reproducible-source-date-epoch&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1459.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">│</text><text class="breeze-static-checks-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">
-</text><text class="breeze-static-checks-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1484" textLength="988.2" clip-path="url(#breeze-static-checks-line-60)">update-spelling-wordlist-to-be-sorted&#160;|&#160;update-supported-versions&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">│</text><text class="breeze-static-checks-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">
-</text><text class="breeze-static-checks-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1508.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-61)">update-vendored-in-k8s-json-schema&#160;|&#160;update-version&#160;|&#160;validate-operators-init&#160;|&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text class="breeze-static-checks-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">
-</text><text class="breeze-static-checks-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1532.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-62)">yamllint&#160;|&#160;zizmor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1532.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">│</text><text class="breeze-static-checks-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">
-</text><text class="breeze-static-checks-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1557.2" textLength="268.4" clip-path="url(#breeze-static-checks-line-63)">--show-diff-on-failure</text><text class="breeze-static-checks-r6" x="402.6" y="1557.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-63)">-s</text><text class="breeze-static-checks-r1" x="451.4" y="1557.2" textLength="524.6" clip-path="url(#breeze-static-checks-line-63)">Show&#160;diff&#160;for&#160;files&#160;modified&#160;by&#160;the&#160;checks.</text><text class="breeze-static-checks-r5" x="1451.8" y="1557.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">│</text><text class="breeze-static-checks-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">
-</text><text class="breeze-static-checks-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1581.6" textLength="292.8" clip-path="url(#breeze-static-checks-line-64)">--initialize-environment</text><text class="breeze-static-checks-r1" x="451.4" y="1581.6" textLength="549" clip-path="url(#breeze-static-checks-line-64)">Initialize&#160;environment&#160;before&#160;running&#160;checks.</text><text class="breeze-static-checks-r5" x="1451.8" y="1581.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">│</text><text class="breeze-static-checks-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">
-</text><text class="breeze-static-checks-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-static-checks-line-65)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1606" textLength="353.8" clip-path="url(#breeze-static-checks-line-65)">--max-initialization-attempts</text><text class="breeze-static-checks-r1" x="451.4" y="1606" textLength="854" clip-path="url(#breeze-static-checks-line-65)">Maximum&#160;number&#160;of&#160;attempts&#160;to&#160;initialize&#160;environment&#160;before&#160;giving&#160;up.</text><text class="breeze-static-checks-r5" x="1451.8" y="1606" textLength="12.2" clip-path="url(#breeze-static-checks-line-65)">│</text><text class="breeze-static-checks-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-static-checks-line-65)">
-</text><text class="breeze-static-checks-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1630.4" textLength="854" clip-path="url(#breeze-static-checks-line-66)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1630.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">│</text><text class="breeze-static-checks-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">
-</text><text class="breeze-static-checks-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-67)">│</text><text class="breeze-static-checks-r5" x="451.4" y="1654.8" textLength="854" clip-path="url(#breeze-static-checks-line-67)">[default:&#160;3;&#160;1&lt;=x&lt;=10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1654.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-67)">│</text><text class="breeze-static-checks-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-67)">
-</text><text class="breeze-static-checks-r5" x="0" y="1679.2" textLength="1464" clip-path="url(#breeze-static-checks-line-68)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-68)">
-</text><text class="breeze-static-checks-r5" x="0" y="1703.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-69)">╭─</text><text class="breeze-static-checks-r5" x="24.4" y="1703.6" textLength="463.6" clip-path="url(#breeze-static-checks-line-69)">&#160;Selecting&#160;files&#160;to&#160;run&#160;the&#160;checks&#160;on&#160;</text><text class="breeze-static-checks-r5" x="488" y="1703.6" textLength="951.6" clip-path="url(#breeze-static-checks-line-69)">──────────────────────────────────────────────────────────────────────────────</text><text class="breeze-static-checks-r5" x="1439.6" y="1703.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-69)">─╮</text><text class="breeze-static-checks-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-69)">
-</text><text class="breeze-static-checks-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-static-checks-line-70)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1728" textLength="73.2" clip-path="url(#breeze-static-checks-line-70)">--file</text><text class="breeze-static-checks-r6" x="256.2" y="1728" textLength="24.4" clip-path="url(#breeze-static-checks-line-70)">-f</text><text class="breeze-static-checks-r1" x="305" y="1728" textLength="427" clip-path="url(#breeze-static-checks-line-70)">List&#160;of&#160;files&#160;to&#160;run&#160;the&#160;checks&#160;on.</text><text class="breeze-static-checks-r7" x="744.2" y="1728" textLength="73.2" clip-path="url(#breeze-static-checks-line-70)">(PATH)</text><text class="breeze-static-checks-r5" x="1451.8" y="1728" textLength="12.2" clip-path="url(#breeze-static-checks-line-70)">│</text><text class="breeze-static-checks-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-static-checks-line-70)">
-</text><text class="breeze-static-checks-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1752.4" textLength="134.2" clip-path="url(#breeze-static-checks-line-71)">--all-files</text><text class="breeze-static-checks-r6" x="256.2" y="1752.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-71)">-a</text><text class="breeze-static-checks-r1" x="305" y="1752.4" textLength="292.8" clip-path="url(#breeze-static-checks-line-71)">Run&#160;checks&#160;on&#160;all&#160;files.</text><text class="breeze-static-checks-r5" x="1451.8" y="1752.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">│</text><text class="breeze-static-checks-r1" x="1464" y="1752.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">
-</text><text class="breeze-static-checks-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1776.8" textLength="146.4" clip-path="url(#breeze-static-checks-line-72)">--commit-ref</text><text class="breeze-static-checks-r6" x="256.2" y="1776.8" textLength="24.4" clip-path="url(#breeze-static-checks-line-72)">-r</text><text class="breeze-static-checks-r1" x="305" y="1776.8" textLength="1134.6" clip-path="url(#breeze-static-checks-line-72)">Run&#160;checks&#160;for&#160;this&#160;commit&#160;reference&#160;only&#160;(can&#160;be&#160;any&#160;git&#160;commit-ish&#160;reference).&#160;Mutually&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1776.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">│</text><text class="breeze-static-checks-r1" x="1464" y="1776.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">
-</text><text class="breeze-static-checks-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">│</text><text class="breeze-static-checks-r1" x="305" y="1801.2" textLength="183" clip-path="url(#breeze-static-checks-line-73)">exclusive&#160;with&#160;</text><text class="breeze-static-checks-r4" x="488" y="1801.2" textLength="158.6" clip-path="url(#breeze-static-checks-line-73)">--last-commit</text><text class="breeze-static-checks-r1" x="646.6" y="1801.2" textLength="793" clip-path="url(#breeze-static-checks-line-73)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1801.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">│</text><text class="breeze-static-checks-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">
-</text><text class="breeze-static-checks-r5" x="0" y="1825.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">│</text><text class="breeze-static-checks-r7" x="305" y="1825.6" textLength="1134.6" clip-path="url(#breeze-static-checks-line-74)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1825.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">│</text><text class="breeze-static-checks-r1" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">
-</text><text class="breeze-static-checks-r5" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-static-checks-line-75)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1850" textLength="158.6" clip-path="url(#breeze-static-checks-line-75)">--last-commit</text><text class="breeze-static-checks-r6" x="256.2" y="1850" textLength="24.4" clip-path="url(#breeze-static-checks-line-75)">-c</text><text class="breeze-static-checks-r1" x="305" y="1850" textLength="793" clip-path="url(#breeze-static-checks-line-75)">Run&#160;checks&#160;for&#160;all&#160;files&#160;in&#160;last&#160;commit.&#160;Mutually&#160;exclusive&#160;with&#160;</text><text class="breeze-static-checks-r4" x="1098" y="1850" textLength="146.4" clip-path="url(#breeze-static-checks-line-75)">--commit-ref</text><text class="breeze-static-checks-r1" x="1244.4" y="1850" textLength="12.2" clip-path="url(#breeze-static-checks-line-75)">.</text><text class="breeze-static-checks-r5" x="1451.8" y="1850" textLength="12.2" clip-path="url(#breeze-static-checks-line-75)">│</text><text class="breeze-static-checks-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-static-checks-line-75)">
-</text><text class="breeze-static-checks-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1874.4" textLength="207.4" clip-path="url(#breeze-static-checks-line-76)">--only-my-changes</text><text class="breeze-static-checks-r6" x="256.2" y="1874.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-76)">-m</text><text class="breeze-static-checks-r1" x="305" y="1874.4" textLength="1134.6" clip-path="url(#breeze-static-checks-line-76)">Run&#160;checks&#160;for&#160;commits&#160;belonging&#160;to&#160;my&#160;PR&#160;only:&#160;for&#160;all&#160;commits&#160;between&#160;merge&#160;base&#160;to&#160;`main`&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1874.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">│</text><text class="breeze-static-checks-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">
-</text><text class="breeze-static-checks-r5" x="0" y="1898.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-77)">│</text><text class="breeze-static-checks-r1" x="305" y="1898.8" textLength="1134.6" clip-path="url(#breeze-static-checks-line-77)">branch&#160;and&#160;HEAD&#160;of&#160;your&#160;branch.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1898.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-77)">│</text><text class="breeze-static-checks-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-77)">
-</text><text class="breeze-static-checks-r5" x="0" y="1923.2" textLength="1464" clip-path="url(#breeze-static-checks-line-78)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-78)">
-</text><text class="breeze-static-checks-r5" x="0" y="1947.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-79)">╭─</text><text class="breeze-static-checks-r5" x="24.4" y="1947.6" textLength="463.6" clip-path="url(#breeze-static-checks-line-79)">&#160;Building&#160;image&#160;before&#160;running&#160;checks&#160;</text><text class="breeze-static-checks-r5" x="488" y="1947.6" textLength="951.6" clip-path="url(#breeze-static-checks-line-79)">──────────────────────────────────────────────────────────────────────────────</text><text class="breeze-static-checks-r5" x="1439.6" y="1947.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-79)">─╮</text><text class="breeze-static-checks-r1" x="1464" y="1947.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-79)">
-</text><text class="breeze-static-checks-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-static-checks-line-80)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1972" textLength="317.2" clip-path="url(#breeze-static-checks-line-80)">--skip-image-upgrade-check</text><text class="breeze-static-checks-r1" x="414.8" y="1972" textLength="536.8" clip-path="url(#breeze-static-checks-line-80)">Skip&#160;checking&#160;if&#160;the&#160;CI&#160;image&#160;is&#160;up&#160;to&#160;date.</text><text class="breeze-static-checks-r5" x="1451.8" y="1972" textLength="12.2" clip-path="url(#breeze-static-checks-line-80)">│</text><text class="breeze-static-checks-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-static-checks-line-80)">
-</text><text class="breeze-static-checks-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1996.4" textLength="158.6" clip-path="url(#breeze-static-checks-line-81)">--force-build</text><text class="breeze-static-checks-r1" x="414.8" y="1996.4" textLength="707.6" clip-path="url(#breeze-static-checks-line-81)">Force&#160;image&#160;build&#160;no&#160;matter&#160;if&#160;it&#160;is&#160;determined&#160;as&#160;needed.</text><text class="breeze-static-checks-r5" x="1451.8" y="1996.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">│</text><text class="breeze-static-checks-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">
-</text><text class="breeze-static-checks-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2020.8" textLength="231.8" clip-path="url(#breeze-static-checks-line-82)">--github-repository</text><text class="breeze-static-checks-r6" x="366" y="2020.8" textLength="24.4" clip-path="url(#breeze-static-checks-line-82)">-g</text><text class="breeze-static-checks-r1" x="414.8" y="2020.8" textLength="585.6" clip-path="url(#breeze-static-checks-line-82)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-static-checks-r7" x="1012.6" y="2020.8" textLength="73.2" clip-path="url(#breeze-static-checks-line-82)">(TEXT)</text><text class="breeze-static-checks-r5" x="1098" y="2020.8" textLength="305" clip-path="url(#breeze-static-checks-line-82)">[default:&#160;apache/airflow]</text><text class="breeze-static-checks-r5" x="1451.8" y="2020.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">│</text><text class="breeze-static-checks-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">
-</text><text class="breeze-static-checks-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2045.2" textLength="109.8" clip-path="url(#breeze-static-checks-line-83)">--builder</text><text class="breeze-static-checks-r1" x="414.8" y="2045.2" textLength="756.4" clip-path="url(#breeze-static-checks-line-83)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build`&#160;commands.</text><text class="breeze-static-checks-r7" x="1183.4" y="2045.2" textLength="73.2" clip-path="url(#breeze-static-checks-line-83)">(TEXT)</text><text class="breeze-static-checks-r5" x="1451.8" y="2045.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">│</text><text class="breeze-static-checks-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">
-</text><text class="breeze-static-checks-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-84)">│</text><text class="breeze-static-checks-r5" x="414.8" y="2069.6" textLength="756.4" clip-path="url(#breeze-static-checks-line-84)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="2069.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-84)">│</text><text class="breeze-static-checks-r1" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-84)">
-</text><text class="breeze-static-checks-r5" x="0" y="2094" textLength="1464" clip-path="url(#breeze-static-checks-line-85)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-static-checks-line-85)">
-</text><text class="breeze-static-checks-r5" x="0" y="2118.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-86)">╭─</text><text class="breeze-static-checks-r5" x="24.4" y="2118.4" textLength="195.2" clip-path="url(#breeze-static-checks-line-86)">&#160;Common&#160;options&#160;</text><text class="breeze-static-checks-r5" x="219.6" y="2118.4" textLength="1220" clip-path="url(#breeze-static-checks-line-86)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-static-checks-r5" x="1439.6" y="2118.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-86)">─╮</text><text class="breeze-static-checks-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-86)">
-</text><text class="breeze-static-checks-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-87)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2142.8" textLength="109.8" clip-path="url(#breeze-static-checks-line-87)">--dry-run</text><text class="breeze-static-checks-r6" x="158.6" y="2142.8" textLength="24.4" clip-path="url(#breeze-static-checks-line-87)">-D</text><text class="breeze-static-checks-r1" x="207.4" y="2142.8" textLength="719.8" clip-path="url(#breeze-static-checks-line-87)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-static-checks-r5" x="1451.8" y="2142.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-87)">│</text><text class="breeze-static-checks-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-87)">
-</text><text class="breeze-static-checks-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2167.2" textLength="109.8" clip-path="url(#breeze-static-checks-line-88)">--verbose</text><text class="breeze-static-checks-r6" x="158.6" y="2167.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-88)">-v</text><text class="breeze-static-checks-r1" x="207.4" y="2167.2" textLength="585.6" clip-path="url(#breeze-static-checks-line-88)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-static-checks-r5" x="1451.8" y="2167.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">│</text><text class="breeze-static-checks-r1" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">
-</text><text class="breeze-static-checks-r5" x="0" y="2191.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-89)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2191.6" textLength="73.2" clip-path="url(#breeze-static-checks-line-89)">--help</text><text class="breeze-static-checks-r6" x="158.6" y="2191.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-89)">-h</text><text class="breeze-static-checks-r1" x="207.4" y="2191.6" textLength="329.4" clip-path="url(#breeze-static-checks-line-89)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-static-checks-r5" x="1451.8" y="2191.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-89)">│</text><text class="breeze-static-checks-r1" x="1464" y="2191.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-89)">
-</text><text class="breeze-static-checks-r5" x="0" y="2216" textLength="1464" clip-path="url(#breeze-static-checks-line-90)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="2216" textLength="12.2" clip-path="url(#breeze-static-checks-line-90)">
+</text><text class="breeze-static-checks-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-static-checks-line-15)">│</text><text class="breeze-static-checks-r7" x="451.4" y="386" textLength="988.2" clip-path="url(#breeze-static-checks-line-15)">check-decorated-operator-implements-custom-name&#160;|&#160;check-default-configuration&#160;|&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-static-checks-line-15)">│</text><text class="breeze-static-checks-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-static-checks-line-15)">
+</text><text class="breeze-static-checks-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-16)">│</text><text class="breeze-static-checks-r7" x="451.4" y="410.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-16)">check-deferrable-default&#160;|&#160;check-docstring-param-types&#160;|&#160;check-example-dags-urls&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-16)">│</text><text class="breeze-static-checks-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-16)">
+</text><text class="breeze-static-checks-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-17)">│</text><text class="breeze-static-checks-r7" x="451.4" y="434.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-17)">|&#160;check-executables-have-shebangs&#160;|&#160;check-extra-packages-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-17)">│</text><text class="breeze-static-checks-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-17)">
+</text><text class="breeze-static-checks-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-18)">│</text><text class="breeze-static-checks-r7" x="451.4" y="459.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-18)">check-extras-order&#160;|&#160;check-fab-migrations&#160;|&#160;check-for-inclusive-language&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-18)">│</text><text class="breeze-static-checks-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-18)">
+</text><text class="breeze-static-checks-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-19)">│</text><text class="breeze-static-checks-r7" x="451.4" y="483.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-19)">check-get-lineage-collector-providers&#160;|&#160;check-hooks-apply&#160;|&#160;check-i18n-json&#160;|&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-19)">│</text><text class="breeze-static-checks-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-19)">
+</text><text class="breeze-static-checks-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-static-checks-line-20)">│</text><text class="breeze-static-checks-r7" x="451.4" y="508" textLength="988.2" clip-path="url(#breeze-static-checks-line-20)">check-imports-in-providers&#160;|&#160;check-incorrect-use-of-LoggingMixin&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-static-checks-line-20)">│</text><text class="breeze-static-checks-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-static-checks-line-20)">
+</text><text class="breeze-static-checks-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-21)">│</text><text class="breeze-static-checks-r7" x="451.4" y="532.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-21)">check-init-decorator-arguments&#160;|&#160;check-integrations-list-consistent&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-21)">│</text><text class="breeze-static-checks-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-21)">
+</text><text class="breeze-static-checks-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-22)">│</text><text class="breeze-static-checks-r7" x="451.4" y="556.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-22)">check-lazy-logging&#160;|&#160;check-links-to-example-dags-do-not-use-hardcoded-versions&#160;|&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-22)">│</text><text class="breeze-static-checks-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-22)">
+</text><text class="breeze-static-checks-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-23)">│</text><text class="breeze-static-checks-r7" x="451.4" y="581.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-23)">check-merge-conflict&#160;|&#160;check-min-python-version&#160;|&#160;check-newsfragments-are-valid&#160;|</text><text class="breeze-static-checks-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-23)">│</text><text class="breeze-static-checks-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-23)">
+</text><text class="breeze-static-checks-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-24)">│</text><text class="breeze-static-checks-r7" x="451.4" y="605.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-24)">check-no-airflow-deprecation-in-providers&#160;|&#160;check-no-providers-in-core-examples&#160;|</text><text class="breeze-static-checks-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-24)">│</text><text class="breeze-static-checks-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-24)">
+</text><text class="breeze-static-checks-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-static-checks-line-25)">│</text><text class="breeze-static-checks-r7" x="451.4" y="630" textLength="988.2" clip-path="url(#breeze-static-checks-line-25)">check-only-new-session-with-provide-session&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-static-checks-line-25)">│</text><text class="breeze-static-checks-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-static-checks-line-25)">
+</text><text class="breeze-static-checks-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-26)">│</text><text class="breeze-static-checks-r7" x="451.4" y="654.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-26)">check-persist-credentials-disabled-in-github-workflows&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-26)">│</text><text class="breeze-static-checks-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-26)">
+</text><text class="breeze-static-checks-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-27)">│</text><text class="breeze-static-checks-r7" x="451.4" y="678.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-27)">check-pre-commit-information-consistent&#160;|&#160;check-provide-create-sessions-imports&#160;|</text><text class="breeze-static-checks-r5" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-27)">│</text><text class="breeze-static-checks-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-27)">
+</text><text class="breeze-static-checks-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-28)">│</text><text class="breeze-static-checks-r7" x="451.4" y="703.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-28)">check-provider-docs-valid&#160;|&#160;check-provider-yaml-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-28)">│</text><text class="breeze-static-checks-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-28)">
+</text><text class="breeze-static-checks-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-29)">│</text><text class="breeze-static-checks-r7" x="451.4" y="727.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-29)">check-providers-subpackages-init-file-exist&#160;|&#160;check-pydevd-left-in-code&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-29)">│</text><text class="breeze-static-checks-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-29)">
+</text><text class="breeze-static-checks-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-static-checks-line-30)">│</text><text class="breeze-static-checks-r7" x="451.4" y="752" textLength="988.2" clip-path="url(#breeze-static-checks-line-30)">check-pytest-mark-db-test-in-providers&#160;|&#160;check-revision-heads-map&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-static-checks-line-30)">│</text><text class="breeze-static-checks-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-static-checks-line-30)">
+</text><text class="breeze-static-checks-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-31)">│</text><text class="breeze-static-checks-r7" x="451.4" y="776.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-31)">check-safe-filter-usage-in-html&#160;|&#160;check-significant-newsfragments-are-valid&#160;|&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-31)">│</text><text class="breeze-static-checks-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-31)">
+</text><text class="breeze-static-checks-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-32)">│</text><text class="breeze-static-checks-r7" x="451.4" y="800.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-32)">check-sql-dependency-common-data-structure&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-32)">│</text><text class="breeze-static-checks-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-32)">
+</text><text class="breeze-static-checks-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-33)">│</text><text class="breeze-static-checks-r7" x="451.4" y="825.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-33)">check-start-date-not-used-in-defaults&#160;|&#160;check-system-tests-present&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-33)">│</text><text class="breeze-static-checks-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-33)">
+</text><text class="breeze-static-checks-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-34)">│</text><text class="breeze-static-checks-r7" x="451.4" y="849.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-34)">check-system-tests-tocs&#160;|&#160;check-taskinstance-tis-attrs&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-34)">│</text><text class="breeze-static-checks-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-34)">
+</text><text class="breeze-static-checks-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-static-checks-line-35)">│</text><text class="breeze-static-checks-r7" x="451.4" y="874" textLength="988.2" clip-path="url(#breeze-static-checks-line-35)">check-template-context-variable-in-sync&#160;|&#160;check-template-fields-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="874" textLength="12.2" clip-path="url(#breeze-static-checks-line-35)">│</text><text class="breeze-static-checks-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-static-checks-line-35)">
+</text><text class="breeze-static-checks-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-36)">│</text><text class="breeze-static-checks-r7" x="451.4" y="898.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-36)">check-tests-in-the-right-folders&#160;|&#160;check-tests-unittest-testcase&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="898.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-36)">│</text><text class="breeze-static-checks-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-36)">
+</text><text class="breeze-static-checks-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-37)">│</text><text class="breeze-static-checks-r7" x="451.4" y="922.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-37)">check-urlparse-usage-in-code&#160;|&#160;check-xml&#160;|&#160;check-zip-file-is-not-committed&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="922.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-37)">│</text><text class="breeze-static-checks-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-37)">
+</text><text class="breeze-static-checks-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-38)">│</text><text class="breeze-static-checks-r7" x="451.4" y="947.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-38)">codespell&#160;|&#160;compile-fab-assets&#160;|&#160;compile-ui-assets&#160;|&#160;compile-ui-assets-dev&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="947.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-38)">│</text><text class="breeze-static-checks-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-38)">
+</text><text class="breeze-static-checks-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-39)">│</text><text class="breeze-static-checks-r7" x="451.4" y="971.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-39)">create-missing-init-py-files-tests&#160;|&#160;debug-statements&#160;|&#160;detect-private-key&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="971.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-39)">│</text><text class="breeze-static-checks-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-39)">
+</text><text class="breeze-static-checks-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-static-checks-line-40)">│</text><text class="breeze-static-checks-r7" x="451.4" y="996" textLength="988.2" clip-path="url(#breeze-static-checks-line-40)">doctoc&#160;|&#160;end-of-file-fixer&#160;|&#160;fix-encoding-pragma&#160;|&#160;flynt&#160;|&#160;gci&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="996" textLength="12.2" clip-path="url(#breeze-static-checks-line-40)">│</text><text class="breeze-static-checks-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-static-checks-line-40)">
+</text><text class="breeze-static-checks-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-41)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1020.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-41)">generate-airflow-diagrams&#160;|&#160;generate-airflowctl-datamodels&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-41)">│</text><text class="breeze-static-checks-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-41)">
+</text><text class="breeze-static-checks-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1044.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-42)">generate-airflowctl-help-images&#160;|&#160;generate-openapi-spec&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">│</text><text class="breeze-static-checks-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">
+</text><text class="breeze-static-checks-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1069.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-43)">generate-openapi-spec-fab&#160;|&#160;generate-pypi-readme&#160;|&#160;generate-tasksdk-datamodels&#160;|&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1069.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">│</text><text class="breeze-static-checks-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">
+</text><text class="breeze-static-checks-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1093.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-44)">generate-volumes-for-sources&#160;|&#160;go-mockery&#160;|&#160;go-mod-tidy&#160;|&#160;gofmt&#160;|&#160;identity&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1093.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">│</text><text class="breeze-static-checks-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">
+</text><text class="breeze-static-checks-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-static-checks-line-45)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1118" textLength="988.2" clip-path="url(#breeze-static-checks-line-45)">insert-license&#160;|&#160;kubeconform&#160;|&#160;lint-chart-schema&#160;|&#160;lint-dockerfile&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1118" textLength="12.2" clip-path="url(#breeze-static-checks-line-45)">│</text><text class="breeze-static-checks-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-static-checks-line-45)">
+</text><text class="breeze-static-checks-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1142.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-46)">lint-helm-chart&#160;|&#160;lint-json-schema&#160;|&#160;lint-markdown&#160;|&#160;mixed-line-ending&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1142.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">│</text><text class="breeze-static-checks-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">
+</text><text class="breeze-static-checks-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1166.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-47)">mypy-airflow-core&#160;|&#160;mypy-airflow-ctl&#160;|&#160;mypy-dev&#160;|&#160;mypy-devel-common&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1166.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">│</text><text class="breeze-static-checks-r1" x="1464" y="1166.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">
+</text><text class="breeze-static-checks-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1191.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-48)">mypy-providers&#160;|&#160;mypy-task-sdk&#160;|&#160;pretty-format-json&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1191.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">│</text><text class="breeze-static-checks-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">
+</text><text class="breeze-static-checks-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1215.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-49)">prevent-deprecated-sqlalchemy-usage&#160;|&#160;pylint&#160;|&#160;python-no-log-warn&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1215.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">│</text><text class="breeze-static-checks-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">
+</text><text class="breeze-static-checks-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-static-checks-line-50)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1240" textLength="988.2" clip-path="url(#breeze-static-checks-line-50)">replace-bad-characters&#160;|&#160;rst-backticks&#160;|&#160;ruff&#160;|&#160;ruff-format&#160;|&#160;shellcheck&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1240" textLength="12.2" clip-path="url(#breeze-static-checks-line-50)">│</text><text class="breeze-static-checks-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-static-checks-line-50)">
+</text><text class="breeze-static-checks-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1264.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-51)">trailing-whitespace&#160;|&#160;ts-compile-lint-simple-auth-manager-ui&#160;|&#160;ts-compile-lint-ui</text><text class="breeze-static-checks-r5" x="1451.8" y="1264.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">│</text><text class="breeze-static-checks-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">
+</text><text class="breeze-static-checks-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1288.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-52)">|&#160;update-black-version&#160;|&#160;update-breeze-cmd-output&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1288.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">│</text><text class="breeze-static-checks-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">
+</text><text class="breeze-static-checks-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1313.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-53)">update-breeze-readme-config-hash&#160;|&#160;update-chart-dependencies&#160;|&#160;update-er-diagram&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1313.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">│</text><text class="breeze-static-checks-r1" x="1464" y="1313.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">
+</text><text class="breeze-static-checks-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1337.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-54)">|&#160;update-in-the-wild-to-be-sorted&#160;|&#160;update-inlined-dockerfile-scripts&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1337.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">│</text><text class="breeze-static-checks-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">
+</text><text class="breeze-static-checks-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-static-checks-line-55)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1362" textLength="988.2" clip-path="url(#breeze-static-checks-line-55)">update-installed-providers-to-be-sorted&#160;|&#160;update-installers-and-pre-commit&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1362" textLength="12.2" clip-path="url(#breeze-static-checks-line-55)">│</text><text class="breeze-static-checks-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#breeze-static-checks-line-55)">
+</text><text class="breeze-static-checks-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1386.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-56)">update-local-yml-file&#160;|&#160;update-migration-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1386.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">│</text><text class="breeze-static-checks-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">
+</text><text class="breeze-static-checks-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1410.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-57)">update-providers-build-files&#160;|&#160;update-providers-dependencies&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1410.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text class="breeze-static-checks-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">
+</text><text class="breeze-static-checks-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1435.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-58)">update-pyproject-toml&#160;|&#160;update-reproducible-source-date-epoch&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text class="breeze-static-checks-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">
+</text><text class="breeze-static-checks-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1459.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-59)">update-spelling-wordlist-to-be-sorted&#160;|&#160;update-supported-versions&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1459.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">│</text><text class="breeze-static-checks-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">
+</text><text class="breeze-static-checks-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1484" textLength="988.2" clip-path="url(#breeze-static-checks-line-60)">update-vendored-in-k8s-json-schema&#160;|&#160;update-version&#160;|&#160;validate-operators-init&#160;|&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">│</text><text class="breeze-static-checks-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">
+</text><text class="breeze-static-checks-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1508.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-61)">yamllint&#160;|&#160;zizmor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text class="breeze-static-checks-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">
+</text><text class="breeze-static-checks-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1532.8" textLength="268.4" clip-path="url(#breeze-static-checks-line-62)">--show-diff-on-failure</text><text class="breeze-static-checks-r6" x="402.6" y="1532.8" textLength="24.4" clip-path="url(#breeze-static-checks-line-62)">-s</text><text class="breeze-static-checks-r1" x="451.4" y="1532.8" textLength="524.6" clip-path="url(#breeze-static-checks-line-62)">Show&#160;diff&#160;for&#160;files&#160;modified&#160;by&#160;the&#160;checks.</text><text class="breeze-static-checks-r5" x="1451.8" y="1532.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">│</text><text class="breeze-static-checks-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">
+</text><text class="breeze-static-checks-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1557.2" textLength="292.8" clip-path="url(#breeze-static-checks-line-63)">--initialize-environment</text><text class="breeze-static-checks-r1" x="451.4" y="1557.2" textLength="549" clip-path="url(#breeze-static-checks-line-63)">Initialize&#160;environment&#160;before&#160;running&#160;checks.</text><text class="breeze-static-checks-r5" x="1451.8" y="1557.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">│</text><text class="breeze-static-checks-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">
+</text><text class="breeze-static-checks-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1581.6" textLength="353.8" clip-path="url(#breeze-static-checks-line-64)">--max-initialization-attempts</text><text class="breeze-static-checks-r1" x="451.4" y="1581.6" textLength="854" clip-path="url(#breeze-static-checks-line-64)">Maximum&#160;number&#160;of&#160;attempts&#160;to&#160;initialize&#160;environment&#160;before&#160;giving&#160;up.</text><text class="breeze-static-checks-r5" x="1451.8" y="1581.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">│</text><text class="breeze-static-checks-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">
+</text><text class="breeze-static-checks-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-static-checks-line-65)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1606" textLength="854" clip-path="url(#breeze-static-checks-line-65)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1606" textLength="12.2" clip-path="url(#breeze-static-checks-line-65)">│</text><text class="breeze-static-checks-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-static-checks-line-65)">
+</text><text class="breeze-static-checks-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">│</text><text class="breeze-static-checks-r5" x="451.4" y="1630.4" textLength="854" clip-path="url(#breeze-static-checks-line-66)">[default:&#160;3;&#160;1&lt;=x&lt;=10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1630.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">│</text><text class="breeze-static-checks-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">
+</text><text class="breeze-static-checks-r5" x="0" y="1654.8" textLength="1464" clip-path="url(#breeze-static-checks-line-67)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-67)">
+</text><text class="breeze-static-checks-r5" x="0" y="1679.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-68)">╭─</text><text class="breeze-static-checks-r5" x="24.4" y="1679.2" textLength="463.6" clip-path="url(#breeze-static-checks-line-68)">&#160;Selecting&#160;files&#160;to&#160;run&#160;the&#160;checks&#160;on&#160;</text><text class="breeze-static-checks-r5" x="488" y="1679.2" textLength="951.6" clip-path="url(#breeze-static-checks-line-68)">──────────────────────────────────────────────────────────────────────────────</text><text class="breeze-static-checks-r5" x="1439.6" y="1679.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-68)">─╮</text><text class="breeze-static-checks-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-68)">
+</text><text class="breeze-static-checks-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-69)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1703.6" textLength="73.2" clip-path="url(#breeze-static-checks-line-69)">--file</text><text class="breeze-static-checks-r6" x="256.2" y="1703.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-69)">-f</text><text class="breeze-static-checks-r1" x="305" y="1703.6" textLength="427" clip-path="url(#breeze-static-checks-line-69)">List&#160;of&#160;files&#160;to&#160;run&#160;the&#160;checks&#160;on.</text><text class="breeze-static-checks-r7" x="744.2" y="1703.6" textLength="73.2" clip-path="url(#breeze-static-checks-line-69)">(PATH)</text><text class="breeze-static-checks-r5" x="1451.8" y="1703.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-69)">│</text><text class="breeze-static-checks-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-69)">
+</text><text class="breeze-static-checks-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-static-checks-line-70)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1728" textLength="134.2" clip-path="url(#breeze-static-checks-line-70)">--all-files</text><text class="breeze-static-checks-r6" x="256.2" y="1728" textLength="24.4" clip-path="url(#breeze-static-checks-line-70)">-a</text><text class="breeze-static-checks-r1" x="305" y="1728" textLength="292.8" clip-path="url(#breeze-static-checks-line-70)">Run&#160;checks&#160;on&#160;all&#160;files.</text><text class="breeze-static-checks-r5" x="1451.8" y="1728" textLength="12.2" clip-path="url(#breeze-static-checks-line-70)">│</text><text class="breeze-static-checks-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-static-checks-line-70)">
+</text><text class="breeze-static-checks-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1752.4" textLength="146.4" clip-path="url(#breeze-static-checks-line-71)">--commit-ref</text><text class="breeze-static-checks-r6" x="256.2" y="1752.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-71)">-r</text><text class="breeze-static-checks-r1" x="305" y="1752.4" textLength="1134.6" clip-path="url(#breeze-static-checks-line-71)">Run&#160;checks&#160;for&#160;this&#160;commit&#160;reference&#160;only&#160;(can&#160;be&#160;any&#160;git&#160;commit-ish&#160;reference).&#160;Mutually&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1752.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">│</text><text class="breeze-static-checks-r1" x="1464" y="1752.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">
+</text><text class="breeze-static-checks-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">│</text><text class="breeze-static-checks-r1" x="305" y="1776.8" textLength="183" clip-path="url(#breeze-static-checks-line-72)">exclusive&#160;with&#160;</text><text class="breeze-static-checks-r4" x="488" y="1776.8" textLength="158.6" clip-path="url(#breeze-static-checks-line-72)">--last-commit</text><text class="breeze-static-checks-r1" x="646.6" y="1776.8" textLength="793" clip-path="url(#breeze-static-checks-line-72)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1776.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">│</text><text class="breeze-static-checks-r1" x="1464" y="1776.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">
+</text><text class="breeze-static-checks-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">│</text><text class="breeze-static-checks-r7" x="305" y="1801.2" textLength="1134.6" clip-path="url(#breeze-static-checks-line-73)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1801.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">│</text><text class="breeze-static-checks-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">
+</text><text class="breeze-static-checks-r5" x="0" y="1825.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1825.6" textLength="158.6" clip-path="url(#breeze-static-checks-line-74)">--last-commit</text><text class="breeze-static-checks-r6" x="256.2" y="1825.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-74)">-c</text><text class="breeze-static-checks-r1" x="305" y="1825.6" textLength="793" clip-path="url(#breeze-static-checks-line-74)">Run&#160;checks&#160;for&#160;all&#160;files&#160;in&#160;last&#160;commit.&#160;Mutually&#160;exclusive&#160;with&#160;</text><text class="breeze-static-checks-r4" x="1098" y="1825.6" textLength="146.4" clip-path="url(#breeze-static-checks-line-74)">--commit-ref</text><text class="breeze-static-checks-r1" x="1244.4" y="1825.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">.</text><text class="breeze-static-checks-r5" x="1451.8" y="1825.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">│</text><text class="breeze-static-checks-r1" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">
+</text><text class="breeze-static-checks-r5" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-static-checks-line-75)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1850" textLength="207.4" clip-path="url(#breeze-static-checks-line-75)">--only-my-changes</text><text class="breeze-static-checks-r6" x="256.2" y="1850" textLength="24.4" clip-path="url(#breeze-static-checks-line-75)">-m</text><text class="breeze-static-checks-r1" x="305" y="1850" textLength="1134.6" clip-path="url(#breeze-static-checks-line-75)">Run&#160;checks&#160;for&#160;commits&#160;belonging&#160;to&#160;my&#160;PR&#160;only:&#160;for&#160;all&#160;commits&#160;between&#160;merge&#160;base&#160;to&#160;`main`&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1850" textLength="12.2" clip-path="url(#breeze-static-checks-line-75)">│</text><text class="breeze-static-checks-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-static-checks-line-75)">
+</text><text class="breeze-static-checks-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">│</text><text class="breeze-static-checks-r1" x="305" y="1874.4" textLength="1134.6" clip-path="url(#breeze-static-checks-line-76)">branch&#160;and&#160;HEAD&#160;of&#160;your&#160;branch.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1874.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">│</text><text class="breeze-static-checks-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">
+</text><text class="breeze-static-checks-r5" x="0" y="1898.8" textLength="1464" clip-path="url(#breeze-static-checks-line-77)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-77)">
+</text><text class="breeze-static-checks-r5" x="0" y="1923.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-78)">╭─</text><text class="breeze-static-checks-r5" x="24.4" y="1923.2" textLength="463.6" clip-path="url(#breeze-static-checks-line-78)">&#160;Building&#160;image&#160;before&#160;running&#160;checks&#160;</text><text class="breeze-static-checks-r5" x="488" y="1923.2" textLength="951.6" clip-path="url(#breeze-static-checks-line-78)">──────────────────────────────────────────────────────────────────────────────</text><text class="breeze-static-checks-r5" x="1439.6" y="1923.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-78)">─╮</text><text class="breeze-static-checks-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-78)">
+</text><text class="breeze-static-checks-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-79)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1947.6" textLength="317.2" clip-path="url(#breeze-static-checks-line-79)">--skip-image-upgrade-check</text><text class="breeze-static-checks-r1" x="414.8" y="1947.6" textLength="536.8" clip-path="url(#breeze-static-checks-line-79)">Skip&#160;checking&#160;if&#160;the&#160;CI&#160;image&#160;is&#160;up&#160;to&#160;date.</text><text class="breeze-static-checks-r5" x="1451.8" y="1947.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-79)">│</text><text class="breeze-static-checks-r1" x="1464" y="1947.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-79)">
+</text><text class="breeze-static-checks-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-static-checks-line-80)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1972" textLength="158.6" clip-path="url(#breeze-static-checks-line-80)">--force-build</text><text class="breeze-static-checks-r1" x="414.8" y="1972" textLength="707.6" clip-path="url(#breeze-static-checks-line-80)">Force&#160;image&#160;build&#160;no&#160;matter&#160;if&#160;it&#160;is&#160;determined&#160;as&#160;needed.</text><text class="breeze-static-checks-r5" x="1451.8" y="1972" textLength="12.2" clip-path="url(#breeze-static-checks-line-80)">│</text><text class="breeze-static-checks-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-static-checks-line-80)">
+</text><text class="breeze-static-checks-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1996.4" textLength="231.8" clip-path="url(#breeze-static-checks-line-81)">--github-repository</text><text class="breeze-static-checks-r6" x="366" y="1996.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-81)">-g</text><text class="breeze-static-checks-r1" x="414.8" y="1996.4" textLength="585.6" clip-path="url(#breeze-static-checks-line-81)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-static-checks-r7" x="1012.6" y="1996.4" textLength="73.2" clip-path="url(#breeze-static-checks-line-81)">(TEXT)</text><text class="breeze-static-checks-r5" x="1098" y="1996.4" textLength="305" clip-path="url(#breeze-static-checks-line-81)">[default:&#160;apache/airflow]</text><text class="breeze-static-checks-r5" x="1451.8" y="1996.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">│</text><text class="breeze-static-checks-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">
+</text><text class="breeze-static-checks-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2020.8" textLength="109.8" clip-path="url(#breeze-static-checks-line-82)">--builder</text><text class="breeze-static-checks-r1" x="414.8" y="2020.8" textLength="756.4" clip-path="url(#breeze-static-checks-line-82)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build`&#160;commands.</text><text class="breeze-static-checks-r7" x="1183.4" y="2020.8" textLength="73.2" clip-path="url(#breeze-static-checks-line-82)">(TEXT)</text><text class="breeze-static-checks-r5" x="1451.8" y="2020.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">│</text><text class="breeze-static-checks-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">
+</text><text class="breeze-static-checks-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">│</text><text class="breeze-static-checks-r5" x="414.8" y="2045.2" textLength="756.4" clip-path="url(#breeze-static-checks-line-83)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="2045.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">│</text><text class="breeze-static-checks-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">
+</text><text class="breeze-static-checks-r5" x="0" y="2069.6" textLength="1464" clip-path="url(#breeze-static-checks-line-84)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-84)">
+</text><text class="breeze-static-checks-r5" x="0" y="2094" textLength="24.4" clip-path="url(#breeze-static-checks-line-85)">╭─</text><text class="breeze-static-checks-r5" x="24.4" y="2094" textLength="195.2" clip-path="url(#breeze-static-checks-line-85)">&#160;Common&#160;options&#160;</text><text class="breeze-static-checks-r5" x="219.6" y="2094" textLength="1220" clip-path="url(#breeze-static-checks-line-85)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-static-checks-r5" x="1439.6" y="2094" textLength="24.4" clip-path="url(#breeze-static-checks-line-85)">─╮</text><text class="breeze-static-checks-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-static-checks-line-85)">
+</text><text class="breeze-static-checks-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-86)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2118.4" textLength="109.8" clip-path="url(#breeze-static-checks-line-86)">--dry-run</text><text class="breeze-static-checks-r6" x="158.6" y="2118.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-86)">-D</text><text class="breeze-static-checks-r1" x="207.4" y="2118.4" textLength="719.8" clip-path="url(#breeze-static-checks-line-86)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-static-checks-r5" x="1451.8" y="2118.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-86)">│</text><text class="breeze-static-checks-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-86)">
+</text><text class="breeze-static-checks-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-87)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2142.8" textLength="109.8" clip-path="url(#breeze-static-checks-line-87)">--verbose</text><text class="breeze-static-checks-r6" x="158.6" y="2142.8" textLength="24.4" clip-path="url(#breeze-static-checks-line-87)">-v</text><text class="breeze-static-checks-r1" x="207.4" y="2142.8" textLength="585.6" clip-path="url(#breeze-static-checks-line-87)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-static-checks-r5" x="1451.8" y="2142.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-87)">│</text><text class="breeze-static-checks-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-87)">
+</text><text class="breeze-static-checks-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2167.2" textLength="73.2" clip-path="url(#breeze-static-checks-line-88)">--help</text><text class="breeze-static-checks-r6" x="158.6" y="2167.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-88)">-h</text><text class="breeze-static-checks-r1" x="207.4" y="2167.2" textLength="329.4" clip-path="url(#breeze-static-checks-line-88)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-static-checks-r5" x="1451.8" y="2167.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">│</text><text class="breeze-static-checks-r1" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">
+</text><text class="breeze-static-checks-r5" x="0" y="2191.6" textLength="1464" clip-path="url(#breeze-static-checks-line-89)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="2191.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-89)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_static-checks.txt b/dev/breeze/doc/images/output_static-checks.txt
index cf3bedd858f59..e1d3187c5864b 100644
--- a/dev/breeze/doc/images/output_static-checks.txt
+++ b/dev/breeze/doc/images/output_static-checks.txt
@@ -1 +1 @@
-95021976bf6a2815709538bf791ccdc8
+d0dc18a59b8997b9c06a3bd15879c8c7
diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids.py b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
index f2ce310cc5046..c5ad5b2040a4e 100644
--- a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
+++ b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
@@ -41,7 +41,6 @@
     "check-code-deprecations",
     "check-common-compat-used-for-openlineage",
     "check-core-deprecation-classes",
-    "check-daysago-import-from-utils",
     "check-decorated-operator-implements-custom-name",
     "check-default-configuration",
     "check-deferrable-default",

From feab705264b6ca96ab6212db0a84dbfb2dfdd9a4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Przemys=C5=82aw=20Mirowski?= <miretpl@gmail.com>
Date: Thu, 26 Jun 2025 23:58:52 +0200
Subject: [PATCH 217/381] Use proper show-only value in test_worker.py (#52300)

---
 helm-tests/tests/helm_tests/airflow_core/test_worker.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/helm-tests/tests/helm_tests/airflow_core/test_worker.py b/helm-tests/tests/helm_tests/airflow_core/test_worker.py
index 944ee8cd4cf19..bdb386194468f 100644
--- a/helm-tests/tests/helm_tests/airflow_core/test_worker.py
+++ b/helm-tests/tests/helm_tests/airflow_core/test_worker.py
@@ -1249,7 +1249,7 @@ def test_should_add_component_specific_labels(self):
                     "labels": {"test_label": "test_label_value"},
                 },
             },
-            show_only=["templates/workers/worker-service.yaml"],
+            show_only=["templates/workers/worker-serviceaccount.yaml"],
         )
 
         assert "test_label" in jmespath.search("metadata.labels", docs[0])

From c3f9da4846c8bde6b70aff771615d39e010decb0 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Fri, 27 Jun 2025 00:24:33 +0200
Subject: [PATCH 218/381] Revert "Enable Serde for Pydantic BaseModel and
 Subclasses (#51059)" (#52312)

This reverts commit a041a2a3671337bbf743ec671542cf35e1e6c42f.
---
 .../src/airflow/serialization/serde.py        |  13 +-
 .../serialization/serializers/bignum.py       |   8 +-
 .../serialization/serializers/builtin.py      |  12 +-
 .../serialization/serializers/datetime.py     |  12 +-
 .../serialization/serializers/deltalake.py    |   6 +-
 .../serialization/serializers/iceberg.py      |   6 +-
 .../serialization/serializers/numpy.py        |  10 +-
 .../serialization/serializers/pandas.py       |  13 +-
 .../serialization/serializers/pydantic.py     |  79 ------------
 .../serialization/serializers/timezone.py     |   6 +-
 .../src/airflow/serialization/typing.py       |  32 -----
 .../serializers/test_serializers.py           | 115 ++++--------------
 .../tests/unit/serialization/test_serde.py    |  15 ---
 13 files changed, 56 insertions(+), 271 deletions(-)
 delete mode 100644 airflow-core/src/airflow/serialization/serializers/pydantic.py
 delete mode 100644 airflow-core/src/airflow/serialization/typing.py

diff --git a/airflow-core/src/airflow/serialization/serde.py b/airflow-core/src/airflow/serialization/serde.py
index 0f1e948d8db2a..0268ad91206d8 100644
--- a/airflow-core/src/airflow/serialization/serde.py
+++ b/airflow-core/src/airflow/serialization/serde.py
@@ -32,7 +32,6 @@
 
 import airflow.serialization.serializers
 from airflow.configuration import conf
-from airflow.serialization.typing import is_pydantic_model
 from airflow.stats import Stats
 from airflow.utils.module_loading import import_string, iter_namespace, qualname
 
@@ -53,7 +52,6 @@
 OLD_SOURCE = "__source"
 OLD_DATA = "__var"
 OLD_DICT = "dict"
-PYDANTIC_MODEL_QUALNAME = "pydantic.main.BaseModel"
 
 DEFAULT_VERSION = 0
 
@@ -147,12 +145,6 @@ def serialize(o: object, depth: int = 0) -> U | None:
         qn = "builtins.tuple"
         classname = qn
 
-    if is_pydantic_model(o):
-        # to match the generic Pydantic serializer and deserializer in _serializers and _deserializers
-        qn = PYDANTIC_MODEL_QUALNAME
-        # the actual Pydantic model class to encode
-        classname = qualname(o)
-
     # if there is a builtin serializer available use that
     if qn in _serializers:
         data, serialized_classname, version, is_serialized = _serializers[qn].serialize(o)
@@ -264,10 +256,7 @@ def deserialize(o: T | None, full=True, type_hint: Any = None) -> object:
 
     # registered deserializer
     if classname in _deserializers:
-        return _deserializers[classname].deserialize(cls, version, deserialize(value))
-    if is_pydantic_model(cls):
-        if PYDANTIC_MODEL_QUALNAME in _deserializers:
-            return _deserializers[PYDANTIC_MODEL_QUALNAME].deserialize(cls, version, deserialize(value))
+        return _deserializers[classname].deserialize(classname, version, deserialize(value))
 
     # class has deserialization function
     if hasattr(cls, "deserialize"):
diff --git a/airflow-core/src/airflow/serialization/serializers/bignum.py b/airflow-core/src/airflow/serialization/serializers/bignum.py
index 5bb89cb386c6d..769e78491e9e4 100644
--- a/airflow-core/src/airflow/serialization/serializers/bignum.py
+++ b/airflow-core/src/airflow/serialization/serializers/bignum.py
@@ -47,13 +47,13 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
     return float(o), name, __version__, True
 
 
-def deserialize(cls: type, version: int, data: object) -> decimal.Decimal:
+def deserialize(classname: str, version: int, data: object) -> decimal.Decimal:
     from decimal import Decimal
 
     if version > __version__:
-        raise TypeError(f"serialized {version} of {qualname(cls)} > {__version__}")
+        raise TypeError(f"serialized {version} of {classname} > {__version__}")
 
-    if cls is not Decimal:
-        raise TypeError(f"do not know how to deserialize {qualname(cls)}")
+    if classname != qualname(Decimal):
+        raise TypeError(f"{classname} != {qualname(Decimal)}")
 
     return Decimal(str(data))
diff --git a/airflow-core/src/airflow/serialization/serializers/builtin.py b/airflow-core/src/airflow/serialization/serializers/builtin.py
index 076831a05dabc..b0ee8cb713dfb 100644
--- a/airflow-core/src/airflow/serialization/serializers/builtin.py
+++ b/airflow-core/src/airflow/serialization/serializers/builtin.py
@@ -35,20 +35,20 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
     return list(cast("list", o)), qualname(o), __version__, True
 
 
-def deserialize(cls: type, version: int, data: list) -> tuple | set | frozenset:
+def deserialize(classname: str, version: int, data: list) -> tuple | set | frozenset:
     if version > __version__:
-        raise TypeError(f"serialized version {version} is newer than class version {__version__}")
+        raise TypeError("serialized version is newer than class version")
 
-    if cls is tuple:
+    if classname == qualname(tuple):
         return tuple(data)
 
-    if cls is set:
+    if classname == qualname(set):
         return set(data)
 
-    if cls is frozenset:
+    if classname == qualname(frozenset):
         return frozenset(data)
 
-    raise TypeError(f"do not know how to deserialize {qualname(cls)}")
+    raise TypeError(f"do not know how to deserialize {classname}")
 
 
 def stringify(classname: str, version: int, data: list) -> str:
diff --git a/airflow-core/src/airflow/serialization/serializers/datetime.py b/airflow-core/src/airflow/serialization/serializers/datetime.py
index 38009bbc468d1..69058b8c02a8b 100644
--- a/airflow-core/src/airflow/serialization/serializers/datetime.py
+++ b/airflow-core/src/airflow/serialization/serializers/datetime.py
@@ -59,7 +59,7 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
     return "", "", 0, False
 
 
-def deserialize(cls: type, version: int, data: dict | str) -> datetime.date | datetime.timedelta:
+def deserialize(classname: str, version: int, data: dict | str) -> datetime.date | datetime.timedelta:
     import datetime
 
     from pendulum import DateTime
@@ -86,16 +86,16 @@ def deserialize(cls: type, version: int, data: dict | str) -> datetime.date | da
                 else None
             )
 
-    if cls is datetime.datetime and isinstance(data, dict):
+    if classname == qualname(datetime.datetime) and isinstance(data, dict):
         return datetime.datetime.fromtimestamp(float(data[TIMESTAMP]), tz=tz)
 
-    if cls is DateTime and isinstance(data, dict):
+    if classname == qualname(DateTime) and isinstance(data, dict):
         return DateTime.fromtimestamp(float(data[TIMESTAMP]), tz=tz)
 
-    if cls is datetime.timedelta and isinstance(data, (str, float)):
+    if classname == qualname(datetime.timedelta) and isinstance(data, (str, float)):
         return datetime.timedelta(seconds=float(data))
 
-    if cls is datetime.date and isinstance(data, str):
+    if classname == qualname(datetime.date) and isinstance(data, str):
         return datetime.date.fromisoformat(data)
 
-    raise TypeError(f"unknown date/time format {qualname(cls)}")
+    raise TypeError(f"unknown date/time format {classname}")
diff --git a/airflow-core/src/airflow/serialization/serializers/deltalake.py b/airflow-core/src/airflow/serialization/serializers/deltalake.py
index a79b231788134..60456baf8007c 100644
--- a/airflow-core/src/airflow/serialization/serializers/deltalake.py
+++ b/airflow-core/src/airflow/serialization/serializers/deltalake.py
@@ -55,7 +55,7 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
     return data, qualname(o), __version__, True
 
 
-def deserialize(cls: type, version: int, data: dict):
+def deserialize(classname: str, version: int, data: dict):
     from deltalake.table import DeltaTable
 
     from airflow.models.crypto import get_fernet
@@ -63,7 +63,7 @@ def deserialize(cls: type, version: int, data: dict):
     if version > __version__:
         raise TypeError("serialized version is newer than class version")
 
-    if cls is DeltaTable:
+    if classname == qualname(DeltaTable):
         fernet = get_fernet()
         properties = {}
         for k, v in data["storage_options"].items():
@@ -76,4 +76,4 @@ def deserialize(cls: type, version: int, data: dict):
 
         return DeltaTable(data["table_uri"], version=data["version"], storage_options=storage_options)
 
-    raise TypeError(f"do not know how to deserialize {qualname(cls)}")
+    raise TypeError(f"do not know how to deserialize {classname}")
diff --git a/airflow-core/src/airflow/serialization/serializers/iceberg.py b/airflow-core/src/airflow/serialization/serializers/iceberg.py
index 018732c29fe35..3b03381fef389 100644
--- a/airflow-core/src/airflow/serialization/serializers/iceberg.py
+++ b/airflow-core/src/airflow/serialization/serializers/iceberg.py
@@ -55,7 +55,7 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
     return data, qualname(o), __version__, True
 
 
-def deserialize(cls: type, version: int, data: dict):
+def deserialize(classname: str, version: int, data: dict):
     from pyiceberg.catalog import load_catalog
     from pyiceberg.table import Table
 
@@ -64,7 +64,7 @@ def deserialize(cls: type, version: int, data: dict):
     if version > __version__:
         raise TypeError("serialized version is newer than class version")
 
-    if cls is Table:
+    if classname == qualname(Table):
         fernet = get_fernet()
         properties = {}
         for k, v in data["catalog_properties"].items():
@@ -73,4 +73,4 @@ def deserialize(cls: type, version: int, data: dict):
         catalog = load_catalog(data["identifier"][0], **properties)
         return catalog.load_table((data["identifier"][1], data["identifier"][2]))
 
-    raise TypeError(f"do not know how to deserialize {qualname(cls)}")
+    raise TypeError(f"do not know how to deserialize {classname}")
diff --git a/airflow-core/src/airflow/serialization/serializers/numpy.py b/airflow-core/src/airflow/serialization/serializers/numpy.py
index 35620692e4564..c31244c587844 100644
--- a/airflow-core/src/airflow/serialization/serializers/numpy.py
+++ b/airflow-core/src/airflow/serialization/serializers/numpy.py
@@ -80,13 +80,11 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
     return "", "", 0, False
 
 
-def deserialize(cls: type, version: int, data: str) -> Any:
+def deserialize(classname: str, version: int, data: str) -> Any:
     if version > __version__:
         raise TypeError("serialized version is newer than class version")
 
-    allowed_deserialize_classes = [import_string(classname) for classname in deserializers]
+    if classname not in deserializers:
+        raise TypeError(f"unsupported {classname} found for numpy deserialization")
 
-    if cls not in allowed_deserialize_classes:
-        raise TypeError(f"unsupported {qualname(cls)} found for numpy deserialization")
-
-    return cls(data)
+    return import_string(classname)(data)
diff --git a/airflow-core/src/airflow/serialization/serializers/pandas.py b/airflow-core/src/airflow/serialization/serializers/pandas.py
index 73f64ce86b4fa..d805e4b95c01e 100644
--- a/airflow-core/src/airflow/serialization/serializers/pandas.py
+++ b/airflow-core/src/airflow/serialization/serializers/pandas.py
@@ -53,22 +53,17 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
     return buf.getvalue().hex().decode("utf-8"), qualname(o), __version__, True
 
 
-def deserialize(cls: type, version: int, data: object) -> pd.DataFrame:
+def deserialize(classname: str, version: int, data: object) -> pd.DataFrame:
     if version > __version__:
-        raise TypeError(f"serialized {version} of {qualname(cls)} > {__version__}")
+        raise TypeError(f"serialized {version} of {classname} > {__version__}")
 
-    import pandas as pd
-
-    if cls is not pd.DataFrame:
-        raise TypeError(f"do not know how to deserialize {qualname(cls)}")
+    from pyarrow import parquet as pq
 
     if not isinstance(data, str):
-        raise TypeError(f"serialized {qualname(cls)} has wrong data type {type(data)}")
+        raise TypeError(f"serialized {classname} has wrong data type {type(data)}")
 
     from io import BytesIO
 
-    from pyarrow import parquet as pq
-
     with BytesIO(bytes.fromhex(data)) as buf:
         df = pq.read_table(buf).to_pandas()
 
diff --git a/airflow-core/src/airflow/serialization/serializers/pydantic.py b/airflow-core/src/airflow/serialization/serializers/pydantic.py
deleted file mode 100644
index b1a483a152a09..0000000000000
--- a/airflow-core/src/airflow/serialization/serializers/pydantic.py
+++ /dev/null
@@ -1,79 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-from __future__ import annotations
-
-from typing import TYPE_CHECKING, cast
-
-from airflow.serialization.typing import is_pydantic_model
-from airflow.utils.module_loading import qualname
-
-if TYPE_CHECKING:
-    from pydantic import BaseModel
-
-    from airflow.serialization.serde import U
-
-serializers = [
-    "pydantic.main.BaseModel",
-]
-deserializers = serializers
-
-__version__ = 1
-
-
-def serialize(o: object) -> tuple[U, str, int, bool]:
-    """
-    Serialize a Pydantic BaseModel instance into a dict of built-in types.
-
-    Returns a tuple of:
-    - serialized data (as built-in types)
-    - fixed class name for registration (BaseModel)
-    - version number
-    - is_serialized flag (True if handled)
-    """
-    if not is_pydantic_model(o):
-        return "", "", 0, False
-
-    model = cast("BaseModel", o)  # for mypy
-    data = model.model_dump()
-
-    return data, qualname(o), __version__, True
-
-
-def deserialize(cls: type, version: int, data: dict):
-    """
-    Deserialize a Pydantic class.
-
-    Pydantic models can be serialized into a Python dictionary via `pydantic.main.BaseModel.model_dump`
-    and the dictionary can be deserialized through `pydantic.main.BaseModel.model_validate`. This function
-    can deserialize arbitrary Pydantic models that are in `allowed_deserialization_classes`.
-
-    :param cls: The actual model class
-    :param version: Serialization version (must not exceed __version__)
-    :param data: Dictionary with built-in types, typically from model_dump()
-    :return: An instance of the actual Pydantic model
-    """
-    if version > __version__:
-        raise TypeError(f"Serialized version {version} is newer than the supported version {__version__}")
-
-    if not is_pydantic_model(cls):
-        # no deserializer available
-        raise TypeError(f"No deserializer found for {qualname(cls)}")
-
-    # Perform validation-based reconstruction
-    model = cast("BaseModel", cls)  # for mypy
-    return model.model_validate(data)
diff --git a/airflow-core/src/airflow/serialization/serializers/timezone.py b/airflow-core/src/airflow/serialization/serializers/timezone.py
index 8bc067bc2ffaf..9f2ef7cef65ac 100644
--- a/airflow-core/src/airflow/serialization/serializers/timezone.py
+++ b/airflow-core/src/airflow/serialization/serializers/timezone.py
@@ -67,16 +67,16 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
     return "", "", 0, False
 
 
-def deserialize(cls: type, version: int, data: object) -> Any:
+def deserialize(classname: str, version: int, data: object) -> Any:
     from airflow.utils.timezone import parse_timezone
 
     if not isinstance(data, (str, int)):
         raise TypeError(f"{data} is not of type int or str but of {type(data)}")
 
     if version > __version__:
-        raise TypeError(f"serialized {version} of {qualname(cls)} > {__version__}")
+        raise TypeError(f"serialized {version} of {classname} > {__version__}")
 
-    if qualname(cls) == "backports.zoneinfo.ZoneInfo" and isinstance(data, str):
+    if classname == "backports.zoneinfo.ZoneInfo" and isinstance(data, str):
         from zoneinfo import ZoneInfo
 
         return ZoneInfo(data)
diff --git a/airflow-core/src/airflow/serialization/typing.py b/airflow-core/src/airflow/serialization/typing.py
deleted file mode 100644
index a6169b23a78d5..0000000000000
--- a/airflow-core/src/airflow/serialization/typing.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-from __future__ import annotations
-
-from typing import Any
-
-
-def is_pydantic_model(cls: Any) -> bool:
-    """
-    Return True if the class is a pydantic.main.BaseModel.
-
-    Checking is done by attributes as it is significantly faster than
-    using isinstance.
-    """
-    # __pydantic_fields__ is always present on Pydantic V2 models and is a dict[str, FieldInfo]
-    # __pydantic_validator__ is an internal validator object, always set after model build
-    return hasattr(cls, "__pydantic_fields__") and hasattr(cls, "__pydantic_validator__")
diff --git a/airflow-core/tests/unit/serialization/serializers/test_serializers.py b/airflow-core/tests/unit/serialization/serializers/test_serializers.py
index b3d1507f1e484..53eb160ec1aff 100644
--- a/airflow-core/tests/unit/serialization/serializers/test_serializers.py
+++ b/airflow-core/tests/unit/serialization/serializers/test_serializers.py
@@ -23,7 +23,6 @@
 from zoneinfo import ZoneInfo
 
 import numpy as np
-import pandas as pd
 import pendulum
 import pendulum.tz
 import pytest
@@ -32,11 +31,11 @@
 from packaging import version
 from pendulum import DateTime
 from pendulum.tz.timezone import FixedTimezone, Timezone
-from pydantic import BaseModel, Field
 
 from airflow.sdk.definitions.param import Param, ParamsDict
 from airflow.serialization.serde import CLASSNAME, DATA, VERSION, _stringify, decode, deserialize, serialize
 from airflow.serialization.serializers import builtin
+from airflow.utils.module_loading import qualname
 
 from tests_common.test_utils.markers import skip_if_force_lowest_dependencies_marker
 
@@ -61,13 +60,6 @@ def utcoffset(self, dt):
         return datetime.timedelta(hours=2)
 
 
-class FooBarModel(BaseModel):
-    """Pydantic BaseModel for testing Pydantic Serialization/Deserialization."""
-
-    banana: float = 1.1
-    foo: str = Field()
-
-
 @skip_if_force_lowest_dependencies_marker
 class TestSerializers:
     def test_datetime(self):
@@ -198,26 +190,20 @@ def test_bignum_serialize_non_decimal(self):
 
         assert serialize(12345) == ("", "", 0, False)
 
-    def test_bignum_deserialize_decimal(self):
-        from airflow.serialization.serializers.bignum import deserialize
-
-        res = deserialize(decimal.Decimal, 1, decimal.Decimal(12345))
-        assert res == decimal.Decimal(12345)
-
     @pytest.mark.parametrize(
         ("klass", "version", "payload", "msg"),
         [
             (
-                decimal.Decimal,
+                "decimal.Decimal",
                 999,
                 "0",
-                r"serialized 999 of decimal\.Decimal > 1",  # newer version
+                r"serialized 999 of decimal\.Decimal",  # newer version
             ),
             (
-                str,
+                "wrong.ClassName",
                 1,
                 "0",
-                r"do not know how to deserialize builtins\.str",  # wrong classname
+                r"wrong\.ClassName != .*Decimal",  # wrong classname
             ),
         ],
     )
@@ -249,8 +235,8 @@ def test_numpy_serializers(self):
     @pytest.mark.parametrize(
         ("klass", "ver", "value", "msg"),
         [
-            (np.int32, 999, 123, r"serialized version is newer"),
-            (np.float32, 1, 123, r"unsupported numpy\.float32"),
+            ("numpy.int32", 999, 123, r"serialized version is newer"),
+            ("numpy.float32", 1, 123, r"unsupported numpy\.float32"),
         ],
     )
     def test_numpy_deserialize_errors(self, klass, ver, value, msg):
@@ -279,23 +265,17 @@ def test_pandas_serializers(self):
         assert serialize(123) == ("", "", 0, False)
 
     @pytest.mark.parametrize(
-        ("klass", "version", "data", "msg"),
+        ("version", "data", "msg"),
         [
-            (pd.DataFrame, 999, "", r"serialized 999 of pandas.core.frame.DataFrame > 1"),  # version too new
-            (
-                pd.DataFrame,
-                1,
-                123,
-                r"serialized pandas.core.frame.DataFrame has wrong data type .*<class 'int'>",
-            ),  # bad payload type
-            (str, 1, "", r"do not know how to deserialize builtins.str"),  # bad class
+            (999, "", r"serialized 999 .* > 1"),  # version too new
+            (1, 123, r"wrong data type .*<class 'int'>"),  # bad payload type
         ],
     )
-    def test_pandas_deserialize_errors(self, klass, version, data, msg):
+    def test_pandas_deserialize_errors(self, version, data, msg):
         from airflow.serialization.serializers.pandas import deserialize
 
         with pytest.raises(TypeError, match=msg):
-            deserialize(klass, version, data)
+            deserialize("pandas.core.frame.DataFrame", version, data)
 
     def test_iceberg(self):
         pytest.importorskip("pyiceberg", minversion="2.0.0")
@@ -387,32 +367,6 @@ def test_kubernetes_serializer(self, monkeypatch):
         assert serialize(pod) == ("", "", 0, False)
         assert serialize(123) == ("", "", 0, False)
 
-    def test_pydantic(self):
-        m = FooBarModel(banana=3.14, foo="hello")
-        e = serialize(m)
-        d = deserialize(e)
-
-        assert m.banana == d.banana
-        assert m.foo == d.foo
-
-    @pytest.mark.parametrize(
-        "klass, version, data, msg",
-        [
-            (
-                FooBarModel,
-                999,
-                FooBarModel(banana=3.14, foo="hello"),
-                "Serialized version 999 is newer than the supported version 1",
-            ),
-            (str, 1, "", r"No deserializer found for builtins\.str"),
-        ],
-    )
-    def test_pydantic_deserialize_errors(self, klass, version, data, msg):
-        from airflow.serialization.serializers.pydantic import deserialize
-
-        with pytest.raises(TypeError, match=msg):
-            deserialize(klass, version, data)
-
     @pytest.mark.skipif(not PENDULUM3, reason="Test case for pendulum~=3")
     @pytest.mark.parametrize(
         "ser_value, expected",
@@ -574,15 +528,15 @@ def test_timezone_serialize_no_name(self):
     def test_timezone_deserialize_zoneinfo(self):
         from airflow.serialization.serializers.timezone import deserialize
 
-        zi = deserialize(ZoneInfo, 1, "Asia/Taipei")
+        zi = deserialize("backports.zoneinfo.ZoneInfo", 1, "Asia/Taipei")
         assert isinstance(zi, ZoneInfo)
         assert zi.key == "Asia/Taipei"
 
     @pytest.mark.parametrize(
         "klass, version, data, msg",
         [
-            (FixedTimezone, 1, 1.23, "is not of type int or str"),
-            (FixedTimezone, 999, "UTC", "serialized 999 .* > 1"),
+            ("pendulum.tz.timezone.FixedTimezone", 1, 1.23, "is not of type int or str"),
+            ("pendulum.tz.timezone.FixedTimezone", 999, "UTC", "serialized 999 .* > 1"),
         ],
     )
     def test_timezone_deserialize_errors(self, klass, version, data, msg):
@@ -616,39 +570,14 @@ def test_json_schema_load_dag_schema_dict(self, monkeypatch):
             load_dag_schema_dict()
         assert "Schema file schema.json does not exists" in str(ctx.value)
 
-    @pytest.mark.parametrize(
-        "klass, version, data",
-        [(tuple, 1, [11, 12]), (set, 1, [11, 12]), (frozenset, 1, [11, 12])],
-    )
-    def test_builtin_deserialize(self, klass, version, data):
-        res = builtin.deserialize(klass, version, klass(data))
-        assert isinstance(res, klass)
-        assert res == klass(data)
+    def test_builtin_deserialize_frozenset(self):
+        res = builtin.deserialize(qualname(frozenset), 1, [13, 14])
+        assert isinstance(res, frozenset)
+        assert res == frozenset({13, 14})
 
-    @pytest.mark.parametrize(
-        "klass, version, data, msg",
-        [
-            (tuple, 999, [11, 12], r"serialized version 999 is newer than class version 1"),
-            (set, 2, [11, 12], r"serialized version 2 is newer than class version 1"),
-            (frozenset, 13, [11, 12], r"serialized version 13 is newer than class version 1"),
-        ],
-    )
-    def test_builtin_deserialize_version_too_new(self, klass, version, data, msg):
-        with pytest.raises(TypeError, match=msg):
-            builtin.deserialize(klass, version, data)
-
-    @pytest.mark.parametrize(
-        "klass, version, data, msg",
-        [
-            (str, 1, "11, 12", r"do not know how to deserialize builtins\.str"),
-            (int, 1, 11, r"do not know how to deserialize builtins\.int"),
-            (bool, 1, True, r"do not know how to deserialize builtins\.bool"),
-            (float, 1, 0.999, r"do not know how to deserialize builtins\.float"),
-        ],
-    )
-    def test_builtin_deserialize_wrong_types(self, klass, version, data, msg):
-        with pytest.raises(TypeError, match=msg):
-            builtin.deserialize(klass, version, data)
+    def test_builtin_deserialize_version_too_new(self):
+        with pytest.raises(TypeError, match="serialized version is newer than class version"):
+            builtin.deserialize(qualname(tuple), 999, [1, 2])
 
     @pytest.mark.parametrize(
         "func, msg",
diff --git a/airflow-core/tests/unit/serialization/test_serde.py b/airflow-core/tests/unit/serialization/test_serde.py
index 560569689cf89..6b716f581fcbf 100644
--- a/airflow-core/tests/unit/serialization/test_serde.py
+++ b/airflow-core/tests/unit/serialization/test_serde.py
@@ -259,21 +259,6 @@ def test_allow_list_for_imports(self):
 
         assert f"{qualname(Z)} was not found in allow list" in str(ex.value)
 
-    @conf_vars(
-        {
-            ("core", "allowed_deserialization_classes"): "airflow.*",
-        }
-    )
-    @pytest.mark.usefixtures("recalculate_patterns")
-    def test_allow_list_for_deserialize_pydantic_model(self):
-        # for Pydantic model to be deserialized, it must be in `allowed_deserialization_classes`
-        i = U(x=7, v=V(w=W(x=42), s=["hello", "world"], t=(1, 2, 3), c=99), u=("extra", 123))
-        e = serialize(i)
-        with pytest.raises(ImportError) as ex:
-            deserialize(e)
-
-        assert f"{qualname(U)} was not found in allow list" in str(ex.value)
-
     @conf_vars(
         {
             ("core", "allowed_deserialization_classes"): "unit.airflow.*",

From c16b88a0009e5cca299dede3058600e379373e15 Mon Sep 17 00:00:00 2001
From: Niko Oliveira <onikolas@amazon.com>
Date: Thu, 26 Jun 2025 21:41:18 -0700
Subject: [PATCH 219/381] Fix GlueJobOperator deferred waiting (#52314)

In #52243 the waiting was moved from custom code within the glue hook to
using the aws base waiters when deferring Glue jobs. The Trigger was
given inappropriate inputs which caused it to wait for zero attempts,
which causes our tests to fail. This change moves to using the common
parameters we use for other operators in deferrable with the same
defaults as the Trigger has.
Note: previously this Operator used to wait indefinitely for the job to
either complete or fail. The default now waits for 75 minutes. The aws
base waiter has no ability to wait indefinitely, nor do I think it
should, that feels like a bug to me. So I'm considering this slight
behaviour change a bug fix of a bug fix.
---
 .../providers/amazon/aws/operators/glue.py      | 17 ++++++++++-------
 .../providers/amazon/aws/triggers/base.py       |  1 -
 2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/providers/amazon/src/airflow/providers/amazon/aws/operators/glue.py b/providers/amazon/src/airflow/providers/amazon/aws/operators/glue.py
index 5cf8f2ecb5ff1..95dd2954b8bed 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/operators/glue.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/operators/glue.py
@@ -77,8 +77,10 @@ class GlueJobOperator(AwsBaseOperator[GlueJobHook]):
         of limiting concurrency, Glue needs 5-10 seconds to clean up resources.
         Thus if status is returned immediately it might end up in case of more than 1 concurrent run.
         It is recommended to set this parameter to 10 when you are using concurrency=1.
-        For more information see: https://repost.aws/questions/QUaKgpLBMPSGWO0iq2Fob_bw/glue-run-concurrent-jobs#ANFpCL2fRnQRqgDFuIU_rpvA
-
+        For more information see:
+        https://repost.aws/questions/QUaKgpLBMPSGWO0iq2Fob_bw/glue-run-concurrent-jobs#ANFpCL2fRnQRqgDFuIU_rpvA
+    :param waiter_delay: Time in seconds to wait between status checks. (default: 60)
+    :param waiter_max_attempts: Maximum number of attempts to check for job completion. (default: 20)
     :param aws_conn_id: The Airflow connection used for AWS credentials.
         If this is ``None`` or empty then the default boto3 behaviour is used. If
         running Airflow in a distributed manner and aws_conn_id is None or
@@ -135,6 +137,8 @@ def __init__(
         stop_job_run_on_kill: bool = False,
         sleep_before_return: int = 0,
         job_poll_interval: int | float = 6,
+        waiter_delay: int = 60,
+        waiter_max_attempts: int = 75,
         **kwargs,
     ):
         super().__init__(**kwargs)
@@ -162,6 +166,8 @@ def __init__(
         self._job_run_id: str | None = None
         self.sleep_before_return: int = sleep_before_return
         self.s3_script_location: str | None = None
+        self.waiter_delay = waiter_delay
+        self.waiter_max_attempts = waiter_max_attempts
 
     @property
     def _hook_parameters(self):
@@ -241,8 +247,8 @@ def execute(self, context: Context):
                     run_id=self._job_run_id,
                     verbose=self.verbose,
                     aws_conn_id=self.aws_conn_id,
-                    waiter_delay=int(self.job_poll_interval),
-                    waiter_max_attempts=self.retry_limit,
+                    waiter_delay=self.waiter_delay,
+                    waiter_max_attempts=self.waiter_max_attempts,
                 ),
                 method_name="execute_complete",
             )
@@ -293,7 +299,6 @@ class GlueDataQualityOperator(AwsBaseOperator[GlueDataQualityHook]):
     :param description: A description of the data quality ruleset.
     :param update_rule_set: To update existing ruleset, Set this flag to True. (default: False)
     :param data_quality_ruleset_kwargs: Extra arguments for RuleSet.
-
     :param aws_conn_id: The Airflow connection used for AWS credentials.
         If this is ``None`` or empty then the default boto3 behaviour is used. If
         running Airflow in a distributed manner and aws_conn_id is None or
@@ -389,7 +394,6 @@ class GlueDataQualityRuleSetEvaluationRunOperator(AwsBaseOperator[GlueDataQualit
     :param deferrable: If True, the operator will wait asynchronously for the job to stop.
         This implies waiting for completion. This mode requires aiobotocore module to be installed.
         (default: False)
-
     :param aws_conn_id: The Airflow connection used for AWS credentials.
         If this is ``None`` or empty then the default boto3 behaviour is used. If
         running Airflow in a distributed manner and aws_conn_id is None or
@@ -554,7 +558,6 @@ class GlueDataQualityRuleRecommendationRunOperator(AwsBaseOperator[GlueDataQuali
     :param deferrable: If True, the operator will wait asynchronously for the job to stop.
         This implies waiting for completion. This mode requires aiobotocore module to be installed.
         (default: False)
-
     :param aws_conn_id: The Airflow connection used for AWS credentials.
         If this is ``None`` or empty then the default boto3 behaviour is used. If
         running Airflow in a distributed manner and aws_conn_id is None or
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/triggers/base.py b/providers/amazon/src/airflow/providers/amazon/aws/triggers/base.py
index 6183020a8f925..7a2701aab9d40 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/triggers/base.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/triggers/base.py
@@ -88,7 +88,6 @@ def __init__(
         super().__init__()
         # parameters that should be hardcoded in the child's implem
         self.serialized_fields = serialized_fields
-
         self.waiter_name = waiter_name
         self.waiter_args = waiter_args
         self.failure_message = failure_message

From 8da059aeb60d44bfe6402e42ea127ac74a1776b5 Mon Sep 17 00:00:00 2001
From: Elad Kalif <45845474+eladkal@users.noreply.github.com>
Date: Fri, 27 Jun 2025 08:34:39 +0300
Subject: [PATCH 220/381] cleanup stale dependency of methodtools (#52310)

---
 providers/microsoft/mssql/pyproject.toml | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/providers/microsoft/mssql/pyproject.toml b/providers/microsoft/mssql/pyproject.toml
index 79a23ed201a2e..acaaad5ce1c92 100644
--- a/providers/microsoft/mssql/pyproject.toml
+++ b/providers/microsoft/mssql/pyproject.toml
@@ -60,9 +60,6 @@ dependencies = [
     "apache-airflow>=2.10.0",
     "apache-airflow-providers-common-sql>=1.23.0",
     "pymssql>=2.3.5",
-    # The methodtools dependency can be removed with min airflow version >=2.9.1
-    # as it was added in https://github.com/apache/airflow/pull/37757
-    "methodtools>=0.4.7",
 ]
 
 # The optional dependencies should be modified in place in the generated file

From a3a6fe95cef6230e1e2e0f260829fa5a4244eba2 Mon Sep 17 00:00:00 2001
From: Pankaj Koti <pankajkoti699@gmail.com>
Date: Fri, 27 Jun 2025 12:33:18 +0530
Subject: [PATCH 221/381] Enable DatabricksJobRunLink for Databricks plugin,
 skip provide_session usage in Airflow3 (#52228)

This PR introduces support for the "See Databricks Job Run" extra link in the Databricks workflow provider plugin for Airflow 3. The implementation stores the job run URL in XCom during task execution and retrieves it when the extra link is accessed.

Additionally, when using Airflow 3, the PR refactors the plugin code to eliminate the use of `@provide_session` and direct database access for compatibility with Airflow 3. These changes address the concerns raised in [issue #49187](https://github.com/apache/airflow/issues/49187) regarding the Databricks provider plugin.

Support for the Databricks workflow repair functionality in Airflow 3 is still pending. A follow-up issue #52280 has been filed to explore a new approach for implementing repair in Airflow 3.

Related: #49187
---
 .../databricks/operators/databricks.py        |  24 +-
 .../operators/databricks_workflow.py          |  22 +-
 .../databricks/plugins/databricks_workflow.py | 175 +++++++++----
 .../operators/test_databricks_workflow.py     |   1 +
 .../plugins/test_databricks_workflow.py       | 245 ++++++++++++++++--
 5 files changed, 377 insertions(+), 90 deletions(-)

diff --git a/providers/databricks/src/airflow/providers/databricks/operators/databricks.py b/providers/databricks/src/airflow/providers/databricks/operators/databricks.py
index 1756f3b50d041..95d5783de0a92 100644
--- a/providers/databricks/src/airflow/providers/databricks/operators/databricks.py
+++ b/providers/databricks/src/airflow/providers/databricks/operators/databricks.py
@@ -42,6 +42,7 @@
 from airflow.providers.databricks.plugins.databricks_workflow import (
     WorkflowJobRepairSingleTaskLink,
     WorkflowJobRunLink,
+    store_databricks_job_run_link,
 )
 from airflow.providers.databricks.triggers.databricks import (
     DatabricksExecutionTrigger,
@@ -1214,10 +1215,16 @@ def __init__(
         super().__init__(**kwargs)
 
         if self._databricks_workflow_task_group is not None:
-            self.operator_extra_links = (
-                WorkflowJobRunLink(),
-                WorkflowJobRepairSingleTaskLink(),
-            )
+            # Conditionally set operator_extra_links based on Airflow version. In Airflow 3, only show the job run link.
+            # In Airflow 2, show the job run link and the repair link.
+            # TODO: Once we expand the plugin functionality in Airflow 3.1, this can be re-evaluated on how to handle the repair link.
+            if AIRFLOW_V_3_0_PLUS:
+                self.operator_extra_links = (WorkflowJobRunLink(),)
+            else:
+                self.operator_extra_links = (
+                    WorkflowJobRunLink(),
+                    WorkflowJobRepairSingleTaskLink(),
+                )
         else:
             # Databricks does not support repair for non-workflow tasks, hence do not show the repair link.
             self.operator_extra_links = (DatabricksJobRunLink(),)
@@ -1427,6 +1434,15 @@ def execute(self, context: Context) -> None:
             )
             self.databricks_run_id = workflow_run_metadata.run_id
             self.databricks_conn_id = workflow_run_metadata.conn_id
+
+            # Store operator links in XCom for Airflow 3 compatibility
+            if AIRFLOW_V_3_0_PLUS:
+                # Store the job run link
+                store_databricks_job_run_link(
+                    context=context,
+                    metadata=workflow_run_metadata,
+                    logger=self.log,
+                )
         else:
             self._launch_job(context=context)
         if self.wait_for_termination:
diff --git a/providers/databricks/src/airflow/providers/databricks/operators/databricks_workflow.py b/providers/databricks/src/airflow/providers/databricks/operators/databricks_workflow.py
index aa19bac959a94..9f714fa06d95c 100644
--- a/providers/databricks/src/airflow/providers/databricks/operators/databricks_workflow.py
+++ b/providers/databricks/src/airflow/providers/databricks/operators/databricks_workflow.py
@@ -31,7 +31,9 @@
 from airflow.providers.databricks.plugins.databricks_workflow import (
     WorkflowJobRepairAllFailedLink,
     WorkflowJobRunLink,
+    store_databricks_job_run_link,
 )
+from airflow.providers.databricks.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils.task_group import TaskGroup
 
 if TYPE_CHECKING:
@@ -92,9 +94,18 @@ class _CreateDatabricksWorkflowOperator(BaseOperator):
         populated after instantiation using the `add_task` method.
     """
 
-    operator_extra_links = (WorkflowJobRunLink(), WorkflowJobRepairAllFailedLink())
     template_fields = ("notebook_params", "job_clusters")
     caller = "_CreateDatabricksWorkflowOperator"
+    # Conditionally set operator_extra_links based on Airflow version
+    if AIRFLOW_V_3_0_PLUS:
+        # In Airflow 3, disable "Repair All Failed Tasks" since we can't pre-determine failed tasks
+        operator_extra_links = (WorkflowJobRunLink(),)
+    else:
+        # In Airflow 2.x, keep both links
+        operator_extra_links = (  # type: ignore[assignment]
+            WorkflowJobRunLink(),
+            WorkflowJobRepairAllFailedLink(),
+        )
 
     def __init__(
         self,
@@ -219,6 +230,15 @@ def execute(self, context: Context) -> Any:
             run_id,
         )
 
+        # Store operator links in XCom for Airflow 3 compatibility
+        if AIRFLOW_V_3_0_PLUS:
+            # Store the job run link
+            store_databricks_job_run_link(
+                context=context,
+                metadata=self.workflow_run_metadata,
+                logger=self.log,
+            )
+
         return {
             "conn_id": self.databricks_conn_id,
             "job_id": job_id,
diff --git a/providers/databricks/src/airflow/providers/databricks/plugins/databricks_workflow.py b/providers/databricks/src/airflow/providers/databricks/plugins/databricks_workflow.py
index 16ea7a0b6113e..ab927fb0c1722 100644
--- a/providers/databricks/src/airflow/providers/databricks/plugins/databricks_workflow.py
+++ b/providers/databricks/src/airflow/providers/databricks/plugins/databricks_workflow.py
@@ -40,7 +40,6 @@
 else:
     from airflow.www import auth  # type: ignore
 from airflow.utils.log.logging_mixin import LoggingMixin
-from airflow.utils.session import NEW_SESSION, provide_session
 from airflow.utils.state import TaskInstanceState
 from airflow.utils.task_group import TaskGroup
 
@@ -49,6 +48,7 @@
 
     from airflow.models import BaseOperator
     from airflow.providers.databricks.operators.databricks import DatabricksTaskBaseOperator
+    from airflow.utils.context import Context
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import BaseOperatorLink
@@ -93,32 +93,56 @@ def get_databricks_task_ids(
     return task_ids
 
 
-@provide_session
-def _get_dagrun(dag: DAG, run_id: str, session: Session | None = None) -> DagRun:
-    """
-    Retrieve the DagRun object associated with the specified DAG and run_id.
+# TODO: Need to re-think on how to support the currently unavailable repair functionality in Airflow 3. Probably a
+# good time to re-evaluate this would be once the plugin functionality is expanded in Airflow 3.1.
+if not AIRFLOW_V_3_0_PLUS:
+    from airflow.utils.session import NEW_SESSION, provide_session
 
-    :param dag: The DAG object associated with the DagRun to retrieve.
-    :param run_id: The run_id associated with the DagRun to retrieve.
-    :param session: The SQLAlchemy session to use for the query. If None, uses the default session.
-    :return: The DagRun object associated with the specified DAG and run_id.
-    """
-    if not session:
-        raise AirflowException("Session not provided.")
+    @provide_session
+    def _get_dagrun(dag: DAG, run_id: str, session: Session | None = None) -> DagRun:
+        """
+        Retrieve the DagRun object associated with the specified DAG and run_id.
 
-    return session.query(DagRun).filter(DagRun.dag_id == dag.dag_id, DagRun.run_id == run_id).first()
+        :param dag: The DAG object associated with the DagRun to retrieve.
+        :param run_id: The run_id associated with the DagRun to retrieve.
+        :param session: The SQLAlchemy session to use for the query. If None, uses the default session.
+        :return: The DagRun object associated with the specified DAG and run_id.
+        """
+        if not session:
+            raise AirflowException("Session not provided.")
 
+        return session.query(DagRun).filter(DagRun.dag_id == dag.dag_id, DagRun.run_id == run_id).first()
 
-@provide_session
-def _clear_task_instances(
-    dag_id: str, run_id: str, task_ids: list[str], log: logging.Logger, session: Session | None = None
-) -> None:
-    dag_bag = DagBag(read_dags_from_db=True)
-    dag = dag_bag.get_dag(dag_id)
-    log.debug("task_ids %s to clear", str(task_ids))
-    dr: DagRun = _get_dagrun(dag, run_id, session=session)
-    tis_to_clear = [ti for ti in dr.get_task_instances() if ti.databricks_task_key in task_ids]
-    clear_task_instances(tis_to_clear, session)
+    @provide_session
+    def _clear_task_instances(
+        dag_id: str, run_id: str, task_ids: list[str], log: logging.Logger, session: Session | None = None
+    ) -> None:
+        dag_bag = DagBag(read_dags_from_db=True)
+        dag = dag_bag.get_dag(dag_id)
+        log.debug("task_ids %s to clear", str(task_ids))
+        dr: DagRun = _get_dagrun(dag, run_id, session=session)
+        tis_to_clear = [ti for ti in dr.get_task_instances() if ti.databricks_task_key in task_ids]
+        clear_task_instances(tis_to_clear, session)
+
+    @provide_session
+    def get_task_instance(operator: BaseOperator, dttm, session: Session = NEW_SESSION) -> TaskInstance:
+        dag_id = operator.dag.dag_id
+        if hasattr(DagRun, "execution_date"):  # Airflow 2.x.
+            dag_run = DagRun.find(dag_id, execution_date=dttm)[0]  # type: ignore[call-arg]
+        else:
+            dag_run = DagRun.find(dag_id, logical_date=dttm)[0]
+        ti = (
+            session.query(TaskInstance)
+            .filter(
+                TaskInstance.dag_id == dag_id,
+                TaskInstance.run_id == dag_run.run_id,
+                TaskInstance.task_id == operator.task_id,
+            )
+            .one_or_none()
+        )
+        if not ti:
+            raise TaskInstanceNotFound("Task instance not found")
+        return ti
 
 
 def _repair_task(
@@ -201,27 +225,6 @@ def _get_launch_task_key(current_task_key: TaskInstanceKey, task_id: str) -> Tas
     return current_task_key
 
 
-@provide_session
-def get_task_instance(operator: BaseOperator, dttm, session: Session = NEW_SESSION) -> TaskInstance:
-    dag_id = operator.dag.dag_id
-    if hasattr(DagRun, "execution_date"):  # Airflow 2.x.
-        dag_run = DagRun.find(dag_id, execution_date=dttm)[0]  # type: ignore[call-arg]
-    else:
-        dag_run = DagRun.find(dag_id, logical_date=dttm)[0]
-    ti = (
-        session.query(TaskInstance)
-        .filter(
-            TaskInstance.dag_id == dag_id,
-            TaskInstance.run_id == dag_run.run_id,
-            TaskInstance.task_id == operator.task_id,
-        )
-        .one_or_none()
-    )
-    if not ti:
-        raise TaskInstanceNotFound("Task instance not found")
-    return ti
-
-
 def get_xcom_result(
     ti_key: TaskInstanceKey,
     key: str,
@@ -240,6 +243,11 @@ class WorkflowJobRunLink(BaseOperatorLink, LoggingMixin):
 
     name = "See Databricks Job Run"
 
+    @property
+    def xcom_key(self) -> str:
+        """XCom key where the link is stored during task execution."""
+        return "databricks_job_run_link"
+
     def get_link(
         self,
         operator: BaseOperator,
@@ -247,6 +255,29 @@ def get_link(
         *,
         ti_key: TaskInstanceKey | None = None,
     ) -> str:
+        if AIRFLOW_V_3_0_PLUS:
+            # Use public XCom API to get the pre-computed link
+            try:
+                link = XCom.get_value(
+                    ti_key=ti_key,
+                    key=self.xcom_key,
+                )
+                return link if link else ""
+            except Exception as e:
+                self.log.warning("Failed to retrieve Databricks job run link from XCom: %s", e)
+                return ""
+        else:
+            # Airflow 2.x - keep original implementation
+            return self._get_link_legacy(operator, dttm, ti_key=ti_key)
+
+    def _get_link_legacy(
+        self,
+        operator: BaseOperator,
+        dttm=None,
+        *,
+        ti_key: TaskInstanceKey | None = None,
+    ) -> str:
+        """Legacy implementation for Airflow 2.x."""
         if not ti_key:
             ti = get_task_instance(operator, dttm)
             ti_key = ti.key
@@ -269,6 +300,30 @@ def get_link(
         return f"https://{hook.host}/#job/{metadata.job_id}/run/{metadata.run_id}"
 
 
+def store_databricks_job_run_link(
+    context: Context,
+    metadata: Any,
+    logger: logging.Logger,
+) -> None:
+    """
+    Store the Databricks job run link in XCom during task execution.
+
+    This should be called by Databricks operators during their execution.
+    """
+    if not AIRFLOW_V_3_0_PLUS:
+        return  # Only needed for Airflow 3
+
+    try:
+        hook = DatabricksHook(metadata.conn_id)
+        link = f"https://{hook.host}/#job/{metadata.job_id}/run/{metadata.run_id}"
+
+        # Store the link in XCom for the UI to retrieve as extra link
+        context["ti"].xcom_push(key="databricks_job_run_link", value=link)
+        logger.info("Stored Databricks job run link in XCom: %s", link)
+    except Exception as e:
+        logger.warning("Failed to store Databricks job run link: %s", e)
+
+
 class WorkflowJobRepairAllFailedLink(BaseOperatorLink, LoggingMixin):
     """Constructs a link to send a request to repair all failed tasks in the Databricks workflow."""
 
@@ -455,13 +510,6 @@ def _get_return_url(dag_id: str, run_id: str) -> str:
         return url_for("Airflow.grid", dag_id=dag_id, dag_run_id=run_id)
 
 
-repair_databricks_view = RepairDatabricksTasks()
-
-repair_databricks_package = {
-    "view": repair_databricks_view,
-}
-
-
 class DatabricksWorkflowPlugin(AirflowPlugin):
     """
     Databricks Workflows plugin for Airflow.
@@ -472,9 +520,22 @@ class DatabricksWorkflowPlugin(AirflowPlugin):
     """
 
     name = "databricks_workflow"
-    operator_extra_links = [
-        WorkflowJobRepairAllFailedLink(),
-        WorkflowJobRepairSingleTaskLink(),
-        WorkflowJobRunLink(),
-    ]
-    appbuilder_views = [repair_databricks_package]
+
+    # Conditionally set operator_extra_links based on Airflow version
+    if AIRFLOW_V_3_0_PLUS:
+        # In Airflow 3, disable the links for repair functionality until it is figured out it can be supported
+        operator_extra_links = [
+            WorkflowJobRunLink(),
+        ]
+    else:
+        # In Airflow 2.x, keep all links including repair all failed tasks
+        operator_extra_links = [
+            WorkflowJobRepairAllFailedLink(),
+            WorkflowJobRepairSingleTaskLink(),
+            WorkflowJobRunLink(),
+        ]
+        repair_databricks_view = RepairDatabricksTasks()
+        repair_databricks_package = {
+            "view": repair_databricks_view,
+        }
+        appbuilder_views = [repair_databricks_package]
diff --git a/providers/databricks/tests/unit/databricks/operators/test_databricks_workflow.py b/providers/databricks/tests/unit/databricks/operators/test_databricks_workflow.py
index 0a4c3ee1f9438..68ae71b8e1c9e 100644
--- a/providers/databricks/tests/unit/databricks/operators/test_databricks_workflow.py
+++ b/providers/databricks/tests/unit/databricks/operators/test_databricks_workflow.py
@@ -133,6 +133,7 @@ def test_wait_for_job_to_start(mock_databricks_hook):
     mock_hook_instance.get_run_state.assert_called()
 
 
+@pytest.mark.db_test
 def test_execute(mock_databricks_hook, context, mock_task_group):
     """Test that _CreateDatabricksWorkflowOperator.execute runs the task group."""
     operator = _CreateDatabricksWorkflowOperator(task_id="test_task", databricks_conn_id="databricks_default")
diff --git a/providers/databricks/tests/unit/databricks/plugins/test_databricks_workflow.py b/providers/databricks/tests/unit/databricks/plugins/test_databricks_workflow.py
index f79dbcbcaeb12..e9012742f23f3 100644
--- a/providers/databricks/tests/unit/databricks/plugins/test_databricks_workflow.py
+++ b/providers/databricks/tests/unit/databricks/plugins/test_databricks_workflow.py
@@ -17,20 +17,11 @@
 
 from __future__ import annotations
 
-from unittest.mock import MagicMock, Mock, patch
+import logging
+from unittest.mock import MagicMock, Mock, PropertyMock, patch
 
 import pytest
 
-from airflow.providers.databricks.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    pytest.skip(
-        "``airflow/providers/databricks/plugins/databricks_workflow.py`` is only compatible with Airflow 2.X.",
-        allow_module_level=True,
-    )
-
-from flask import url_for
-
 from airflow.exceptions import AirflowException
 from airflow.models.dagrun import DagRun
 from airflow.models.taskinstance import TaskInstanceKey
@@ -40,14 +31,13 @@
     RepairDatabricksTasks,
     WorkflowJobRepairSingleTaskLink,
     WorkflowJobRunLink,
-    _get_dagrun,
     _get_launch_task_key,
     _repair_task,
     get_databricks_task_ids,
     get_launch_task_id,
-    get_task_instance,
+    store_databricks_job_run_link,
 )
-from airflow.www.app import create_app
+from airflow.providers.databricks.version_compat import AIRFLOW_V_3_0_PLUS
 
 from tests_common import RUNNING_TESTS_AGAINST_AIRFLOW_PACKAGES
 
@@ -64,6 +54,8 @@
     "task2": MagicMock(dag_id=DAG_ID, task_id="task2", databricks_task_key="task_key2"),
 }
 
+logger = logging.getLogger(__name__)
+
 
 def test_get_databricks_task_ids():
     result = get_databricks_task_ids(GROUP_ID, TASK_MAP, LOG)
@@ -72,7 +64,10 @@ def test_get_databricks_task_ids():
     assert result == expected_ids
 
 
-def test_get_dagrun():
+@pytest.mark.skipif(AIRFLOW_V_3_0_PLUS, reason="Test only for Airflow < 3.0")
+def test_get_dagrun_airflow2():
+    from airflow.providers.databricks.plugins.databricks_workflow import _get_dagrun
+
     session = MagicMock()
     dag = MagicMock(dag_id=DAG_ID)
     session.query.return_value.filter.return_value.first.return_value = DagRun()
@@ -82,6 +77,7 @@ def test_get_dagrun():
     assert isinstance(result, DagRun)
 
 
+@pytest.mark.skipif(AIRFLOW_V_3_0_PLUS, reason="Test only for Airflow < 3.0")
 @patch("airflow.providers.databricks.plugins.databricks_workflow.DatabricksHook")
 def test_repair_task(mock_databricks_hook):
     mock_hook_instance = mock_databricks_hook.return_value
@@ -96,6 +92,7 @@ def test_repair_task(mock_databricks_hook):
     mock_hook_instance.repair_run.assert_called_once()
 
 
+@pytest.mark.skipif(AIRFLOW_V_3_0_PLUS, reason="Test only for Airflow < 3.0")
 @patch("airflow.providers.databricks.plugins.databricks_workflow.DatabricksHook")
 def test_repair_task_with_params(mock_databricks_hook):
     mock_hook_instance = mock_databricks_hook.return_value
@@ -143,16 +140,15 @@ def test_get_launch_task_key():
     assert result.run_id == TASK_INSTANCE_KEY.run_id
 
 
-@pytest.fixture(scope="session")
-def app():
+@pytest.mark.skipif(AIRFLOW_V_3_0_PLUS, reason="Test only for Airflow < 3.0")
+@pytest.mark.db_test
+def test_get_task_instance_airflow2():
+    from airflow.providers.databricks.plugins.databricks_workflow import get_task_instance
+    from airflow.www.app import create_app
+
     app = create_app(testing=True)
     app.config["SERVER_NAME"] = "localhost"
 
-    with app.app_context():
-        yield app
-
-
-def test_get_task_instance(app):
     with app.app_context():
         operator = Mock()
         operator.dag.dag_id = "dag_id"
@@ -169,18 +165,32 @@ def test_get_task_instance(app):
             assert result == dag_run
 
 
-def test_get_return_url_dag_id_run_id(app):
+@pytest.mark.skipif(AIRFLOW_V_3_0_PLUS, reason="Test only for Airflow < 3.0")
+@pytest.mark.db_test
+def test_get_return_url_dag_id_run_id_airflow2():
+    from flask import url_for
+
+    from airflow.www.app import create_app
+
     dag_id = "example_dag"
     run_id = "example_run"
 
-    expected_url = url_for("Airflow.grid", dag_id=dag_id, dag_run_id=run_id)
-
+    app = create_app(testing=True)
+    app.config["SERVER_NAME"] = "localhost"
     with app.app_context():
+        expected_url = url_for("Airflow.grid", dag_id=dag_id, dag_run_id=run_id)
         actual_url = RepairDatabricksTasks._get_return_url(dag_id, run_id)
     assert actual_url == expected_url, f"Expected {expected_url}, got {actual_url}"
 
 
-def test_workflow_job_run_link(app):
+@pytest.mark.skipif(AIRFLOW_V_3_0_PLUS, reason="Test only for Airflow < 3.0")
+@pytest.mark.db_test
+def test_workflow_job_run_link_airflow2():
+    from airflow.www.app import create_app
+
+    app = create_app(testing=True)
+    app.config["SERVER_NAME"] = "localhost"
+
     with app.app_context():
         link = WorkflowJobRunLink()
         operator = Mock()
@@ -214,10 +224,16 @@ def test_workflow_job_run_link(app):
                         assert "https://mockhost/#job/1/run/1" in result
 
 
+@pytest.mark.skipif(AIRFLOW_V_3_0_PLUS, reason="Test only for Airflow < 3.0")
 @pytest.mark.skipif(
     RUNNING_TESTS_AGAINST_AIRFLOW_PACKAGES, reason="Web plugin test doesn't work when not against sources"
 )
-def test_workflow_job_repair_single_failed_link(app):
+@pytest.mark.db_test
+def test_workflow_job_repair_single_failed_link_airflow2():
+    from airflow.www.app import create_app
+
+    app = create_app(testing=True)
+    app.config["SERVER_NAME"] = "localhost"
     with app.app_context():
         link = WorkflowJobRepairSingleTaskLink()
         operator = Mock()
@@ -261,10 +277,183 @@ def test_operator_extra_links(plugin):
         assert hasattr(link, "get_link")
 
 
-def test_appbuilder_views(plugin):
+@pytest.mark.skipif(AIRFLOW_V_3_0_PLUS, reason="Test only for Airflow < 3.0")
+def test_appbuilder_views_airflow2(plugin):
     assert plugin.appbuilder_views is not None
     assert len(plugin.appbuilder_views) == 1
 
     repair_view = plugin.appbuilder_views[0]["view"]
     assert isinstance(repair_view, RepairDatabricksTasks)
     assert repair_view.default_view == "repair"
+
+
+@pytest.mark.skipif(not AIRFLOW_V_3_0_PLUS, reason="Test only for Airflow 3.0+")
+class TestDatabricksWorkflowPluginAirflow3:
+    """Test Databricks Workflow Plugin functionality specific to Airflow 3.x."""
+
+    def test_plugin_operator_extra_links_limited_functionality(self):
+        """Test that operator_extra_links are limited in Airflow 3.x (only job run link)."""
+        plugin = DatabricksWorkflowPlugin()
+
+        # In Airflow 3, only WorkflowJobRunLink should be present
+        assert len(plugin.operator_extra_links) == 1
+        assert isinstance(plugin.operator_extra_links[0], WorkflowJobRunLink)
+
+        # Verify repair links are not present
+        link_types = [type(link).__name__ for link in plugin.operator_extra_links]
+        assert not any("Repair" in link_type for link_type in link_types)
+
+    def test_plugin_no_appbuilder_views(self):
+        """Test that appbuilder_views are not configured in Airflow 3.x."""
+        plugin = DatabricksWorkflowPlugin()
+
+        # In Airflow 3, appbuilder_views should not be set (repair functionality disabled)
+        assert not getattr(plugin, "appbuilder_views", [])
+
+    def test_store_databricks_job_run_link_function_works(self):
+        """Test that store_databricks_job_run_link works correctly in Airflow 3.x."""
+        ti_mock = Mock()
+        ti_mock.xcom_push = Mock()
+
+        context = {
+            "ti": ti_mock,
+            "dag": Mock(dag_id="test_dag"),
+            "dag_run": Mock(run_id="test_run"),
+            "task": Mock(task_id="test_task"),
+        }
+
+        metadata = Mock(conn_id="databricks_default", job_id=12345, run_id=67890)
+
+        with patch("airflow.providers.databricks.plugins.databricks_workflow.DatabricksHook") as mock_hook:
+            mock_hook_instance = Mock()
+            mock_hook_instance.host = "test-databricks-host"
+            mock_hook.return_value = mock_hook_instance
+
+            store_databricks_job_run_link(context, metadata, logger)
+
+            ti_mock.xcom_push.assert_called_once()
+
+            call_args = ti_mock.xcom_push.call_args
+            assert call_args[1]["key"] == "databricks_job_run_link"
+            assert "test-databricks-host" in call_args[1]["value"]
+            assert "12345" in call_args[1]["value"]
+            assert "67890" in call_args[1]["value"]
+            assert ti_mock.xcom_push.call_count == 1
+
+    def test_workflow_job_run_link_uses_xcom(self):
+        """Test that WorkflowJobRunLink.get_link uses XCom in Airflow 3.x."""
+        link = WorkflowJobRunLink()
+        operator = Mock()
+        ti_key = TaskInstanceKey(dag_id="test_dag", task_id="test_task", run_id="test_run", try_number=1)
+
+        expected_link = "https://test-host/#job/123/run/456"
+
+        with patch("airflow.providers.databricks.plugins.databricks_workflow.XCom") as mock_xcom:
+            mock_xcom.get_value.return_value = expected_link
+
+            result = link.get_link(operator, ti_key=ti_key)
+
+            mock_xcom.get_value.assert_called_once_with(ti_key=ti_key, key="databricks_job_run_link")
+
+            assert result == expected_link
+
+    def test_store_databricks_job_run_link_exception_handling(self):
+        """Test that exceptions are properly handled in store_databricks_job_run_link."""
+        ti_mock = Mock()
+        ti_mock.xcom_push = Mock()
+
+        context = {
+            "ti": ti_mock,
+            "dag": Mock(dag_id="test_dag"),
+            "dag_run": Mock(run_id="test_run"),
+            "task": Mock(task_id="test_task"),
+        }
+
+        metadata = Mock(conn_id="databricks_default", job_id=12345, run_id=67890)
+
+        with patch("airflow.providers.databricks.plugins.databricks_workflow.DatabricksHook") as mock_hook:
+            mock_hook_instance = Mock()
+            type(mock_hook_instance).host = PropertyMock(side_effect=Exception("Connection failed"))
+            mock_hook.return_value = mock_hook_instance
+
+            store_databricks_job_run_link(context, metadata, logger)
+
+            # Verify no XCom was pushed due to the exception
+            ti_mock.xcom_push.assert_not_called()
+
+
+@pytest.mark.skipif(AIRFLOW_V_3_0_PLUS, reason="Test only for Airflow < 3.0")
+class TestDatabricksWorkflowPluginAirflow2:
+    """Test Databricks Workflow Plugin functionality specific to Airflow 2.x."""
+
+    def test_plugin_operator_extra_links_full_functionality(self):
+        """Test that all operator_extra_links are present in Airflow 2.x."""
+        plugin = DatabricksWorkflowPlugin()
+
+        # In Airflow 2.x, all links should be present including repair links
+        assert len(plugin.operator_extra_links) >= 2  # At least job run link + repair links
+        link_types = [type(link).__name__ for link in plugin.operator_extra_links]
+        assert "WorkflowJobRunLink" in link_types
+        # Should have repair links in 2.x
+        assert any("Repair" in link_type for link_type in link_types)
+
+    def test_plugin_has_appbuilder_views(self):
+        """Test that appbuilder_views are configured for repair functionality in Airflow 2.x."""
+        plugin = DatabricksWorkflowPlugin()
+
+        # In Airflow 2.x, appbuilder_views should be present for repair functionality
+        assert hasattr(plugin, "appbuilder_views")
+        assert plugin.appbuilder_views is not None
+
+    def test_store_databricks_job_run_link_returns_early(self):
+        """Test that store_databricks_job_run_link returns early in Airflow 2.x."""
+        ti_mock = Mock()
+        ti_mock.xcom_push = Mock()
+
+        context = {
+            "ti": ti_mock,
+            "dag": Mock(dag_id="test_dag"),
+            "dag_run": Mock(run_id="test_run"),
+            "task": Mock(task_id="test_task"),
+        }
+
+        metadata = Mock(conn_id="databricks_default", job_id=12345, run_id=67890)
+
+        store_databricks_job_run_link(context, metadata, logger)
+
+        ti_mock.xcom_push.assert_not_called()
+
+    def test_workflow_job_run_link_uses_legacy_method(self):
+        """Test that WorkflowJobRunLink.get_link uses legacy method in Airflow 2.x."""
+        link = WorkflowJobRunLink()
+        operator = Mock()
+        operator.task_group = Mock()
+        operator.task_group.group_id = "test_group"
+
+        ti_key = TaskInstanceKey(dag_id="test_dag", task_id="test_task", run_id="test_run", try_number=1)
+
+        with patch(
+            "airflow.providers.databricks.plugins.databricks_workflow.get_task_instance"
+        ) as mock_get_ti:
+            with patch(
+                "airflow.providers.databricks.plugins.databricks_workflow.get_xcom_result"
+            ) as mock_get_xcom:
+                with patch("airflow.providers.databricks.plugins.databricks_workflow.DagBag") as mock_dag_bag:
+                    with patch(
+                        "airflow.providers.databricks.plugins.databricks_workflow.DatabricksHook"
+                    ) as mock_hook:
+                        mock_get_ti.return_value = Mock(key=ti_key)
+                        mock_get_xcom.return_value = Mock(conn_id="conn_id", run_id=1, job_id=1)
+                        mock_dag_bag.return_value.get_dag.return_value.get_task.return_value = Mock(
+                            task_id="test_task"
+                        )
+
+                        mock_hook_instance = Mock()
+                        mock_hook_instance.host = "test-host"
+                        mock_hook.return_value = mock_hook_instance
+
+                        result = link.get_link(operator, ti_key=ti_key)
+
+                        # Verify legacy method was used (should contain databricks host)
+                        assert "test-host" in result
+                        assert "#job/1/run/1" in result

From dd2bcacdc9fad8d0a48594a14cb2e4711e97ad62 Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Fri, 27 Jun 2025 08:04:43 +0100
Subject: [PATCH 222/381] Fix mypy errors in GCP `generative_model` (#52321)

---
 .../google/cloud/hooks/vertex_ai/generative_model.py   | 10 +++++-----
 .../cloud/operators/vertex_ai/generative_model.py      |  6 +++---
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/generative_model.py b/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/generative_model.py
index f31e131b0a205..3ed03b66b63a2 100644
--- a/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/generative_model.py
+++ b/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/generative_model.py
@@ -21,15 +21,15 @@
 
 import time
 from datetime import timedelta
-from typing import TYPE_CHECKING
+from typing import TYPE_CHECKING, Any, Literal
 
 import vertexai
 from google.cloud import aiplatform
 from vertexai.generative_models import GenerativeModel
 from vertexai.language_models import TextEmbeddingModel
+from vertexai.preview import generative_models as preview_generative_model
 from vertexai.preview.caching import CachedContent
 from vertexai.preview.evaluation import EvalResult, EvalTask
-from vertexai.preview.generative_models import GenerativeModel as preview_generative_model
 from vertexai.preview.tuning import sft
 
 from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID, GoogleBaseHook
@@ -86,7 +86,7 @@ def get_cached_context_model(
         """Return a Generative Model with Cached Context."""
         cached_content = CachedContent(cached_content_name=cached_content_name)
 
-        cached_context_model = preview_generative_model.from_cached_content(cached_content)
+        cached_context_model = preview_generative_model.GenerativeModel.from_cached_content(cached_content)
         return cached_context_model
 
     @GoogleBaseHook.fallback_to_default_project_id
@@ -164,7 +164,7 @@ def supervised_fine_tuning_train(
         tuned_model_display_name: str | None = None,
         validation_dataset: str | None = None,
         epochs: int | None = None,
-        adapter_size: int | None = None,
+        adapter_size: Literal[1, 4, 8, 16] | None = None,
         learning_rate_multiplier: float | None = None,
         project_id: str = PROVIDE_PROJECT_ID,
     ) -> types_v1.TuningJob:
@@ -301,7 +301,7 @@ def create_cached_content(
         location: str,
         ttl_hours: float = 1,
         system_instruction: str | None = None,
-        contents: list | None = None,
+        contents: list[Any] | None = None,
         display_name: str | None = None,
         project_id: str = PROVIDE_PROJECT_ID,
     ) -> str:
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/generative_model.py b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/generative_model.py
index 365efed44ff84..686e1674078ac 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/generative_model.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/generative_model.py
@@ -20,7 +20,7 @@
 from __future__ import annotations
 
 from collections.abc import Sequence
-from typing import TYPE_CHECKING
+from typing import TYPE_CHECKING, Any, Literal
 
 from google.api_core import exceptions
 
@@ -222,7 +222,7 @@ def __init__(
         tuned_model_display_name: str | None = None,
         validation_dataset: str | None = None,
         epochs: int | None = None,
-        adapter_size: int | None = None,
+        adapter_size: Literal[1, 4, 8, 16] | None = None,
         learning_rate_multiplier: float | None = None,
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: str | Sequence[str] | None = None,
@@ -474,7 +474,7 @@ def __init__(
         location: str,
         model_name: str,
         system_instruction: str | None = None,
-        contents: list | None = None,
+        contents: list[Any] | None = None,
         ttl_hours: float = 1,
         display_name: str | None = None,
         gcp_conn_id: str = "google_cloud_default",

From ac9e968fe85cf43717d280f303470eb5268ca9ca Mon Sep 17 00:00:00 2001
From: Justyn Harriman <jharriman@openai.com>
Date: Fri, 27 Jun 2025 00:06:15 -0700
Subject: [PATCH 223/381] fix: task-sdk AssetEventOperations.get to use
 alias_name when specified (#52303)

* Fix AssetEventOperations.get to use alias_name when specified

* Use syntax compatible with python 3.9
---
 task-sdk/src/airflow/sdk/api/client.py     |  2 +-
 task-sdk/tests/task_sdk/api/test_client.py | 47 ++++++++++++++++++++++
 2 files changed, 48 insertions(+), 1 deletion(-)

diff --git a/task-sdk/src/airflow/sdk/api/client.py b/task-sdk/src/airflow/sdk/api/client.py
index 65dede0d986da..179bb9a443f5a 100644
--- a/task-sdk/src/airflow/sdk/api/client.py
+++ b/task-sdk/src/airflow/sdk/api/client.py
@@ -545,7 +545,7 @@ def get(
         if name or uri:
             resp = self.client.get("asset-events/by-asset", params={"name": name, "uri": uri})
         elif alias_name:
-            resp = self.client.get("asset-events/by-asset-alias", params={"name": name})
+            resp = self.client.get("asset-events/by-asset-alias", params={"name": alias_name})
         else:
             raise ValueError("Either `name`, `uri` or `alias_name` must be provided")
 
diff --git a/task-sdk/tests/task_sdk/api/test_client.py b/task-sdk/tests/task_sdk/api/test_client.py
index ce5329197493e..7fa17ba1c4d38 100644
--- a/task-sdk/tests/task_sdk/api/test_client.py
+++ b/task-sdk/tests/task_sdk/api/test_client.py
@@ -28,6 +28,7 @@
 
 from airflow.sdk.api.client import RemoteValidationError, ServerResponseError
 from airflow.sdk.api.datamodels._generated import (
+    AssetEventsResponse,
     AssetResponse,
     ConnectionResponse,
     DagRunState,
@@ -875,6 +876,52 @@ def handle_request(request: httpx.Request) -> httpx.Response:
         assert result.error == ErrorType.CONNECTION_NOT_FOUND
 
 
+class TestAssetEventOperations:
+    @pytest.mark.parametrize(
+        "request_params",
+        [
+            ({"name": "this_asset", "uri": "s3://bucket/key"}),
+            ({"alias_name": "this_asset_alias"}),
+        ],
+    )
+    def test_by_name_get_success(self, request_params):
+        def handle_request(request: httpx.Request) -> httpx.Response:
+            params = request.url.params
+            if request.url.path == "/asset-events/by-asset":
+                assert params.get("name") == request_params.get("name")
+                assert params.get("uri") == request_params.get("uri")
+            elif request.url.path == "/asset-events/by-asset-alias":
+                assert params.get("name") == request_params.get("alias_name")
+            else:
+                return httpx.Response(status_code=400, json={"detail": "Bad Request"})
+
+            return httpx.Response(
+                status_code=200,
+                json={
+                    "asset_events": [
+                        {
+                            "id": 1,
+                            "asset": {
+                                "name": "this_asset",
+                                "uri": "s3://bucket/key",
+                                "group": "asset",
+                            },
+                            "created_dagruns": [],
+                            "timestamp": "2023-01-01T00:00:00Z",
+                        }
+                    ]
+                },
+            )
+
+        client = make_client(transport=httpx.MockTransport(handle_request))
+        result = client.asset_events.get(**request_params)
+
+        assert isinstance(result, AssetEventsResponse)
+        assert len(result.asset_events) == 1
+        assert result.asset_events[0].asset.name == "this_asset"
+        assert result.asset_events[0].asset.uri == "s3://bucket/key"
+
+
 class TestAssetOperations:
     @pytest.mark.parametrize(
         "request_params",

From 3c1568ae7734153691201aa9a4996a9e4793450e Mon Sep 17 00:00:00 2001
From: Salikram Paudel <36765526+SalikramPaudel@users.noreply.github.com>
Date: Fri, 27 Jun 2025 02:33:17 -0500
Subject: [PATCH 224/381] Fix: Unclosed aiohttp ClientSession and TCPConnector
 in DatabricksRunNowOperator (deferrable=True) (#52119)

Closes: #51910

Fixes unclosed `aiohttp.ClientSession` and `TCPConnector` warnings when using `DatabricksRunNowOperator` with `deferrable=True` in Airflow 3.0.2 and Databricks Provider 7.4.0.

### Background

As described in #51910, the following errors appear during deferrable task execution:

```
Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x...>

Unclosed connector
connector: <aiohttp.connector.TCPConnector object at 0x...>
```

These indicate improper async resource cleanup during trigger polling.

### Fix

- Ensures `aiohttp.ClientSession` and `TCPConnector` are properly closed
- Applies best practices for async resource lifecycle management in the trigger

---------

Co-authored-by: Salikram Paudel <paudelsalik4@gamil.com>
---
 .../databricks/hooks/databricks_base.py       |  9 +--
 .../unit/databricks/hooks/test_databricks.py  | 56 ++++++++++++-------
 2 files changed, 40 insertions(+), 25 deletions(-)

diff --git a/providers/databricks/src/airflow/providers/databricks/hooks/databricks_base.py b/providers/databricks/src/airflow/providers/databricks/hooks/databricks_base.py
index b2e08ecaad989..2829c7012d32b 100644
--- a/providers/databricks/src/airflow/providers/databricks/hooks/databricks_base.py
+++ b/providers/databricks/src/airflow/providers/databricks/hooks/databricks_base.py
@@ -353,14 +353,15 @@ async def _a_get_aad_token(self, resource: str) -> str:
             async for attempt in self._a_get_retry_object():
                 with attempt:
                     if self.databricks_conn.extra_dejson.get("use_azure_managed_identity", False):
-                        token = await AsyncManagedIdentityCredential().get_token(f"{resource}/.default")
+                        async with AsyncManagedIdentityCredential() as credential:
+                            token = await credential.get_token(f"{resource}/.default")
                     else:
-                        credential = AsyncClientSecretCredential(
+                        async with AsyncClientSecretCredential(
                             client_id=self.databricks_conn.login,
                             client_secret=self.databricks_conn.password,
                             tenant_id=self.databricks_conn.extra_dejson["azure_tenant_id"],
-                        )
-                        token = await credential.get_token(f"{resource}/.default")
+                        ) as credential:
+                            token = await credential.get_token(f"{resource}/.default")
                     jsn = {
                         "access_token": token.token,
                         "token_type": "Bearer",
diff --git a/providers/databricks/tests/unit/databricks/hooks/test_databricks.py b/providers/databricks/tests/unit/databricks/hooks/test_databricks.py
index 2698a12b62946..c4b0b427d7dd6 100644
--- a/providers/databricks/tests/unit/databricks/hooks/test_databricks.py
+++ b/providers/databricks/tests/unit/databricks/hooks/test_databricks.py
@@ -1907,7 +1907,7 @@ async def test_get_run_state(self, mock_azure_identity, mock_get):
 @pytest.mark.db_test
 class TestDatabricksHookAsyncAadTokenOtherClouds:
     """
-    Tests for DatabricksHook using async methodswhen auth is done with AAD token
+    Tests for DatabricksHook using async methods when auth is done with AAD token
     for SP as user inside workspace and using non-global Azure cloud (China, GovCloud, Germany)
     """
 
@@ -1934,12 +1934,18 @@ def setup_connections(self, create_connection_without_db):
         self.hook = DatabricksHook(retry_args=DEFAULT_RETRY_ARGS)
 
     @pytest.mark.asyncio
+    @mock.patch("azure.identity.aio.ClientSecretCredential")
     @mock.patch("airflow.providers.databricks.hooks.databricks_base.aiohttp.ClientSession.get")
-    @mock.patch("azure.identity.aio.ClientSecretCredential.__init__")
-    @mock.patch("azure.identity.aio.ClientSecretCredential.get_token")
-    async def test_get_run_state(self, mock_azure_identity_get_token, mock_azure_identity, mock_get):
-        mock_azure_identity.return_value = None
-        mock_azure_identity_get_token.return_value = create_aad_token_for_resource()
+    async def test_get_run_state(self, mock_get, mock_client_secret_credential_class):
+        mock_credential = mock.Mock()
+        mock_credential.get_token = AsyncMock(return_value=create_aad_token_for_resource())
+
+        mock_context_manager = mock.AsyncMock()
+        mock_context_manager.__aenter__.return_value = mock_credential
+        mock_context_manager.__aexit__.return_value = AsyncMock()
+
+        mock_client_secret_credential_class.return_value = mock_context_manager
+
         mock_get.return_value.__aenter__.return_value.json = AsyncMock(return_value=GET_RUN_RESPONSE)
 
         async with self.hook:
@@ -1947,12 +1953,11 @@ async def test_get_run_state(self, mock_azure_identity_get_token, mock_azure_ide
 
         assert run_state == RunState(LIFE_CYCLE_STATE, RESULT_STATE, STATE_MESSAGE)
 
-        azure_identity_args = mock_azure_identity.call_args.kwargs
-        assert azure_identity_args["tenant_id"] == self.tenant_id
-        assert azure_identity_args["client_id"] == self.client_id
+        credential_call_kwargs = mock_client_secret_credential_class.call_args.kwargs
+        assert credential_call_kwargs["tenant_id"] == self.tenant_id
+        assert credential_call_kwargs["client_id"] == self.client_id
 
-        get_token_args = mock_azure_identity_get_token.call_args_list
-        assert get_token_args == [mock.call(f"{DEFAULT_DATABRICKS_SCOPE}/.default")]
+        mock_credential.get_token.assert_called_once_with(f"{DEFAULT_DATABRICKS_SCOPE}/.default")
 
         mock_get.assert_called_once_with(
             get_run_endpoint(HOST),
@@ -1992,11 +1997,21 @@ def setup_connections(self, create_connection_without_db):
 
     @pytest.mark.asyncio
     @mock.patch("airflow.providers.databricks.hooks.databricks_base.aiohttp.ClientSession.get")
-    @mock.patch("azure.identity.aio.ClientSecretCredential.__init__")
-    @mock.patch("azure.identity.aio.ClientSecretCredential.get_token")
-    async def test_get_run_state(self, mock_azure_identity_get_token, mock_azure_identity, mock_get):
-        mock_azure_identity.return_value = None
-        mock_azure_identity_get_token.return_value = create_aad_token_for_resource()
+    @mock.patch("azure.identity.aio.ClientSecretCredential")
+    async def test_get_run_state(self, mock_client_secret_credential_class, mock_get):
+        mock_credential = mock.Mock()
+        mock_credential.get_token = AsyncMock(
+            side_effect=[
+                create_aad_token_for_resource(),
+                create_aad_token_for_resource(),
+            ]
+        )
+
+        mock_cm = mock.AsyncMock()
+        mock_cm.__aenter__.return_value = mock_credential
+        mock_cm.__aexit__.return_value = AsyncMock()
+        mock_client_secret_credential_class.return_value = mock_cm
+
         mock_get.return_value.__aenter__.return_value.json = AsyncMock(return_value=GET_RUN_RESPONSE)
 
         async with self.hook:
@@ -2004,12 +2019,11 @@ async def test_get_run_state(self, mock_azure_identity_get_token, mock_azure_ide
 
         assert run_state == RunState(LIFE_CYCLE_STATE, RESULT_STATE, STATE_MESSAGE)
 
-        azure_identity_args = mock_azure_identity.call_args.kwargs
-        assert azure_identity_args["tenant_id"] == self.tenant_id
-        assert azure_identity_args["client_id"] == self.client_id
+        credential_call_kwargs = mock_client_secret_credential_class.call_args.kwargs
+        assert credential_call_kwargs["tenant_id"] == self.tenant_id
+        assert credential_call_kwargs["client_id"] == self.client_id
 
-        get_token_args = mock_azure_identity_get_token.call_args_list
-        assert get_token_args == [
+        assert mock_credential.get_token.await_args_list == [
             mock.call(f"{AZURE_MANAGEMENT_ENDPOINT}/.default"),
             mock.call(f"{DEFAULT_DATABRICKS_SCOPE}/.default"),
         ]

From 266c1ce2e8acf37abddc33a8642ed8d6814a507f Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Fri, 27 Jun 2025 11:29:41 +0100
Subject: [PATCH 225/381] Use BaseSensorOperator from task sdk in providers
 (#52296)

* Use BaseSensorOperator from task sdk in providers

* Use BaseSensorOperator from task sdk in providers

* Use BaseSensorOperator from task sdk in providers

* Fix tests

* Fix tests
---
 .../unit/always/test_project_structure.py     | 17 +++++++++
 .../providers/airbyte/sensors/airbyte.py      |  7 +++-
 .../providers/airbyte/version_compat.py       | 35 +++++++++++++++++++
 .../alibaba/cloud/sensors/analyticdb_spark.py |  7 +++-
 .../alibaba/cloud/sensors/oss_key.py          |  7 +++-
 .../providers/amazon/aws/sensors/base_aws.py  |  8 ++++-
 .../aws/sensors/sagemaker_unified_studio.py   |  7 +++-
 .../apache/cassandra/sensors/record.py        |  7 +++-
 .../apache/cassandra/sensors/table.py         |  7 +++-
 .../apache/cassandra/version_compat.py        | 35 +++++++++++++++++++
 .../apache/flink/sensors/flink_kubernetes.py  |  7 +++-
 .../providers/apache/flink/version_compat.py  | 35 +++++++++++++++++++
 .../providers/apache/hdfs/sensors/web_hdfs.py |  7 +++-
 .../providers/apache/hdfs/version_compat.py   | 35 +++++++++++++++++++
 .../apache/hive/sensors/hive_partition.py     |  7 +++-
 .../hive/sensors/named_hive_partition.py      |  7 +++-
 .../providers/apache/hive/version_compat.py   | 35 +++++++++++++++++++
 .../providers/apache/livy/sensors/livy.py     |  7 +++-
 .../providers/apache/livy/version_compat.py   | 35 +++++++++++++++++++
 .../providers/arangodb/sensors/arangodb.py    |  7 +++-
 .../providers/arangodb/version_compat.py      | 35 +++++++++++++++++++
 .../providers/atlassian/jira/sensors/jira.py  |  7 +++-
 .../atlassian/jira/version_compat.py          | 35 +++++++++++++++++++
 .../providers/celery/sensors/celery_queue.py  |  7 +++-
 .../kubernetes/sensors/spark_kubernetes.py    |  7 +++-
 .../providers/common/sql/sensors/sql.py       |  7 +++-
 .../providers/common/sql/sensors/sql.pyi      |  8 ++++-
 .../providers/common/sql/version_compat.py    | 35 +++++++++++++++++++
 .../sensors/databricks_partition.py           |  7 +++-
 .../databricks/sensors/databricks_sql.py      |  7 +++-
 .../providers/datadog/sensors/datadog.py      |  7 +++-
 .../providers/datadog/version_compat.py       | 35 +++++++++++++++++++
 .../providers/dbt/cloud/sensors/dbt.py        |  2 +-
 .../src/airflow/providers/ftp/sensors/ftp.py  |  7 +++-
 .../airflow/providers/ftp/version_compat.py   | 35 +++++++++++++++++++
 .../providers/github/sensors/github.py        |  7 +++-
 .../providers/github/version_compat.py        | 35 +++++++++++++++++++
 .../google/cloud/sensors/bigquery.py          |  7 +++-
 .../google/cloud/sensors/bigquery_dts.py      |  7 +++-
 .../google/cloud/sensors/bigtable.py          |  7 +++-
 .../google/cloud/sensors/cloud_composer.py    |  7 +++-
 .../sensors/cloud_storage_transfer_service.py |  7 +++-
 .../google/cloud/sensors/dataflow.py          |  7 +++-
 .../google/cloud/sensors/dataform.py          |  7 +++-
 .../google/cloud/sensors/datafusion.py        |  7 +++-
 .../google/cloud/sensors/dataplex.py          |  7 +++-
 .../google/cloud/sensors/dataprep.py          |  7 +++-
 .../google/cloud/sensors/dataproc.py          |  7 +++-
 .../cloud/sensors/dataproc_metastore.py       |  7 +++-
 .../providers/google/cloud/sensors/gcs.py     |  8 ++++-
 .../providers/google/cloud/sensors/looker.py  |  7 +++-
 .../providers/google/cloud/sensors/pubsub.py  |  7 +++-
 .../providers/google/cloud/sensors/tasks.py   |  7 +++-
 .../cloud/sensors/vertex_ai/feature_store.py  |  7 +++-
 .../google/cloud/sensors/workflows.py         |  7 +++-
 .../sensors/campaign_manager.py               |  7 +++-
 .../sensors/display_video.py                  |  7 +++-
 .../providers/google/suite/sensors/drive.py   |  7 +++-
 .../airflow/providers/http/sensors/http.py    | 13 +++++--
 .../airflow/providers/http/version_compat.py  | 35 +++++++++++++++++++
 .../providers/imap/sensors/imap_attachment.py |  7 +++-
 .../airflow/providers/imap/version_compat.py  | 35 +++++++++++++++++++
 .../providers/jenkins/sensors/jenkins.py      |  7 +++-
 .../providers/jenkins/version_compat.py       | 35 +++++++++++++++++++
 .../microsoft/azure/sensors/cosmos.py         |  7 +++-
 .../microsoft/azure/sensors/msgraph.py        |  7 +++-
 .../providers/microsoft/azure/sensors/wasb.py |  7 +++-
 .../airflow/providers/mongo/sensors/mongo.py  |  7 +++-
 .../airflow/providers/mongo/version_compat.py | 35 +++++++++++++++++++
 .../providers/openlineage/utils/utils.py      |  6 +++-
 .../providers/redis/sensors/redis_key.py      |  7 +++-
 .../providers/redis/sensors/redis_pub_sub.py  |  7 +++-
 .../airflow/providers/sftp/sensors/sftp.py    |  7 +++-
 .../providers/tableau/sensors/tableau.py      |  7 +++-
 .../providers/tableau/version_compat.py       | 35 +++++++++++++++++++
 75 files changed, 956 insertions(+), 58 deletions(-)
 create mode 100644 providers/airbyte/src/airflow/providers/airbyte/version_compat.py
 create mode 100644 providers/apache/cassandra/src/airflow/providers/apache/cassandra/version_compat.py
 create mode 100644 providers/apache/flink/src/airflow/providers/apache/flink/version_compat.py
 create mode 100644 providers/apache/hdfs/src/airflow/providers/apache/hdfs/version_compat.py
 create mode 100644 providers/apache/hive/src/airflow/providers/apache/hive/version_compat.py
 create mode 100644 providers/apache/livy/src/airflow/providers/apache/livy/version_compat.py
 create mode 100644 providers/arangodb/src/airflow/providers/arangodb/version_compat.py
 create mode 100644 providers/atlassian/jira/src/airflow/providers/atlassian/jira/version_compat.py
 create mode 100644 providers/common/sql/src/airflow/providers/common/sql/version_compat.py
 create mode 100644 providers/datadog/src/airflow/providers/datadog/version_compat.py
 create mode 100644 providers/ftp/src/airflow/providers/ftp/version_compat.py
 create mode 100644 providers/github/src/airflow/providers/github/version_compat.py
 create mode 100644 providers/http/src/airflow/providers/http/version_compat.py
 create mode 100644 providers/imap/src/airflow/providers/imap/version_compat.py
 create mode 100644 providers/jenkins/src/airflow/providers/jenkins/version_compat.py
 create mode 100644 providers/mongo/src/airflow/providers/mongo/version_compat.py
 create mode 100644 providers/tableau/src/airflow/providers/tableau/version_compat.py

diff --git a/airflow-core/tests/unit/always/test_project_structure.py b/airflow-core/tests/unit/always/test_project_structure.py
index 4809fa799f268..d26565456a9da 100644
--- a/airflow-core/tests/unit/always/test_project_structure.py
+++ b/airflow-core/tests/unit/always/test_project_structure.py
@@ -61,6 +61,7 @@ def test_providers_modules_should_have_tests(self):
         # We should make sure that one goes to 0
         # TODO(potiuk) - check if that test actually tests something
         OVERLOOKED_TESTS = [
+            "providers/airbyte/tests/unit/airbyte/test_version_compat.py",
             "providers/alibaba/tests/unit/alibaba/test_version_compat.py",
             "providers/amazon/tests/unit/amazon/aws/auth_manager/datamodels/test_login.py",
             "providers/amazon/tests/unit/amazon/aws/auth_manager/security_manager/test_aws_security_manager_override.py",
@@ -84,11 +85,18 @@ def test_providers_modules_should_have_tests(self):
             "providers/amazon/tests/unit/amazon/aws/utils/test_sagemaker.py",
             "providers/amazon/tests/unit/amazon/aws/waiters/test_base_waiter.py",
             "providers/amazon/tests/unit/amazon/test_version_compat.py",
+            "providers/apache/cassandra/tests/unit/apache/cassandra/test_version_compat.py",
+            "providers/apache/flink/tests/unit/apache/flink/test_version_compat.py",
+            "providers/apache/hdfs/tests/unit/apache/hdfs/test_version_compat.py",
             "providers/apache/hdfs/tests/unit/apache/hdfs/hooks/test_hdfs.py",
             "providers/apache/hdfs/tests/unit/apache/hdfs/log/test_hdfs_task_handler.py",
             "providers/apache/hdfs/tests/unit/apache/hdfs/sensors/test_hdfs.py",
+            "providers/apache/hive/tests/unit/apache/hive/test_version_compat.py",
             "providers/apache/hive/tests/unit/apache/hive/plugins/test_hive.py",
+            "providers/apache/livy/tests/unit/apache/livy/test_version_compat.py",
             "providers/apache/spark/tests/unit/apache/spark/test_version_compat.py",
+            "providers/arangodb/tests/unit/arangodb/test_version_compat.py",
+            "providers/atlassian/jira/tests/unit/atlassian/jira/test_version_compat.py",
             "providers/celery/tests/unit/celery/executors/test_celery_executor_utils.py",
             "providers/celery/tests/unit/celery/executors/test_default_celery.py",
             "providers/celery/tests/unit/celery/test_version_compat.py",
@@ -107,6 +115,7 @@ def test_providers_modules_should_have_tests(self):
             "providers/cncf/kubernetes/tests/unit/cncf/kubernetes/utils/test_delete_from.py",
             "providers/cncf/kubernetes/tests/unit/cncf/kubernetes/utils/test_k8s_hashlib_wrapper.py",
             "providers/cncf/kubernetes/tests/unit/cncf/kubernetes/utils/test_xcom_sidecar.py",
+            "providers/common/sql/tests/unit/common/sql/test_version_compat.py",
             "providers/common/compat/tests/unit/common/compat/lineage/test_entities.py",
             "providers/common/compat/tests/unit/common/compat/standard/test_operators.py",
             "providers/common/compat/tests/unit/common/compat/standard/test_triggers.py",
@@ -115,6 +124,7 @@ def test_providers_modules_should_have_tests(self):
             "providers/common/io/tests/unit/common/io/test_version_compat.py",
             "providers/common/messaging/tests/unit/common/messaging/providers/test_base_provider.py",
             "providers/common/messaging/tests/unit/common/messaging/providers/test_sqs.py",
+            "providers/datadog/tests/unit/datadog/test_version_compat.py",
             "providers/databricks/tests/unit/databricks/test_version_compat.py",
             "providers/dbt/cloud/tests/unit/dbt/cloud/test_version_compat.py",
             "providers/docker/tests/unit/docker/test_version_compat.py",
@@ -151,6 +161,8 @@ def test_providers_modules_should_have_tests(self):
             "providers/fab/tests/unit/fab/www/test_session.py",
             "providers/fab/tests/unit/fab/www/test_utils.py",
             "providers/fab/tests/unit/fab/www/test_views.py",
+            "providers/ftp/tests/unit/ftp/test_version_compat.py",
+            "providers/github/tests/unit/github/test_version_compat.py",
             "providers/google/tests/unit/google/cloud/fs/test_gcs.py",
             "providers/google/tests/unit/google/cloud/links/test_automl.py",
             "providers/google/tests/unit/google/cloud/links/test_base.py",
@@ -200,8 +212,12 @@ def test_providers_modules_should_have_tests(self):
             "providers/google/tests/unit/google/common/hooks/test_operation_helpers.py",
             "providers/google/tests/unit/google/test_go_module_utils.py",
             "providers/google/tests/unit/google/test_version_compat.py",
+            "providers/http/tests/unit/http/test_version_compat.py",
             "providers/http/tests/unit/http/test_exceptions.py",
+            "providers/imap/tests/unit/imap/test_version_compat.py",
+            "providers/jenkins/tests/unit/jenkins/test_version_compat.py",
             "providers/keycloak/tests/unit/keycloak/auth_manager/datamodels/test_token.py",
+            "providers/mongo/tests/unit/mongo/test_version_compat.py",
             "providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_adls.py",
             "providers/microsoft/azure/tests/unit/microsoft/azure/test_version_compat.py",
             "providers/openlineage/tests/unit/openlineage/test_version_compat.py",
@@ -219,6 +235,7 @@ def test_providers_modules_should_have_tests(self):
             "providers/standard/tests/unit/standard/sensors/test_filesystem.py",
             "providers/standard/tests/unit/standard/test_version_compat.py",
             "providers/standard/tests/unit/standard/utils/test_sensor_helper.py",
+            "providers/tableau/tests/unit/tableau/test_version_compat.py",
             "providers/trino/tests/unit/trino/test_version_compat.py",
         ]
         modules_files: list[pathlib.Path] = list(
diff --git a/providers/airbyte/src/airflow/providers/airbyte/sensors/airbyte.py b/providers/airbyte/src/airflow/providers/airbyte/sensors/airbyte.py
index e2d299a32e1a7..be13a31e7de6e 100644
--- a/providers/airbyte/src/airflow/providers/airbyte/sensors/airbyte.py
+++ b/providers/airbyte/src/airflow/providers/airbyte/sensors/airbyte.py
@@ -29,7 +29,12 @@
 from airflow.exceptions import AirflowException
 from airflow.providers.airbyte.hooks.airbyte import AirbyteHook
 from airflow.providers.airbyte.triggers.airbyte import AirbyteSyncTrigger
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.airbyte.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/airbyte/src/airflow/providers/airbyte/version_compat.py b/providers/airbyte/src/airflow/providers/airbyte/version_compat.py
new file mode 100644
index 0000000000000..48d122b669696
--- /dev/null
+++ b/providers/airbyte/src/airflow/providers/airbyte/version_compat.py
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
diff --git a/providers/alibaba/src/airflow/providers/alibaba/cloud/sensors/analyticdb_spark.py b/providers/alibaba/src/airflow/providers/alibaba/cloud/sensors/analyticdb_spark.py
index 705c1fddab7f7..0492a1f9f1eb8 100644
--- a/providers/alibaba/src/airflow/providers/alibaba/cloud/sensors/analyticdb_spark.py
+++ b/providers/alibaba/src/airflow/providers/alibaba/cloud/sensors/analyticdb_spark.py
@@ -22,7 +22,12 @@
 from typing import TYPE_CHECKING, Any
 
 from airflow.providers.alibaba.cloud.hooks.analyticdb_spark import AnalyticDBSparkHook, AppState
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.alibaba.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/alibaba/src/airflow/providers/alibaba/cloud/sensors/oss_key.py b/providers/alibaba/src/airflow/providers/alibaba/cloud/sensors/oss_key.py
index cf09006252bd4..35fc1ab472213 100644
--- a/providers/alibaba/src/airflow/providers/alibaba/cloud/sensors/oss_key.py
+++ b/providers/alibaba/src/airflow/providers/alibaba/cloud/sensors/oss_key.py
@@ -26,7 +26,12 @@
 
 from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning
 from airflow.providers.alibaba.cloud.hooks.oss import OSSHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.alibaba.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/sensors/base_aws.py b/providers/amazon/src/airflow/providers/amazon/aws/sensors/base_aws.py
index 5c36a74cade82..7c3fad685b1f9 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/sensors/base_aws.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/sensors/base_aws.py
@@ -25,7 +25,13 @@
     AwsHookType,
     aws_template_fields,
 )
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+
 from airflow.utils.types import NOTSET, ArgNotSet
 
 
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/sensors/sagemaker_unified_studio.py b/providers/amazon/src/airflow/providers/amazon/aws/sensors/sagemaker_unified_studio.py
index 6c1815d2e166e..9cec1215b009a 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/sensors/sagemaker_unified_studio.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/sensors/sagemaker_unified_studio.py
@@ -25,7 +25,12 @@
 from airflow.providers.amazon.aws.hooks.sagemaker_unified_studio import (
     SageMakerNotebookHook,
 )
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/apache/cassandra/src/airflow/providers/apache/cassandra/sensors/record.py b/providers/apache/cassandra/src/airflow/providers/apache/cassandra/sensors/record.py
index e971179765142..1c3a55b694991 100644
--- a/providers/apache/cassandra/src/airflow/providers/apache/cassandra/sensors/record.py
+++ b/providers/apache/cassandra/src/airflow/providers/apache/cassandra/sensors/record.py
@@ -21,7 +21,12 @@
 from typing import TYPE_CHECKING, Any
 
 from airflow.providers.apache.cassandra.hooks.cassandra import CassandraHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.apache.cassandra.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/apache/cassandra/src/airflow/providers/apache/cassandra/sensors/table.py b/providers/apache/cassandra/src/airflow/providers/apache/cassandra/sensors/table.py
index 5f816de907ecb..18297f0bef482 100644
--- a/providers/apache/cassandra/src/airflow/providers/apache/cassandra/sensors/table.py
+++ b/providers/apache/cassandra/src/airflow/providers/apache/cassandra/sensors/table.py
@@ -21,7 +21,12 @@
 from typing import TYPE_CHECKING, Any
 
 from airflow.providers.apache.cassandra.hooks.cassandra import CassandraHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.apache.cassandra.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/apache/cassandra/src/airflow/providers/apache/cassandra/version_compat.py b/providers/apache/cassandra/src/airflow/providers/apache/cassandra/version_compat.py
new file mode 100644
index 0000000000000..48d122b669696
--- /dev/null
+++ b/providers/apache/cassandra/src/airflow/providers/apache/cassandra/version_compat.py
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
diff --git a/providers/apache/flink/src/airflow/providers/apache/flink/sensors/flink_kubernetes.py b/providers/apache/flink/src/airflow/providers/apache/flink/sensors/flink_kubernetes.py
index e485e14a8307b..4a83956989f7c 100644
--- a/providers/apache/flink/src/airflow/providers/apache/flink/sensors/flink_kubernetes.py
+++ b/providers/apache/flink/src/airflow/providers/apache/flink/sensors/flink_kubernetes.py
@@ -23,8 +23,13 @@
 from kubernetes import client
 
 from airflow.exceptions import AirflowException
+from airflow.providers.apache.flink.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.providers.cncf.kubernetes.hooks.kubernetes import KubernetesHook
-from airflow.sensors.base import BaseSensorOperator
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/apache/flink/src/airflow/providers/apache/flink/version_compat.py b/providers/apache/flink/src/airflow/providers/apache/flink/version_compat.py
new file mode 100644
index 0000000000000..48d122b669696
--- /dev/null
+++ b/providers/apache/flink/src/airflow/providers/apache/flink/version_compat.py
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
diff --git a/providers/apache/hdfs/src/airflow/providers/apache/hdfs/sensors/web_hdfs.py b/providers/apache/hdfs/src/airflow/providers/apache/hdfs/sensors/web_hdfs.py
index 8b951bf3ec835..cbd60378a5cfe 100644
--- a/providers/apache/hdfs/src/airflow/providers/apache/hdfs/sensors/web_hdfs.py
+++ b/providers/apache/hdfs/src/airflow/providers/apache/hdfs/sensors/web_hdfs.py
@@ -20,7 +20,12 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING, Any
 
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.apache.hdfs.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from hdfs import InsecureClient
diff --git a/providers/apache/hdfs/src/airflow/providers/apache/hdfs/version_compat.py b/providers/apache/hdfs/src/airflow/providers/apache/hdfs/version_compat.py
new file mode 100644
index 0000000000000..48d122b669696
--- /dev/null
+++ b/providers/apache/hdfs/src/airflow/providers/apache/hdfs/version_compat.py
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
diff --git a/providers/apache/hive/src/airflow/providers/apache/hive/sensors/hive_partition.py b/providers/apache/hive/src/airflow/providers/apache/hive/sensors/hive_partition.py
index 08d52b6e02334..1c3576e0c8dbf 100644
--- a/providers/apache/hive/src/airflow/providers/apache/hive/sensors/hive_partition.py
+++ b/providers/apache/hive/src/airflow/providers/apache/hive/sensors/hive_partition.py
@@ -21,7 +21,12 @@
 from typing import TYPE_CHECKING, Any
 
 from airflow.providers.apache.hive.hooks.hive import HiveMetastoreHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.apache.hive.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/apache/hive/src/airflow/providers/apache/hive/sensors/named_hive_partition.py b/providers/apache/hive/src/airflow/providers/apache/hive/sensors/named_hive_partition.py
index cce2921d2e5c2..1640167beef73 100644
--- a/providers/apache/hive/src/airflow/providers/apache/hive/sensors/named_hive_partition.py
+++ b/providers/apache/hive/src/airflow/providers/apache/hive/sensors/named_hive_partition.py
@@ -20,7 +20,12 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING, Any
 
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.apache.hive.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/apache/hive/src/airflow/providers/apache/hive/version_compat.py b/providers/apache/hive/src/airflow/providers/apache/hive/version_compat.py
new file mode 100644
index 0000000000000..48d122b669696
--- /dev/null
+++ b/providers/apache/hive/src/airflow/providers/apache/hive/version_compat.py
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
diff --git a/providers/apache/livy/src/airflow/providers/apache/livy/sensors/livy.py b/providers/apache/livy/src/airflow/providers/apache/livy/sensors/livy.py
index d0b011e251827..cf2f4aa15f017 100644
--- a/providers/apache/livy/src/airflow/providers/apache/livy/sensors/livy.py
+++ b/providers/apache/livy/src/airflow/providers/apache/livy/sensors/livy.py
@@ -22,7 +22,12 @@
 from typing import TYPE_CHECKING, Any
 
 from airflow.providers.apache.livy.hooks.livy import LivyHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.apache.livy.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/apache/livy/src/airflow/providers/apache/livy/version_compat.py b/providers/apache/livy/src/airflow/providers/apache/livy/version_compat.py
new file mode 100644
index 0000000000000..48d122b669696
--- /dev/null
+++ b/providers/apache/livy/src/airflow/providers/apache/livy/version_compat.py
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
diff --git a/providers/arangodb/src/airflow/providers/arangodb/sensors/arangodb.py b/providers/arangodb/src/airflow/providers/arangodb/sensors/arangodb.py
index f5be45650e2fa..8ad897b69e42e 100644
--- a/providers/arangodb/src/airflow/providers/arangodb/sensors/arangodb.py
+++ b/providers/arangodb/src/airflow/providers/arangodb/sensors/arangodb.py
@@ -21,7 +21,12 @@
 from typing import TYPE_CHECKING
 
 from airflow.providers.arangodb.hooks.arangodb import ArangoDBHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.arangodb.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/arangodb/src/airflow/providers/arangodb/version_compat.py b/providers/arangodb/src/airflow/providers/arangodb/version_compat.py
new file mode 100644
index 0000000000000..48d122b669696
--- /dev/null
+++ b/providers/arangodb/src/airflow/providers/arangodb/version_compat.py
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
diff --git a/providers/atlassian/jira/src/airflow/providers/atlassian/jira/sensors/jira.py b/providers/atlassian/jira/src/airflow/providers/atlassian/jira/sensors/jira.py
index 62e567b0c7d96..ee8bfaa301407 100644
--- a/providers/atlassian/jira/src/airflow/providers/atlassian/jira/sensors/jira.py
+++ b/providers/atlassian/jira/src/airflow/providers/atlassian/jira/sensors/jira.py
@@ -21,7 +21,12 @@
 from typing import TYPE_CHECKING, Any, Callable
 
 from airflow.providers.atlassian.jira.hooks.jira import JiraHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.atlassian.jira.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/atlassian/jira/src/airflow/providers/atlassian/jira/version_compat.py b/providers/atlassian/jira/src/airflow/providers/atlassian/jira/version_compat.py
new file mode 100644
index 0000000000000..48d122b669696
--- /dev/null
+++ b/providers/atlassian/jira/src/airflow/providers/atlassian/jira/version_compat.py
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
diff --git a/providers/celery/src/airflow/providers/celery/sensors/celery_queue.py b/providers/celery/src/airflow/providers/celery/sensors/celery_queue.py
index c8c3b3d131162..990f8ca9008c2 100644
--- a/providers/celery/src/airflow/providers/celery/sensors/celery_queue.py
+++ b/providers/celery/src/airflow/providers/celery/sensors/celery_queue.py
@@ -21,7 +21,12 @@
 
 from celery.app import control
 
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.celery.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/sensors/spark_kubernetes.py b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/sensors/spark_kubernetes.py
index 5e3ff6964ddca..50e713e134a53 100644
--- a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/sensors/spark_kubernetes.py
+++ b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/sensors/spark_kubernetes.py
@@ -25,7 +25,12 @@
 
 from airflow.exceptions import AirflowException
 from airflow.providers.cncf.kubernetes.hooks.kubernetes import KubernetesHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.cncf.kubernetes.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/common/sql/src/airflow/providers/common/sql/sensors/sql.py b/providers/common/sql/src/airflow/providers/common/sql/sensors/sql.py
index 9d4ff283e15fa..2c7cb4543694b 100644
--- a/providers/common/sql/src/airflow/providers/common/sql/sensors/sql.py
+++ b/providers/common/sql/src/airflow/providers/common/sql/sensors/sql.py
@@ -23,7 +23,12 @@
 from airflow.exceptions import AirflowException
 from airflow.hooks.base import BaseHook
 from airflow.providers.common.sql.hooks.sql import DbApiHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.common.sql.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/common/sql/src/airflow/providers/common/sql/sensors/sql.pyi b/providers/common/sql/src/airflow/providers/common/sql/sensors/sql.pyi
index 55378b55c408e..e2d69b6c0b952 100644
--- a/providers/common/sql/src/airflow/providers/common/sql/sensors/sql.pyi
+++ b/providers/common/sql/src/airflow/providers/common/sql/sensors/sql.pyi
@@ -37,7 +37,13 @@ from typing import Any, Callable
 
 from _typeshed import Incomplete as Incomplete
 
-from airflow.sensors.base import BaseSensorOperator as BaseSensorOperator
+from airflow.providers.common.sql.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+
 from airflow.utils.context import Context as Context
 
 class SqlSensor(BaseSensorOperator):
diff --git a/providers/common/sql/src/airflow/providers/common/sql/version_compat.py b/providers/common/sql/src/airflow/providers/common/sql/version_compat.py
new file mode 100644
index 0000000000000..48d122b669696
--- /dev/null
+++ b/providers/common/sql/src/airflow/providers/common/sql/version_compat.py
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
diff --git a/providers/databricks/src/airflow/providers/databricks/sensors/databricks_partition.py b/providers/databricks/src/airflow/providers/databricks/sensors/databricks_partition.py
index bee664753ce39..6aad4f419bcad 100644
--- a/providers/databricks/src/airflow/providers/databricks/sensors/databricks_partition.py
+++ b/providers/databricks/src/airflow/providers/databricks/sensors/databricks_partition.py
@@ -30,7 +30,12 @@
 from airflow.exceptions import AirflowException
 from airflow.providers.common.sql.hooks.handlers import fetch_all_handler
 from airflow.providers.databricks.hooks.databricks_sql import DatabricksSqlHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.databricks.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/databricks/src/airflow/providers/databricks/sensors/databricks_sql.py b/providers/databricks/src/airflow/providers/databricks/sensors/databricks_sql.py
index b941ae22c93c9..d0f060c8487a8 100644
--- a/providers/databricks/src/airflow/providers/databricks/sensors/databricks_sql.py
+++ b/providers/databricks/src/airflow/providers/databricks/sensors/databricks_sql.py
@@ -27,7 +27,12 @@
 from airflow.exceptions import AirflowException
 from airflow.providers.common.sql.hooks.handlers import fetch_all_handler
 from airflow.providers.databricks.hooks.databricks_sql import DatabricksSqlHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.databricks.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/datadog/src/airflow/providers/datadog/sensors/datadog.py b/providers/datadog/src/airflow/providers/datadog/sensors/datadog.py
index bf74e5fd86481..65768936118bc 100644
--- a/providers/datadog/src/airflow/providers/datadog/sensors/datadog.py
+++ b/providers/datadog/src/airflow/providers/datadog/sensors/datadog.py
@@ -23,7 +23,12 @@
 
 from airflow.exceptions import AirflowException
 from airflow.providers.datadog.hooks.datadog import DatadogHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.datadog.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/datadog/src/airflow/providers/datadog/version_compat.py b/providers/datadog/src/airflow/providers/datadog/version_compat.py
new file mode 100644
index 0000000000000..48d122b669696
--- /dev/null
+++ b/providers/datadog/src/airflow/providers/datadog/version_compat.py
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
diff --git a/providers/dbt/cloud/src/airflow/providers/dbt/cloud/sensors/dbt.py b/providers/dbt/cloud/src/airflow/providers/dbt/cloud/sensors/dbt.py
index 0e6ebeb6292d9..374e2c144cba6 100644
--- a/providers/dbt/cloud/src/airflow/providers/dbt/cloud/sensors/dbt.py
+++ b/providers/dbt/cloud/src/airflow/providers/dbt/cloud/sensors/dbt.py
@@ -28,7 +28,7 @@
 from airflow.providers.dbt.cloud.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk.bases.sensor import BaseSensorOperator
+    from airflow.sdk import BaseSensorOperator
 else:
     from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
diff --git a/providers/ftp/src/airflow/providers/ftp/sensors/ftp.py b/providers/ftp/src/airflow/providers/ftp/sensors/ftp.py
index 7b54e925f923a..c2b69fadaa36b 100644
--- a/providers/ftp/src/airflow/providers/ftp/sensors/ftp.py
+++ b/providers/ftp/src/airflow/providers/ftp/sensors/ftp.py
@@ -23,7 +23,12 @@
 from typing import TYPE_CHECKING
 
 from airflow.providers.ftp.hooks.ftp import FTPHook, FTPSHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.ftp.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/ftp/src/airflow/providers/ftp/version_compat.py b/providers/ftp/src/airflow/providers/ftp/version_compat.py
new file mode 100644
index 0000000000000..48d122b669696
--- /dev/null
+++ b/providers/ftp/src/airflow/providers/ftp/version_compat.py
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
diff --git a/providers/github/src/airflow/providers/github/sensors/github.py b/providers/github/src/airflow/providers/github/sensors/github.py
index cacaef9e32fb8..8d7732823095c 100644
--- a/providers/github/src/airflow/providers/github/sensors/github.py
+++ b/providers/github/src/airflow/providers/github/sensors/github.py
@@ -23,7 +23,12 @@
 
 from airflow.exceptions import AirflowException
 from airflow.providers.github.hooks.github import GithubHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.github.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/github/src/airflow/providers/github/version_compat.py b/providers/github/src/airflow/providers/github/version_compat.py
new file mode 100644
index 0000000000000..48d122b669696
--- /dev/null
+++ b/providers/github/src/airflow/providers/github/version_compat.py
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/bigquery.py b/providers/google/src/airflow/providers/google/cloud/sensors/bigquery.py
index a4cbce91c6f1e..2b82d5cfff122 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/bigquery.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/bigquery.py
@@ -31,7 +31,12 @@
     BigQueryTableExistenceTrigger,
     BigQueryTablePartitionExistenceTrigger,
 )
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/bigquery_dts.py b/providers/google/src/airflow/providers/google/cloud/sensors/bigquery_dts.py
index 96215849cdd1e..c89763f9b6c49 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/bigquery_dts.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/bigquery_dts.py
@@ -28,7 +28,12 @@
 from airflow.exceptions import AirflowException
 from airflow.providers.google.cloud.hooks.bigquery_dts import BiqQueryDataTransferServiceHook
 from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from google.api_core.retry import Retry
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/bigtable.py b/providers/google/src/airflow/providers/google/cloud/sensors/bigtable.py
index 5196b77b34f89..fb49ca3513858 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/bigtable.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/bigtable.py
@@ -30,7 +30,12 @@
 from airflow.providers.google.cloud.links.bigtable import BigtableTablesLink
 from airflow.providers.google.cloud.operators.bigtable import BigtableValidationMixin
 from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/cloud_composer.py b/providers/google/src/airflow/providers/google/cloud/sensors/cloud_composer.py
index ae5c5d60808a4..05dcdd4456505 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/cloud_composer.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/cloud_composer.py
@@ -33,7 +33,12 @@
 from airflow.providers.google.cloud.hooks.cloud_composer import CloudComposerHook
 from airflow.providers.google.cloud.triggers.cloud_composer import CloudComposerDAGRunTrigger
 from airflow.providers.google.common.consts import GOOGLE_DEFAULT_DEFERRABLE_METHOD_NAME
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 from airflow.utils.state import TaskInstanceState
 
 if TYPE_CHECKING:
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/cloud_storage_transfer_service.py b/providers/google/src/airflow/providers/google/cloud/sensors/cloud_storage_transfer_service.py
index a5153df4bdc60..05a97423e7860 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/cloud_storage_transfer_service.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/cloud_storage_transfer_service.py
@@ -35,7 +35,12 @@
     CloudStorageTransferServiceCheckJobStatusTrigger,
 )
 from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/dataflow.py b/providers/google/src/airflow/providers/google/cloud/sensors/dataflow.py
index e9721096a5e64..a82401ef49d48 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/dataflow.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/dataflow.py
@@ -37,7 +37,12 @@
     DataflowJobStatusTrigger,
 )
 from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/dataform.py b/providers/google/src/airflow/providers/google/cloud/sensors/dataform.py
index 6e300333ba1c1..bdaa4a54573a3 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/dataform.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/dataform.py
@@ -24,7 +24,12 @@
 
 from airflow.exceptions import AirflowException
 from airflow.providers.google.cloud.hooks.dataform import DataformHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/datafusion.py b/providers/google/src/airflow/providers/google/cloud/sensors/datafusion.py
index 29335949b15c1..ea52f9af750c1 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/datafusion.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/datafusion.py
@@ -25,7 +25,12 @@
 from airflow.exceptions import AirflowException, AirflowNotFoundException
 from airflow.providers.google.cloud.hooks.datafusion import DataFusionHook
 from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/dataplex.py b/providers/google/src/airflow/providers/google/cloud/sensors/dataplex.py
index b1ff0fdccf83b..5d19eb3f0b03f 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/dataplex.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/dataplex.py
@@ -37,7 +37,12 @@
     AirflowDataQualityScanResultTimeoutException,
     DataplexHook,
 )
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 
 class TaskState:
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/dataprep.py b/providers/google/src/airflow/providers/google/cloud/sensors/dataprep.py
index 333dc03c14ecf..589e481dbd0b7 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/dataprep.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/dataprep.py
@@ -23,7 +23,12 @@
 from typing import TYPE_CHECKING
 
 from airflow.providers.google.cloud.hooks.dataprep import GoogleDataprepHook, JobGroupStatuses
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/dataproc.py b/providers/google/src/airflow/providers/google/cloud/sensors/dataproc.py
index 3138921aae4d4..b5815333a688e 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/dataproc.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/dataproc.py
@@ -29,7 +29,12 @@
 from airflow.exceptions import AirflowException
 from airflow.providers.google.cloud.hooks.dataproc import DataprocHook
 from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/dataproc_metastore.py b/providers/google/src/airflow/providers/google/cloud/sensors/dataproc_metastore.py
index d60ff39d663b8..3eba97f66d9e3 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/dataproc_metastore.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/dataproc_metastore.py
@@ -23,7 +23,12 @@
 from airflow.exceptions import AirflowException
 from airflow.providers.google.cloud.hooks.dataproc_metastore import DataprocMetastoreHook
 from airflow.providers.google.cloud.hooks.gcs import parse_json_from_gcs
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from google.api_core.operation import Operation
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/gcs.py b/providers/google/src/airflow/providers/google/cloud/sensors/gcs.py
index a2f43149bf8e5..92f3522db1fca 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/gcs.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/gcs.py
@@ -36,7 +36,13 @@
     GCSPrefixBlobTrigger,
     GCSUploadSessionTrigger,
 )
-from airflow.sensors.base import BaseSensorOperator, poke_mode_only
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+    from airflow.sdk.bases.sensor import poke_mode_only
+else:
+    from airflow.sensors.base import BaseSensorOperator, poke_mode_only  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from google.api_core.retry import Retry
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/looker.py b/providers/google/src/airflow/providers/google/cloud/sensors/looker.py
index 95b2eb36583db..372e5ae954aec 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/looker.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/looker.py
@@ -23,7 +23,12 @@
 
 from airflow.exceptions import AirflowException
 from airflow.providers.google.cloud.hooks.looker import JobStatus, LookerHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/pubsub.py b/providers/google/src/airflow/providers/google/cloud/sensors/pubsub.py
index 9b49ad7d7f82c..c52c5ecb0c39e 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/pubsub.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/pubsub.py
@@ -30,7 +30,12 @@
 from airflow.exceptions import AirflowException
 from airflow.providers.google.cloud.hooks.pubsub import PubSubHook
 from airflow.providers.google.cloud.triggers.pubsub import PubsubPullTrigger
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/tasks.py b/providers/google/src/airflow/providers/google/cloud/sensors/tasks.py
index aa87914d066d1..76394fd9f3a76 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/tasks.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/tasks.py
@@ -24,7 +24,12 @@
 
 from airflow.providers.google.cloud.hooks.tasks import CloudTasksHook
 from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/vertex_ai/feature_store.py b/providers/google/src/airflow/providers/google/cloud/sensors/vertex_ai/feature_store.py
index 88503db2e0cb6..1e50af812fa2a 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/vertex_ai/feature_store.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/vertex_ai/feature_store.py
@@ -25,7 +25,12 @@
 
 from airflow.exceptions import AirflowException
 from airflow.providers.google.cloud.hooks.vertex_ai.feature_store import FeatureStoreHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/workflows.py b/providers/google/src/airflow/providers/google/cloud/sensors/workflows.py
index eeca15f0d76fb..c91871c54565c 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/workflows.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/workflows.py
@@ -25,7 +25,12 @@
 from airflow.exceptions import AirflowException
 from airflow.providers.google.cloud.hooks.workflows import WorkflowsHook
 from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from google.api_core.retry import Retry
diff --git a/providers/google/src/airflow/providers/google/marketing_platform/sensors/campaign_manager.py b/providers/google/src/airflow/providers/google/marketing_platform/sensors/campaign_manager.py
index 4b0b7eddb8de9..f7e1f2c08eccd 100644
--- a/providers/google/src/airflow/providers/google/marketing_platform/sensors/campaign_manager.py
+++ b/providers/google/src/airflow/providers/google/marketing_platform/sensors/campaign_manager.py
@@ -23,7 +23,12 @@
 from typing import TYPE_CHECKING
 
 from airflow.providers.google.marketing_platform.hooks.campaign_manager import GoogleCampaignManagerHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/marketing_platform/sensors/display_video.py b/providers/google/src/airflow/providers/google/marketing_platform/sensors/display_video.py
index 01e57813adcdb..f64277d6c247f 100644
--- a/providers/google/src/airflow/providers/google/marketing_platform/sensors/display_video.py
+++ b/providers/google/src/airflow/providers/google/marketing_platform/sensors/display_video.py
@@ -23,7 +23,12 @@
 
 from airflow.exceptions import AirflowException
 from airflow.providers.google.marketing_platform.hooks.display_video import GoogleDisplayVideo360Hook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/suite/sensors/drive.py b/providers/google/src/airflow/providers/google/suite/sensors/drive.py
index edc4609e5cba5..df1de2c75415e 100644
--- a/providers/google/src/airflow/providers/google/suite/sensors/drive.py
+++ b/providers/google/src/airflow/providers/google/suite/sensors/drive.py
@@ -23,7 +23,12 @@
 from typing import TYPE_CHECKING
 
 from airflow.providers.google.suite.hooks.drive import GoogleDriveHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/http/src/airflow/providers/http/sensors/http.py b/providers/http/src/airflow/providers/http/sensors/http.py
index d4fb153f6ffa4..55d306d9be213 100644
--- a/providers/http/src/airflow/providers/http/sensors/http.py
+++ b/providers/http/src/airflow/providers/http/sensors/http.py
@@ -25,12 +25,21 @@
 from airflow.exceptions import AirflowException
 from airflow.providers.http.hooks.http import HttpHook
 from airflow.providers.http.triggers.http import HttpSensorTrigger
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.http.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     try:
         from airflow.sdk.definitions.context import Context
-        from airflow.sensors.base import PokeReturnValue
+
+        if AIRFLOW_V_3_0_PLUS:
+            from airflow.sdk import PokeReturnValue
+        else:
+            from airflow.sensors.base import PokeReturnValue  # type: ignore[no-redef]
     except ImportError:
         # TODO: Remove once provider drops support for Airflow 2
         from airflow.utils.context import Context
diff --git a/providers/http/src/airflow/providers/http/version_compat.py b/providers/http/src/airflow/providers/http/version_compat.py
new file mode 100644
index 0000000000000..48d122b669696
--- /dev/null
+++ b/providers/http/src/airflow/providers/http/version_compat.py
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
diff --git a/providers/imap/src/airflow/providers/imap/sensors/imap_attachment.py b/providers/imap/src/airflow/providers/imap/sensors/imap_attachment.py
index 6a802878323fa..7f6bbb55d9e81 100644
--- a/providers/imap/src/airflow/providers/imap/sensors/imap_attachment.py
+++ b/providers/imap/src/airflow/providers/imap/sensors/imap_attachment.py
@@ -23,7 +23,12 @@
 from typing import TYPE_CHECKING
 
 from airflow.providers.imap.hooks.imap import ImapHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.imap.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/imap/src/airflow/providers/imap/version_compat.py b/providers/imap/src/airflow/providers/imap/version_compat.py
new file mode 100644
index 0000000000000..48d122b669696
--- /dev/null
+++ b/providers/imap/src/airflow/providers/imap/version_compat.py
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
diff --git a/providers/jenkins/src/airflow/providers/jenkins/sensors/jenkins.py b/providers/jenkins/src/airflow/providers/jenkins/sensors/jenkins.py
index fbf3a62e9b487..ccaef5d3704a2 100644
--- a/providers/jenkins/src/airflow/providers/jenkins/sensors/jenkins.py
+++ b/providers/jenkins/src/airflow/providers/jenkins/sensors/jenkins.py
@@ -22,7 +22,12 @@
 
 from airflow.exceptions import AirflowException
 from airflow.providers.jenkins.hooks.jenkins import JenkinsHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.jenkins.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/jenkins/src/airflow/providers/jenkins/version_compat.py b/providers/jenkins/src/airflow/providers/jenkins/version_compat.py
new file mode 100644
index 0000000000000..48d122b669696
--- /dev/null
+++ b/providers/jenkins/src/airflow/providers/jenkins/version_compat.py
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/cosmos.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/cosmos.py
index c4d9806bc49f6..91e8f4371aef5 100644
--- a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/cosmos.py
+++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/cosmos.py
@@ -21,7 +21,12 @@
 from typing import TYPE_CHECKING
 
 from airflow.providers.microsoft.azure.hooks.cosmos import AzureCosmosDBHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.microsoft.azure.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/msgraph.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/msgraph.py
index dd1cc17f4c637..245bd881e1ea0 100644
--- a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/msgraph.py
+++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/msgraph.py
@@ -25,7 +25,12 @@
 from airflow.providers.microsoft.azure.hooks.msgraph import KiotaRequestAdapterHook
 from airflow.providers.microsoft.azure.operators.msgraph import execute_callable
 from airflow.providers.microsoft.azure.triggers.msgraph import MSGraphTrigger, ResponseSerializer
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.microsoft.azure.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from datetime import timedelta
diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/wasb.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/wasb.py
index ec02c3cef8ba4..7f015e6222f77 100644
--- a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/wasb.py
+++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/wasb.py
@@ -25,7 +25,12 @@
 from airflow.exceptions import AirflowException
 from airflow.providers.microsoft.azure.hooks.wasb import WasbHook
 from airflow.providers.microsoft.azure.triggers.wasb import WasbBlobSensorTrigger, WasbPrefixSensorTrigger
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.microsoft.azure.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/mongo/src/airflow/providers/mongo/sensors/mongo.py b/providers/mongo/src/airflow/providers/mongo/sensors/mongo.py
index d4505157444d1..1d8a8a750ca02 100644
--- a/providers/mongo/src/airflow/providers/mongo/sensors/mongo.py
+++ b/providers/mongo/src/airflow/providers/mongo/sensors/mongo.py
@@ -21,7 +21,12 @@
 from typing import TYPE_CHECKING
 
 from airflow.providers.mongo.hooks.mongo import MongoHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.mongo.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/mongo/src/airflow/providers/mongo/version_compat.py b/providers/mongo/src/airflow/providers/mongo/version_compat.py
new file mode 100644
index 0000000000000..48d122b669696
--- /dev/null
+++ b/providers/mongo/src/airflow/providers/mongo/version_compat.py
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
diff --git a/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py b/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py
index 68260280ebd08..3d810822f6d41 100644
--- a/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py
+++ b/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py
@@ -52,10 +52,14 @@
     is_task_lineage_enabled,
 )
 from airflow.providers.openlineage.version_compat import AIRFLOW_V_3_0_PLUS
-from airflow.sensors.base import BaseSensorOperator
 from airflow.serialization.serialized_objects import SerializedBaseOperator
 from airflow.utils.module_loading import import_string
 
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+
 if not AIRFLOW_V_3_0_PLUS:
     from airflow.utils.session import NEW_SESSION, provide_session
 
diff --git a/providers/redis/src/airflow/providers/redis/sensors/redis_key.py b/providers/redis/src/airflow/providers/redis/sensors/redis_key.py
index c39426658dfce..08f4e5ea0a65f 100644
--- a/providers/redis/src/airflow/providers/redis/sensors/redis_key.py
+++ b/providers/redis/src/airflow/providers/redis/sensors/redis_key.py
@@ -21,7 +21,12 @@
 from typing import TYPE_CHECKING
 
 from airflow.providers.redis.hooks.redis import RedisHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.redis.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/redis/src/airflow/providers/redis/sensors/redis_pub_sub.py b/providers/redis/src/airflow/providers/redis/sensors/redis_pub_sub.py
index 42502f1f92db0..29e01ae6fa908 100644
--- a/providers/redis/src/airflow/providers/redis/sensors/redis_pub_sub.py
+++ b/providers/redis/src/airflow/providers/redis/sensors/redis_pub_sub.py
@@ -22,7 +22,12 @@
 from typing import TYPE_CHECKING
 
 from airflow.providers.redis.hooks.redis import RedisHook
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.redis.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/sftp/src/airflow/providers/sftp/sensors/sftp.py b/providers/sftp/src/airflow/providers/sftp/sensors/sftp.py
index 98a47e22539b2..4d80d9491efdc 100644
--- a/providers/sftp/src/airflow/providers/sftp/sensors/sftp.py
+++ b/providers/sftp/src/airflow/providers/sftp/sensors/sftp.py
@@ -30,9 +30,14 @@
 from airflow.exceptions import AirflowException
 from airflow.providers.sftp.hooks.sftp import SFTPHook
 from airflow.providers.sftp.triggers.sftp import SFTPTrigger
-from airflow.sensors.base import BaseSensorOperator, PokeReturnValue
+from airflow.providers.sftp.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils.timezone import convert_to_utc, parse
 
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator, PokeReturnValue
+else:
+    from airflow.sensors.base import BaseSensorOperator, PokeReturnValue  # type: ignore[no-redef]
+
 if TYPE_CHECKING:
     try:
         from airflow.sdk.definitions.context import Context
diff --git a/providers/tableau/src/airflow/providers/tableau/sensors/tableau.py b/providers/tableau/src/airflow/providers/tableau/sensors/tableau.py
index 4aefc55169d4e..ce823b2fdc023 100644
--- a/providers/tableau/src/airflow/providers/tableau/sensors/tableau.py
+++ b/providers/tableau/src/airflow/providers/tableau/sensors/tableau.py
@@ -24,7 +24,12 @@
     TableauJobFailedException,
     TableauJobFinishCode,
 )
-from airflow.sensors.base import BaseSensorOperator
+from airflow.providers.tableau.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/tableau/src/airflow/providers/tableau/version_compat.py b/providers/tableau/src/airflow/providers/tableau/version_compat.py
new file mode 100644
index 0000000000000..48d122b669696
--- /dev/null
+++ b/providers/tableau/src/airflow/providers/tableau/version_compat.py
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)

From 40a3c7e21ca9d06c3ec755542b8af0f11f8bf127 Mon Sep 17 00:00:00 2001
From: Kacper Muda <mudakacper@gmail.com>
Date: Fri, 27 Jun 2025 12:31:55 +0200
Subject: [PATCH 226/381] feat: Add new query related methods to
 SnowflakeSqlApiHook (#52157)

---
 .../snowflake/hooks/snowflake_sql_api.py      |  75 ++++
 .../snowflake/hooks/test_snowflake_sql_api.py | 331 ++++++++++++++----
 2 files changed, 337 insertions(+), 69 deletions(-)

diff --git a/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake_sql_api.py b/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake_sql_api.py
index 185a49ffaba06..d87e4cd04d37f 100644
--- a/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake_sql_api.py
+++ b/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake_sql_api.py
@@ -17,6 +17,7 @@
 from __future__ import annotations
 
 import base64
+import time
 import uuid
 import warnings
 from datetime import timedelta
@@ -313,6 +314,80 @@ def get_sql_api_query_status(self, query_id: str) -> dict[str, str | list[str]]:
         status_code, resp = self._make_api_call_with_retries("GET", url, header, params)
         return self._process_response(status_code, resp)
 
+    def wait_for_query(
+        self, query_id: str, raise_error: bool = False, poll_interval: int = 5, timeout: int = 60
+    ) -> dict[str, str | list[str]]:
+        """
+        Wait for query to finish either successfully or with error.
+
+        :param query_id: statement handle id for the individual statement.
+        :param raise_error: whether to raise an error if the query failed.
+        :param poll_interval: time (in seconds) between checking the query status.
+        :param timeout: max time (in seconds) to wait for the query to finish before raising a TimeoutError.
+
+        :raises RuntimeError: If the query status is 'error' and `raise_error` is True.
+        :raises TimeoutError: If the query doesn't finish within the specified timeout.
+        """
+        start_time = time.time()
+
+        while True:
+            response = self.get_sql_api_query_status(query_id=query_id)
+            self.log.debug("Query status `%s`", response["status"])
+
+            if time.time() - start_time > timeout:
+                raise TimeoutError(
+                    f"Query `{query_id}` did not finish within the timeout period of {timeout} seconds."
+                )
+
+            if response["status"] != "running":
+                self.log.info("Query status `%s`", response["status"])
+                break
+
+            time.sleep(poll_interval)
+
+        if response["status"] == "error" and raise_error:
+            raise RuntimeError(response["message"])
+
+        return response
+
+    def get_result_from_successful_sql_api_query(self, query_id: str) -> list[dict[str, Any]]:
+        """
+        Based on the query id HTTP requests are made to snowflake SQL API and return result data.
+
+        :param query_id: statement handle id for the individual statement.
+
+        :raises RuntimeError: If the query status is not 'success'.
+        """
+        self.log.info("Retrieving data for query id %s", query_id)
+        header, params, url = self.get_request_url_header_params(query_id)
+        status_code, response = self._make_api_call_with_retries("GET", url, header, params)
+
+        if (query_status := self._process_response(status_code, response)["status"]) != "success":
+            msg = f"Query must have status `success` to retrieve data; got `{query_status}`."
+            raise RuntimeError(msg)
+
+        # Below fields should always be present in response, but added some safety checks
+        data = response.get("data", [])
+        if not data:
+            self.log.warning("No data found in the API response.")
+            return []
+        metadata = response.get("resultSetMetaData", {})
+        col_names = [row["name"] for row in metadata.get("rowType", [])]
+        if not col_names:
+            self.log.warning("No column metadata found in the API response.")
+            return []
+
+        num_partitions = len(metadata.get("partitionInfo", []))
+        if num_partitions > 1:
+            self.log.debug("Result data is returned as multiple partitions. Will perform additional queries.")
+            url += "?partition="
+            for partition_no in range(1, num_partitions):  # First partition was already returned
+                self.log.debug("Querying for partition no. %s", partition_no)
+                _, response = self._make_api_call_with_retries("GET", url + str(partition_no), header, params)
+                data.extend(response.get("data", []))
+
+        return [dict(zip(col_names, row)) for row in data]  # Merged column names with data
+
     async def get_sql_api_query_status_async(self, query_id: str) -> dict[str, str | list[str]]:
         """
         Based on the query id async HTTP request is made to snowflake SQL API and return response.
diff --git a/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake_sql_api.py b/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake_sql_api.py
index 8e610e2fd7546..2cbf156a2c94e 100644
--- a/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake_sql_api.py
+++ b/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake_sql_api.py
@@ -33,9 +33,7 @@
 
 from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning
 from airflow.models import Connection
-from airflow.providers.snowflake.hooks.snowflake_sql_api import (
-    SnowflakeSqlApiHook,
-)
+from airflow.providers.snowflake.hooks.snowflake_sql_api import SnowflakeSqlApiHook
 
 if TYPE_CHECKING:
     from pathlib import Path
@@ -152,12 +150,13 @@
 
 API_URL = "https://test.snowflakecomputing.com/api/v2/statements/test"
 
+MODULE_PATH = "airflow.providers.snowflake.hooks.snowflake_sql_api"
+HOOK_PATH = f"{MODULE_PATH}.SnowflakeSqlApiHook"
+
 
 @pytest.fixture
 def mock_requests():
-    with mock.patch(
-        "airflow.providers.snowflake.hooks.snowflake_sql_api.requests.Session"
-    ) as mock_session_cls:
+    with mock.patch(f"{MODULE_PATH}.requests.Session") as mock_session_cls:
         mock_session = mock.MagicMock()
         mock_session_cls.return_value.__enter__.return_value = mock_session
         yield mock_session
@@ -165,9 +164,7 @@ def mock_requests():
 
 @pytest.fixture
 def mock_async_request():
-    with mock.patch(
-        "airflow.providers.snowflake.hooks.snowflake_sql_api.aiohttp.ClientSession.request"
-    ) as mock_session_cls:
+    with mock.patch(f"{MODULE_PATH}.aiohttp.ClientSession.request") as mock_session_cls:
         mock_request = mock.MagicMock()
         mock_session_cls.return_value = mock_request
         yield mock_request
@@ -227,11 +224,8 @@ class TestSnowflakeSqlApiHook:
             (SQL_MULTIPLE_STMTS, 4, {"statementHandles": ["uuid", "uuid1"]}, ["uuid", "uuid1"]),
         ],
     )
-    @mock.patch(
-        "airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook._get_conn_params",
-        new_callable=PropertyMock,
-    )
-    @mock.patch("airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook.get_headers")
+    @mock.patch(f"{HOOK_PATH}._get_conn_params", new_callable=PropertyMock)
+    @mock.patch(f"{HOOK_PATH}.get_headers")
     def test_execute_query(
         self,
         mock_get_header,
@@ -254,11 +248,8 @@ def test_execute_query(
         query_ids = hook.execute_query(sql, statement_count)
         assert query_ids == expected_query_ids
 
-    @mock.patch(
-        "airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook._get_conn_params",
-        new_callable=PropertyMock,
-    )
-    @mock.patch("airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook.get_headers")
+    @mock.patch(f"{HOOK_PATH}._get_conn_params", new_callable=PropertyMock)
+    @mock.patch(f"{HOOK_PATH}.get_headers")
     def test_execute_query_multiple_times_give_fresh_query_ids_each_time(
         self, mock_get_header, mock_conn_param, mock_requests
     ):
@@ -297,11 +288,8 @@ def test_execute_query_multiple_times_give_fresh_query_ids_each_time(
         "sql,statement_count,expected_response, expected_query_ids",
         [(SINGLE_STMT, 1, {"statementHandle": "uuid"}, ["uuid"])],
     )
-    @mock.patch(
-        "airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook._get_conn_params",
-        new_callable=PropertyMock,
-    )
-    @mock.patch("airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook.get_headers")
+    @mock.patch(f"{HOOK_PATH}._get_conn_params", new_callable=PropertyMock)
+    @mock.patch(f"{HOOK_PATH}.get_headers")
     def test_execute_query_exception_without_statement_handle(
         self,
         mock_get_header,
@@ -330,11 +318,8 @@ def test_execute_query_exception_without_statement_handle(
             (SQL_MULTIPLE_STMTS, 4, {"1": {"type": "FIXED", "value": "123"}}),
         ],
     )
-    @mock.patch(
-        "airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook._get_conn_params",
-        new_callable=PropertyMock,
-    )
-    @mock.patch("airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook.get_headers")
+    @mock.patch(f"{HOOK_PATH}._get_conn_params", new_callable=PropertyMock)
+    @mock.patch(f"{HOOK_PATH}.get_headers")
     def test_execute_query_bindings_warning(
         self,
         mock_get_headers,
@@ -364,10 +349,7 @@ def test_execute_query_bindings_warning(
             (["uuid", "uuid1"]),
         ],
     )
-    @mock.patch(
-        "airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook."
-        "get_request_url_header_params"
-    )
+    @mock.patch(f"{HOOK_PATH}.get_request_url_header_params")
     def test_check_query_output(self, mock_geturl_header_params, query_ids, mock_requests):
         """Test check_query_output by passing query ids as params and mock get_request_url_header_params"""
         req_id = uuid.uuid4()
@@ -380,10 +362,7 @@ def test_check_query_output(self, mock_geturl_header_params, query_ids, mock_req
         mock_log_info.assert_called_with(GET_RESPONSE)
 
     @pytest.mark.parametrize("query_ids", [["uuid", "uuid1"]])
-    @mock.patch(
-        "airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook."
-        "get_request_url_header_params"
-    )
+    @mock.patch(f"{HOOK_PATH}.get_request_url_header_params")
     def test_check_query_output_exception(
         self,
         mock_geturl_header_params,
@@ -405,11 +384,8 @@ def test_check_query_output_exception(
         with pytest.raises(requests.exceptions.HTTPError):
             hook.check_query_output(query_ids)
 
-    @mock.patch(
-        "airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook._get_conn_params",
-        new_callable=PropertyMock,
-    )
-    @mock.patch("airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook.get_headers")
+    @mock.patch(f"{HOOK_PATH}._get_conn_params", new_callable=PropertyMock)
+    @mock.patch(f"{HOOK_PATH}.get_headers")
     def test_get_request_url_header_params(self, mock_get_header, mock_conn_param):
         """Test get_request_url_header_params by mocking _get_conn_params and get_headers"""
         mock_conn_param.return_value = CONN_PARAMS
@@ -419,11 +395,8 @@ def test_get_request_url_header_params(self, mock_get_header, mock_conn_param):
         assert header == HEADERS
         assert url == "https://airflow.af_region.snowflakecomputing.com/api/v2/statements/uuid"
 
-    @mock.patch("airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook.get_private_key")
-    @mock.patch(
-        "airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook._get_conn_params",
-        new_callable=PropertyMock,
-    )
+    @mock.patch(f"{HOOK_PATH}.get_private_key")
+    @mock.patch(f"{HOOK_PATH}._get_conn_params", new_callable=PropertyMock)
     @mock.patch("airflow.providers.snowflake.utils.sql_api_generate_jwt.JWTGenerator.get_token")
     def test_get_headers_should_support_private_key(self, mock_get_token, mock_conn_param, mock_private_key):
         """Test get_headers method by mocking get_private_key and _get_conn_params method"""
@@ -433,11 +406,8 @@ def test_get_headers_should_support_private_key(self, mock_get_token, mock_conn_
         result = hook.get_headers()
         assert result == HEADERS
 
-    @mock.patch("airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook.get_oauth_token")
-    @mock.patch(
-        "airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook._get_conn_params",
-        new_callable=PropertyMock,
-    )
+    @mock.patch(f"{HOOK_PATH}.get_oauth_token")
+    @mock.patch(f"{HOOK_PATH}._get_conn_params", new_callable=PropertyMock)
     def test_get_headers_should_support_oauth(self, mock_conn_param, mock_oauth_token):
         """Test get_headers method by mocking get_oauth_token and _get_conn_params method"""
         mock_conn_param.return_value = CONN_PARAMS_OAUTH
@@ -448,10 +418,7 @@ def test_get_headers_should_support_oauth(self, mock_conn_param, mock_oauth_toke
 
     @mock.patch("airflow.providers.snowflake.hooks.snowflake.HTTPBasicAuth")
     @mock.patch("requests.post")
-    @mock.patch(
-        "airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook._get_conn_params",
-        new_callable=PropertyMock,
-    )
+    @mock.patch(f"{HOOK_PATH}._get_conn_params", new_callable=PropertyMock)
     def test_get_oauth_token(self, mock_conn_param, requests_post, mock_auth):
         """Test get_oauth_token method makes the right http request"""
         basic_auth = {"Authorization": "Basic usernamepassword"}
@@ -655,10 +622,7 @@ def test_get_private_key_should_support_private_auth_with_unencrypted_key(
             (404, {"status": "error", "message": "test"}, {"status": "error", "message": "test"}),
         ],
     )
-    @mock.patch(
-        "airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook."
-        "get_request_url_header_params"
-    )
+    @mock.patch(f"{HOOK_PATH}.get_request_url_header_params")
     def test_get_sql_api_query_status(
         self, mock_geturl_header_params, status_code, response, expected_response, mock_requests
     ):
@@ -718,10 +682,7 @@ def raise_for_status(self):
             (404, {"status": "error", "message": "test"}, {"status": "error", "message": "test"}),
         ],
     )
-    @mock.patch(
-        "airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook."
-        "get_request_url_header_params"
-    )
+    @mock.patch(f"{HOOK_PATH}.get_request_url_header_params")
     async def test_get_sql_api_query_status_async(
         self, mock_geturl_header_params, status_code, response, expected_response, mock_async_request
     ):
@@ -829,11 +790,8 @@ def test_hook_parameter_propagation(self, hook_params):
         ],
     )
     @mock.patch("uuid.uuid4")
-    @mock.patch(
-        "airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook._get_conn_params",
-        new_callable=PropertyMock,
-    )
-    @mock.patch("airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook.get_headers")
+    @mock.patch(f"{HOOK_PATH}._get_conn_params", new_callable=PropertyMock)
+    @mock.patch(f"{HOOK_PATH}.get_headers")
     def test_proper_parametrization_of_execute_query_api_request(
         self,
         mock_get_headers,
@@ -1079,6 +1037,241 @@ def test_make_api_call_with_retries_custom_retry_config(self, mock_requests):
         # Should attempt only 2 times due to custom config
         assert mock_requests.request.call_count == 2
 
+    @mock.patch(f"{MODULE_PATH}.time.sleep")
+    def test_wait_for_query_immediate_success(self, sleep_mock):
+        hook = SnowflakeSqlApiHook(snowflake_conn_id="test_conn")
+        hook.get_sql_api_query_status = mock.MagicMock(
+            return_value={"status": "success", "results": ["row1", "row2"]}
+        )
+
+        result = hook.wait_for_query(query_id="qid-123")
+
+        assert result == {"status": "success", "results": ["row1", "row2"]}
+        sleep_mock.assert_not_called()
+
+    @mock.patch(f"{MODULE_PATH}.time.sleep")
+    def test_wait_for_query_polls_until_done(self, sleep_mock):
+        hook = SnowflakeSqlApiHook(snowflake_conn_id="test_conn")
+        hook.get_sql_api_query_status = mock.MagicMock(
+            side_effect=[
+                {"status": "running"},
+                {"status": "running"},
+                {"status": "success", "data": [1, 2, 3]},
+            ]
+        )
+        qid = "qid-456"
+
+        result = hook.wait_for_query(query_id=qid, poll_interval=2)
+
+        assert result == {"status": "success", "data": [1, 2, 3]}
+        assert sleep_mock.call_count == 2
+        sleep_mock.assert_has_calls([mock.call(2), mock.call(2)])
+        hook.get_sql_api_query_status.assert_has_calls(
+            [mock.call(query_id=qid), mock.call(query_id=qid), mock.call(query_id=qid)]
+        )
+
+    @mock.patch(f"{MODULE_PATH}.time.sleep")
+    def test_wait_for_query_error_raises_when_requested(self, sleep_mock):
+        hook = SnowflakeSqlApiHook(snowflake_conn_id="test_conn")
+        hook.get_sql_api_query_status = mock.MagicMock(return_value={"status": "error", "message": "oh no!"})
+
+        with pytest.raises(RuntimeError) as excinfo:
+            hook.wait_for_query("qid-789", raise_error=True)
+        assert str(excinfo.value) == "oh no!"
+        sleep_mock.assert_not_called()
+
+    @mock.patch(f"{MODULE_PATH}.time.sleep")
+    def test_wait_for_query_error_returns_when_not_raising(self, sleep_mock):
+        hook = SnowflakeSqlApiHook(snowflake_conn_id="test_conn")
+        hook.get_sql_api_query_status = mock.MagicMock(
+            return_value={"status": "error", "message": "still bad"}
+        )
+
+        result = hook.wait_for_query(query_id="qid-000", raise_error=False)
+        assert result == {"status": "error", "message": "still bad"}
+        sleep_mock.assert_not_called()
+
+    @mock.patch(f"{MODULE_PATH}.time.sleep")
+    def test_wait_for_query_handles_unknown_status(self, sleep_mock):
+        hook = SnowflakeSqlApiHook(snowflake_conn_id="test_conn")
+        hook.get_sql_api_query_status = mock.MagicMock(return_value={"status": "queued", "info": ["a", "b"]})
+
+        result = hook.wait_for_query(query_id="qid-111")
+        assert result == {"status": "queued", "info": ["a", "b"]}
+        sleep_mock.assert_not_called()
+
+    @mock.patch(f"{MODULE_PATH}.time.time")
+    @mock.patch(f"{MODULE_PATH}.time.sleep")
+    def test_wait_for_query_timeout_error(self, sleep_mock, time_mock):
+        hook = SnowflakeSqlApiHook(snowflake_conn_id="test_conn")
+
+        # Simulate a query that keeps running and never finishes
+        hook.get_sql_api_query_status = mock.MagicMock(return_value={"status": "running"})
+        time_mock.side_effect = list(range(5))
+
+        qid = "qid-789"
+        timeout = 3
+
+        with pytest.raises(TimeoutError):
+            hook.wait_for_query(query_id=qid, timeout=timeout, poll_interval=1)
+
+        # Ensure that we polled multiple times before the timeout error is raised
+        assert sleep_mock.call_count == 3
+        sleep_mock.assert_has_calls([mock.call(1)] * 3)
+        assert hook.get_sql_api_query_status.call_count == 4
+        hook.get_sql_api_query_status.assert_has_calls([mock.call(query_id=qid)] * 4)
+        assert time_mock.call_count == 5
+
+    @mock.patch(f"{HOOK_PATH}._make_api_call_with_retries")
+    @mock.patch(f"{HOOK_PATH}._process_response")
+    @mock.patch(f"{HOOK_PATH}.get_request_url_header_params")
+    def test_get_result_from_successful_sql_api_query_no_data(
+        self, mock_get_url, mock_process_response, mock_api_call
+    ):
+        hook = SnowflakeSqlApiHook(snowflake_conn_id="test_conn")
+
+        mock_get_url.return_value = ("header", "params", "url")
+        mock_process_response.return_value = {"status": "success"}
+        mock_api_call.return_value = (200, {"data": []})
+
+        result = hook.get_result_from_successful_sql_api_query(query_id="qid-1")
+
+        assert result == []
+        mock_get_url.assert_called_once_with("qid-1")
+        mock_api_call.assert_called_once_with("GET", "url", "header", "params")
+        mock_process_response.assert_called_once_with(200, {"data": []})
+
+    @mock.patch(f"{HOOK_PATH}._make_api_call_with_retries")
+    @mock.patch(f"{HOOK_PATH}._process_response")
+    @mock.patch(f"{HOOK_PATH}.get_request_url_header_params")
+    def test_get_result_from_successful_sql_api_query_no_column_metadata(
+        self, mock_get_url, mock_process_response, mock_api_call
+    ):
+        hook = SnowflakeSqlApiHook(snowflake_conn_id="test_conn")
+
+        mock_get_url.return_value = ("header", "params", "url")
+        mock_process_response.return_value = {"status": "success"}
+        mock_api_call.return_value = (200, {"data": [[1, 2]], "resultSetMetaData": {"rowType": []}})
+
+        result = hook.get_result_from_successful_sql_api_query(query_id="qid-2")
+
+        assert result == []
+        mock_get_url.assert_called_once_with("qid-2")
+        mock_api_call.assert_called_once_with("GET", "url", "header", "params")
+        mock_process_response.assert_called_once_with(
+            200, {"data": [[1, 2]], "resultSetMetaData": {"rowType": []}}
+        )
+
+    @mock.patch(f"{HOOK_PATH}._make_api_call_with_retries")
+    @mock.patch(f"{HOOK_PATH}._process_response")
+    @mock.patch(f"{HOOK_PATH}.get_request_url_header_params")
+    def test_get_result_from_successful_sql_api_query_raises_error(
+        self, mock_get_url, mock_process_response, mock_api_call
+    ):
+        hook = SnowflakeSqlApiHook(snowflake_conn_id="test_conn")
+
+        mock_get_url.return_value = ("header", "params", "url")
+        mock_process_response.return_value = {"status": "failed"}
+        mock_api_call.return_value = (400, {"some": "response"})
+
+        with pytest.raises(
+            RuntimeError, match="Query must have status `success` to retrieve data; got `failed`."
+        ):
+            hook.get_result_from_successful_sql_api_query(query_id="qid-3")
+
+        mock_get_url.assert_called_once_with("qid-3")
+        mock_api_call.assert_called_once_with("GET", "url", "header", "params")
+        mock_process_response.assert_called_once_with(400, {"some": "response"})
+
+    @mock.patch(f"{HOOK_PATH}._make_api_call_with_retries")
+    @mock.patch(f"{HOOK_PATH}._process_response")
+    @mock.patch(f"{HOOK_PATH}.get_request_url_header_params")
+    def test_get_result_from_successful_sql_api_query_single_partition(
+        self, mock_get_url, mock_process_response, mock_api_call
+    ):
+        hook = SnowflakeSqlApiHook(snowflake_conn_id="test_conn")
+
+        mock_get_url.return_value = ("header", "params", "url")
+        mock_process_response.return_value = {"status": "success"}
+        mock_api_call.return_value = (
+            200,
+            {
+                "data": [[1, "a"], [2, "b"]],
+                "resultSetMetaData": {
+                    "rowType": [{"name": "id"}, {"name": "val"}],
+                    "partitionInfo": [{"p0": "p0"}],  # Single partition
+                },
+            },
+        )
+
+        result = hook.get_result_from_successful_sql_api_query(query_id="qid-4")
+
+        expected = [{"id": 1, "val": "a"}, {"id": 2, "val": "b"}]
+        assert result == expected
+
+        # Only one API call (no additional partitions)
+        mock_api_call.assert_called_once_with("GET", "url", "header", "params")
+        mock_get_url.assert_called_once_with("qid-4")
+        mock_process_response.assert_called_once_with(
+            200,
+            {
+                "data": [[1, "a"], [2, "b"]],
+                "resultSetMetaData": {
+                    "rowType": [{"name": "id"}, {"name": "val"}],
+                    "partitionInfo": [{"p0": "p0"}],
+                },
+            },
+        )
+
+    @mock.patch(f"{HOOK_PATH}._make_api_call_with_retries")
+    @mock.patch(f"{HOOK_PATH}._process_response")
+    @mock.patch(f"{HOOK_PATH}.get_request_url_header_params")
+    def test_get_result_from_successful_sql_api_query_multiple_partitions(
+        self, mock_get_url, mock_process_response, mock_api_call
+    ):
+        hook = SnowflakeSqlApiHook(snowflake_conn_id="test_conn")
+
+        # Initial response with metadata and 2 partitions
+        initial_response = {
+            "data": [[1, "a"], [2, "b"]],
+            "resultSetMetaData": {
+                "rowType": [{"name": "id"}, {"name": "val"}],
+                "partitionInfo": [{"p0": "p0"}, {"p1": "p1"}],
+            },
+        }
+        # Second partition response
+        second_response = {
+            "data": [[3, "c"], [4, "d"]],
+            "resultSetMetaData": {
+                "rowType": [{"name": "id"}, {"name": "val"}],
+                "partitionInfo": [{"p0": "p0"}, {"p1": "p1"}],
+            },
+        }
+
+        mock_get_url.return_value = ("header", "params", "https://example.com/api/query")
+        mock_process_response.return_value = {"status": "success"}
+        mock_api_call.side_effect = [
+            (200, initial_response),  # Initial call
+            (200, second_response),  # Partition 1
+        ]
+
+        result = hook.get_result_from_successful_sql_api_query(query_id="qid-5")
+
+        expected = [
+            {"id": 1, "val": "a"},
+            {"id": 2, "val": "b"},
+            {"id": 3, "val": "c"},
+            {"id": 4, "val": "d"},
+        ]
+        assert result == expected
+
+        # Two API calls: first for the initial query, second for partition 1
+        assert mock_api_call.call_count == 2
+        mock_api_call.assert_any_call("GET", "https://example.com/api/query", "header", "params")
+        mock_api_call.assert_any_call("GET", "https://example.com/api/query?partition=1", "header", "params")
+        mock_get_url.assert_called_once_with("qid-5")
+        mock_process_response.assert_called_once()
+
     @pytest.mark.asyncio
     async def test_make_api_call_with_retries_async_success(self, mock_async_request):
         """

From 85a06653155b126c30d80500ed96d9270c1eeb6a Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Fri, 27 Jun 2025 12:17:04 +0100
Subject: [PATCH 227/381] Attempt2: Fix mypy in gcp generative_model (#52331)

* Attempt2: Fix mypy in gcp generative_model

* Remove private class imports
---
 .../google/cloud/hooks/vertex_ai/generative_model.py     | 9 ++++-----
 .../google/cloud/operators/vertex_ai/generative_model.py | 2 +-
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/generative_model.py b/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/generative_model.py
index 3ed03b66b63a2..871ab81d10d1e 100644
--- a/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/generative_model.py
+++ b/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/generative_model.py
@@ -35,7 +35,6 @@
 from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID, GoogleBaseHook
 
 if TYPE_CHECKING:
-    from google.cloud.aiplatform_v1 import types as types_v1
     from google.cloud.aiplatform_v1beta1 import types as types_v1beta1
 
 
@@ -50,7 +49,7 @@ def get_text_embedding_model(self, pretrained_model: str):
     def get_generative_model(
         self,
         pretrained_model: str,
-        system_instruction: str | None = None,
+        system_instruction: Any | None = None,
         generation_config: dict | None = None,
         safety_settings: dict | None = None,
         tools: list | None = None,
@@ -82,7 +81,7 @@ def get_eval_task(
     def get_cached_context_model(
         self,
         cached_content_name: str,
-    ) -> preview_generative_model:
+    ) -> Any:
         """Return a Generative Model with Cached Context."""
         cached_content = CachedContent(cached_content_name=cached_content_name)
 
@@ -167,7 +166,7 @@ def supervised_fine_tuning_train(
         adapter_size: Literal[1, 4, 8, 16] | None = None,
         learning_rate_multiplier: float | None = None,
         project_id: str = PROVIDE_PROJECT_ID,
-    ) -> types_v1.TuningJob:
+    ) -> Any:
         """
         Use the Supervised Fine Tuning API to create a tuning job.
 
@@ -300,7 +299,7 @@ def create_cached_content(
         model_name: str,
         location: str,
         ttl_hours: float = 1,
-        system_instruction: str | None = None,
+        system_instruction: Any | None = None,
         contents: list[Any] | None = None,
         display_name: str | None = None,
         project_id: str = PROVIDE_PROJECT_ID,
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/generative_model.py b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/generative_model.py
index 686e1674078ac..20257dad196c8 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/generative_model.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/generative_model.py
@@ -473,7 +473,7 @@ def __init__(
         project_id: str,
         location: str,
         model_name: str,
-        system_instruction: str | None = None,
+        system_instruction: Any | None = None,
         contents: list[Any] | None = None,
         ttl_hours: float = 1,
         display_name: str | None = None,

From 57307609c4fe69031901ac13b297a71a5f1c243f Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Fri, 27 Jun 2025 16:49:30 +0530
Subject: [PATCH 228/381] Replace occurences of 'get_password' with 'password'
 to ease migration (#52333)

---
 .../amazon/src/airflow/providers/amazon/aws/hooks/chime.py      | 2 +-
 .../src/airflow/providers/pagerduty/hooks/pagerduty.py          | 2 +-
 .../src/airflow/providers/pagerduty/hooks/pagerduty_events.py   | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/providers/amazon/src/airflow/providers/amazon/aws/hooks/chime.py b/providers/amazon/src/airflow/providers/amazon/aws/hooks/chime.py
index 78fa691d8e340..f004b1ac8656b 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/hooks/chime.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/hooks/chime.py
@@ -66,7 +66,7 @@ def _get_webhook_endpoint(self, conn_id: str) -> str:
         :return: Endpoint(str) for chime webhook.
         """
         conn = self.get_connection(conn_id)
-        token = conn.get_password()
+        token = conn.password
         if token is None:
             raise AirflowException("Webhook token field is missing and is required.")
         url = conn.schema + "://" + conn.host
diff --git a/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty.py b/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty.py
index 070f745788ae2..2d7bcf9c61d1b 100644
--- a/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty.py
+++ b/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty.py
@@ -84,7 +84,7 @@ def __init__(self, token: str = "", pagerduty_conn_id: str | None = None) -> Non
 
         if pagerduty_conn_id is not None:
             conn = self.get_connection(pagerduty_conn_id)
-            password = conn.get_password()
+            password = conn.password
             if password is not None:
                 self.token = password
 
diff --git a/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty_events.py b/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty_events.py
index ac3b6463d63aa..2388cf4f834f5 100644
--- a/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty_events.py
+++ b/providers/pagerduty/src/airflow/providers/pagerduty/hooks/pagerduty_events.py
@@ -66,7 +66,7 @@ def __init__(
 
         if pagerduty_events_conn_id is not None:
             conn = self.get_connection(pagerduty_events_conn_id)
-            password = conn.get_password()
+            password = conn.password
             if password is not None:
                 self.integration_key = password
 

From 78e4cb4c670521965ab6ad17cd58259063032114 Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Fri, 27 Jun 2025 17:43:18 +0530
Subject: [PATCH 229/381] Replace `models.BaseOperator` to Task SDK one for
 Standard Provider (#52292)

The Providers should use the BaseOperator from Task SDK for Airflow 3.0+.
---
 airflow-core/tests/unit/core/test_core.py     |  24 ++--
 .../tests/unit/models/test_cleartasks.py      |   9 +-
 .../tests/unit/models/test_taskinstance.py    |  68 +++++----
 .../src/tests_common/pytest_plugin.py         |  51 +++++++
 .../tests/system/amazon/aws/utils/k8s.py      |   7 +-
 .../apache/spark/decorators/test_pyspark.py   |  16 +--
 .../operators/test_campaign_manager.py        |  47 +++---
 .../operators/test_display_video.py           |  43 +++---
 .../example_openlineage_base_complex_dag.py   |   5 +-
 .../unit/openlineage/extractors/test_base.py  |   8 +-
 .../unit/openlineage/plugins/test_listener.py |   8 +-
 .../unit/openlineage/utils/test_utils.py      |   5 +-
 .../snowflake/decorators/test_snowpark.py     |  22 ++-
 .../unit/snowflake/operators/test_snowpark.py |  18 ++-
 .../providers/standard/operators/bash.py      |   8 +-
 .../providers/standard/operators/branch.py    |   8 +-
 .../providers/standard/operators/empty.py     |   7 +-
 .../providers/standard/operators/python.py    |   8 +-
 .../providers/standard/operators/smooth.py    |   7 +-
 .../standard/sensors/external_task.py         |   5 +-
 .../providers/standard/utils/skipmixin.py     |  15 +-
 .../providers/standard/version_compat.py      |   1 +
 .../decorators/test_branch_external_python.py |  14 +-
 .../standard/decorators/test_branch_python.py |  14 +-
 .../decorators/test_branch_virtualenv.py      |  14 +-
 .../decorators/test_external_python.py        |  72 +++++-----
 .../unit/standard/decorators/test_python.py   | 113 +++++----------
 .../decorators/test_python_virtualenv.py      | 100 ++++++-------
 .../standard/decorators/test_short_circuit.py |  12 +-
 .../unit/standard/operators/test_bash.py      |  12 +-
 .../operators/test_branch_operator.py         |  41 +++---
 .../unit/standard/operators/test_datetime.py  |  29 ++--
 .../operators/test_latest_only_operator.py    |  25 ++--
 .../unit/standard/operators/test_python.py    | 134 +++++++++---------
 .../unit/standard/operators/test_weekday.py   |  14 +-
 .../sensors/test_external_task_sensor.py      |   7 +-
 task-sdk/src/airflow/sdk/bases/decorator.py   |   5 +-
 37 files changed, 524 insertions(+), 472 deletions(-)

diff --git a/airflow-core/tests/unit/core/test_core.py b/airflow-core/tests/unit/core/test_core.py
index d0022ed33d8b6..cfdb9dee32357 100644
--- a/airflow-core/tests/unit/core/test_core.py
+++ b/airflow-core/tests/unit/core/test_core.py
@@ -24,9 +24,7 @@
 import pytest
 
 from airflow.exceptions import AirflowTaskTimeout
-from airflow.models import TaskInstance
 from airflow.models.baseoperator import BaseOperator
-from airflow.providers.standard.operators.bash import BashOperator
 from airflow.providers.standard.operators.empty import EmptyOperator
 from airflow.providers.standard.operators.python import PythonOperator
 from airflow.utils.timezone import datetime
@@ -49,8 +47,15 @@ def teardown_method(self):
         self.clean_db()
 
     def test_dryrun(self, dag_maker):
+        class TemplateFieldOperator(BaseOperator):
+            template_fields = ["bash_command"]
+
+            def __init__(self, bash_command, **kwargs):
+                self.bash_command = bash_command
+                super().__init__(**kwargs)
+
         with dag_maker():
-            op = BashOperator(task_id="test_dryrun", bash_command="echo success")
+            op = TemplateFieldOperator(task_id="test_dryrun", bash_command="echo success")
         dag_maker.create_dagrun()
         op.dry_run()
 
@@ -81,9 +86,8 @@ def sleep_and_catch_other_exceptions():
                 execution_timeout=timedelta(seconds=1),
                 python_callable=sleep_and_catch_other_exceptions,
             )
-        dag_maker.create_dagrun()
         with pytest.raises(AirflowTaskTimeout):
-            op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
+            dag_maker.run_ti(op.task_id)
 
     def test_dag_params_and_task_params(self, dag_maker):
         # This test case guards how params of DAG and Operator work together.
@@ -91,7 +95,6 @@ def test_dag_params_and_task_params(self, dag_maker):
         #   it is guaranteed to be available eventually.
         # - If any key exists in both DAG's params and Operator's params,
         #   the latter has precedence.
-        TI = TaskInstance
 
         with dag_maker(
             schedule=timedelta(weeks=1),
@@ -106,12 +109,9 @@ def test_dag_params_and_task_params(self, dag_maker):
         dr = dag_maker.create_dagrun(
             run_type=DagRunType.SCHEDULED,
         )
-        task1.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
-        task2.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
-        ti1 = TI(task=task1, run_id=dr.run_id)
-        ti2 = TI(task=task2, run_id=dr.run_id)
-        ti1.refresh_from_db()
-        ti2.refresh_from_db()
+        ti1 = dag_maker.run_ti(task1.task_id, dr)
+        ti2 = dag_maker.run_ti(task2.task_id, dr)
+
         context1 = ti1.get_template_context()
         context2 = ti2.get_template_context()
 
diff --git a/airflow-core/tests/unit/models/test_cleartasks.py b/airflow-core/tests/unit/models/test_cleartasks.py
index 9ece88246196a..002165ff71ec2 100644
--- a/airflow-core/tests/unit/models/test_cleartasks.py
+++ b/airflow-core/tests/unit/models/test_cleartasks.py
@@ -23,6 +23,7 @@
 import pytest
 from sqlalchemy import select
 
+from airflow.models.baseoperator import BaseOperator
 from airflow.models.dag import DAG
 from airflow.models.serialized_dag import SerializedDagModel
 from airflow.models.taskinstance import TaskInstance, TaskInstance as TI, clear_task_instances
@@ -677,9 +678,13 @@ def _get_ti(old_ti):
                 assert ti.max_tries == 1
 
     def test_operator_clear(self, dag_maker, session):
+        class ClearOperator(BaseOperator):
+            def execute(self, context):
+                pass
+
         with dag_maker("test_operator_clear"):
-            op1 = EmptyOperator(task_id="test1")
-            op2 = EmptyOperator(task_id="test2", retries=1)
+            op1 = ClearOperator(task_id="test1")
+            op2 = ClearOperator(task_id="test2", retries=1)
             op1 >> op2
 
         dr = dag_maker.create_dagrun(
diff --git a/airflow-core/tests/unit/models/test_taskinstance.py b/airflow-core/tests/unit/models/test_taskinstance.py
index 5c6e4f69a5256..8f0de3d07c95e 100644
--- a/airflow-core/tests/unit/models/test_taskinstance.py
+++ b/airflow-core/tests/unit/models/test_taskinstance.py
@@ -41,6 +41,7 @@
     AirflowSkipException,
 )
 from airflow.models.asset import AssetActive, AssetAliasModel, AssetEvent, AssetModel
+from airflow.models.baseoperator import BaseOperator
 from airflow.models.connection import Connection
 from airflow.models.dag import DAG
 from airflow.models.dagrun import DagRun
@@ -775,8 +776,11 @@ def run_ti_and_assert(
         assert not task_reschedules_for_ti(ti)
 
     def test_depends_on_past_catchup_true(self, dag_maker):
+        class CustomOp(BaseOperator):
+            def execute(self, context): ...
+
         with dag_maker(dag_id="test_depends_on_past", serialized=True, catchup=True):
-            task = EmptyOperator(
+            task = CustomOp(
                 task_id="test_dop_task",
                 depends_on_past=True,
             )
@@ -806,8 +810,11 @@ def test_depends_on_past_catchup_true(self, dag_maker):
         assert ti.state == State.SUCCESS
 
     def test_depends_on_past_catchup_false(self, dag_maker):
+        class CustomOp(BaseOperator):
+            def execute(self, context): ...
+
         with dag_maker(dag_id="test_depends_on_past_catchup_false", serialized=True, catchup=False):
-            task = EmptyOperator(
+            task = CustomOp(
                 task_id="test_dop_task",
                 depends_on_past=True,
             )
@@ -2281,7 +2288,10 @@ def test_template_with_json_variable_missing(self, create_task_instance, session
             ti.task.render_template('{{ var.json.get("missing_variable") }}', context)
 
     @provide_session
-    def test_handle_failure(self, create_dummy_dag, session=None):
+    def test_handle_failure(self, dag_maker, session=None):
+        class CustomOp(BaseOperator):
+            def execute(self, context): ...
+
         start_date = timezone.datetime(2016, 6, 1)
         clear_db_runs()
 
@@ -2298,16 +2308,15 @@ def test_handle_failure(self, create_dummy_dag, session=None):
             __name__="mock_on_retry_1",
             __call__=mock.MagicMock(),
         )
-        dag, task1 = create_dummy_dag(
-            dag_id="test_handle_failure",
-            schedule=None,
-            start_date=start_date,
-            task_id="test_handle_failure_on_failure",
-            with_dagrun_type=DagRunType.MANUAL,
-            on_failure_callback=mock_on_failure_1,
-            on_retry_callback=mock_on_retry_1,
-            session=session,
-        )
+        with dag_maker(dag_id="test_handle_failure", start_date=start_date, schedule=None) as dag:
+            task1 = CustomOp(
+                task_id="test_handle_failure_on_failure",
+                on_failure_callback=mock_on_failure_1,
+                on_retry_callback=mock_on_retry_1,
+            )
+
+        dag_maker.create_dagrun(session=session, run_type=DagRunType.MANUAL, start_date=start_date)
+
         logical_date = timezone.utcnow()
         dr = dag.create_dagrun(
             run_id="test2",
@@ -2347,7 +2356,7 @@ def test_handle_failure(self, create_dummy_dag, session=None):
             __name__="mock_on_retry_2",
             __call__=mock.MagicMock(),
         )
-        task2 = EmptyOperator(
+        task2 = CustomOp(
             task_id="test_handle_failure_on_retry",
             on_failure_callback=mock_on_failure_2,
             on_retry_callback=mock_on_retry_2,
@@ -2375,7 +2384,7 @@ def test_handle_failure(self, create_dummy_dag, session=None):
             __name__="mock_on_retry_3",
             __call__=mock.MagicMock(),
         )
-        task3 = EmptyOperator(
+        task3 = CustomOp(
             task_id="test_handle_failure_on_force_fail",
             on_failure_callback=mock_on_failure_3,
             on_retry_callback=mock_on_retry_3,
@@ -2450,20 +2459,23 @@ def test_handle_failure_task_undefined(self, create_task_instance):
         del ti.task
         ti.handle_failure("test ti.task undefined")
 
-    def test_handle_failure_fail_fast(self, create_dummy_dag, session):
+    def test_handle_failure_fail_fast(self, dag_maker, session):
         start_date = timezone.datetime(2016, 6, 1)
         clear_db_runs()
 
-        dag, task1 = create_dummy_dag(
+        class CustomOp(BaseOperator):
+            def execute(self, context): ...
+
+        with dag_maker(
             dag_id="test_handle_failure_fail_fast",
-            schedule=None,
             start_date=start_date,
-            task_id="task1",
-            trigger_rule="all_success",
-            with_dagrun_type=DagRunType.MANUAL,
-            session=session,
+            schedule=None,
             fail_fast=True,
-        )
+        ) as dag:
+            task1 = CustomOp(task_id="task1", trigger_rule="all_success")
+
+        dag_maker.create_dagrun(run_type=DagRunType.MANUAL, start_date=start_date)
+
         logical_date = timezone.utcnow()
         dr = dag.create_dagrun(
             run_id="test_ff",
@@ -2484,19 +2496,13 @@ def test_handle_failure_fail_fast(self, create_dummy_dag, session):
         states = [State.RUNNING, State.FAILED, State.QUEUED, State.SCHEDULED, State.DEFERRED]
         tasks = []
         for i, state in enumerate(states):
-            op = EmptyOperator(
-                task_id=f"reg_Task{i}",
-                dag=dag,
-            )
+            op = CustomOp(task_id=f"reg_Task{i}", dag=dag)
             ti = TI(task=op, run_id=dr.run_id)
             ti.state = state
             session.add(ti)
             tasks.append(ti)
 
-        fail_task = EmptyOperator(
-            task_id="fail_Task",
-            dag=dag,
-        )
+        fail_task = CustomOp(task_id="fail_Task", dag=dag)
         ti_ff = TI(task=fail_task, run_id=dr.run_id)
         ti_ff.state = State.FAILED
         session.add(ti_ff)
diff --git a/devel-common/src/tests_common/pytest_plugin.py b/devel-common/src/tests_common/pytest_plugin.py
index 242723bad583e..ba3e209901938 100644
--- a/devel-common/src/tests_common/pytest_plugin.py
+++ b/devel-common/src/tests_common/pytest_plugin.py
@@ -806,6 +806,14 @@ def create_dagrun(
 
     def create_dagrun_after(self, dagrun: DagRun, **kwargs) -> DagRun: ...
 
+    def run_ti(
+        self,
+        task_id: str,
+        dag_run: DagRun | None = ...,
+        dag_run_kwargs: dict | None = ...,
+        **kwargs,
+    ) -> TaskInstance: ...
+
     def __call__(
         self,
         dag_id: str = "test_dag",
@@ -1100,6 +1108,49 @@ def create_dagrun_after(self, dagrun, **kwargs):
                 **kwargs,
             )
 
+        def run_ti(self, task_id, dag_run=None, dag_run_kwargs=None, **kwargs):
+            """
+            Create a dagrun and run a specific task instance with proper task refresh.
+
+            This is a convenience method for running a single task instance:
+            1. Create a dagrun if it does not exist
+            2. Get the specific task instance by task_id
+            3. Refresh the task instance from the DAG task
+            4. Run the task instance
+
+            Returns the created TaskInstance.
+            """
+            from tests_common.test_utils.version_compat import AIRFLOW_V_3_1_PLUS
+
+            if dag_run is None:
+                if dag_run_kwargs is None:
+                    dag_run_kwargs = {}
+                dag_run = self.create_dagrun(**dag_run_kwargs)
+            ti = dag_run.get_task_instance(task_id=task_id)
+            if ti is None:
+                available_task_ids = [task.task_id for task in self.dag.tasks]
+                raise ValueError(
+                    f"Task instance with task_id '{task_id}' not found in dag run. "
+                    f"Available task_ids: {available_task_ids}"
+                )
+            task = self.dag.get_task(ti.task_id)
+
+            if not AIRFLOW_V_3_1_PLUS:
+                # Airflow <3.1 has a bug for DecoratedOperator has an unused signature for
+                # `DecoratedOperator._handle_output` for xcom_push
+                # This worked for `models.BaseOperator` since it had xcom_push method but for
+                # `airflow.sdk.BaseOperator`, this does not exist, so this returns an AttributeError
+                # Since this is an unused attribute anyway, we just monkey patch it with a lambda.
+                # Error otherwise:
+                # /usr/local/lib/python3.11/site-packages/airflow/sdk/bases/decorator.py:253: in execute
+                #     return self._handle_output(return_value=return_value, context=context, xcom_push=self.xcom_push)
+                #                                                                                      ^^^^^^^^^^^^^^
+                # E   AttributeError: '_PythonDecoratedOperator' object has no attribute 'xcom_push'
+                task.xcom_push = lambda *args, **kwargs: None
+            ti.refresh_from_task(task)
+            ti.run(**kwargs)
+            return ti
+
         def sync_dagbag_to_db(self):
             if not AIRFLOW_V_3_0_PLUS:
                 self.dagbag.sync_to_db()
diff --git a/providers/amazon/tests/system/amazon/aws/utils/k8s.py b/providers/amazon/tests/system/amazon/aws/utils/k8s.py
index a882d9e42842e..b2c82ae82c674 100644
--- a/providers/amazon/tests/system/amazon/aws/utils/k8s.py
+++ b/providers/amazon/tests/system/amazon/aws/utils/k8s.py
@@ -16,15 +16,10 @@
 # under the License.
 from __future__ import annotations
 
-from typing import TYPE_CHECKING
-
 from airflow.providers.standard.operators.bash import BashOperator
 
-if TYPE_CHECKING:
-    from airflow.models.operator import Operator
-
 
-def get_describe_pod_operator(cluster_name: str, pod_name: str) -> Operator:
+def get_describe_pod_operator(cluster_name: str, pod_name: str) -> BashOperator:
     """Returns an operator that'll print the output of a `k describe pod` in the airflow logs."""
     return BashOperator(
         task_id="describe_pod",
diff --git a/providers/apache/spark/tests/unit/apache/spark/decorators/test_pyspark.py b/providers/apache/spark/tests/unit/apache/spark/decorators/test_pyspark.py
index 4cb7816c92cde..cb37e528d43ca 100644
--- a/providers/apache/spark/tests/unit/apache/spark/decorators/test_pyspark.py
+++ b/providers/apache/spark/tests/unit/apache/spark/decorators/test_pyspark.py
@@ -103,11 +103,11 @@ def f(spark, sc):
             return [random.random() for _ in range(100)]
 
         with dag_maker():
-            ret = f()
+            f()
 
         dr = dag_maker.create_dagrun()
-        ret.operator.run(start_date=dr.logical_date, end_date=dr.logical_date)
         ti = dr.get_task_instances()[0]
+        ti.run()
         assert len(ti.xcom_pull()) == 100
         assert config.get("spark.master") == "spark://none"
         assert config.get("spark.executor.memory") == "2g"
@@ -130,11 +130,11 @@ def f():
             return e
 
         with dag_maker():
-            ret = f()
+            f()
 
         dr = dag_maker.create_dagrun()
-        ret.operator.run(start_date=dr.logical_date, end_date=dr.logical_date)
         ti = dr.get_task_instances()[0]
+        ti.run()
         assert ti.xcom_pull() == e
         assert config.get("spark.master") == "local[*]"
         spark_mock.builder.config.assert_called_once_with(conf=conf_mock())
@@ -154,11 +154,11 @@ def f(spark, sc):
             return True
 
         with dag_maker():
-            ret = f()
+            f()
 
         dr = dag_maker.create_dagrun()
-        ret.operator.run(start_date=dr.logical_date, end_date=dr.logical_date)
         ti = dr.get_task_instances()[0]
+        ti.run()
         assert ti.xcom_pull()
         assert config.get("spark.remote") == "sc://localhost"
         assert config.get("spark.master") is None
@@ -180,11 +180,11 @@ def f(spark, sc):
             return True
 
         with dag_maker():
-            ret = f()
+            f()
 
         dr = dag_maker.create_dagrun()
-        ret.operator.run(start_date=dr.logical_date, end_date=dr.logical_date)
         ti = dr.get_task_instances()[0]
+        ti.run()
         assert ti.xcom_pull()
         assert config.get("spark.remote") == "sc://localhost/;user_id=connect;token=1234;use_ssl=True"
         assert config.get("spark.master") is None
diff --git a/providers/google/tests/unit/google/marketing_platform/operators/test_campaign_manager.py b/providers/google/tests/unit/google/marketing_platform/operators/test_campaign_manager.py
index f5c03c85eb5dd..cb2af61d9d297 100644
--- a/providers/google/tests/unit/google/marketing_platform/operators/test_campaign_manager.py
+++ b/providers/google/tests/unit/google/marketing_platform/operators/test_campaign_manager.py
@@ -23,7 +23,7 @@
 
 import pytest
 
-from airflow.models import DAG, TaskInstance as TI
+from airflow.models import TaskInstance as TI
 from airflow.providers.google.marketing_platform.operators.campaign_manager import (
     GoogleCampaignManagerBatchInsertConversionsOperator,
     GoogleCampaignManagerBatchUpdateConversionsOperator,
@@ -153,7 +153,7 @@ def test_execute(
 
     @pytest.mark.parametrize(
         "test_bucket_name",
-        [BUCKET_NAME, f"gs://{BUCKET_NAME}", "XComArg", "{{ ti.xcom_pull(task_ids='f') }}"],
+        [BUCKET_NAME, f"gs://{BUCKET_NAME}", "XComArg", "{{ ti.xcom_pull(task_ids='taskflow_op') }}"],
     )
     @mock.patch("airflow.providers.google.marketing_platform.operators.campaign_manager.http")
     @mock.patch("airflow.providers.google.marketing_platform.operators.campaign_manager.tempfile")
@@ -168,6 +168,7 @@ def test_set_bucket_name(
         tempfile_mock,
         http_mock,
         test_bucket_name,
+        dag_maker,
     ):
         http_mock.MediaIoBaseDownload.return_value.next_chunk.return_value = (
             None,
@@ -175,33 +176,29 @@ def test_set_bucket_name(
         )
         tempfile_mock.NamedTemporaryFile.return_value.__enter__.return_value.name = TEMP_FILE_NAME
 
-        dag = DAG(
-            dag_id="test_set_bucket_name",
-            start_date=DEFAULT_DATE,
-            schedule=None,
-            catchup=False,
-        )
+        with dag_maker(dag_id="test_set_bucket_name", start_date=DEFAULT_DATE) as dag:
+            if BUCKET_NAME not in test_bucket_name:
 
-        if BUCKET_NAME not in test_bucket_name:
+                @dag.task(task_id="taskflow_op")
+                def f():
+                    return BUCKET_NAME
 
-            @dag.task
-            def f():
-                return BUCKET_NAME
+                taskflow_op = f()
 
-            taskflow_op = f()
-            taskflow_op.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            GoogleCampaignManagerDownloadReportOperator(
+                profile_id=PROFILE_ID,
+                report_id=REPORT_ID,
+                file_id=FILE_ID,
+                bucket_name=test_bucket_name if test_bucket_name != "XComArg" else taskflow_op,
+                report_name=REPORT_NAME,
+                api_version=API_VERSION,
+                task_id="test_task",
+            )
 
-        op = GoogleCampaignManagerDownloadReportOperator(
-            profile_id=PROFILE_ID,
-            report_id=REPORT_ID,
-            file_id=FILE_ID,
-            bucket_name=test_bucket_name if test_bucket_name != "XComArg" else taskflow_op,
-            report_name=REPORT_NAME,
-            api_version=API_VERSION,
-            task_id="test_task",
-            dag=dag,
-        )
-        op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dr = dag_maker.create_dagrun()
+
+        for ti in dr.get_task_instances():
+            ti.run()
 
         gcs_hook_mock.return_value.upload.assert_called_once_with(
             bucket_name=BUCKET_NAME,
diff --git a/providers/google/tests/unit/google/marketing_platform/operators/test_display_video.py b/providers/google/tests/unit/google/marketing_platform/operators/test_display_video.py
index 79f15a2cdae8f..8596743dd7d6b 100644
--- a/providers/google/tests/unit/google/marketing_platform/operators/test_display_video.py
+++ b/providers/google/tests/unit/google/marketing_platform/operators/test_display_video.py
@@ -24,7 +24,7 @@
 import pytest
 
 from airflow.exceptions import AirflowException
-from airflow.models import DAG, TaskInstance as TI
+from airflow.models import TaskInstance as TI
 from airflow.providers.google.marketing_platform.operators.display_video import (
     GoogleDisplayVideo360CreateQueryOperator,
     GoogleDisplayVideo360CreateSDFDownloadTaskOperator,
@@ -143,7 +143,7 @@ def test_execute(
 
     @pytest.mark.parametrize(
         "test_bucket_name",
-        [BUCKET_NAME, f"gs://{BUCKET_NAME}", "XComArg", "{{ ti.xcom_pull(task_ids='f') }}"],
+        [BUCKET_NAME, f"gs://{BUCKET_NAME}", "XComArg", "{{ ti.xcom_pull(task_ids='taskflow_op') }}"],
     )
     @mock.patch("airflow.providers.google.marketing_platform.operators.display_video.shutil")
     @mock.patch("airflow.providers.google.marketing_platform.operators.display_video.urllib.request")
@@ -160,37 +160,34 @@ def test_set_bucket_name(
         mock_request,
         mock_shutil,
         test_bucket_name,
+        dag_maker,
     ):
         mock_temp.NamedTemporaryFile.return_value.__enter__.return_value.name = FILENAME
         mock_hook.return_value.get_report.return_value = {
             "metadata": {"status": {"state": "DONE"}, "googleCloudStoragePath": "TEST"}
         }
 
-        dag = DAG(
-            dag_id="test_set_bucket_name",
-            start_date=DEFAULT_DATE,
-            schedule=None,
-            catchup=False,
-        )
+        with dag_maker(dag_id="test_set_bucket_name", start_date=DEFAULT_DATE) as dag:
+            if BUCKET_NAME not in test_bucket_name:
 
-        if BUCKET_NAME not in test_bucket_name:
+                @dag.task(task_id="taskflow_op")
+                def f():
+                    return BUCKET_NAME
 
-            @dag.task
-            def f():
-                return BUCKET_NAME
+                taskflow_op = f()
 
-            taskflow_op = f()
-            taskflow_op.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            GoogleDisplayVideo360DownloadReportV2Operator(
+                query_id=QUERY_ID,
+                report_id=REPORT_ID,
+                bucket_name=test_bucket_name if test_bucket_name != "XComArg" else taskflow_op,
+                report_name=REPORT_NAME,
+                task_id="test_task",
+            )
 
-        op = GoogleDisplayVideo360DownloadReportV2Operator(
-            query_id=QUERY_ID,
-            report_id=REPORT_ID,
-            bucket_name=test_bucket_name if test_bucket_name != "XComArg" else taskflow_op,
-            report_name=REPORT_NAME,
-            task_id="test_task",
-            dag=dag,
-        )
-        op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dr = dag_maker.create_dagrun()
+
+        for ti in dr.get_task_instances():
+            ti.run()
 
         mock_gcs_hook.return_value.upload.assert_called_once_with(
             bucket_name=BUCKET_NAME,
diff --git a/providers/openlineage/tests/system/openlineage/example_openlineage_base_complex_dag.py b/providers/openlineage/tests/system/openlineage/example_openlineage_base_complex_dag.py
index 43ddaab341a6f..fd97a4040a656 100644
--- a/providers/openlineage/tests/system/openlineage/example_openlineage_base_complex_dag.py
+++ b/providers/openlineage/tests/system/openlineage/example_openlineage_base_complex_dag.py
@@ -31,6 +31,7 @@
 from __future__ import annotations
 
 from datetime import datetime, timedelta
+from typing import Any
 
 from airflow import DAG
 from airflow.models import Variable
@@ -106,7 +107,9 @@ def __init__(self, **kwargs):
         task_5 = PythonOperator(task_id="task_5", python_callable=lambda: 1)
         with TaskGroup("section_2", parent_group=tg, tooltip="group_tooltip") as tg2:
             if AIRFLOW_VERSION.major == 3:
-                add_args = {"run_as_user": "some_user"}  # Random user break task execution on AF2
+                add_args: dict[str, Any] = {
+                    "run_as_user": "some_user"
+                }  # Random user break task execution on AF2
             else:
                 add_args = {"sla": timedelta(seconds=123)}  # type: ignore[dict-item] # SLA is not present in AF3 yet
             task_6 = EmptyOperator(task_id="task_6", on_success_callback=lambda x: print(1), **add_args)
diff --git a/providers/openlineage/tests/unit/openlineage/extractors/test_base.py b/providers/openlineage/tests/unit/openlineage/extractors/test_base.py
index d14933ca6e822..e2cf9e7e76301 100644
--- a/providers/openlineage/tests/unit/openlineage/extractors/test_base.py
+++ b/providers/openlineage/tests/unit/openlineage/extractors/test_base.py
@@ -24,7 +24,13 @@
 from openlineage.client.event_v2 import Dataset
 from openlineage.client.facet_v2 import BaseFacet, JobFacet, parent_run, sql_job
 
-from airflow.models.baseoperator import BaseOperator
+from airflow.providers.openlineage.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models.baseoperator import BaseOperator
+
 from airflow.models.taskinstance import TaskInstanceState
 from airflow.providers.openlineage.extractors.base import (
     BaseExtractor,
diff --git a/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py b/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
index 956b88e96dde8..0b686727a9a59 100644
--- a/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
+++ b/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
@@ -32,7 +32,13 @@
 from uuid6 import uuid7
 
 from airflow.models import DAG, DagRun, TaskInstance
-from airflow.models.baseoperator import BaseOperator
+from airflow.providers.openlineage.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models.baseoperator import BaseOperator
+
 from airflow.providers.openlineage.extractors.base import OperatorLineage
 from airflow.providers.openlineage.plugins.adapter import OpenLineageAdapter
 from airflow.providers.openlineage.plugins.listener import OpenLineageListener
diff --git a/providers/openlineage/tests/unit/openlineage/utils/test_utils.py b/providers/openlineage/tests/unit/openlineage/utils/test_utils.py
index 9130098e0bc50..753c6b166590b 100644
--- a/providers/openlineage/tests/unit/openlineage/utils/test_utils.py
+++ b/providers/openlineage/tests/unit/openlineage/utils/test_utils.py
@@ -30,10 +30,11 @@
 from airflow.utils import timezone
 
 if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import task
+    from airflow.sdk import BaseOperator, task
 else:
     from airflow.decorators import task
-from airflow.models.baseoperator import BaseOperator
+    from airflow.models.baseoperator import BaseOperator
+
 from airflow.models.dagrun import DagRun
 from airflow.models.taskinstance import TaskInstance, TaskInstanceState
 from airflow.providers.common.compat.assets import Asset
diff --git a/providers/snowflake/tests/unit/snowflake/decorators/test_snowpark.py b/providers/snowflake/tests/unit/snowflake/decorators/test_snowpark.py
index f51b5d6a6acca..1a3d39d0d1b3f 100644
--- a/providers/snowflake/tests/unit/snowflake/decorators/test_snowpark.py
+++ b/providers/snowflake/tests/unit/snowflake/decorators/test_snowpark.py
@@ -69,12 +69,11 @@ def func2():
             return number
 
         with dag_maker(dag_id=TEST_DAG_ID):
-            rets = [func1(), func2()]
+            _ = [func1(), func2()]
 
         dr = dag_maker.create_dagrun()
-        for ret in rets:
-            ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
         for ti in dr.get_task_instances():
+            ti.run()
             assert ti.xcom_pull() == number
         assert mock_snowflake_hook.call_count == 2
         assert mock_snowflake_hook.return_value.get_snowpark_session.call_count == 2
@@ -122,12 +121,11 @@ def func3(number: int):
             return number
 
         with dag_maker(dag_id=TEST_DAG_ID):
-            rets = [func1(number=number), func2(number=number), func3(number=number)]
+            _ = [func1(number=number), func2(number=number), func3(number=number)]
 
         dr = dag_maker.create_dagrun()
-        for ret in rets:
-            ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
         for ti in dr.get_task_instances():
+            ti.run()
             assert ti.xcom_pull() == number
         assert mock_snowflake_hook.call_count == 3
         assert mock_snowflake_hook.return_value.get_snowpark_session.call_count == 3
@@ -147,11 +145,11 @@ def func(session: Session):
             assert session == mock_snowflake_hook.return_value.get_snowpark_session.return_value
 
         with dag_maker(dag_id=TEST_DAG_ID):
-            ret = func()
+            func()
 
         dr = dag_maker.create_dagrun()
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
         for ti in dr.get_task_instances():
+            ti.run()
             assert ti.xcom_pull() is None
         mock_snowflake_hook.assert_called_once()
         mock_snowflake_hook.return_value.get_snowpark_session.assert_called_once()
@@ -181,11 +179,11 @@ def func(session: Session):
             assert run_task.xcom.get(key="return_value") == {"a": 1, "b": "2"}
         else:
             with dag_maker(dag_id=TEST_DAG_ID):
-                ret = func()
+                func()
 
             dr = dag_maker.create_dagrun()
-            ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
             ti = dr.get_task_instances()[0]
+            ti.run()
             assert ti.xcom_pull(key="a") == 1
             assert ti.xcom_pull(key="b") == "2"
             assert ti.xcom_pull() == {"a": 1, "b": "2"}
@@ -216,11 +214,11 @@ def func(session: Session):
             return session.query_tag
 
         with dag_maker(dag_id=TEST_DAG_ID):
-            ret = func()
+            func()
 
         dr = dag_maker.create_dagrun()
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
         ti = dr.get_task_instances()[0]
+        ti.run()
         query_tag = ti.xcom_pull()
         assert query_tag == {
             "dag_id": TEST_DAG_ID,
diff --git a/providers/snowflake/tests/unit/snowflake/operators/test_snowpark.py b/providers/snowflake/tests/unit/snowflake/operators/test_snowpark.py
index b39bf3c105cab..2d44f5d44bc84 100644
--- a/providers/snowflake/tests/unit/snowflake/operators/test_snowpark.py
+++ b/providers/snowflake/tests/unit/snowflake/operators/test_snowpark.py
@@ -51,7 +51,7 @@ def func1(session: Session):
             def func2():
                 return number
 
-            operators = [
+            _ = [
                 SnowparkOperator(
                     task_id=f"{TASK_ID}_{i}",
                     snowflake_conn_id=CONN_ID,
@@ -67,9 +67,8 @@ def func2():
             ]
 
         dr = dag_maker.create_dagrun()
-        for operator in operators:
-            operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
         for ti in dr.get_task_instances():
+            ti.run()
             assert ti.xcom_pull() == number
         assert mock_snowflake_hook.call_count == 2
         assert mock_snowflake_hook.return_value.get_snowpark_session.call_count == 2
@@ -91,7 +90,7 @@ def func2(number: int, session: Session):
             def func3(number: int):
                 return number
 
-            operators = [
+            _ = [
                 SnowparkOperator(
                     task_id=f"{TASK_ID}_{i}",
                     snowflake_conn_id=CONN_ID,
@@ -108,9 +107,8 @@ def func3(number: int):
             ]
 
         dr = dag_maker.create_dagrun()
-        for operator in operators:
-            operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
         for ti in dr.get_task_instances():
+            ti.run()
             assert ti.xcom_pull() == number
         assert mock_snowflake_hook.call_count == 3
         assert mock_snowflake_hook.return_value.get_snowpark_session.call_count == 3
@@ -122,7 +120,7 @@ def test_snowpark_operator_no_return(self, mock_snowflake_hook, dag_maker):
             def func(session: Session):
                 assert session == mock_snowflake_hook.return_value.get_snowpark_session.return_value
 
-            operator = SnowparkOperator(
+            SnowparkOperator(
                 task_id=TASK_ID,
                 snowflake_conn_id=CONN_ID,
                 python_callable=func,
@@ -135,8 +133,8 @@ def func(session: Session):
             )
 
         dr = dag_maker.create_dagrun()
-        operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
         for ti in dr.get_task_instances():
+            ti.run()
             assert ti.xcom_pull() is None
         mock_snowflake_hook.assert_called_once()
         mock_snowflake_hook.return_value.get_snowpark_session.assert_called_once()
@@ -157,7 +155,7 @@ def update_query_tag(new_tags):
             def func(session: Session):
                 return session.query_tag
 
-            operator = SnowparkOperator(
+            SnowparkOperator(
                 task_id=TASK_ID,
                 snowflake_conn_id=CONN_ID,
                 python_callable=func,
@@ -170,8 +168,8 @@ def func(session: Session):
             )
 
         dr = dag_maker.create_dagrun()
-        operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
         ti = dr.get_task_instances()[0]
+        ti.run()
         query_tag = ti.xcom_pull()
         assert query_tag == {
             "dag_id": TEST_DAG_ID,
diff --git a/providers/standard/src/airflow/providers/standard/operators/bash.py b/providers/standard/src/airflow/providers/standard/operators/bash.py
index 84db1e081e7f2..3195b33456c59 100644
--- a/providers/standard/src/airflow/providers/standard/operators/bash.py
+++ b/providers/standard/src/airflow/providers/standard/operators/bash.py
@@ -25,9 +25,13 @@
 from typing import TYPE_CHECKING, Any, Callable, cast
 
 from airflow.exceptions import AirflowException, AirflowSkipException
-from airflow.models.baseoperator import BaseOperator
 from airflow.providers.standard.hooks.subprocess import SubprocessHook, SubprocessResult, working_directory
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
+from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS, AIRFLOW_V_3_1_PLUS
+
+if AIRFLOW_V_3_1_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models.baseoperator import BaseOperator
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.context import context_to_airflow_vars
diff --git a/providers/standard/src/airflow/providers/standard/operators/branch.py b/providers/standard/src/airflow/providers/standard/operators/branch.py
index cc50d1e25d6fa..44c958c4f2eea 100644
--- a/providers/standard/src/airflow/providers/standard/operators/branch.py
+++ b/providers/standard/src/airflow/providers/standard/operators/branch.py
@@ -22,8 +22,12 @@
 from collections.abc import Iterable
 from typing import TYPE_CHECKING
 
-from airflow.models.baseoperator import BaseOperator
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
+from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS, AIRFLOW_V_3_1_PLUS
+
+if AIRFLOW_V_3_1_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models.baseoperator import BaseOperator
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.providers.standard.utils.skipmixin import SkipMixin
diff --git a/providers/standard/src/airflow/providers/standard/operators/empty.py b/providers/standard/src/airflow/providers/standard/operators/empty.py
index dc906b4b3c17b..4cbd6254d4a9e 100644
--- a/providers/standard/src/airflow/providers/standard/operators/empty.py
+++ b/providers/standard/src/airflow/providers/standard/operators/empty.py
@@ -18,7 +18,12 @@
 
 from typing import TYPE_CHECKING
 
-from airflow.models.baseoperator import BaseOperator
+from airflow.providers.standard.version_compat import AIRFLOW_V_3_1_PLUS
+
+if AIRFLOW_V_3_1_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models.baseoperator import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.sdk.definitions.context import Context
diff --git a/providers/standard/src/airflow/providers/standard/operators/python.py b/providers/standard/src/airflow/providers/standard/operators/python.py
index 5a8bd9e87b657..54ae1bc3200a6 100644
--- a/providers/standard/src/airflow/providers/standard/operators/python.py
+++ b/providers/standard/src/airflow/providers/standard/operators/python.py
@@ -48,16 +48,20 @@
     AirflowSkipException,
     DeserializingResultError,
 )
-from airflow.models.baseoperator import BaseOperator
 from airflow.models.variable import Variable
 from airflow.providers.standard.utils.python_virtualenv import prepare_virtualenv, write_python_script
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
+from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS, AIRFLOW_V_3_1_PLUS
 from airflow.utils import hashlib_wrapper
 from airflow.utils.context import context_copy_partial, context_merge
 from airflow.utils.file import get_unique_dag_module_name
 from airflow.utils.operator_helpers import KeywordParameters
 from airflow.utils.process_utils import execute_in_subprocess
 
+if AIRFLOW_V_3_1_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models.baseoperator import BaseOperator
+
 if AIRFLOW_V_3_0_PLUS:
     from airflow.providers.standard.operators.branch import BaseBranchOperator
     from airflow.providers.standard.utils.skipmixin import SkipMixin
diff --git a/providers/standard/src/airflow/providers/standard/operators/smooth.py b/providers/standard/src/airflow/providers/standard/operators/smooth.py
index 8aeb35a160045..33f089421f741 100644
--- a/providers/standard/src/airflow/providers/standard/operators/smooth.py
+++ b/providers/standard/src/airflow/providers/standard/operators/smooth.py
@@ -19,7 +19,12 @@
 
 from typing import TYPE_CHECKING
 
-from airflow.models.baseoperator import BaseOperator
+from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models.baseoperator import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.sdk.definitions.context import Context
diff --git a/providers/standard/src/airflow/providers/standard/sensors/external_task.py b/providers/standard/src/airflow/providers/standard/sensors/external_task.py
index aa8a971a526b8..7c48f9a449b04 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/external_task.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/external_task.py
@@ -54,11 +54,10 @@
 
     from airflow.models.taskinstancekey import TaskInstanceKey
 
-    try:
+    if AIRFLOW_V_3_0_PLUS:
         from airflow.sdk import BaseOperator
         from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
+    else:
         from airflow.models.baseoperator import BaseOperator
         from airflow.utils.context import Context
 
diff --git a/providers/standard/src/airflow/providers/standard/utils/skipmixin.py b/providers/standard/src/airflow/providers/standard/utils/skipmixin.py
index 525662c970532..5cfb577cd2f7c 100644
--- a/providers/standard/src/airflow/providers/standard/utils/skipmixin.py
+++ b/providers/standard/src/airflow/providers/standard/utils/skipmixin.py
@@ -22,13 +22,18 @@
 from typing import TYPE_CHECKING
 
 from airflow.exceptions import AirflowException
+from airflow.providers.standard.version_compat import AIRFLOW_V_3_1_PLUS
 from airflow.utils.log.logging_mixin import LoggingMixin
 
 if TYPE_CHECKING:
-    from airflow.models.operator import Operator
     from airflow.sdk.definitions._internal.node import DAGNode
     from airflow.sdk.types import RuntimeTaskInstanceProtocol
 
+    if AIRFLOW_V_3_1_PLUS:
+        from airflow.sdk.types import Operator
+    else:
+        from airflow.models.operator import Operator
+
 # The key used by SkipMixin to store XCom data.
 XCOM_SKIPMIXIN_KEY = "skipmixin_key"
 
@@ -40,8 +45,12 @@
 
 
 def _ensure_tasks(nodes: Iterable[DAGNode]) -> Sequence[Operator]:
-    from airflow.models.baseoperator import BaseOperator
-    from airflow.models.mappedoperator import MappedOperator
+    if AIRFLOW_V_3_1_PLUS:
+        from airflow.sdk import BaseOperator
+        from airflow.sdk.definitions.mappedoperator import MappedOperator
+    else:
+        from airflow.models.baseoperator import BaseOperator
+        from airflow.models.mappedoperator import MappedOperator
 
     return [n for n in nodes if isinstance(n, (BaseOperator, MappedOperator))]
 
diff --git a/providers/standard/src/airflow/providers/standard/version_compat.py b/providers/standard/src/airflow/providers/standard/version_compat.py
index 48d122b669696..42bdcc7da03df 100644
--- a/providers/standard/src/airflow/providers/standard/version_compat.py
+++ b/providers/standard/src/airflow/providers/standard/version_compat.py
@@ -33,3 +33,4 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+AIRFLOW_V_3_1_PLUS = get_base_airflow_version_tuple() >= (3, 1, 0)
diff --git a/providers/standard/tests/unit/standard/decorators/test_branch_external_python.py b/providers/standard/tests/unit/standard/decorators/test_branch_external_python.py
index f0283c0307493..ceaf5df5fae1e 100644
--- a/providers/standard/tests/unit/standard/decorators/test_branch_external_python.py
+++ b/providers/standard/tests/unit/standard/decorators/test_branch_external_python.py
@@ -79,19 +79,15 @@ def branch_operator():
             branchoperator.set_downstream(task_2)
 
         dr = dag_maker.create_dagrun()
-        df.operator.run(start_date=dr.logical_date, end_date=dr.logical_date, ignore_ti_state=True)
+        dag_maker.run_ti("dummy_f", dr)
         if AIRFLOW_V_3_0_1:
             with pytest.raises(DownstreamTasksSkipped) as exc_info:
-                branchoperator.operator.run(
-                    start_date=dr.logical_date, end_date=dr.logical_date, ignore_ti_state=True
-                )
+                dag_maker.run_ti("branching", dr)
             assert exc_info.value.tasks == [(skipped_task_name, -1)]
         else:
-            branchoperator.operator.run(
-                start_date=dr.logical_date, end_date=dr.logical_date, ignore_ti_state=True
-            )
-            task_1.operator.run(start_date=dr.logical_date, end_date=dr.logical_date, ignore_ti_state=True)
-            task_2.operator.run(start_date=dr.logical_date, end_date=dr.logical_date, ignore_ti_state=True)
+            dag_maker.run_ti("branching", dr)
+            dag_maker.run_ti("task_1", dr)
+            dag_maker.run_ti("task_2", dr)
             tis = dr.get_task_instances()
 
             for ti in tis:
diff --git a/providers/standard/tests/unit/standard/decorators/test_branch_python.py b/providers/standard/tests/unit/standard/decorators/test_branch_python.py
index 3d8a46d7a37cd..c9475acec1dd0 100644
--- a/providers/standard/tests/unit/standard/decorators/test_branch_python.py
+++ b/providers/standard/tests/unit/standard/decorators/test_branch_python.py
@@ -66,19 +66,15 @@ def branch_operator():
             branchoperator.set_downstream(task_2)
 
         dr = dag_maker.create_dagrun()
-        df.operator.run(start_date=dr.logical_date, end_date=dr.logical_date, ignore_ti_state=True)
+        dag_maker.run_ti("dummy_f", dr)
         if AIRFLOW_V_3_0_1:
             with pytest.raises(DownstreamTasksSkipped) as exc_info:
-                branchoperator.operator.run(
-                    start_date=dr.logical_date, end_date=dr.logical_date, ignore_ti_state=True
-                )
+                dag_maker.run_ti("branching", dr)
             assert exc_info.value.tasks == [(skipped_task_name, -1)]
         else:
-            branchoperator.operator.run(
-                start_date=dr.logical_date, end_date=dr.logical_date, ignore_ti_state=True
-            )
-            task_1.operator.run(start_date=dr.logical_date, end_date=dr.logical_date, ignore_ti_state=True)
-            task_2.operator.run(start_date=dr.logical_date, end_date=dr.logical_date, ignore_ti_state=True)
+            dag_maker.run_ti("branching", dr)
+            dag_maker.run_ti("task_1", dr)
+            dag_maker.run_ti("task_2", dr)
             tis = dr.get_task_instances()
 
             for ti in tis:
diff --git a/providers/standard/tests/unit/standard/decorators/test_branch_virtualenv.py b/providers/standard/tests/unit/standard/decorators/test_branch_virtualenv.py
index 170916c21a31b..271855f4f4b24 100644
--- a/providers/standard/tests/unit/standard/decorators/test_branch_virtualenv.py
+++ b/providers/standard/tests/unit/standard/decorators/test_branch_virtualenv.py
@@ -95,19 +95,15 @@ def branch_operator():
             branchoperator.set_downstream(task_2)
 
         dr = dag_maker.create_dagrun()
-        df.operator.run(start_date=dr.logical_date, end_date=dr.logical_date, ignore_ti_state=True)
+        dag_maker.run_ti("dummy_f", dr)
         if AIRFLOW_V_3_0_1:
             with pytest.raises(DownstreamTasksSkipped) as exc_info:
-                branchoperator.operator.run(
-                    start_date=dr.logical_date, end_date=dr.logical_date, ignore_ti_state=True
-                )
+                dag_maker.run_ti("branching", dr)
             assert exc_info.value.tasks == [(skipped_task_name, -1)]
         else:
-            branchoperator.operator.run(
-                start_date=dr.logical_date, end_date=dr.logical_date, ignore_ti_state=True
-            )
-            task_1.operator.run(start_date=dr.logical_date, end_date=dr.logical_date, ignore_ti_state=True)
-            task_2.operator.run(start_date=dr.logical_date, end_date=dr.logical_date, ignore_ti_state=True)
+            dag_maker.run_ti("branching", dr)
+            dag_maker.run_ti("task_1", dr)
+            dag_maker.run_ti("task_2", dr)
             tis = dr.get_task_instances()
 
             for ti in tis:
diff --git a/providers/standard/tests/unit/standard/decorators/test_external_python.py b/providers/standard/tests/unit/standard/decorators/test_external_python.py
index 1b4bba68c2430..9c532616cedbf 100644
--- a/providers/standard/tests/unit/standard/decorators/test_external_python.py
+++ b/providers/standard/tests/unit/standard/decorators/test_external_python.py
@@ -81,10 +81,11 @@ def f():
             import dill  # noqa: F401
 
         with dag_maker(serialized=True):
-            ret = f()
-        dag_maker.create_dagrun()
+            f()
 
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dr = dag_maker.create_dagrun()
+        ti = dr.get_task_instances()[0]
+        ti.run()
 
     @pytest.mark.parametrize(
         "serializer",
@@ -106,10 +107,10 @@ def f():
             import dill  # noqa: F401
 
         with dag_maker(serialized=True):
-            ret = f()
-        dag_maker.create_dagrun()
-
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            f()
+        dr = dag_maker.create_dagrun()
+        ti = dr.get_task_instances()[0]
+        ti.run()
 
     @pytest.mark.parametrize(
         "serializer",
@@ -124,11 +125,12 @@ def f():
             pass
 
         with dag_maker(serialized=True):
-            ret = f()
-        dag_maker.create_dagrun()
+            f()
+        dr = dag_maker.create_dagrun()
+        ti = dr.get_task_instances()[0]
 
         with pytest.raises(CalledProcessError):
-            ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            ti.run()
 
     def test_exception_raises_error(self, dag_maker, venv_python):
         @task.external_python(python=venv_python)
@@ -136,11 +138,12 @@ def f():
             raise Exception
 
         with dag_maker(serialized=True):
-            ret = f()
-        dag_maker.create_dagrun()
+            f()
+        dr = dag_maker.create_dagrun()
+        ti = dr.get_task_instances()[0]
 
         with pytest.raises(CalledProcessError):
-            ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            ti.run()
 
     @pytest.mark.parametrize(
         "serializer",
@@ -159,10 +162,10 @@ def f(a, b, c=False, d=False):
             raise Exception
 
         with dag_maker(serialized=True):
-            ret = f(0, 1, c=True)
-        dag_maker.create_dagrun()
-
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            f(0, 1, c=True)
+        dr = dag_maker.create_dagrun()
+        ti = dr.get_task_instances()[0]
+        ti.run()
 
     @pytest.mark.parametrize(
         "serializer",
@@ -179,10 +182,11 @@ def f():
             return None
 
         with dag_maker(serialized=True):
-            ret = f()
-        dag_maker.create_dagrun()
+            f()
 
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dr = dag_maker.create_dagrun()
+        ti = dr.get_task_instances()[0]
+        ti.run()
 
     @pytest.mark.parametrize(
         "serializer",
@@ -199,10 +203,11 @@ def f(_):
             return None
 
         with dag_maker(serialized=True):
-            ret = f(datetime.datetime.now(tz=datetime.timezone.utc))
-        dag_maker.create_dagrun()
+            f(datetime.datetime.now(tz=datetime.timezone.utc))
 
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dr = dag_maker.create_dagrun()
+        ti = dr.get_task_instances()[0]
+        ti.run()
 
     @pytest.mark.parametrize(
         "serializer",
@@ -222,13 +227,14 @@ def f():
             return 1
 
         with dag_maker(serialized=True) as dag:
-            ret = f()
-        dag_maker.create_dagrun()
+            f()
+        dr = dag_maker.create_dagrun()
 
         assert len(dag.task_group.children) == 1
         setup_task = dag.task_group.children["f"]
         assert setup_task.is_setup
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        ti = dr.get_task_instances()[0]
+        ti.run()
 
     @pytest.mark.parametrize(
         "serializer",
@@ -248,13 +254,14 @@ def f():
             return 1
 
         with dag_maker(serialized=True) as dag:
-            ret = f()
-        dag_maker.create_dagrun()
+            f()
+        dr = dag_maker.create_dagrun()
 
         assert len(dag.task_group.children) == 1
         teardown_task = dag.task_group.children["f"]
         assert teardown_task.is_teardown
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        ti = dr.get_task_instances()[0]
+        ti.run()
 
     @pytest.mark.parametrize(
         "serializer",
@@ -275,11 +282,12 @@ def f():
             return 1
 
         with dag_maker(serialized=True) as dag:
-            ret = f()
-        dag_maker.create_dagrun()
+            f()
+        dr = dag_maker.create_dagrun()
 
         assert len(dag.task_group.children) == 1
         teardown_task = dag.task_group.children["f"]
         assert teardown_task.is_teardown
         assert teardown_task.on_failure_fail_dagrun is on_failure_fail_dagrun
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        ti = dr.get_task_instances()[0]
+        ti.run()
diff --git a/providers/standard/tests/unit/standard/decorators/test_python.py b/providers/standard/tests/unit/standard/decorators/test_python.py
index ed8d5ef0cdb97..4bab68cc04789 100644
--- a/providers/standard/tests/unit/standard/decorators/test_python.py
+++ b/providers/standard/tests/unit/standard/decorators/test_python.py
@@ -27,10 +27,8 @@
 from airflow.models.taskinstance import TaskInstance
 from airflow.models.taskmap import TaskMap
 from airflow.utils import timezone
-from airflow.utils.state import State
 from airflow.utils.task_instance_session import set_current_task_instance_session
 from airflow.utils.trigger_rule import TriggerRule
-from airflow.utils.types import DagRunType
 from airflow.utils.xcom import XCOM_RETURN_KEY
 
 from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_1, AIRFLOW_V_3_0_PLUS
@@ -41,7 +39,6 @@
     from airflow.sdk.bases.decorator import DecoratedMappedOperator
     from airflow.sdk.definitions._internal.expandinput import DictOfListsExpandInput
     from airflow.sdk.definitions.mappedoperator import MappedOperator
-    from airflow.utils.types import DagRunTriggeredByType
 else:
     from airflow.decorators import setup, task as task_decorator, teardown
     from airflow.decorators.base import DecoratedMappedOperator  # type: ignore[no-redef]
@@ -317,56 +314,56 @@ class Test:
                 def add_number(self, num: int) -> int:
                     return self.num + num
 
-    def test_fail_multiple_outputs_key_type(self):
+    def test_fail_multiple_outputs_key_type(self, dag_maker):
         @task_decorator(multiple_outputs=True)
         def add_number(num: int):
             return {2: num}
 
-        with self.dag_non_serialized:
-            ret = add_number(2)
+        with dag_maker():
+            add_number(2)
 
-        self.create_dag_run()
+        dr = dag_maker.create_dagrun()
 
         error_expected = AirflowException if (not AIRFLOW_V_3_0_PLUS or AIRFLOW_V_3_0_1) else TypeError
         with pytest.raises(error_expected):
-            ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            dag_maker.run_ti("add_number", dr)
 
-    def test_fail_multiple_outputs_no_dict(self):
+    def test_fail_multiple_outputs_no_dict(self, dag_maker):
         @task_decorator(multiple_outputs=True)
         def add_number(num: int):
             return num
 
-        with self.dag_non_serialized:
-            ret = add_number(2)
+        with dag_maker():
+            add_number(2)
 
-        self.create_dag_run()
+        dr = dag_maker.create_dagrun()
         error_expected = AirflowException if (not AIRFLOW_V_3_0_PLUS or AIRFLOW_V_3_0_1) else TypeError
         with pytest.raises(error_expected):
-            ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            dag_maker.run_ti("add_number", dr)
 
-    def test_multiple_outputs_empty_dict(self):
+    def test_multiple_outputs_empty_dict(self, dag_maker):
         @task_decorator(multiple_outputs=True)
         def empty_dict():
             return {}
 
-        with self.dag_non_serialized:
-            ret = empty_dict()
+        with dag_maker():
+            empty_dict()
 
-        dr = self.create_dag_run()
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dr = dag_maker.create_dagrun()
+        dag_maker.run_ti("empty_dict", dr)
         ti = dr.get_task_instances()[0]
         assert ti.xcom_pull() == {}
 
-    def test_multiple_outputs_return_none(self):
+    def test_multiple_outputs_return_none(self, dag_maker):
         @task_decorator(multiple_outputs=True)
         def test_func():
             return
 
-        with self.dag_non_serialized:
-            ret = test_func()
+        with dag_maker():
+            test_func()
 
-        dr = self.create_dag_run()
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dr = dag_maker.create_dagrun()
+        dag_maker.run_ti("test_func", dr)
         ti = dr.get_task_instances()[0]
         assert ti.xcom_pull() is None
 
@@ -472,7 +469,7 @@ def __do_run():
 
         assert self.dag_non_serialized.task_ids[-1] == "__do_run__20"
 
-    def test_multiple_outputs(self):
+    def test_multiple_outputs(self, dag_maker):
         """Tests pushing multiple outputs as a dictionary"""
 
         @task_decorator(multiple_outputs=True)
@@ -480,32 +477,11 @@ def return_dict(number: int):
             return {"number": number + 1, "43": 43}
 
         test_number = 10
-        with self.dag_non_serialized:
-            ret = return_dict(test_number)
-
-        v3_kwargs = (
-            {
-                "run_after": DEFAULT_DATE,
-                "triggered_by": DagRunTriggeredByType.TEST,
-                "logical_date": DEFAULT_DATE,
-            }
-            if AIRFLOW_V_3_0_PLUS
-            else {
-                "execution_date": DEFAULT_DATE,
-            }
-        )
-        dr = self.dag_non_serialized.create_dagrun(
-            run_id="test",
-            run_type=DagRunType.MANUAL,
-            start_date=timezone.utcnow(),
-            state=State.RUNNING,
-            data_interval=self.dag_non_serialized.timetable.infer_manual_data_interval(
-                run_after=DEFAULT_DATE
-            ),
-            **v3_kwargs,
-        )
+        with dag_maker():
+            return_dict(test_number)
 
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dr = dag_maker.create_dagrun()
+        dag_maker.run_ti("return_dict", dr)
 
         ti = dr.get_task_instances()[0]
         assert ti.xcom_pull(key="number") == test_number + 1
@@ -540,7 +516,7 @@ def test_apply_default(owner):
             ret = test_apply_default()
         assert "owner" in ret.operator.op_kwargs
 
-    def test_xcom_arg(self):
+    def test_xcom_arg(self, dag_maker):
         """Tests that returned key in XComArg is returned correctly"""
 
         @task_decorator
@@ -553,35 +529,15 @@ def add_num(number: int, num2: int = 2):
 
         test_number = 10
 
-        with self.dag_non_serialized:
+        with dag_maker():
             bigger_number = add_2(test_number)
             ret = add_num(bigger_number, XComArg(bigger_number.operator))
 
-        v3_kwargs = (
-            {
-                "run_after": DEFAULT_DATE,
-                "triggered_by": DagRunTriggeredByType.TEST,
-                "logical_date": DEFAULT_DATE,
-            }
-            if AIRFLOW_V_3_0_PLUS
-            else {
-                "execution_date": DEFAULT_DATE,
-            }
-        )
-        dr = self.dag_non_serialized.create_dagrun(
-            run_id="test",
-            run_type=DagRunType.MANUAL,
-            start_date=timezone.utcnow(),
-            state=State.RUNNING,
-            data_interval=self.dag_non_serialized.timetable.infer_manual_data_interval(
-                run_after=DEFAULT_DATE
-            ),
-            **v3_kwargs,
-        )
+        dr = dag_maker.create_dagrun()
 
-        bigger_number.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dag_maker.run_ti("add_2", dr)
+        dag_maker.run_ti("add_num", dr)
 
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
         ti_add_num = next(ti for ti in dr.get_task_instances() if ti.task_id == "add_num")
         assert ti_add_num.xcom_pull(key=ret.key) == (test_number + 2) * 2
 
@@ -680,7 +636,7 @@ def hello():
             weights.append(task.priority_weight)
         assert weights == [0, 1, 2]
 
-    def test_python_callable_args_work_as_well_as_baseoperator_args(self):
+    def test_python_callable_args_work_as_well_as_baseoperator_args(self, dag_maker):
         """Tests that when looping that user provided pool, priority_weight etc is used"""
 
         @task_decorator(task_id="hello_task")
@@ -691,14 +647,15 @@ def hello(x, y):
             print("Hello world", x, y)
             return x, y
 
-        with self.dag_non_serialized:
+        with dag_maker():
             output = hello.override(task_id="mytask")(x=2, y=3)
             output2 = hello.override()(2, 3)  # nothing overridden but should work
 
+        dr = dag_maker.create_dagrun()
         assert output.operator.op_kwargs == {"x": 2, "y": 3}
         assert output2.operator.op_args == (2, 3)
-        output.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
-        output2.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dag_maker.run_ti("mytask", dr)
+        dag_maker.run_ti("hello_task", dr)
 
 
 def test_mapped_decorator_shadow_context() -> None:
diff --git a/providers/standard/tests/unit/standard/decorators/test_python_virtualenv.py b/providers/standard/tests/unit/standard/decorators/test_python_virtualenv.py
index f67fa6a947518..8c26da96b7a5f 100644
--- a/providers/standard/tests/unit/standard/decorators/test_python_virtualenv.py
+++ b/providers/standard/tests/unit/standard/decorators/test_python_virtualenv.py
@@ -57,10 +57,10 @@ def f():
             import cloudpickle  # noqa: F401
 
         with dag_maker(serialized=True):
-            ret = f()
-        dag_maker.create_dagrun()
+            f()
+        dr = dag_maker.create_dagrun()
 
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dag_maker.run_ti("f", dr)
 
     @DILL_MARKER
     def test_add_dill(self, dag_maker):
@@ -70,10 +70,10 @@ def f():
             import dill  # noqa: F401
 
         with dag_maker(serialized=True):
-            ret = f()
-        dag_maker.create_dagrun()
+            f()
+        dr = dag_maker.create_dagrun()
 
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dag_maker.run_ti("f", dr)
 
     def test_no_requirements(self, dag_maker):
         """Tests that the python callable is invoked on task run."""
@@ -83,10 +83,10 @@ def f():
             pass
 
         with dag_maker(serialized=True):
-            ret = f()
-        dag_maker.create_dagrun()
+            f()
+        dr = dag_maker.create_dagrun()
 
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dag_maker.run_ti("f", dr)
 
     @pytest.mark.parametrize(
         "serializer",
@@ -105,10 +105,10 @@ def f():
             raise Exception
 
         with dag_maker(serialized=True):
-            ret = f()
-        dag_maker.create_dagrun()
+            f()
+        dr = dag_maker.create_dagrun()
 
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dag_maker.run_ti("f", dr)
 
     @pytest.mark.parametrize(
         "serializer",
@@ -128,10 +128,10 @@ def f():
             import funcsigs  # noqa: F401
 
         with dag_maker(serialized=True):
-            ret = f()
-        dag_maker.create_dagrun()
+            f()
+        dr = dag_maker.create_dagrun()
 
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dag_maker.run_ti("f", dr)
 
     @pytest.mark.parametrize(
         "serializer",
@@ -156,10 +156,10 @@ def f():
                 raise Exception
 
         with dag_maker(serialized=True):
-            ret = f()
-        dag_maker.create_dagrun()
+            f()
+        dr = dag_maker.create_dagrun()
 
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dag_maker.run_ti("f", dr)
 
     @pytest.mark.parametrize(
         "serializer",
@@ -192,10 +192,10 @@ def f():
                 raise Exception
 
         with dag_maker(template_searchpath=tmp_path.as_posix(), serialized=True):
-            ret = f()
-        dag_maker.create_dagrun()
+            f()
+        dr = dag_maker.create_dagrun()
 
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dag_maker.run_ti("f", dr)
 
     @pytest.mark.parametrize(
         "serializer, extra_requirements",
@@ -217,10 +217,10 @@ def f():
             import funcsigs  # noqa: F401
 
         with dag_maker(serialized=True):
-            ret = f()
-        dag_maker.create_dagrun()
+            f()
+        dr = dag_maker.create_dagrun()
 
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dag_maker.run_ti("f", dr)
 
     @pytest.mark.parametrize(
         "serializer",
@@ -237,11 +237,11 @@ def f():
             raise Exception
 
         with dag_maker(serialized=True):
-            ret = f()
-        dag_maker.create_dagrun()
+            f()
+        dr = dag_maker.create_dagrun()
 
         with pytest.raises(CalledProcessError):
-            ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            dag_maker.run_ti("f", dr)
 
     @pytest.mark.parametrize(
         "serializer, extra_requirements",
@@ -265,10 +265,10 @@ def f():
             raise Exception
 
         with dag_maker(serialized=True):
-            ret = f()
-        dag_maker.create_dagrun()
+            f()
+        dr = dag_maker.create_dagrun()
 
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dag_maker.run_ti("f", dr)
 
     @pytest.mark.parametrize(
         "serializer, extra_requirements",
@@ -287,10 +287,10 @@ def f(a, b, c=False, d=False):
             raise Exception
 
         with dag_maker(serialized=True):
-            ret = f(0, 1, c=True)
-        dag_maker.create_dagrun()
+            f(0, 1, c=True)
+        dr = dag_maker.create_dagrun()
 
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dag_maker.run_ti("f", dr)
 
     def test_return_none(self, dag_maker):
         @task.virtualenv
@@ -298,10 +298,10 @@ def f():
             return None
 
         with dag_maker(serialized=True):
-            ret = f()
-        dag_maker.create_dagrun()
+            f()
+        dr = dag_maker.create_dagrun()
 
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dag_maker.run_ti("f", dr)
 
     def test_nonimported_as_arg(self, dag_maker):
         @task.virtualenv
@@ -309,10 +309,10 @@ def f(_):
             return None
 
         with dag_maker(serialized=True):
-            ret = f(datetime.datetime.now(tz=datetime.timezone.utc))
-        dag_maker.create_dagrun()
+            f(datetime.datetime.now(tz=datetime.timezone.utc))
+        dr = dag_maker.create_dagrun()
 
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dag_maker.run_ti("f", dr)
 
     def test_marking_virtualenv_python_task_as_setup(self, dag_maker):
         @setup
@@ -321,13 +321,13 @@ def f():
             return 1
 
         with dag_maker(serialized=True) as dag:
-            ret = f()
-        dag_maker.create_dagrun()
+            f()
+        dr = dag_maker.create_dagrun()
 
         assert len(dag.task_group.children) == 1
         setup_task = dag.task_group.children["f"]
         assert setup_task.is_setup
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dag_maker.run_ti("f", dr)
 
     def test_marking_virtualenv_python_task_as_teardown(self, dag_maker):
         @teardown
@@ -336,13 +336,13 @@ def f():
             return 1
 
         with dag_maker(serialized=True) as dag:
-            ret = f()
-        dag_maker.create_dagrun()
+            f()
+        dr = dag_maker.create_dagrun()
 
         assert len(dag.task_group.children) == 1
         teardown_task = dag.task_group.children["f"]
         assert teardown_task.is_teardown
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dag_maker.run_ti("f", dr)
 
     @pytest.mark.parametrize("on_failure_fail_dagrun", [True, False])
     def test_marking_virtualenv_python_task_as_teardown_with_on_failure_fail(
@@ -354,14 +354,14 @@ def f():
             return 1
 
         with dag_maker(serialized=True) as dag:
-            ret = f()
-        dag_maker.create_dagrun()
+            f()
+        dr = dag_maker.create_dagrun()
 
         assert len(dag.task_group.children) == 1
         teardown_task = dag.task_group.children["f"]
         assert teardown_task.is_teardown
         assert teardown_task.on_failure_fail_dagrun is on_failure_fail_dagrun
-        ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dag_maker.run_ti("f", dr)
 
     def test_invalid_annotation(self, dag_maker):
         import uuid
@@ -377,10 +377,10 @@ def in_venv(value: dict[str, _Invalid]) -> _Invalid:
             return value["unique_id"]
 
         with dag_maker(serialized=True):
-            ret = in_venv(value)
+            in_venv(value)
 
         dr = dag_maker.create_dagrun()
-        ret.operator.run(start_date=dr.logical_date, end_date=dr.logical_date)
+        dag_maker.run_ti("in_venv", dr)
         ti = dr.get_task_instances()[0]
 
         assert ti.state == TaskInstanceState.SUCCESS
diff --git a/providers/standard/tests/unit/standard/decorators/test_short_circuit.py b/providers/standard/tests/unit/standard/decorators/test_short_circuit.py
index 3ead1c252bbb3..2df79a0a199dd 100644
--- a/providers/standard/tests/unit/standard/decorators/test_short_circuit.py
+++ b/providers/standard/tests/unit/standard/decorators/test_short_circuit.py
@@ -64,8 +64,8 @@ def short_circuit(condition):
 
     dr = dag_maker.create_dagrun()
 
-    for t in dag_maker.dag.tasks:
-        t.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
+    for dag_task in dag_maker.dag.tasks:
+        dag_maker.run_ti(dag_task.task_id, dr, ignore_ti_state=True)
 
     task_state_mapping = {
         "short_circuit_false": State.SUCCESS,
@@ -180,10 +180,10 @@ def multiple_output():
         return {"x": 1, "y": 2}
 
     with dag_maker(serialized=True):
-        ret = multiple_output()
+        multiple_output()
 
     dr = dag_maker.create_dagrun()
-    ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+    dag_maker.run_ti("multiple_output", dr)
     ti = dr.get_task_instances()[0]
     assert ti.xcom_pull() == {"x": 1, "y": 2}
 
@@ -194,9 +194,9 @@ def empty_dict():
         return {}
 
     with dag_maker(serialized=True):
-        ret = empty_dict()
+        empty_dict()
 
     dr = dag_maker.create_dagrun()
-    ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+    dag_maker.run_ti("empty_dict", dr)
     ti = dr.get_task_instances()[0]
     assert ti.xcom_pull() == {}
diff --git a/providers/standard/tests/unit/standard/operators/test_bash.py b/providers/standard/tests/unit/standard/operators/test_bash.py
index fe33689d00e33..976ff48d9ef57 100644
--- a/providers/standard/tests/unit/standard/operators/test_bash.py
+++ b/providers/standard/tests/unit/standard/operators/test_bash.py
@@ -93,7 +93,7 @@ def test_echo_env_variables(
             serialized=True,
         ):
             tmp_file = tmp_path / "testfile"
-            task = BashOperator(
+            BashOperator(
                 task_id="echo_env_vars",
                 bash_command=f"echo $AIRFLOW_HOME>> {tmp_file};"
                 f"echo $PYTHONPATH>> {tmp_file};"
@@ -106,7 +106,7 @@ def test_echo_env_variables(
             )
 
         logical_date = utc_now
-        dag_maker.create_dagrun(
+        dr = dag_maker.create_dagrun(
             run_type=DagRunType.MANUAL,
             logical_date=logical_date,
             start_date=utc_now,
@@ -117,7 +117,7 @@ def test_echo_env_variables(
         with mock.patch.dict(
             "os.environ", {"AIRFLOW_HOME": "MY_PATH_TO_AIRFLOW_HOME", "PYTHONPATH": "AWESOME_PYTHONPATH"}
         ):
-            task.run(utc_now, utc_now, ignore_first_depends_on_past=True, ignore_ti_state=True)
+            dag_maker.run_ti("echo_env_vars", dr)
 
         assert expected == tmp_file.read_text()
 
@@ -249,14 +249,14 @@ def test_bash_operator_kill(self, dag_maker):
 
         sleep_time = f"100{os.getpid()}"
         with dag_maker(serialized=True):
-            op = BashOperator(
+            BashOperator(
                 task_id="test_bash_operator_kill",
                 execution_timeout=timedelta(microseconds=25),
                 bash_command=f"/bin/bash -c 'sleep {sleep_time}'",
             )
-        dag_maker.create_dagrun()
+        dr = dag_maker.create_dagrun()
         with pytest.raises(AirflowTaskTimeout):
-            op.run()
+            dag_maker.run_ti("test_bash_operator_kill", dr)
         sleep(2)
         for proc in psutil.process_iter():
             if proc.cmdline() == ["sleep", sleep_time]:
diff --git a/providers/standard/tests/unit/standard/operators/test_branch_operator.py b/providers/standard/tests/unit/standard/operators/test_branch_operator.py
index 821e7cfb9c675..670ce77415ba0 100644
--- a/providers/standard/tests/unit/standard/operators/test_branch_operator.py
+++ b/providers/standard/tests/unit/standard/operators/test_branch_operator.py
@@ -74,15 +74,15 @@ def test_without_dag_run(self, dag_maker):
             branch_op = ChooseBranchOne(task_id="make_choice")
             branch_1.set_upstream(branch_op)
             branch_2.set_upstream(branch_op)
-        dag_maker.create_dagrun(**triggered_by_kwargs)
+        dr = dag_maker.create_dagrun(**triggered_by_kwargs)
 
         if AIRFLOW_V_3_0_1:
             with pytest.raises(DownstreamTasksSkipped) as exc_info:
-                branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+                dag_maker.run_ti("make_choice", dr)
 
             assert exc_info.value.tasks == [("branch_2", -1)]
         else:
-            branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            dag_maker.run_ti("make_choice", dr)
 
             ti_date = TI.logical_date if AIRFLOW_V_3_0_PLUS else TI.execution_date
 
@@ -90,7 +90,6 @@ def test_without_dag_run(self, dag_maker):
                 if ti.task_id == "make_choice":
                     assert ti.state == State.SUCCESS
                 elif ti.task_id == "branch_1":
-                    # should exist with state None
                     assert ti.state == State.NONE
                 elif ti.task_id == "branch_2":
                     assert ti.state == State.SKIPPED
@@ -114,15 +113,15 @@ def test_branch_list_without_dag_run(self, dag_maker):
             branch_1.set_upstream(branch_op)
             branch_2.set_upstream(branch_op)
             branch_3.set_upstream(branch_op)
-        dag_maker.create_dagrun(**triggered_by_kwargs)
+        dr = dag_maker.create_dagrun(**triggered_by_kwargs)
 
         if AIRFLOW_V_3_0_1:
             with pytest.raises(DownstreamTasksSkipped) as exc_info:
-                branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+                dag_maker.run_ti("make_choice", dr)
 
             assert exc_info.value.tasks == [("branch_3", -1)]
         else:
-            branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            dag_maker.run_ti("make_choice", dr)
 
             expected = {
                 "make_choice": State.SUCCESS,
@@ -154,7 +153,7 @@ def test_with_dag_run(self, dag_maker):
             branch_1.set_upstream(branch_op)
             branch_2.set_upstream(branch_op)
         if AIRFLOW_V_3_0_1:
-            dag_maker.create_dagrun(
+            dr = dag_maker.create_dagrun(
                 run_type=DagRunType.MANUAL,
                 start_date=timezone.utcnow(),
                 logical_date=DEFAULT_DATE,
@@ -164,11 +163,11 @@ def test_with_dag_run(self, dag_maker):
             )
 
             with pytest.raises(DownstreamTasksSkipped) as exc_info:
-                branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+                dag_maker.run_ti("make_choice", dr)
 
             assert exc_info.value.tasks == [("branch_2", -1)]
         else:
-            dag_maker.create_dagrun(
+            dr = dag_maker.create_dagrun(
                 run_type=DagRunType.MANUAL,
                 start_date=timezone.utcnow(),
                 execution_date=DEFAULT_DATE,
@@ -177,7 +176,7 @@ def test_with_dag_run(self, dag_maker):
                 **triggered_by_kwargs,
             )
 
-            branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            dag_maker.run_ti("make_choice", dr)
 
             expected = {
                 "make_choice": State.SUCCESS,
@@ -209,7 +208,7 @@ def test_with_skip_in_branch_downstream_dependencies(self, dag_maker):
             branch_op >> branch_2
 
         if AIRFLOW_V_3_0_PLUS:
-            dag_maker.create_dagrun(
+            dr = dag_maker.create_dagrun(
                 run_type=DagRunType.MANUAL,
                 start_date=timezone.utcnow(),
                 logical_date=DEFAULT_DATE,
@@ -218,7 +217,7 @@ def test_with_skip_in_branch_downstream_dependencies(self, dag_maker):
                 **triggered_by_kwargs,
             )
         else:
-            dag_maker.create_dagrun(
+            dr = dag_maker.create_dagrun(
                 run_type=DagRunType.MANUAL,
                 start_date=timezone.utcnow(),
                 execution_date=DEFAULT_DATE,
@@ -227,7 +226,7 @@ def test_with_skip_in_branch_downstream_dependencies(self, dag_maker):
                 **triggered_by_kwargs,
             )
 
-        branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+        dag_maker.run_ti("make_choice", dr)
 
         expected = {
             "make_choice": State.SUCCESS,
@@ -276,12 +275,12 @@ def test_xcom_push(self, dag_maker):
 
         if AIRFLOW_V_3_0_1:
             with pytest.raises(DownstreamTasksSkipped) as exc_info:
-                branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+                dag_maker.run_ti("make_choice", dr)
 
             assert exc_info.value.tasks == [("branch_2", -1)]
         else:
-            branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
-            branch_op_ti = dr.get_task_instance(branch_op.task_id)
+            dag_maker.run_ti("make_choice", dr)
+            branch_op_ti = dr.get_task_instance("make_choice")
             assert branch_op_ti.xcom_pull(task_ids="make_choice", key=XCOM_SKIPMIXIN_KEY) == {
                 XCOM_SKIPMIXIN_FOLLOWED: ["branch_1"]
             }
@@ -306,7 +305,7 @@ def test_with_dag_run_task_groups(self, dag_maker):
             branch_3.set_upstream(branch_op)
 
         if AIRFLOW_V_3_0_1:
-            dag_maker.create_dagrun(
+            dr = dag_maker.create_dagrun(
                 run_type=DagRunType.MANUAL,
                 start_date=timezone.utcnow(),
                 logical_date=DEFAULT_DATE,
@@ -316,11 +315,11 @@ def test_with_dag_run_task_groups(self, dag_maker):
             )
 
             with pytest.raises(DownstreamTasksSkipped) as exc_info:
-                branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+                dag_maker.run_ti("make_choice", dr)
 
             assert set(exc_info.value.tasks) == {("branch_1", -1), ("branch_2", -1)}
         else:
-            dag_maker.create_dagrun(
+            dr = dag_maker.create_dagrun(
                 run_type=DagRunType.MANUAL,
                 start_date=timezone.utcnow(),
                 execution_date=DEFAULT_DATE,
@@ -328,7 +327,7 @@ def test_with_dag_run_task_groups(self, dag_maker):
                 data_interval=DataInterval(DEFAULT_DATE, DEFAULT_DATE),
                 **triggered_by_kwargs,
             )
-            branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            dag_maker.run_ti("make_choice", dr)
 
             ti_date = TI.logical_date if AIRFLOW_V_3_0_PLUS else TI.execution_date
 
diff --git a/providers/standard/tests/unit/standard/operators/test_datetime.py b/providers/standard/tests/unit/standard/operators/test_datetime.py
index 0c6e40381793f..afc1d8ff012e2 100644
--- a/providers/standard/tests/unit/standard/operators/test_datetime.py
+++ b/providers/standard/tests/unit/standard/operators/test_datetime.py
@@ -56,6 +56,7 @@ def setup_class(cls):
 
     @pytest.fixture(autouse=True)
     def base_tests_setup(self, dag_maker):
+        self.dag_maker = dag_maker  # Store dag_maker for use in test methods
         with dag_maker(
             "branch_datetime_operator_test",
             default_args={"owner": "airflow", "start_date": DEFAULT_DATE},
@@ -128,10 +129,10 @@ def test_branch_datetime_operator_falls_within_range(self, target_lower, target_
             from airflow.exceptions import DownstreamTasksSkipped
 
             with pytest.raises(DownstreamTasksSkipped) as exc_info:
-                self.branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+                self.dag_maker.run_ti("datetime_branch", self.dr)
             assert exc_info.value.tasks == [("branch_2", -1)]
         else:
-            self.branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            self.dag_maker.run_ti("datetime_branch", self.dr)
 
             self._assert_task_ids_match_states(
                 {
@@ -161,12 +162,12 @@ def test_branch_datetime_operator_falls_outside_range(self, date, target_lower,
             from airflow.exceptions import DownstreamTasksSkipped
 
             with pytest.raises(DownstreamTasksSkipped) as exc_info, time_machine.travel(date):
-                self.branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+                self.dag_maker.run_ti("datetime_branch", self.dr)
 
             assert exc_info.value.tasks == [("branch_1", -1)]
         else:
             with time_machine.travel(date):
-                self.branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+                self.dag_maker.run_ti("datetime_branch", self.dr)
 
                 self._assert_task_ids_match_states(
                     {
@@ -187,11 +188,11 @@ def test_branch_datetime_operator_upper_comparison_within_range(self, target_upp
             from airflow.exceptions import DownstreamTasksSkipped
 
             with pytest.raises(DownstreamTasksSkipped) as exc_info:
-                self.branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+                self.dag_maker.run_ti("datetime_branch", self.dr)
 
             assert exc_info.value.tasks == [("branch_2", -1)]
         else:
-            self.branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            self.dag_maker.run_ti("datetime_branch", self.dr)
 
             self._assert_task_ids_match_states(
                 {
@@ -212,11 +213,11 @@ def test_branch_datetime_operator_lower_comparison_within_range(self, target_low
             from airflow.exceptions import DownstreamTasksSkipped
 
             with pytest.raises(DownstreamTasksSkipped) as exc_info:
-                self.branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+                self.dag_maker.run_ti("datetime_branch", self.dr)
 
             assert exc_info.value.tasks == [("branch_2", -1)]
         else:
-            self.branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            self.dag_maker.run_ti("datetime_branch", self.dr)
 
             self._assert_task_ids_match_states(
                 {
@@ -237,11 +238,11 @@ def test_branch_datetime_operator_upper_comparison_outside_range(self, target_up
             from airflow.exceptions import DownstreamTasksSkipped
 
             with pytest.raises(DownstreamTasksSkipped) as exc_info:
-                self.branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+                self.dag_maker.run_ti("datetime_branch", self.dr)
 
             assert exc_info.value.tasks == [("branch_1", -1)]
         else:
-            self.branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            self.dag_maker.run_ti("datetime_branch", self.dr)
 
             self._assert_task_ids_match_states(
                 {
@@ -262,11 +263,11 @@ def test_branch_datetime_operator_lower_comparison_outside_range(self, target_lo
             from airflow.exceptions import DownstreamTasksSkipped
 
             with pytest.raises(DownstreamTasksSkipped) as exc_info:
-                self.branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+                self.dag_maker.run_ti("datetime_branch", self.dr)
 
             assert exc_info.value.tasks == [("branch_1", -1)]
         else:
-            self.branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            self.dag_maker.run_ti("datetime_branch", self.dr)
 
             self._assert_task_ids_match_states(
                 {
@@ -299,11 +300,11 @@ def test_branch_datetime_operator_use_task_logical_date(self, dag_maker, target_
             from airflow.exceptions import DownstreamTasksSkipped
 
             with pytest.raises(DownstreamTasksSkipped) as exc_info:
-                self.branch_op.run(start_date=in_between_date, end_date=in_between_date)
+                self.dag_maker.run_ti("datetime_branch", self.dr)
 
             assert exc_info.value.tasks == [("branch_2", -1)]
         else:
-            self.branch_op.run(start_date=in_between_date, end_date=in_between_date)
+            self.dag_maker.run_ti("datetime_branch", self.dr)
 
             self._assert_task_ids_match_states(
                 {
diff --git a/providers/standard/tests/unit/standard/operators/test_latest_only_operator.py b/providers/standard/tests/unit/standard/operators/test_latest_only_operator.py
index fce99a64b8278..066b15f9cf39f 100644
--- a/providers/standard/tests/unit/standard/operators/test_latest_only_operator.py
+++ b/providers/standard/tests/unit/standard/operators/test_latest_only_operator.py
@@ -83,9 +83,9 @@ def test_run(self, dag_maker):
         with dag_maker(
             default_args={"owner": "airflow", "start_date": DEFAULT_DATE}, schedule=INTERVAL, serialized=True
         ):
-            task = LatestOnlyOperator(task_id="latest")
-        dag_maker.create_dagrun()
-        task.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            LatestOnlyOperator(task_id="latest")
+        dr = dag_maker.create_dagrun()
+        dag_maker.run_ti("latest", dr)
 
     def test_skipping_non_latest(self, dag_maker):
         with dag_maker(
@@ -166,7 +166,8 @@ def test_skipping_non_latest(self, dag_maker):
             latest_ti2.task = latest_task
             latest_ti2.run()
         else:
-            latest_task.run(start_date=DEFAULT_DATE, end_date=END_DATE)
+            for dr in [dr0, dr1, dr2]:
+                dag_maker.run_ti("latest", dr)
 
         if AIRFLOW_V_3_0_PLUS:
             date_getter = operator.attrgetter("logical_date")
@@ -182,9 +183,10 @@ def test_skipping_non_latest(self, dag_maker):
         }
 
         # Verify the state of the other downstream tasks
-        downstream_task.run(start_date=DEFAULT_DATE, end_date=END_DATE)
-        downstream_task2.run(start_date=DEFAULT_DATE, end_date=END_DATE)
-        downstream_task3.run(start_date=DEFAULT_DATE, end_date=END_DATE)
+        for dr in [dr0, dr1, dr2]:
+            dag_maker.run_ti("downstream", dr)
+            dag_maker.run_ti("downstream_2", dr)
+            dag_maker.run_ti("downstream_3", dr)
 
         downstream_instances = get_task_instances("downstream")
         exec_date_to_downstream_state = {date_getter(ti): ti.state for ti in downstream_instances}
@@ -251,9 +253,12 @@ def test_not_skipping_manual(self, dag_maker):
             **triggered_by_kwargs,
         )
 
-        latest_task.run(start_date=DEFAULT_DATE, end_date=END_DATE)
-        downstream_task.run(start_date=DEFAULT_DATE, end_date=END_DATE)
-        downstream_task2.run(start_date=DEFAULT_DATE, end_date=END_DATE)
+        # Get all created dag runs and run tasks for each
+        all_drs = dag_maker.session.query(DagRun).filter_by(dag_id=dag_maker.dag.dag_id).all()
+        for dr in all_drs:
+            dag_maker.run_ti("latest", dr)
+            dag_maker.run_ti("downstream", dr)
+            dag_maker.run_ti("downstream_2", dr)
 
         latest_instances = get_task_instances("latest")
         if AIRFLOW_V_3_0_PLUS:
diff --git a/providers/standard/tests/unit/standard/operators/test_python.py b/providers/standard/tests/unit/standard/operators/test_python.py
index a63bb059e6863..184045f18a345 100644
--- a/providers/standard/tests/unit/standard/operators/test_python.py
+++ b/providers/standard/tests/unit/standard/operators/test_python.py
@@ -28,7 +28,7 @@
 import warnings
 from collections import namedtuple
 from collections.abc import Generator
-from datetime import date, datetime, timedelta, timezone as _timezone
+from datetime import date, datetime, timezone as _timezone
 from functools import partial
 from importlib.util import find_spec
 from pathlib import Path
@@ -47,8 +47,12 @@
     AirflowProviderDeprecationWarning,
     DeserializingResultError,
 )
-from airflow.models.baseoperator import BaseOperator
-from airflow.models.dag import DAG
+from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models.baseoperator import BaseOperator
 from airflow.models.taskinstance import TaskInstance, clear_task_instances, set_current_context
 from airflow.providers.standard.operators.empty import EmptyOperator
 from airflow.providers.standard.operators.python import (
@@ -74,6 +78,7 @@
 from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_1, AIRFLOW_V_3_0_PLUS
 
 if TYPE_CHECKING:
+    from airflow.models.dag import DAG
     from airflow.models.dagrun import DagRun
     from airflow.utils.context import Context
 
@@ -174,8 +179,8 @@ def run_as_operator(self, fn, **kwargs):
         clear_db_runs()
         with self.dag_maker(self.dag_id, template_searchpath=TEMPLATE_SEARCHPATH, serialized=True):
             task = self.opcls(task_id=self.task_id, python_callable=fn, **self.default_kwargs(**kwargs))
-        self.dag_maker.create_dagrun()
-        task.run(start_date=self.default_date, end_date=self.default_date)
+        dr = self.dag_maker.create_dagrun()
+        self.dag_maker.run_ti(self.task_id, dr)
         clear_db_runs()
         return task
 
@@ -405,13 +410,13 @@ def f():
             branch_op = self.opcls(task_id=self.task_id, python_callable=f, **self.default_kwargs())
             branch_op >> [self.branch_1, self.branch_2]
 
-        dr = self.create_dag_run()
+        dr = self.dag_maker.create_dagrun()
         if AIRFLOW_V_3_0_1:
             with pytest.raises(DownstreamTasksSkipped) as dts:
-                branch_op.run(start_date=self.default_date, end_date=self.default_date)
+                self.dag_maker.run_ti(self.task_id, dr)
             assert dts.value.tasks == [("branch_2", -1)]
         else:
-            branch_op.run(start_date=self.default_date, end_date=self.default_date)
+            self.dag_maker.run_ti(self.task_id, dr)
             self.assert_expected_task_states(
                 dr, {self.task_id: State.SUCCESS, "branch_1": State.NONE, "branch_2": State.SKIPPED}
             )
@@ -427,8 +432,8 @@ def f():
             branch_op >> self.branch_1 >> self.branch_2
             branch_op >> self.branch_2
 
-        dr = self.create_dag_run()
-        branch_op.run(start_date=self.default_date, end_date=self.default_date)
+        dr = self.dag_maker.create_dagrun()
+        self.dag_maker.run_ti(self.task_id, dr)
         self.assert_expected_task_states(
             dr, {self.task_id: State.SUCCESS, "branch_1": State.NONE, "branch_2": State.NONE}
         )
@@ -444,13 +449,13 @@ def f():
             branch_op >> self.branch_1 >> self.branch_2
             branch_op >> self.branch_2
 
-        dr = self.create_dag_run()
+        dr = self.dag_maker.create_dagrun()
         if AIRFLOW_V_3_0_1:
             with pytest.raises(DownstreamTasksSkipped) as dts:
                 branch_op.run(start_date=self.default_date, end_date=self.default_date)
             assert dts.value.tasks == [("branch_1", -1)]
         else:
-            branch_op.run(start_date=self.default_date, end_date=self.default_date)
+            self.dag_maker.run_ti(branch_op.task_id, dr)
             self.assert_expected_task_states(
                 dr, {self.task_id: State.SUCCESS, "branch_1": State.SKIPPED, "branch_2": State.NONE}
             )
@@ -487,9 +492,9 @@ def f():
                 branch_2_ti.run()
                 assert branch_2_ti.state == TaskInstanceState.SKIPPED
         else:
-            branch_op.run(start_date=self.default_date, end_date=self.default_date)
+            dag_maker.run_ti(branch_op.task_id, dr)
             for task in branches:
-                task.run(start_date=self.default_date, end_date=self.default_date)
+                dag_maker.run_ti(task.task_id, dr)
 
             expected_states = {
                 self.task_id: State.SUCCESS,
@@ -510,7 +515,7 @@ def f():
 
             # Run the cleared tasks again.
             for task in branches:
-                task.run(start_date=self.default_date, end_date=self.default_date)
+                dag_maker.run_ti(task.task_id, dr)
 
             # Check if the states are correct after children tasks are cleared.
             self.assert_expected_task_states(dr, expected_states)
@@ -714,7 +719,7 @@ def test_short_circuiting(
         Checking the behavior of the ShortCircuitOperator in several scenarios enabling/disabling the skipping
         of downstream tasks, both short-circuiting modes, and various trigger rules of downstream tasks.
         """
-        with self.dag_non_serialized:
+        with self.dag_maker(self.dag_id, template_searchpath=TEMPLATE_SEARCHPATH, serialized=True):
             short_circuit = ShortCircuitOperator(
                 task_id="short_circuit",
                 python_callable=lambda: callable_return,
@@ -723,21 +728,21 @@ def test_short_circuiting(
             short_circuit >> self.op1 >> self.op2
             self.op2.trigger_rule = test_trigger_rule
 
-        dr = self.create_dag_run()
+        dr = self.dag_maker.create_dagrun()
         if AIRFLOW_V_3_0_1:
             from airflow.exceptions import DownstreamTasksSkipped
 
             if expected_skipped_tasks:
                 with pytest.raises(DownstreamTasksSkipped) as exc_info:
-                    short_circuit.run(start_date=self.default_date, end_date=self.default_date)
+                    self.dag_maker.run_ti("short_circuit", dr)
                 assert set(exc_info.value.tasks) == set(expected_skipped_tasks)
             else:
-                assert short_circuit.run(start_date=self.default_date, end_date=self.default_date) is None
+                assert self.dag_maker.run_ti("short_circuit", dr) is None
 
         else:
-            short_circuit.run(start_date=self.default_date, end_date=self.default_date)
-            self.op1.run(start_date=self.default_date, end_date=self.default_date)
-            self.op2.run(start_date=self.default_date, end_date=self.default_date)
+            self.dag_maker.run_ti("short_circuit", dr)
+            self.dag_maker.run_ti("op1", dr)
+            self.dag_maker.run_ti("op2", dr)
 
             assert short_circuit.ignore_downstream_trigger_rules == test_ignore_downstream_trigger_rules
             assert short_circuit.trigger_rule == TriggerRule.ALL_SUCCESS
@@ -772,9 +777,9 @@ def test_clear_skipped_downstream_task(self):
                 op1_ti.run()
                 assert op1_ti.state == TaskInstanceState.SKIPPED
         else:
-            short_circuit.run(start_date=self.default_date, end_date=self.default_date)
-            self.op1.run(start_date=self.default_date, end_date=self.default_date)
-            self.op2.run(start_date=self.default_date, end_date=self.default_date)
+            self.dag_maker.run_ti(self.task_id, dr)
+            self.dag_maker.run_ti(self.op1.task_id, dr)
+            self.dag_maker.run_ti(self.op2.task_id, dr)
             assert short_circuit.ignore_downstream_trigger_rules
             assert short_circuit.trigger_rule == TriggerRule.ALL_SUCCESS
             assert self.op1.trigger_rule == TriggerRule.ALL_SUCCESS
@@ -796,7 +801,7 @@ def test_clear_skipped_downstream_task(self):
                     clear_task_instances(
                         [ti for ti in tis if ti.task_id == "op1"], session=session, dag=short_circuit.dag
                     )
-            self.op1.run(start_date=self.default_date, end_date=self.default_date)
+            self.dag_maker.run_ti("op1", dr)
             self.assert_expected_task_states(dr, expected_states)
 
     def test_xcom_push(self):
@@ -809,29 +814,29 @@ def test_xcom_push(self):
                 task_id="do_not_push_xcom_from_shortcircuit", python_callable=lambda: False
             )
 
-        dr = self.create_dag_run()
-        short_op_push_xcom.run(start_date=self.default_date, end_date=self.default_date)
-        short_op_no_push_xcom.run(start_date=self.default_date, end_date=self.default_date)
+        dr = self.dag_maker.create_dagrun()
+        self.dag_maker.run_ti("push_xcom_from_shortcircuit", dr)
+        self.dag_maker.run_ti("do_not_push_xcom_from_shortcircuit", dr)
 
         tis = dr.get_task_instances()
         assert tis[0].xcom_pull(task_ids=short_op_push_xcom.task_id, key="return_value") == "signature"
         assert tis[0].xcom_pull(task_ids=short_op_no_push_xcom.task_id, key="return_value") is False
 
     def test_xcom_push_skipped_tasks(self):
-        with self.dag_non_serialized:
+        with self.dag_maker(self.dag_id, template_searchpath=TEMPLATE_SEARCHPATH, serialized=True):
             short_op_push_xcom = ShortCircuitOperator(
                 task_id="push_xcom_from_shortcircuit", python_callable=lambda: False
             )
             empty_task = EmptyOperator(task_id="empty_task")
             short_op_push_xcom >> empty_task
-        dr = self.create_dag_run()
+        dr = self.dag_maker.create_dagrun()
         if AIRFLOW_V_3_0_1:
             from airflow.exceptions import DownstreamTasksSkipped
 
             with pytest.raises(DownstreamTasksSkipped):
                 short_op_push_xcom.run(start_date=self.default_date, end_date=self.default_date)
         else:
-            short_op_push_xcom.run(start_date=self.default_date, end_date=self.default_date)
+            self.dag_maker.run_ti("push_xcom_from_shortcircuit", dr)
         tis = dr.get_task_instances()
         assert tis[0].xcom_pull(task_ids=short_op_push_xcom.task_id, key="skipmixin_key") == {
             "skipped": ["empty_task"]
@@ -1739,14 +1744,13 @@ def f():
             branch_op = self.opcls(task_id=self.task_id, python_callable=f, **self.default_kwargs())
             branch_op >> [self.branch_1, self.branch_2]
 
-        dr = self.create_dag_run()
+        dr = self.dag_maker.create_dagrun()
         if AIRFLOW_V_3_0_1:
             with pytest.raises(DownstreamTasksSkipped) as dts:
-                branch_op.run(start_date=self.default_date, end_date=self.default_date)
-
+                self.dag_maker.run_ti(self.task_id, dr)
             assert dts.value.tasks == [("branch_2", -1)]
         else:
-            branch_op.run(start_date=self.default_date, end_date=self.default_date)
+            self.dag_maker.run_ti(self.task_id, dr)
             self.assert_expected_task_states(
                 dr, {self.task_id: State.SUCCESS, "branch_1": State.NONE, "branch_2": State.SKIPPED}
             )
@@ -1762,8 +1766,8 @@ def f():
             branch_op >> self.branch_1 >> self.branch_2
             branch_op >> self.branch_2
 
-        dr = self.create_dag_run()
-        branch_op.run(start_date=self.default_date, end_date=self.default_date)
+        dr = self.dag_maker.create_dagrun()
+        self.dag_maker.run_ti(branch_op.task_id, dr)
         self.assert_expected_task_states(
             dr, {self.task_id: State.SUCCESS, "branch_1": State.NONE, "branch_2": State.NONE}
         )
@@ -1779,15 +1783,15 @@ def f():
             branch_op >> self.branch_1 >> self.branch_2
             branch_op >> self.branch_2
 
-        dr = self.create_dag_run()
+        dr = self.dag_maker.create_dagrun()
 
         if AIRFLOW_V_3_0_1:
             with pytest.raises(DownstreamTasksSkipped) as dts:
-                branch_op.run(start_date=self.default_date, end_date=self.default_date)
+                self.dag_maker.run_ti(branch_op.task_id, dr)
 
             assert dts.value.tasks == [("branch_1", -1)]
         else:
-            branch_op.run(start_date=self.default_date, end_date=self.default_date)
+            self.dag_maker.run_ti(branch_op.task_id, dr)
             self.assert_expected_task_states(
                 dr, {self.task_id: State.SUCCESS, "branch_1": State.SKIPPED, "branch_2": State.NONE}
             )
@@ -1806,7 +1810,7 @@ def f():
             branches = [self.branch_1, self.branch_2]
             branch_op >> branches
 
-        dr = self.create_dag_run()
+        dr = self.dag_maker.create_dagrun()
 
         if AIRFLOW_V_3_0_1:
             from airflow.exceptions import DownstreamTasksSkipped
@@ -1827,9 +1831,9 @@ def f():
                     branch_2_ti.run()
                     assert branch_2_ti.state == TaskInstanceState.SKIPPED
         else:
-            branch_op.run(start_date=self.default_date, end_date=self.default_date)
+            self.dag_maker.run_ti(branch_op.task_id, dr)
             for task in branches:
-                task.run(start_date=self.default_date, end_date=self.default_date)
+                self.dag_maker.run_ti(task.task_id, dr)
 
             expected_states = {
                 self.task_id: State.SUCCESS,
@@ -1850,7 +1854,7 @@ def f():
 
             # Run the cleared tasks again.
             for task in branches:
-                task.run(start_date=self.default_date, end_date=self.default_date)
+                self.dag_maker.run_ti(task.task_id, dr)
 
             # Check if the states are correct after children tasks are cleared.
             self.assert_expected_task_states(dr, expected_states)
@@ -2000,35 +2004,27 @@ def clear_db():
     clear_db_runs()
 
 
-DEFAULT_ARGS = {
-    "owner": "test",
-    "depends_on_past": True,
-    "start_date": datetime(2022, 1, 1),
-    "end_date": datetime.today(),
-    "retries": 1,
-    "retry_delay": timedelta(minutes=1),
-}
-
-
 @pytest.mark.usefixtures("clear_db")
 class TestCurrentContextRuntime:
-    def test_context_in_task(self):
-        with DAG(dag_id="assert_context_dag", default_args=DEFAULT_ARGS, schedule="@once"):
+    def test_context_in_task(self, dag_maker):
+        with dag_maker(dag_id="assert_context_dag", serialized=True):
             op = MyContextAssertOperator(task_id="assert_context")
-            if AIRFLOW_V_3_0_1:
-                with pytest.warns(AirflowProviderDeprecationWarning):
-                    op.run(ignore_first_depends_on_past=True, ignore_ti_state=True)
-            else:
-                op.run(ignore_first_depends_on_past=True, ignore_ti_state=True)
+        dr = dag_maker.create_dagrun()
+        if AIRFLOW_V_3_0_PLUS:
+            with pytest.warns(AirflowProviderDeprecationWarning):
+                dag_maker.run_ti(op.task_id, dr)
+        else:
+            dag_maker.run_ti(op.task_id, dr)
 
-    def test_get_context_in_old_style_context_task(self):
-        with DAG(dag_id="edge_case_context_dag", default_args=DEFAULT_ARGS, schedule="@once"):
+    def test_get_context_in_old_style_context_task(self, dag_maker):
+        with dag_maker(dag_id="assert_context_dag", serialized=True):
             op = PythonOperator(python_callable=get_all_the_context, task_id="get_all_the_context")
-            if AIRFLOW_V_3_0_1:
-                with pytest.warns(AirflowProviderDeprecationWarning):
-                    op.run(ignore_first_depends_on_past=True, ignore_ti_state=True)
-            else:
-                op.run(ignore_first_depends_on_past=True, ignore_ti_state=True)
+        dr = dag_maker.create_dagrun()
+        if AIRFLOW_V_3_0_PLUS:
+            with pytest.warns(AirflowProviderDeprecationWarning):
+                dag_maker.run_ti(op.task_id, dr)
+        else:
+            dag_maker.run_ti(op.task_id, dr)
 
 
 @pytest.mark.need_serialized_dag(False)
diff --git a/providers/standard/tests/unit/standard/operators/test_weekday.py b/providers/standard/tests/unit/standard/operators/test_weekday.py
index 0372669c96179..bd49e45b1a701 100644
--- a/providers/standard/tests/unit/standard/operators/test_weekday.py
+++ b/providers/standard/tests/unit/standard/operators/test_weekday.py
@@ -120,11 +120,11 @@ def test_branch_follow_true(self, weekday, dag_maker):
             from airflow.exceptions import DownstreamTasksSkipped
 
             with pytest.raises(DownstreamTasksSkipped) as exc_info:
-                branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+                dag_maker.run_ti("make_choice", dr)
 
             assert exc_info.value.tasks == [("branch_3", -1)]
         else:
-            branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            dag_maker.run_ti("make_choice", dr)
 
             self._assert_task_ids_match_states(
                 dr,
@@ -166,10 +166,10 @@ def test_branch_follow_true_with_logical_date(self, dag_maker):
             from airflow.exceptions import DownstreamTasksSkipped
 
             with pytest.raises(DownstreamTasksSkipped) as exc_info:
-                branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+                dag_maker.run_ti("make_choice", dr)
             assert exc_info.value.tasks == [("branch_2", -1)]
         else:
-            branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            dag_maker.run_ti("make_choice", dr)
 
             self._assert_task_ids_match_states(
                 dr,
@@ -235,11 +235,11 @@ def test_branch_follow_false(self, dag_maker):
             from airflow.exceptions import DownstreamTasksSkipped
 
             with pytest.raises(DownstreamTasksSkipped) as exc_info:
-                branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+                dag_maker.run_ti("make_choice", dr)
 
             assert exc_info.value.tasks == [("branch_1", -1)]
         else:
-            branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            dag_maker.run_ti("make_choice", dr)
 
             self._assert_task_ids_match_states(
                 dr,
@@ -345,7 +345,7 @@ def test_branch_xcom_push_true_branch(self, dag_maker):
 
             assert exc_info.value.tasks == [("branch_2", -1)]
         else:
-            branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            dag_maker.run_ti("make_choice", dr)
 
             assert branch_op_ti.xcom_pull(task_ids="make_choice", key=XCOM_SKIPMIXIN_KEY) == {
                 XCOM_SKIPMIXIN_FOLLOWED: ["branch_1"]
diff --git a/providers/standard/tests/unit/standard/sensors/test_external_task_sensor.py b/providers/standard/tests/unit/standard/sensors/test_external_task_sensor.py
index 78d2b9434663c..fc1f982c8e227 100644
--- a/providers/standard/tests/unit/standard/sensors/test_external_task_sensor.py
+++ b/providers/standard/tests/unit/standard/sensors/test_external_task_sensor.py
@@ -33,7 +33,12 @@
     TaskDeferred,
 )
 from airflow.models import DagBag, DagRun, TaskInstance
-from airflow.models.baseoperator import BaseOperator
+from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models.baseoperator import BaseOperator
 from airflow.models.dag import DAG
 from airflow.models.serialized_dag import SerializedDagModel
 from airflow.models.xcom_arg import XComArg
diff --git a/task-sdk/src/airflow/sdk/bases/decorator.py b/task-sdk/src/airflow/sdk/bases/decorator.py
index 6780fe29fe27d..c1063774220de 100644
--- a/task-sdk/src/airflow/sdk/bases/decorator.py
+++ b/task-sdk/src/airflow/sdk/bases/decorator.py
@@ -249,10 +249,9 @@ def execute(self, context: Context):
             if isinstance(arg, Asset):
                 self.inlets.append(arg)
         return_value = super().execute(context)
-        # TODO(potiuk) - this xcom push is temporary and should be fixed
-        return self._handle_output(return_value=return_value, context=context, xcom_push=self.xcom_push)  # type: ignore[attr-defined]
+        return self._handle_output(return_value=return_value)
 
-    def _handle_output(self, return_value: Any, context: Context, xcom_push: Callable):
+    def _handle_output(self, return_value: Any):
         """
         Handle logic for whether a decorator needs to push a single return value or multiple return values.
 

From e7e89a07ff24d7942e1940d10b4da5be0013336e Mon Sep 17 00:00:00 2001
From: Elad Kalif <45845474+eladkal@users.noreply.github.com>
Date: Fri, 27 Jun 2025 16:14:33 +0300
Subject: [PATCH 230/381] Drop support for Python 3.9 (#52072)

* Drop support for Python 3.9

* fixes

* fix casandra

* fix casandra

* fix PreviewGenerativeModel

* fix PreviewGenerativeModel

* fix static checks

* fix datetime.py
---
 .github/actions/breeze/action.yml             |   2 +-
 .../actions/prepare_all_ci_images/action.yml  |   8 +-
 .github/workflows/test-providers.yml          |   4 -
 Dockerfile                                    |   2 +-
 Dockerfile.ci                                 |   2 +-
 README.md                                     |   2 +-
 airflow-core/docs/extra-packages-ref.rst      |   2 +-
 .../installation/installing-from-pypi.rst     |  10 +-
 airflow-core/docs/start.rst                   |   4 +-
 airflow-core/hatch_build.py                   |   4 +-
 .../src/airflow/api_fastapi/auth/tokens.py    |   6 +-
 .../airflow/api_fastapi/common/parameters.py  |  21 +-
 .../src/airflow/api_fastapi/common/router.py  |   3 +-
 .../api_fastapi/core_api/datamodels/pools.py  |   3 +-
 .../airflow/api_fastapi/core_api/security.py  |   3 +-
 .../core_api/services/public/variables.py     |   2 +-
 .../api_fastapi/core_api/services/ui/grid.py  |   2 +-
 .../execution_api/datamodels/taskinstance.py  |  16 +-
 .../airflow/api_fastapi/execution_api/deps.py |   8 +-
 .../execution_api/routes/task_instances.py    |   2 +-
 .../execution_api/versions/v2025_05_20.py     |   4 +-
 .../airflow/callbacks/callback_requests.py    |   4 +-
 .../airflow/callbacks/pipe_callback_sink.py   |   3 +-
 airflow-core/src/airflow/cli/cli_config.py    |   6 +-
 .../src/airflow/cli/commands/daemon_utils.py  |   2 +-
 .../airflow/cli/commands/plugins_command.py   |   2 +-
 airflow-core/src/airflow/cli/simple_table.py  |   6 +-
 airflow-core/src/airflow/configuration.py     |   6 +-
 .../src/airflow/dag_processing/processor.py   |   7 +-
 airflow-core/src/airflow/exceptions.py        |   2 +-
 .../src/airflow/executors/base_executor.py    |   4 +-
 .../src/airflow/executors/local_executor.py   |   4 +-
 .../src/airflow/executors/workloads.py        |   4 +-
 airflow-core/src/airflow/io/__init__.py       |   3 +-
 airflow-core/src/airflow/jobs/job.py          |   3 +-
 .../src/airflow/jobs/scheduler_job_runner.py  |   4 +-
 .../src/airflow/jobs/triggerer_job_runner.py  |  42 ++--
 airflow-core/src/airflow/lineage/hook.py      |   4 +-
 .../src/airflow/metrics/otel_logger.py        |   5 +-
 airflow-core/src/airflow/metrics/protocols.py |   4 +-
 .../src/airflow/metrics/statsd_logger.py      |   3 +-
 .../src/airflow/metrics/validators.py         |   4 +-
 airflow-core/src/airflow/models/asset.py      |   4 +-
 airflow-core/src/airflow/models/dag.py        |  18 +-
 airflow-core/src/airflow/models/dagbag.py     |   4 +-
 airflow-core/src/airflow/models/dagrun.py     |  17 +-
 .../src/airflow/models/expandinput.py         |   6 +-
 airflow-core/src/airflow/models/operator.py   |   4 +-
 .../src/airflow/models/serialized_dag.py      |   4 +-
 airflow-core/src/airflow/models/taskmap.py    |   2 +-
 airflow-core/src/airflow/providers_manager.py |   4 +-
 .../src/airflow/serialization/serde.py        |   6 +-
 .../serialization/serialized_objects.py       |  27 +--
 .../serialization/serializers/datetime.py     |   2 +-
 .../serialization/serializers/kubernetes.py   |   2 +-
 .../serialization/serializers/numpy.py        |  26 ++-
 .../serialization/serializers/timezone.py     |   2 +-
 airflow-core/src/airflow/settings.py          |   3 +-
 airflow-core/src/airflow/stats.py             |   3 +-
 .../src/airflow/timetables/interval.py        |   4 +-
 airflow-core/src/airflow/traces/tracer.py     |   3 +-
 airflow-core/src/airflow/triggers/base.py     |  12 +-
 airflow-core/src/airflow/typing_compat.py     |   7 +-
 airflow-core/src/airflow/utils/cli.py         |   3 +-
 .../src/airflow/utils/cli_action_loggers.py   |   3 +-
 airflow-core/src/airflow/utils/db.py          |   3 +-
 airflow-core/src/airflow/utils/decorators.py  |   3 +-
 .../src/airflow/utils/dot_renderer.py         |   2 +-
 .../src/airflow/utils/event_scheduler.py      |   2 +-
 airflow-core/src/airflow/utils/helpers.py     |   8 +-
 .../src/airflow/utils/log/colored_log.py      |   4 +-
 .../airflow/utils/log/file_task_handler.py    |   8 +-
 .../src/airflow/utils/log/log_reader.py       |   4 +-
 .../src/airflow/utils/module_loading.py       |   3 +-
 .../src/airflow/utils/operator_helpers.py     |   4 +-
 .../utils/providers_configuration_loader.py   |   3 +-
 airflow-core/src/airflow/utils/retries.py     |   3 +-
 airflow-core/src/airflow/utils/session.py     |   4 +-
 .../src/airflow/utils/setup_teardown.py       |   2 +-
 airflow-core/src/airflow/utils/sqlalchemy.py  |   4 +-
 airflow-core/src/airflow/utils/task_group.py  |   3 +-
 .../unit/always/test_project_structure.py     |   2 +-
 .../core_api/routes/public/test_variables.py  |   2 +-
 .../tests/unit/cluster_policies/__init__.py   |   3 +-
 .../unit/dag_processing/test_processor.py     |   3 +-
 .../serialization/test_dag_serialization.py   |   4 +-
 airflow-ctl/docs/images/command_hashes.txt    |  28 +--
 airflow-ctl/docs/images/output_assets.svg     | 116 +++++------
 airflow-ctl/docs/images/output_auth.svg       |  60 +++---
 airflow-ctl/docs/images/output_auth_login.svg |  72 +++----
 airflow-ctl/docs/images/output_backfills.svg  |  80 +++----
 airflow-ctl/docs/images/output_config.svg     |  62 +++---
 .../docs/images/output_connections.svg        |  80 +++----
 airflow-ctl/docs/images/output_dag.svg        | 104 +++++-----
 airflow-ctl/docs/images/output_dagrun.svg     |  60 +++---
 airflow-ctl/docs/images/output_jobs.svg       |  52 ++---
 airflow-ctl/docs/images/output_main.svg       | 112 +++++-----
 airflow-ctl/docs/images/output_pools.svg      |  76 +++----
 airflow-ctl/docs/images/output_providers.svg  |  52 ++---
 airflow-ctl/docs/images/output_variables.svg  |  76 +++----
 airflow-ctl/docs/images/output_version.svg    |  36 ++--
 chart/pyproject.toml                          |   2 +-
 clients/python/pyproject.toml                 |   2 +-
 .../13_airflow_dependencies_and_extras.rst    |  10 +-
 dev/README_RELEASE_AIRFLOW.md                 |   2 +-
 dev/airflow_mypy/plugin/outputs.py            |   2 +-
 dev/breeze/README.md                          |   2 +-
 dev/breeze/doc/images/output-commands.svg     |   4 +-
 .../doc/images/output_ci-image_build.svg      |   6 +-
 .../doc/images/output_ci-image_build.txt      |   2 +-
 .../doc/images/output_ci-image_load.svg       |   4 +-
 .../doc/images/output_ci-image_load.txt       |   2 +-
 .../doc/images/output_ci-image_pull.svg       |   6 +-
 .../doc/images/output_ci-image_pull.txt       |   2 +-
 .../doc/images/output_ci-image_save.svg       |   4 +-
 .../doc/images/output_ci-image_save.txt       |   2 +-
 .../doc/images/output_ci-image_verify.svg     |   6 +-
 .../doc/images/output_ci-image_verify.txt     |   2 +-
 .../doc/images/output_k8s_build-k8s-image.svg |   6 +-
 .../doc/images/output_k8s_build-k8s-image.txt |   2 +-
 .../images/output_k8s_configure-cluster.svg   |   6 +-
 .../images/output_k8s_configure-cluster.txt   |   2 +-
 .../doc/images/output_k8s_create-cluster.svg  |  62 +++---
 .../doc/images/output_k8s_create-cluster.txt  |   2 +-
 .../doc/images/output_k8s_delete-cluster.svg  |   4 +-
 .../doc/images/output_k8s_delete-cluster.txt  |   2 +-
 .../doc/images/output_k8s_deploy-airflow.svg  |  76 ++++---
 .../doc/images/output_k8s_deploy-airflow.txt  |   2 +-
 dev/breeze/doc/images/output_k8s_k9s.svg      |   4 +-
 dev/breeze/doc/images/output_k8s_k9s.txt      |   2 +-
 dev/breeze/doc/images/output_k8s_logs.svg     |   4 +-
 dev/breeze/doc/images/output_k8s_logs.txt     |   2 +-
 .../images/output_k8s_run-complete-tests.svg  |   6 +-
 .../images/output_k8s_run-complete-tests.txt  |   2 +-
 dev/breeze/doc/images/output_k8s_shell.svg    |   4 +-
 dev/breeze/doc/images/output_k8s_shell.txt    |   2 +-
 dev/breeze/doc/images/output_k8s_status.svg   |  36 ++--
 dev/breeze/doc/images/output_k8s_status.txt   |   2 +-
 dev/breeze/doc/images/output_k8s_tests.svg    |   6 +-
 dev/breeze/doc/images/output_k8s_tests.txt    |   2 +-
 .../images/output_k8s_upload-k8s-image.svg    |   6 +-
 .../images/output_k8s_upload-k8s-image.txt    |   2 +-
 .../doc/images/output_prod-image_build.svg    | 196 +++++++++---------
 .../doc/images/output_prod-image_build.txt    |   2 +-
 .../doc/images/output_prod-image_load.svg     |   4 +-
 .../doc/images/output_prod-image_load.txt     |   2 +-
 .../doc/images/output_prod-image_pull.svg     |   6 +-
 .../doc/images/output_prod-image_pull.txt     |   2 +-
 .../doc/images/output_prod-image_save.svg     |   4 +-
 .../doc/images/output_prod-image_save.txt     |   2 +-
 .../doc/images/output_prod-image_verify.svg   |   6 +-
 .../doc/images/output_prod-image_verify.txt   |   2 +-
 ...elease-management_generate-constraints.svg |  48 ++---
 ...elease-management_generate-constraints.txt |   2 +-
 ...agement_install-provider-distributions.svg |   4 +-
 ...agement_install-provider-distributions.txt |   2 +-
 ...t_release-management_merge-prod-images.svg |   2 +-
 ...t_release-management_merge-prod-images.txt |   2 +-
 ...release-management_release-prod-images.svg |   2 +-
 ...release-management_release-prod-images.txt |   2 +-
 ...nagement_verify-provider-distributions.svg |   4 +-
 ...nagement_verify-provider-distributions.txt |   2 +-
 ...put_sbom_export-dependency-information.svg |   4 +-
 ...put_sbom_export-dependency-information.txt |   2 +-
 dev/breeze/doc/images/output_setup_config.svg |   4 +-
 dev/breeze/doc/images/output_setup_config.txt |   2 +-
 dev/breeze/doc/images/output_shell.svg        |   4 +-
 dev/breeze/doc/images/output_shell.txt        |   2 +-
 .../doc/images/output_start-airflow.svg       | 146 ++++++++-----
 .../doc/images/output_start-airflow.txt       |   2 +-
 .../output_testing_airflow-ctl-tests.svg      |   4 +-
 .../output_testing_airflow-ctl-tests.txt      |   2 +-
 .../output_testing_core-integration-tests.svg |   4 +-
 .../output_testing_core-integration-tests.txt |   2 +-
 .../doc/images/output_testing_core-tests.svg  |   4 +-
 .../doc/images/output_testing_core-tests.txt  |   2 +-
 .../output_testing_docker-compose-tests.svg   |   4 +-
 .../output_testing_docker-compose-tests.txt   |   2 +-
 ...ut_testing_providers-integration-tests.svg |   4 +-
 ...ut_testing_providers-integration-tests.txt |   2 +-
 .../images/output_testing_providers-tests.svg |   4 +-
 .../images/output_testing_providers-tests.txt |   2 +-
 ...output_testing_python-api-client-tests.svg |   4 +-
 ...output_testing_python-api-client-tests.txt |   2 +-
 .../images/output_testing_system-tests.svg    |   4 +-
 .../images/output_testing_system-tests.txt    |   2 +-
 .../images/output_testing_task-sdk-tests.svg  |   4 +-
 .../images/output_testing_task-sdk-tests.txt  |   2 +-
 dev/breeze/pyproject.toml                     |   2 +-
 .../commands/minor_release_command.py         |   2 +-
 .../commands/release_management_commands.py   |   4 +-
 .../src/airflow_breeze/global_constants.py    |  25 +--
 .../params/common_build_params.py             |   2 +-
 dev/breeze/src/airflow_breeze/utils/image.py  |   3 +-
 .../src/airflow_breeze/utils/packages.py      |   2 +-
 .../src/airflow_breeze/utils/parallel.py      |   2 +-
 .../src/airflow_breeze/utils/path_utils.py    |   8 +-
 .../src/airflow_breeze/utils/run_utils.py     |   6 +-
 dev/breeze/tests/test_cache.py                |   6 +-
 dev/breeze/tests/test_selective_checks.py     |  44 ++--
 dev/breeze/tests/test_shell_params.py         |  22 +-
 dev/pyproject.toml                            |   2 +-
 dev/refresh_images.sh                         |   2 +-
 dev/retag_docker_images.py                    |   2 +-
 devel-common/src/docs/build_docs.py           |   4 +-
 .../sphinx_exts/operators_and_hooks_ref.py    |   2 +-
 .../src/sphinx_exts/providers_extensions.py   |   6 +-
 .../src/sphinx_exts/removemarktransform.py    |   2 +-
 .../sphinx_exts/substitution_extensions.py    |   2 +-
 .../_internals/capture_warnings.py            |   4 +-
 .../_internals/forbidden_warnings.py          |   2 +-
 .../src/tests_common/pytest_plugin.py         |   4 +-
 .../test_utils/perf/perf_kit/sqlalchemy.py    |   2 +-
 .../tests_common/test_utils/system_tests.py   |   3 +-
 generated/PYPI_README.md                      |   2 +-
 .../performance_dag/performance_dag_utils.py  |   2 +-
 .../installing-from-pypi.rst                  |   2 +-
 providers/airbyte/pyproject.toml              |   3 +-
 providers/alibaba/pyproject.toml              |   3 +-
 .../alibaba/cloud/hooks/analyticdb_spark.py   |   6 +-
 .../alibaba/cloud/hooks/maxcompute.py         |   3 +-
 .../providers/alibaba/cloud/hooks/oss.py      |   3 +-
 .../unit/alibaba/cloud/utils/test_utils.py    |   3 +-
 providers/amazon/pyproject.toml               |   3 +-
 .../amazon/aws/executors/ecs/utils.py         |   4 +-
 .../utils/exponential_backoff_retry.py        |   2 +-
 .../src/airflow/providers/amazon/aws/fs/s3.py |   3 +-
 .../providers/amazon/aws/hooks/base_aws.py    |  18 +-
 .../amazon/aws/hooks/batch_client.py          |   3 +-
 .../amazon/aws/hooks/batch_waiters.py         |   3 +-
 .../airflow/providers/amazon/aws/hooks/ec2.py |   3 +-
 .../airflow/providers/amazon/aws/hooks/eks.py |   3 +-
 .../airflow/providers/amazon/aws/hooks/rds.py |   3 +-
 .../airflow/providers/amazon/aws/hooks/s3.py  |   6 +-
 .../providers/amazon/aws/hooks/sagemaker.py   |   4 +-
 .../airflow/providers/amazon/aws/hooks/sns.py |   2 +-
 .../amazon/aws/log/cloudwatch_task_handler.py |   2 +-
 .../providers/amazon/aws/operators/s3.py      |   2 +-
 .../amazon/aws/operators/sagemaker.py         |   4 +-
 .../providers/amazon/aws/sensors/s3.py        |   4 +-
 .../amazon/aws/transfers/dynamodb_to_s3.py    |   4 +-
 .../amazon/aws/transfers/hive_to_dynamodb.py  |   4 +-
 .../amazon/aws/transfers/s3_to_sql.py         |   4 +-
 .../amazon/aws/transfers/sql_to_s3.py         |   4 +-
 .../amazon/aws/utils/connection_wrapper.py    |   2 +-
 .../providers/amazon/aws/utils/suppress.py    |   3 +-
 .../providers/amazon/aws/utils/waiter.py      |   2 +-
 .../aws/executors/ecs/test_ecs_executor.py    |   2 +-
 .../unit/amazon/aws/utils/eks_test_utils.py   |   4 +-
 providers/apache/beam/pyproject.toml          |   3 +-
 .../providers/apache/beam/hooks/beam.py       |   3 +-
 .../providers/apache/beam/operators/beam.py   |   4 +-
 providers/apache/cassandra/pyproject.toml     |   3 +-
 .../apache/cassandra/hooks/cassandra.py       |   4 +-
 providers/apache/drill/pyproject.toml         |   3 +-
 providers/apache/druid/pyproject.toml         |   3 +-
 providers/apache/flink/pyproject.toml         |   3 +-
 providers/apache/hdfs/pyproject.toml          |   3 +-
 providers/apache/hive/pyproject.toml          |   3 +-
 .../providers/apache/hive/hooks/hive.py       |   4 +-
 .../apache/hive/operators/hive_stats.py       |   4 +-
 providers/apache/iceberg/pyproject.toml       |   3 +-
 providers/apache/impala/pyproject.toml        |   3 +-
 providers/apache/kafka/pyproject.toml         |   3 +-
 .../apache/kafka/operators/consume.py         |   4 +-
 .../apache/kafka/operators/produce.py         |   4 +-
 .../providers/apache/kafka/sensors/kafka.py   |   4 +-
 providers/apache/kylin/pyproject.toml         |   3 +-
 providers/apache/livy/pyproject.toml          |   3 +-
 .../providers/apache/livy/hooks/livy.py       |  12 +-
 providers/apache/pig/pyproject.toml           |   3 +-
 providers/apache/pinot/pyproject.toml         |   3 +-
 providers/apache/spark/pyproject.toml         |   3 +-
 .../apache/spark/decorators/pyspark.py        |   4 +-
 providers/apache/tinkerpop/pyproject.toml     |   3 +-
 providers/apprise/pyproject.toml              |   3 +-
 providers/arangodb/pyproject.toml             |   3 +-
 .../providers/arangodb/operators/arangodb.py  |   4 +-
 providers/asana/pyproject.toml                |   3 +-
 providers/atlassian/jira/pyproject.toml       |   3 +-
 .../atlassian/jira/operators/jira.py          |   4 +-
 .../providers/atlassian/jira/sensors/jira.py  |   4 +-
 providers/celery/pyproject.toml               |   3 +-
 .../celery/executors/celery_executor_utils.py |   8 +-
 providers/cloudant/provider.yaml              |   7 -
 providers/cloudant/pyproject.toml             |   2 +-
 .../providers/cloudant/hooks/cloudant.py      |   6 +-
 .../unit/cloudant/hooks/test_cloudant.py      |  13 +-
 providers/cncf/kubernetes/pyproject.toml      |   3 +-
 .../providers/cncf/kubernetes/callbacks.py    |   4 +-
 .../cncf/kubernetes/decorators/kubernetes.py  |   4 +-
 .../kubernetes/decorators/kubernetes_cmd.py   |   4 +-
 .../executors/kubernetes_executor_types.py    |   8 +-
 .../providers/cncf/kubernetes/kube_client.py  |  13 +-
 .../cncf/kubernetes/operators/pod.py          |   4 +-
 .../kubernetes/utils/k8s_resource_iterator.py |   3 +-
 .../cncf/kubernetes/utils/pod_manager.py      |   3 +-
 .../decorators/test_kubernetes_commons.py     |   2 +-
 providers/cohere/pyproject.toml               |   3 +-
 providers/common/compat/pyproject.toml        |   3 +-
 providers/common/io/pyproject.toml            |   3 +-
 providers/common/messaging/pyproject.toml     |   3 +-
 providers/common/sql/pyproject.toml           |   3 +-
 .../providers/common/sql/dialects/dialect.py  |   4 +-
 .../providers/common/sql/dialects/dialect.pyi |   4 +-
 .../airflow/providers/common/sql/hooks/sql.py |   5 +-
 .../providers/common/sql/hooks/sql.pyi        |   4 +-
 .../providers/common/sql/operators/sql.py     |   4 +-
 .../providers/common/sql/sensors/sql.py       |   4 +-
 .../providers/common/sql/sensors/sql.pyi      |   4 +-
 providers/databricks/pyproject.toml           |   3 +-
 .../databricks/hooks/databricks_base.py       |   4 +-
 .../databricks/hooks/databricks_sql.py        |   3 +-
 .../sensors/databricks_partition.py           |   8 +-
 .../databricks/sensors/databricks_sql.py      |   4 +-
 .../providers/databricks/utils/databricks.py  |   6 +-
 providers/datadog/pyproject.toml              |   3 +-
 .../providers/datadog/sensors/datadog.py      |   3 +-
 providers/dbt/cloud/pyproject.toml            |   3 +-
 .../airflow/providers/dbt/cloud/hooks/dbt.py  |   6 +-
 providers/dingding/pyproject.toml             |   3 +-
 providers/discord/pyproject.toml              |   3 +-
 providers/docker/pyproject.toml               |   3 +-
 .../providers/docker/decorators/docker.py     |   4 +-
 .../providers/docker/operators/docker.py      |   3 +-
 providers/edge3/pyproject.toml                |   3 +-
 .../providers/edge3/example_dags/win_test.py  |   4 +-
 .../edge3/executors/edge_executor.py          |   4 +-
 .../edge3/worker_api/routes/_v2_compat.py     |   2 +-
 providers/elasticsearch/pyproject.toml        |   3 +-
 .../elasticsearch/log/es_response.py          |   2 +-
 .../elasticsearch/log/es_task_handler.py      |   7 +-
 .../log/elasticmock/utilities/__init__.py     |   6 +-
 providers/exasol/pyproject.toml               |   3 +-
 .../airflow/providers/exasol/hooks/exasol.py  |   4 +-
 providers/fab/pyproject.toml                  |   3 +-
 .../api/auth/backend/basic_auth.py            |   3 +-
 .../api/auth/backend/kerberos_auth.py         |   3 +-
 .../auth_manager/api/auth/backend/session.py  |   3 +-
 .../fab/www/api_connexion/parameters.py       |   4 +-
 .../fab/www/api_connexion/security.py         |   3 +-
 .../providers/fab/www/api_connexion/types.py  |  12 +-
 .../fab/src/airflow/providers/fab/www/auth.py |   4 +-
 .../providers/fab/www/security_manager.py     |   2 +-
 .../remote_user_api_auth_backend.py           |   3 +-
 providers/fab/www-hash.txt                    |   2 +-
 providers/facebook/pyproject.toml             |   3 +-
 providers/ftp/pyproject.toml                  |   3 +-
 .../src/airflow/providers/ftp/hooks/ftp.py    |   3 +-
 providers/git/pyproject.toml                  |   3 +-
 providers/github/pyproject.toml               |   3 +-
 .../providers/github/operators/github.py      |   3 +-
 .../providers/github/sensors/github.py        |   3 +-
 providers/google/pyproject.toml               |   3 +-
 .../providers/google/cloud/hooks/bigquery.py  |   5 +-
 .../providers/google/cloud/hooks/dataflow.py  |   4 +-
 .../providers/google/cloud/hooks/gcs.py       |   4 +-
 .../providers/google/cloud/hooks/mlengine.py  |   3 +-
 .../providers/google/cloud/hooks/spanner.py   |   4 +-
 .../google/cloud/hooks/vertex_ai/ray.py       |   2 +-
 .../providers/google/cloud/hooks/vision.py    |   4 +-
 .../providers/google/cloud/links/base.py      |   2 +-
 .../google/cloud/operators/pubsub.py          |   4 +-
 .../google/cloud/sensors/bigquery_dts.py      |   2 +-
 .../google/cloud/sensors/dataflow.py          |   4 +-
 .../providers/google/cloud/sensors/gcs.py     |   4 +-
 .../providers/google/cloud/sensors/pubsub.py  |   4 +-
 .../cloud/transfers/cassandra_to_gcs.py       |   6 +-
 .../google/cloud/transfers/mssql_to_gcs.py    |   2 +-
 .../google/cloud/utils/field_validator.py     |   3 +-
 .../common/auth_backend/google_openid.py      |   3 +-
 .../providers/google/common/deprecated.py     |   3 +-
 .../google/common/hooks/base_google.py        |   6 +-
 .../google/suite/transfers/sql_to_sheets.py   |   2 +-
 .../example_dataflow_native_python_async.py   |   2 +-
 .../example_dataflow_sensors_deferrable.py    |   2 +-
 providers/grpc/pyproject.toml                 |   3 +-
 .../src/airflow/providers/grpc/hooks/grpc.py  |   4 +-
 .../airflow/providers/grpc/operators/grpc.py  |   4 +-
 providers/hashicorp/pyproject.toml            |   3 +-
 providers/http/pyproject.toml                 |   3 +-
 .../src/airflow/providers/http/hooks/http.py  |   3 +-
 .../airflow/providers/http/operators/http.py  |   4 +-
 .../airflow/providers/http/sensors/http.py    |   4 +-
 .../airflow/providers/http/triggers/http.py   |   2 +-
 providers/imap/pyproject.toml                 |   3 +-
 providers/influxdb/pyproject.toml             |   3 +-
 providers/jdbc/pyproject.toml                 |   3 +-
 providers/jenkins/pyproject.toml              |   3 +-
 .../jenkins/operators/jenkins_job_trigger.py  |   7 +-
 providers/keycloak/pyproject.toml             |   3 +-
 providers/microsoft/azure/pyproject.toml      |   3 +-
 .../providers/microsoft/azure/hooks/asb.py    |   3 +-
 .../providers/microsoft/azure/hooks/cosmos.py |   4 +-
 .../microsoft/azure/hooks/data_factory.py     |   7 +-
 .../microsoft/azure/hooks/data_lake.py        |   4 +-
 .../microsoft/azure/hooks/synapse.py          |   4 +-
 .../providers/microsoft/azure/hooks/wasb.py   |   4 +-
 .../microsoft/azure/operators/asb.py          |   4 +-
 .../microsoft/azure/operators/msgraph.py      |   3 +-
 .../microsoft/azure/sensors/msgraph.py        |   4 +-
 providers/microsoft/mssql/pyproject.toml      |   3 +-
 providers/microsoft/psrp/pyproject.toml       |   3 +-
 .../providers/microsoft/psrp/hooks/psrp.py    |   4 +-
 providers/microsoft/winrm/pyproject.toml      |   3 +-
 providers/mongo/pyproject.toml                |   3 +-
 .../airflow/providers/mongo/hooks/mongo.py    |   2 +-
 providers/mysql/pyproject.toml                |   3 +-
 providers/neo4j/pyproject.toml                |   3 +-
 providers/odbc/pyproject.toml                 |   3 +-
 providers/openai/pyproject.toml               |   3 +-
 .../providers/openai/operators/openai.py      |   2 +-
 providers/openfaas/pyproject.toml             |   3 +-
 providers/openlineage/pyproject.toml          |   3 +-
 .../providers/openlineage/extractors/base.py  |   4 +-
 .../openlineage/extractors/python.py          |   2 +-
 .../providers/openlineage/sqlparser.py        |   3 +-
 .../providers/openlineage/utils/sql.py        |   4 +-
 .../providers/openlineage/utils/utils.py      |  11 +-
 .../unit/openlineage/plugins/test_listener.py |   3 +-
 providers/opensearch/pyproject.toml           |   3 +-
 .../providers/opensearch/log/os_response.py   |   2 +-
 .../opensearch/log/os_task_handler.py         |   7 +-
 providers/opsgenie/pyproject.toml             |   3 +-
 providers/oracle/pyproject.toml               |   3 +-
 .../airflow/providers/oracle/hooks/oracle.py  |   4 +-
 providers/pagerduty/pyproject.toml            |   3 +-
 providers/papermill/pyproject.toml            |   3 +-
 providers/pgvector/pyproject.toml             |   3 +-
 providers/pinecone/pyproject.toml             |   3 +-
 providers/postgres/pyproject.toml             |   3 +-
 .../providers/postgres/hooks/postgres.py      |   6 +-
 providers/presto/pyproject.toml               |   3 +-
 providers/qdrant/pyproject.toml               |   3 +-
 providers/redis/pyproject.toml                |   3 +-
 providers/salesforce/pyproject.toml           |   3 +-
 .../providers/salesforce/operators/bulk.py    |   3 +-
 providers/samba/pyproject.toml                |   3 +-
 providers/segment/pyproject.toml              |   3 +-
 providers/sendgrid/pyproject.toml             |   3 +-
 .../providers/sendgrid/utils/emailer.py       |   3 +-
 providers/sftp/pyproject.toml                 |   3 +-
 .../providers/sftp/decorators/sensors/sftp.py |   3 +-
 .../src/airflow/providers/sftp/hooks/sftp.py  |   4 +-
 .../airflow/providers/sftp/sensors/sftp.py    |   4 +-
 providers/singularity/pyproject.toml          |   3 +-
 providers/slack/pyproject.toml                |   3 +-
 .../providers/slack/hooks/slack_webhook.py    |   3 +-
 .../providers/slack/operators/slack.py        |   4 +-
 .../providers/slack/transfers/sql_to_slack.py |   4 +-
 providers/smtp/pyproject.toml                 |   3 +-
 providers/snowflake/pyproject.toml            |   3 +-
 .../snowflake/decorators/snowpark.py          |   4 +-
 .../providers/snowflake/hooks/snowflake.py    |   6 +-
 .../snowflake/hooks/snowflake_sql_api.py      |   6 +-
 .../providers/snowflake/operators/snowpark.py |   4 +-
 .../providers/snowflake/utils/snowpark.py     |   3 +-
 .../transfers/test_copy_into_snowflake.py     |   2 +-
 providers/sqlite/pyproject.toml               |   3 +-
 providers/ssh/pyproject.toml                  |   3 +-
 providers/standard/pyproject.toml             |   3 +-
 .../providers/standard/decorators/bash.py     |   4 +-
 .../decorators/branch_external_python.py      |   3 +-
 .../standard/decorators/branch_python.py      |   3 +-
 .../standard/decorators/branch_virtualenv.py  |   3 +-
 .../standard/decorators/external_python.py    |   3 +-
 .../providers/standard/decorators/python.py   |   4 +-
 .../standard/decorators/python_virtualenv.py  |   3 +-
 .../providers/standard/decorators/sensor.py   |   4 +-
 .../standard/decorators/short_circuit.py      |   3 +-
 .../providers/standard/operators/bash.py      |   4 +-
 .../providers/standard/operators/python.py    |   4 +-
 .../standard/operators/trigger_dagrun.py      |   2 +-
 .../standard/sensors/external_task.py         |   6 +-
 .../providers/standard/sensors/python.py      |   4 +-
 .../providers/standard/utils/skipmixin.py     |   2 +-
 .../unit/standard/decorators/test_python.py   |   5 +-
 providers/tableau/pyproject.toml              |   3 +-
 providers/telegram/pyproject.toml             |   3 +-
 providers/teradata/pyproject.toml             |   3 +-
 .../airflow/providers/teradata/hooks/bteq.py  |   4 +-
 providers/trino/pyproject.toml                |   3 +-
 providers/vertica/pyproject.toml              |   3 +-
 .../providers/vertica/hooks/vertica.py        |   4 +-
 providers/weaviate/pyproject.toml             |   3 +-
 .../providers/weaviate/hooks/weaviate.py      |   3 +-
 providers/yandex/pyproject.toml               |   3 +-
 providers/ydb/pyproject.toml                  |   3 +-
 providers/zendesk/pyproject.toml              |   3 +-
 pyproject.toml                                |   7 +-
 scripts/ci/pre_commit/chart_schema.py         |   2 +-
 scripts/ci/pre_commit/check_deprecations.py   |   4 +-
 .../ci/pre_commit/common_precommit_utils.py   |   6 +-
 scripts/ci/pre_commit/mypy.py                 |   2 +-
 scripts/ci/pre_commit/mypy_folder.py          |   2 +-
 .../ci/testing/summarize_captured_warnings.py |   4 +-
 .../install_airflow_and_providers.py          |   2 +-
 .../in_container/run_generate_constraints.py  |   2 +-
 .../in_container/run_migration_reference.py   |   2 +-
 .../run_provider_yaml_files_check.py          |   4 +-
 task-sdk/src/airflow/sdk/definitions/dag.py   |   2 +-
 501 files changed, 1726 insertions(+), 1842 deletions(-)

diff --git a/.github/actions/breeze/action.yml b/.github/actions/breeze/action.yml
index 39e87cd7d8b52..03908cd2e3cfc 100644
--- a/.github/actions/breeze/action.yml
+++ b/.github/actions/breeze/action.yml
@@ -21,7 +21,7 @@ description: 'Sets up Python and Breeze'
 inputs:
   python-version:
     description: 'Python version to use'
-    default: "3.9"
+    default: "3.10"
   use-uv:
     description: 'Whether to use uv tool'
     required: true
diff --git a/.github/actions/prepare_all_ci_images/action.yml b/.github/actions/prepare_all_ci_images/action.yml
index 76c00a72a3998..7b461f4e3e2db 100644
--- a/.github/actions/prepare_all_ci_images/action.yml
+++ b/.github/actions/prepare_all_ci_images/action.yml
@@ -34,14 +34,8 @@ runs:
     # TODO: Currently we cannot loop through the list of python versions and have dynamic list of
     #       tasks. Instead we hardcode all possible python versions and they - but
     #       this should be implemented in stash action as list of keys to download.
-    #       That includes 3.8 - 3.12 as we are backporting it to v2-10-test branch
+    #       That includes 3.9 - 3.12 as we are backporting it to v3-0-test branch
     #       This is captured in https://github.com/apache/airflow/issues/45268
-    - name: "Restore CI docker image ${{ inputs.platform }}:3.8"
-      uses: ./.github/actions/prepare_single_ci_image
-      with:
-        platform: ${{ inputs.platform }}
-        python: "3.8"
-        python-versions-list-as-string: ${{ inputs.python-versions-list-as-string }}
     - name: "Restore CI docker image ${{ inputs.platform }}:3.9"
       uses: ./.github/actions/prepare_single_ci_image
       with:
diff --git a/.github/workflows/test-providers.yml b/.github/workflows/test-providers.yml
index 525e8e8599a9d..eec3c04722744 100644
--- a/.github/workflows/test-providers.yml
+++ b/.github/workflows/test-providers.yml
@@ -126,10 +126,6 @@ jobs:
           breeze release-management generate-issue-content-providers
           --only-available-in-dist --disable-progress
         if: matrix.package-format == 'wheel'
-      - name: Remove Python 3.9-incompatible provider distributions
-        run: |
-          echo "Removing Python 3.9-incompatible provider: cloudant"
-          rm -vf dist/*cloudant*
       - name: "Generate source constraints from CI image"
         shell: bash
         run: >
diff --git a/Dockerfile b/Dockerfile
index 72a5693030960..2336543d42fab 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -48,7 +48,7 @@ ARG AIRFLOW_USER_HOME_DIR=/home/airflow
 # latest released version here
 ARG AIRFLOW_VERSION="3.0.2"
 
-ARG PYTHON_BASE_IMAGE="python:3.9-slim-bookworm"
+ARG PYTHON_BASE_IMAGE="python:3.10-slim-bookworm"
 
 
 # You can swap comments between those two args to test pip from the main version
diff --git a/Dockerfile.ci b/Dockerfile.ci
index beebd98f788ae..e9057ce19736e 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -16,7 +16,7 @@
 #
 # WARNING: THIS DOCKERFILE IS NOT INTENDED FOR PRODUCTION USE OR DEPLOYMENT.
 #
-ARG PYTHON_BASE_IMAGE="python:3.9-slim-bookworm"
+ARG PYTHON_BASE_IMAGE="python:3.10-slim-bookworm"
 
 ##############################################################################################
 # This is the script image where we keep all inlined bash scripts needed in other segments
diff --git a/README.md b/README.md
index d3b31364b94cc..463b00efcabe2 100644
--- a/README.md
+++ b/README.md
@@ -101,7 +101,7 @@ Apache Airflow is tested with:
 
 |            | Main version (dev)     | Stable version (3.0.2) |
 |------------|------------------------|------------------------|
-| Python     | 3.9, 3.10, 3.11, 3.12  | 3.9, 3.10, 3.11, 3.12  |
+| Python     | 3.10, 3.11, 3.12       | 3.9, 3.10, 3.11, 3.12  |
 | Platform   | AMD64/ARM64(\*)        | AMD64/ARM64(\*)        |
 | Kubernetes | 1.30, 1.31, 1.32, 1.33 | 1.30, 1.31, 1.32, 1.33 |
 | PostgreSQL | 13, 14, 15, 16, 17     | 13, 14, 15, 16, 17     |
diff --git a/airflow-core/docs/extra-packages-ref.rst b/airflow-core/docs/extra-packages-ref.rst
index 7a13cc39dcc08..47106fab2ed8d 100644
--- a/airflow-core/docs/extra-packages-ref.rst
+++ b/airflow-core/docs/extra-packages-ref.rst
@@ -164,7 +164,7 @@ with a consistent set of dependencies based on constraint files provided by Airf
     :substitutions:
 
     pip install apache-airflow[google,amazon,apache-spark]==|version| \
-      --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.9.txt"
+      --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.10.txt"
 
 Note, that this will install providers in the versions that were released at the time of Airflow |version| release. You can later
 upgrade those providers manually if you want to use latest versions of the providers.
diff --git a/airflow-core/docs/installation/installing-from-pypi.rst b/airflow-core/docs/installation/installing-from-pypi.rst
index 1a70723842a60..b51b897b1344b 100644
--- a/airflow-core/docs/installation/installing-from-pypi.rst
+++ b/airflow-core/docs/installation/installing-from-pypi.rst
@@ -40,7 +40,7 @@ Typical command to install Airflow from scratch in a reproducible way from PyPI
 
 .. code-block:: bash
 
-    pip install "apache-airflow[celery]==|version|" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.9.txt"
+    pip install "apache-airflow[celery]==|version|" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.10.txt"
 
 
 Typically, you can add other dependencies and providers as separate command after the reproducible
@@ -112,7 +112,7 @@ but you can pick your own set of extras and providers to install.
 
 .. code-block:: bash
 
-    pip install "apache-airflow[celery]==|version|" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.9.txt"
+    pip install "apache-airflow[celery]==|version|" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.10.txt"
 
 
 .. note::
@@ -143,7 +143,7 @@ performing dependency resolution.
 
 .. code-block:: bash
 
-    pip install "apache-airflow[celery]==|version|" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.9.txt"
+    pip install "apache-airflow[celery]==|version|" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.10.txt"
     pip install "apache-airflow==|version|" apache-airflow-providers-google==10.1.1
 
 You can also downgrade or upgrade other dependencies this way - even if they are not compatible with
@@ -151,7 +151,7 @@ those dependencies that are stored in the original constraints file:
 
 .. code-block:: bash
 
-    pip install "apache-airflow[celery]==|version|" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.9.txt"
+    pip install "apache-airflow[celery]==|version|" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.10.txt"
     pip install "apache-airflow[celery]==|version|" dbt-core==0.20.0
 
 .. warning::
@@ -194,7 +194,7 @@ one provided by the community.
 
 .. code-block:: bash
 
-    pip install "apache-airflow[celery]==|version|" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.9.txt"
+    pip install "apache-airflow[celery]==|version|" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.10.txt"
     pip install "apache-airflow==|version|" dbt-core==0.20.0
     pip freeze > my-constraints.txt
 
diff --git a/airflow-core/docs/start.rst b/airflow-core/docs/start.rst
index d0d0f1dd5f782..07af3ba73028f 100644
--- a/airflow-core/docs/start.rst
+++ b/airflow-core/docs/start.rst
@@ -28,7 +28,7 @@ This quick start guide will help you bootstrap an Airflow standalone instance on
 
    Officially supported installation methods is with``pip`.
 
-   Run ``pip install apache-airflow[EXTRAS]==AIRFLOW_VERSION --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-AIRFLOW_VERSION/constraints-PYTHON_VERSION.txt"``, for example ``pip install "apache-airflow[celery]==3.0.0" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-3.0.0/constraints-3.9.txt"`` to install Airflow in a reproducible way.
+   Run ``pip install apache-airflow[EXTRAS]==AIRFLOW_VERSION --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-AIRFLOW_VERSION/constraints-PYTHON_VERSION.txt"``, for example ``pip install "apache-airflow[celery]==3.0.0" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-3.0.0/constraints-3.10.txt"`` to install Airflow in a reproducible way.
 
 
 
@@ -75,7 +75,7 @@ This quick start guide will help you bootstrap an Airflow standalone instance on
       PYTHON_VERSION="$(python -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')"
 
       CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"
-      # For example this would install 3.0.0 with python 3.9: https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.9.txt
+      # For example this would install 3.0.0 with python 3.10: https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.10.txt
 
       uv pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"
 
diff --git a/airflow-core/hatch_build.py b/airflow-core/hatch_build.py
index 438767bcd9d5d..d691e6c25cd1d 100644
--- a/airflow-core/hatch_build.py
+++ b/airflow-core/hatch_build.py
@@ -19,10 +19,10 @@
 import logging
 import os
 import shutil
-from collections.abc import Iterable
+from collections.abc import Callable, Iterable
 from pathlib import Path
 from subprocess import run
-from typing import Any, Callable
+from typing import Any
 
 from hatchling.builders.config import BuilderConfig
 from hatchling.builders.plugin.interface import BuilderInterface
diff --git a/airflow-core/src/airflow/api_fastapi/auth/tokens.py b/airflow-core/src/airflow/api_fastapi/auth/tokens.py
index d56678f052811..dfcef7318313a 100644
--- a/airflow-core/src/airflow/api_fastapi/auth/tokens.py
+++ b/airflow-core/src/airflow/api_fastapi/auth/tokens.py
@@ -21,9 +21,9 @@
 import time
 import uuid
 from base64 import urlsafe_b64encode
-from collections.abc import Sequence
+from collections.abc import Callable, Sequence
 from datetime import datetime
-from typing import TYPE_CHECKING, Any, Callable, Literal, overload
+from typing import TYPE_CHECKING, Any, Literal, overload
 
 import attrs
 import httpx
@@ -68,7 +68,7 @@ def key_to_jwk_dict(key: AllowedKeys, kid: str | None = None):
     from cryptography.hazmat.primitives.asymmetric.rsa import RSAPrivateKey, RSAPublicKey
     from jwt.algorithms import OKPAlgorithm, RSAAlgorithm
 
-    if isinstance(key, (RSAPrivateKey, Ed25519PrivateKey)):
+    if isinstance(key, RSAPrivateKey | Ed25519PrivateKey):
         key = key.public_key()
 
     if isinstance(key, RSAPublicKey):
diff --git a/airflow-core/src/airflow/api_fastapi/common/parameters.py b/airflow-core/src/airflow/api_fastapi/common/parameters.py
index 65b2c77b8959b..c6e3bc945b020 100644
--- a/airflow-core/src/airflow/api_fastapi/common/parameters.py
+++ b/airflow-core/src/airflow/api_fastapi/common/parameters.py
@@ -18,19 +18,16 @@
 from __future__ import annotations
 
 from abc import ABC, abstractmethod
-from collections.abc import Iterable
+from collections.abc import Callable, Iterable
 from datetime import datetime
 from enum import Enum
 from typing import (
     TYPE_CHECKING,
     Annotated,
     Any,
-    Callable,
     Generic,
     Literal,
-    Optional,
     TypeVar,
-    Union,
     overload,
 )
 
@@ -267,7 +264,7 @@ def __init__(
         self.filter_option: FilterOptionEnum = filter_option
 
     def to_orm(self, select: Select) -> Select:
-        if isinstance(self.value, (list, str)) and not self.value and self.skip_none:
+        if isinstance(self.value, list | str) and not self.value and self.skip_none:
             return select
         if self.value is None and self.skip_none:
             return select
@@ -520,14 +517,14 @@ def depends_float(
 
 # Common Safe DateTime
 DateTimeQuery = Annotated[str, AfterValidator(_safe_parse_datetime)]
-OptionalDateTimeQuery = Annotated[Union[str, None], AfterValidator(_safe_parse_datetime_optional)]
+OptionalDateTimeQuery = Annotated[str | None, AfterValidator(_safe_parse_datetime_optional)]
 
 # DAG
 QueryLimit = Annotated[LimitFilter, Depends(LimitFilter.depends)]
 QueryOffset = Annotated[OffsetFilter, Depends(OffsetFilter.depends)]
 QueryPausedFilter = Annotated[
-    FilterParam[Optional[bool]],
-    Depends(filter_param_factory(DagModel.is_paused, Optional[bool], filter_name="paused")),
+    FilterParam[bool | None],
+    Depends(filter_param_factory(DagModel.is_paused, bool | None, filter_name="paused")),
 ]
 QueryExcludeStaleFilter = Annotated[_ExcludeStaleFilter, Depends(_ExcludeStaleFilter.depends)]
 QueryDagIdPatternSearch = Annotated[
@@ -544,8 +541,8 @@ def depends_float(
 
 # DagRun
 QueryLastDagRunStateFilter = Annotated[
-    FilterParam[Optional[DagRunState]],
-    Depends(filter_param_factory(DagRun.state, Optional[DagRunState], filter_name="last_dag_run_state")),
+    FilterParam[DagRunState | None],
+    Depends(filter_param_factory(DagRun.state, DagRunState | None, filter_name="last_dag_run_state")),
 ]
 
 
@@ -696,8 +693,8 @@ def _optional_boolean(value: bool | None) -> bool | None:
     return value if value is not None else False
 
 
-QueryIncludeUpstream = Annotated[Union[bool], AfterValidator(_optional_boolean)]
-QueryIncludeDownstream = Annotated[Union[bool], AfterValidator(_optional_boolean)]
+QueryIncludeUpstream = Annotated[bool, AfterValidator(_optional_boolean)]
+QueryIncludeDownstream = Annotated[bool, AfterValidator(_optional_boolean)]
 
 state_priority: list[None | TaskInstanceState] = [
     TaskInstanceState.FAILED,
diff --git a/airflow-core/src/airflow/api_fastapi/common/router.py b/airflow-core/src/airflow/api_fastapi/common/router.py
index 12d9fca072459..e01b8462ba8bf 100644
--- a/airflow-core/src/airflow/api_fastapi/common/router.py
+++ b/airflow-core/src/airflow/api_fastapi/common/router.py
@@ -17,7 +17,8 @@
 
 from __future__ import annotations
 
-from typing import Any, Callable
+from collections.abc import Callable
+from typing import Any
 
 from fastapi import APIRouter
 from fastapi.types import DecoratedCallable
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/pools.py b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/pools.py
index 2e7ae13cfcdb2..4342d04c1e125 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/pools.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/pools.py
@@ -17,7 +17,8 @@
 
 from __future__ import annotations
 
-from typing import Annotated, Callable
+from collections.abc import Callable
+from typing import Annotated
 
 from pydantic import BeforeValidator, Field
 
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/security.py b/airflow-core/src/airflow/api_fastapi/core_api/security.py
index be428124f9db6..5b3036de0d46e 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/security.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/security.py
@@ -16,8 +16,9 @@
 # under the License.
 from __future__ import annotations
 
+from collections.abc import Callable
 from pathlib import Path
-from typing import TYPE_CHECKING, Annotated, Callable
+from typing import TYPE_CHECKING, Annotated
 from urllib.parse import ParseResult, urljoin, urlparse
 
 from fastapi import Depends, HTTPException, Request, status
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/services/public/variables.py b/airflow-core/src/airflow/api_fastapi/core_api/services/public/variables.py
index 0208ea1a0a5f7..00bbf543288fe 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/services/public/variables.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/services/public/variables.py
@@ -64,7 +64,7 @@ def handle_bulk_create(self, action: BulkCreateAction, results: BulkActionRespon
 
             for variable in action.entities:
                 if variable.key in create_keys:
-                    should_serialize_json = isinstance(variable.value, (dict, list))
+                    should_serialize_json = isinstance(variable.value, dict | list)
                     Variable.set(
                         key=variable.key,
                         value=variable.value,
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/services/ui/grid.py b/airflow-core/src/airflow/api_fastapi/core_api/services/ui/grid.py
index a69cafb7bbbda..9c356e9c3ad84 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/services/ui/grid.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/services/ui/grid.py
@@ -133,7 +133,7 @@ def get_child_task_map(parent_task_id: str, task_node_map: dict[str, dict[str, A
 
 
 def _count_tis(node: int | MappedTaskGroup | MappedOperator, run_id: str, session: SessionDep) -> int:
-    if not isinstance(node, (MappedTaskGroup, MappedOperator)):
+    if not isinstance(node, MappedTaskGroup | MappedOperator):
         return node
     with contextlib.suppress(NotFullyPopulated, NotMapped):
         return DBBaseOperator.get_mapped_ti_count(node, run_id=run_id, session=session)
diff --git a/airflow-core/src/airflow/api_fastapi/execution_api/datamodels/taskinstance.py b/airflow-core/src/airflow/api_fastapi/execution_api/datamodels/taskinstance.py
index c43c931f3e28a..5afc2e75a7193 100644
--- a/airflow-core/src/airflow/api_fastapi/execution_api/datamodels/taskinstance.py
+++ b/airflow-core/src/airflow/api_fastapi/execution_api/datamodels/taskinstance.py
@@ -19,7 +19,7 @@
 import uuid
 from datetime import timedelta
 from enum import Enum
-from typing import Annotated, Any, Literal, Union
+from typing import Annotated, Any, Literal
 
 from pydantic import (
     AwareDatetime,
@@ -213,14 +213,12 @@ def ti_state_discriminator(v: dict[str, str] | StrictBaseModel) -> str:
 # It is called "_terminal_" to avoid future conflicts if we added an actual state named "terminal"
 # and "_other_" is a catch-all for all other states that are not covered by the other schemas.
 TIStateUpdate = Annotated[
-    Union[
-        Annotated[TITerminalStatePayload, Tag("_terminal_")],
-        Annotated[TISuccessStatePayload, Tag("success")],
-        Annotated[TITargetStatePayload, Tag("_other_")],
-        Annotated[TIDeferredStatePayload, Tag("deferred")],
-        Annotated[TIRescheduleStatePayload, Tag("up_for_reschedule")],
-        Annotated[TIRetryStatePayload, Tag("up_for_retry")],
-    ],
+    Annotated[TITerminalStatePayload, Tag("_terminal_")]
+    | Annotated[TISuccessStatePayload, Tag("success")]
+    | Annotated[TITargetStatePayload, Tag("_other_")]
+    | Annotated[TIDeferredStatePayload, Tag("deferred")]
+    | Annotated[TIRescheduleStatePayload, Tag("up_for_reschedule")]
+    | Annotated[TIRetryStatePayload, Tag("up_for_retry")],
     Discriminator(ti_state_discriminator),
 ]
 
diff --git a/airflow-core/src/airflow/api_fastapi/execution_api/deps.py b/airflow-core/src/airflow/api_fastapi/execution_api/deps.py
index c2161180dbb46..2648a64ffad7a 100644
--- a/airflow-core/src/airflow/api_fastapi/execution_api/deps.py
+++ b/airflow-core/src/airflow/api_fastapi/execution_api/deps.py
@@ -20,7 +20,7 @@
 
 import sys
 import time
-from typing import Any, Optional
+from typing import Any
 
 import structlog
 import svcs
@@ -55,8 +55,8 @@ class JWTBearer(HTTPBearer):
 
     def __init__(
         self,
-        path_param_name: Optional[str] = None,
-        required_claims: Optional[dict[str, Any]] = None,
+        path_param_name: str | None = None,
+        required_claims: dict[str, Any] | None = None,
     ):
         super().__init__(auto_error=False)
         self.path_param_name = path_param_name
@@ -66,7 +66,7 @@ async def __call__(  # type: ignore[override]
         self,
         request: Request,
         services=DepContainer,
-    ) -> Optional[TIToken]:
+    ) -> TIToken | None:
         creds = await super().__call__(request)
         if not creds:
             raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Missing auth token")
diff --git a/airflow-core/src/airflow/api_fastapi/execution_api/routes/task_instances.py b/airflow-core/src/airflow/api_fastapi/execution_api/routes/task_instances.py
index e22d0a5f34d0d..0a57e604a6eb6 100644
--- a/airflow-core/src/airflow/api_fastapi/execution_api/routes/task_instances.py
+++ b/airflow-core/src/airflow/api_fastapi/execution_api/routes/task_instances.py
@@ -434,7 +434,7 @@ def _create_ti_state_update_query_and_update_state(
     dag_bag: DagBagDep,
     dag_id: str,
 ) -> tuple[Update, TaskInstanceState]:
-    if isinstance(ti_patch_payload, (TITerminalStatePayload, TIRetryStatePayload, TISuccessStatePayload)):
+    if isinstance(ti_patch_payload, TITerminalStatePayload | TIRetryStatePayload | TISuccessStatePayload):
         ti = session.get(TI, ti_id_str)
         updated_state = ti_patch_payload.state
         query = TI.duration_expression_update(ti_patch_payload.end_date, query, session.bind)
diff --git a/airflow-core/src/airflow/api_fastapi/execution_api/versions/v2025_05_20.py b/airflow-core/src/airflow/api_fastapi/execution_api/versions/v2025_05_20.py
index f8039f0a4d3fb..d671c97dafd9e 100644
--- a/airflow-core/src/airflow/api_fastapi/execution_api/versions/v2025_05_20.py
+++ b/airflow-core/src/airflow/api_fastapi/execution_api/versions/v2025_05_20.py
@@ -17,8 +17,6 @@
 
 from __future__ import annotations
 
-from typing import Optional
-
 from cadwyn import ResponseInfo, VersionChange, convert_response_to_previous_version_for, schema
 
 from airflow.api_fastapi.execution_api.datamodels.taskinstance import TIRunContext
@@ -30,7 +28,7 @@ class DowngradeUpstreamMapIndexes(VersionChange):
     description = __doc__
 
     instructions_to_migrate_to_previous_version = (
-        schema(TIRunContext).field("upstream_map_indexes").had(type=Optional[dict[str, int]]),  # type: ignore
+        schema(TIRunContext).field("upstream_map_indexes").had(type=dict[str, int] | None),  # type: ignore
     )
 
     @convert_response_to_previous_version_for(TIRunContext)  # type: ignore[arg-type]
diff --git a/airflow-core/src/airflow/callbacks/callback_requests.py b/airflow-core/src/airflow/callbacks/callback_requests.py
index 8cf8c77035737..6c4c978b672de 100644
--- a/airflow-core/src/airflow/callbacks/callback_requests.py
+++ b/airflow-core/src/airflow/callbacks/callback_requests.py
@@ -16,7 +16,7 @@
 # under the License.
 from __future__ import annotations
 
-from typing import TYPE_CHECKING, Annotated, Literal, Union
+from typing import TYPE_CHECKING, Annotated, Literal
 
 from pydantic import BaseModel, Field
 
@@ -86,6 +86,6 @@ class DagCallbackRequest(BaseCallbackRequest):
 
 
 CallbackRequest = Annotated[
-    Union[DagCallbackRequest, TaskCallbackRequest],
+    DagCallbackRequest | TaskCallbackRequest,
     Field(discriminator="type"),
 ]
diff --git a/airflow-core/src/airflow/callbacks/pipe_callback_sink.py b/airflow-core/src/airflow/callbacks/pipe_callback_sink.py
index 7f6a2883743df..f7aba11960c18 100644
--- a/airflow-core/src/airflow/callbacks/pipe_callback_sink.py
+++ b/airflow-core/src/airflow/callbacks/pipe_callback_sink.py
@@ -18,7 +18,8 @@
 from __future__ import annotations
 
 import contextlib
-from typing import TYPE_CHECKING, Callable
+from collections.abc import Callable
+from typing import TYPE_CHECKING
 
 from airflow.callbacks.base_callback_sink import BaseCallbackSink
 
diff --git a/airflow-core/src/airflow/cli/cli_config.py b/airflow-core/src/airflow/cli/cli_config.py
index 725fbe46a4330..31022e17219c4 100644
--- a/airflow-core/src/airflow/cli/cli_config.py
+++ b/airflow-core/src/airflow/cli/cli_config.py
@@ -24,8 +24,8 @@
 import json
 import os
 import textwrap
-from collections.abc import Iterable
-from typing import Callable, NamedTuple, Union
+from collections.abc import Callable, Iterable
+from typing import NamedTuple
 
 import lazy_object_proxy
 
@@ -932,7 +932,7 @@ class GroupCommand(NamedTuple):
     epilog: str | None = None
 
 
-CLICommand = Union[ActionCommand, GroupCommand]
+CLICommand = ActionCommand | GroupCommand
 
 ASSETS_COMMANDS = (
     ActionCommand(
diff --git a/airflow-core/src/airflow/cli/commands/daemon_utils.py b/airflow-core/src/airflow/cli/commands/daemon_utils.py
index 409ff15e77fd8..c55c12b380461 100644
--- a/airflow-core/src/airflow/cli/commands/daemon_utils.py
+++ b/airflow-core/src/airflow/cli/commands/daemon_utils.py
@@ -18,7 +18,7 @@
 
 import signal
 from argparse import Namespace
-from typing import Callable
+from collections.abc import Callable
 
 from daemon import daemon
 from daemon.pidfile import TimeoutPIDLockFile
diff --git a/airflow-core/src/airflow/cli/commands/plugins_command.py b/airflow-core/src/airflow/cli/commands/plugins_command.py
index 29dd75674afe0..f26546439e940 100644
--- a/airflow-core/src/airflow/cli/commands/plugins_command.py
+++ b/airflow-core/src/airflow/cli/commands/plugins_command.py
@@ -27,7 +27,7 @@
 
 
 def _get_name(class_like_object) -> str:
-    if isinstance(class_like_object, (str, PluginsDirectorySource)):
+    if isinstance(class_like_object, str | PluginsDirectorySource):
         return str(class_like_object)
     if inspect.isclass(class_like_object):
         return class_like_object.__name__
diff --git a/airflow-core/src/airflow/cli/simple_table.py b/airflow-core/src/airflow/cli/simple_table.py
index b8e4c6a7a41a0..01025f3d64762 100644
--- a/airflow-core/src/airflow/cli/simple_table.py
+++ b/airflow-core/src/airflow/cli/simple_table.py
@@ -18,8 +18,8 @@
 
 import inspect
 import json
-from collections.abc import Sequence
-from typing import TYPE_CHECKING, Any, Callable
+from collections.abc import Callable, Sequence
+from typing import TYPE_CHECKING, Any
 
 from rich.box import ASCII_DOUBLE_HEAD
 from rich.console import Console
@@ -84,7 +84,7 @@ def print_as_plain_table(self, data: list[dict]):
         print(output)
 
     def _normalize_data(self, value: Any, output: str) -> list | str | dict | None:
-        if isinstance(value, (tuple, list)):
+        if isinstance(value, tuple | list):
             if output == "table":
                 return ",".join(str(self._normalize_data(x, output)) for x in value)
             return [self._normalize_data(x, output) for x in value]
diff --git a/airflow-core/src/airflow/configuration.py b/airflow-core/src/airflow/configuration.py
index a32f119c744a6..d2f2cce2dfbc4 100644
--- a/airflow-core/src/airflow/configuration.py
+++ b/airflow-core/src/airflow/configuration.py
@@ -39,7 +39,7 @@
 from io import StringIO
 from json.decoder import JSONDecodeError
 from re import Pattern
-from typing import IO, TYPE_CHECKING, Any, Union
+from typing import IO, TYPE_CHECKING, Any
 from urllib.parse import urlsplit
 
 from packaging.version import parse as parse_version
@@ -64,9 +64,9 @@
 
 _SQLITE3_VERSION_PATTERN = re.compile(r"(?P<version>^\d+(?:\.\d+)*)\D?.*$")
 
-ConfigType = Union[str, int, float, bool]
+ConfigType = str | int | float | bool
 ConfigOptionsDictType = dict[str, ConfigType]
-ConfigSectionSourcesType = dict[str, Union[str, tuple[str, str]]]
+ConfigSectionSourcesType = dict[str, str | tuple[str, str]]
 ConfigSourcesType = dict[str, ConfigSectionSourcesType]
 
 ENV_VAR_PREFIX = "AIRFLOW__"
diff --git a/airflow-core/src/airflow/dag_processing/processor.py b/airflow-core/src/airflow/dag_processing/processor.py
index 011393f22c886..d626338482420 100644
--- a/airflow-core/src/airflow/dag_processing/processor.py
+++ b/airflow-core/src/airflow/dag_processing/processor.py
@@ -19,8 +19,9 @@
 import os
 import sys
 import traceback
+from collections.abc import Callable
 from pathlib import Path
-from typing import TYPE_CHECKING, Annotated, BinaryIO, Callable, ClassVar, Literal, Union
+from typing import TYPE_CHECKING, Annotated, BinaryIO, ClassVar, Literal
 
 import attrs
 from pydantic import BaseModel, Field, TypeAdapter
@@ -88,12 +89,12 @@ class DagFileParsingResult(BaseModel):
 
 
 ToManager = Annotated[
-    Union[DagFileParsingResult, GetConnection, GetVariable, PutVariable, DeleteVariable],
+    DagFileParsingResult | GetConnection | GetVariable | PutVariable | DeleteVariable,
     Field(discriminator="type"),
 ]
 
 ToDagProcessor = Annotated[
-    Union[DagFileParseRequest, ConnectionResult, VariableResult, ErrorResponse, OKResponse],
+    DagFileParseRequest | ConnectionResult | VariableResult | ErrorResponse | OKResponse,
     Field(discriminator="type"),
 ]
 
diff --git a/airflow-core/src/airflow/exceptions.py b/airflow-core/src/airflow/exceptions.py
index 045f9647ade76..2d12b0baabf32 100644
--- a/airflow-core/src/airflow/exceptions.py
+++ b/airflow-core/src/airflow/exceptions.py
@@ -476,7 +476,7 @@ def __init__(
         self.kwargs = kwargs
         self.timeout: timedelta | None
         # Check timeout type at runtime
-        if isinstance(timeout, (int, float)):
+        if isinstance(timeout, int | float):
             self.timeout = timedelta(seconds=timeout)
         else:
             self.timeout = timeout
diff --git a/airflow-core/src/airflow/executors/base_executor.py b/airflow-core/src/airflow/executors/base_executor.py
index 292ac685bac58..db42046d4cccf 100644
--- a/airflow-core/src/airflow/executors/base_executor.py
+++ b/airflow-core/src/airflow/executors/base_executor.py
@@ -23,7 +23,7 @@
 from collections.abc import Sequence
 from dataclasses import dataclass, field
 from functools import cached_property
-from typing import TYPE_CHECKING, Any, Optional
+from typing import TYPE_CHECKING, Any
 
 import pendulum
 
@@ -58,7 +58,7 @@
 
     # Event_buffer dict value type
     # Tuple of: state, info
-    EventBufferValueType = tuple[Optional[str], Any]
+    EventBufferValueType = tuple[str | None, Any]
 
 
 log = logging.getLogger(__name__)
diff --git a/airflow-core/src/airflow/executors/local_executor.py b/airflow-core/src/airflow/executors/local_executor.py
index 4c8ca1e73cb93..eabb921136978 100644
--- a/airflow-core/src/airflow/executors/local_executor.py
+++ b/airflow-core/src/airflow/executors/local_executor.py
@@ -31,7 +31,7 @@
 import multiprocessing.sharedctypes
 import os
 from multiprocessing import Queue, SimpleQueue
-from typing import TYPE_CHECKING, Optional
+from typing import TYPE_CHECKING
 
 from setproctitle import setproctitle
 
@@ -43,7 +43,7 @@
 if TYPE_CHECKING:
     from sqlalchemy.orm import Session
 
-    TaskInstanceStateType = tuple[workloads.TaskInstance, TaskInstanceState, Optional[Exception]]
+    TaskInstanceStateType = tuple[workloads.TaskInstance, TaskInstanceState, Exception | None]
 
 
 def _run_worker(
diff --git a/airflow-core/src/airflow/executors/workloads.py b/airflow-core/src/airflow/executors/workloads.py
index 3da9fe3cede39..c8d5f789d7112 100644
--- a/airflow-core/src/airflow/executors/workloads.py
+++ b/airflow-core/src/airflow/executors/workloads.py
@@ -20,7 +20,7 @@
 import uuid
 from datetime import datetime
 from pathlib import Path
-from typing import TYPE_CHECKING, Annotated, Literal, Union
+from typing import TYPE_CHECKING, Annotated, Literal
 
 import structlog
 from pydantic import BaseModel, Field
@@ -160,6 +160,6 @@ class RunTrigger(BaseModel):
 
 
 All = Annotated[
-    Union[ExecuteTask, RunTrigger],
+    ExecuteTask | RunTrigger,
     Field(discriminator="type"),
 ]
diff --git a/airflow-core/src/airflow/io/__init__.py b/airflow-core/src/airflow/io/__init__.py
index 01e0cfaabe2d5..6bbea93e59ba3 100644
--- a/airflow-core/src/airflow/io/__init__.py
+++ b/airflow-core/src/airflow/io/__init__.py
@@ -18,11 +18,10 @@
 
 import inspect
 import logging
-from collections.abc import Mapping
+from collections.abc import Callable, Mapping
 from functools import cache
 from typing import (
     TYPE_CHECKING,
-    Callable,
 )
 
 from fsspec.implementations.local import LocalFileSystem
diff --git a/airflow-core/src/airflow/jobs/job.py b/airflow-core/src/airflow/jobs/job.py
index 9c06552abca21..7cd2180bbd7bd 100644
--- a/airflow-core/src/airflow/jobs/job.py
+++ b/airflow-core/src/airflow/jobs/job.py
@@ -17,9 +17,10 @@
 # under the License.
 from __future__ import annotations
 
+from collections.abc import Callable
 from functools import cached_property, lru_cache
 from time import sleep
-from typing import TYPE_CHECKING, Callable, NoReturn
+from typing import TYPE_CHECKING, NoReturn
 
 from sqlalchemy import Column, Index, Integer, String, case, select
 from sqlalchemy.exc import OperationalError
diff --git a/airflow-core/src/airflow/jobs/scheduler_job_runner.py b/airflow-core/src/airflow/jobs/scheduler_job_runner.py
index 0cc71bf19b482..50d6a5d63589e 100644
--- a/airflow-core/src/airflow/jobs/scheduler_job_runner.py
+++ b/airflow-core/src/airflow/jobs/scheduler_job_runner.py
@@ -25,12 +25,12 @@
 import sys
 import time
 from collections import Counter, defaultdict, deque
-from collections.abc import Collection, Iterable, Iterator
+from collections.abc import Callable, Collection, Iterable, Iterator
 from contextlib import ExitStack
 from datetime import date, timedelta
 from functools import lru_cache, partial
 from itertools import groupby
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 
 from sqlalchemy import and_, delete, exists, func, or_, select, text, tuple_, update
 from sqlalchemy.exc import OperationalError
diff --git a/airflow-core/src/airflow/jobs/triggerer_job_runner.py b/airflow-core/src/airflow/jobs/triggerer_job_runner.py
index d96cf7faacd8a..2811dcf89f38b 100644
--- a/airflow-core/src/airflow/jobs/triggerer_job_runner.py
+++ b/airflow-core/src/airflow/jobs/triggerer_job_runner.py
@@ -30,7 +30,7 @@
 from datetime import datetime
 from socket import socket
 from traceback import format_exception
-from typing import TYPE_CHECKING, Annotated, Any, ClassVar, Literal, TypedDict, Union
+from typing import TYPE_CHECKING, Annotated, Any, ClassVar, Literal, TypedDict
 
 import attrs
 import structlog
@@ -210,18 +210,16 @@ class TriggerStateSync(BaseModel):
 
 
 ToTriggerRunner = Annotated[
-    Union[
-        messages.StartTriggerer,
-        messages.TriggerStateSync,
-        ConnectionResult,
-        VariableResult,
-        XComResult,
-        DagRunStateResult,
-        DRCount,
-        TICount,
-        TaskStatesResult,
-        ErrorResponse,
-    ],
+    messages.StartTriggerer
+    | messages.TriggerStateSync
+    | ConnectionResult
+    | VariableResult
+    | XComResult
+    | DagRunStateResult
+    | DRCount
+    | TICount
+    | TaskStatesResult
+    | ErrorResponse,
     Field(discriminator="type"),
 ]
 """
@@ -231,16 +229,14 @@ class TriggerStateSync(BaseModel):
 
 
 ToTriggerSupervisor = Annotated[
-    Union[
-        messages.TriggerStateChanges,
-        GetConnection,
-        GetVariable,
-        GetXCom,
-        GetTICount,
-        GetTaskStates,
-        GetDagRunState,
-        GetDRCount,
-    ],
+    messages.TriggerStateChanges
+    | GetConnection
+    | GetVariable
+    | GetXCom
+    | GetTICount
+    | GetTaskStates
+    | GetDagRunState
+    | GetDRCount,
     Field(discriminator="type"),
 ]
 """
diff --git a/airflow-core/src/airflow/lineage/hook.py b/airflow-core/src/airflow/lineage/hook.py
index 9aeb65c277147..712b778aef6aa 100644
--- a/airflow-core/src/airflow/lineage/hook.py
+++ b/airflow-core/src/airflow/lineage/hook.py
@@ -20,7 +20,7 @@
 import hashlib
 import json
 from collections import defaultdict
-from typing import TYPE_CHECKING, Union
+from typing import TYPE_CHECKING, TypeAlias
 
 import attr
 
@@ -33,7 +33,7 @@
     from airflow.sdk import ObjectStoragePath
 
     # Store context what sent lineage.
-    LineageContext = Union[BaseHook, ObjectStoragePath]
+    LineageContext: TypeAlias = BaseHook | ObjectStoragePath
 
 _hook_lineage_collector: HookLineageCollector | None = None
 
diff --git a/airflow-core/src/airflow/metrics/otel_logger.py b/airflow-core/src/airflow/metrics/otel_logger.py
index a8ad9d8ce2eb1..317b70a5ca29d 100644
--- a/airflow-core/src/airflow/metrics/otel_logger.py
+++ b/airflow-core/src/airflow/metrics/otel_logger.py
@@ -20,7 +20,8 @@
 import logging
 import random
 import warnings
-from typing import TYPE_CHECKING, Callable, Union
+from collections.abc import Callable
+from typing import TYPE_CHECKING
 
 from opentelemetry import metrics
 from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter
@@ -47,7 +48,7 @@
 
 log = logging.getLogger(__name__)
 
-GaugeValues = Union[int, float]
+GaugeValues = int | float
 
 DEFAULT_GAUGE_VALUE = 0.0
 
diff --git a/airflow-core/src/airflow/metrics/protocols.py b/airflow-core/src/airflow/metrics/protocols.py
index 3c405aef37e7a..d170fe29ad9ba 100644
--- a/airflow-core/src/airflow/metrics/protocols.py
+++ b/airflow-core/src/airflow/metrics/protocols.py
@@ -19,12 +19,12 @@
 
 import datetime
 import time
-from typing import TYPE_CHECKING, Protocol, Union
+from typing import TYPE_CHECKING, Protocol
 
 if TYPE_CHECKING:
     from airflow.typing_compat import Self
 
-DeltaType = Union[int, float, datetime.timedelta]
+DeltaType = int | float | datetime.timedelta
 
 
 class TimerProtocol(Protocol):
diff --git a/airflow-core/src/airflow/metrics/statsd_logger.py b/airflow-core/src/airflow/metrics/statsd_logger.py
index 8d47bc9ae132a..d952693eb230d 100644
--- a/airflow-core/src/airflow/metrics/statsd_logger.py
+++ b/airflow-core/src/airflow/metrics/statsd_logger.py
@@ -18,8 +18,9 @@
 from __future__ import annotations
 
 import logging
+from collections.abc import Callable
 from functools import wraps
-from typing import TYPE_CHECKING, Callable, TypeVar, cast
+from typing import TYPE_CHECKING, TypeVar, cast
 
 from airflow.configuration import conf
 from airflow.exceptions import AirflowConfigException
diff --git a/airflow-core/src/airflow/metrics/validators.py b/airflow-core/src/airflow/metrics/validators.py
index 85152426fdd17..252524455e022 100644
--- a/airflow-core/src/airflow/metrics/validators.py
+++ b/airflow-core/src/airflow/metrics/validators.py
@@ -24,10 +24,10 @@
 import re
 import string
 import warnings
-from collections.abc import Iterable
+from collections.abc import Callable, Iterable
 from functools import partial, wraps
 from re import Pattern
-from typing import Callable, cast
+from typing import cast
 
 from airflow.configuration import conf
 from airflow.exceptions import InvalidStatsNameException
diff --git a/airflow-core/src/airflow/models/asset.py b/airflow-core/src/airflow/models/asset.py
index a345ebe7995d3..79cf8ef28a622 100644
--- a/airflow-core/src/airflow/models/asset.py
+++ b/airflow-core/src/airflow/models/asset.py
@@ -209,7 +209,7 @@ def __hash__(self):
     def __eq__(self, other: object) -> bool:
         from airflow.sdk.definitions.asset import AssetAlias
 
-        if isinstance(other, (self.__class__, AssetAlias)):
+        if isinstance(other, self.__class__ | AssetAlias):
             return self.name == other.name
         return NotImplemented
 
@@ -306,7 +306,7 @@ def __init__(self, name: str = "", uri: str = "", **kwargs):
     def __eq__(self, other: object) -> bool:
         from airflow.sdk.definitions.asset import Asset
 
-        if isinstance(other, (self.__class__, Asset)):
+        if isinstance(other, self.__class__ | Asset):
             return self.name == other.name and self.uri == other.uri
         return NotImplemented
 
diff --git a/airflow-core/src/airflow/models/dag.py b/airflow-core/src/airflow/models/dag.py
index a188b4d66f8ea..a74a68ac2c493 100644
--- a/airflow-core/src/airflow/models/dag.py
+++ b/airflow-core/src/airflow/models/dag.py
@@ -22,13 +22,12 @@
 import logging
 import re
 from collections import defaultdict
-from collections.abc import Collection, Generator, Iterable, Sequence
+from collections.abc import Callable, Collection, Generator, Iterable, Sequence
 from datetime import datetime, timedelta
 from functools import cache
 from typing import (
     TYPE_CHECKING,
     Any,
-    Callable,
     TypeVar,
     Union,
     cast,
@@ -122,14 +121,9 @@
 TAG_MAX_LEN = 100
 
 DagStateChangeCallback = Callable[[Context], None]
-ScheduleInterval = Union[None, str, timedelta, relativedelta]
+ScheduleInterval = None | str | timedelta | relativedelta
 
-ScheduleArg = Union[
-    ScheduleInterval,
-    Timetable,
-    BaseAsset,
-    Collection[Union["Asset", "AssetAlias"]],
-]
+ScheduleArg = ScheduleInterval | Timetable | BaseAsset | Collection[Union["Asset", "AssetAlias"]]
 
 
 class InconsistentDataInterval(AirflowException):
@@ -469,7 +463,7 @@ def _upgrade_outdated_dag_access_control(access_control=None):
         for role, perms in access_control.items():
             if packaging_version.parse(FAB_VERSION) >= packaging_version.parse("1.3.0"):
                 updated_access_control[role] = updated_access_control.get(role, {})
-                if isinstance(perms, (set, list)):
+                if isinstance(perms, set | list):
                     # Support for old-style access_control where only the actions are specified
                     updated_access_control[role][permissions.RESOURCE_DAG] = set(perms)
                 else:
@@ -547,7 +541,7 @@ def infer_automated_data_interval(self, logical_date: datetime) -> DataInterval:
         :meta private:
         """
         timetable_type = type(self.timetable)
-        if issubclass(timetable_type, (NullTimetable, OnceTimetable, AssetTriggeredTimetable)):
+        if issubclass(timetable_type, NullTimetable | OnceTimetable | AssetTriggeredTimetable):
             return DataInterval.exact(timezone.coerce_datetime(logical_date))
         start = timezone.coerce_datetime(logical_date)
         if issubclass(timetable_type, CronDataIntervalTimetable):
@@ -965,7 +959,7 @@ def _get_task_instances(
             tis = tis.where(DagRun.logical_date <= end_date)
 
         if state:
-            if isinstance(state, (str, TaskInstanceState)):
+            if isinstance(state, str | TaskInstanceState):
                 tis = tis.where(TaskInstance.state == state)
             elif len(state) == 1:
                 tis = tis.where(TaskInstance.state == state[0])
diff --git a/airflow-core/src/airflow/models/dagbag.py b/airflow-core/src/airflow/models/dagbag.py
index 83fc47444c179..df13c38581d76 100644
--- a/airflow-core/src/airflow/models/dagbag.py
+++ b/airflow-core/src/airflow/models/dagbag.py
@@ -448,7 +448,7 @@ def parse(mod_name, filepath):
 
         dagbag_import_timeout = settings.get_dagbag_import_timeout(filepath)
 
-        if not isinstance(dagbag_import_timeout, (int, float)):
+        if not isinstance(dagbag_import_timeout, int | float):
             raise TypeError(
                 f"Value ({dagbag_import_timeout}) from get_dagbag_import_timeout must be int or float"
             )
@@ -520,7 +520,7 @@ def _process_modules(self, filepath, mods, file_last_changed_on_disk):
         from airflow.sdk import DAG as SDKDAG
         from airflow.sdk.definitions._internal.contextmanager import DagContext
 
-        top_level_dags = {(o, m) for m in mods for o in m.__dict__.values() if isinstance(o, (DAG, SDKDAG))}
+        top_level_dags = {(o, m) for m in mods for o in m.__dict__.values() if isinstance(o, DAG | SDKDAG)}
 
         top_level_dags.update(DagContext.autoregistered_dags)
 
diff --git a/airflow-core/src/airflow/models/dagrun.py b/airflow-core/src/airflow/models/dagrun.py
index a1126c2a9c3cc..1d73055a08668 100644
--- a/airflow-core/src/airflow/models/dagrun.py
+++ b/airflow-core/src/airflow/models/dagrun.py
@@ -21,14 +21,12 @@
 import os
 import re
 from collections import defaultdict
-from collections.abc import Iterable, Iterator, Sequence
+from collections.abc import Callable, Iterable, Iterator, Sequence
 from typing import (
     TYPE_CHECKING,
     Any,
-    Callable,
     NamedTuple,
     TypeVar,
-    Union,
     overload,
 )
 
@@ -978,16 +976,9 @@ def set_dagrun_span_attrs(self, span: Span | EmptySpan):
         if self._state == DagRunState.FAILED:
             span.set_attribute("airflow.dag_run.error", True)
 
-        attribute_value_type = Union[
-            str,
-            bool,
-            int,
-            float,
-            Sequence[str],
-            Sequence[bool],
-            Sequence[int],
-            Sequence[float],
-        ]
+        attribute_value_type = (
+            str | bool | int | float | Sequence[str] | Sequence[bool] | Sequence[int] | Sequence[float]
+        )
 
         # Explicitly set the value type to Union[...] to avoid a mypy error.
         attributes: dict[str, attribute_value_type] = {
diff --git a/airflow-core/src/airflow/models/expandinput.py b/airflow-core/src/airflow/models/expandinput.py
index b126c6f24b07f..46b70be79a954 100644
--- a/airflow-core/src/airflow/models/expandinput.py
+++ b/airflow-core/src/airflow/models/expandinput.py
@@ -20,7 +20,7 @@
 import functools
 import operator
 from collections.abc import Iterable, Sized
-from typing import TYPE_CHECKING, Any, ClassVar, Union
+from typing import TYPE_CHECKING, Any, ClassVar
 
 import attrs
 
@@ -54,7 +54,7 @@
 def _needs_run_time_resolution(v: OperatorExpandArgument) -> TypeGuard[MappedArgument | SchedulerXComArg]:
     from airflow.models.xcom_arg import SchedulerXComArg
 
-    return isinstance(v, (MappedArgument, SchedulerXComArg))
+    return isinstance(v, MappedArgument | SchedulerXComArg)
 
 
 @attrs.define
@@ -138,7 +138,7 @@ def get_total_map_length(self, run_id: str, *, session: Session) -> int:
     "list-of-dicts": SchedulerListOfDictsExpandInput,
 }
 
-SchedulerExpandInput = Union[SchedulerDictOfListsExpandInput, SchedulerListOfDictsExpandInput]
+SchedulerExpandInput = SchedulerDictOfListsExpandInput | SchedulerListOfDictsExpandInput
 
 
 def create_expand_input(kind: str, value: Any) -> SchedulerExpandInput:
diff --git a/airflow-core/src/airflow/models/operator.py b/airflow-core/src/airflow/models/operator.py
index b42823e4c2189..a42b21b0a2544 100644
--- a/airflow-core/src/airflow/models/operator.py
+++ b/airflow-core/src/airflow/models/operator.py
@@ -17,12 +17,10 @@
 # under the License.
 from __future__ import annotations
 
-from typing import Union
-
 from airflow.models.baseoperator import BaseOperator
 from airflow.models.mappedoperator import MappedOperator
 
-Operator = Union[BaseOperator, MappedOperator]
+Operator = BaseOperator | MappedOperator
 
 
 __all__ = ["Operator"]
diff --git a/airflow-core/src/airflow/models/serialized_dag.py b/airflow-core/src/airflow/models/serialized_dag.py
index 71722b54adee6..a05c4e6520415 100644
--- a/airflow-core/src/airflow/models/serialized_dag.py
+++ b/airflow-core/src/airflow/models/serialized_dag.py
@@ -21,9 +21,9 @@
 
 import logging
 import zlib
-from collections.abc import Iterable, Iterator, Sequence
+from collections.abc import Callable, Iterable, Iterator, Sequence
 from datetime import timedelta
-from typing import TYPE_CHECKING, Any, Callable, Literal
+from typing import TYPE_CHECKING, Any, Literal
 
 import sqlalchemy_jsonfield
 import uuid6
diff --git a/airflow-core/src/airflow/models/taskmap.py b/airflow-core/src/airflow/models/taskmap.py
index f0fd4c0231b70..ff3b94a84dacf 100644
--- a/airflow-core/src/airflow/models/taskmap.py
+++ b/airflow-core/src/airflow/models/taskmap.py
@@ -137,7 +137,7 @@ def expand_mapped_task(cls, task, run_id: str, *, session: Session) -> tuple[Seq
         from airflow.sdk.definitions.mappedoperator import MappedOperator
         from airflow.settings import task_instance_mutation_hook
 
-        if not isinstance(task, (BaseOperator, MappedOperator)):
+        if not isinstance(task, BaseOperator | MappedOperator):
             raise RuntimeError(
                 f"cannot expand unrecognized operator type {type(task).__module__}.{type(task).__name__}"
             )
diff --git a/airflow-core/src/airflow/providers_manager.py b/airflow-core/src/airflow/providers_manager.py
index f6e876e8914a9..757957ad5d039 100644
--- a/airflow-core/src/airflow/providers_manager.py
+++ b/airflow-core/src/airflow/providers_manager.py
@@ -26,12 +26,12 @@
 import logging
 import traceback
 import warnings
-from collections.abc import MutableMapping
+from collections.abc import Callable, MutableMapping
 from dataclasses import dataclass
 from functools import wraps
 from importlib.resources import files as resource_files
 from time import perf_counter
-from typing import TYPE_CHECKING, Any, Callable, NamedTuple, TypeVar
+from typing import TYPE_CHECKING, Any, NamedTuple, TypeVar
 
 from packaging.utils import canonicalize_name
 
diff --git a/airflow-core/src/airflow/serialization/serde.py b/airflow-core/src/airflow/serialization/serde.py
index 0268ad91206d8..664a8d7cd5657 100644
--- a/airflow-core/src/airflow/serialization/serde.py
+++ b/airflow-core/src/airflow/serialization/serde.py
@@ -26,7 +26,7 @@
 from fnmatch import fnmatch
 from importlib import import_module
 from re import Pattern
-from typing import TYPE_CHECKING, Any, TypeVar, Union, cast
+from typing import TYPE_CHECKING, Any, TypeVar, cast
 
 import attr
 
@@ -56,8 +56,8 @@
 DEFAULT_VERSION = 0
 
 T = TypeVar("T", bool, float, int, dict, list, str, tuple, set)
-U = Union[bool, float, int, dict, list, str, tuple, set]
-S = Union[list, tuple, set]
+U = bool | float | int | dict | list | str | tuple | set
+S = list | tuple | set
 
 _serializers: dict[str, ModuleType] = {}
 _deserializers: dict[str, ModuleType] = {}
diff --git a/airflow-core/src/airflow/serialization/serialized_objects.py b/airflow-core/src/airflow/serialization/serialized_objects.py
index e102de1c9928c..33676d58bec06 100644
--- a/airflow-core/src/airflow/serialization/serialized_objects.py
+++ b/airflow-core/src/airflow/serialization/serialized_objects.py
@@ -520,20 +520,13 @@ def deref(self, dag: DAG) -> SchedulerXComArg:
 # the type declarations in expandinput.py so we always remember to update
 # serialization logic when adding new ExpandInput variants. If you add things to
 # the unions, be sure to update _ExpandInputRef to match.
-_ExpandInputOriginalValue = Union[
-    # For .expand(**kwargs).
-    Mapping[str, Any],
-    # For expand_kwargs(arg).
-    XComArg,
-    Collection[Union[XComArg, Mapping[str, Any]]],
-]
-_ExpandInputSerializedValue = Union[
-    # For .expand(**kwargs).
-    Mapping[str, Any],
-    # For expand_kwargs(arg).
-    _XComRef,
-    Collection[Union[_XComRef, Mapping[str, Any]]],
-]
+# Mapping[str, Any], For .expand(**kwargs).
+# XComArg # For expand_kwargs(arg).
+_ExpandInputOriginalValue = Mapping[str, Any] | XComArg | Collection[XComArg | Mapping[str, Any]]
+
+# Mapping[str, Any], For .expand(**kwargs).
+# _XComRef For expand_kwargs(arg).
+_ExpandInputSerializedValue = Mapping[str, Any] | _XComRef | Collection[_XComRef | Mapping[str, Any]]
 
 
 class _ExpandInputRef(NamedTuple):
@@ -751,7 +744,7 @@ def serialize(
             return cls._encode(var.timestamp(), type_=DAT.DATETIME)
         elif isinstance(var, datetime.timedelta):
             return cls._encode(var.total_seconds(), type_=DAT.TIMEDELTA)
-        elif isinstance(var, (Timezone, FixedTimezone)):
+        elif isinstance(var, Timezone | FixedTimezone):
             return cls._encode(encode_timezone(var), type_=DAT.TIMEZONE)
         elif isinstance(var, relativedelta.relativedelta):
             return cls._encode(encode_relativedelta(var), type_=DAT.RELATIVEDELTA)
@@ -760,7 +753,7 @@ def serialize(
                 var._asdict(),
                 type_=DAT.TASK_INSTANCE_KEY,
             )
-        elif isinstance(var, (AirflowException, TaskDeferred)) and hasattr(var, "serialize"):
+        elif isinstance(var, AirflowException | TaskDeferred) and hasattr(var, "serialize"):
             exc_cls_name, args, kwargs = var.serialize()
             return cls._encode(
                 cls.serialize(
@@ -769,7 +762,7 @@ def serialize(
                 ),
                 type_=DAT.AIRFLOW_EXC_SER,
             )
-        elif isinstance(var, (KeyError, AttributeError)):
+        elif isinstance(var, KeyError | AttributeError):
             return cls._encode(
                 cls.serialize(
                     {
diff --git a/airflow-core/src/airflow/serialization/serializers/datetime.py b/airflow-core/src/airflow/serialization/serializers/datetime.py
index 69058b8c02a8b..a99c690f3cb72 100644
--- a/airflow-core/src/airflow/serialization/serializers/datetime.py
+++ b/airflow-core/src/airflow/serialization/serializers/datetime.py
@@ -92,7 +92,7 @@ def deserialize(classname: str, version: int, data: dict | str) -> datetime.date
     if classname == qualname(DateTime) and isinstance(data, dict):
         return DateTime.fromtimestamp(float(data[TIMESTAMP]), tz=tz)
 
-    if classname == qualname(datetime.timedelta) and isinstance(data, (str, float)):
+    if classname == qualname(datetime.timedelta) and isinstance(data, str | float):
         return datetime.timedelta(seconds=float(data))
 
     if classname == qualname(datetime.date) and isinstance(data, str):
diff --git a/airflow-core/src/airflow/serialization/serializers/kubernetes.py b/airflow-core/src/airflow/serialization/serializers/kubernetes.py
index faa2312ac7a81..908bd0dc29e17 100644
--- a/airflow-core/src/airflow/serialization/serializers/kubernetes.py
+++ b/airflow-core/src/airflow/serialization/serializers/kubernetes.py
@@ -43,7 +43,7 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
     if not k8s:
         return "", "", 0, False
 
-    if isinstance(o, (k8s.V1Pod, k8s.V1ResourceRequirements)):
+    if isinstance(o, k8s.V1Pod | k8s.V1ResourceRequirements):
         from airflow.providers.cncf.kubernetes.pod_generator import PodGenerator
 
         # We're running this in an except block, so we don't want it to fail
diff --git a/airflow-core/src/airflow/serialization/serializers/numpy.py b/airflow-core/src/airflow/serialization/serializers/numpy.py
index c31244c587844..6e317b47d3885 100644
--- a/airflow-core/src/airflow/serialization/serializers/numpy.py
+++ b/airflow-core/src/airflow/serialization/serializers/numpy.py
@@ -55,26 +55,24 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
     name = qualname(o)
     if isinstance(
         o,
-        (
-            np.int_,
-            np.intc,
-            np.intp,
-            np.int8,
-            np.int16,
-            np.int32,
-            np.int64,
-            np.uint8,
-            np.uint16,
-            np.uint32,
-            np.uint64,
-        ),
+        np.int_
+        | np.intc
+        | np.intp
+        | np.int8
+        | np.int16
+        | np.int32
+        | np.int64
+        | np.uint8
+        | np.uint16
+        | np.uint32
+        | np.uint64,
     ):
         return int(o), name, __version__, True
 
     if isinstance(o, np.bool_):
         return bool(o), name, __version__, True
 
-    if isinstance(o, (np.float16, np.float32, np.float64, np.complex64, np.complex128)):
+    if isinstance(o, np.float16 | np.float32 | np.float64 | np.complex64 | np.complex128):
         return float(o), name, __version__, True
 
     return "", "", 0, False
diff --git a/airflow-core/src/airflow/serialization/serializers/timezone.py b/airflow-core/src/airflow/serialization/serializers/timezone.py
index 9f2ef7cef65ac..ca2f25ed59010 100644
--- a/airflow-core/src/airflow/serialization/serializers/timezone.py
+++ b/airflow-core/src/airflow/serialization/serializers/timezone.py
@@ -70,7 +70,7 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
 def deserialize(classname: str, version: int, data: object) -> Any:
     from airflow.utils.timezone import parse_timezone
 
-    if not isinstance(data, (str, int)):
+    if not isinstance(data, str | int):
         raise TypeError(f"{data} is not of type int or str but of {type(data)}")
 
     if version > __version__:
diff --git a/airflow-core/src/airflow/settings.py b/airflow-core/src/airflow/settings.py
index 08d7ac7af5ba7..689ce2e4e6819 100644
--- a/airflow-core/src/airflow/settings.py
+++ b/airflow-core/src/airflow/settings.py
@@ -25,8 +25,9 @@
 import platform
 import sys
 import warnings
+from collections.abc import Callable
 from importlib import metadata
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 
 import pluggy
 from packaging.version import Version
diff --git a/airflow-core/src/airflow/stats.py b/airflow-core/src/airflow/stats.py
index 569bce480653c..6cb9229ab7388 100644
--- a/airflow-core/src/airflow/stats.py
+++ b/airflow-core/src/airflow/stats.py
@@ -19,7 +19,8 @@
 
 import logging
 import socket
-from typing import TYPE_CHECKING, Callable
+from collections.abc import Callable
+from typing import TYPE_CHECKING
 
 from airflow.configuration import conf
 from airflow.metrics.base_stats_logger import NoStatsLogger
diff --git a/airflow-core/src/airflow/timetables/interval.py b/airflow-core/src/airflow/timetables/interval.py
index f0de30e76de6e..7e68b9a01e624 100644
--- a/airflow-core/src/airflow/timetables/interval.py
+++ b/airflow-core/src/airflow/timetables/interval.py
@@ -17,7 +17,7 @@
 from __future__ import annotations
 
 import datetime
-from typing import TYPE_CHECKING, Any, Union
+from typing import TYPE_CHECKING, Any
 
 from dateutil.relativedelta import relativedelta
 from pendulum import DateTime
@@ -30,7 +30,7 @@
 if TYPE_CHECKING:
     from airflow.timetables.base import TimeRestriction
 
-Delta = Union[datetime.timedelta, relativedelta]
+Delta = datetime.timedelta | relativedelta
 
 
 class _DataIntervalTimetable(Timetable):
diff --git a/airflow-core/src/airflow/traces/tracer.py b/airflow-core/src/airflow/traces/tracer.py
index 45ed924deda85..7ac1ea3abeaab 100644
--- a/airflow-core/src/airflow/traces/tracer.py
+++ b/airflow-core/src/airflow/traces/tracer.py
@@ -19,8 +19,9 @@
 
 import logging
 import socket
+from collections.abc import Callable
 from functools import wraps
-from typing import TYPE_CHECKING, Any, Callable, Protocol
+from typing import TYPE_CHECKING, Any, Protocol
 
 from airflow.configuration import conf
 
diff --git a/airflow-core/src/airflow/triggers/base.py b/airflow-core/src/airflow/triggers/base.py
index 2dfe6880786f6..490423da5fda2 100644
--- a/airflow-core/src/airflow/triggers/base.py
+++ b/airflow-core/src/airflow/triggers/base.py
@@ -21,7 +21,7 @@
 from collections.abc import AsyncIterator
 from dataclasses import dataclass
 from datetime import timedelta
-from typing import Annotated, Any, Union
+from typing import Annotated, Any
 
 import structlog
 from pydantic import (
@@ -229,11 +229,9 @@ def trigger_event_discriminator(v):
 
 
 DiscrimatedTriggerEvent = Annotated[
-    Union[
-        Annotated[TriggerEvent, Tag("_event_")],
-        Annotated[TaskSuccessEvent, Tag(TaskInstanceState.SUCCESS)],
-        Annotated[TaskFailedEvent, Tag(TaskInstanceState.FAILED)],
-        Annotated[TaskSkippedEvent, Tag(TaskInstanceState.SKIPPED)],
-    ],
+    Annotated[TriggerEvent, Tag("_event_")]
+    | Annotated[TaskSuccessEvent, Tag(TaskInstanceState.SUCCESS)]
+    | Annotated[TaskFailedEvent, Tag(TaskInstanceState.FAILED)]
+    | Annotated[TaskSkippedEvent, Tag(TaskInstanceState.SKIPPED)],
     Discriminator(trigger_event_discriminator),
 ]
diff --git a/airflow-core/src/airflow/typing_compat.py b/airflow-core/src/airflow/typing_compat.py
index 91a37ae020fec..283537e7e07b4 100644
--- a/airflow-core/src/airflow/typing_compat.py
+++ b/airflow-core/src/airflow/typing_compat.py
@@ -37,12 +37,9 @@
 if sys.version_info >= (3, 10, 1) or (3, 9, 8) <= sys.version_info < (3, 10):
     from typing import Literal
 else:
-    from typing_extensions import Literal  # type: ignore[assignment]
+    from typing import Literal  # type: ignore[assignment]
 
-if sys.version_info >= (3, 10):
-    from typing import ParamSpec, TypeAlias, TypeGuard
-else:
-    from typing_extensions import ParamSpec, TypeAlias, TypeGuard
+from typing import ParamSpec, TypeAlias, TypeGuard
 
 if sys.version_info >= (3, 11):
     from typing import Self
diff --git a/airflow-core/src/airflow/utils/cli.py b/airflow-core/src/airflow/utils/cli.py
index 8bde3f9abc8c0..ac7723d29338c 100644
--- a/airflow-core/src/airflow/utils/cli.py
+++ b/airflow-core/src/airflow/utils/cli.py
@@ -29,8 +29,9 @@
 import traceback
 import warnings
 from argparse import Namespace
+from collections.abc import Callable
 from pathlib import Path
-from typing import TYPE_CHECKING, Callable, TypeVar, cast
+from typing import TYPE_CHECKING, TypeVar, cast
 
 from airflow import settings
 from airflow.dag_processing.bundles.manager import DagBundlesManager
diff --git a/airflow-core/src/airflow/utils/cli_action_loggers.py b/airflow-core/src/airflow/utils/cli_action_loggers.py
index c43c6571ad58b..cd53f2c91a2dc 100644
--- a/airflow-core/src/airflow/utils/cli_action_loggers.py
+++ b/airflow-core/src/airflow/utils/cli_action_loggers.py
@@ -26,7 +26,8 @@
 
 import json
 import logging
-from typing import TYPE_CHECKING, Callable
+from collections.abc import Callable
+from typing import TYPE_CHECKING
 
 from airflow.utils.session import NEW_SESSION, provide_session
 
diff --git a/airflow-core/src/airflow/utils/db.py b/airflow-core/src/airflow/utils/db.py
index 05315110e404d..ffbf85a2a8100 100644
--- a/airflow-core/src/airflow/utils/db.py
+++ b/airflow-core/src/airflow/utils/db.py
@@ -27,12 +27,11 @@
 import sys
 import time
 import warnings
-from collections.abc import Generator, Iterable, Iterator, Sequence
+from collections.abc import Callable, Generator, Iterable, Iterator, Sequence
 from tempfile import gettempdir
 from typing import (
     TYPE_CHECKING,
     Any,
-    Callable,
     Protocol,
     TypeVar,
     overload,
diff --git a/airflow-core/src/airflow/utils/decorators.py b/airflow-core/src/airflow/utils/decorators.py
index cedb7e532d7ea..8286872d3d264 100644
--- a/airflow-core/src/airflow/utils/decorators.py
+++ b/airflow-core/src/airflow/utils/decorators.py
@@ -18,7 +18,8 @@
 from __future__ import annotations
 
 import sys
-from typing import Callable, TypeVar
+from collections.abc import Callable
+from typing import TypeVar
 
 import libcst as cst
 
diff --git a/airflow-core/src/airflow/utils/dot_renderer.py b/airflow-core/src/airflow/utils/dot_renderer.py
index fc1685b68b61f..f54ea23935637 100644
--- a/airflow-core/src/airflow/utils/dot_renderer.py
+++ b/airflow-core/src/airflow/utils/dot_renderer.py
@@ -134,7 +134,7 @@ def _draw_nodes(
     node: DependencyMixin, parent_graph: graphviz.Digraph, states_by_task_id: dict[str, str] | None
 ) -> None:
     """Draw the node and its children on the given parent_graph recursively."""
-    if isinstance(node, (BaseOperator, MappedOperator)):
+    if isinstance(node, BaseOperator | MappedOperator):
         _draw_task(node, parent_graph, states_by_task_id)
     else:
         if not isinstance(node, TaskGroup):
diff --git a/airflow-core/src/airflow/utils/event_scheduler.py b/airflow-core/src/airflow/utils/event_scheduler.py
index a1dff1078faed..88999ec69372f 100644
--- a/airflow-core/src/airflow/utils/event_scheduler.py
+++ b/airflow-core/src/airflow/utils/event_scheduler.py
@@ -17,8 +17,8 @@
 # under the License.
 from __future__ import annotations
 
+from collections.abc import Callable
 from sched import scheduler
-from typing import Callable
 
 from airflow.utils.log.logging_mixin import LoggingMixin
 
diff --git a/airflow-core/src/airflow/utils/helpers.py b/airflow-core/src/airflow/utils/helpers.py
index 74b7dacd33de7..aa111cf07733b 100644
--- a/airflow-core/src/airflow/utils/helpers.py
+++ b/airflow-core/src/airflow/utils/helpers.py
@@ -21,9 +21,9 @@
 import itertools
 import re
 import signal
-from collections.abc import Generator, Iterable, Mapping, MutableMapping
+from collections.abc import Callable, Generator, Iterable, Mapping, MutableMapping
 from functools import cache
-from typing import TYPE_CHECKING, Any, Callable, TypeVar, cast
+from typing import TYPE_CHECKING, Any, TypeVar, cast
 from urllib.parse import urljoin
 
 from lazy_object_proxy import Proxy
@@ -300,7 +300,7 @@ def is_empty(x):
         for k, v in val.items():
             if is_empty(v):
                 continue
-            if isinstance(v, (list, dict)):
+            if isinstance(v, list | dict):
                 new_val = prune_dict(v, mode=mode)
                 if not is_empty(new_val):
                     new_dict[k] = new_val
@@ -312,7 +312,7 @@ def is_empty(x):
         for v in val:
             if is_empty(v):
                 continue
-            if isinstance(v, (list, dict)):
+            if isinstance(v, list | dict):
                 new_val = prune_dict(v, mode=mode)
                 if not is_empty(new_val):
                     new_list.append(new_val)
diff --git a/airflow-core/src/airflow/utils/log/colored_log.py b/airflow-core/src/airflow/utils/log/colored_log.py
index bd9763ce4553a..fa3c9d52c2609 100644
--- a/airflow-core/src/airflow/utils/log/colored_log.py
+++ b/airflow-core/src/airflow/utils/log/colored_log.py
@@ -58,7 +58,7 @@ def __init__(self, *args, **kwargs):
 
     @staticmethod
     def _color_arg(arg: Any) -> str | float | int:
-        if isinstance(arg, (int, float)):
+        if isinstance(arg, int | float):
             # In case of %d or %f formatting
             return arg
         return BOLD_ON + str(arg) + BOLD_OFF
@@ -69,7 +69,7 @@ def _count_number_of_arguments_in_message(record: LogRecord) -> int:
         return len(matches) if matches else 0
 
     def _color_record_args(self, record: LogRecord) -> LogRecord:
-        if isinstance(record.args, (tuple, list)):
+        if isinstance(record.args, tuple | list):
             record.args = tuple(self._color_arg(arg) for arg in record.args)
         elif isinstance(record.args, dict):
             if self._count_number_of_arguments_in_message(record) > 1:
diff --git a/airflow-core/src/airflow/utils/log/file_task_handler.py b/airflow-core/src/airflow/utils/log/file_task_handler.py
index 15339c00cbb69..84987d1a20110 100644
--- a/airflow-core/src/airflow/utils/log/file_task_handler.py
+++ b/airflow-core/src/airflow/utils/log/file_task_handler.py
@@ -22,12 +22,12 @@
 import itertools
 import logging
 import os
-from collections.abc import Iterable
+from collections.abc import Callable, Iterable
 from contextlib import suppress
 from datetime import datetime
 from enum import Enum
 from pathlib import Path
-from typing import TYPE_CHECKING, Any, Callable, Union
+from typing import TYPE_CHECKING, Any
 from urllib.parse import urljoin
 
 import pendulum
@@ -49,7 +49,7 @@
 
 
 # These types are similar, but have distinct names to make processing them less error prone
-LogMessages: TypeAlias = Union[list["StructuredLogMessage"], list[str]]
+LogMessages: TypeAlias = list["StructuredLogMessage"] | list[str]
 """The log messages themselves, either in already sturcutured form, or a single string blob to be parsed later"""
 LogSourceInfo: TypeAlias = list[str]
 """Information _about_ the log fetching process for display to a user"""
@@ -149,7 +149,7 @@ def _parse_log_lines(
         lines = itertools.chain.from_iterable(map(str.splitlines, lines))  # type: ignore[assignment,arg-type]
 
     # https://github.com/python/mypy/issues/8586
-    for idx, line in enumerate[Union[str, StructuredLogMessage]](lines):
+    for idx, line in enumerate[str | StructuredLogMessage](lines):
         if line:
             try:
                 if isinstance(line, StructuredLogMessage):
diff --git a/airflow-core/src/airflow/utils/log/log_reader.py b/airflow-core/src/airflow/utils/log/log_reader.py
index 4a36b3ef1b07e..6ce10e387e52b 100644
--- a/airflow-core/src/airflow/utils/log/log_reader.py
+++ b/airflow-core/src/airflow/utils/log/log_reader.py
@@ -20,7 +20,7 @@
 import time
 from collections.abc import Iterator
 from functools import cached_property
-from typing import TYPE_CHECKING, Any, Union
+from typing import TYPE_CHECKING, Any
 
 from airflow.configuration import conf
 from airflow.utils.helpers import render_log_filename
@@ -36,7 +36,7 @@
     from airflow.models.taskinstancehistory import TaskInstanceHistory
     from airflow.typing_compat import TypeAlias
 
-LogMessages: TypeAlias = Union[list[StructuredLogMessage], str]
+LogMessages: TypeAlias = list[StructuredLogMessage] | str
 LogMetadata: TypeAlias = dict[str, Any]
 
 
diff --git a/airflow-core/src/airflow/utils/module_loading.py b/airflow-core/src/airflow/utils/module_loading.py
index 42a078f3437d8..49f9db05c9df8 100644
--- a/airflow-core/src/airflow/utils/module_loading.py
+++ b/airflow-core/src/airflow/utils/module_loading.py
@@ -19,8 +19,9 @@
 
 import pkgutil
 import re
+from collections.abc import Callable
 from importlib import import_module
-from typing import TYPE_CHECKING, Callable
+from typing import TYPE_CHECKING
 
 if TYPE_CHECKING:
     from types import ModuleType
diff --git a/airflow-core/src/airflow/utils/operator_helpers.py b/airflow-core/src/airflow/utils/operator_helpers.py
index bf340c1ace9bc..8b8d339b15790 100644
--- a/airflow-core/src/airflow/utils/operator_helpers.py
+++ b/airflow-core/src/airflow/utils/operator_helpers.py
@@ -18,8 +18,8 @@
 from __future__ import annotations
 
 import inspect
-from collections.abc import Collection, Mapping
-from typing import Any, Callable, TypeVar
+from collections.abc import Callable, Collection, Mapping
+from typing import Any, TypeVar
 
 R = TypeVar("R")
 
diff --git a/airflow-core/src/airflow/utils/providers_configuration_loader.py b/airflow-core/src/airflow/utils/providers_configuration_loader.py
index 4aeb93edcb39a..4fd9243235de2 100644
--- a/airflow-core/src/airflow/utils/providers_configuration_loader.py
+++ b/airflow-core/src/airflow/utils/providers_configuration_loader.py
@@ -16,8 +16,9 @@
 # under the License.
 from __future__ import annotations
 
+from collections.abc import Callable
 from functools import wraps
-from typing import Callable, TypeVar
+from typing import TypeVar
 
 from airflow.typing_compat import ParamSpec
 
diff --git a/airflow-core/src/airflow/utils/retries.py b/airflow-core/src/airflow/utils/retries.py
index e885eaededcc4..4428db2a49382 100644
--- a/airflow-core/src/airflow/utils/retries.py
+++ b/airflow-core/src/airflow/utils/retries.py
@@ -18,8 +18,9 @@
 
 import functools
 import logging
+from collections.abc import Callable
 from inspect import signature
-from typing import Callable, TypeVar, overload
+from typing import TypeVar, overload
 
 from sqlalchemy.exc import DBAPIError
 
diff --git a/airflow-core/src/airflow/utils/session.py b/airflow-core/src/airflow/utils/session.py
index e6b04f06461de..ec0c2ac891f30 100644
--- a/airflow-core/src/airflow/utils/session.py
+++ b/airflow-core/src/airflow/utils/session.py
@@ -17,10 +17,10 @@
 from __future__ import annotations
 
 import contextlib
-from collections.abc import Generator
+from collections.abc import Callable, Generator
 from functools import wraps
 from inspect import signature
-from typing import TYPE_CHECKING, Callable, TypeVar, cast
+from typing import TYPE_CHECKING, TypeVar, cast
 
 from airflow import settings
 from airflow.typing_compat import ParamSpec
diff --git a/airflow-core/src/airflow/utils/setup_teardown.py b/airflow-core/src/airflow/utils/setup_teardown.py
index b62e3ab298b40..d2273c0c3f705 100644
--- a/airflow-core/src/airflow/utils/setup_teardown.py
+++ b/airflow-core/src/airflow/utils/setup_teardown.py
@@ -114,7 +114,7 @@ def set_dependency(
         new_task: AbstractOperator | list[AbstractOperator],
         upstream=True,
     ):
-        if isinstance(new_task, (list, tuple)):
+        if isinstance(new_task, list | tuple):
             for task in new_task:
                 cls._set_dependency(task, receiving_task, upstream)
         else:
diff --git a/airflow-core/src/airflow/utils/sqlalchemy.py b/airflow-core/src/airflow/utils/sqlalchemy.py
index 9e8cf12fba26c..8311547e7e998 100644
--- a/airflow-core/src/airflow/utils/sqlalchemy.py
+++ b/airflow-core/src/airflow/utils/sqlalchemy.py
@@ -163,13 +163,13 @@ def sanitize_for_serialization(obj: V1Pod):
     """
     if obj is None:
         return None
-    if isinstance(obj, (float, bool, bytes, str, int)):
+    if isinstance(obj, float | bool | bytes | str | int):
         return obj
     if isinstance(obj, list):
         return [sanitize_for_serialization(sub_obj) for sub_obj in obj]
     if isinstance(obj, tuple):
         return tuple(sanitize_for_serialization(sub_obj) for sub_obj in obj)
-    if isinstance(obj, (datetime.datetime, datetime.date)):
+    if isinstance(obj, datetime.datetime | datetime.date):
         return obj.isoformat()
 
     if isinstance(obj, dict):
diff --git a/airflow-core/src/airflow/utils/task_group.py b/airflow-core/src/airflow/utils/task_group.py
index bcae2baa88d6d..3eaf7cdf2d034 100644
--- a/airflow-core/src/airflow/utils/task_group.py
+++ b/airflow-core/src/airflow/utils/task_group.py
@@ -19,9 +19,10 @@
 
 from __future__ import annotations
 
+from collections.abc import Callable
 from functools import cache
 from operator import methodcaller
-from typing import TYPE_CHECKING, Callable
+from typing import TYPE_CHECKING
 
 import airflow.sdk.definitions.taskgroup
 from airflow.configuration import conf
diff --git a/airflow-core/tests/unit/always/test_project_structure.py b/airflow-core/tests/unit/always/test_project_structure.py
index d26565456a9da..1f55eac96be6e 100644
--- a/airflow-core/tests/unit/always/test_project_structure.py
+++ b/airflow-core/tests/unit/always/test_project_structure.py
@@ -304,7 +304,7 @@ def get_imports_from_file(filepath: str):
     doc_node = ast.parse(content, filepath)
     import_names: set[str] = set()
     for current_node in ast.walk(doc_node):
-        if not isinstance(current_node, (ast.Import, ast.ImportFrom)):
+        if not isinstance(current_node, ast.Import | ast.ImportFrom):
             continue
         for alias in current_node.names:
             name = alias.name
diff --git a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_variables.py b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_variables.py
index b1270b7365efc..34874c1fcf13f 100644
--- a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_variables.py
+++ b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_variables.py
@@ -1095,7 +1095,7 @@ def test_bulk_create_entity_serialization(
         response = test_client.patch("/variables", json=actions)
         assert response.status_code == 200
 
-        if isinstance(entity_value, (dict, list)):
+        if isinstance(entity_value, dict | list):
             retrieved_value_deserialized = Variable.get(entity_key, deserialize_json=True)
             assert retrieved_value_deserialized == entity_value
             retrieved_value_raw_string = Variable.get(entity_key, deserialize_json=False)
diff --git a/airflow-core/tests/unit/cluster_policies/__init__.py b/airflow-core/tests/unit/cluster_policies/__init__.py
index a5fb9cdb3f072..9e84386743ad9 100644
--- a/airflow-core/tests/unit/cluster_policies/__init__.py
+++ b/airflow-core/tests/unit/cluster_policies/__init__.py
@@ -18,8 +18,9 @@
 from __future__ import annotations
 
 from abc import ABC
+from collections.abc import Callable
 from datetime import timedelta
-from typing import TYPE_CHECKING, Callable
+from typing import TYPE_CHECKING
 
 from airflow.configuration import conf
 from airflow.exceptions import AirflowClusterPolicySkipDag, AirflowClusterPolicyViolation
diff --git a/airflow-core/tests/unit/dag_processing/test_processor.py b/airflow-core/tests/unit/dag_processing/test_processor.py
index 8d77da61cafb9..d4351039db186 100644
--- a/airflow-core/tests/unit/dag_processing/test_processor.py
+++ b/airflow-core/tests/unit/dag_processing/test_processor.py
@@ -21,8 +21,9 @@
 import pathlib
 import sys
 import textwrap
+from collections.abc import Callable
 from socket import socketpair
-from typing import TYPE_CHECKING, Callable
+from typing import TYPE_CHECKING
 from unittest.mock import MagicMock, patch
 
 import pytest
diff --git a/airflow-core/tests/unit/serialization/test_dag_serialization.py b/airflow-core/tests/unit/serialization/test_dag_serialization.py
index 1a3b55f0a892e..e78c40d3797d4 100644
--- a/airflow-core/tests/unit/serialization/test_dag_serialization.py
+++ b/airflow-core/tests/unit/serialization/test_dag_serialization.py
@@ -404,7 +404,7 @@ def collect_dags(dag_folder=None):
             "providers/*/*/tests/system/*/*/",
         ]
     else:
-        if isinstance(dag_folder, (list, tuple)):
+        if isinstance(dag_folder, list | tuple):
             patterns = dag_folder
         else:
             patterns = [dag_folder]
@@ -723,7 +723,7 @@ def validate_deserialized_task(
         from airflow.sdk.definitions.mappedoperator import MappedOperator
 
         assert not isinstance(task, SerializedBaseOperator)
-        assert isinstance(task, (BaseOperator, MappedOperator))
+        assert isinstance(task, BaseOperator | MappedOperator)
 
         # Every task should have a task_group property -- even if it's the DAG's root task group
         assert serialized_task.task_group
diff --git a/airflow-ctl/docs/images/command_hashes.txt b/airflow-ctl/docs/images/command_hashes.txt
index 9183296518702..73316282d987d 100644
--- a/airflow-ctl/docs/images/command_hashes.txt
+++ b/airflow-ctl/docs/images/command_hashes.txt
@@ -1,14 +1,14 @@
-main:649cfb54e45b91a69ad7ed19cb526e93
-assets:bd74e73e54641bac100b88ca29641df2
-auth:ef4122d3f5e4b2ac19cb0d3e12c8594b
-backfills:e0cba4448d576d1b53ea79d6dcdbe035
-config:807fd4874d29702624b231a1e4ea0bc9
-connections:da4f6807ca2a265ed6d6e734b5355fe2
-dag:dab7c8aa1a62fa011b80bb7132bcc32a
-dagrun:7b3e06a3664cc7ceb18457b4c0895532
-jobs:806174e6c9511db669705279ed6a00b9
-pools:2c17a4131b6481bd8fe9120982606db2
-providers:d053e6f17ff271e1e08942378344d27b
-variables:cd3970589b2cb1e3ebd9a0b7f2ffdf4d
-version:19f901e228111d8ba2ef47d8722f9b87
-auth login:348c25d49128b6007ac97dae2ef7563f
+main:8c61e3718e03aca03d819dce9973d56d
+assets:6368874514661d8ef3d58e3b925e4ec1
+auth:caba04038826ae684922b9a7c42fc523
+backfills:10f1ac9cf1aa90d47006f23fc73cef38
+config:30215b244ab1e713df78813011449122
+connections:7f251b3b6005583c685218a264b47587
+dag:74332efb98c229cc90de9aeb1e87d58e
+dagrun:f4ca499bcfc98265c065d06bf685ce87
+jobs:3675ee646892500ea45b0a17bf52ca07
+pools:5b1694055cea03e20468258200a18212
+providers:beb417fce0c8a6cafcdab36e0e692579
+variables:0d276ede752bad613823821ec2a2d7cb
+version:dd32fbd1740003c2aaa30cd6a201dacd
+auth login:8bcfaaf886b64c3d2e81d7e1c767b4b2
diff --git a/airflow-ctl/docs/images/output_assets.svg b/airflow-ctl/docs/images/output_assets.svg
index 6ede29cb7c855..a680d89a96005 100644
--- a/airflow-ctl/docs/images/output_assets.svg
+++ b/airflow-ctl/docs/images/output_assets.svg
@@ -19,139 +19,139 @@
         font-weight: 700;
     }
 
-    .terminal-2173172358-matrix {
+    .terminal-2173367894-matrix {
         font-family: Fira Code, monospace;
         font-size: 20px;
         line-height: 24.4px;
         font-variant-east-asian: full-width;
     }
 
-    .terminal-2173172358-title {
+    .terminal-2173367894-title {
         font-size: 18px;
         font-weight: bold;
         font-family: arial;
     }
 
-    .terminal-2173172358-r1 { fill: #c5c8c6 }
+    .terminal-2173367894-r1 { fill: #c5c8c6 }
     </style>
 
     <defs>
-    <clipPath id="terminal-2173172358-clip-terminal">
+    <clipPath id="terminal-2173367894-clip-terminal">
       <rect x="0" y="0" width="975.0" height="633.4" />
     </clipPath>
-    <clipPath id="terminal-2173172358-line-0">
+    <clipPath id="terminal-2173367894-line-0">
     <rect x="0" y="1.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-1">
+<clipPath id="terminal-2173367894-line-1">
     <rect x="0" y="25.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-2">
+<clipPath id="terminal-2173367894-line-2">
     <rect x="0" y="50.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-3">
+<clipPath id="terminal-2173367894-line-3">
     <rect x="0" y="74.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-4">
+<clipPath id="terminal-2173367894-line-4">
     <rect x="0" y="99.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-5">
+<clipPath id="terminal-2173367894-line-5">
     <rect x="0" y="123.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-6">
+<clipPath id="terminal-2173367894-line-6">
     <rect x="0" y="147.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-7">
+<clipPath id="terminal-2173367894-line-7">
     <rect x="0" y="172.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-8">
+<clipPath id="terminal-2173367894-line-8">
     <rect x="0" y="196.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-9">
+<clipPath id="terminal-2173367894-line-9">
     <rect x="0" y="221.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-10">
+<clipPath id="terminal-2173367894-line-10">
     <rect x="0" y="245.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-11">
+<clipPath id="terminal-2173367894-line-11">
     <rect x="0" y="269.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-12">
+<clipPath id="terminal-2173367894-line-12">
     <rect x="0" y="294.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-13">
+<clipPath id="terminal-2173367894-line-13">
     <rect x="0" y="318.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-14">
+<clipPath id="terminal-2173367894-line-14">
     <rect x="0" y="343.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-15">
+<clipPath id="terminal-2173367894-line-15">
     <rect x="0" y="367.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-16">
+<clipPath id="terminal-2173367894-line-16">
     <rect x="0" y="391.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-17">
+<clipPath id="terminal-2173367894-line-17">
     <rect x="0" y="416.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-18">
+<clipPath id="terminal-2173367894-line-18">
     <rect x="0" y="440.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-19">
+<clipPath id="terminal-2173367894-line-19">
     <rect x="0" y="465.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-20">
+<clipPath id="terminal-2173367894-line-20">
     <rect x="0" y="489.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-21">
+<clipPath id="terminal-2173367894-line-21">
     <rect x="0" y="513.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-22">
+<clipPath id="terminal-2173367894-line-22">
     <rect x="0" y="538.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-23">
+<clipPath id="terminal-2173367894-line-23">
     <rect x="0" y="562.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2173172358-line-24">
+<clipPath id="terminal-2173367894-line-24">
     <rect x="0" y="587.1" width="976" height="24.65"/>
             </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="682.4" rx="8"/><text class="terminal-2173172358-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;assets</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="682.4" rx="8"/><text class="terminal-2173367894-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;assets</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
 
-    <g transform="translate(9, 41)" clip-path="url(#terminal-2173172358-clip-terminal)">
+    <g transform="translate(9, 41)" clip-path="url(#terminal-2173367894-clip-terminal)">
 
-    <g class="terminal-2173172358-matrix">
-    <text class="terminal-2173172358-r1" x="0" y="20" textLength="500.2" clip-path="url(#terminal-2173172358-line-0)">Usage:&#160;airflowctl&#160;assets&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-2173172358-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2173172358-line-0)">
-</text><text class="terminal-2173172358-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2173172358-line-1)">
-</text><text class="terminal-2173172358-r1" x="0" y="68.8" textLength="305" clip-path="url(#terminal-2173172358-line-2)">Perform&#160;Assets&#160;operations</text><text class="terminal-2173172358-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2173172358-line-2)">
-</text><text class="terminal-2173172358-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2173172358-line-3)">
-</text><text class="terminal-2173172358-r1" x="0" y="117.6" textLength="256.2" clip-path="url(#terminal-2173172358-line-4)">Positional&#160;Arguments:</text><text class="terminal-2173172358-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2173172358-line-4)">
-</text><text class="terminal-2173172358-r1" x="0" y="142" textLength="109.8" clip-path="url(#terminal-2173172358-line-5)">&#160;&#160;COMMAND</text><text class="terminal-2173172358-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2173172358-line-5)">
-</text><text class="terminal-2173172358-r1" x="0" y="166.4" textLength="658.8" clip-path="url(#terminal-2173172358-line-6)">&#160;&#160;&#160;&#160;create-event&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;create_event&#160;operation</text><text class="terminal-2173172358-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-2173172358-line-6)">
-</text><text class="terminal-2173172358-r1" x="0" y="190.8" textLength="341.6" clip-path="url(#terminal-2173172358-line-7)">&#160;&#160;&#160;&#160;delete-dag-queued-events</text><text class="terminal-2173172358-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-2173172358-line-7)">
-</text><text class="terminal-2173172358-r1" x="0" y="215.2" textLength="805.2" clip-path="url(#terminal-2173172358-line-8)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;delete_dag_queued_events&#160;operation</text><text class="terminal-2173172358-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-2173172358-line-8)">
-</text><text class="terminal-2173172358-r1" x="0" y="239.6" textLength="280.6" clip-path="url(#terminal-2173172358-line-9)">&#160;&#160;&#160;&#160;delete-queued-event</text><text class="terminal-2173172358-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-2173172358-line-9)">
-</text><text class="terminal-2173172358-r1" x="0" y="264" textLength="744.2" clip-path="url(#terminal-2173172358-line-10)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;delete_queued_event&#160;operation</text><text class="terminal-2173172358-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-2173172358-line-10)">
-</text><text class="terminal-2173172358-r1" x="0" y="288.4" textLength="292.8" clip-path="url(#terminal-2173172358-line-11)">&#160;&#160;&#160;&#160;delete-queued-events</text><text class="terminal-2173172358-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-2173172358-line-11)">
-</text><text class="terminal-2173172358-r1" x="0" y="312.8" textLength="756.4" clip-path="url(#terminal-2173172358-line-12)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;delete_queued_events&#160;operation</text><text class="terminal-2173172358-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-2173172358-line-12)">
-</text><text class="terminal-2173172358-r1" x="0" y="337.2" textLength="549" clip-path="url(#terminal-2173172358-line-13)">&#160;&#160;&#160;&#160;get&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get&#160;operation</text><text class="terminal-2173172358-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-2173172358-line-13)">
-</text><text class="terminal-2173172358-r1" x="0" y="361.6" textLength="658.8" clip-path="url(#terminal-2173172358-line-14)">&#160;&#160;&#160;&#160;get-by-alias&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get_by_alias&#160;operation</text><text class="terminal-2173172358-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-2173172358-line-14)">
-</text><text class="terminal-2173172358-r1" x="0" y="386" textLength="292.8" clip-path="url(#terminal-2173172358-line-15)">&#160;&#160;&#160;&#160;get-dag-queued-event</text><text class="terminal-2173172358-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-2173172358-line-15)">
-</text><text class="terminal-2173172358-r1" x="0" y="410.4" textLength="756.4" clip-path="url(#terminal-2173172358-line-16)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get_dag_queued_event&#160;operation</text><text class="terminal-2173172358-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-2173172358-line-16)">
-</text><text class="terminal-2173172358-r1" x="0" y="434.8" textLength="305" clip-path="url(#terminal-2173172358-line-17)">&#160;&#160;&#160;&#160;get-dag-queued-events</text><text class="terminal-2173172358-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-2173172358-line-17)">
-</text><text class="terminal-2173172358-r1" x="0" y="459.2" textLength="768.6" clip-path="url(#terminal-2173172358-line-18)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get_dag_queued_events&#160;operation</text><text class="terminal-2173172358-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-2173172358-line-18)">
-</text><text class="terminal-2173172358-r1" x="0" y="483.6" textLength="719.8" clip-path="url(#terminal-2173172358-line-19)">&#160;&#160;&#160;&#160;get-queued-events&#160;&#160;&#160;Perform&#160;get_queued_events&#160;operation</text><text class="terminal-2173172358-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-2173172358-line-19)">
-</text><text class="terminal-2173172358-r1" x="0" y="508" textLength="561.2" clip-path="url(#terminal-2173172358-line-20)">&#160;&#160;&#160;&#160;list&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list&#160;operation</text><text class="terminal-2173172358-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-2173172358-line-20)">
-</text><text class="terminal-2173172358-r1" x="0" y="532.4" textLength="671" clip-path="url(#terminal-2173172358-line-21)">&#160;&#160;&#160;&#160;list-by-alias&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list_by_alias&#160;operation</text><text class="terminal-2173172358-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-2173172358-line-21)">
-</text><text class="terminal-2173172358-r1" x="0" y="556.8" textLength="646.6" clip-path="url(#terminal-2173172358-line-22)">&#160;&#160;&#160;&#160;materialize&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;materialize&#160;operation</text><text class="terminal-2173172358-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-2173172358-line-22)">
-</text><text class="terminal-2173172358-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-2173172358-line-23)">
-</text><text class="terminal-2173172358-r1" x="0" y="605.6" textLength="231.8" clip-path="url(#terminal-2173172358-line-24)">Optional&#160;Arguments:</text><text class="terminal-2173172358-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-2173172358-line-24)">
-</text><text class="terminal-2173172358-r1" x="0" y="630" textLength="671" clip-path="url(#terminal-2173172358-line-25)">&#160;&#160;-h,&#160;--help&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-2173172358-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-2173172358-line-25)">
+    <g class="terminal-2173367894-matrix">
+    <text class="terminal-2173367894-r1" x="0" y="20" textLength="500.2" clip-path="url(#terminal-2173367894-line-0)">Usage:&#160;airflowctl&#160;assets&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-2173367894-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2173367894-line-0)">
+</text><text class="terminal-2173367894-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2173367894-line-1)">
+</text><text class="terminal-2173367894-r1" x="0" y="68.8" textLength="305" clip-path="url(#terminal-2173367894-line-2)">Perform&#160;Assets&#160;operations</text><text class="terminal-2173367894-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2173367894-line-2)">
+</text><text class="terminal-2173367894-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2173367894-line-3)">
+</text><text class="terminal-2173367894-r1" x="0" y="117.6" textLength="256.2" clip-path="url(#terminal-2173367894-line-4)">Positional&#160;Arguments:</text><text class="terminal-2173367894-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2173367894-line-4)">
+</text><text class="terminal-2173367894-r1" x="0" y="142" textLength="109.8" clip-path="url(#terminal-2173367894-line-5)">&#160;&#160;COMMAND</text><text class="terminal-2173367894-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2173367894-line-5)">
+</text><text class="terminal-2173367894-r1" x="0" y="166.4" textLength="658.8" clip-path="url(#terminal-2173367894-line-6)">&#160;&#160;&#160;&#160;create-event&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;create_event&#160;operation</text><text class="terminal-2173367894-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-2173367894-line-6)">
+</text><text class="terminal-2173367894-r1" x="0" y="190.8" textLength="341.6" clip-path="url(#terminal-2173367894-line-7)">&#160;&#160;&#160;&#160;delete-dag-queued-events</text><text class="terminal-2173367894-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-2173367894-line-7)">
+</text><text class="terminal-2173367894-r1" x="0" y="215.2" textLength="805.2" clip-path="url(#terminal-2173367894-line-8)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;delete_dag_queued_events&#160;operation</text><text class="terminal-2173367894-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-2173367894-line-8)">
+</text><text class="terminal-2173367894-r1" x="0" y="239.6" textLength="280.6" clip-path="url(#terminal-2173367894-line-9)">&#160;&#160;&#160;&#160;delete-queued-event</text><text class="terminal-2173367894-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-2173367894-line-9)">
+</text><text class="terminal-2173367894-r1" x="0" y="264" textLength="744.2" clip-path="url(#terminal-2173367894-line-10)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;delete_queued_event&#160;operation</text><text class="terminal-2173367894-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-2173367894-line-10)">
+</text><text class="terminal-2173367894-r1" x="0" y="288.4" textLength="292.8" clip-path="url(#terminal-2173367894-line-11)">&#160;&#160;&#160;&#160;delete-queued-events</text><text class="terminal-2173367894-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-2173367894-line-11)">
+</text><text class="terminal-2173367894-r1" x="0" y="312.8" textLength="756.4" clip-path="url(#terminal-2173367894-line-12)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;delete_queued_events&#160;operation</text><text class="terminal-2173367894-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-2173367894-line-12)">
+</text><text class="terminal-2173367894-r1" x="0" y="337.2" textLength="549" clip-path="url(#terminal-2173367894-line-13)">&#160;&#160;&#160;&#160;get&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get&#160;operation</text><text class="terminal-2173367894-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-2173367894-line-13)">
+</text><text class="terminal-2173367894-r1" x="0" y="361.6" textLength="658.8" clip-path="url(#terminal-2173367894-line-14)">&#160;&#160;&#160;&#160;get-by-alias&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get_by_alias&#160;operation</text><text class="terminal-2173367894-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-2173367894-line-14)">
+</text><text class="terminal-2173367894-r1" x="0" y="386" textLength="292.8" clip-path="url(#terminal-2173367894-line-15)">&#160;&#160;&#160;&#160;get-dag-queued-event</text><text class="terminal-2173367894-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-2173367894-line-15)">
+</text><text class="terminal-2173367894-r1" x="0" y="410.4" textLength="756.4" clip-path="url(#terminal-2173367894-line-16)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get_dag_queued_event&#160;operation</text><text class="terminal-2173367894-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-2173367894-line-16)">
+</text><text class="terminal-2173367894-r1" x="0" y="434.8" textLength="305" clip-path="url(#terminal-2173367894-line-17)">&#160;&#160;&#160;&#160;get-dag-queued-events</text><text class="terminal-2173367894-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-2173367894-line-17)">
+</text><text class="terminal-2173367894-r1" x="0" y="459.2" textLength="768.6" clip-path="url(#terminal-2173367894-line-18)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get_dag_queued_events&#160;operation</text><text class="terminal-2173367894-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-2173367894-line-18)">
+</text><text class="terminal-2173367894-r1" x="0" y="483.6" textLength="719.8" clip-path="url(#terminal-2173367894-line-19)">&#160;&#160;&#160;&#160;get-queued-events&#160;&#160;&#160;Perform&#160;get_queued_events&#160;operation</text><text class="terminal-2173367894-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-2173367894-line-19)">
+</text><text class="terminal-2173367894-r1" x="0" y="508" textLength="561.2" clip-path="url(#terminal-2173367894-line-20)">&#160;&#160;&#160;&#160;list&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list&#160;operation</text><text class="terminal-2173367894-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-2173367894-line-20)">
+</text><text class="terminal-2173367894-r1" x="0" y="532.4" textLength="671" clip-path="url(#terminal-2173367894-line-21)">&#160;&#160;&#160;&#160;list-by-alias&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list_by_alias&#160;operation</text><text class="terminal-2173367894-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-2173367894-line-21)">
+</text><text class="terminal-2173367894-r1" x="0" y="556.8" textLength="646.6" clip-path="url(#terminal-2173367894-line-22)">&#160;&#160;&#160;&#160;materialize&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;materialize&#160;operation</text><text class="terminal-2173367894-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-2173367894-line-22)">
+</text><text class="terminal-2173367894-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-2173367894-line-23)">
+</text><text class="terminal-2173367894-r1" x="0" y="605.6" textLength="97.6" clip-path="url(#terminal-2173367894-line-24)">Options:</text><text class="terminal-2173367894-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-2173367894-line-24)">
+</text><text class="terminal-2173367894-r1" x="0" y="630" textLength="671" clip-path="url(#terminal-2173367894-line-25)">&#160;&#160;-h,&#160;--help&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-2173367894-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-2173367894-line-25)">
 </text>
     </g>
     </g>
diff --git a/airflow-ctl/docs/images/output_auth.svg b/airflow-ctl/docs/images/output_auth.svg
index 6667db945c139..87dda63d8376d 100644
--- a/airflow-ctl/docs/images/output_auth.svg
+++ b/airflow-ctl/docs/images/output_auth.svg
@@ -19,83 +19,83 @@
         font-weight: 700;
     }
 
-    .terminal-337171281-matrix {
+    .terminal-3729182497-matrix {
         font-family: Fira Code, monospace;
         font-size: 20px;
         line-height: 24.4px;
         font-variant-east-asian: full-width;
     }
 
-    .terminal-337171281-title {
+    .terminal-3729182497-title {
         font-size: 18px;
         font-weight: bold;
         font-family: arial;
     }
 
-    .terminal-337171281-r1 { fill: #c5c8c6 }
+    .terminal-3729182497-r1 { fill: #c5c8c6 }
     </style>
 
     <defs>
-    <clipPath id="terminal-337171281-clip-terminal">
+    <clipPath id="terminal-3729182497-clip-terminal">
       <rect x="0" y="0" width="975.0" height="291.79999999999995" />
     </clipPath>
-    <clipPath id="terminal-337171281-line-0">
+    <clipPath id="terminal-3729182497-line-0">
     <rect x="0" y="1.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-337171281-line-1">
+<clipPath id="terminal-3729182497-line-1">
     <rect x="0" y="25.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-337171281-line-2">
+<clipPath id="terminal-3729182497-line-2">
     <rect x="0" y="50.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-337171281-line-3">
+<clipPath id="terminal-3729182497-line-3">
     <rect x="0" y="74.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-337171281-line-4">
+<clipPath id="terminal-3729182497-line-4">
     <rect x="0" y="99.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-337171281-line-5">
+<clipPath id="terminal-3729182497-line-5">
     <rect x="0" y="123.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-337171281-line-6">
+<clipPath id="terminal-3729182497-line-6">
     <rect x="0" y="147.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-337171281-line-7">
+<clipPath id="terminal-3729182497-line-7">
     <rect x="0" y="172.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-337171281-line-8">
+<clipPath id="terminal-3729182497-line-8">
     <rect x="0" y="196.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-337171281-line-9">
+<clipPath id="terminal-3729182497-line-9">
     <rect x="0" y="221.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-337171281-line-10">
+<clipPath id="terminal-3729182497-line-10">
     <rect x="0" y="245.5" width="976" height="24.65"/>
             </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="340.8" rx="8"/><text class="terminal-337171281-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;auth</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="340.8" rx="8"/><text class="terminal-3729182497-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;auth</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
 
-    <g transform="translate(9, 41)" clip-path="url(#terminal-337171281-clip-terminal)">
+    <g transform="translate(9, 41)" clip-path="url(#terminal-3729182497-clip-terminal)">
 
-    <g class="terminal-337171281-matrix">
-    <text class="terminal-337171281-r1" x="0" y="20" textLength="475.8" clip-path="url(#terminal-337171281-line-0)">Usage:&#160;airflowctl&#160;auth&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-337171281-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-337171281-line-0)">
-</text><text class="terminal-337171281-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-337171281-line-1)">
-</text><text class="terminal-337171281-r1" x="0" y="68.8" textLength="805.2" clip-path="url(#terminal-337171281-line-2)">Manage&#160;authentication&#160;for&#160;CLI.&#160;Either&#160;pass&#160;token&#160;from&#160;environment&#160;</text><text class="terminal-337171281-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-337171281-line-2)">
-</text><text class="terminal-337171281-r1" x="0" y="93.2" textLength="597.8" clip-path="url(#terminal-337171281-line-3)">variable/parameter&#160;or&#160;pass&#160;username&#160;and&#160;password.</text><text class="terminal-337171281-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-337171281-line-3)">
-</text><text class="terminal-337171281-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-337171281-line-4)">
-</text><text class="terminal-337171281-r1" x="0" y="142" textLength="256.2" clip-path="url(#terminal-337171281-line-5)">Positional&#160;Arguments:</text><text class="terminal-337171281-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-337171281-line-5)">
-</text><text class="terminal-337171281-r1" x="0" y="166.4" textLength="109.8" clip-path="url(#terminal-337171281-line-6)">&#160;&#160;COMMAND</text><text class="terminal-337171281-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-337171281-line-6)">
-</text><text class="terminal-337171281-r1" x="0" y="190.8" textLength="976" clip-path="url(#terminal-337171281-line-7)">&#160;&#160;&#160;&#160;login&#160;&#160;&#160;&#160;&#160;Login&#160;to&#160;the&#160;metadata&#160;database&#160;for&#160;personal&#160;usage.&#160;JWT&#160;Token&#160;must&#160;</text><text class="terminal-337171281-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-337171281-line-7)">
-</text><text class="terminal-337171281-r1" x="0" y="215.2" textLength="317.2" clip-path="url(#terminal-337171281-line-8)">be&#160;provided&#160;via&#160;parameter.</text><text class="terminal-337171281-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-337171281-line-8)">
-</text><text class="terminal-337171281-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-337171281-line-9)">
-</text><text class="terminal-337171281-r1" x="0" y="264" textLength="231.8" clip-path="url(#terminal-337171281-line-10)">Optional&#160;Arguments:</text><text class="terminal-337171281-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-337171281-line-10)">
-</text><text class="terminal-337171281-r1" x="0" y="288.4" textLength="549" clip-path="url(#terminal-337171281-line-11)">&#160;&#160;-h,&#160;--help&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-337171281-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-337171281-line-11)">
+    <g class="terminal-3729182497-matrix">
+    <text class="terminal-3729182497-r1" x="0" y="20" textLength="475.8" clip-path="url(#terminal-3729182497-line-0)">Usage:&#160;airflowctl&#160;auth&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-3729182497-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3729182497-line-0)">
+</text><text class="terminal-3729182497-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3729182497-line-1)">
+</text><text class="terminal-3729182497-r1" x="0" y="68.8" textLength="805.2" clip-path="url(#terminal-3729182497-line-2)">Manage&#160;authentication&#160;for&#160;CLI.&#160;Either&#160;pass&#160;token&#160;from&#160;environment&#160;</text><text class="terminal-3729182497-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-3729182497-line-2)">
+</text><text class="terminal-3729182497-r1" x="0" y="93.2" textLength="597.8" clip-path="url(#terminal-3729182497-line-3)">variable/parameter&#160;or&#160;pass&#160;username&#160;and&#160;password.</text><text class="terminal-3729182497-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-3729182497-line-3)">
+</text><text class="terminal-3729182497-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-3729182497-line-4)">
+</text><text class="terminal-3729182497-r1" x="0" y="142" textLength="256.2" clip-path="url(#terminal-3729182497-line-5)">Positional&#160;Arguments:</text><text class="terminal-3729182497-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-3729182497-line-5)">
+</text><text class="terminal-3729182497-r1" x="0" y="166.4" textLength="109.8" clip-path="url(#terminal-3729182497-line-6)">&#160;&#160;COMMAND</text><text class="terminal-3729182497-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-3729182497-line-6)">
+</text><text class="terminal-3729182497-r1" x="0" y="190.8" textLength="976" clip-path="url(#terminal-3729182497-line-7)">&#160;&#160;&#160;&#160;login&#160;&#160;&#160;&#160;&#160;Login&#160;to&#160;the&#160;metadata&#160;database&#160;for&#160;personal&#160;usage.&#160;JWT&#160;Token&#160;must&#160;</text><text class="terminal-3729182497-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-3729182497-line-7)">
+</text><text class="terminal-3729182497-r1" x="0" y="215.2" textLength="317.2" clip-path="url(#terminal-3729182497-line-8)">be&#160;provided&#160;via&#160;parameter.</text><text class="terminal-3729182497-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-3729182497-line-8)">
+</text><text class="terminal-3729182497-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-3729182497-line-9)">
+</text><text class="terminal-3729182497-r1" x="0" y="264" textLength="97.6" clip-path="url(#terminal-3729182497-line-10)">Options:</text><text class="terminal-3729182497-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-3729182497-line-10)">
+</text><text class="terminal-3729182497-r1" x="0" y="288.4" textLength="549" clip-path="url(#terminal-3729182497-line-11)">&#160;&#160;-h,&#160;--help&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-3729182497-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-3729182497-line-11)">
 </text>
     </g>
     </g>
diff --git a/airflow-ctl/docs/images/output_auth_login.svg b/airflow-ctl/docs/images/output_auth_login.svg
index 5c39720038046..d023348b4b544 100644
--- a/airflow-ctl/docs/images/output_auth_login.svg
+++ b/airflow-ctl/docs/images/output_auth_login.svg
@@ -19,95 +19,95 @@
         font-weight: 700;
     }
 
-    .terminal-493302485-matrix {
+    .terminal-452800165-matrix {
         font-family: Fira Code, monospace;
         font-size: 20px;
         line-height: 24.4px;
         font-variant-east-asian: full-width;
     }
 
-    .terminal-493302485-title {
+    .terminal-452800165-title {
         font-size: 18px;
         font-weight: bold;
         font-family: arial;
     }
 
-    .terminal-493302485-r1 { fill: #c5c8c6 }
+    .terminal-452800165-r1 { fill: #c5c8c6 }
     </style>
 
     <defs>
-    <clipPath id="terminal-493302485-clip-terminal">
+    <clipPath id="terminal-452800165-clip-terminal">
       <rect x="0" y="0" width="975.0" height="365.0" />
     </clipPath>
-    <clipPath id="terminal-493302485-line-0">
+    <clipPath id="terminal-452800165-line-0">
     <rect x="0" y="1.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-493302485-line-1">
+<clipPath id="terminal-452800165-line-1">
     <rect x="0" y="25.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-493302485-line-2">
+<clipPath id="terminal-452800165-line-2">
     <rect x="0" y="50.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-493302485-line-3">
+<clipPath id="terminal-452800165-line-3">
     <rect x="0" y="74.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-493302485-line-4">
+<clipPath id="terminal-452800165-line-4">
     <rect x="0" y="99.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-493302485-line-5">
+<clipPath id="terminal-452800165-line-5">
     <rect x="0" y="123.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-493302485-line-6">
+<clipPath id="terminal-452800165-line-6">
     <rect x="0" y="147.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-493302485-line-7">
+<clipPath id="terminal-452800165-line-7">
     <rect x="0" y="172.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-493302485-line-8">
+<clipPath id="terminal-452800165-line-8">
     <rect x="0" y="196.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-493302485-line-9">
+<clipPath id="terminal-452800165-line-9">
     <rect x="0" y="221.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-493302485-line-10">
+<clipPath id="terminal-452800165-line-10">
     <rect x="0" y="245.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-493302485-line-11">
+<clipPath id="terminal-452800165-line-11">
     <rect x="0" y="269.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-493302485-line-12">
+<clipPath id="terminal-452800165-line-12">
     <rect x="0" y="294.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-493302485-line-13">
+<clipPath id="terminal-452800165-line-13">
     <rect x="0" y="318.7" width="976" height="24.65"/>
             </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="414" rx="8"/><text class="terminal-493302485-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;auth&#160;login</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="414" rx="8"/><text class="terminal-452800165-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;auth&#160;login</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
 
-    <g transform="translate(9, 41)" clip-path="url(#terminal-493302485-clip-terminal)">
+    <g transform="translate(9, 41)" clip-path="url(#terminal-452800165-clip-terminal)">
 
-    <g class="terminal-493302485-matrix">
-    <text class="terminal-493302485-r1" x="0" y="20" textLength="939.4" clip-path="url(#terminal-493302485-line-0)">Usage:&#160;airflowctl&#160;auth&#160;login&#160;[-h]&#160;[--api-token&#160;API_TOKEN]&#160;[--api-url&#160;API_URL]</text><text class="terminal-493302485-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-493302485-line-0)">
-</text><text class="terminal-493302485-r1" x="0" y="44.4" textLength="744.2" clip-path="url(#terminal-493302485-line-1)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;[-e&#160;ENV]&#160;[--password&#160;[PASSWORD]]</text><text class="terminal-493302485-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-493302485-line-1)">
-</text><text class="terminal-493302485-r1" x="0" y="68.8" textLength="610" clip-path="url(#terminal-493302485-line-2)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;[--username&#160;USERNAME]</text><text class="terminal-493302485-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-493302485-line-2)">
-</text><text class="terminal-493302485-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-493302485-line-3)">
-</text><text class="terminal-493302485-r1" x="0" y="117.6" textLength="366" clip-path="url(#terminal-493302485-line-4)">Login&#160;to&#160;the&#160;metadata&#160;database</text><text class="terminal-493302485-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-493302485-line-4)">
-</text><text class="terminal-493302485-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-493302485-line-5)">
-</text><text class="terminal-493302485-r1" x="0" y="166.4" textLength="231.8" clip-path="url(#terminal-493302485-line-6)">Optional&#160;Arguments:</text><text class="terminal-493302485-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-493302485-line-6)">
-</text><text class="terminal-493302485-r1" x="0" y="190.8" textLength="671" clip-path="url(#terminal-493302485-line-7)">&#160;&#160;-h,&#160;--help&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-493302485-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-493302485-line-7)">
-</text><text class="terminal-493302485-r1" x="0" y="215.2" textLength="280.6" clip-path="url(#terminal-493302485-line-8)">&#160;&#160;--api-token&#160;API_TOKEN</text><text class="terminal-493302485-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-493302485-line-8)">
-</text><text class="terminal-493302485-r1" x="0" y="239.6" textLength="719.8" clip-path="url(#terminal-493302485-line-9)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;The&#160;token&#160;to&#160;use&#160;for&#160;authentication</text><text class="terminal-493302485-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-493302485-line-9)">
-</text><text class="terminal-493302485-r1" x="0" y="264" textLength="732" clip-path="url(#terminal-493302485-line-10)">&#160;&#160;--api-url&#160;API_URL&#160;&#160;&#160;&#160;&#160;The&#160;URL&#160;of&#160;the&#160;metadata&#160;database&#160;API</text><text class="terminal-493302485-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-493302485-line-10)">
-</text><text class="terminal-493302485-r1" x="0" y="288.4" textLength="744.2" clip-path="url(#terminal-493302485-line-11)">&#160;&#160;-e,&#160;--env&#160;ENV&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;The&#160;environment&#160;to&#160;run&#160;the&#160;command&#160;in</text><text class="terminal-493302485-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-493302485-line-11)">
-</text><text class="terminal-493302485-r1" x="0" y="312.8" textLength="280.6" clip-path="url(#terminal-493302485-line-12)">&#160;&#160;--password&#160;[PASSWORD]</text><text class="terminal-493302485-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-493302485-line-12)">
-</text><text class="terminal-493302485-r1" x="0" y="337.2" textLength="756.4" clip-path="url(#terminal-493302485-line-13)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;The&#160;password&#160;to&#160;use&#160;for&#160;authentication</text><text class="terminal-493302485-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-493302485-line-13)">
-</text><text class="terminal-493302485-r1" x="0" y="361.6" textLength="756.4" clip-path="url(#terminal-493302485-line-14)">&#160;&#160;--username&#160;USERNAME&#160;&#160;&#160;The&#160;username&#160;to&#160;use&#160;for&#160;authentication</text><text class="terminal-493302485-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-493302485-line-14)">
+    <g class="terminal-452800165-matrix">
+    <text class="terminal-452800165-r1" x="0" y="20" textLength="939.4" clip-path="url(#terminal-452800165-line-0)">Usage:&#160;airflowctl&#160;auth&#160;login&#160;[-h]&#160;[--api-token&#160;API_TOKEN]&#160;[--api-url&#160;API_URL]</text><text class="terminal-452800165-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-452800165-line-0)">
+</text><text class="terminal-452800165-r1" x="0" y="44.4" textLength="744.2" clip-path="url(#terminal-452800165-line-1)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;[-e&#160;ENV]&#160;[--password&#160;[PASSWORD]]</text><text class="terminal-452800165-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-452800165-line-1)">
+</text><text class="terminal-452800165-r1" x="0" y="68.8" textLength="610" clip-path="url(#terminal-452800165-line-2)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;[--username&#160;USERNAME]</text><text class="terminal-452800165-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-452800165-line-2)">
+</text><text class="terminal-452800165-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-452800165-line-3)">
+</text><text class="terminal-452800165-r1" x="0" y="117.6" textLength="366" clip-path="url(#terminal-452800165-line-4)">Login&#160;to&#160;the&#160;metadata&#160;database</text><text class="terminal-452800165-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-452800165-line-4)">
+</text><text class="terminal-452800165-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-452800165-line-5)">
+</text><text class="terminal-452800165-r1" x="0" y="166.4" textLength="97.6" clip-path="url(#terminal-452800165-line-6)">Options:</text><text class="terminal-452800165-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-452800165-line-6)">
+</text><text class="terminal-452800165-r1" x="0" y="190.8" textLength="671" clip-path="url(#terminal-452800165-line-7)">&#160;&#160;-h,&#160;--help&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-452800165-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-452800165-line-7)">
+</text><text class="terminal-452800165-r1" x="0" y="215.2" textLength="280.6" clip-path="url(#terminal-452800165-line-8)">&#160;&#160;--api-token&#160;API_TOKEN</text><text class="terminal-452800165-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-452800165-line-8)">
+</text><text class="terminal-452800165-r1" x="0" y="239.6" textLength="719.8" clip-path="url(#terminal-452800165-line-9)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;The&#160;token&#160;to&#160;use&#160;for&#160;authentication</text><text class="terminal-452800165-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-452800165-line-9)">
+</text><text class="terminal-452800165-r1" x="0" y="264" textLength="732" clip-path="url(#terminal-452800165-line-10)">&#160;&#160;--api-url&#160;API_URL&#160;&#160;&#160;&#160;&#160;The&#160;URL&#160;of&#160;the&#160;metadata&#160;database&#160;API</text><text class="terminal-452800165-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-452800165-line-10)">
+</text><text class="terminal-452800165-r1" x="0" y="288.4" textLength="744.2" clip-path="url(#terminal-452800165-line-11)">&#160;&#160;-e,&#160;--env&#160;ENV&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;The&#160;environment&#160;to&#160;run&#160;the&#160;command&#160;in</text><text class="terminal-452800165-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-452800165-line-11)">
+</text><text class="terminal-452800165-r1" x="0" y="312.8" textLength="280.6" clip-path="url(#terminal-452800165-line-12)">&#160;&#160;--password&#160;[PASSWORD]</text><text class="terminal-452800165-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-452800165-line-12)">
+</text><text class="terminal-452800165-r1" x="0" y="337.2" textLength="756.4" clip-path="url(#terminal-452800165-line-13)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;The&#160;password&#160;to&#160;use&#160;for&#160;authentication</text><text class="terminal-452800165-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-452800165-line-13)">
+</text><text class="terminal-452800165-r1" x="0" y="361.6" textLength="756.4" clip-path="url(#terminal-452800165-line-14)">&#160;&#160;--username&#160;USERNAME&#160;&#160;&#160;The&#160;username&#160;to&#160;use&#160;for&#160;authentication</text><text class="terminal-452800165-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-452800165-line-14)">
 </text>
     </g>
     </g>
diff --git a/airflow-ctl/docs/images/output_backfills.svg b/airflow-ctl/docs/images/output_backfills.svg
index 773141475e3ae..dd590f32527e5 100644
--- a/airflow-ctl/docs/images/output_backfills.svg
+++ b/airflow-ctl/docs/images/output_backfills.svg
@@ -19,103 +19,103 @@
         font-weight: 700;
     }
 
-    .terminal-962206658-matrix {
+    .terminal-3702003602-matrix {
         font-family: Fira Code, monospace;
         font-size: 20px;
         line-height: 24.4px;
         font-variant-east-asian: full-width;
     }
 
-    .terminal-962206658-title {
+    .terminal-3702003602-title {
         font-size: 18px;
         font-weight: bold;
         font-family: arial;
     }
 
-    .terminal-962206658-r1 { fill: #c5c8c6 }
+    .terminal-3702003602-r1 { fill: #c5c8c6 }
     </style>
 
     <defs>
-    <clipPath id="terminal-962206658-clip-terminal">
+    <clipPath id="terminal-3702003602-clip-terminal">
       <rect x="0" y="0" width="975.0" height="413.79999999999995" />
     </clipPath>
-    <clipPath id="terminal-962206658-line-0">
+    <clipPath id="terminal-3702003602-line-0">
     <rect x="0" y="1.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-962206658-line-1">
+<clipPath id="terminal-3702003602-line-1">
     <rect x="0" y="25.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-962206658-line-2">
+<clipPath id="terminal-3702003602-line-2">
     <rect x="0" y="50.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-962206658-line-3">
+<clipPath id="terminal-3702003602-line-3">
     <rect x="0" y="74.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-962206658-line-4">
+<clipPath id="terminal-3702003602-line-4">
     <rect x="0" y="99.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-962206658-line-5">
+<clipPath id="terminal-3702003602-line-5">
     <rect x="0" y="123.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-962206658-line-6">
+<clipPath id="terminal-3702003602-line-6">
     <rect x="0" y="147.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-962206658-line-7">
+<clipPath id="terminal-3702003602-line-7">
     <rect x="0" y="172.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-962206658-line-8">
+<clipPath id="terminal-3702003602-line-8">
     <rect x="0" y="196.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-962206658-line-9">
+<clipPath id="terminal-3702003602-line-9">
     <rect x="0" y="221.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-962206658-line-10">
+<clipPath id="terminal-3702003602-line-10">
     <rect x="0" y="245.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-962206658-line-11">
+<clipPath id="terminal-3702003602-line-11">
     <rect x="0" y="269.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-962206658-line-12">
+<clipPath id="terminal-3702003602-line-12">
     <rect x="0" y="294.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-962206658-line-13">
+<clipPath id="terminal-3702003602-line-13">
     <rect x="0" y="318.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-962206658-line-14">
+<clipPath id="terminal-3702003602-line-14">
     <rect x="0" y="343.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-962206658-line-15">
+<clipPath id="terminal-3702003602-line-15">
     <rect x="0" y="367.5" width="976" height="24.65"/>
             </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="462.8" rx="8"/><text class="terminal-962206658-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;backfills</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="462.8" rx="8"/><text class="terminal-3702003602-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;backfills</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
 
-    <g transform="translate(9, 41)" clip-path="url(#terminal-962206658-clip-terminal)">
+    <g transform="translate(9, 41)" clip-path="url(#terminal-3702003602-clip-terminal)">
 
-    <g class="terminal-962206658-matrix">
-    <text class="terminal-962206658-r1" x="0" y="20" textLength="536.8" clip-path="url(#terminal-962206658-line-0)">Usage:&#160;airflowctl&#160;backfills&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-962206658-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-962206658-line-0)">
-</text><text class="terminal-962206658-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-962206658-line-1)">
-</text><text class="terminal-962206658-r1" x="0" y="68.8" textLength="341.6" clip-path="url(#terminal-962206658-line-2)">Perform&#160;Backfills&#160;operations</text><text class="terminal-962206658-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-962206658-line-2)">
-</text><text class="terminal-962206658-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-962206658-line-3)">
-</text><text class="terminal-962206658-r1" x="0" y="117.6" textLength="256.2" clip-path="url(#terminal-962206658-line-4)">Positional&#160;Arguments:</text><text class="terminal-962206658-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-962206658-line-4)">
-</text><text class="terminal-962206658-r1" x="0" y="142" textLength="109.8" clip-path="url(#terminal-962206658-line-5)">&#160;&#160;COMMAND</text><text class="terminal-962206658-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-962206658-line-5)">
-</text><text class="terminal-962206658-r1" x="0" y="166.4" textLength="512.4" clip-path="url(#terminal-962206658-line-6)">&#160;&#160;&#160;&#160;cancel&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;cancel&#160;operation</text><text class="terminal-962206658-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-962206658-line-6)">
-</text><text class="terminal-962206658-r1" x="0" y="190.8" textLength="512.4" clip-path="url(#terminal-962206658-line-7)">&#160;&#160;&#160;&#160;create&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;create&#160;operation</text><text class="terminal-962206658-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-962206658-line-7)">
-</text><text class="terminal-962206658-r1" x="0" y="215.2" textLength="219.6" clip-path="url(#terminal-962206658-line-8)">&#160;&#160;&#160;&#160;create-dry-run</text><text class="terminal-962206658-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-962206658-line-8)">
-</text><text class="terminal-962206658-r1" x="0" y="239.6" textLength="610" clip-path="url(#terminal-962206658-line-9)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;create_dry_run&#160;operation</text><text class="terminal-962206658-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-962206658-line-9)">
-</text><text class="terminal-962206658-r1" x="0" y="264" textLength="475.8" clip-path="url(#terminal-962206658-line-10)">&#160;&#160;&#160;&#160;get&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get&#160;operation</text><text class="terminal-962206658-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-962206658-line-10)">
-</text><text class="terminal-962206658-r1" x="0" y="288.4" textLength="488" clip-path="url(#terminal-962206658-line-11)">&#160;&#160;&#160;&#160;list&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list&#160;operation</text><text class="terminal-962206658-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-962206658-line-11)">
-</text><text class="terminal-962206658-r1" x="0" y="312.8" textLength="500.2" clip-path="url(#terminal-962206658-line-12)">&#160;&#160;&#160;&#160;pause&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;pause&#160;operation</text><text class="terminal-962206658-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-962206658-line-12)">
-</text><text class="terminal-962206658-r1" x="0" y="337.2" textLength="524.6" clip-path="url(#terminal-962206658-line-13)">&#160;&#160;&#160;&#160;unpause&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;unpause&#160;operation</text><text class="terminal-962206658-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-962206658-line-13)">
-</text><text class="terminal-962206658-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-962206658-line-14)">
-</text><text class="terminal-962206658-r1" x="0" y="386" textLength="231.8" clip-path="url(#terminal-962206658-line-15)">Optional&#160;Arguments:</text><text class="terminal-962206658-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-962206658-line-15)">
-</text><text class="terminal-962206658-r1" x="0" y="410.4" textLength="597.8" clip-path="url(#terminal-962206658-line-16)">&#160;&#160;-h,&#160;--help&#160;&#160;&#160;&#160;&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-962206658-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-962206658-line-16)">
+    <g class="terminal-3702003602-matrix">
+    <text class="terminal-3702003602-r1" x="0" y="20" textLength="536.8" clip-path="url(#terminal-3702003602-line-0)">Usage:&#160;airflowctl&#160;backfills&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-3702003602-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3702003602-line-0)">
+</text><text class="terminal-3702003602-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3702003602-line-1)">
+</text><text class="terminal-3702003602-r1" x="0" y="68.8" textLength="341.6" clip-path="url(#terminal-3702003602-line-2)">Perform&#160;Backfills&#160;operations</text><text class="terminal-3702003602-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-3702003602-line-2)">
+</text><text class="terminal-3702003602-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-3702003602-line-3)">
+</text><text class="terminal-3702003602-r1" x="0" y="117.6" textLength="256.2" clip-path="url(#terminal-3702003602-line-4)">Positional&#160;Arguments:</text><text class="terminal-3702003602-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-3702003602-line-4)">
+</text><text class="terminal-3702003602-r1" x="0" y="142" textLength="109.8" clip-path="url(#terminal-3702003602-line-5)">&#160;&#160;COMMAND</text><text class="terminal-3702003602-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-3702003602-line-5)">
+</text><text class="terminal-3702003602-r1" x="0" y="166.4" textLength="512.4" clip-path="url(#terminal-3702003602-line-6)">&#160;&#160;&#160;&#160;cancel&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;cancel&#160;operation</text><text class="terminal-3702003602-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-3702003602-line-6)">
+</text><text class="terminal-3702003602-r1" x="0" y="190.8" textLength="512.4" clip-path="url(#terminal-3702003602-line-7)">&#160;&#160;&#160;&#160;create&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;create&#160;operation</text><text class="terminal-3702003602-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-3702003602-line-7)">
+</text><text class="terminal-3702003602-r1" x="0" y="215.2" textLength="219.6" clip-path="url(#terminal-3702003602-line-8)">&#160;&#160;&#160;&#160;create-dry-run</text><text class="terminal-3702003602-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-3702003602-line-8)">
+</text><text class="terminal-3702003602-r1" x="0" y="239.6" textLength="610" clip-path="url(#terminal-3702003602-line-9)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;create_dry_run&#160;operation</text><text class="terminal-3702003602-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-3702003602-line-9)">
+</text><text class="terminal-3702003602-r1" x="0" y="264" textLength="475.8" clip-path="url(#terminal-3702003602-line-10)">&#160;&#160;&#160;&#160;get&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get&#160;operation</text><text class="terminal-3702003602-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-3702003602-line-10)">
+</text><text class="terminal-3702003602-r1" x="0" y="288.4" textLength="488" clip-path="url(#terminal-3702003602-line-11)">&#160;&#160;&#160;&#160;list&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list&#160;operation</text><text class="terminal-3702003602-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-3702003602-line-11)">
+</text><text class="terminal-3702003602-r1" x="0" y="312.8" textLength="500.2" clip-path="url(#terminal-3702003602-line-12)">&#160;&#160;&#160;&#160;pause&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;pause&#160;operation</text><text class="terminal-3702003602-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-3702003602-line-12)">
+</text><text class="terminal-3702003602-r1" x="0" y="337.2" textLength="524.6" clip-path="url(#terminal-3702003602-line-13)">&#160;&#160;&#160;&#160;unpause&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;unpause&#160;operation</text><text class="terminal-3702003602-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-3702003602-line-13)">
+</text><text class="terminal-3702003602-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-3702003602-line-14)">
+</text><text class="terminal-3702003602-r1" x="0" y="386" textLength="97.6" clip-path="url(#terminal-3702003602-line-15)">Options:</text><text class="terminal-3702003602-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-3702003602-line-15)">
+</text><text class="terminal-3702003602-r1" x="0" y="410.4" textLength="597.8" clip-path="url(#terminal-3702003602-line-16)">&#160;&#160;-h,&#160;--help&#160;&#160;&#160;&#160;&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-3702003602-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-3702003602-line-16)">
 </text>
     </g>
     </g>
diff --git a/airflow-ctl/docs/images/output_config.svg b/airflow-ctl/docs/images/output_config.svg
index 152fd39a10f10..e993040457df5 100644
--- a/airflow-ctl/docs/images/output_config.svg
+++ b/airflow-ctl/docs/images/output_config.svg
@@ -19,85 +19,87 @@
         font-weight: 700;
     }
 
-    .terminal-2772488152-matrix {
+    .terminal-2512178088-matrix {
         font-family: Fira Code, monospace;
         font-size: 20px;
         line-height: 24.4px;
         font-variant-east-asian: full-width;
     }
 
-    .terminal-2772488152-title {
+    .terminal-2512178088-title {
         font-size: 18px;
         font-weight: bold;
         font-family: arial;
     }
 
-    .terminal-2772488152-r1 { fill: #c5c8c6 }
+    .terminal-2512178088-r1 { fill: #c5c8c6 }
     </style>
 
     <defs>
-    <clipPath id="terminal-2772488152-clip-terminal">
+    <clipPath id="terminal-2512178088-clip-terminal">
       <rect x="0" y="0" width="975.0" height="316.2" />
     </clipPath>
-    <clipPath id="terminal-2772488152-line-0">
+    <clipPath id="terminal-2512178088-line-0">
     <rect x="0" y="1.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2772488152-line-1">
+<clipPath id="terminal-2512178088-line-1">
     <rect x="0" y="25.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2772488152-line-2">
+<clipPath id="terminal-2512178088-line-2">
     <rect x="0" y="50.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2772488152-line-3">
+<clipPath id="terminal-2512178088-line-3">
     <rect x="0" y="74.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2772488152-line-4">
+<clipPath id="terminal-2512178088-line-4">
     <rect x="0" y="99.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2772488152-line-5">
+<clipPath id="terminal-2512178088-line-5">
     <rect x="0" y="123.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2772488152-line-6">
+<clipPath id="terminal-2512178088-line-6">
     <rect x="0" y="147.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2772488152-line-7">
+<clipPath id="terminal-2512178088-line-7">
     <rect x="0" y="172.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2772488152-line-8">
+<clipPath id="terminal-2512178088-line-8">
     <rect x="0" y="196.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2772488152-line-9">
+<clipPath id="terminal-2512178088-line-9">
     <rect x="0" y="221.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2772488152-line-10">
+<clipPath id="terminal-2512178088-line-10">
     <rect x="0" y="245.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2772488152-line-11">
+<clipPath id="terminal-2512178088-line-11">
     <rect x="0" y="269.9" width="976" height="24.65"/>
             </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="365.2" rx="8"/><text class="terminal-2772488152-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;config</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="365.2" rx="8"/><text class="terminal-2512178088-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;config</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
 
-    <g transform="translate(9, 41)" clip-path="url(#terminal-1599905258-clip-terminal)">
+    <g transform="translate(9, 41)" clip-path="url(#terminal-2512178088-clip-terminal)">
 
-    <g class="terminal-1599905258-matrix">
-    <text class="terminal-1599905258-r1" x="0" y="20" textLength="500.2" clip-path="url(#terminal-1599905258-line-0)">Usage:&#160;airflowctl&#160;config&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-1599905258-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1599905258-line-0)">
-</text><text class="terminal-1599905258-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1599905258-line-1)">
-</text><text class="terminal-1599905258-r1" x="0" y="68.8" textLength="305" clip-path="url(#terminal-1599905258-line-2)">Perform&#160;Config&#160;operations</text><text class="terminal-1599905258-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1599905258-line-2)">
-</text><text class="terminal-1599905258-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1599905258-line-3)">
-</text><text class="terminal-1599905258-r1" x="0" y="117.6" textLength="256.2" clip-path="url(#terminal-1599905258-line-4)">Positional&#160;Arguments:</text><text class="terminal-1599905258-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1599905258-line-4)">
-</text><text class="terminal-1599905258-r1" x="0" y="142" textLength="109.8" clip-path="url(#terminal-1599905258-line-5)">&#160;&#160;COMMAND</text><text class="terminal-1599905258-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1599905258-line-5)">
-</text><text class="terminal-1599905258-r1" x="0" y="166.4" textLength="427" clip-path="url(#terminal-1599905258-line-6)">&#160;&#160;&#160;&#160;get&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get&#160;operation</text><text class="terminal-1599905258-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1599905258-line-6)">
-</text><text class="terminal-1599905258-r1" x="0" y="190.8" textLength="439.2" clip-path="url(#terminal-1599905258-line-7)">&#160;&#160;&#160;&#160;list&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list&#160;operation</text><text class="terminal-1599905258-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1599905258-line-7)">
-</text><text class="terminal-1599905258-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1599905258-line-8)">
-</text><text class="terminal-1599905258-r1" x="0" y="239.6" textLength="231.8" clip-path="url(#terminal-1599905258-line-9)">Optional&#160;Arguments:</text><text class="terminal-1599905258-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1599905258-line-9)">
-</text><text class="terminal-1599905258-r1" x="0" y="264" textLength="549" clip-path="url(#terminal-1599905258-line-10)">&#160;&#160;-h,&#160;--help&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-1599905258-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1599905258-line-10)">
+    <g class="terminal-2512178088-matrix">
+    <text class="terminal-2512178088-r1" x="0" y="20" textLength="500.2" clip-path="url(#terminal-2512178088-line-0)">Usage:&#160;airflowctl&#160;config&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-2512178088-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2512178088-line-0)">
+</text><text class="terminal-2512178088-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2512178088-line-1)">
+</text><text class="terminal-2512178088-r1" x="0" y="68.8" textLength="305" clip-path="url(#terminal-2512178088-line-2)">Perform&#160;Config&#160;operations</text><text class="terminal-2512178088-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2512178088-line-2)">
+</text><text class="terminal-2512178088-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2512178088-line-3)">
+</text><text class="terminal-2512178088-r1" x="0" y="117.6" textLength="256.2" clip-path="url(#terminal-2512178088-line-4)">Positional&#160;Arguments:</text><text class="terminal-2512178088-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2512178088-line-4)">
+</text><text class="terminal-2512178088-r1" x="0" y="142" textLength="109.8" clip-path="url(#terminal-2512178088-line-5)">&#160;&#160;COMMAND</text><text class="terminal-2512178088-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2512178088-line-5)">
+</text><text class="terminal-2512178088-r1" x="0" y="166.4" textLength="427" clip-path="url(#terminal-2512178088-line-6)">&#160;&#160;&#160;&#160;get&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get&#160;operation</text><text class="terminal-2512178088-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-2512178088-line-6)">
+</text><text class="terminal-2512178088-r1" x="0" y="190.8" textLength="951.6" clip-path="url(#terminal-2512178088-line-7)">&#160;&#160;&#160;&#160;lint&#160;&#160;&#160;&#160;&#160;&#160;Lint&#160;options&#160;for&#160;the&#160;configuration&#160;changes&#160;while&#160;migrating&#160;from&#160;</text><text class="terminal-2512178088-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-2512178088-line-7)">
+</text><text class="terminal-2512178088-r1" x="0" y="215.2" textLength="268.4" clip-path="url(#terminal-2512178088-line-8)">Airflow&#160;2&#160;to&#160;Airflow&#160;3</text><text class="terminal-2512178088-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-2512178088-line-8)">
+</text><text class="terminal-2512178088-r1" x="0" y="239.6" textLength="439.2" clip-path="url(#terminal-2512178088-line-9)">&#160;&#160;&#160;&#160;list&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list&#160;operation</text><text class="terminal-2512178088-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-2512178088-line-9)">
+</text><text class="terminal-2512178088-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-2512178088-line-10)">
+</text><text class="terminal-2512178088-r1" x="0" y="288.4" textLength="97.6" clip-path="url(#terminal-2512178088-line-11)">Options:</text><text class="terminal-2512178088-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-2512178088-line-11)">
+</text><text class="terminal-2512178088-r1" x="0" y="312.8" textLength="549" clip-path="url(#terminal-2512178088-line-12)">&#160;&#160;-h,&#160;--help&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-2512178088-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-2512178088-line-12)">
 </text>
     </g>
     </g>
diff --git a/airflow-ctl/docs/images/output_connections.svg b/airflow-ctl/docs/images/output_connections.svg
index 7d9c884d7a1dc..952b010c12e39 100644
--- a/airflow-ctl/docs/images/output_connections.svg
+++ b/airflow-ctl/docs/images/output_connections.svg
@@ -19,103 +19,103 @@
         font-weight: 700;
     }
 
-    .terminal-2751209256-matrix {
+    .terminal-560929528-matrix {
         font-family: Fira Code, monospace;
         font-size: 20px;
         line-height: 24.4px;
         font-variant-east-asian: full-width;
     }
 
-    .terminal-2751209256-title {
+    .terminal-560929528-title {
         font-size: 18px;
         font-weight: bold;
         font-family: arial;
     }
 
-    .terminal-2751209256-r1 { fill: #c5c8c6 }
+    .terminal-560929528-r1 { fill: #c5c8c6 }
     </style>
 
     <defs>
-    <clipPath id="terminal-2751209256-clip-terminal">
+    <clipPath id="terminal-560929528-clip-terminal">
       <rect x="0" y="0" width="975.0" height="413.79999999999995" />
     </clipPath>
-    <clipPath id="terminal-2751209256-line-0">
+    <clipPath id="terminal-560929528-line-0">
     <rect x="0" y="1.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2751209256-line-1">
+<clipPath id="terminal-560929528-line-1">
     <rect x="0" y="25.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2751209256-line-2">
+<clipPath id="terminal-560929528-line-2">
     <rect x="0" y="50.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2751209256-line-3">
+<clipPath id="terminal-560929528-line-3">
     <rect x="0" y="74.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2751209256-line-4">
+<clipPath id="terminal-560929528-line-4">
     <rect x="0" y="99.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2751209256-line-5">
+<clipPath id="terminal-560929528-line-5">
     <rect x="0" y="123.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2751209256-line-6">
+<clipPath id="terminal-560929528-line-6">
     <rect x="0" y="147.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2751209256-line-7">
+<clipPath id="terminal-560929528-line-7">
     <rect x="0" y="172.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2751209256-line-8">
+<clipPath id="terminal-560929528-line-8">
     <rect x="0" y="196.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2751209256-line-9">
+<clipPath id="terminal-560929528-line-9">
     <rect x="0" y="221.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2751209256-line-10">
+<clipPath id="terminal-560929528-line-10">
     <rect x="0" y="245.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2751209256-line-11">
+<clipPath id="terminal-560929528-line-11">
     <rect x="0" y="269.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2751209256-line-12">
+<clipPath id="terminal-560929528-line-12">
     <rect x="0" y="294.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2751209256-line-13">
+<clipPath id="terminal-560929528-line-13">
     <rect x="0" y="318.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2751209256-line-14">
+<clipPath id="terminal-560929528-line-14">
     <rect x="0" y="343.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2751209256-line-15">
+<clipPath id="terminal-560929528-line-15">
     <rect x="0" y="367.5" width="976" height="24.65"/>
             </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="462.8" rx="8"/><text class="terminal-2751209256-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;connections</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="462.8" rx="8"/><text class="terminal-560929528-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;connections</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
 
-    <g transform="translate(9, 41)" clip-path="url(#terminal-2751209256-clip-terminal)">
+    <g transform="translate(9, 41)" clip-path="url(#terminal-560929528-clip-terminal)">
 
-    <g class="terminal-2751209256-matrix">
-    <text class="terminal-2751209256-r1" x="0" y="20" textLength="561.2" clip-path="url(#terminal-2751209256-line-0)">Usage:&#160;airflowctl&#160;connections&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-2751209256-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2751209256-line-0)">
-</text><text class="terminal-2751209256-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2751209256-line-1)">
-</text><text class="terminal-2751209256-r1" x="0" y="68.8" textLength="366" clip-path="url(#terminal-2751209256-line-2)">Perform&#160;Connections&#160;operations</text><text class="terminal-2751209256-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2751209256-line-2)">
-</text><text class="terminal-2751209256-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2751209256-line-3)">
-</text><text class="terminal-2751209256-r1" x="0" y="117.6" textLength="256.2" clip-path="url(#terminal-2751209256-line-4)">Positional&#160;Arguments:</text><text class="terminal-2751209256-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2751209256-line-4)">
-</text><text class="terminal-2751209256-r1" x="0" y="142" textLength="109.8" clip-path="url(#terminal-2751209256-line-5)">&#160;&#160;COMMAND</text><text class="terminal-2751209256-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2751209256-line-5)">
-</text><text class="terminal-2751209256-r1" x="0" y="166.4" textLength="524.6" clip-path="url(#terminal-2751209256-line-6)">&#160;&#160;&#160;&#160;create&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;create&#160;operation</text><text class="terminal-2751209256-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-2751209256-line-6)">
-</text><text class="terminal-2751209256-r1" x="0" y="190.8" textLength="231.8" clip-path="url(#terminal-2751209256-line-7)">&#160;&#160;&#160;&#160;create-defaults</text><text class="terminal-2751209256-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-2751209256-line-7)">
-</text><text class="terminal-2751209256-r1" x="0" y="215.2" textLength="634.4" clip-path="url(#terminal-2751209256-line-8)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;create_defaults&#160;operation</text><text class="terminal-2751209256-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-2751209256-line-8)">
-</text><text class="terminal-2751209256-r1" x="0" y="239.6" textLength="524.6" clip-path="url(#terminal-2751209256-line-9)">&#160;&#160;&#160;&#160;delete&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;delete&#160;operation</text><text class="terminal-2751209256-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-2751209256-line-9)">
-</text><text class="terminal-2751209256-r1" x="0" y="264" textLength="488" clip-path="url(#terminal-2751209256-line-10)">&#160;&#160;&#160;&#160;get&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get&#160;operation</text><text class="terminal-2751209256-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-2751209256-line-10)">
-</text><text class="terminal-2751209256-r1" x="0" y="288.4" textLength="500.2" clip-path="url(#terminal-2751209256-line-11)">&#160;&#160;&#160;&#160;list&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list&#160;operation</text><text class="terminal-2751209256-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-2751209256-line-11)">
-</text><text class="terminal-2751209256-r1" x="0" y="312.8" textLength="500.2" clip-path="url(#terminal-2751209256-line-12)">&#160;&#160;&#160;&#160;test&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;test&#160;operation</text><text class="terminal-2751209256-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-2751209256-line-12)">
-</text><text class="terminal-2751209256-r1" x="0" y="337.2" textLength="524.6" clip-path="url(#terminal-2751209256-line-13)">&#160;&#160;&#160;&#160;update&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;update&#160;operation</text><text class="terminal-2751209256-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-2751209256-line-13)">
-</text><text class="terminal-2751209256-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-2751209256-line-14)">
-</text><text class="terminal-2751209256-r1" x="0" y="386" textLength="231.8" clip-path="url(#terminal-2751209256-line-15)">Optional&#160;Arguments:</text><text class="terminal-2751209256-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-2751209256-line-15)">
-</text><text class="terminal-2751209256-r1" x="0" y="410.4" textLength="610" clip-path="url(#terminal-2751209256-line-16)">&#160;&#160;-h,&#160;--help&#160;&#160;&#160;&#160;&#160;&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-2751209256-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-2751209256-line-16)">
+    <g class="terminal-560929528-matrix">
+    <text class="terminal-560929528-r1" x="0" y="20" textLength="561.2" clip-path="url(#terminal-560929528-line-0)">Usage:&#160;airflowctl&#160;connections&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-560929528-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-560929528-line-0)">
+</text><text class="terminal-560929528-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-560929528-line-1)">
+</text><text class="terminal-560929528-r1" x="0" y="68.8" textLength="366" clip-path="url(#terminal-560929528-line-2)">Perform&#160;Connections&#160;operations</text><text class="terminal-560929528-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-560929528-line-2)">
+</text><text class="terminal-560929528-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-560929528-line-3)">
+</text><text class="terminal-560929528-r1" x="0" y="117.6" textLength="256.2" clip-path="url(#terminal-560929528-line-4)">Positional&#160;Arguments:</text><text class="terminal-560929528-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-560929528-line-4)">
+</text><text class="terminal-560929528-r1" x="0" y="142" textLength="109.8" clip-path="url(#terminal-560929528-line-5)">&#160;&#160;COMMAND</text><text class="terminal-560929528-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-560929528-line-5)">
+</text><text class="terminal-560929528-r1" x="0" y="166.4" textLength="524.6" clip-path="url(#terminal-560929528-line-6)">&#160;&#160;&#160;&#160;create&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;create&#160;operation</text><text class="terminal-560929528-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-560929528-line-6)">
+</text><text class="terminal-560929528-r1" x="0" y="190.8" textLength="231.8" clip-path="url(#terminal-560929528-line-7)">&#160;&#160;&#160;&#160;create-defaults</text><text class="terminal-560929528-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-560929528-line-7)">
+</text><text class="terminal-560929528-r1" x="0" y="215.2" textLength="634.4" clip-path="url(#terminal-560929528-line-8)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;create_defaults&#160;operation</text><text class="terminal-560929528-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-560929528-line-8)">
+</text><text class="terminal-560929528-r1" x="0" y="239.6" textLength="524.6" clip-path="url(#terminal-560929528-line-9)">&#160;&#160;&#160;&#160;delete&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;delete&#160;operation</text><text class="terminal-560929528-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-560929528-line-9)">
+</text><text class="terminal-560929528-r1" x="0" y="264" textLength="488" clip-path="url(#terminal-560929528-line-10)">&#160;&#160;&#160;&#160;get&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get&#160;operation</text><text class="terminal-560929528-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-560929528-line-10)">
+</text><text class="terminal-560929528-r1" x="0" y="288.4" textLength="500.2" clip-path="url(#terminal-560929528-line-11)">&#160;&#160;&#160;&#160;list&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list&#160;operation</text><text class="terminal-560929528-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-560929528-line-11)">
+</text><text class="terminal-560929528-r1" x="0" y="312.8" textLength="500.2" clip-path="url(#terminal-560929528-line-12)">&#160;&#160;&#160;&#160;test&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;test&#160;operation</text><text class="terminal-560929528-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-560929528-line-12)">
+</text><text class="terminal-560929528-r1" x="0" y="337.2" textLength="524.6" clip-path="url(#terminal-560929528-line-13)">&#160;&#160;&#160;&#160;update&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;update&#160;operation</text><text class="terminal-560929528-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-560929528-line-13)">
+</text><text class="terminal-560929528-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-560929528-line-14)">
+</text><text class="terminal-560929528-r1" x="0" y="386" textLength="97.6" clip-path="url(#terminal-560929528-line-15)">Options:</text><text class="terminal-560929528-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-560929528-line-15)">
+</text><text class="terminal-560929528-r1" x="0" y="410.4" textLength="610" clip-path="url(#terminal-560929528-line-16)">&#160;&#160;-h,&#160;--help&#160;&#160;&#160;&#160;&#160;&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-560929528-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-560929528-line-16)">
 </text>
     </g>
     </g>
diff --git a/airflow-ctl/docs/images/output_dag.svg b/airflow-ctl/docs/images/output_dag.svg
index ece942cf11b91..96a2c849ddec5 100644
--- a/airflow-ctl/docs/images/output_dag.svg
+++ b/airflow-ctl/docs/images/output_dag.svg
@@ -19,127 +19,127 @@
         font-weight: 700;
     }
 
-    .terminal-3760826401-matrix {
+    .terminal-1884464113-matrix {
         font-family: Fira Code, monospace;
         font-size: 20px;
         line-height: 24.4px;
         font-variant-east-asian: full-width;
     }
 
-    .terminal-3760826401-title {
+    .terminal-1884464113-title {
         font-size: 18px;
         font-weight: bold;
         font-family: arial;
     }
 
-    .terminal-3760826401-r1 { fill: #c5c8c6 }
+    .terminal-1884464113-r1 { fill: #c5c8c6 }
     </style>
 
     <defs>
-    <clipPath id="terminal-3760826401-clip-terminal">
+    <clipPath id="terminal-1884464113-clip-terminal">
       <rect x="0" y="0" width="975.0" height="560.1999999999999" />
     </clipPath>
-    <clipPath id="terminal-3760826401-line-0">
+    <clipPath id="terminal-1884464113-line-0">
     <rect x="0" y="1.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3760826401-line-1">
+<clipPath id="terminal-1884464113-line-1">
     <rect x="0" y="25.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3760826401-line-2">
+<clipPath id="terminal-1884464113-line-2">
     <rect x="0" y="50.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3760826401-line-3">
+<clipPath id="terminal-1884464113-line-3">
     <rect x="0" y="74.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3760826401-line-4">
+<clipPath id="terminal-1884464113-line-4">
     <rect x="0" y="99.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3760826401-line-5">
+<clipPath id="terminal-1884464113-line-5">
     <rect x="0" y="123.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3760826401-line-6">
+<clipPath id="terminal-1884464113-line-6">
     <rect x="0" y="147.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3760826401-line-7">
+<clipPath id="terminal-1884464113-line-7">
     <rect x="0" y="172.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3760826401-line-8">
+<clipPath id="terminal-1884464113-line-8">
     <rect x="0" y="196.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3760826401-line-9">
+<clipPath id="terminal-1884464113-line-9">
     <rect x="0" y="221.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3760826401-line-10">
+<clipPath id="terminal-1884464113-line-10">
     <rect x="0" y="245.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3760826401-line-11">
+<clipPath id="terminal-1884464113-line-11">
     <rect x="0" y="269.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3760826401-line-12">
+<clipPath id="terminal-1884464113-line-12">
     <rect x="0" y="294.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3760826401-line-13">
+<clipPath id="terminal-1884464113-line-13">
     <rect x="0" y="318.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3760826401-line-14">
+<clipPath id="terminal-1884464113-line-14">
     <rect x="0" y="343.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3760826401-line-15">
+<clipPath id="terminal-1884464113-line-15">
     <rect x="0" y="367.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3760826401-line-16">
+<clipPath id="terminal-1884464113-line-16">
     <rect x="0" y="391.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3760826401-line-17">
+<clipPath id="terminal-1884464113-line-17">
     <rect x="0" y="416.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3760826401-line-18">
+<clipPath id="terminal-1884464113-line-18">
     <rect x="0" y="440.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3760826401-line-19">
+<clipPath id="terminal-1884464113-line-19">
     <rect x="0" y="465.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3760826401-line-20">
+<clipPath id="terminal-1884464113-line-20">
     <rect x="0" y="489.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3760826401-line-21">
+<clipPath id="terminal-1884464113-line-21">
     <rect x="0" y="513.9" width="976" height="24.65"/>
             </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="609.2" rx="8"/><text class="terminal-3760826401-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;dag</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="609.2" rx="8"/><text class="terminal-1884464113-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;dag</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
 
-    <g transform="translate(9, 41)" clip-path="url(#terminal-3760826401-clip-terminal)">
+    <g transform="translate(9, 41)" clip-path="url(#terminal-1884464113-clip-terminal)">
 
-    <g class="terminal-3760826401-matrix">
-    <text class="terminal-3760826401-r1" x="0" y="20" textLength="463.6" clip-path="url(#terminal-3760826401-line-0)">Usage:&#160;airflowctl&#160;dag&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-3760826401-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3760826401-line-0)">
-</text><text class="terminal-3760826401-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3760826401-line-1)">
-</text><text class="terminal-3760826401-r1" x="0" y="68.8" textLength="268.4" clip-path="url(#terminal-3760826401-line-2)">Perform&#160;Dag&#160;operations</text><text class="terminal-3760826401-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-3760826401-line-2)">
-</text><text class="terminal-3760826401-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-3760826401-line-3)">
-</text><text class="terminal-3760826401-r1" x="0" y="117.6" textLength="256.2" clip-path="url(#terminal-3760826401-line-4)">Positional&#160;Arguments:</text><text class="terminal-3760826401-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-3760826401-line-4)">
-</text><text class="terminal-3760826401-r1" x="0" y="142" textLength="109.8" clip-path="url(#terminal-3760826401-line-5)">&#160;&#160;COMMAND</text><text class="terminal-3760826401-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-3760826401-line-5)">
-</text><text class="terminal-3760826401-r1" x="0" y="166.4" textLength="549" clip-path="url(#terminal-3760826401-line-6)">&#160;&#160;&#160;&#160;delete&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;delete&#160;operation</text><text class="terminal-3760826401-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-3760826401-line-6)">
-</text><text class="terminal-3760826401-r1" x="0" y="190.8" textLength="512.4" clip-path="url(#terminal-3760826401-line-7)">&#160;&#160;&#160;&#160;get&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get&#160;operation</text><text class="terminal-3760826401-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-3760826401-line-7)">
-</text><text class="terminal-3760826401-r1" x="0" y="215.2" textLength="610" clip-path="url(#terminal-3760826401-line-8)">&#160;&#160;&#160;&#160;get-details&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get_details&#160;operation</text><text class="terminal-3760826401-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-3760826401-line-8)">
-</text><text class="terminal-3760826401-r1" x="0" y="239.6" textLength="244" clip-path="url(#terminal-3760826401-line-9)">&#160;&#160;&#160;&#160;get-import-error</text><text class="terminal-3760826401-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-3760826401-line-9)">
-</text><text class="terminal-3760826401-r1" x="0" y="264" textLength="671" clip-path="url(#terminal-3760826401-line-10)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get_import_error&#160;operation</text><text class="terminal-3760826401-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-3760826401-line-10)">
-</text><text class="terminal-3760826401-r1" x="0" y="288.4" textLength="585.6" clip-path="url(#terminal-3760826401-line-11)">&#160;&#160;&#160;&#160;get-stats&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get_stats&#160;operation</text><text class="terminal-3760826401-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-3760826401-line-11)">
-</text><text class="terminal-3760826401-r1" x="0" y="312.8" textLength="573.4" clip-path="url(#terminal-3760826401-line-12)">&#160;&#160;&#160;&#160;get-tags&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get_tags&#160;operation</text><text class="terminal-3760826401-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-3760826401-line-12)">
-</text><text class="terminal-3760826401-r1" x="0" y="337.2" textLength="610" clip-path="url(#terminal-3760826401-line-13)">&#160;&#160;&#160;&#160;get-version&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get_version&#160;operation</text><text class="terminal-3760826401-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-3760826401-line-13)">
-</text><text class="terminal-3760826401-r1" x="0" y="361.6" textLength="524.6" clip-path="url(#terminal-3760826401-line-14)">&#160;&#160;&#160;&#160;list&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list&#160;operation</text><text class="terminal-3760826401-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-3760826401-line-14)">
-</text><text class="terminal-3760826401-r1" x="0" y="386" textLength="256.2" clip-path="url(#terminal-3760826401-line-15)">&#160;&#160;&#160;&#160;list-import-error</text><text class="terminal-3760826401-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-3760826401-line-15)">
-</text><text class="terminal-3760826401-r1" x="0" y="410.4" textLength="683.2" clip-path="url(#terminal-3760826401-line-16)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list_import_error&#160;operation</text><text class="terminal-3760826401-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-3760826401-line-16)">
-</text><text class="terminal-3760826401-r1" x="0" y="434.8" textLength="622.2" clip-path="url(#terminal-3760826401-line-17)">&#160;&#160;&#160;&#160;list-version&#160;&#160;&#160;&#160;&#160;Perform&#160;list_version&#160;operation</text><text class="terminal-3760826401-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-3760826401-line-17)">
-</text><text class="terminal-3760826401-r1" x="0" y="459.2" textLength="622.2" clip-path="url(#terminal-3760826401-line-18)">&#160;&#160;&#160;&#160;list-warning&#160;&#160;&#160;&#160;&#160;Perform&#160;list_warning&#160;operation</text><text class="terminal-3760826401-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-3760826401-line-18)">
-</text><text class="terminal-3760826401-r1" x="0" y="483.6" textLength="536.8" clip-path="url(#terminal-3760826401-line-19)">&#160;&#160;&#160;&#160;patch&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;patch&#160;operation</text><text class="terminal-3760826401-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-3760826401-line-19)">
-</text><text class="terminal-3760826401-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-3760826401-line-20)">
-</text><text class="terminal-3760826401-r1" x="0" y="532.4" textLength="231.8" clip-path="url(#terminal-3760826401-line-21)">Optional&#160;Arguments:</text><text class="terminal-3760826401-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-3760826401-line-21)">
-</text><text class="terminal-3760826401-r1" x="0" y="556.8" textLength="634.4" clip-path="url(#terminal-3760826401-line-22)">&#160;&#160;-h,&#160;--help&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-3760826401-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-3760826401-line-22)">
+    <g class="terminal-1884464113-matrix">
+    <text class="terminal-1884464113-r1" x="0" y="20" textLength="463.6" clip-path="url(#terminal-1884464113-line-0)">Usage:&#160;airflowctl&#160;dag&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-1884464113-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1884464113-line-0)">
+</text><text class="terminal-1884464113-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1884464113-line-1)">
+</text><text class="terminal-1884464113-r1" x="0" y="68.8" textLength="268.4" clip-path="url(#terminal-1884464113-line-2)">Perform&#160;Dag&#160;operations</text><text class="terminal-1884464113-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1884464113-line-2)">
+</text><text class="terminal-1884464113-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1884464113-line-3)">
+</text><text class="terminal-1884464113-r1" x="0" y="117.6" textLength="256.2" clip-path="url(#terminal-1884464113-line-4)">Positional&#160;Arguments:</text><text class="terminal-1884464113-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1884464113-line-4)">
+</text><text class="terminal-1884464113-r1" x="0" y="142" textLength="109.8" clip-path="url(#terminal-1884464113-line-5)">&#160;&#160;COMMAND</text><text class="terminal-1884464113-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1884464113-line-5)">
+</text><text class="terminal-1884464113-r1" x="0" y="166.4" textLength="549" clip-path="url(#terminal-1884464113-line-6)">&#160;&#160;&#160;&#160;delete&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;delete&#160;operation</text><text class="terminal-1884464113-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1884464113-line-6)">
+</text><text class="terminal-1884464113-r1" x="0" y="190.8" textLength="512.4" clip-path="url(#terminal-1884464113-line-7)">&#160;&#160;&#160;&#160;get&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get&#160;operation</text><text class="terminal-1884464113-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1884464113-line-7)">
+</text><text class="terminal-1884464113-r1" x="0" y="215.2" textLength="610" clip-path="url(#terminal-1884464113-line-8)">&#160;&#160;&#160;&#160;get-details&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get_details&#160;operation</text><text class="terminal-1884464113-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1884464113-line-8)">
+</text><text class="terminal-1884464113-r1" x="0" y="239.6" textLength="244" clip-path="url(#terminal-1884464113-line-9)">&#160;&#160;&#160;&#160;get-import-error</text><text class="terminal-1884464113-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1884464113-line-9)">
+</text><text class="terminal-1884464113-r1" x="0" y="264" textLength="671" clip-path="url(#terminal-1884464113-line-10)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get_import_error&#160;operation</text><text class="terminal-1884464113-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1884464113-line-10)">
+</text><text class="terminal-1884464113-r1" x="0" y="288.4" textLength="585.6" clip-path="url(#terminal-1884464113-line-11)">&#160;&#160;&#160;&#160;get-stats&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get_stats&#160;operation</text><text class="terminal-1884464113-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1884464113-line-11)">
+</text><text class="terminal-1884464113-r1" x="0" y="312.8" textLength="573.4" clip-path="url(#terminal-1884464113-line-12)">&#160;&#160;&#160;&#160;get-tags&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get_tags&#160;operation</text><text class="terminal-1884464113-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1884464113-line-12)">
+</text><text class="terminal-1884464113-r1" x="0" y="337.2" textLength="610" clip-path="url(#terminal-1884464113-line-13)">&#160;&#160;&#160;&#160;get-version&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get_version&#160;operation</text><text class="terminal-1884464113-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1884464113-line-13)">
+</text><text class="terminal-1884464113-r1" x="0" y="361.6" textLength="524.6" clip-path="url(#terminal-1884464113-line-14)">&#160;&#160;&#160;&#160;list&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list&#160;operation</text><text class="terminal-1884464113-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1884464113-line-14)">
+</text><text class="terminal-1884464113-r1" x="0" y="386" textLength="256.2" clip-path="url(#terminal-1884464113-line-15)">&#160;&#160;&#160;&#160;list-import-error</text><text class="terminal-1884464113-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1884464113-line-15)">
+</text><text class="terminal-1884464113-r1" x="0" y="410.4" textLength="683.2" clip-path="url(#terminal-1884464113-line-16)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list_import_error&#160;operation</text><text class="terminal-1884464113-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1884464113-line-16)">
+</text><text class="terminal-1884464113-r1" x="0" y="434.8" textLength="622.2" clip-path="url(#terminal-1884464113-line-17)">&#160;&#160;&#160;&#160;list-version&#160;&#160;&#160;&#160;&#160;Perform&#160;list_version&#160;operation</text><text class="terminal-1884464113-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1884464113-line-17)">
+</text><text class="terminal-1884464113-r1" x="0" y="459.2" textLength="622.2" clip-path="url(#terminal-1884464113-line-18)">&#160;&#160;&#160;&#160;list-warning&#160;&#160;&#160;&#160;&#160;Perform&#160;list_warning&#160;operation</text><text class="terminal-1884464113-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1884464113-line-18)">
+</text><text class="terminal-1884464113-r1" x="0" y="483.6" textLength="536.8" clip-path="url(#terminal-1884464113-line-19)">&#160;&#160;&#160;&#160;patch&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;patch&#160;operation</text><text class="terminal-1884464113-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1884464113-line-19)">
+</text><text class="terminal-1884464113-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-1884464113-line-20)">
+</text><text class="terminal-1884464113-r1" x="0" y="532.4" textLength="97.6" clip-path="url(#terminal-1884464113-line-21)">Options:</text><text class="terminal-1884464113-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-1884464113-line-21)">
+</text><text class="terminal-1884464113-r1" x="0" y="556.8" textLength="634.4" clip-path="url(#terminal-1884464113-line-22)">&#160;&#160;-h,&#160;--help&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-1884464113-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-1884464113-line-22)">
 </text>
     </g>
     </g>
diff --git a/airflow-ctl/docs/images/output_dagrun.svg b/airflow-ctl/docs/images/output_dagrun.svg
index 20792fc3cab65..cd3bc15880d40 100644
--- a/airflow-ctl/docs/images/output_dagrun.svg
+++ b/airflow-ctl/docs/images/output_dagrun.svg
@@ -19,83 +19,83 @@
         font-weight: 700;
     }
 
-    .terminal-668054125-matrix {
+    .terminal-1550757437-matrix {
         font-family: Fira Code, monospace;
         font-size: 20px;
         line-height: 24.4px;
         font-variant-east-asian: full-width;
     }
 
-    .terminal-668054125-title {
+    .terminal-1550757437-title {
         font-size: 18px;
         font-weight: bold;
         font-family: arial;
     }
 
-    .terminal-668054125-r1 { fill: #c5c8c6 }
+    .terminal-1550757437-r1 { fill: #c5c8c6 }
     </style>
 
     <defs>
-    <clipPath id="terminal-668054125-clip-terminal">
+    <clipPath id="terminal-1550757437-clip-terminal">
       <rect x="0" y="0" width="975.0" height="291.79999999999995" />
     </clipPath>
-    <clipPath id="terminal-668054125-line-0">
+    <clipPath id="terminal-1550757437-line-0">
     <rect x="0" y="1.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-668054125-line-1">
+<clipPath id="terminal-1550757437-line-1">
     <rect x="0" y="25.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-668054125-line-2">
+<clipPath id="terminal-1550757437-line-2">
     <rect x="0" y="50.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-668054125-line-3">
+<clipPath id="terminal-1550757437-line-3">
     <rect x="0" y="74.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-668054125-line-4">
+<clipPath id="terminal-1550757437-line-4">
     <rect x="0" y="99.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-668054125-line-5">
+<clipPath id="terminal-1550757437-line-5">
     <rect x="0" y="123.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-668054125-line-6">
+<clipPath id="terminal-1550757437-line-6">
     <rect x="0" y="147.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-668054125-line-7">
+<clipPath id="terminal-1550757437-line-7">
     <rect x="0" y="172.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-668054125-line-8">
+<clipPath id="terminal-1550757437-line-8">
     <rect x="0" y="196.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-668054125-line-9">
+<clipPath id="terminal-1550757437-line-9">
     <rect x="0" y="221.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-668054125-line-10">
+<clipPath id="terminal-1550757437-line-10">
     <rect x="0" y="245.5" width="976" height="24.65"/>
             </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="340.8" rx="8"/><text class="terminal-668054125-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;dagrun</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="340.8" rx="8"/><text class="terminal-1550757437-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;dagrun</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
 
-    <g transform="translate(9, 41)" clip-path="url(#terminal-668054125-clip-terminal)">
+    <g transform="translate(9, 41)" clip-path="url(#terminal-1550757437-clip-terminal)">
 
-    <g class="terminal-668054125-matrix">
-    <text class="terminal-668054125-r1" x="0" y="20" textLength="500.2" clip-path="url(#terminal-668054125-line-0)">Usage:&#160;airflowctl&#160;dagrun&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-668054125-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-668054125-line-0)">
-</text><text class="terminal-668054125-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-668054125-line-1)">
-</text><text class="terminal-668054125-r1" x="0" y="68.8" textLength="305" clip-path="url(#terminal-668054125-line-2)">Perform&#160;DagRun&#160;operations</text><text class="terminal-668054125-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-668054125-line-2)">
-</text><text class="terminal-668054125-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-668054125-line-3)">
-</text><text class="terminal-668054125-r1" x="0" y="117.6" textLength="256.2" clip-path="url(#terminal-668054125-line-4)">Positional&#160;Arguments:</text><text class="terminal-668054125-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-668054125-line-4)">
-</text><text class="terminal-668054125-r1" x="0" y="142" textLength="109.8" clip-path="url(#terminal-668054125-line-5)">&#160;&#160;COMMAND</text><text class="terminal-668054125-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-668054125-line-5)">
-</text><text class="terminal-668054125-r1" x="0" y="166.4" textLength="463.6" clip-path="url(#terminal-668054125-line-6)">&#160;&#160;&#160;&#160;create&#160;&#160;&#160;&#160;Perform&#160;create&#160;operation</text><text class="terminal-668054125-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-668054125-line-6)">
-</text><text class="terminal-668054125-r1" x="0" y="190.8" textLength="427" clip-path="url(#terminal-668054125-line-7)">&#160;&#160;&#160;&#160;get&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get&#160;operation</text><text class="terminal-668054125-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-668054125-line-7)">
-</text><text class="terminal-668054125-r1" x="0" y="215.2" textLength="439.2" clip-path="url(#terminal-668054125-line-8)">&#160;&#160;&#160;&#160;list&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list&#160;operation</text><text class="terminal-668054125-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-668054125-line-8)">
-</text><text class="terminal-668054125-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-668054125-line-9)">
-</text><text class="terminal-668054125-r1" x="0" y="264" textLength="231.8" clip-path="url(#terminal-668054125-line-10)">Optional&#160;Arguments:</text><text class="terminal-668054125-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-668054125-line-10)">
-</text><text class="terminal-668054125-r1" x="0" y="288.4" textLength="549" clip-path="url(#terminal-668054125-line-11)">&#160;&#160;-h,&#160;--help&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-668054125-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-668054125-line-11)">
+    <g class="terminal-1550757437-matrix">
+    <text class="terminal-1550757437-r1" x="0" y="20" textLength="500.2" clip-path="url(#terminal-1550757437-line-0)">Usage:&#160;airflowctl&#160;dagrun&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-1550757437-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1550757437-line-0)">
+</text><text class="terminal-1550757437-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1550757437-line-1)">
+</text><text class="terminal-1550757437-r1" x="0" y="68.8" textLength="305" clip-path="url(#terminal-1550757437-line-2)">Perform&#160;DagRun&#160;operations</text><text class="terminal-1550757437-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1550757437-line-2)">
+</text><text class="terminal-1550757437-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1550757437-line-3)">
+</text><text class="terminal-1550757437-r1" x="0" y="117.6" textLength="256.2" clip-path="url(#terminal-1550757437-line-4)">Positional&#160;Arguments:</text><text class="terminal-1550757437-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1550757437-line-4)">
+</text><text class="terminal-1550757437-r1" x="0" y="142" textLength="109.8" clip-path="url(#terminal-1550757437-line-5)">&#160;&#160;COMMAND</text><text class="terminal-1550757437-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1550757437-line-5)">
+</text><text class="terminal-1550757437-r1" x="0" y="166.4" textLength="463.6" clip-path="url(#terminal-1550757437-line-6)">&#160;&#160;&#160;&#160;create&#160;&#160;&#160;&#160;Perform&#160;create&#160;operation</text><text class="terminal-1550757437-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1550757437-line-6)">
+</text><text class="terminal-1550757437-r1" x="0" y="190.8" textLength="427" clip-path="url(#terminal-1550757437-line-7)">&#160;&#160;&#160;&#160;get&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get&#160;operation</text><text class="terminal-1550757437-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1550757437-line-7)">
+</text><text class="terminal-1550757437-r1" x="0" y="215.2" textLength="439.2" clip-path="url(#terminal-1550757437-line-8)">&#160;&#160;&#160;&#160;list&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list&#160;operation</text><text class="terminal-1550757437-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1550757437-line-8)">
+</text><text class="terminal-1550757437-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1550757437-line-9)">
+</text><text class="terminal-1550757437-r1" x="0" y="264" textLength="97.6" clip-path="url(#terminal-1550757437-line-10)">Options:</text><text class="terminal-1550757437-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1550757437-line-10)">
+</text><text class="terminal-1550757437-r1" x="0" y="288.4" textLength="549" clip-path="url(#terminal-1550757437-line-11)">&#160;&#160;-h,&#160;--help&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-1550757437-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1550757437-line-11)">
 </text>
     </g>
     </g>
diff --git a/airflow-ctl/docs/images/output_jobs.svg b/airflow-ctl/docs/images/output_jobs.svg
index 619d18fec1289..6d9504a90cbc4 100644
--- a/airflow-ctl/docs/images/output_jobs.svg
+++ b/airflow-ctl/docs/images/output_jobs.svg
@@ -19,75 +19,75 @@
         font-weight: 700;
     }
 
-    .terminal-2231666968-matrix {
+    .terminal-2142602472-matrix {
         font-family: Fira Code, monospace;
         font-size: 20px;
         line-height: 24.4px;
         font-variant-east-asian: full-width;
     }
 
-    .terminal-2231666968-title {
+    .terminal-2142602472-title {
         font-size: 18px;
         font-weight: bold;
         font-family: arial;
     }
 
-    .terminal-2231666968-r1 { fill: #c5c8c6 }
+    .terminal-2142602472-r1 { fill: #c5c8c6 }
     </style>
 
     <defs>
-    <clipPath id="terminal-2231666968-clip-terminal">
+    <clipPath id="terminal-2142602472-clip-terminal">
       <rect x="0" y="0" width="975.0" height="243.0" />
     </clipPath>
-    <clipPath id="terminal-2231666968-line-0">
+    <clipPath id="terminal-2142602472-line-0">
     <rect x="0" y="1.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2231666968-line-1">
+<clipPath id="terminal-2142602472-line-1">
     <rect x="0" y="25.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2231666968-line-2">
+<clipPath id="terminal-2142602472-line-2">
     <rect x="0" y="50.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2231666968-line-3">
+<clipPath id="terminal-2142602472-line-3">
     <rect x="0" y="74.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2231666968-line-4">
+<clipPath id="terminal-2142602472-line-4">
     <rect x="0" y="99.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2231666968-line-5">
+<clipPath id="terminal-2142602472-line-5">
     <rect x="0" y="123.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2231666968-line-6">
+<clipPath id="terminal-2142602472-line-6">
     <rect x="0" y="147.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2231666968-line-7">
+<clipPath id="terminal-2142602472-line-7">
     <rect x="0" y="172.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2231666968-line-8">
+<clipPath id="terminal-2142602472-line-8">
     <rect x="0" y="196.7" width="976" height="24.65"/>
             </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="292" rx="8"/><text class="terminal-2231666968-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;jobs</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="292" rx="8"/><text class="terminal-2142602472-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;jobs</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
 
-    <g transform="translate(9, 41)" clip-path="url(#terminal-2231666968-clip-terminal)">
+    <g transform="translate(9, 41)" clip-path="url(#terminal-2142602472-clip-terminal)">
 
-    <g class="terminal-2231666968-matrix">
-    <text class="terminal-2231666968-r1" x="0" y="20" textLength="475.8" clip-path="url(#terminal-2231666968-line-0)">Usage:&#160;airflowctl&#160;jobs&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-2231666968-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2231666968-line-0)">
-</text><text class="terminal-2231666968-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2231666968-line-1)">
-</text><text class="terminal-2231666968-r1" x="0" y="68.8" textLength="280.6" clip-path="url(#terminal-2231666968-line-2)">Perform&#160;Jobs&#160;operations</text><text class="terminal-2231666968-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2231666968-line-2)">
-</text><text class="terminal-2231666968-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2231666968-line-3)">
-</text><text class="terminal-2231666968-r1" x="0" y="117.6" textLength="256.2" clip-path="url(#terminal-2231666968-line-4)">Positional&#160;Arguments:</text><text class="terminal-2231666968-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2231666968-line-4)">
-</text><text class="terminal-2231666968-r1" x="0" y="142" textLength="109.8" clip-path="url(#terminal-2231666968-line-5)">&#160;&#160;COMMAND</text><text class="terminal-2231666968-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2231666968-line-5)">
-</text><text class="terminal-2231666968-r1" x="0" y="166.4" textLength="439.2" clip-path="url(#terminal-2231666968-line-6)">&#160;&#160;&#160;&#160;list&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list&#160;operation</text><text class="terminal-2231666968-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-2231666968-line-6)">
-</text><text class="terminal-2231666968-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-2231666968-line-7)">
-</text><text class="terminal-2231666968-r1" x="0" y="215.2" textLength="231.8" clip-path="url(#terminal-2231666968-line-8)">Optional&#160;Arguments:</text><text class="terminal-2231666968-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-2231666968-line-8)">
-</text><text class="terminal-2231666968-r1" x="0" y="239.6" textLength="549" clip-path="url(#terminal-2231666968-line-9)">&#160;&#160;-h,&#160;--help&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-2231666968-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-2231666968-line-9)">
+    <g class="terminal-2142602472-matrix">
+    <text class="terminal-2142602472-r1" x="0" y="20" textLength="475.8" clip-path="url(#terminal-2142602472-line-0)">Usage:&#160;airflowctl&#160;jobs&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-2142602472-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2142602472-line-0)">
+</text><text class="terminal-2142602472-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2142602472-line-1)">
+</text><text class="terminal-2142602472-r1" x="0" y="68.8" textLength="280.6" clip-path="url(#terminal-2142602472-line-2)">Perform&#160;Jobs&#160;operations</text><text class="terminal-2142602472-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2142602472-line-2)">
+</text><text class="terminal-2142602472-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2142602472-line-3)">
+</text><text class="terminal-2142602472-r1" x="0" y="117.6" textLength="256.2" clip-path="url(#terminal-2142602472-line-4)">Positional&#160;Arguments:</text><text class="terminal-2142602472-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2142602472-line-4)">
+</text><text class="terminal-2142602472-r1" x="0" y="142" textLength="109.8" clip-path="url(#terminal-2142602472-line-5)">&#160;&#160;COMMAND</text><text class="terminal-2142602472-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2142602472-line-5)">
+</text><text class="terminal-2142602472-r1" x="0" y="166.4" textLength="439.2" clip-path="url(#terminal-2142602472-line-6)">&#160;&#160;&#160;&#160;list&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list&#160;operation</text><text class="terminal-2142602472-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-2142602472-line-6)">
+</text><text class="terminal-2142602472-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-2142602472-line-7)">
+</text><text class="terminal-2142602472-r1" x="0" y="215.2" textLength="97.6" clip-path="url(#terminal-2142602472-line-8)">Options:</text><text class="terminal-2142602472-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-2142602472-line-8)">
+</text><text class="terminal-2142602472-r1" x="0" y="239.6" textLength="549" clip-path="url(#terminal-2142602472-line-9)">&#160;&#160;-h,&#160;--help&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-2142602472-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-2142602472-line-9)">
 </text>
     </g>
     </g>
diff --git a/airflow-ctl/docs/images/output_main.svg b/airflow-ctl/docs/images/output_main.svg
index ec042419aaf9a..ede79c291896c 100644
--- a/airflow-ctl/docs/images/output_main.svg
+++ b/airflow-ctl/docs/images/output_main.svg
@@ -19,135 +19,135 @@
         font-weight: 700;
     }
 
-    .terminal-2627781444-matrix {
+    .terminal-101498644-matrix {
         font-family: Fira Code, monospace;
         font-size: 20px;
         line-height: 24.4px;
         font-variant-east-asian: full-width;
     }
 
-    .terminal-2627781444-title {
+    .terminal-101498644-title {
         font-size: 18px;
         font-weight: bold;
         font-family: arial;
     }
 
-    .terminal-2627781444-r1 { fill: #c5c8c6 }
+    .terminal-101498644-r1 { fill: #c5c8c6 }
     </style>
 
     <defs>
-    <clipPath id="terminal-2627781444-clip-terminal">
+    <clipPath id="terminal-101498644-clip-terminal">
       <rect x="0" y="0" width="975.0" height="609.0" />
     </clipPath>
-    <clipPath id="terminal-2627781444-line-0">
+    <clipPath id="terminal-101498644-line-0">
     <rect x="0" y="1.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-1">
+<clipPath id="terminal-101498644-line-1">
     <rect x="0" y="25.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-2">
+<clipPath id="terminal-101498644-line-2">
     <rect x="0" y="50.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-3">
+<clipPath id="terminal-101498644-line-3">
     <rect x="0" y="74.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-4">
+<clipPath id="terminal-101498644-line-4">
     <rect x="0" y="99.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-5">
+<clipPath id="terminal-101498644-line-5">
     <rect x="0" y="123.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-6">
+<clipPath id="terminal-101498644-line-6">
     <rect x="0" y="147.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-7">
+<clipPath id="terminal-101498644-line-7">
     <rect x="0" y="172.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-8">
+<clipPath id="terminal-101498644-line-8">
     <rect x="0" y="196.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-9">
+<clipPath id="terminal-101498644-line-9">
     <rect x="0" y="221.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-10">
+<clipPath id="terminal-101498644-line-10">
     <rect x="0" y="245.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-11">
+<clipPath id="terminal-101498644-line-11">
     <rect x="0" y="269.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-12">
+<clipPath id="terminal-101498644-line-12">
     <rect x="0" y="294.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-13">
+<clipPath id="terminal-101498644-line-13">
     <rect x="0" y="318.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-14">
+<clipPath id="terminal-101498644-line-14">
     <rect x="0" y="343.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-15">
+<clipPath id="terminal-101498644-line-15">
     <rect x="0" y="367.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-16">
+<clipPath id="terminal-101498644-line-16">
     <rect x="0" y="391.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-17">
+<clipPath id="terminal-101498644-line-17">
     <rect x="0" y="416.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-18">
+<clipPath id="terminal-101498644-line-18">
     <rect x="0" y="440.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-19">
+<clipPath id="terminal-101498644-line-19">
     <rect x="0" y="465.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-20">
+<clipPath id="terminal-101498644-line-20">
     <rect x="0" y="489.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-21">
+<clipPath id="terminal-101498644-line-21">
     <rect x="0" y="513.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-22">
+<clipPath id="terminal-101498644-line-22">
     <rect x="0" y="538.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2627781444-line-23">
+<clipPath id="terminal-101498644-line-23">
     <rect x="0" y="562.7" width="976" height="24.65"/>
             </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="658" rx="8"/><text class="terminal-2627781444-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;main</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="658" rx="8"/><text class="terminal-101498644-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;main</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
 
-    <g transform="translate(9, 41)" clip-path="url(#terminal-2627781444-clip-terminal)">
+    <g transform="translate(9, 41)" clip-path="url(#terminal-101498644-clip-terminal)">
 
-    <g class="terminal-2627781444-matrix">
-    <text class="terminal-2627781444-r1" x="0" y="20" textLength="524.6" clip-path="url(#terminal-2627781444-line-0)">Usage:&#160;airflowctl&#160;[-h]&#160;GROUP_OR_COMMAND&#160;...</text><text class="terminal-2627781444-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2627781444-line-0)">
-</text><text class="terminal-2627781444-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2627781444-line-1)">
-</text><text class="terminal-2627781444-r1" x="0" y="68.8" textLength="256.2" clip-path="url(#terminal-2627781444-line-2)">Positional&#160;Arguments:</text><text class="terminal-2627781444-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2627781444-line-2)">
-</text><text class="terminal-2627781444-r1" x="0" y="93.2" textLength="219.6" clip-path="url(#terminal-2627781444-line-3)">&#160;&#160;GROUP_OR_COMMAND</text><text class="terminal-2627781444-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2627781444-line-3)">
-</text><text class="terminal-2627781444-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2627781444-line-4)">
-</text><text class="terminal-2627781444-r1" x="0" y="142" textLength="122" clip-path="url(#terminal-2627781444-line-5)">&#160;&#160;&#160;&#160;Groups</text><text class="terminal-2627781444-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2627781444-line-5)">
-</text><text class="terminal-2627781444-r1" x="0" y="166.4" textLength="549" clip-path="url(#terminal-2627781444-line-6)">&#160;&#160;&#160;&#160;&#160;&#160;assets&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;Assets&#160;operations</text><text class="terminal-2627781444-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-2627781444-line-6)">
-</text><text class="terminal-2627781444-r1" x="0" y="190.8" textLength="890.6" clip-path="url(#terminal-2627781444-line-7)">&#160;&#160;&#160;&#160;&#160;&#160;auth&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Manage&#160;authentication&#160;for&#160;CLI.&#160;Either&#160;pass&#160;token&#160;from</text><text class="terminal-2627781444-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-2627781444-line-7)">
-</text><text class="terminal-2627781444-r1" x="0" y="215.2" textLength="866.2" clip-path="url(#terminal-2627781444-line-8)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;environment&#160;variable/parameter&#160;or&#160;pass&#160;username&#160;and</text><text class="terminal-2627781444-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-2627781444-line-8)">
-</text><text class="terminal-2627781444-r1" x="0" y="239.6" textLength="353.8" clip-path="url(#terminal-2627781444-line-9)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;password.</text><text class="terminal-2627781444-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-2627781444-line-9)">
-</text><text class="terminal-2627781444-r1" x="0" y="264" textLength="585.6" clip-path="url(#terminal-2627781444-line-10)">&#160;&#160;&#160;&#160;&#160;&#160;backfills&#160;&#160;&#160;&#160;&#160;Perform&#160;Backfills&#160;operations</text><text class="terminal-2627781444-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-2627781444-line-10)">
-</text><text class="terminal-2627781444-r1" x="0" y="288.4" textLength="549" clip-path="url(#terminal-2627781444-line-11)">&#160;&#160;&#160;&#160;&#160;&#160;config&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;Config&#160;operations</text><text class="terminal-2627781444-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-2627781444-line-11)">
-</text><text class="terminal-2627781444-r1" x="0" y="312.8" textLength="610" clip-path="url(#terminal-2627781444-line-12)">&#160;&#160;&#160;&#160;&#160;&#160;connections&#160;&#160;&#160;Perform&#160;Connections&#160;operations</text><text class="terminal-2627781444-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-2627781444-line-12)">
-</text><text class="terminal-2627781444-r1" x="0" y="337.2" textLength="512.4" clip-path="url(#terminal-2627781444-line-13)">&#160;&#160;&#160;&#160;&#160;&#160;dag&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;Dag&#160;operations</text><text class="terminal-2627781444-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-2627781444-line-13)">
-</text><text class="terminal-2627781444-r1" x="0" y="361.6" textLength="549" clip-path="url(#terminal-2627781444-line-14)">&#160;&#160;&#160;&#160;&#160;&#160;dagrun&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;DagRun&#160;operations</text><text class="terminal-2627781444-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-2627781444-line-14)">
-</text><text class="terminal-2627781444-r1" x="0" y="386" textLength="524.6" clip-path="url(#terminal-2627781444-line-15)">&#160;&#160;&#160;&#160;&#160;&#160;jobs&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;Jobs&#160;operations</text><text class="terminal-2627781444-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-2627781444-line-15)">
-</text><text class="terminal-2627781444-r1" x="0" y="410.4" textLength="536.8" clip-path="url(#terminal-2627781444-line-16)">&#160;&#160;&#160;&#160;&#160;&#160;pools&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;Pools&#160;operations</text><text class="terminal-2627781444-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-2627781444-line-16)">
-</text><text class="terminal-2627781444-r1" x="0" y="434.8" textLength="585.6" clip-path="url(#terminal-2627781444-line-17)">&#160;&#160;&#160;&#160;&#160;&#160;providers&#160;&#160;&#160;&#160;&#160;Perform&#160;Providers&#160;operations</text><text class="terminal-2627781444-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-2627781444-line-17)">
-</text><text class="terminal-2627781444-r1" x="0" y="459.2" textLength="585.6" clip-path="url(#terminal-2627781444-line-18)">&#160;&#160;&#160;&#160;&#160;&#160;variables&#160;&#160;&#160;&#160;&#160;Perform&#160;Variables&#160;operations</text><text class="terminal-2627781444-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-2627781444-line-18)">
-</text><text class="terminal-2627781444-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-2627781444-line-19)">
-</text><text class="terminal-2627781444-r1" x="0" y="508" textLength="158.6" clip-path="url(#terminal-2627781444-line-20)">&#160;&#160;&#160;&#160;Commands:</text><text class="terminal-2627781444-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-2627781444-line-20)">
-</text><text class="terminal-2627781444-r1" x="0" y="532.4" textLength="536.8" clip-path="url(#terminal-2627781444-line-21)">&#160;&#160;&#160;&#160;&#160;&#160;version&#160;&#160;&#160;&#160;&#160;&#160;&#160;Show&#160;version&#160;information</text><text class="terminal-2627781444-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-2627781444-line-21)">
-</text><text class="terminal-2627781444-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-2627781444-line-22)">
-</text><text class="terminal-2627781444-r1" x="0" y="581.2" textLength="231.8" clip-path="url(#terminal-2627781444-line-23)">Optional&#160;Arguments:</text><text class="terminal-2627781444-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-2627781444-line-23)">
-</text><text class="terminal-2627781444-r1" x="0" y="605.6" textLength="622.2" clip-path="url(#terminal-2627781444-line-24)">&#160;&#160;-h,&#160;--help&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-2627781444-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-2627781444-line-24)">
+    <g class="terminal-101498644-matrix">
+    <text class="terminal-101498644-r1" x="0" y="20" textLength="524.6" clip-path="url(#terminal-101498644-line-0)">Usage:&#160;airflowctl&#160;[-h]&#160;GROUP_OR_COMMAND&#160;...</text><text class="terminal-101498644-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-101498644-line-0)">
+</text><text class="terminal-101498644-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-101498644-line-1)">
+</text><text class="terminal-101498644-r1" x="0" y="68.8" textLength="256.2" clip-path="url(#terminal-101498644-line-2)">Positional&#160;Arguments:</text><text class="terminal-101498644-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-101498644-line-2)">
+</text><text class="terminal-101498644-r1" x="0" y="93.2" textLength="219.6" clip-path="url(#terminal-101498644-line-3)">&#160;&#160;GROUP_OR_COMMAND</text><text class="terminal-101498644-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-101498644-line-3)">
+</text><text class="terminal-101498644-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-101498644-line-4)">
+</text><text class="terminal-101498644-r1" x="0" y="142" textLength="122" clip-path="url(#terminal-101498644-line-5)">&#160;&#160;&#160;&#160;Groups</text><text class="terminal-101498644-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-101498644-line-5)">
+</text><text class="terminal-101498644-r1" x="0" y="166.4" textLength="549" clip-path="url(#terminal-101498644-line-6)">&#160;&#160;&#160;&#160;&#160;&#160;assets&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;Assets&#160;operations</text><text class="terminal-101498644-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-101498644-line-6)">
+</text><text class="terminal-101498644-r1" x="0" y="190.8" textLength="890.6" clip-path="url(#terminal-101498644-line-7)">&#160;&#160;&#160;&#160;&#160;&#160;auth&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Manage&#160;authentication&#160;for&#160;CLI.&#160;Either&#160;pass&#160;token&#160;from</text><text class="terminal-101498644-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-101498644-line-7)">
+</text><text class="terminal-101498644-r1" x="0" y="215.2" textLength="866.2" clip-path="url(#terminal-101498644-line-8)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;environment&#160;variable/parameter&#160;or&#160;pass&#160;username&#160;and</text><text class="terminal-101498644-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-101498644-line-8)">
+</text><text class="terminal-101498644-r1" x="0" y="239.6" textLength="353.8" clip-path="url(#terminal-101498644-line-9)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;password.</text><text class="terminal-101498644-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-101498644-line-9)">
+</text><text class="terminal-101498644-r1" x="0" y="264" textLength="585.6" clip-path="url(#terminal-101498644-line-10)">&#160;&#160;&#160;&#160;&#160;&#160;backfills&#160;&#160;&#160;&#160;&#160;Perform&#160;Backfills&#160;operations</text><text class="terminal-101498644-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-101498644-line-10)">
+</text><text class="terminal-101498644-r1" x="0" y="288.4" textLength="549" clip-path="url(#terminal-101498644-line-11)">&#160;&#160;&#160;&#160;&#160;&#160;config&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;Config&#160;operations</text><text class="terminal-101498644-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-101498644-line-11)">
+</text><text class="terminal-101498644-r1" x="0" y="312.8" textLength="610" clip-path="url(#terminal-101498644-line-12)">&#160;&#160;&#160;&#160;&#160;&#160;connections&#160;&#160;&#160;Perform&#160;Connections&#160;operations</text><text class="terminal-101498644-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-101498644-line-12)">
+</text><text class="terminal-101498644-r1" x="0" y="337.2" textLength="512.4" clip-path="url(#terminal-101498644-line-13)">&#160;&#160;&#160;&#160;&#160;&#160;dag&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;Dag&#160;operations</text><text class="terminal-101498644-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-101498644-line-13)">
+</text><text class="terminal-101498644-r1" x="0" y="361.6" textLength="549" clip-path="url(#terminal-101498644-line-14)">&#160;&#160;&#160;&#160;&#160;&#160;dagrun&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;DagRun&#160;operations</text><text class="terminal-101498644-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-101498644-line-14)">
+</text><text class="terminal-101498644-r1" x="0" y="386" textLength="524.6" clip-path="url(#terminal-101498644-line-15)">&#160;&#160;&#160;&#160;&#160;&#160;jobs&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;Jobs&#160;operations</text><text class="terminal-101498644-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-101498644-line-15)">
+</text><text class="terminal-101498644-r1" x="0" y="410.4" textLength="536.8" clip-path="url(#terminal-101498644-line-16)">&#160;&#160;&#160;&#160;&#160;&#160;pools&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;Pools&#160;operations</text><text class="terminal-101498644-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-101498644-line-16)">
+</text><text class="terminal-101498644-r1" x="0" y="434.8" textLength="585.6" clip-path="url(#terminal-101498644-line-17)">&#160;&#160;&#160;&#160;&#160;&#160;providers&#160;&#160;&#160;&#160;&#160;Perform&#160;Providers&#160;operations</text><text class="terminal-101498644-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-101498644-line-17)">
+</text><text class="terminal-101498644-r1" x="0" y="459.2" textLength="585.6" clip-path="url(#terminal-101498644-line-18)">&#160;&#160;&#160;&#160;&#160;&#160;variables&#160;&#160;&#160;&#160;&#160;Perform&#160;Variables&#160;operations</text><text class="terminal-101498644-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-101498644-line-18)">
+</text><text class="terminal-101498644-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-101498644-line-19)">
+</text><text class="terminal-101498644-r1" x="0" y="508" textLength="158.6" clip-path="url(#terminal-101498644-line-20)">&#160;&#160;&#160;&#160;Commands:</text><text class="terminal-101498644-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-101498644-line-20)">
+</text><text class="terminal-101498644-r1" x="0" y="532.4" textLength="536.8" clip-path="url(#terminal-101498644-line-21)">&#160;&#160;&#160;&#160;&#160;&#160;version&#160;&#160;&#160;&#160;&#160;&#160;&#160;Show&#160;version&#160;information</text><text class="terminal-101498644-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-101498644-line-21)">
+</text><text class="terminal-101498644-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-101498644-line-22)">
+</text><text class="terminal-101498644-r1" x="0" y="581.2" textLength="97.6" clip-path="url(#terminal-101498644-line-23)">Options:</text><text class="terminal-101498644-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-101498644-line-23)">
+</text><text class="terminal-101498644-r1" x="0" y="605.6" textLength="622.2" clip-path="url(#terminal-101498644-line-24)">&#160;&#160;-h,&#160;--help&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-101498644-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-101498644-line-24)">
 </text>
     </g>
     </g>
diff --git a/airflow-ctl/docs/images/output_pools.svg b/airflow-ctl/docs/images/output_pools.svg
index 7a5405f2b4e6c..0772aef116f5c 100644
--- a/airflow-ctl/docs/images/output_pools.svg
+++ b/airflow-ctl/docs/images/output_pools.svg
@@ -19,99 +19,99 @@
         font-weight: 700;
     }
 
-    .terminal-3461610554-matrix {
+    .terminal-3616077834-matrix {
         font-family: Fira Code, monospace;
         font-size: 20px;
         line-height: 24.4px;
         font-variant-east-asian: full-width;
     }
 
-    .terminal-3461610554-title {
+    .terminal-3616077834-title {
         font-size: 18px;
         font-weight: bold;
         font-family: arial;
     }
 
-    .terminal-3461610554-r1 { fill: #c5c8c6 }
+    .terminal-3616077834-r1 { fill: #c5c8c6 }
     </style>
 
     <defs>
-    <clipPath id="terminal-3461610554-clip-terminal">
+    <clipPath id="terminal-3616077834-clip-terminal">
       <rect x="0" y="0" width="975.0" height="389.4" />
     </clipPath>
-    <clipPath id="terminal-3461610554-line-0">
+    <clipPath id="terminal-3616077834-line-0">
     <rect x="0" y="1.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3461610554-line-1">
+<clipPath id="terminal-3616077834-line-1">
     <rect x="0" y="25.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3461610554-line-2">
+<clipPath id="terminal-3616077834-line-2">
     <rect x="0" y="50.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3461610554-line-3">
+<clipPath id="terminal-3616077834-line-3">
     <rect x="0" y="74.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3461610554-line-4">
+<clipPath id="terminal-3616077834-line-4">
     <rect x="0" y="99.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3461610554-line-5">
+<clipPath id="terminal-3616077834-line-5">
     <rect x="0" y="123.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3461610554-line-6">
+<clipPath id="terminal-3616077834-line-6">
     <rect x="0" y="147.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3461610554-line-7">
+<clipPath id="terminal-3616077834-line-7">
     <rect x="0" y="172.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3461610554-line-8">
+<clipPath id="terminal-3616077834-line-8">
     <rect x="0" y="196.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3461610554-line-9">
+<clipPath id="terminal-3616077834-line-9">
     <rect x="0" y="221.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3461610554-line-10">
+<clipPath id="terminal-3616077834-line-10">
     <rect x="0" y="245.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3461610554-line-11">
+<clipPath id="terminal-3616077834-line-11">
     <rect x="0" y="269.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3461610554-line-12">
+<clipPath id="terminal-3616077834-line-12">
     <rect x="0" y="294.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3461610554-line-13">
+<clipPath id="terminal-3616077834-line-13">
     <rect x="0" y="318.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-3461610554-line-14">
+<clipPath id="terminal-3616077834-line-14">
     <rect x="0" y="343.1" width="976" height="24.65"/>
             </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="438.4" rx="8"/><text class="terminal-3461610554-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;pools</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="438.4" rx="8"/><text class="terminal-3616077834-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;pools</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
 
-    <g transform="translate(9, 41)" clip-path="url(#terminal-3461610554-clip-terminal)">
+    <g transform="translate(9, 41)" clip-path="url(#terminal-3616077834-clip-terminal)">
 
-    <g class="terminal-3461610554-matrix">
-    <text class="terminal-3461610554-r1" x="0" y="20" textLength="488" clip-path="url(#terminal-3461610554-line-0)">Usage:&#160;airflowctl&#160;pools&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-3461610554-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3461610554-line-0)">
-</text><text class="terminal-3461610554-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3461610554-line-1)">
-</text><text class="terminal-3461610554-r1" x="0" y="68.8" textLength="292.8" clip-path="url(#terminal-3461610554-line-2)">Perform&#160;Pools&#160;operations</text><text class="terminal-3461610554-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-3461610554-line-2)">
-</text><text class="terminal-3461610554-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-3461610554-line-3)">
-</text><text class="terminal-3461610554-r1" x="0" y="117.6" textLength="256.2" clip-path="url(#terminal-3461610554-line-4)">Positional&#160;Arguments:</text><text class="terminal-3461610554-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-3461610554-line-4)">
-</text><text class="terminal-3461610554-r1" x="0" y="142" textLength="109.8" clip-path="url(#terminal-3461610554-line-5)">&#160;&#160;COMMAND</text><text class="terminal-3461610554-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-3461610554-line-5)">
-</text><text class="terminal-3461610554-r1" x="0" y="166.4" textLength="463.6" clip-path="url(#terminal-3461610554-line-6)">&#160;&#160;&#160;&#160;create&#160;&#160;&#160;&#160;Perform&#160;create&#160;operation</text><text class="terminal-3461610554-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-3461610554-line-6)">
-</text><text class="terminal-3461610554-r1" x="0" y="190.8" textLength="463.6" clip-path="url(#terminal-3461610554-line-7)">&#160;&#160;&#160;&#160;delete&#160;&#160;&#160;&#160;Perform&#160;delete&#160;operation</text><text class="terminal-3461610554-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-3461610554-line-7)">
-</text><text class="terminal-3461610554-r1" x="0" y="215.2" textLength="366" clip-path="url(#terminal-3461610554-line-8)">&#160;&#160;&#160;&#160;export&#160;&#160;&#160;&#160;Export&#160;all&#160;pools</text><text class="terminal-3461610554-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-3461610554-line-8)">
-</text><text class="terminal-3461610554-r1" x="0" y="239.6" textLength="427" clip-path="url(#terminal-3461610554-line-9)">&#160;&#160;&#160;&#160;get&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get&#160;operation</text><text class="terminal-3461610554-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-3461610554-line-9)">
-</text><text class="terminal-3461610554-r1" x="0" y="264" textLength="317.2" clip-path="url(#terminal-3461610554-line-10)">&#160;&#160;&#160;&#160;import&#160;&#160;&#160;&#160;Import&#160;pools</text><text class="terminal-3461610554-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-3461610554-line-10)">
-</text><text class="terminal-3461610554-r1" x="0" y="288.4" textLength="439.2" clip-path="url(#terminal-3461610554-line-11)">&#160;&#160;&#160;&#160;list&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list&#160;operation</text><text class="terminal-3461610554-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-3461610554-line-11)">
-</text><text class="terminal-3461610554-r1" x="0" y="312.8" textLength="463.6" clip-path="url(#terminal-3461610554-line-12)">&#160;&#160;&#160;&#160;update&#160;&#160;&#160;&#160;Perform&#160;update&#160;operation</text><text class="terminal-3461610554-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-3461610554-line-12)">
-</text><text class="terminal-3461610554-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-3461610554-line-13)">
-</text><text class="terminal-3461610554-r1" x="0" y="361.6" textLength="231.8" clip-path="url(#terminal-3461610554-line-14)">Optional&#160;Arguments:</text><text class="terminal-3461610554-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-3461610554-line-14)">
-</text><text class="terminal-3461610554-r1" x="0" y="386" textLength="549" clip-path="url(#terminal-3461610554-line-15)">&#160;&#160;-h,&#160;--help&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-3461610554-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-3461610554-line-15)">
+    <g class="terminal-3616077834-matrix">
+    <text class="terminal-3616077834-r1" x="0" y="20" textLength="488" clip-path="url(#terminal-3616077834-line-0)">Usage:&#160;airflowctl&#160;pools&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-3616077834-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3616077834-line-0)">
+</text><text class="terminal-3616077834-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3616077834-line-1)">
+</text><text class="terminal-3616077834-r1" x="0" y="68.8" textLength="292.8" clip-path="url(#terminal-3616077834-line-2)">Perform&#160;Pools&#160;operations</text><text class="terminal-3616077834-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-3616077834-line-2)">
+</text><text class="terminal-3616077834-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-3616077834-line-3)">
+</text><text class="terminal-3616077834-r1" x="0" y="117.6" textLength="256.2" clip-path="url(#terminal-3616077834-line-4)">Positional&#160;Arguments:</text><text class="terminal-3616077834-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-3616077834-line-4)">
+</text><text class="terminal-3616077834-r1" x="0" y="142" textLength="109.8" clip-path="url(#terminal-3616077834-line-5)">&#160;&#160;COMMAND</text><text class="terminal-3616077834-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-3616077834-line-5)">
+</text><text class="terminal-3616077834-r1" x="0" y="166.4" textLength="463.6" clip-path="url(#terminal-3616077834-line-6)">&#160;&#160;&#160;&#160;create&#160;&#160;&#160;&#160;Perform&#160;create&#160;operation</text><text class="terminal-3616077834-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-3616077834-line-6)">
+</text><text class="terminal-3616077834-r1" x="0" y="190.8" textLength="463.6" clip-path="url(#terminal-3616077834-line-7)">&#160;&#160;&#160;&#160;delete&#160;&#160;&#160;&#160;Perform&#160;delete&#160;operation</text><text class="terminal-3616077834-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-3616077834-line-7)">
+</text><text class="terminal-3616077834-r1" x="0" y="215.2" textLength="366" clip-path="url(#terminal-3616077834-line-8)">&#160;&#160;&#160;&#160;export&#160;&#160;&#160;&#160;Export&#160;all&#160;pools</text><text class="terminal-3616077834-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-3616077834-line-8)">
+</text><text class="terminal-3616077834-r1" x="0" y="239.6" textLength="427" clip-path="url(#terminal-3616077834-line-9)">&#160;&#160;&#160;&#160;get&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get&#160;operation</text><text class="terminal-3616077834-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-3616077834-line-9)">
+</text><text class="terminal-3616077834-r1" x="0" y="264" textLength="317.2" clip-path="url(#terminal-3616077834-line-10)">&#160;&#160;&#160;&#160;import&#160;&#160;&#160;&#160;Import&#160;pools</text><text class="terminal-3616077834-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-3616077834-line-10)">
+</text><text class="terminal-3616077834-r1" x="0" y="288.4" textLength="439.2" clip-path="url(#terminal-3616077834-line-11)">&#160;&#160;&#160;&#160;list&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list&#160;operation</text><text class="terminal-3616077834-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-3616077834-line-11)">
+</text><text class="terminal-3616077834-r1" x="0" y="312.8" textLength="463.6" clip-path="url(#terminal-3616077834-line-12)">&#160;&#160;&#160;&#160;update&#160;&#160;&#160;&#160;Perform&#160;update&#160;operation</text><text class="terminal-3616077834-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-3616077834-line-12)">
+</text><text class="terminal-3616077834-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-3616077834-line-13)">
+</text><text class="terminal-3616077834-r1" x="0" y="361.6" textLength="97.6" clip-path="url(#terminal-3616077834-line-14)">Options:</text><text class="terminal-3616077834-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-3616077834-line-14)">
+</text><text class="terminal-3616077834-r1" x="0" y="386" textLength="549" clip-path="url(#terminal-3616077834-line-15)">&#160;&#160;-h,&#160;--help&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-3616077834-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-3616077834-line-15)">
 </text>
     </g>
     </g>
diff --git a/airflow-ctl/docs/images/output_providers.svg b/airflow-ctl/docs/images/output_providers.svg
index 6771a1cb0b656..a64c52f809250 100644
--- a/airflow-ctl/docs/images/output_providers.svg
+++ b/airflow-ctl/docs/images/output_providers.svg
@@ -19,75 +19,75 @@
         font-weight: 700;
     }
 
-    .terminal-888115112-matrix {
+    .terminal-3934358392-matrix {
         font-family: Fira Code, monospace;
         font-size: 20px;
         line-height: 24.4px;
         font-variant-east-asian: full-width;
     }
 
-    .terminal-888115112-title {
+    .terminal-3934358392-title {
         font-size: 18px;
         font-weight: bold;
         font-family: arial;
     }
 
-    .terminal-888115112-r1 { fill: #c5c8c6 }
+    .terminal-3934358392-r1 { fill: #c5c8c6 }
     </style>
 
     <defs>
-    <clipPath id="terminal-888115112-clip-terminal">
+    <clipPath id="terminal-3934358392-clip-terminal">
       <rect x="0" y="0" width="975.0" height="243.0" />
     </clipPath>
-    <clipPath id="terminal-888115112-line-0">
+    <clipPath id="terminal-3934358392-line-0">
     <rect x="0" y="1.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-888115112-line-1">
+<clipPath id="terminal-3934358392-line-1">
     <rect x="0" y="25.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-888115112-line-2">
+<clipPath id="terminal-3934358392-line-2">
     <rect x="0" y="50.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-888115112-line-3">
+<clipPath id="terminal-3934358392-line-3">
     <rect x="0" y="74.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-888115112-line-4">
+<clipPath id="terminal-3934358392-line-4">
     <rect x="0" y="99.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-888115112-line-5">
+<clipPath id="terminal-3934358392-line-5">
     <rect x="0" y="123.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-888115112-line-6">
+<clipPath id="terminal-3934358392-line-6">
     <rect x="0" y="147.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-888115112-line-7">
+<clipPath id="terminal-3934358392-line-7">
     <rect x="0" y="172.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-888115112-line-8">
+<clipPath id="terminal-3934358392-line-8">
     <rect x="0" y="196.7" width="976" height="24.65"/>
             </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="292" rx="8"/><text class="terminal-888115112-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;providers</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="292" rx="8"/><text class="terminal-3934358392-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;providers</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
 
-    <g transform="translate(9, 41)" clip-path="url(#terminal-888115112-clip-terminal)">
+    <g transform="translate(9, 41)" clip-path="url(#terminal-3934358392-clip-terminal)">
 
-    <g class="terminal-888115112-matrix">
-    <text class="terminal-888115112-r1" x="0" y="20" textLength="536.8" clip-path="url(#terminal-888115112-line-0)">Usage:&#160;airflowctl&#160;providers&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-888115112-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-888115112-line-0)">
-</text><text class="terminal-888115112-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-888115112-line-1)">
-</text><text class="terminal-888115112-r1" x="0" y="68.8" textLength="341.6" clip-path="url(#terminal-888115112-line-2)">Perform&#160;Providers&#160;operations</text><text class="terminal-888115112-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-888115112-line-2)">
-</text><text class="terminal-888115112-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-888115112-line-3)">
-</text><text class="terminal-888115112-r1" x="0" y="117.6" textLength="256.2" clip-path="url(#terminal-888115112-line-4)">Positional&#160;Arguments:</text><text class="terminal-888115112-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-888115112-line-4)">
-</text><text class="terminal-888115112-r1" x="0" y="142" textLength="109.8" clip-path="url(#terminal-888115112-line-5)">&#160;&#160;COMMAND</text><text class="terminal-888115112-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-888115112-line-5)">
-</text><text class="terminal-888115112-r1" x="0" y="166.4" textLength="439.2" clip-path="url(#terminal-888115112-line-6)">&#160;&#160;&#160;&#160;list&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list&#160;operation</text><text class="terminal-888115112-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-888115112-line-6)">
-</text><text class="terminal-888115112-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-888115112-line-7)">
-</text><text class="terminal-888115112-r1" x="0" y="215.2" textLength="231.8" clip-path="url(#terminal-888115112-line-8)">Optional&#160;Arguments:</text><text class="terminal-888115112-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-888115112-line-8)">
-</text><text class="terminal-888115112-r1" x="0" y="239.6" textLength="549" clip-path="url(#terminal-888115112-line-9)">&#160;&#160;-h,&#160;--help&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-888115112-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-888115112-line-9)">
+    <g class="terminal-3934358392-matrix">
+    <text class="terminal-3934358392-r1" x="0" y="20" textLength="536.8" clip-path="url(#terminal-3934358392-line-0)">Usage:&#160;airflowctl&#160;providers&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-3934358392-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3934358392-line-0)">
+</text><text class="terminal-3934358392-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3934358392-line-1)">
+</text><text class="terminal-3934358392-r1" x="0" y="68.8" textLength="341.6" clip-path="url(#terminal-3934358392-line-2)">Perform&#160;Providers&#160;operations</text><text class="terminal-3934358392-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-3934358392-line-2)">
+</text><text class="terminal-3934358392-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-3934358392-line-3)">
+</text><text class="terminal-3934358392-r1" x="0" y="117.6" textLength="256.2" clip-path="url(#terminal-3934358392-line-4)">Positional&#160;Arguments:</text><text class="terminal-3934358392-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-3934358392-line-4)">
+</text><text class="terminal-3934358392-r1" x="0" y="142" textLength="109.8" clip-path="url(#terminal-3934358392-line-5)">&#160;&#160;COMMAND</text><text class="terminal-3934358392-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-3934358392-line-5)">
+</text><text class="terminal-3934358392-r1" x="0" y="166.4" textLength="439.2" clip-path="url(#terminal-3934358392-line-6)">&#160;&#160;&#160;&#160;list&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list&#160;operation</text><text class="terminal-3934358392-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-3934358392-line-6)">
+</text><text class="terminal-3934358392-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-3934358392-line-7)">
+</text><text class="terminal-3934358392-r1" x="0" y="215.2" textLength="97.6" clip-path="url(#terminal-3934358392-line-8)">Options:</text><text class="terminal-3934358392-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-3934358392-line-8)">
+</text><text class="terminal-3934358392-r1" x="0" y="239.6" textLength="549" clip-path="url(#terminal-3934358392-line-9)">&#160;&#160;-h,&#160;--help&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-3934358392-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-3934358392-line-9)">
 </text>
     </g>
     </g>
diff --git a/airflow-ctl/docs/images/output_variables.svg b/airflow-ctl/docs/images/output_variables.svg
index 4baba40504240..864e7d63630e5 100644
--- a/airflow-ctl/docs/images/output_variables.svg
+++ b/airflow-ctl/docs/images/output_variables.svg
@@ -19,99 +19,99 @@
         font-weight: 700;
     }
 
-    .terminal-2916680709-matrix {
+    .terminal-1648295878-matrix {
         font-family: Fira Code, monospace;
         font-size: 20px;
         line-height: 24.4px;
         font-variant-east-asian: full-width;
     }
 
-    .terminal-2916680709-title {
+    .terminal-1648295878-title {
         font-size: 18px;
         font-weight: bold;
         font-family: arial;
     }
 
-    .terminal-2916680709-r1 { fill: #c5c8c6 }
+    .terminal-1648295878-r1 { fill: #c5c8c6 }
     </style>
 
     <defs>
-    <clipPath id="terminal-2916680709-clip-terminal">
+    <clipPath id="terminal-1648295878-clip-terminal">
       <rect x="0" y="0" width="975.0" height="389.4" />
     </clipPath>
-    <clipPath id="terminal-2916680709-line-0">
+    <clipPath id="terminal-1648295878-line-0">
     <rect x="0" y="1.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2916680709-line-1">
+<clipPath id="terminal-1648295878-line-1">
     <rect x="0" y="25.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2916680709-line-2">
+<clipPath id="terminal-1648295878-line-2">
     <rect x="0" y="50.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2916680709-line-3">
+<clipPath id="terminal-1648295878-line-3">
     <rect x="0" y="74.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2916680709-line-4">
+<clipPath id="terminal-1648295878-line-4">
     <rect x="0" y="99.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2916680709-line-5">
+<clipPath id="terminal-1648295878-line-5">
     <rect x="0" y="123.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2916680709-line-6">
+<clipPath id="terminal-1648295878-line-6">
     <rect x="0" y="147.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2916680709-line-7">
+<clipPath id="terminal-1648295878-line-7">
     <rect x="0" y="172.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2916680709-line-8">
+<clipPath id="terminal-1648295878-line-8">
     <rect x="0" y="196.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2916680709-line-9">
+<clipPath id="terminal-1648295878-line-9">
     <rect x="0" y="221.1" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2916680709-line-10">
+<clipPath id="terminal-1648295878-line-10">
     <rect x="0" y="245.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2916680709-line-11">
+<clipPath id="terminal-1648295878-line-11">
     <rect x="0" y="269.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2916680709-line-12">
+<clipPath id="terminal-1648295878-line-12">
     <rect x="0" y="294.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2916680709-line-13">
+<clipPath id="terminal-1648295878-line-13">
     <rect x="0" y="318.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2916680709-line-14">
+<clipPath id="terminal-1648295878-line-14">
     <rect x="0" y="343.1" width="976" height="24.65"/>
             </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="438.4" rx="8"/><text class="terminal-2916680709-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;variables</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="438.4" rx="8"/><text class="terminal-1648295878-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;variables</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
 
-    <g transform="translate(9, 41)" clip-path="url(#terminal-2916680709-clip-terminal)">
+    <g transform="translate(9, 41)" clip-path="url(#terminal-1648295878-clip-terminal)">
 
-    <g class="terminal-2916680709-matrix">
-    <text class="terminal-2916680709-r1" x="0" y="20" textLength="536.8" clip-path="url(#terminal-2916680709-line-0)">Usage:&#160;airflowctl&#160;variables&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-2916680709-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2916680709-line-0)">
-</text><text class="terminal-2916680709-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2916680709-line-1)">
-</text><text class="terminal-2916680709-r1" x="0" y="68.8" textLength="341.6" clip-path="url(#terminal-2916680709-line-2)">Perform&#160;Variables&#160;operations</text><text class="terminal-2916680709-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2916680709-line-2)">
-</text><text class="terminal-2916680709-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2916680709-line-3)">
-</text><text class="terminal-2916680709-r1" x="0" y="117.6" textLength="256.2" clip-path="url(#terminal-2916680709-line-4)">Positional&#160;Arguments:</text><text class="terminal-2916680709-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2916680709-line-4)">
-</text><text class="terminal-2916680709-r1" x="0" y="142" textLength="109.8" clip-path="url(#terminal-2916680709-line-5)">&#160;&#160;COMMAND</text><text class="terminal-2916680709-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2916680709-line-5)">
-</text><text class="terminal-2916680709-r1" x="0" y="166.4" textLength="463.6" clip-path="url(#terminal-2916680709-line-6)">&#160;&#160;&#160;&#160;create&#160;&#160;&#160;&#160;Perform&#160;create&#160;operation</text><text class="terminal-2916680709-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-2916680709-line-6)">
-</text><text class="terminal-2916680709-r1" x="0" y="190.8" textLength="463.6" clip-path="url(#terminal-2916680709-line-7)">&#160;&#160;&#160;&#160;delete&#160;&#160;&#160;&#160;Perform&#160;delete&#160;operation</text><text class="terminal-2916680709-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-2916680709-line-7)">
-</text><text class="terminal-2916680709-r1" x="0" y="215.2" textLength="414.8" clip-path="url(#terminal-2916680709-line-8)">&#160;&#160;&#160;&#160;export&#160;&#160;&#160;&#160;Export&#160;all&#160;variables</text><text class="terminal-2916680709-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-2916680709-line-8)">
-</text><text class="terminal-2916680709-r1" x="0" y="239.6" textLength="427" clip-path="url(#terminal-2916680709-line-9)">&#160;&#160;&#160;&#160;get&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get&#160;operation</text><text class="terminal-2916680709-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-2916680709-line-9)">
-</text><text class="terminal-2916680709-r1" x="0" y="264" textLength="366" clip-path="url(#terminal-2916680709-line-10)">&#160;&#160;&#160;&#160;import&#160;&#160;&#160;&#160;Import&#160;variables</text><text class="terminal-2916680709-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-2916680709-line-10)">
-</text><text class="terminal-2916680709-r1" x="0" y="288.4" textLength="439.2" clip-path="url(#terminal-2916680709-line-11)">&#160;&#160;&#160;&#160;list&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list&#160;operation</text><text class="terminal-2916680709-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-2916680709-line-11)">
-</text><text class="terminal-2916680709-r1" x="0" y="312.8" textLength="463.6" clip-path="url(#terminal-2916680709-line-12)">&#160;&#160;&#160;&#160;update&#160;&#160;&#160;&#160;Perform&#160;update&#160;operation</text><text class="terminal-2916680709-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-2916680709-line-12)">
-</text><text class="terminal-2916680709-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-2916680709-line-13)">
-</text><text class="terminal-2916680709-r1" x="0" y="361.6" textLength="231.8" clip-path="url(#terminal-2916680709-line-14)">Optional&#160;Arguments:</text><text class="terminal-2916680709-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-2916680709-line-14)">
-</text><text class="terminal-2916680709-r1" x="0" y="386" textLength="549" clip-path="url(#terminal-2916680709-line-15)">&#160;&#160;-h,&#160;--help&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-2916680709-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-2916680709-line-15)">
+    <g class="terminal-1648295878-matrix">
+    <text class="terminal-1648295878-r1" x="0" y="20" textLength="536.8" clip-path="url(#terminal-1648295878-line-0)">Usage:&#160;airflowctl&#160;variables&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-1648295878-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1648295878-line-0)">
+</text><text class="terminal-1648295878-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1648295878-line-1)">
+</text><text class="terminal-1648295878-r1" x="0" y="68.8" textLength="341.6" clip-path="url(#terminal-1648295878-line-2)">Perform&#160;Variables&#160;operations</text><text class="terminal-1648295878-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1648295878-line-2)">
+</text><text class="terminal-1648295878-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1648295878-line-3)">
+</text><text class="terminal-1648295878-r1" x="0" y="117.6" textLength="256.2" clip-path="url(#terminal-1648295878-line-4)">Positional&#160;Arguments:</text><text class="terminal-1648295878-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1648295878-line-4)">
+</text><text class="terminal-1648295878-r1" x="0" y="142" textLength="109.8" clip-path="url(#terminal-1648295878-line-5)">&#160;&#160;COMMAND</text><text class="terminal-1648295878-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1648295878-line-5)">
+</text><text class="terminal-1648295878-r1" x="0" y="166.4" textLength="463.6" clip-path="url(#terminal-1648295878-line-6)">&#160;&#160;&#160;&#160;create&#160;&#160;&#160;&#160;Perform&#160;create&#160;operation</text><text class="terminal-1648295878-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1648295878-line-6)">
+</text><text class="terminal-1648295878-r1" x="0" y="190.8" textLength="463.6" clip-path="url(#terminal-1648295878-line-7)">&#160;&#160;&#160;&#160;delete&#160;&#160;&#160;&#160;Perform&#160;delete&#160;operation</text><text class="terminal-1648295878-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1648295878-line-7)">
+</text><text class="terminal-1648295878-r1" x="0" y="215.2" textLength="414.8" clip-path="url(#terminal-1648295878-line-8)">&#160;&#160;&#160;&#160;export&#160;&#160;&#160;&#160;Export&#160;all&#160;variables</text><text class="terminal-1648295878-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1648295878-line-8)">
+</text><text class="terminal-1648295878-r1" x="0" y="239.6" textLength="427" clip-path="url(#terminal-1648295878-line-9)">&#160;&#160;&#160;&#160;get&#160;&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;get&#160;operation</text><text class="terminal-1648295878-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1648295878-line-9)">
+</text><text class="terminal-1648295878-r1" x="0" y="264" textLength="366" clip-path="url(#terminal-1648295878-line-10)">&#160;&#160;&#160;&#160;import&#160;&#160;&#160;&#160;Import&#160;variables</text><text class="terminal-1648295878-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1648295878-line-10)">
+</text><text class="terminal-1648295878-r1" x="0" y="288.4" textLength="439.2" clip-path="url(#terminal-1648295878-line-11)">&#160;&#160;&#160;&#160;list&#160;&#160;&#160;&#160;&#160;&#160;Perform&#160;list&#160;operation</text><text class="terminal-1648295878-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1648295878-line-11)">
+</text><text class="terminal-1648295878-r1" x="0" y="312.8" textLength="463.6" clip-path="url(#terminal-1648295878-line-12)">&#160;&#160;&#160;&#160;update&#160;&#160;&#160;&#160;Perform&#160;update&#160;operation</text><text class="terminal-1648295878-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1648295878-line-12)">
+</text><text class="terminal-1648295878-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1648295878-line-13)">
+</text><text class="terminal-1648295878-r1" x="0" y="361.6" textLength="97.6" clip-path="url(#terminal-1648295878-line-14)">Options:</text><text class="terminal-1648295878-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1648295878-line-14)">
+</text><text class="terminal-1648295878-r1" x="0" y="386" textLength="549" clip-path="url(#terminal-1648295878-line-15)">&#160;&#160;-h,&#160;--help&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-1648295878-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1648295878-line-15)">
 </text>
     </g>
     </g>
diff --git a/airflow-ctl/docs/images/output_version.svg b/airflow-ctl/docs/images/output_version.svg
index 511817f589a10..c4ac023c6a1f5 100644
--- a/airflow-ctl/docs/images/output_version.svg
+++ b/airflow-ctl/docs/images/output_version.svg
@@ -19,59 +19,59 @@
         font-weight: 700;
     }
 
-    .terminal-2624149572-matrix {
+    .terminal-2995541012-matrix {
         font-family: Fira Code, monospace;
         font-size: 20px;
         line-height: 24.4px;
         font-variant-east-asian: full-width;
     }
 
-    .terminal-2624149572-title {
+    .terminal-2995541012-title {
         font-size: 18px;
         font-weight: bold;
         font-family: arial;
     }
 
-    .terminal-2624149572-r1 { fill: #c5c8c6 }
+    .terminal-2995541012-r1 { fill: #c5c8c6 }
     </style>
 
     <defs>
-    <clipPath id="terminal-2624149572-clip-terminal">
+    <clipPath id="terminal-2995541012-clip-terminal">
       <rect x="0" y="0" width="975.0" height="145.39999999999998" />
     </clipPath>
-    <clipPath id="terminal-2624149572-line-0">
+    <clipPath id="terminal-2995541012-line-0">
     <rect x="0" y="1.5" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2624149572-line-1">
+<clipPath id="terminal-2995541012-line-1">
     <rect x="0" y="25.9" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2624149572-line-2">
+<clipPath id="terminal-2995541012-line-2">
     <rect x="0" y="50.3" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2624149572-line-3">
+<clipPath id="terminal-2995541012-line-3">
     <rect x="0" y="74.7" width="976" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2624149572-line-4">
+<clipPath id="terminal-2995541012-line-4">
     <rect x="0" y="99.1" width="976" height="24.65"/>
             </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="194.4" rx="8"/><text class="terminal-2624149572-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;version</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="194.4" rx="8"/><text class="terminal-2995541012-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">Command:&#160;version</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
 
-    <g transform="translate(9, 41)" clip-path="url(#terminal-2624149572-clip-terminal)">
+    <g transform="translate(9, 41)" clip-path="url(#terminal-2995541012-clip-terminal)">
 
-    <g class="terminal-2624149572-matrix">
-    <text class="terminal-2624149572-r1" x="0" y="20" textLength="366" clip-path="url(#terminal-2624149572-line-0)">Usage:&#160;airflowctl&#160;version&#160;[-h]</text><text class="terminal-2624149572-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2624149572-line-0)">
-</text><text class="terminal-2624149572-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2624149572-line-1)">
-</text><text class="terminal-2624149572-r1" x="0" y="68.8" textLength="292.8" clip-path="url(#terminal-2624149572-line-2)">Show&#160;version&#160;information</text><text class="terminal-2624149572-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2624149572-line-2)">
-</text><text class="terminal-2624149572-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2624149572-line-3)">
-</text><text class="terminal-2624149572-r1" x="0" y="117.6" textLength="231.8" clip-path="url(#terminal-2624149572-line-4)">Optional&#160;Arguments:</text><text class="terminal-2624149572-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2624149572-line-4)">
-</text><text class="terminal-2624149572-r1" x="0" y="142" textLength="549" clip-path="url(#terminal-2624149572-line-5)">&#160;&#160;-h,&#160;--help&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-2624149572-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2624149572-line-5)">
+    <g class="terminal-2995541012-matrix">
+    <text class="terminal-2995541012-r1" x="0" y="20" textLength="366" clip-path="url(#terminal-2995541012-line-0)">Usage:&#160;airflowctl&#160;version&#160;[-h]</text><text class="terminal-2995541012-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2995541012-line-0)">
+</text><text class="terminal-2995541012-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2995541012-line-1)">
+</text><text class="terminal-2995541012-r1" x="0" y="68.8" textLength="292.8" clip-path="url(#terminal-2995541012-line-2)">Show&#160;version&#160;information</text><text class="terminal-2995541012-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2995541012-line-2)">
+</text><text class="terminal-2995541012-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2995541012-line-3)">
+</text><text class="terminal-2995541012-r1" x="0" y="117.6" textLength="97.6" clip-path="url(#terminal-2995541012-line-4)">Options:</text><text class="terminal-2995541012-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2995541012-line-4)">
+</text><text class="terminal-2995541012-r1" x="0" y="142" textLength="549" clip-path="url(#terminal-2995541012-line-5)">&#160;&#160;-h,&#160;--help&#160;&#160;show&#160;this&#160;help&#160;message&#160;and&#160;exit</text><text class="terminal-2995541012-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2995541012-line-5)">
 </text>
     </g>
     </g>
diff --git a/chart/pyproject.toml b/chart/pyproject.toml
index 30813c38db28c..2c559d1997dc8 100644
--- a/chart/pyproject.toml
+++ b/chart/pyproject.toml
@@ -24,7 +24,7 @@ build-backend = "hatchling.build"
 [project]
 name = "apache-airflow-helm-chart"
 description = "Programmatically author, schedule and monitor data pipelines"
-requires-python = "~=3.9,<3.13"
+requires-python = "~=3.10,<3.13"
 authors = [
     { name = "Apache Software Foundation", email = "dev@airflow.apache.org" },
 ]
diff --git a/clients/python/pyproject.toml b/clients/python/pyproject.toml
index a92844c864bee..2cfdeeaad749a 100644
--- a/clients/python/pyproject.toml
+++ b/clients/python/pyproject.toml
@@ -25,7 +25,7 @@ dynamic = ["version"]
 description = "Apache Airflow API (Stable)"
 readme = "README.md"
 license-files.globs = ["LICENSE", "NOTICE"]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 authors = [
     { name = "Apache Software Foundation", email = "dev@airflow.apache.org" },
 ]
diff --git a/contributing-docs/13_airflow_dependencies_and_extras.rst b/contributing-docs/13_airflow_dependencies_and_extras.rst
index 9ac355f6c11c7..2e1b72c6f6533 100644
--- a/contributing-docs/13_airflow_dependencies_and_extras.rst
+++ b/contributing-docs/13_airflow_dependencies_and_extras.rst
@@ -85,8 +85,8 @@ from the PyPI package:
 
 .. code-block:: bash
 
-  pip install "apache-airflow[google,amazon,async]==2.2.5" \
-    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.2.5/constraints-3.9.txt"
+  pip install "apache-airflow[google,amazon,async]==3.0.0" \
+    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-3.0.0/constraints-3.10.txt"
 
 The last one can be used to install Airflow in "minimal" mode - i.e when bare Airflow is installed without
 extras.
@@ -98,7 +98,7 @@ requirements).
 .. code-block:: bash
 
   pip install -e ".[devel]" \
-    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-source-providers-3.9.txt"
+    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-source-providers-3.10.txt"
 
 
 This also works with extras - for example:
@@ -106,7 +106,7 @@ This also works with extras - for example:
 .. code-block:: bash
 
   pip install ".[ssh]" \
-    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-source-providers-3.9.txt"
+    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-source-providers-3.10.txt"
 
 
 There are different set of fixed constraint files for different python major/minor versions and you should
@@ -118,7 +118,7 @@ using ``constraints-no-providers`` constraint files as well.
 .. code-block:: bash
 
   pip install . --upgrade \
-    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-no-providers-3.9.txt"
+    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-no-providers-3.10.txt"
 
 
 The ``constraints-<PYTHON_MAJOR_MINOR_VERSION>.txt`` and ``constraints-no-providers-<PYTHON_MAJOR_MINOR_VERSION>.txt``
diff --git a/dev/README_RELEASE_AIRFLOW.md b/dev/README_RELEASE_AIRFLOW.md
index a56177b937c39..ba1066d02d12a 100644
--- a/dev/README_RELEASE_AIRFLOW.md
+++ b/dev/README_RELEASE_AIRFLOW.md
@@ -912,7 +912,7 @@ the older branches, you should set the "skip" field to true.
 ## Verify production images
 
 ```shell script
-for PYTHON in 3.9 3.10 3.11 3.12
+for PYTHON in 3.10 3.11 3.12
 do
     docker pull apache/airflow:${VERSION}-python${PYTHON}
     breeze prod-image verify --image-name apache/airflow:${VERSION}-python${PYTHON}
diff --git a/dev/airflow_mypy/plugin/outputs.py b/dev/airflow_mypy/plugin/outputs.py
index ea7919147430d..f109401b46f23 100644
--- a/dev/airflow_mypy/plugin/outputs.py
+++ b/dev/airflow_mypy/plugin/outputs.py
@@ -17,7 +17,7 @@
 # under the License.
 from __future__ import annotations
 
-from typing import Callable
+from collections.abc import Callable
 
 from mypy.plugin import AttributeContext, MethodContext, Plugin
 from mypy.types import AnyType, Type, TypeOfAny
diff --git a/dev/breeze/README.md b/dev/breeze/README.md
index ca891e9f7c613..85a6dc144ee1e 100644
--- a/dev/breeze/README.md
+++ b/dev/breeze/README.md
@@ -135,6 +135,6 @@ PLEASE DO NOT MODIFY THE HASH BELOW! IT IS AUTOMATICALLY UPDATED BY PRE-COMMIT.
 
 ---------------------------------------------------------------------------------------------------------
 
-Package config hash: c34f0720a080a434971a03e23168cd4748605b4f1975675b15badc4c6afbd358d5eafe4dd9c60c55bd4defca59db16fcef2f5ed5c70939e539651f287bfcca11
+Package config hash: 980100f98596f859c1d3d1b9db547275f0cc29031f32c80a0f23a811f2695902b1ce04a9d0f1d7e6ef5522745d728d457039cf67d48d4dcf25dcd9ab340d94dd
 
 ---------------------------------------------------------------------------------------------------------
diff --git a/dev/breeze/doc/images/output-commands.svg b/dev/breeze/doc/images/output-commands.svg
index 234bfa5ee81a3..b82c5f4b870b5 100644
--- a/dev/breeze/doc/images/output-commands.svg
+++ b/dev/breeze/doc/images/output-commands.svg
@@ -321,8 +321,8 @@
 </text><text class="breeze-help-r5" x="0" y="93.2" textLength="24.4" clip-path="url(#breeze-help-line-3)">╭─</text><text class="breeze-help-r5" x="24.4" y="93.2" textLength="195.2" clip-path="url(#breeze-help-line-3)">&#160;Execution&#160;mode&#160;</text><text class="breeze-help-r5" x="219.6" y="93.2" textLength="1220" clip-path="url(#breeze-help-line-3)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="93.2" textLength="24.4" clip-path="url(#breeze-help-line-3)">─╮</text><text class="breeze-help-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-help-line-3)">
 </text><text class="breeze-help-r5" x="0" y="117.6" textLength="12.2" clip-path="url(#breeze-help-line-4)">│</text><text class="breeze-help-r4" x="24.4" y="117.6" textLength="97.6" clip-path="url(#breeze-help-line-4)">--python</text><text class="breeze-help-r6" x="719.8" y="117.6" textLength="24.4" clip-path="url(#breeze-help-line-4)">-p</text><text class="breeze-help-r1" x="768.6" y="117.6" textLength="671" clip-path="url(#breeze-help-line-4)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="117.6" textLength="12.2" clip-path="url(#breeze-help-line-4)">│</text><text class="breeze-help-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-help-line-4)">
 </text><text class="breeze-help-r5" x="0" y="142" textLength="12.2" clip-path="url(#breeze-help-line-5)">│</text><text class="breeze-help-r1" x="768.6" y="142" textLength="671" clip-path="url(#breeze-help-line-5)">images.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="142" textLength="12.2" clip-path="url(#breeze-help-line-5)">│</text><text class="breeze-help-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-help-line-5)">
-</text><text class="breeze-help-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-help-line-6)">│</text><text class="breeze-help-r7" x="768.6" y="166.4" textLength="671" clip-path="url(#breeze-help-line-6)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-help-line-6)">│</text><text class="breeze-help-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-help-line-6)">
-</text><text class="breeze-help-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-help-line-7)">│</text><text class="breeze-help-r5" x="768.6" y="190.8" textLength="671" clip-path="url(#breeze-help-line-7)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-help-line-7)">│</text><text class="breeze-help-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-help-line-7)">
+</text><text class="breeze-help-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-help-line-6)">│</text><text class="breeze-help-r7" x="768.6" y="166.4" textLength="671" clip-path="url(#breeze-help-line-6)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-help-line-6)">│</text><text class="breeze-help-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-help-line-6)">
+</text><text class="breeze-help-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-help-line-7)">│</text><text class="breeze-help-r5" x="768.6" y="190.8" textLength="671" clip-path="url(#breeze-help-line-7)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-help-line-7)">│</text><text class="breeze-help-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-help-line-7)">
 </text><text class="breeze-help-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-help-line-8)">│</text><text class="breeze-help-r4" x="24.4" y="215.2" textLength="158.6" clip-path="url(#breeze-help-line-8)">--integration</text><text class="breeze-help-r1" x="768.6" y="215.2" textLength="671" clip-path="url(#breeze-help-line-8)">Core&#160;Integrations&#160;to&#160;enable&#160;when&#160;running&#160;(can&#160;be&#160;more&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-help-line-8)">│</text><text class="breeze-help-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-help-line-8)">
 </text><text class="breeze-help-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-help-line-9)">│</text><text class="breeze-help-r1" x="768.6" y="239.6" textLength="671" clip-path="url(#breeze-help-line-9)">than&#160;one).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-help-line-9)">│</text><text class="breeze-help-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-help-line-9)">
 </text><text class="breeze-help-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-help-line-10)">│</text><text class="breeze-help-r7" x="768.6" y="264" textLength="671" clip-path="url(#breeze-help-line-10)">(all&#160;|&#160;all-testable&#160;|&#160;cassandra&#160;|&#160;celery&#160;|&#160;drill&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-help-line-10)">│</text><text class="breeze-help-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-help-line-10)">
diff --git a/dev/breeze/doc/images/output_ci-image_build.svg b/dev/breeze/doc/images/output_ci-image_build.svg
index 5dfe723617826..7e8b2d9b429ec 100644
--- a/dev/breeze/doc/images/output_ci-image_build.svg
+++ b/dev/breeze/doc/images/output_ci-image_build.svg
@@ -328,8 +328,8 @@
 </text><text class="breeze-ci-image-build-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-4)">
 </text><text class="breeze-ci-image-build-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-5)">╭─</text><text class="breeze-ci-image-build-r5" x="24.4" y="142" textLength="158.6" clip-path="url(#breeze-ci-image-build-line-5)">&#160;Basic&#160;usage&#160;</text><text class="breeze-ci-image-build-r5" x="183" y="142" textLength="1256.6" clip-path="url(#breeze-ci-image-build-line-5)">───────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-ci-image-build-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-5)">─╮</text><text class="breeze-ci-image-build-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-5)">
 </text><text class="breeze-ci-image-build-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-6)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-6)">--python</text><text class="breeze-ci-image-build-r6" x="585.6" y="166.4" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-6)">-p</text><text class="breeze-ci-image-build-r1" x="634.4" y="166.4" textLength="732" clip-path="url(#breeze-ci-image-build-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-ci-image-build-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-6)">│</text><text class="breeze-ci-image-build-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-6)">
-</text><text class="breeze-ci-image-build-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-7)">│</text><text class="breeze-ci-image-build-r7" x="634.4" y="190.8" textLength="732" clip-path="url(#breeze-ci-image-build-line-7)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-build-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-7)">│</text><text class="breeze-ci-image-build-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-7)">
-</text><text class="breeze-ci-image-build-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-8)">│</text><text class="breeze-ci-image-build-r5" x="634.4" y="215.2" textLength="732" clip-path="url(#breeze-ci-image-build-line-8)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-build-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-8)">│</text><text class="breeze-ci-image-build-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-8)">
+</text><text class="breeze-ci-image-build-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-7)">│</text><text class="breeze-ci-image-build-r7" x="634.4" y="190.8" textLength="732" clip-path="url(#breeze-ci-image-build-line-7)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-build-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-7)">│</text><text class="breeze-ci-image-build-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-7)">
+</text><text class="breeze-ci-image-build-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-8)">│</text><text class="breeze-ci-image-build-r5" x="634.4" y="215.2" textLength="732" clip-path="url(#breeze-ci-image-build-line-8)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-build-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-8)">│</text><text class="breeze-ci-image-build-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-8)">
 </text><text class="breeze-ci-image-build-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-9)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="239.6" textLength="378.2" clip-path="url(#breeze-ci-image-build-line-9)">--upgrade-to-newer-dependencies</text><text class="breeze-ci-image-build-r6" x="585.6" y="239.6" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-9)">-u</text><text class="breeze-ci-image-build-r1" x="634.4" y="239.6" textLength="549" clip-path="url(#breeze-ci-image-build-line-9)">When&#160;set,&#160;upgrade&#160;all&#160;PIP&#160;packages&#160;to&#160;latest.</text><text class="breeze-ci-image-build-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-9)">│</text><text class="breeze-ci-image-build-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-9)">
 </text><text class="breeze-ci-image-build-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-10)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="264" textLength="244" clip-path="url(#breeze-ci-image-build-line-10)">--upgrade-on-failure</text><text class="breeze-ci-image-build-r1" x="268.4" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-10)">/</text><text class="breeze-ci-image-build-r4" x="280.6" y="264" textLength="280.6" clip-path="url(#breeze-ci-image-build-line-10)">--no-upgrade-on-failure</text><text class="breeze-ci-image-build-r1" x="634.4" y="264" textLength="805.2" clip-path="url(#breeze-ci-image-build-line-10)">When&#160;set,&#160;attempt&#160;to&#160;run&#160;upgrade&#160;to&#160;newer&#160;dependencies&#160;when&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-build-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-10)">│</text><text class="breeze-ci-image-build-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-10)">
 </text><text class="breeze-ci-image-build-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-11)">│</text><text class="breeze-ci-image-build-r1" x="634.4" y="288.4" textLength="805.2" clip-path="url(#breeze-ci-image-build-line-11)">regular&#160;build&#160;fails.&#160;It&#160;is&#160;set&#160;to&#160;False&#160;by&#160;default&#160;on&#160;CI&#160;and&#160;True&#160;</text><text class="breeze-ci-image-build-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-11)">│</text><text class="breeze-ci-image-build-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-11)">
@@ -354,7 +354,7 @@
 </text><text class="breeze-ci-image-build-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-30)">│</text><text class="breeze-ci-image-build-r7" x="378.2" y="752" textLength="915" clip-path="url(#breeze-ci-image-build-line-30)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-build-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-30)">│</text><text class="breeze-ci-image-build-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-30)">
 </text><text class="breeze-ci-image-build-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-31)">│</text><text class="breeze-ci-image-build-r5" x="378.2" y="776.4" textLength="915" clip-path="url(#breeze-ci-image-build-line-31)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-build-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-31)">│</text><text class="breeze-ci-image-build-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-31)">
 </text><text class="breeze-ci-image-build-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-32)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="800.8" textLength="207.4" clip-path="url(#breeze-ci-image-build-line-32)">--python-versions</text><text class="breeze-ci-image-build-r1" x="378.2" y="800.8" textLength="951.6" clip-path="url(#breeze-ci-image-build-line-32)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;for&#160;build&#160;with&#160;multiple&#160;versions.</text><text class="breeze-ci-image-build-r7" x="1342" y="800.8" textLength="73.2" clip-path="url(#breeze-ci-image-build-line-32)">(TEXT)</text><text class="breeze-ci-image-build-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-32)">│</text><text class="breeze-ci-image-build-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-32)">
-</text><text class="breeze-ci-image-build-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-33)">│</text><text class="breeze-ci-image-build-r5" x="378.2" y="825.2" textLength="951.6" clip-path="url(#breeze-ci-image-build-line-33)">[default:&#160;3.9&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-build-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-33)">│</text><text class="breeze-ci-image-build-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-33)">
+</text><text class="breeze-ci-image-build-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-33)">│</text><text class="breeze-ci-image-build-r5" x="378.2" y="825.2" textLength="951.6" clip-path="url(#breeze-ci-image-build-line-33)">[default:&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-build-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-33)">│</text><text class="breeze-ci-image-build-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-33)">
 </text><text class="breeze-ci-image-build-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-34)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="849.6" textLength="207.4" clip-path="url(#breeze-ci-image-build-line-34)">--run-in-parallel</text><text class="breeze-ci-image-build-r1" x="378.2" y="849.6" textLength="854" clip-path="url(#breeze-ci-image-build-line-34)">Run&#160;the&#160;operation&#160;in&#160;parallel&#160;on&#160;all&#160;or&#160;selected&#160;subset&#160;of&#160;parameters.</text><text class="breeze-ci-image-build-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-34)">│</text><text class="breeze-ci-image-build-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-34)">
 </text><text class="breeze-ci-image-build-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-35)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="874" textLength="170.8" clip-path="url(#breeze-ci-image-build-line-35)">--skip-cleanup</text><text class="breeze-ci-image-build-r1" x="378.2" y="874" textLength="732" clip-path="url(#breeze-ci-image-build-line-35)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text class="breeze-ci-image-build-r5" x="1451.8" y="874" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-35)">│</text><text class="breeze-ci-image-build-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-35)">
 </text><text class="breeze-ci-image-build-r5" x="0" y="898.4" textLength="1464" clip-path="url(#breeze-ci-image-build-line-36)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-36)">
diff --git a/dev/breeze/doc/images/output_ci-image_build.txt b/dev/breeze/doc/images/output_ci-image_build.txt
index 57041fec628ef..f1d7c7a717a1a 100644
--- a/dev/breeze/doc/images/output_ci-image_build.txt
+++ b/dev/breeze/doc/images/output_ci-image_build.txt
@@ -1 +1 @@
-46406f11021929517710fc7cbdea72cc
+c075a5d7ad1134165d16d1c938161fc9
diff --git a/dev/breeze/doc/images/output_ci-image_load.svg b/dev/breeze/doc/images/output_ci-image_load.svg
index 027199b79750d..aa8e15d30fec9 100644
--- a/dev/breeze/doc/images/output_ci-image_load.svg
+++ b/dev/breeze/doc/images/output_ci-image_load.svg
@@ -171,8 +171,8 @@
 </text><text class="breeze-ci-image-load-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-4)">
 </text><text class="breeze-ci-image-load-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-ci-image-load-line-5)">╭─</text><text class="breeze-ci-image-load-r5" x="24.4" y="142" textLength="219.6" clip-path="url(#breeze-ci-image-load-line-5)">&#160;Load&#160;image&#160;flags&#160;</text><text class="breeze-ci-image-load-r5" x="244" y="142" textLength="1195.6" clip-path="url(#breeze-ci-image-load-line-5)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-ci-image-load-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-ci-image-load-line-5)">─╮</text><text class="breeze-ci-image-load-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-5)">
 </text><text class="breeze-ci-image-load-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-6)">│</text><text class="breeze-ci-image-load-r4" x="61" y="166.4" textLength="97.6" clip-path="url(#breeze-ci-image-load-line-6)">--python</text><text class="breeze-ci-image-load-r6" x="402.6" y="166.4" textLength="24.4" clip-path="url(#breeze-ci-image-load-line-6)">-p</text><text class="breeze-ci-image-load-r1" x="451.4" y="166.4" textLength="732" clip-path="url(#breeze-ci-image-load-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-ci-image-load-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-6)">│</text><text class="breeze-ci-image-load-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-6)">
-</text><text class="breeze-ci-image-load-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-7)">│</text><text class="breeze-ci-image-load-r7" x="451.4" y="190.8" textLength="732" clip-path="url(#breeze-ci-image-load-line-7)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-load-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-7)">│</text><text class="breeze-ci-image-load-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-7)">
-</text><text class="breeze-ci-image-load-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-8)">│</text><text class="breeze-ci-image-load-r5" x="451.4" y="215.2" textLength="732" clip-path="url(#breeze-ci-image-load-line-8)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-load-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-8)">│</text><text class="breeze-ci-image-load-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-8)">
+</text><text class="breeze-ci-image-load-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-7)">│</text><text class="breeze-ci-image-load-r7" x="451.4" y="190.8" textLength="732" clip-path="url(#breeze-ci-image-load-line-7)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-load-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-7)">│</text><text class="breeze-ci-image-load-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-7)">
+</text><text class="breeze-ci-image-load-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-8)">│</text><text class="breeze-ci-image-load-r5" x="451.4" y="215.2" textLength="732" clip-path="url(#breeze-ci-image-load-line-8)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-load-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-8)">│</text><text class="breeze-ci-image-load-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-8)">
 </text><text class="breeze-ci-image-load-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-9)">│</text><text class="breeze-ci-image-load-r4" x="61" y="239.6" textLength="122" clip-path="url(#breeze-ci-image-load-line-9)">--platform</text><text class="breeze-ci-image-load-r1" x="451.4" y="239.6" textLength="707.6" clip-path="url(#breeze-ci-image-load-line-9)">Platform&#160;for&#160;Airflow&#160;image.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-load-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-9)">│</text><text class="breeze-ci-image-load-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-9)">
 </text><text class="breeze-ci-image-load-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-10)">│</text><text class="breeze-ci-image-load-r7" x="451.4" y="264" textLength="707.6" clip-path="url(#breeze-ci-image-load-line-10)">(linux/amd64&#160;|&#160;linux/arm64&#160;|&#160;linux/x86_64&#160;|&#160;linux/aarch64)</text><text class="breeze-ci-image-load-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-10)">│</text><text class="breeze-ci-image-load-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-10)">
 </text><text class="breeze-ci-image-load-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-11)">│</text><text class="breeze-ci-image-load-r4" x="61" y="288.4" textLength="146.4" clip-path="url(#breeze-ci-image-load-line-11)">--image-file</text><text class="breeze-ci-image-load-r1" x="451.4" y="288.4" textLength="988.2" clip-path="url(#breeze-ci-image-load-line-11)">Optional&#160;file&#160;name&#160;to&#160;load&#160;the&#160;image&#160;from&#160;-&#160;name&#160;must&#160;follow&#160;the&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-load-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-11)">│</text><text class="breeze-ci-image-load-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-11)">
diff --git a/dev/breeze/doc/images/output_ci-image_load.txt b/dev/breeze/doc/images/output_ci-image_load.txt
index bbab37d71bf6a..d7d932a7463cb 100644
--- a/dev/breeze/doc/images/output_ci-image_load.txt
+++ b/dev/breeze/doc/images/output_ci-image_load.txt
@@ -1 +1 @@
-4cd3045ad6a0a6514cac07e3a9228a8f
+d86e2e217fe99bd74580f751dc4c51bd
diff --git a/dev/breeze/doc/images/output_ci-image_pull.svg b/dev/breeze/doc/images/output_ci-image_pull.svg
index 2ca6acbb8cee1..b6f6da58aa94c 100644
--- a/dev/breeze/doc/images/output_ci-image_pull.svg
+++ b/dev/breeze/doc/images/output_ci-image_pull.svg
@@ -153,8 +153,8 @@
 </text><text class="breeze-ci-image-pull-r1" x="12.2" y="93.2" textLength="1024.8" clip-path="url(#breeze-ci-image-pull-line-3)">Pull&#160;and&#160;optionally&#160;verify&#160;CI&#160;images&#160;-&#160;possibly&#160;in&#160;parallel&#160;for&#160;all&#160;Python&#160;versions.</text><text class="breeze-ci-image-pull-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-3)">
 </text><text class="breeze-ci-image-pull-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-4)">
 </text><text class="breeze-ci-image-pull-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-5)">╭─</text><text class="breeze-ci-image-pull-r5" x="24.4" y="142" textLength="219.6" clip-path="url(#breeze-ci-image-pull-line-5)">&#160;Pull&#160;image&#160;flags&#160;</text><text class="breeze-ci-image-pull-r5" x="244" y="142" textLength="1195.6" clip-path="url(#breeze-ci-image-pull-line-5)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-ci-image-pull-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-5)">─╮</text><text class="breeze-ci-image-pull-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-5)">
-</text><text class="breeze-ci-image-pull-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-6)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-ci-image-pull-line-6)">--python</text><text class="breeze-ci-image-pull-r6" x="244" y="166.4" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-6)">-p</text><text class="breeze-ci-image-pull-r1" x="292.8" y="166.4" textLength="732" clip-path="url(#breeze-ci-image-pull-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-ci-image-pull-r7" x="1037" y="166.4" textLength="341.6" clip-path="url(#breeze-ci-image-pull-line-6)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-ci-image-pull-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-6)">│</text><text class="breeze-ci-image-pull-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-6)">
-</text><text class="breeze-ci-image-pull-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-7)">│</text><text class="breeze-ci-image-pull-r5" x="292.8" y="190.8" textLength="732" clip-path="url(#breeze-ci-image-pull-line-7)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-pull-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-7)">│</text><text class="breeze-ci-image-pull-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-7)">
+</text><text class="breeze-ci-image-pull-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-6)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-ci-image-pull-line-6)">--python</text><text class="breeze-ci-image-pull-r6" x="244" y="166.4" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-6)">-p</text><text class="breeze-ci-image-pull-r1" x="292.8" y="166.4" textLength="732" clip-path="url(#breeze-ci-image-pull-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-ci-image-pull-r7" x="1037" y="166.4" textLength="268.4" clip-path="url(#breeze-ci-image-pull-line-6)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-ci-image-pull-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-6)">│</text><text class="breeze-ci-image-pull-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-6)">
+</text><text class="breeze-ci-image-pull-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-7)">│</text><text class="breeze-ci-image-pull-r5" x="292.8" y="190.8" textLength="732" clip-path="url(#breeze-ci-image-pull-line-7)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-pull-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-7)">│</text><text class="breeze-ci-image-pull-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-7)">
 </text><text class="breeze-ci-image-pull-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-8)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="215.2" textLength="97.6" clip-path="url(#breeze-ci-image-pull-line-8)">--verify</text><text class="breeze-ci-image-pull-r1" x="292.8" y="215.2" textLength="158.6" clip-path="url(#breeze-ci-image-pull-line-8)">Verify&#160;image.</text><text class="breeze-ci-image-pull-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-8)">│</text><text class="breeze-ci-image-pull-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-8)">
 </text><text class="breeze-ci-image-pull-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-9)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="239.6" textLength="195.2" clip-path="url(#breeze-ci-image-pull-line-9)">--wait-for-image</text><text class="breeze-ci-image-pull-r1" x="292.8" y="239.6" textLength="366" clip-path="url(#breeze-ci-image-pull-line-9)">Wait&#160;until&#160;image&#160;is&#160;available.</text><text class="breeze-ci-image-pull-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-9)">│</text><text class="breeze-ci-image-pull-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-9)">
 </text><text class="breeze-ci-image-pull-r5" x="0" y="264" textLength="1464" clip-path="url(#breeze-ci-image-pull-line-10)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-pull-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-10)">
@@ -164,7 +164,7 @@
 </text><text class="breeze-ci-image-pull-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-14)">│</text><text class="breeze-ci-image-pull-r7" x="378.2" y="361.6" textLength="915" clip-path="url(#breeze-ci-image-pull-line-14)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-pull-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-14)">│</text><text class="breeze-ci-image-pull-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-14)">
 </text><text class="breeze-ci-image-pull-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-15)">│</text><text class="breeze-ci-image-pull-r5" x="378.2" y="386" textLength="915" clip-path="url(#breeze-ci-image-pull-line-15)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-pull-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-15)">│</text><text class="breeze-ci-image-pull-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-15)">
 </text><text class="breeze-ci-image-pull-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-16)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="410.4" textLength="207.4" clip-path="url(#breeze-ci-image-pull-line-16)">--python-versions</text><text class="breeze-ci-image-pull-r1" x="378.2" y="410.4" textLength="951.6" clip-path="url(#breeze-ci-image-pull-line-16)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;for&#160;build&#160;with&#160;multiple&#160;versions.</text><text class="breeze-ci-image-pull-r7" x="1342" y="410.4" textLength="73.2" clip-path="url(#breeze-ci-image-pull-line-16)">(TEXT)</text><text class="breeze-ci-image-pull-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-16)">│</text><text class="breeze-ci-image-pull-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-16)">
-</text><text class="breeze-ci-image-pull-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-17)">│</text><text class="breeze-ci-image-pull-r5" x="378.2" y="434.8" textLength="951.6" clip-path="url(#breeze-ci-image-pull-line-17)">[default:&#160;3.9&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-pull-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-17)">│</text><text class="breeze-ci-image-pull-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-17)">
+</text><text class="breeze-ci-image-pull-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-17)">│</text><text class="breeze-ci-image-pull-r5" x="378.2" y="434.8" textLength="951.6" clip-path="url(#breeze-ci-image-pull-line-17)">[default:&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-pull-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-17)">│</text><text class="breeze-ci-image-pull-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-17)">
 </text><text class="breeze-ci-image-pull-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-18)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="459.2" textLength="170.8" clip-path="url(#breeze-ci-image-pull-line-18)">--skip-cleanup</text><text class="breeze-ci-image-pull-r1" x="378.2" y="459.2" textLength="732" clip-path="url(#breeze-ci-image-pull-line-18)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text class="breeze-ci-image-pull-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-18)">│</text><text class="breeze-ci-image-pull-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-18)">
 </text><text class="breeze-ci-image-pull-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-19)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="483.6" textLength="207.4" clip-path="url(#breeze-ci-image-pull-line-19)">--debug-resources</text><text class="breeze-ci-image-pull-r1" x="378.2" y="483.6" textLength="768.6" clip-path="url(#breeze-ci-image-pull-line-19)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;running&#160;in&#160;parallel.</text><text class="breeze-ci-image-pull-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-19)">│</text><text class="breeze-ci-image-pull-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-19)">
 </text><text class="breeze-ci-image-pull-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-20)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="508" textLength="305" clip-path="url(#breeze-ci-image-pull-line-20)">--include-success-outputs</text><text class="breeze-ci-image-pull-r1" x="378.2" y="508" textLength="841.8" clip-path="url(#breeze-ci-image-pull-line-20)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;runs&#160;(not&#160;shown&#160;by&#160;default).</text><text class="breeze-ci-image-pull-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-20)">│</text><text class="breeze-ci-image-pull-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-20)">
diff --git a/dev/breeze/doc/images/output_ci-image_pull.txt b/dev/breeze/doc/images/output_ci-image_pull.txt
index 7d10e3471f4bd..0de3a5b933769 100644
--- a/dev/breeze/doc/images/output_ci-image_pull.txt
+++ b/dev/breeze/doc/images/output_ci-image_pull.txt
@@ -1 +1 @@
-b8ed28c0a2a42d536bdb1716954a9a4e
+c29b9a5e5bf4b503f4e0310006414597
diff --git a/dev/breeze/doc/images/output_ci-image_save.svg b/dev/breeze/doc/images/output_ci-image_save.svg
index ac4c5782f7e61..e803d2b341142 100644
--- a/dev/breeze/doc/images/output_ci-image_save.svg
+++ b/dev/breeze/doc/images/output_ci-image_save.svg
@@ -117,8 +117,8 @@
 </text><text class="breeze-ci-image-save-r1" x="12.2" y="93.2" textLength="292.8" clip-path="url(#breeze-ci-image-save-line-3)">Save&#160;CI&#160;image&#160;to&#160;a&#160;file.</text><text class="breeze-ci-image-save-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-3)">
 </text><text class="breeze-ci-image-save-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-4)">
 </text><text class="breeze-ci-image-save-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-ci-image-save-line-5)">╭─</text><text class="breeze-ci-image-save-r5" x="24.4" y="142" textLength="219.6" clip-path="url(#breeze-ci-image-save-line-5)">&#160;Save&#160;image&#160;flags&#160;</text><text class="breeze-ci-image-save-r5" x="244" y="142" textLength="1195.6" clip-path="url(#breeze-ci-image-save-line-5)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-ci-image-save-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-ci-image-save-line-5)">─╮</text><text class="breeze-ci-image-save-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-5)">
-</text><text class="breeze-ci-image-save-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-6)">│</text><text class="breeze-ci-image-save-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-ci-image-save-line-6)">--python</text><text class="breeze-ci-image-save-r6" x="280.6" y="166.4" textLength="24.4" clip-path="url(#breeze-ci-image-save-line-6)">-p</text><text class="breeze-ci-image-save-r1" x="329.4" y="166.4" textLength="732" clip-path="url(#breeze-ci-image-save-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-ci-image-save-r7" x="1073.6" y="166.4" textLength="341.6" clip-path="url(#breeze-ci-image-save-line-6)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-ci-image-save-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-6)">│</text><text class="breeze-ci-image-save-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-6)">
-</text><text class="breeze-ci-image-save-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-7)">│</text><text class="breeze-ci-image-save-r5" x="329.4" y="190.8" textLength="732" clip-path="url(#breeze-ci-image-save-line-7)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-save-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-7)">│</text><text class="breeze-ci-image-save-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-7)">
+</text><text class="breeze-ci-image-save-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-6)">│</text><text class="breeze-ci-image-save-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-ci-image-save-line-6)">--python</text><text class="breeze-ci-image-save-r6" x="280.6" y="166.4" textLength="24.4" clip-path="url(#breeze-ci-image-save-line-6)">-p</text><text class="breeze-ci-image-save-r1" x="329.4" y="166.4" textLength="732" clip-path="url(#breeze-ci-image-save-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-ci-image-save-r7" x="1073.6" y="166.4" textLength="268.4" clip-path="url(#breeze-ci-image-save-line-6)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-ci-image-save-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-6)">│</text><text class="breeze-ci-image-save-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-6)">
+</text><text class="breeze-ci-image-save-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-7)">│</text><text class="breeze-ci-image-save-r5" x="329.4" y="190.8" textLength="732" clip-path="url(#breeze-ci-image-save-line-7)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-save-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-7)">│</text><text class="breeze-ci-image-save-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-7)">
 </text><text class="breeze-ci-image-save-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-8)">│</text><text class="breeze-ci-image-save-r4" x="24.4" y="215.2" textLength="122" clip-path="url(#breeze-ci-image-save-line-8)">--platform</text><text class="breeze-ci-image-save-r1" x="329.4" y="215.2" textLength="329.4" clip-path="url(#breeze-ci-image-save-line-8)">Platform&#160;for&#160;Airflow&#160;image.</text><text class="breeze-ci-image-save-r7" x="671" y="215.2" textLength="707.6" clip-path="url(#breeze-ci-image-save-line-8)">(linux/amd64&#160;|&#160;linux/arm64&#160;|&#160;linux/x86_64&#160;|&#160;linux/aarch64)</text><text class="breeze-ci-image-save-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-8)">│</text><text class="breeze-ci-image-save-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-8)">
 </text><text class="breeze-ci-image-save-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-9)">│</text><text class="breeze-ci-image-save-r4" x="24.4" y="239.6" textLength="231.8" clip-path="url(#breeze-ci-image-save-line-9)">--github-repository</text><text class="breeze-ci-image-save-r6" x="280.6" y="239.6" textLength="24.4" clip-path="url(#breeze-ci-image-save-line-9)">-g</text><text class="breeze-ci-image-save-r1" x="329.4" y="239.6" textLength="585.6" clip-path="url(#breeze-ci-image-save-line-9)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-ci-image-save-r7" x="927.2" y="239.6" textLength="73.2" clip-path="url(#breeze-ci-image-save-line-9)">(TEXT)</text><text class="breeze-ci-image-save-r5" x="1012.6" y="239.6" textLength="305" clip-path="url(#breeze-ci-image-save-line-9)">[default:&#160;apache/airflow]</text><text class="breeze-ci-image-save-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-9)">│</text><text class="breeze-ci-image-save-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-9)">
 </text><text class="breeze-ci-image-save-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-10)">│</text><text class="breeze-ci-image-save-r4" x="24.4" y="264" textLength="146.4" clip-path="url(#breeze-ci-image-save-line-10)">--image-file</text><text class="breeze-ci-image-save-r1" x="329.4" y="264" textLength="427" clip-path="url(#breeze-ci-image-save-line-10)">Optional&#160;file&#160;to&#160;save&#160;the&#160;image&#160;to.</text><text class="breeze-ci-image-save-r7" x="768.6" y="264" textLength="73.2" clip-path="url(#breeze-ci-image-save-line-10)">(FILE)</text><text class="breeze-ci-image-save-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-10)">│</text><text class="breeze-ci-image-save-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-save-line-10)">
diff --git a/dev/breeze/doc/images/output_ci-image_save.txt b/dev/breeze/doc/images/output_ci-image_save.txt
index bbdba6b5ec21e..5e457d7c315e1 100644
--- a/dev/breeze/doc/images/output_ci-image_save.txt
+++ b/dev/breeze/doc/images/output_ci-image_save.txt
@@ -1 +1 @@
-1ce181fbc8f99c54a5cd7ecc686d5277
+807d082ba3edd987a78c50608eb280c3
diff --git a/dev/breeze/doc/images/output_ci-image_verify.svg b/dev/breeze/doc/images/output_ci-image_verify.svg
index d946e6d967a0b..ae6639d9a7167 100644
--- a/dev/breeze/doc/images/output_ci-image_verify.svg
+++ b/dev/breeze/doc/images/output_ci-image_verify.svg
@@ -154,8 +154,8 @@
 </text><text class="breeze-ci-image-verify-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-4)">
 </text><text class="breeze-ci-image-verify-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-ci-image-verify-line-5)">╭─</text><text class="breeze-ci-image-verify-r5" x="24.4" y="142" textLength="244" clip-path="url(#breeze-ci-image-verify-line-5)">&#160;Verify&#160;image&#160;flags&#160;</text><text class="breeze-ci-image-verify-r5" x="268.4" y="142" textLength="1171.2" clip-path="url(#breeze-ci-image-verify-line-5)">────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-ci-image-verify-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-ci-image-verify-line-5)">─╮</text><text class="breeze-ci-image-verify-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-5)">
 </text><text class="breeze-ci-image-verify-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-6)">│</text><text class="breeze-ci-image-verify-r4" x="24.4" y="166.4" textLength="146.4" clip-path="url(#breeze-ci-image-verify-line-6)">--image-name</text><text class="breeze-ci-image-verify-r6" x="195.2" y="166.4" textLength="24.4" clip-path="url(#breeze-ci-image-verify-line-6)">-n</text><text class="breeze-ci-image-verify-r1" x="244" y="166.4" textLength="475.8" clip-path="url(#breeze-ci-image-verify-line-6)">Name&#160;of&#160;the&#160;image&#160;to&#160;verify&#160;(overrides&#160;</text><text class="breeze-ci-image-verify-r4" x="719.8" y="166.4" textLength="97.6" clip-path="url(#breeze-ci-image-verify-line-6)">--python</text><text class="breeze-ci-image-verify-r1" x="817.4" y="166.4" textLength="24.4" clip-path="url(#breeze-ci-image-verify-line-6)">).</text><text class="breeze-ci-image-verify-r7" x="854" y="166.4" textLength="73.2" clip-path="url(#breeze-ci-image-verify-line-6)">(TEXT)</text><text class="breeze-ci-image-verify-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-6)">│</text><text class="breeze-ci-image-verify-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-6)">
-</text><text class="breeze-ci-image-verify-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-7)">│</text><text class="breeze-ci-image-verify-r4" x="24.4" y="190.8" textLength="97.6" clip-path="url(#breeze-ci-image-verify-line-7)">--python</text><text class="breeze-ci-image-verify-r6" x="195.2" y="190.8" textLength="24.4" clip-path="url(#breeze-ci-image-verify-line-7)">-p</text><text class="breeze-ci-image-verify-r1" x="244" y="190.8" textLength="732" clip-path="url(#breeze-ci-image-verify-line-7)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-ci-image-verify-r7" x="988.2" y="190.8" textLength="341.6" clip-path="url(#breeze-ci-image-verify-line-7)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-ci-image-verify-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-7)">│</text><text class="breeze-ci-image-verify-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-7)">
-</text><text class="breeze-ci-image-verify-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-8)">│</text><text class="breeze-ci-image-verify-r5" x="244" y="215.2" textLength="732" clip-path="url(#breeze-ci-image-verify-line-8)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-verify-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-8)">│</text><text class="breeze-ci-image-verify-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-8)">
+</text><text class="breeze-ci-image-verify-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-7)">│</text><text class="breeze-ci-image-verify-r4" x="24.4" y="190.8" textLength="97.6" clip-path="url(#breeze-ci-image-verify-line-7)">--python</text><text class="breeze-ci-image-verify-r6" x="195.2" y="190.8" textLength="24.4" clip-path="url(#breeze-ci-image-verify-line-7)">-p</text><text class="breeze-ci-image-verify-r1" x="244" y="190.8" textLength="732" clip-path="url(#breeze-ci-image-verify-line-7)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-ci-image-verify-r7" x="988.2" y="190.8" textLength="268.4" clip-path="url(#breeze-ci-image-verify-line-7)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-ci-image-verify-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-7)">│</text><text class="breeze-ci-image-verify-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-7)">
+</text><text class="breeze-ci-image-verify-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-8)">│</text><text class="breeze-ci-image-verify-r5" x="244" y="215.2" textLength="732" clip-path="url(#breeze-ci-image-verify-line-8)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-verify-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-8)">│</text><text class="breeze-ci-image-verify-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-8)">
 </text><text class="breeze-ci-image-verify-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-9)">│</text><text class="breeze-ci-image-verify-r4" x="24.4" y="239.6" textLength="73.2" clip-path="url(#breeze-ci-image-verify-line-9)">--pull</text><text class="breeze-ci-image-verify-r1" x="244" y="239.6" textLength="646.6" clip-path="url(#breeze-ci-image-verify-line-9)">Pull&#160;image&#160;is&#160;missing&#160;before&#160;attempting&#160;to&#160;verify&#160;it.</text><text class="breeze-ci-image-verify-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-9)">│</text><text class="breeze-ci-image-verify-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-9)">
 </text><text class="breeze-ci-image-verify-r5" x="0" y="264" textLength="1464" clip-path="url(#breeze-ci-image-verify-line-10)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-verify-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-10)">
 </text><text class="breeze-ci-image-verify-r5" x="0" y="288.4" textLength="24.4" clip-path="url(#breeze-ci-image-verify-line-11)">╭─</text><text class="breeze-ci-image-verify-r5" x="24.4" y="288.4" textLength="219.6" clip-path="url(#breeze-ci-image-verify-line-11)">&#160;Parallel&#160;running&#160;</text><text class="breeze-ci-image-verify-r5" x="244" y="288.4" textLength="1195.6" clip-path="url(#breeze-ci-image-verify-line-11)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-ci-image-verify-r5" x="1439.6" y="288.4" textLength="24.4" clip-path="url(#breeze-ci-image-verify-line-11)">─╮</text><text class="breeze-ci-image-verify-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-11)">
@@ -164,7 +164,7 @@
 </text><text class="breeze-ci-image-verify-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-14)">│</text><text class="breeze-ci-image-verify-r7" x="378.2" y="361.6" textLength="915" clip-path="url(#breeze-ci-image-verify-line-14)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-verify-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-14)">│</text><text class="breeze-ci-image-verify-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-14)">
 </text><text class="breeze-ci-image-verify-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-15)">│</text><text class="breeze-ci-image-verify-r5" x="378.2" y="386" textLength="915" clip-path="url(#breeze-ci-image-verify-line-15)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-verify-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-15)">│</text><text class="breeze-ci-image-verify-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-15)">
 </text><text class="breeze-ci-image-verify-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-16)">│</text><text class="breeze-ci-image-verify-r4" x="24.4" y="410.4" textLength="207.4" clip-path="url(#breeze-ci-image-verify-line-16)">--python-versions</text><text class="breeze-ci-image-verify-r1" x="378.2" y="410.4" textLength="951.6" clip-path="url(#breeze-ci-image-verify-line-16)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;for&#160;build&#160;with&#160;multiple&#160;versions.</text><text class="breeze-ci-image-verify-r7" x="1342" y="410.4" textLength="73.2" clip-path="url(#breeze-ci-image-verify-line-16)">(TEXT)</text><text class="breeze-ci-image-verify-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-16)">│</text><text class="breeze-ci-image-verify-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-16)">
-</text><text class="breeze-ci-image-verify-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-17)">│</text><text class="breeze-ci-image-verify-r5" x="378.2" y="434.8" textLength="951.6" clip-path="url(#breeze-ci-image-verify-line-17)">[default:&#160;3.9&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-verify-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-17)">│</text><text class="breeze-ci-image-verify-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-17)">
+</text><text class="breeze-ci-image-verify-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-17)">│</text><text class="breeze-ci-image-verify-r5" x="378.2" y="434.8" textLength="951.6" clip-path="url(#breeze-ci-image-verify-line-17)">[default:&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-verify-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-17)">│</text><text class="breeze-ci-image-verify-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-17)">
 </text><text class="breeze-ci-image-verify-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-18)">│</text><text class="breeze-ci-image-verify-r4" x="24.4" y="459.2" textLength="170.8" clip-path="url(#breeze-ci-image-verify-line-18)">--skip-cleanup</text><text class="breeze-ci-image-verify-r1" x="378.2" y="459.2" textLength="732" clip-path="url(#breeze-ci-image-verify-line-18)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text class="breeze-ci-image-verify-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-18)">│</text><text class="breeze-ci-image-verify-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-18)">
 </text><text class="breeze-ci-image-verify-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-19)">│</text><text class="breeze-ci-image-verify-r4" x="24.4" y="483.6" textLength="207.4" clip-path="url(#breeze-ci-image-verify-line-19)">--debug-resources</text><text class="breeze-ci-image-verify-r1" x="378.2" y="483.6" textLength="768.6" clip-path="url(#breeze-ci-image-verify-line-19)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;running&#160;in&#160;parallel.</text><text class="breeze-ci-image-verify-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-19)">│</text><text class="breeze-ci-image-verify-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-19)">
 </text><text class="breeze-ci-image-verify-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-20)">│</text><text class="breeze-ci-image-verify-r4" x="24.4" y="508" textLength="305" clip-path="url(#breeze-ci-image-verify-line-20)">--include-success-outputs</text><text class="breeze-ci-image-verify-r1" x="378.2" y="508" textLength="841.8" clip-path="url(#breeze-ci-image-verify-line-20)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;runs&#160;(not&#160;shown&#160;by&#160;default).</text><text class="breeze-ci-image-verify-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-20)">│</text><text class="breeze-ci-image-verify-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-20)">
diff --git a/dev/breeze/doc/images/output_ci-image_verify.txt b/dev/breeze/doc/images/output_ci-image_verify.txt
index 3fec0520f20c4..e1300b3163f00 100644
--- a/dev/breeze/doc/images/output_ci-image_verify.txt
+++ b/dev/breeze/doc/images/output_ci-image_verify.txt
@@ -1 +1 @@
-71829e8a86a486823dcb10ca7e24ef83
+af0c91ebd8bb2ed858bdad86c43c579a
diff --git a/dev/breeze/doc/images/output_k8s_build-k8s-image.svg b/dev/breeze/doc/images/output_k8s_build-k8s-image.svg
index a3549aad6b792..b810baa3752f0 100644
--- a/dev/breeze/doc/images/output_k8s_build-k8s-image.svg
+++ b/dev/breeze/doc/images/output_k8s_build-k8s-image.svg
@@ -154,8 +154,8 @@
 </text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-4)">
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-k8s-build-k8s-image-line-5)">╭─</text><text class="breeze-k8s-build-k8s-image-r5" x="24.4" y="142" textLength="231.8" clip-path="url(#breeze-k8s-build-k8s-image-line-5)">&#160;Build&#160;image&#160;flags&#160;</text><text class="breeze-k8s-build-k8s-image-r5" x="256.2" y="142" textLength="1183.4" clip-path="url(#breeze-k8s-build-k8s-image-line-5)">─────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-build-k8s-image-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-k8s-build-k8s-image-line-5)">─╮</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-5)">
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-6)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-build-k8s-image-line-6)">--python</text><text class="breeze-k8s-build-k8s-image-r6" x="585.6" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-build-k8s-image-line-6)">-p</text><text class="breeze-k8s-build-k8s-image-r1" x="634.4" y="166.4" textLength="732" clip-path="url(#breeze-k8s-build-k8s-image-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-build-k8s-image-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-6)">│</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-6)">
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-7)">│</text><text class="breeze-k8s-build-k8s-image-r7" x="634.4" y="190.8" textLength="732" clip-path="url(#breeze-k8s-build-k8s-image-line-7)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-build-k8s-image-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-7)">│</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-7)">
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-8)">│</text><text class="breeze-k8s-build-k8s-image-r5" x="634.4" y="215.2" textLength="732" clip-path="url(#breeze-k8s-build-k8s-image-line-8)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-build-k8s-image-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-8)">│</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-8)">
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-7)">│</text><text class="breeze-k8s-build-k8s-image-r7" x="634.4" y="190.8" textLength="732" clip-path="url(#breeze-k8s-build-k8s-image-line-7)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-build-k8s-image-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-7)">│</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-7)">
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-8)">│</text><text class="breeze-k8s-build-k8s-image-r5" x="634.4" y="215.2" textLength="732" clip-path="url(#breeze-k8s-build-k8s-image-line-8)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-build-k8s-image-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-8)">│</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-8)">
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-9)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="239.6" textLength="244" clip-path="url(#breeze-k8s-build-k8s-image-line-9)">--rebuild-base-image</text><text class="breeze-k8s-build-k8s-image-r1" x="634.4" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-build-k8s-image-line-9)">Rebuilds&#160;base&#160;Airflow&#160;image&#160;before&#160;building&#160;K8S&#160;image.</text><text class="breeze-k8s-build-k8s-image-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-9)">│</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-9)">
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-10)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="264" textLength="244" clip-path="url(#breeze-k8s-build-k8s-image-line-10)">--copy-local-sources</text><text class="breeze-k8s-build-k8s-image-r1" x="268.4" y="264" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-10)">/</text><text class="breeze-k8s-build-k8s-image-r4" x="280.6" y="264" textLength="280.6" clip-path="url(#breeze-k8s-build-k8s-image-line-10)">--no-copy-local-sources</text><text class="breeze-k8s-build-k8s-image-r1" x="634.4" y="264" textLength="390.4" clip-path="url(#breeze-k8s-build-k8s-image-line-10)">Copy&#160;local&#160;sources&#160;to&#160;the&#160;image.</text><text class="breeze-k8s-build-k8s-image-r5" x="1037" y="264" textLength="353.8" clip-path="url(#breeze-k8s-build-k8s-image-line-10)">[default:&#160;copy-local-sources]</text><text class="breeze-k8s-build-k8s-image-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-10)">│</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-10)">
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-11)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="288.4" textLength="97.6" clip-path="url(#breeze-k8s-build-k8s-image-line-11)">--use-uv</text><text class="breeze-k8s-build-k8s-image-r1" x="122" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-11)">/</text><text class="breeze-k8s-build-k8s-image-r4" x="134.2" y="288.4" textLength="134.2" clip-path="url(#breeze-k8s-build-k8s-image-line-11)">--no-use-uv</text><text class="breeze-k8s-build-k8s-image-r1" x="634.4" y="288.4" textLength="719.8" clip-path="url(#breeze-k8s-build-k8s-image-line-11)">Use&#160;uv&#160;instead&#160;of&#160;pip&#160;as&#160;packaging&#160;tool&#160;to&#160;build&#160;the&#160;image.</text><text class="breeze-k8s-build-k8s-image-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-11)">│</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-11)">
@@ -167,7 +167,7 @@
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-17)">│</text><text class="breeze-k8s-build-k8s-image-r7" x="378.2" y="434.8" textLength="915" clip-path="url(#breeze-k8s-build-k8s-image-line-17)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-build-k8s-image-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-17)">│</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-17)">
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-18)">│</text><text class="breeze-k8s-build-k8s-image-r5" x="378.2" y="459.2" textLength="915" clip-path="url(#breeze-k8s-build-k8s-image-line-18)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-build-k8s-image-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-18)">│</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-18)">
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-19)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="483.6" textLength="207.4" clip-path="url(#breeze-k8s-build-k8s-image-line-19)">--python-versions</text><text class="breeze-k8s-build-k8s-image-r1" x="378.2" y="483.6" textLength="951.6" clip-path="url(#breeze-k8s-build-k8s-image-line-19)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;for&#160;build&#160;with&#160;multiple&#160;versions.</text><text class="breeze-k8s-build-k8s-image-r7" x="1342" y="483.6" textLength="73.2" clip-path="url(#breeze-k8s-build-k8s-image-line-19)">(TEXT)</text><text class="breeze-k8s-build-k8s-image-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-19)">│</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-19)">
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-20)">│</text><text class="breeze-k8s-build-k8s-image-r5" x="378.2" y="508" textLength="951.6" clip-path="url(#breeze-k8s-build-k8s-image-line-20)">[default:&#160;3.9&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-build-k8s-image-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-20)">│</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-20)">
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-20)">│</text><text class="breeze-k8s-build-k8s-image-r5" x="378.2" y="508" textLength="951.6" clip-path="url(#breeze-k8s-build-k8s-image-line-20)">[default:&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-build-k8s-image-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-20)">│</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-20)">
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-21)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="532.4" textLength="170.8" clip-path="url(#breeze-k8s-build-k8s-image-line-21)">--skip-cleanup</text><text class="breeze-k8s-build-k8s-image-r1" x="378.2" y="532.4" textLength="732" clip-path="url(#breeze-k8s-build-k8s-image-line-21)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text class="breeze-k8s-build-k8s-image-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-21)">│</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-21)">
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-22)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="556.8" textLength="207.4" clip-path="url(#breeze-k8s-build-k8s-image-line-22)">--debug-resources</text><text class="breeze-k8s-build-k8s-image-r1" x="378.2" y="556.8" textLength="768.6" clip-path="url(#breeze-k8s-build-k8s-image-line-22)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;running&#160;in&#160;parallel.</text><text class="breeze-k8s-build-k8s-image-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-22)">│</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-22)">
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-23)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="581.2" textLength="305" clip-path="url(#breeze-k8s-build-k8s-image-line-23)">--include-success-outputs</text><text class="breeze-k8s-build-k8s-image-r1" x="378.2" y="581.2" textLength="841.8" clip-path="url(#breeze-k8s-build-k8s-image-line-23)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;runs&#160;(not&#160;shown&#160;by&#160;default).</text><text class="breeze-k8s-build-k8s-image-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-23)">│</text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-23)">
diff --git a/dev/breeze/doc/images/output_k8s_build-k8s-image.txt b/dev/breeze/doc/images/output_k8s_build-k8s-image.txt
index 07806232d4c44..67f0160b50209 100644
--- a/dev/breeze/doc/images/output_k8s_build-k8s-image.txt
+++ b/dev/breeze/doc/images/output_k8s_build-k8s-image.txt
@@ -1 +1 @@
-d611c1e017fc83a7251abf72d5ee5ab7
+40442787a9fafb301236e1821099092a
diff --git a/dev/breeze/doc/images/output_k8s_configure-cluster.svg b/dev/breeze/doc/images/output_k8s_configure-cluster.svg
index db877992f5cf0..e35f2713ef075 100644
--- a/dev/breeze/doc/images/output_k8s_configure-cluster.svg
+++ b/dev/breeze/doc/images/output_k8s_configure-cluster.svg
@@ -157,8 +157,8 @@
 </text><text class="breeze-k8s-configure-cluster-r1" x="12.2" y="117.6" textLength="122" clip-path="url(#breeze-k8s-configure-cluster-line-4)">parallel).</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-4)">
 </text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-5)">
 </text><text class="breeze-k8s-configure-cluster-r5" x="0" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-configure-cluster-line-6)">╭─</text><text class="breeze-k8s-configure-cluster-r5" x="24.4" y="166.4" textLength="305" clip-path="url(#breeze-k8s-configure-cluster-line-6)">&#160;Configure&#160;cluster&#160;flags&#160;</text><text class="breeze-k8s-configure-cluster-r5" x="329.4" y="166.4" textLength="1110.2" clip-path="url(#breeze-k8s-configure-cluster-line-6)">───────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-configure-cluster-r5" x="1439.6" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-configure-cluster-line-6)">─╮</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-6)">
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-7)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="190.8" textLength="97.6" clip-path="url(#breeze-k8s-configure-cluster-line-7)">--python</text><text class="breeze-k8s-configure-cluster-r6" x="292.8" y="190.8" textLength="24.4" clip-path="url(#breeze-k8s-configure-cluster-line-7)">-p</text><text class="breeze-k8s-configure-cluster-r1" x="341.6" y="190.8" textLength="732" clip-path="url(#breeze-k8s-configure-cluster-line-7)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-configure-cluster-r7" x="1085.8" y="190.8" textLength="341.6" clip-path="url(#breeze-k8s-configure-cluster-line-7)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-k8s-configure-cluster-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-7)">│</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-7)">
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-8)">│</text><text class="breeze-k8s-configure-cluster-r5" x="341.6" y="215.2" textLength="732" clip-path="url(#breeze-k8s-configure-cluster-line-8)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-configure-cluster-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-8)">│</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-8)">
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-7)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="190.8" textLength="97.6" clip-path="url(#breeze-k8s-configure-cluster-line-7)">--python</text><text class="breeze-k8s-configure-cluster-r6" x="292.8" y="190.8" textLength="24.4" clip-path="url(#breeze-k8s-configure-cluster-line-7)">-p</text><text class="breeze-k8s-configure-cluster-r1" x="341.6" y="190.8" textLength="732" clip-path="url(#breeze-k8s-configure-cluster-line-7)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-configure-cluster-r7" x="1085.8" y="190.8" textLength="268.4" clip-path="url(#breeze-k8s-configure-cluster-line-7)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-k8s-configure-cluster-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-7)">│</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-7)">
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-8)">│</text><text class="breeze-k8s-configure-cluster-r5" x="341.6" y="215.2" textLength="732" clip-path="url(#breeze-k8s-configure-cluster-line-8)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-configure-cluster-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-8)">│</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-8)">
 </text><text class="breeze-k8s-configure-cluster-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-9)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="239.6" textLength="244" clip-path="url(#breeze-k8s-configure-cluster-line-9)">--kubernetes-version</text><text class="breeze-k8s-configure-cluster-r1" x="341.6" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-configure-cluster-line-9)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text class="breeze-k8s-configure-cluster-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-9)">│</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-9)">
 </text><text class="breeze-k8s-configure-cluster-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-10)">│</text><text class="breeze-k8s-configure-cluster-r7" x="341.6" y="264" textLength="658.8" clip-path="url(#breeze-k8s-configure-cluster-line-10)">(&gt;v1.30.10&lt;&#160;|&#160;v1.31.6&#160;|&#160;v1.32.3&#160;|&#160;v1.33.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-configure-cluster-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-10)">│</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-10)">
 </text><text class="breeze-k8s-configure-cluster-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-11)">│</text><text class="breeze-k8s-configure-cluster-r5" x="341.6" y="288.4" textLength="658.8" clip-path="url(#breeze-k8s-configure-cluster-line-11)">[default:&#160;v1.30.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-configure-cluster-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-11)">│</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-11)">
@@ -170,7 +170,7 @@
 </text><text class="breeze-k8s-configure-cluster-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-17)">│</text><text class="breeze-k8s-configure-cluster-r7" x="378.2" y="434.8" textLength="1061.4" clip-path="url(#breeze-k8s-configure-cluster-line-17)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-configure-cluster-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-17)">│</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-17)">
 </text><text class="breeze-k8s-configure-cluster-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-18)">│</text><text class="breeze-k8s-configure-cluster-r5" x="378.2" y="459.2" textLength="1061.4" clip-path="url(#breeze-k8s-configure-cluster-line-18)">[default:&#160;2;&#160;1&lt;=x&lt;=4]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-configure-cluster-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-18)">│</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-18)">
 </text><text class="breeze-k8s-configure-cluster-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-19)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="483.6" textLength="207.4" clip-path="url(#breeze-k8s-configure-cluster-line-19)">--python-versions</text><text class="breeze-k8s-configure-cluster-r1" x="378.2" y="483.6" textLength="951.6" clip-path="url(#breeze-k8s-configure-cluster-line-19)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;for&#160;build&#160;with&#160;multiple&#160;versions.</text><text class="breeze-k8s-configure-cluster-r7" x="1342" y="483.6" textLength="73.2" clip-path="url(#breeze-k8s-configure-cluster-line-19)">(TEXT)</text><text class="breeze-k8s-configure-cluster-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-19)">│</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-19)">
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-20)">│</text><text class="breeze-k8s-configure-cluster-r5" x="378.2" y="508" textLength="951.6" clip-path="url(#breeze-k8s-configure-cluster-line-20)">[default:&#160;3.9&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-configure-cluster-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-20)">│</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-20)">
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-20)">│</text><text class="breeze-k8s-configure-cluster-r5" x="378.2" y="508" textLength="951.6" clip-path="url(#breeze-k8s-configure-cluster-line-20)">[default:&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-configure-cluster-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-20)">│</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-20)">
 </text><text class="breeze-k8s-configure-cluster-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-21)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="532.4" textLength="256.2" clip-path="url(#breeze-k8s-configure-cluster-line-21)">--kubernetes-versions</text><text class="breeze-k8s-configure-cluster-r1" x="378.2" y="532.4" textLength="756.4" clip-path="url(#breeze-k8s-configure-cluster-line-21)">Kubernetes&#160;versions&#160;used&#160;to&#160;run&#160;in&#160;parallel&#160;(space&#160;separated).</text><text class="breeze-k8s-configure-cluster-r7" x="1146.8" y="532.4" textLength="73.2" clip-path="url(#breeze-k8s-configure-cluster-line-21)">(TEXT)</text><text class="breeze-k8s-configure-cluster-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-21)">│</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-21)">
 </text><text class="breeze-k8s-configure-cluster-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-22)">│</text><text class="breeze-k8s-configure-cluster-r5" x="378.2" y="556.8" textLength="756.4" clip-path="url(#breeze-k8s-configure-cluster-line-22)">[default:&#160;v1.30.10&#160;v1.31.6&#160;v1.32.3&#160;v1.33.0]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-configure-cluster-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-22)">│</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-22)">
 </text><text class="breeze-k8s-configure-cluster-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-23)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="581.2" textLength="170.8" clip-path="url(#breeze-k8s-configure-cluster-line-23)">--skip-cleanup</text><text class="breeze-k8s-configure-cluster-r1" x="378.2" y="581.2" textLength="732" clip-path="url(#breeze-k8s-configure-cluster-line-23)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text class="breeze-k8s-configure-cluster-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-23)">│</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-23)">
diff --git a/dev/breeze/doc/images/output_k8s_configure-cluster.txt b/dev/breeze/doc/images/output_k8s_configure-cluster.txt
index 107af5a24c19d..7ecd42d760681 100644
--- a/dev/breeze/doc/images/output_k8s_configure-cluster.txt
+++ b/dev/breeze/doc/images/output_k8s_configure-cluster.txt
@@ -1 +1 @@
-0046d0e84f47461bd3f0fad0011c09c4
+6e93a011facfa3eef2cf3daccdbac9bd
diff --git a/dev/breeze/doc/images/output_k8s_create-cluster.svg b/dev/breeze/doc/images/output_k8s_create-cluster.svg
index 0a2a1cdb8b2fd..4e825353c2e09 100644
--- a/dev/breeze/doc/images/output_k8s_create-cluster.svg
+++ b/dev/breeze/doc/images/output_k8s_create-cluster.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 855.1999999999999" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 830.8" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-k8s-create-cluster-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="804.1999999999999" />
+      <rect x="0" y="0" width="1463.0" height="779.8" />
     </clipPath>
     <clipPath id="breeze-k8s-create-cluster-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -138,12 +138,9 @@
 <clipPath id="breeze-k8s-create-cluster-line-30">
     <rect x="0" y="733.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="breeze-k8s-create-cluster-line-31">
-    <rect x="0" y="757.9" width="1464" height="24.65"/>
-            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="853.2" rx="8"/><text class="breeze-k8s-create-cluster-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;create-cluster</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="828.8" rx="8"/><text class="breeze-k8s-create-cluster-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;create-cluster</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -159,33 +156,32 @@
 </text><text class="breeze-k8s-create-cluster-r1" x="12.2" y="93.2" textLength="1354.2" clip-path="url(#breeze-k8s-create-cluster-line-3)">Create&#160;a&#160;KinD&#160;Cluster&#160;for&#160;Python&#160;and&#160;Kubernetes&#160;version&#160;specified&#160;(optionally&#160;create&#160;all&#160;clusters&#160;in&#160;parallel).</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-3)">
 </text><text class="breeze-k8s-create-cluster-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-4)">
 </text><text class="breeze-k8s-create-cluster-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-k8s-create-cluster-line-5)">╭─</text><text class="breeze-k8s-create-cluster-r5" x="24.4" y="142" textLength="341.6" clip-path="url(#breeze-k8s-create-cluster-line-5)">&#160;K8S&#160;cluster&#160;creation&#160;flags&#160;</text><text class="breeze-k8s-create-cluster-r5" x="366" y="142" textLength="1073.6" clip-path="url(#breeze-k8s-create-cluster-line-5)">────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-create-cluster-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-k8s-create-cluster-line-5)">─╮</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-5)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-6)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-create-cluster-line-6)">--python</text><text class="breeze-k8s-create-cluster-r6" x="341.6" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-create-cluster-line-6)">-p</text><text class="breeze-k8s-create-cluster-r1" x="390.4" y="166.4" textLength="732" clip-path="url(#breeze-k8s-create-cluster-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-6)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-6)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-7)">│</text><text class="breeze-k8s-create-cluster-r7" x="390.4" y="190.8" textLength="732" clip-path="url(#breeze-k8s-create-cluster-line-7)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-7)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-7)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-8)">│</text><text class="breeze-k8s-create-cluster-r5" x="390.4" y="215.2" textLength="732" clip-path="url(#breeze-k8s-create-cluster-line-8)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-8)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-8)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-9)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="239.6" textLength="244" clip-path="url(#breeze-k8s-create-cluster-line-9)">--kubernetes-version</text><text class="breeze-k8s-create-cluster-r1" x="390.4" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-create-cluster-line-9)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-9)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-9)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-10)">│</text><text class="breeze-k8s-create-cluster-r7" x="390.4" y="264" textLength="658.8" clip-path="url(#breeze-k8s-create-cluster-line-10)">(&gt;v1.30.10&lt;&#160;|&#160;v1.31.6&#160;|&#160;v1.32.3&#160;|&#160;v1.33.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-10)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-10)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-11)">│</text><text class="breeze-k8s-create-cluster-r5" x="390.4" y="288.4" textLength="658.8" clip-path="url(#breeze-k8s-create-cluster-line-11)">[default:&#160;v1.30.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-11)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-11)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-12)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="312.8" textLength="292.8" clip-path="url(#breeze-k8s-create-cluster-line-12)">--force-recreate-cluster</text><text class="breeze-k8s-create-cluster-r1" x="390.4" y="312.8" textLength="756.4" clip-path="url(#breeze-k8s-create-cluster-line-12)">Force&#160;recreation&#160;of&#160;the&#160;cluster&#160;even&#160;if&#160;it&#160;is&#160;already&#160;created.</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-12)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-12)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="337.2" textLength="1464" clip-path="url(#breeze-k8s-create-cluster-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-13)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="361.6" textLength="24.4" clip-path="url(#breeze-k8s-create-cluster-line-14)">╭─</text><text class="breeze-k8s-create-cluster-r5" x="24.4" y="361.6" textLength="219.6" clip-path="url(#breeze-k8s-create-cluster-line-14)">&#160;Parallel&#160;options&#160;</text><text class="breeze-k8s-create-cluster-r5" x="244" y="361.6" textLength="1195.6" clip-path="url(#breeze-k8s-create-cluster-line-14)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-create-cluster-r5" x="1439.6" y="361.6" textLength="24.4" clip-path="url(#breeze-k8s-create-cluster-line-14)">─╮</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-14)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-15)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="386" textLength="207.4" clip-path="url(#breeze-k8s-create-cluster-line-15)">--run-in-parallel</text><text class="breeze-k8s-create-cluster-r1" x="378.2" y="386" textLength="854" clip-path="url(#breeze-k8s-create-cluster-line-15)">Run&#160;the&#160;operation&#160;in&#160;parallel&#160;on&#160;all&#160;or&#160;selected&#160;subset&#160;of&#160;parameters.</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-15)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-15)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-16)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="410.4" textLength="158.6" clip-path="url(#breeze-k8s-create-cluster-line-16)">--parallelism</text><text class="breeze-k8s-create-cluster-r1" x="378.2" y="410.4" textLength="1061.4" clip-path="url(#breeze-k8s-create-cluster-line-16)">Maximum&#160;number&#160;of&#160;processes&#160;to&#160;use&#160;while&#160;running&#160;the&#160;operation&#160;in&#160;parallel&#160;for&#160;cluster&#160;</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-16)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-16)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-17)">│</text><text class="breeze-k8s-create-cluster-r1" x="378.2" y="434.8" textLength="1061.4" clip-path="url(#breeze-k8s-create-cluster-line-17)">operations.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-17)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-17)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-18)">│</text><text class="breeze-k8s-create-cluster-r7" x="378.2" y="459.2" textLength="1061.4" clip-path="url(#breeze-k8s-create-cluster-line-18)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-18)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-18)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-19)">│</text><text class="breeze-k8s-create-cluster-r5" x="378.2" y="483.6" textLength="1061.4" clip-path="url(#breeze-k8s-create-cluster-line-19)">[default:&#160;2;&#160;1&lt;=x&lt;=4]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-19)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-19)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-20)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="508" textLength="207.4" clip-path="url(#breeze-k8s-create-cluster-line-20)">--python-versions</text><text class="breeze-k8s-create-cluster-r1" x="378.2" y="508" textLength="951.6" clip-path="url(#breeze-k8s-create-cluster-line-20)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;for&#160;build&#160;with&#160;multiple&#160;versions.</text><text class="breeze-k8s-create-cluster-r7" x="1342" y="508" textLength="73.2" clip-path="url(#breeze-k8s-create-cluster-line-20)">(TEXT)</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-20)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-20)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-21)">│</text><text class="breeze-k8s-create-cluster-r5" x="378.2" y="532.4" textLength="951.6" clip-path="url(#breeze-k8s-create-cluster-line-21)">[default:&#160;3.9&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-21)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-21)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-22)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="556.8" textLength="256.2" clip-path="url(#breeze-k8s-create-cluster-line-22)">--kubernetes-versions</text><text class="breeze-k8s-create-cluster-r1" x="378.2" y="556.8" textLength="756.4" clip-path="url(#breeze-k8s-create-cluster-line-22)">Kubernetes&#160;versions&#160;used&#160;to&#160;run&#160;in&#160;parallel&#160;(space&#160;separated).</text><text class="breeze-k8s-create-cluster-r7" x="1146.8" y="556.8" textLength="73.2" clip-path="url(#breeze-k8s-create-cluster-line-22)">(TEXT)</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-22)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-22)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-23)">│</text><text class="breeze-k8s-create-cluster-r5" x="378.2" y="581.2" textLength="756.4" clip-path="url(#breeze-k8s-create-cluster-line-23)">[default:&#160;v1.30.10&#160;v1.31.6&#160;v1.32.3&#160;v1.33.0]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-23)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-23)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-24)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="605.6" textLength="170.8" clip-path="url(#breeze-k8s-create-cluster-line-24)">--skip-cleanup</text><text class="breeze-k8s-create-cluster-r1" x="378.2" y="605.6" textLength="732" clip-path="url(#breeze-k8s-create-cluster-line-24)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-24)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-24)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-25)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="630" textLength="207.4" clip-path="url(#breeze-k8s-create-cluster-line-25)">--debug-resources</text><text class="breeze-k8s-create-cluster-r1" x="378.2" y="630" textLength="768.6" clip-path="url(#breeze-k8s-create-cluster-line-25)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;running&#160;in&#160;parallel.</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-25)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-25)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-26)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="654.4" textLength="305" clip-path="url(#breeze-k8s-create-cluster-line-26)">--include-success-outputs</text><text class="breeze-k8s-create-cluster-r1" x="378.2" y="654.4" textLength="841.8" clip-path="url(#breeze-k8s-create-cluster-line-26)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;runs&#160;(not&#160;shown&#160;by&#160;default).</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-26)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-26)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="678.8" textLength="1464" clip-path="url(#breeze-k8s-create-cluster-line-27)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-27)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="703.2" textLength="24.4" clip-path="url(#breeze-k8s-create-cluster-line-28)">╭─</text><text class="breeze-k8s-create-cluster-r5" x="24.4" y="703.2" textLength="195.2" clip-path="url(#breeze-k8s-create-cluster-line-28)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-create-cluster-r5" x="219.6" y="703.2" textLength="1220" clip-path="url(#breeze-k8s-create-cluster-line-28)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-create-cluster-r5" x="1439.6" y="703.2" textLength="24.4" clip-path="url(#breeze-k8s-create-cluster-line-28)">─╮</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-28)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-29)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="727.6" textLength="109.8" clip-path="url(#breeze-k8s-create-cluster-line-29)">--verbose</text><text class="breeze-k8s-create-cluster-r6" x="158.6" y="727.6" textLength="24.4" clip-path="url(#breeze-k8s-create-cluster-line-29)">-v</text><text class="breeze-k8s-create-cluster-r1" x="207.4" y="727.6" textLength="585.6" clip-path="url(#breeze-k8s-create-cluster-line-29)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-29)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-29)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-30)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="752" textLength="109.8" clip-path="url(#breeze-k8s-create-cluster-line-30)">--dry-run</text><text class="breeze-k8s-create-cluster-r6" x="158.6" y="752" textLength="24.4" clip-path="url(#breeze-k8s-create-cluster-line-30)">-D</text><text class="breeze-k8s-create-cluster-r1" x="207.4" y="752" textLength="719.8" clip-path="url(#breeze-k8s-create-cluster-line-30)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-30)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-30)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-31)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="776.4" textLength="73.2" clip-path="url(#breeze-k8s-create-cluster-line-31)">--help</text><text class="breeze-k8s-create-cluster-r6" x="158.6" y="776.4" textLength="24.4" clip-path="url(#breeze-k8s-create-cluster-line-31)">-h</text><text class="breeze-k8s-create-cluster-r1" x="207.4" y="776.4" textLength="329.4" clip-path="url(#breeze-k8s-create-cluster-line-31)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-31)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-31)">
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="800.8" textLength="1464" clip-path="url(#breeze-k8s-create-cluster-line-32)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-32)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-6)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-create-cluster-line-6)">--python</text><text class="breeze-k8s-create-cluster-r6" x="341.6" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-create-cluster-line-6)">-p</text><text class="breeze-k8s-create-cluster-r1" x="390.4" y="166.4" textLength="732" clip-path="url(#breeze-k8s-create-cluster-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-create-cluster-r7" x="1134.6" y="166.4" textLength="268.4" clip-path="url(#breeze-k8s-create-cluster-line-6)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-6)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-6)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-7)">│</text><text class="breeze-k8s-create-cluster-r5" x="390.4" y="190.8" textLength="732" clip-path="url(#breeze-k8s-create-cluster-line-7)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-7)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-7)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-8)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="215.2" textLength="244" clip-path="url(#breeze-k8s-create-cluster-line-8)">--kubernetes-version</text><text class="breeze-k8s-create-cluster-r1" x="390.4" y="215.2" textLength="658.8" clip-path="url(#breeze-k8s-create-cluster-line-8)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-8)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-8)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-9)">│</text><text class="breeze-k8s-create-cluster-r7" x="390.4" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-create-cluster-line-9)">(&gt;v1.30.10&lt;&#160;|&#160;v1.31.6&#160;|&#160;v1.32.3&#160;|&#160;v1.33.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-9)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-9)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-10)">│</text><text class="breeze-k8s-create-cluster-r5" x="390.4" y="264" textLength="658.8" clip-path="url(#breeze-k8s-create-cluster-line-10)">[default:&#160;v1.30.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-10)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-10)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-11)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="288.4" textLength="292.8" clip-path="url(#breeze-k8s-create-cluster-line-11)">--force-recreate-cluster</text><text class="breeze-k8s-create-cluster-r1" x="390.4" y="288.4" textLength="756.4" clip-path="url(#breeze-k8s-create-cluster-line-11)">Force&#160;recreation&#160;of&#160;the&#160;cluster&#160;even&#160;if&#160;it&#160;is&#160;already&#160;created.</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-11)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-11)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="312.8" textLength="1464" clip-path="url(#breeze-k8s-create-cluster-line-12)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-12)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="337.2" textLength="24.4" clip-path="url(#breeze-k8s-create-cluster-line-13)">╭─</text><text class="breeze-k8s-create-cluster-r5" x="24.4" y="337.2" textLength="219.6" clip-path="url(#breeze-k8s-create-cluster-line-13)">&#160;Parallel&#160;options&#160;</text><text class="breeze-k8s-create-cluster-r5" x="244" y="337.2" textLength="1195.6" clip-path="url(#breeze-k8s-create-cluster-line-13)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-create-cluster-r5" x="1439.6" y="337.2" textLength="24.4" clip-path="url(#breeze-k8s-create-cluster-line-13)">─╮</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-13)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-14)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="361.6" textLength="207.4" clip-path="url(#breeze-k8s-create-cluster-line-14)">--run-in-parallel</text><text class="breeze-k8s-create-cluster-r1" x="378.2" y="361.6" textLength="854" clip-path="url(#breeze-k8s-create-cluster-line-14)">Run&#160;the&#160;operation&#160;in&#160;parallel&#160;on&#160;all&#160;or&#160;selected&#160;subset&#160;of&#160;parameters.</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-14)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-14)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-15)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="386" textLength="158.6" clip-path="url(#breeze-k8s-create-cluster-line-15)">--parallelism</text><text class="breeze-k8s-create-cluster-r1" x="378.2" y="386" textLength="1061.4" clip-path="url(#breeze-k8s-create-cluster-line-15)">Maximum&#160;number&#160;of&#160;processes&#160;to&#160;use&#160;while&#160;running&#160;the&#160;operation&#160;in&#160;parallel&#160;for&#160;cluster&#160;</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-15)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-15)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-16)">│</text><text class="breeze-k8s-create-cluster-r1" x="378.2" y="410.4" textLength="1061.4" clip-path="url(#breeze-k8s-create-cluster-line-16)">operations.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-16)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-16)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-17)">│</text><text class="breeze-k8s-create-cluster-r7" x="378.2" y="434.8" textLength="1061.4" clip-path="url(#breeze-k8s-create-cluster-line-17)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-17)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-17)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-18)">│</text><text class="breeze-k8s-create-cluster-r5" x="378.2" y="459.2" textLength="1061.4" clip-path="url(#breeze-k8s-create-cluster-line-18)">[default:&#160;2;&#160;1&lt;=x&lt;=4]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-18)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-18)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-19)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="483.6" textLength="207.4" clip-path="url(#breeze-k8s-create-cluster-line-19)">--python-versions</text><text class="breeze-k8s-create-cluster-r1" x="378.2" y="483.6" textLength="951.6" clip-path="url(#breeze-k8s-create-cluster-line-19)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;for&#160;build&#160;with&#160;multiple&#160;versions.</text><text class="breeze-k8s-create-cluster-r7" x="1342" y="483.6" textLength="73.2" clip-path="url(#breeze-k8s-create-cluster-line-19)">(TEXT)</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-19)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-19)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-20)">│</text><text class="breeze-k8s-create-cluster-r5" x="378.2" y="508" textLength="951.6" clip-path="url(#breeze-k8s-create-cluster-line-20)">[default:&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-20)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-20)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-21)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="532.4" textLength="256.2" clip-path="url(#breeze-k8s-create-cluster-line-21)">--kubernetes-versions</text><text class="breeze-k8s-create-cluster-r1" x="378.2" y="532.4" textLength="756.4" clip-path="url(#breeze-k8s-create-cluster-line-21)">Kubernetes&#160;versions&#160;used&#160;to&#160;run&#160;in&#160;parallel&#160;(space&#160;separated).</text><text class="breeze-k8s-create-cluster-r7" x="1146.8" y="532.4" textLength="73.2" clip-path="url(#breeze-k8s-create-cluster-line-21)">(TEXT)</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-21)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-21)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-22)">│</text><text class="breeze-k8s-create-cluster-r5" x="378.2" y="556.8" textLength="756.4" clip-path="url(#breeze-k8s-create-cluster-line-22)">[default:&#160;v1.30.10&#160;v1.31.6&#160;v1.32.3&#160;v1.33.0]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-22)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-22)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-23)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="581.2" textLength="170.8" clip-path="url(#breeze-k8s-create-cluster-line-23)">--skip-cleanup</text><text class="breeze-k8s-create-cluster-r1" x="378.2" y="581.2" textLength="732" clip-path="url(#breeze-k8s-create-cluster-line-23)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-23)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-23)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-24)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="605.6" textLength="207.4" clip-path="url(#breeze-k8s-create-cluster-line-24)">--debug-resources</text><text class="breeze-k8s-create-cluster-r1" x="378.2" y="605.6" textLength="768.6" clip-path="url(#breeze-k8s-create-cluster-line-24)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;running&#160;in&#160;parallel.</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-24)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-24)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-25)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="630" textLength="305" clip-path="url(#breeze-k8s-create-cluster-line-25)">--include-success-outputs</text><text class="breeze-k8s-create-cluster-r1" x="378.2" y="630" textLength="841.8" clip-path="url(#breeze-k8s-create-cluster-line-25)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;runs&#160;(not&#160;shown&#160;by&#160;default).</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-25)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-25)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="654.4" textLength="1464" clip-path="url(#breeze-k8s-create-cluster-line-26)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-26)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="678.8" textLength="24.4" clip-path="url(#breeze-k8s-create-cluster-line-27)">╭─</text><text class="breeze-k8s-create-cluster-r5" x="24.4" y="678.8" textLength="195.2" clip-path="url(#breeze-k8s-create-cluster-line-27)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-create-cluster-r5" x="219.6" y="678.8" textLength="1220" clip-path="url(#breeze-k8s-create-cluster-line-27)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-create-cluster-r5" x="1439.6" y="678.8" textLength="24.4" clip-path="url(#breeze-k8s-create-cluster-line-27)">─╮</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-27)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-28)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="703.2" textLength="109.8" clip-path="url(#breeze-k8s-create-cluster-line-28)">--verbose</text><text class="breeze-k8s-create-cluster-r6" x="158.6" y="703.2" textLength="24.4" clip-path="url(#breeze-k8s-create-cluster-line-28)">-v</text><text class="breeze-k8s-create-cluster-r1" x="207.4" y="703.2" textLength="585.6" clip-path="url(#breeze-k8s-create-cluster-line-28)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-28)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-28)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-29)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="727.6" textLength="109.8" clip-path="url(#breeze-k8s-create-cluster-line-29)">--dry-run</text><text class="breeze-k8s-create-cluster-r6" x="158.6" y="727.6" textLength="24.4" clip-path="url(#breeze-k8s-create-cluster-line-29)">-D</text><text class="breeze-k8s-create-cluster-r1" x="207.4" y="727.6" textLength="719.8" clip-path="url(#breeze-k8s-create-cluster-line-29)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-29)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-29)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-30)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="752" textLength="73.2" clip-path="url(#breeze-k8s-create-cluster-line-30)">--help</text><text class="breeze-k8s-create-cluster-r6" x="158.6" y="752" textLength="24.4" clip-path="url(#breeze-k8s-create-cluster-line-30)">-h</text><text class="breeze-k8s-create-cluster-r1" x="207.4" y="752" textLength="329.4" clip-path="url(#breeze-k8s-create-cluster-line-30)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-30)">│</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-30)">
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="776.4" textLength="1464" clip-path="url(#breeze-k8s-create-cluster-line-31)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-create-cluster-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-31)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_k8s_create-cluster.txt b/dev/breeze/doc/images/output_k8s_create-cluster.txt
index d2f2860f3fd7b..8d6330198c8b5 100644
--- a/dev/breeze/doc/images/output_k8s_create-cluster.txt
+++ b/dev/breeze/doc/images/output_k8s_create-cluster.txt
@@ -1 +1 @@
-c1dd4f0cd63b22815f6539166489e920
+10b1e7982d783b404e854b6bccec5787
diff --git a/dev/breeze/doc/images/output_k8s_delete-cluster.svg b/dev/breeze/doc/images/output_k8s_delete-cluster.svg
index 702c07b1c078e..0dbc5d38b1aea 100644
--- a/dev/breeze/doc/images/output_k8s_delete-cluster.svg
+++ b/dev/breeze/doc/images/output_k8s_delete-cluster.svg
@@ -114,8 +114,8 @@
 </text><text class="breeze-k8s-delete-cluster-r1" x="12.2" y="93.2" textLength="707.6" clip-path="url(#breeze-k8s-delete-cluster-line-3)">Delete&#160;the&#160;current&#160;KinD&#160;Cluster&#160;(optionally&#160;all&#160;clusters).</text><text class="breeze-k8s-delete-cluster-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-3)">
 </text><text class="breeze-k8s-delete-cluster-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-4)">
 </text><text class="breeze-k8s-delete-cluster-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-k8s-delete-cluster-line-5)">╭─</text><text class="breeze-k8s-delete-cluster-r5" x="24.4" y="142" textLength="317.2" clip-path="url(#breeze-k8s-delete-cluster-line-5)">&#160;K8S&#160;cluster&#160;delete&#160;flags&#160;</text><text class="breeze-k8s-delete-cluster-r5" x="341.6" y="142" textLength="1098" clip-path="url(#breeze-k8s-delete-cluster-line-5)">──────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-delete-cluster-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-k8s-delete-cluster-line-5)">─╮</text><text class="breeze-k8s-delete-cluster-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-5)">
-</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-6)">│</text><text class="breeze-k8s-delete-cluster-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-delete-cluster-line-6)">--python</text><text class="breeze-k8s-delete-cluster-r6" x="292.8" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-delete-cluster-line-6)">-p</text><text class="breeze-k8s-delete-cluster-r1" x="341.6" y="166.4" textLength="732" clip-path="url(#breeze-k8s-delete-cluster-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-delete-cluster-r7" x="1085.8" y="166.4" textLength="341.6" clip-path="url(#breeze-k8s-delete-cluster-line-6)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-k8s-delete-cluster-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-6)">│</text><text class="breeze-k8s-delete-cluster-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-6)">
-</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-7)">│</text><text class="breeze-k8s-delete-cluster-r5" x="341.6" y="190.8" textLength="732" clip-path="url(#breeze-k8s-delete-cluster-line-7)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-delete-cluster-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-7)">│</text><text class="breeze-k8s-delete-cluster-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-7)">
+</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-6)">│</text><text class="breeze-k8s-delete-cluster-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-delete-cluster-line-6)">--python</text><text class="breeze-k8s-delete-cluster-r6" x="292.8" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-delete-cluster-line-6)">-p</text><text class="breeze-k8s-delete-cluster-r1" x="341.6" y="166.4" textLength="732" clip-path="url(#breeze-k8s-delete-cluster-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-delete-cluster-r7" x="1085.8" y="166.4" textLength="268.4" clip-path="url(#breeze-k8s-delete-cluster-line-6)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-k8s-delete-cluster-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-6)">│</text><text class="breeze-k8s-delete-cluster-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-6)">
+</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-7)">│</text><text class="breeze-k8s-delete-cluster-r5" x="341.6" y="190.8" textLength="732" clip-path="url(#breeze-k8s-delete-cluster-line-7)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-delete-cluster-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-7)">│</text><text class="breeze-k8s-delete-cluster-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-7)">
 </text><text class="breeze-k8s-delete-cluster-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-8)">│</text><text class="breeze-k8s-delete-cluster-r4" x="24.4" y="215.2" textLength="244" clip-path="url(#breeze-k8s-delete-cluster-line-8)">--kubernetes-version</text><text class="breeze-k8s-delete-cluster-r1" x="341.6" y="215.2" textLength="658.8" clip-path="url(#breeze-k8s-delete-cluster-line-8)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text class="breeze-k8s-delete-cluster-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-8)">│</text><text class="breeze-k8s-delete-cluster-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-8)">
 </text><text class="breeze-k8s-delete-cluster-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-9)">│</text><text class="breeze-k8s-delete-cluster-r7" x="341.6" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-delete-cluster-line-9)">(&gt;v1.30.10&lt;&#160;|&#160;v1.31.6&#160;|&#160;v1.32.3&#160;|&#160;v1.33.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-delete-cluster-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-9)">│</text><text class="breeze-k8s-delete-cluster-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-9)">
 </text><text class="breeze-k8s-delete-cluster-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-10)">│</text><text class="breeze-k8s-delete-cluster-r5" x="341.6" y="264" textLength="658.8" clip-path="url(#breeze-k8s-delete-cluster-line-10)">[default:&#160;v1.30.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-delete-cluster-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-10)">│</text><text class="breeze-k8s-delete-cluster-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-10)">
diff --git a/dev/breeze/doc/images/output_k8s_delete-cluster.txt b/dev/breeze/doc/images/output_k8s_delete-cluster.txt
index 98a79ed1bd48d..169719432d2ff 100644
--- a/dev/breeze/doc/images/output_k8s_delete-cluster.txt
+++ b/dev/breeze/doc/images/output_k8s_delete-cluster.txt
@@ -1 +1 @@
-d566a2a557cff3850c7ce81368bd08a2
+ad0eea9be87ef3d5451698aab8a25358
diff --git a/dev/breeze/doc/images/output_k8s_deploy-airflow.svg b/dev/breeze/doc/images/output_k8s_deploy-airflow.svg
index 40ff39b7a420d..e517993e03a1c 100644
--- a/dev/breeze/doc/images/output_k8s_deploy-airflow.svg
+++ b/dev/breeze/doc/images/output_k8s_deploy-airflow.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1026.0" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 1001.5999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-k8s-deploy-airflow-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="975.0" />
+      <rect x="0" y="0" width="1463.0" height="950.5999999999999" />
     </clipPath>
     <clipPath id="breeze-k8s-deploy-airflow-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -159,12 +159,9 @@
 <clipPath id="breeze-k8s-deploy-airflow-line-37">
     <rect x="0" y="904.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="breeze-k8s-deploy-airflow-line-38">
-    <rect x="0" y="928.7" width="1464" height="24.65"/>
-            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1024" rx="8"/><text class="breeze-k8s-deploy-airflow-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;deploy-airflow</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="999.6" rx="8"/><text class="breeze-k8s-deploy-airflow-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;deploy-airflow</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -180,40 +177,39 @@
 </text><text class="breeze-k8s-deploy-airflow-r1" x="12.2" y="93.2" textLength="817.4" clip-path="url(#breeze-k8s-deploy-airflow-line-3)">Deploy&#160;airflow&#160;image&#160;to&#160;the&#160;current&#160;KinD&#160;cluster&#160;(or&#160;all&#160;clusters).</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-3)">
 </text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-4)">
 </text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-5)">╭─</text><text class="breeze-k8s-deploy-airflow-r5" x="24.4" y="142" textLength="268.4" clip-path="url(#breeze-k8s-deploy-airflow-line-5)">&#160;Airflow&#160;deploy&#160;flags&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="292.8" y="142" textLength="1146.8" clip-path="url(#breeze-k8s-deploy-airflow-line-5)">──────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-deploy-airflow-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-5)">─╮</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-5)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-6)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-deploy-airflow-line-6)">--python</text><text class="breeze-k8s-deploy-airflow-r6" x="317.2" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-6)">-p</text><text class="breeze-k8s-deploy-airflow-r1" x="366" y="166.4" textLength="732" clip-path="url(#breeze-k8s-deploy-airflow-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-6)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-6)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-7)">│</text><text class="breeze-k8s-deploy-airflow-r7" x="366" y="190.8" textLength="732" clip-path="url(#breeze-k8s-deploy-airflow-line-7)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-7)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-7)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-8)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="366" y="215.2" textLength="732" clip-path="url(#breeze-k8s-deploy-airflow-line-8)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-8)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-8)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-9)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="239.6" textLength="244" clip-path="url(#breeze-k8s-deploy-airflow-line-9)">--kubernetes-version</text><text class="breeze-k8s-deploy-airflow-r1" x="366" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-deploy-airflow-line-9)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-9)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-9)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-10)">│</text><text class="breeze-k8s-deploy-airflow-r7" x="366" y="264" textLength="658.8" clip-path="url(#breeze-k8s-deploy-airflow-line-10)">(&gt;v1.30.10&lt;&#160;|&#160;v1.31.6&#160;|&#160;v1.32.3&#160;|&#160;v1.33.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-10)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-10)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-11)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="366" y="288.4" textLength="658.8" clip-path="url(#breeze-k8s-deploy-airflow-line-11)">[default:&#160;v1.30.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-11)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-11)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-12)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="312.8" textLength="122" clip-path="url(#breeze-k8s-deploy-airflow-line-12)">--executor</text><text class="breeze-k8s-deploy-airflow-r1" x="366" y="312.8" textLength="1073.6" clip-path="url(#breeze-k8s-deploy-airflow-line-12)">Executor&#160;to&#160;use&#160;for&#160;a&#160;kubernetes&#160;cluster.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-12)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-12)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-13)">│</text><text class="breeze-k8s-deploy-airflow-r7" x="366" y="337.2" textLength="1073.6" clip-path="url(#breeze-k8s-deploy-airflow-line-13)">(&gt;LocalExecutor&lt;&#160;|&#160;KubernetesExecutor&#160;|&#160;CeleryExecutor&#160;|&#160;CeleryKubernetesExecutor&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-13)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-13)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-14)">│</text><text class="breeze-k8s-deploy-airflow-r7" x="366" y="361.6" textLength="1073.6" clip-path="url(#breeze-k8s-deploy-airflow-line-14)">EdgeExecutor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-14)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-14)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-15)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="366" y="386" textLength="1073.6" clip-path="url(#breeze-k8s-deploy-airflow-line-15)">[default:&#160;LocalExecutor]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-15)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-15)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-16)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="410.4" textLength="109.8" clip-path="url(#breeze-k8s-deploy-airflow-line-16)">--upgrade</text><text class="breeze-k8s-deploy-airflow-r1" x="366" y="410.4" textLength="549" clip-path="url(#breeze-k8s-deploy-airflow-line-16)">Upgrade&#160;Helm&#160;Chart&#160;rather&#160;than&#160;installing&#160;it.</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-16)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-16)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-17)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="434.8" textLength="268.4" clip-path="url(#breeze-k8s-deploy-airflow-line-17)">--wait-time-in-seconds</text><text class="breeze-k8s-deploy-airflow-r1" x="366" y="434.8" textLength="732" clip-path="url(#breeze-k8s-deploy-airflow-line-17)">Wait&#160;for&#160;Airflow&#160;api-server&#160;for&#160;specified&#160;number&#160;of&#160;seconds.</text><text class="breeze-k8s-deploy-airflow-r7" x="1110.2" y="434.8" textLength="183" clip-path="url(#breeze-k8s-deploy-airflow-line-17)">(INTEGER&#160;RANGE)</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-17)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-17)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-18)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="459.2" textLength="256.2" clip-path="url(#breeze-k8s-deploy-airflow-line-18)">--use-standard-naming</text><text class="breeze-k8s-deploy-airflow-r1" x="366" y="459.2" textLength="244" clip-path="url(#breeze-k8s-deploy-airflow-line-18)">Use&#160;standard&#160;naming.</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-18)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-18)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-19)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="483.6" textLength="268.4" clip-path="url(#breeze-k8s-deploy-airflow-line-19)">--multi-namespace-mode</text><text class="breeze-k8s-deploy-airflow-r1" x="366" y="483.6" textLength="305" clip-path="url(#breeze-k8s-deploy-airflow-line-19)">Use&#160;multi&#160;namespace&#160;mode.</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-19)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-19)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="508" textLength="1464" clip-path="url(#breeze-k8s-deploy-airflow-line-20)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-20)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="532.4" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-21)">╭─</text><text class="breeze-k8s-deploy-airflow-r5" x="24.4" y="532.4" textLength="219.6" clip-path="url(#breeze-k8s-deploy-airflow-line-21)">&#160;Parallel&#160;options&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="244" y="532.4" textLength="1195.6" clip-path="url(#breeze-k8s-deploy-airflow-line-21)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-deploy-airflow-r5" x="1439.6" y="532.4" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-21)">─╮</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-21)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-22)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="556.8" textLength="207.4" clip-path="url(#breeze-k8s-deploy-airflow-line-22)">--run-in-parallel</text><text class="breeze-k8s-deploy-airflow-r1" x="378.2" y="556.8" textLength="854" clip-path="url(#breeze-k8s-deploy-airflow-line-22)">Run&#160;the&#160;operation&#160;in&#160;parallel&#160;on&#160;all&#160;or&#160;selected&#160;subset&#160;of&#160;parameters.</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-22)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-22)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-23)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="581.2" textLength="158.6" clip-path="url(#breeze-k8s-deploy-airflow-line-23)">--parallelism</text><text class="breeze-k8s-deploy-airflow-r1" x="378.2" y="581.2" textLength="1061.4" clip-path="url(#breeze-k8s-deploy-airflow-line-23)">Maximum&#160;number&#160;of&#160;processes&#160;to&#160;use&#160;while&#160;running&#160;the&#160;operation&#160;in&#160;parallel&#160;for&#160;cluster&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-23)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-23)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-24)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="378.2" y="605.6" textLength="1061.4" clip-path="url(#breeze-k8s-deploy-airflow-line-24)">operations.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-24)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-24)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-25)">│</text><text class="breeze-k8s-deploy-airflow-r7" x="378.2" y="630" textLength="1061.4" clip-path="url(#breeze-k8s-deploy-airflow-line-25)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-25)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-25)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-26)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="378.2" y="654.4" textLength="1061.4" clip-path="url(#breeze-k8s-deploy-airflow-line-26)">[default:&#160;2;&#160;1&lt;=x&lt;=4]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-26)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-26)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-27)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="678.8" textLength="207.4" clip-path="url(#breeze-k8s-deploy-airflow-line-27)">--python-versions</text><text class="breeze-k8s-deploy-airflow-r1" x="378.2" y="678.8" textLength="951.6" clip-path="url(#breeze-k8s-deploy-airflow-line-27)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;for&#160;build&#160;with&#160;multiple&#160;versions.</text><text class="breeze-k8s-deploy-airflow-r7" x="1342" y="678.8" textLength="73.2" clip-path="url(#breeze-k8s-deploy-airflow-line-27)">(TEXT)</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-27)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-27)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-28)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="378.2" y="703.2" textLength="951.6" clip-path="url(#breeze-k8s-deploy-airflow-line-28)">[default:&#160;3.9&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-28)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-28)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-29)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="727.6" textLength="256.2" clip-path="url(#breeze-k8s-deploy-airflow-line-29)">--kubernetes-versions</text><text class="breeze-k8s-deploy-airflow-r1" x="378.2" y="727.6" textLength="756.4" clip-path="url(#breeze-k8s-deploy-airflow-line-29)">Kubernetes&#160;versions&#160;used&#160;to&#160;run&#160;in&#160;parallel&#160;(space&#160;separated).</text><text class="breeze-k8s-deploy-airflow-r7" x="1146.8" y="727.6" textLength="73.2" clip-path="url(#breeze-k8s-deploy-airflow-line-29)">(TEXT)</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-29)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-29)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-30)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="378.2" y="752" textLength="756.4" clip-path="url(#breeze-k8s-deploy-airflow-line-30)">[default:&#160;v1.30.10&#160;v1.31.6&#160;v1.32.3&#160;v1.33.0]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-30)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-30)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-31)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="776.4" textLength="170.8" clip-path="url(#breeze-k8s-deploy-airflow-line-31)">--skip-cleanup</text><text class="breeze-k8s-deploy-airflow-r1" x="378.2" y="776.4" textLength="732" clip-path="url(#breeze-k8s-deploy-airflow-line-31)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-31)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-31)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-32)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="800.8" textLength="207.4" clip-path="url(#breeze-k8s-deploy-airflow-line-32)">--debug-resources</text><text class="breeze-k8s-deploy-airflow-r1" x="378.2" y="800.8" textLength="768.6" clip-path="url(#breeze-k8s-deploy-airflow-line-32)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;running&#160;in&#160;parallel.</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-32)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-32)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-33)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="825.2" textLength="305" clip-path="url(#breeze-k8s-deploy-airflow-line-33)">--include-success-outputs</text><text class="breeze-k8s-deploy-airflow-r1" x="378.2" y="825.2" textLength="841.8" clip-path="url(#breeze-k8s-deploy-airflow-line-33)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;runs&#160;(not&#160;shown&#160;by&#160;default).</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-33)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-33)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="849.6" textLength="1464" clip-path="url(#breeze-k8s-deploy-airflow-line-34)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-34)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="874" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-35)">╭─</text><text class="breeze-k8s-deploy-airflow-r5" x="24.4" y="874" textLength="195.2" clip-path="url(#breeze-k8s-deploy-airflow-line-35)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="219.6" y="874" textLength="1220" clip-path="url(#breeze-k8s-deploy-airflow-line-35)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-deploy-airflow-r5" x="1439.6" y="874" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-35)">─╮</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-35)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-36)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="898.4" textLength="109.8" clip-path="url(#breeze-k8s-deploy-airflow-line-36)">--verbose</text><text class="breeze-k8s-deploy-airflow-r6" x="158.6" y="898.4" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-36)">-v</text><text class="breeze-k8s-deploy-airflow-r1" x="207.4" y="898.4" textLength="585.6" clip-path="url(#breeze-k8s-deploy-airflow-line-36)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="898.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-36)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-36)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-37)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="922.8" textLength="109.8" clip-path="url(#breeze-k8s-deploy-airflow-line-37)">--dry-run</text><text class="breeze-k8s-deploy-airflow-r6" x="158.6" y="922.8" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-37)">-D</text><text class="breeze-k8s-deploy-airflow-r1" x="207.4" y="922.8" textLength="719.8" clip-path="url(#breeze-k8s-deploy-airflow-line-37)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="922.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-37)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-37)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-38)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="947.2" textLength="73.2" clip-path="url(#breeze-k8s-deploy-airflow-line-38)">--help</text><text class="breeze-k8s-deploy-airflow-r6" x="158.6" y="947.2" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-38)">-h</text><text class="breeze-k8s-deploy-airflow-r1" x="207.4" y="947.2" textLength="329.4" clip-path="url(#breeze-k8s-deploy-airflow-line-38)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="947.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-38)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-38)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="971.6" textLength="1464" clip-path="url(#breeze-k8s-deploy-airflow-line-39)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-39)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-6)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-deploy-airflow-line-6)">--python</text><text class="breeze-k8s-deploy-airflow-r6" x="317.2" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-6)">-p</text><text class="breeze-k8s-deploy-airflow-r1" x="366" y="166.4" textLength="732" clip-path="url(#breeze-k8s-deploy-airflow-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-deploy-airflow-r7" x="1110.2" y="166.4" textLength="268.4" clip-path="url(#breeze-k8s-deploy-airflow-line-6)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-6)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-6)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-7)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="366" y="190.8" textLength="732" clip-path="url(#breeze-k8s-deploy-airflow-line-7)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-7)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-7)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-8)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="215.2" textLength="244" clip-path="url(#breeze-k8s-deploy-airflow-line-8)">--kubernetes-version</text><text class="breeze-k8s-deploy-airflow-r1" x="366" y="215.2" textLength="658.8" clip-path="url(#breeze-k8s-deploy-airflow-line-8)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-8)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-8)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-9)">│</text><text class="breeze-k8s-deploy-airflow-r7" x="366" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-deploy-airflow-line-9)">(&gt;v1.30.10&lt;&#160;|&#160;v1.31.6&#160;|&#160;v1.32.3&#160;|&#160;v1.33.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-9)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-9)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-10)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="366" y="264" textLength="658.8" clip-path="url(#breeze-k8s-deploy-airflow-line-10)">[default:&#160;v1.30.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-10)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-10)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-11)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="288.4" textLength="122" clip-path="url(#breeze-k8s-deploy-airflow-line-11)">--executor</text><text class="breeze-k8s-deploy-airflow-r1" x="366" y="288.4" textLength="1073.6" clip-path="url(#breeze-k8s-deploy-airflow-line-11)">Executor&#160;to&#160;use&#160;for&#160;a&#160;kubernetes&#160;cluster.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-11)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-11)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-12)">│</text><text class="breeze-k8s-deploy-airflow-r7" x="366" y="312.8" textLength="1073.6" clip-path="url(#breeze-k8s-deploy-airflow-line-12)">(&gt;LocalExecutor&lt;&#160;|&#160;KubernetesExecutor&#160;|&#160;CeleryExecutor&#160;|&#160;CeleryKubernetesExecutor&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-12)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-12)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-13)">│</text><text class="breeze-k8s-deploy-airflow-r7" x="366" y="337.2" textLength="1073.6" clip-path="url(#breeze-k8s-deploy-airflow-line-13)">EdgeExecutor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-13)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-13)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-14)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="366" y="361.6" textLength="1073.6" clip-path="url(#breeze-k8s-deploy-airflow-line-14)">[default:&#160;LocalExecutor]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-14)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-14)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-15)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="386" textLength="109.8" clip-path="url(#breeze-k8s-deploy-airflow-line-15)">--upgrade</text><text class="breeze-k8s-deploy-airflow-r1" x="366" y="386" textLength="549" clip-path="url(#breeze-k8s-deploy-airflow-line-15)">Upgrade&#160;Helm&#160;Chart&#160;rather&#160;than&#160;installing&#160;it.</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-15)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-15)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-16)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="410.4" textLength="268.4" clip-path="url(#breeze-k8s-deploy-airflow-line-16)">--wait-time-in-seconds</text><text class="breeze-k8s-deploy-airflow-r1" x="366" y="410.4" textLength="732" clip-path="url(#breeze-k8s-deploy-airflow-line-16)">Wait&#160;for&#160;Airflow&#160;api-server&#160;for&#160;specified&#160;number&#160;of&#160;seconds.</text><text class="breeze-k8s-deploy-airflow-r7" x="1110.2" y="410.4" textLength="183" clip-path="url(#breeze-k8s-deploy-airflow-line-16)">(INTEGER&#160;RANGE)</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-16)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-16)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-17)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="434.8" textLength="256.2" clip-path="url(#breeze-k8s-deploy-airflow-line-17)">--use-standard-naming</text><text class="breeze-k8s-deploy-airflow-r1" x="366" y="434.8" textLength="244" clip-path="url(#breeze-k8s-deploy-airflow-line-17)">Use&#160;standard&#160;naming.</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-17)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-17)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-18)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="459.2" textLength="268.4" clip-path="url(#breeze-k8s-deploy-airflow-line-18)">--multi-namespace-mode</text><text class="breeze-k8s-deploy-airflow-r1" x="366" y="459.2" textLength="305" clip-path="url(#breeze-k8s-deploy-airflow-line-18)">Use&#160;multi&#160;namespace&#160;mode.</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-18)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-18)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="483.6" textLength="1464" clip-path="url(#breeze-k8s-deploy-airflow-line-19)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-19)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="508" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-20)">╭─</text><text class="breeze-k8s-deploy-airflow-r5" x="24.4" y="508" textLength="219.6" clip-path="url(#breeze-k8s-deploy-airflow-line-20)">&#160;Parallel&#160;options&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="244" y="508" textLength="1195.6" clip-path="url(#breeze-k8s-deploy-airflow-line-20)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-deploy-airflow-r5" x="1439.6" y="508" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-20)">─╮</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-20)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-21)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="532.4" textLength="207.4" clip-path="url(#breeze-k8s-deploy-airflow-line-21)">--run-in-parallel</text><text class="breeze-k8s-deploy-airflow-r1" x="378.2" y="532.4" textLength="854" clip-path="url(#breeze-k8s-deploy-airflow-line-21)">Run&#160;the&#160;operation&#160;in&#160;parallel&#160;on&#160;all&#160;or&#160;selected&#160;subset&#160;of&#160;parameters.</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-21)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-21)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-22)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="556.8" textLength="158.6" clip-path="url(#breeze-k8s-deploy-airflow-line-22)">--parallelism</text><text class="breeze-k8s-deploy-airflow-r1" x="378.2" y="556.8" textLength="1061.4" clip-path="url(#breeze-k8s-deploy-airflow-line-22)">Maximum&#160;number&#160;of&#160;processes&#160;to&#160;use&#160;while&#160;running&#160;the&#160;operation&#160;in&#160;parallel&#160;for&#160;cluster&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-22)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-22)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-23)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="378.2" y="581.2" textLength="1061.4" clip-path="url(#breeze-k8s-deploy-airflow-line-23)">operations.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-23)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-23)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-24)">│</text><text class="breeze-k8s-deploy-airflow-r7" x="378.2" y="605.6" textLength="1061.4" clip-path="url(#breeze-k8s-deploy-airflow-line-24)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-24)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-24)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-25)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="378.2" y="630" textLength="1061.4" clip-path="url(#breeze-k8s-deploy-airflow-line-25)">[default:&#160;2;&#160;1&lt;=x&lt;=4]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-25)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-25)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-26)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="654.4" textLength="207.4" clip-path="url(#breeze-k8s-deploy-airflow-line-26)">--python-versions</text><text class="breeze-k8s-deploy-airflow-r1" x="378.2" y="654.4" textLength="951.6" clip-path="url(#breeze-k8s-deploy-airflow-line-26)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;for&#160;build&#160;with&#160;multiple&#160;versions.</text><text class="breeze-k8s-deploy-airflow-r7" x="1342" y="654.4" textLength="73.2" clip-path="url(#breeze-k8s-deploy-airflow-line-26)">(TEXT)</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-26)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-26)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-27)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="378.2" y="678.8" textLength="951.6" clip-path="url(#breeze-k8s-deploy-airflow-line-27)">[default:&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-27)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-27)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-28)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="703.2" textLength="256.2" clip-path="url(#breeze-k8s-deploy-airflow-line-28)">--kubernetes-versions</text><text class="breeze-k8s-deploy-airflow-r1" x="378.2" y="703.2" textLength="756.4" clip-path="url(#breeze-k8s-deploy-airflow-line-28)">Kubernetes&#160;versions&#160;used&#160;to&#160;run&#160;in&#160;parallel&#160;(space&#160;separated).</text><text class="breeze-k8s-deploy-airflow-r7" x="1146.8" y="703.2" textLength="73.2" clip-path="url(#breeze-k8s-deploy-airflow-line-28)">(TEXT)</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-28)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-28)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-29)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="378.2" y="727.6" textLength="756.4" clip-path="url(#breeze-k8s-deploy-airflow-line-29)">[default:&#160;v1.30.10&#160;v1.31.6&#160;v1.32.3&#160;v1.33.0]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-29)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-29)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-30)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="752" textLength="170.8" clip-path="url(#breeze-k8s-deploy-airflow-line-30)">--skip-cleanup</text><text class="breeze-k8s-deploy-airflow-r1" x="378.2" y="752" textLength="732" clip-path="url(#breeze-k8s-deploy-airflow-line-30)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-30)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-30)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-31)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="776.4" textLength="207.4" clip-path="url(#breeze-k8s-deploy-airflow-line-31)">--debug-resources</text><text class="breeze-k8s-deploy-airflow-r1" x="378.2" y="776.4" textLength="768.6" clip-path="url(#breeze-k8s-deploy-airflow-line-31)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;running&#160;in&#160;parallel.</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-31)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-31)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-32)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="800.8" textLength="305" clip-path="url(#breeze-k8s-deploy-airflow-line-32)">--include-success-outputs</text><text class="breeze-k8s-deploy-airflow-r1" x="378.2" y="800.8" textLength="841.8" clip-path="url(#breeze-k8s-deploy-airflow-line-32)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;runs&#160;(not&#160;shown&#160;by&#160;default).</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-32)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-32)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="825.2" textLength="1464" clip-path="url(#breeze-k8s-deploy-airflow-line-33)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-33)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="849.6" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-34)">╭─</text><text class="breeze-k8s-deploy-airflow-r5" x="24.4" y="849.6" textLength="195.2" clip-path="url(#breeze-k8s-deploy-airflow-line-34)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="219.6" y="849.6" textLength="1220" clip-path="url(#breeze-k8s-deploy-airflow-line-34)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-deploy-airflow-r5" x="1439.6" y="849.6" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-34)">─╮</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-34)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-35)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="874" textLength="109.8" clip-path="url(#breeze-k8s-deploy-airflow-line-35)">--verbose</text><text class="breeze-k8s-deploy-airflow-r6" x="158.6" y="874" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-35)">-v</text><text class="breeze-k8s-deploy-airflow-r1" x="207.4" y="874" textLength="585.6" clip-path="url(#breeze-k8s-deploy-airflow-line-35)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="874" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-35)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-35)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-36)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="898.4" textLength="109.8" clip-path="url(#breeze-k8s-deploy-airflow-line-36)">--dry-run</text><text class="breeze-k8s-deploy-airflow-r6" x="158.6" y="898.4" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-36)">-D</text><text class="breeze-k8s-deploy-airflow-r1" x="207.4" y="898.4" textLength="719.8" clip-path="url(#breeze-k8s-deploy-airflow-line-36)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="898.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-36)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-36)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-37)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="922.8" textLength="73.2" clip-path="url(#breeze-k8s-deploy-airflow-line-37)">--help</text><text class="breeze-k8s-deploy-airflow-r6" x="158.6" y="922.8" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-37)">-h</text><text class="breeze-k8s-deploy-airflow-r1" x="207.4" y="922.8" textLength="329.4" clip-path="url(#breeze-k8s-deploy-airflow-line-37)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="922.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-37)">│</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-37)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="947.2" textLength="1464" clip-path="url(#breeze-k8s-deploy-airflow-line-38)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-38)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_k8s_deploy-airflow.txt b/dev/breeze/doc/images/output_k8s_deploy-airflow.txt
index af7477cff44d8..9b82b31144831 100644
--- a/dev/breeze/doc/images/output_k8s_deploy-airflow.txt
+++ b/dev/breeze/doc/images/output_k8s_deploy-airflow.txt
@@ -1 +1 @@
-6658e1cb44fcd486de6e9d7170ea92ac
+c31bffdf3bba32ed1278cd59f20c2faf
diff --git a/dev/breeze/doc/images/output_k8s_k9s.svg b/dev/breeze/doc/images/output_k8s_k9s.svg
index e3aab67c929a3..c3b3058d3fbc9 100644
--- a/dev/breeze/doc/images/output_k8s_k9s.svg
+++ b/dev/breeze/doc/images/output_k8s_k9s.svg
@@ -119,8 +119,8 @@
 </text><text class="breeze-k8s-k9s-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-k8s-k9s-line-5)">╭─</text><text class="breeze-k8s-k9s-r5" x="24.4" y="142" textLength="183" clip-path="url(#breeze-k8s-k9s-line-5)">&#160;K8S&#160;k9s&#160;flags&#160;</text><text class="breeze-k8s-k9s-r5" x="207.4" y="142" textLength="1232.2" clip-path="url(#breeze-k8s-k9s-line-5)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-k9s-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-k8s-k9s-line-5)">─╮</text><text class="breeze-k8s-k9s-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-5)">
 </text><text class="breeze-k8s-k9s-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-6)">│</text><text class="breeze-k8s-k9s-r4" x="24.4" y="166.4" textLength="146.4" clip-path="url(#breeze-k8s-k9s-line-6)">--use-docker</text><text class="breeze-k8s-k9s-r1" x="341.6" y="166.4" textLength="1098" clip-path="url(#breeze-k8s-k9s-line-6)">Use&#160;Docker&#160;to&#160;start&#160;k8s&#160;executor&#160;(otherwise&#160;k9s&#160;from&#160;PATH&#160;is&#160;used&#160;and&#160;only&#160;run&#160;with&#160;docker</text><text class="breeze-k8s-k9s-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-6)">│</text><text class="breeze-k8s-k9s-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-6)">
 </text><text class="breeze-k8s-k9s-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-7)">│</text><text class="breeze-k8s-k9s-r1" x="341.6" y="190.8" textLength="1098" clip-path="url(#breeze-k8s-k9s-line-7)">if&#160;not&#160;found&#160;on&#160;PATH).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-k9s-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-7)">│</text><text class="breeze-k8s-k9s-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-7)">
-</text><text class="breeze-k8s-k9s-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-8)">│</text><text class="breeze-k8s-k9s-r4" x="24.4" y="215.2" textLength="97.6" clip-path="url(#breeze-k8s-k9s-line-8)">--python</text><text class="breeze-k8s-k9s-r6" x="292.8" y="215.2" textLength="24.4" clip-path="url(#breeze-k8s-k9s-line-8)">-p</text><text class="breeze-k8s-k9s-r1" x="341.6" y="215.2" textLength="732" clip-path="url(#breeze-k8s-k9s-line-8)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-k9s-r7" x="1085.8" y="215.2" textLength="341.6" clip-path="url(#breeze-k8s-k9s-line-8)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-k8s-k9s-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-8)">│</text><text class="breeze-k8s-k9s-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-8)">
-</text><text class="breeze-k8s-k9s-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-9)">│</text><text class="breeze-k8s-k9s-r5" x="341.6" y="239.6" textLength="732" clip-path="url(#breeze-k8s-k9s-line-9)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-k9s-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-9)">│</text><text class="breeze-k8s-k9s-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-9)">
+</text><text class="breeze-k8s-k9s-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-8)">│</text><text class="breeze-k8s-k9s-r4" x="24.4" y="215.2" textLength="97.6" clip-path="url(#breeze-k8s-k9s-line-8)">--python</text><text class="breeze-k8s-k9s-r6" x="292.8" y="215.2" textLength="24.4" clip-path="url(#breeze-k8s-k9s-line-8)">-p</text><text class="breeze-k8s-k9s-r1" x="341.6" y="215.2" textLength="732" clip-path="url(#breeze-k8s-k9s-line-8)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-k9s-r7" x="1085.8" y="215.2" textLength="268.4" clip-path="url(#breeze-k8s-k9s-line-8)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-k8s-k9s-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-8)">│</text><text class="breeze-k8s-k9s-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-8)">
+</text><text class="breeze-k8s-k9s-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-9)">│</text><text class="breeze-k8s-k9s-r5" x="341.6" y="239.6" textLength="732" clip-path="url(#breeze-k8s-k9s-line-9)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-k9s-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-9)">│</text><text class="breeze-k8s-k9s-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-9)">
 </text><text class="breeze-k8s-k9s-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-10)">│</text><text class="breeze-k8s-k9s-r4" x="24.4" y="264" textLength="244" clip-path="url(#breeze-k8s-k9s-line-10)">--kubernetes-version</text><text class="breeze-k8s-k9s-r1" x="341.6" y="264" textLength="658.8" clip-path="url(#breeze-k8s-k9s-line-10)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text class="breeze-k8s-k9s-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-10)">│</text><text class="breeze-k8s-k9s-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-10)">
 </text><text class="breeze-k8s-k9s-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-11)">│</text><text class="breeze-k8s-k9s-r7" x="341.6" y="288.4" textLength="658.8" clip-path="url(#breeze-k8s-k9s-line-11)">(&gt;v1.30.10&lt;&#160;|&#160;v1.31.6&#160;|&#160;v1.32.3&#160;|&#160;v1.33.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-k9s-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-11)">│</text><text class="breeze-k8s-k9s-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-11)">
 </text><text class="breeze-k8s-k9s-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-12)">│</text><text class="breeze-k8s-k9s-r5" x="341.6" y="312.8" textLength="658.8" clip-path="url(#breeze-k8s-k9s-line-12)">[default:&#160;v1.30.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-k9s-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-12)">│</text><text class="breeze-k8s-k9s-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-12)">
diff --git a/dev/breeze/doc/images/output_k8s_k9s.txt b/dev/breeze/doc/images/output_k8s_k9s.txt
index 44bb857e587c4..7191c67d24e31 100644
--- a/dev/breeze/doc/images/output_k8s_k9s.txt
+++ b/dev/breeze/doc/images/output_k8s_k9s.txt
@@ -1 +1 @@
-ec4d6d8cdd4b6030a566479af0d5ced7
+efedbc9d3a96d716fa0f560e8dc5ea7e
diff --git a/dev/breeze/doc/images/output_k8s_logs.svg b/dev/breeze/doc/images/output_k8s_logs.svg
index 5fa88dec6a4d9..6e1399a36dc3d 100644
--- a/dev/breeze/doc/images/output_k8s_logs.svg
+++ b/dev/breeze/doc/images/output_k8s_logs.svg
@@ -115,8 +115,8 @@
 </text><text class="breeze-k8s-logs-r1" x="12.2" y="93.2" textLength="463.6" clip-path="url(#breeze-k8s-logs-line-3)">Dump&#160;k8s&#160;logs&#160;to&#160;${TMP_DIR}/kind_logs_</text><text class="breeze-k8s-logs-r5" x="475.8" y="93.2" textLength="170.8" clip-path="url(#breeze-k8s-logs-line-3)">&lt;cluster_name&gt;</text><text class="breeze-k8s-logs-r1" x="646.6" y="93.2" textLength="451.4" clip-path="url(#breeze-k8s-logs-line-3)">&#160;directory&#160;(optionally&#160;all&#160;clusters).</text><text class="breeze-k8s-logs-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-3)">
 </text><text class="breeze-k8s-logs-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-4)">
 </text><text class="breeze-k8s-logs-r6" x="0" y="142" textLength="24.4" clip-path="url(#breeze-k8s-logs-line-5)">╭─</text><text class="breeze-k8s-logs-r6" x="24.4" y="142" textLength="195.2" clip-path="url(#breeze-k8s-logs-line-5)">&#160;K8S&#160;logs&#160;flags&#160;</text><text class="breeze-k8s-logs-r6" x="219.6" y="142" textLength="1220" clip-path="url(#breeze-k8s-logs-line-5)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-logs-r6" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-k8s-logs-line-5)">─╮</text><text class="breeze-k8s-logs-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-5)">
-</text><text class="breeze-k8s-logs-r6" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-6)">│</text><text class="breeze-k8s-logs-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-logs-line-6)">--python</text><text class="breeze-k8s-logs-r7" x="292.8" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-logs-line-6)">-p</text><text class="breeze-k8s-logs-r1" x="341.6" y="166.4" textLength="732" clip-path="url(#breeze-k8s-logs-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-logs-r8" x="1085.8" y="166.4" textLength="341.6" clip-path="url(#breeze-k8s-logs-line-6)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-k8s-logs-r6" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-6)">│</text><text class="breeze-k8s-logs-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-6)">
-</text><text class="breeze-k8s-logs-r6" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-7)">│</text><text class="breeze-k8s-logs-r6" x="341.6" y="190.8" textLength="732" clip-path="url(#breeze-k8s-logs-line-7)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-logs-r6" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-7)">│</text><text class="breeze-k8s-logs-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-7)">
+</text><text class="breeze-k8s-logs-r6" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-6)">│</text><text class="breeze-k8s-logs-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-logs-line-6)">--python</text><text class="breeze-k8s-logs-r7" x="292.8" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-logs-line-6)">-p</text><text class="breeze-k8s-logs-r1" x="341.6" y="166.4" textLength="732" clip-path="url(#breeze-k8s-logs-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-logs-r8" x="1085.8" y="166.4" textLength="268.4" clip-path="url(#breeze-k8s-logs-line-6)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-k8s-logs-r6" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-6)">│</text><text class="breeze-k8s-logs-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-6)">
+</text><text class="breeze-k8s-logs-r6" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-7)">│</text><text class="breeze-k8s-logs-r6" x="341.6" y="190.8" textLength="732" clip-path="url(#breeze-k8s-logs-line-7)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-logs-r6" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-7)">│</text><text class="breeze-k8s-logs-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-7)">
 </text><text class="breeze-k8s-logs-r6" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-8)">│</text><text class="breeze-k8s-logs-r4" x="24.4" y="215.2" textLength="244" clip-path="url(#breeze-k8s-logs-line-8)">--kubernetes-version</text><text class="breeze-k8s-logs-r1" x="341.6" y="215.2" textLength="658.8" clip-path="url(#breeze-k8s-logs-line-8)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text class="breeze-k8s-logs-r6" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-8)">│</text><text class="breeze-k8s-logs-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-8)">
 </text><text class="breeze-k8s-logs-r6" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-9)">│</text><text class="breeze-k8s-logs-r8" x="341.6" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-logs-line-9)">(&gt;v1.30.10&lt;&#160;|&#160;v1.31.6&#160;|&#160;v1.32.3&#160;|&#160;v1.33.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-logs-r6" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-9)">│</text><text class="breeze-k8s-logs-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-9)">
 </text><text class="breeze-k8s-logs-r6" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-10)">│</text><text class="breeze-k8s-logs-r6" x="341.6" y="264" textLength="658.8" clip-path="url(#breeze-k8s-logs-line-10)">[default:&#160;v1.30.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-logs-r6" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-10)">│</text><text class="breeze-k8s-logs-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-10)">
diff --git a/dev/breeze/doc/images/output_k8s_logs.txt b/dev/breeze/doc/images/output_k8s_logs.txt
index bbd6507e52c2b..46cec2dd8bb7e 100644
--- a/dev/breeze/doc/images/output_k8s_logs.txt
+++ b/dev/breeze/doc/images/output_k8s_logs.txt
@@ -1 +1 @@
-7cd5d42dfc1cb852425543b39683809f
+cf00d923f26a0d331dd7fe7251c56f37
diff --git a/dev/breeze/doc/images/output_k8s_run-complete-tests.svg b/dev/breeze/doc/images/output_k8s_run-complete-tests.svg
index 6591630827a99..80014a73460c5 100644
--- a/dev/breeze/doc/images/output_k8s_run-complete-tests.svg
+++ b/dev/breeze/doc/images/output_k8s_run-complete-tests.svg
@@ -228,8 +228,8 @@
 </text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-18)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="610" y="459.2" textLength="719.8" clip-path="url(#breeze-k8s-run-complete-tests-line-18)">[default:&#160;use-uv]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-18)">│</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-18)">
 </text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="483.6" textLength="1464" clip-path="url(#breeze-k8s-run-complete-tests-line-19)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-19)">
 </text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="508" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-20)">╭─</text><text class="breeze-k8s-run-complete-tests-r5" x="24.4" y="508" textLength="207.4" clip-path="url(#breeze-k8s-run-complete-tests-line-20)">&#160;K8S&#160;tests&#160;flags&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="231.8" y="508" textLength="1207.8" clip-path="url(#breeze-k8s-run-complete-tests-line-20)">───────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-run-complete-tests-r5" x="1439.6" y="508" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-20)">─╮</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-20)">
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-21)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="532.4" textLength="97.6" clip-path="url(#breeze-k8s-run-complete-tests-line-21)">--python</text><text class="breeze-k8s-run-complete-tests-r7" x="292.8" y="532.4" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-21)">-p</text><text class="breeze-k8s-run-complete-tests-r1" x="341.6" y="532.4" textLength="732" clip-path="url(#breeze-k8s-run-complete-tests-line-21)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-run-complete-tests-r6" x="1085.8" y="532.4" textLength="341.6" clip-path="url(#breeze-k8s-run-complete-tests-line-21)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-k8s-run-complete-tests-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-21)">│</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-21)">
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-22)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="341.6" y="556.8" textLength="732" clip-path="url(#breeze-k8s-run-complete-tests-line-22)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-22)">│</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-22)">
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-21)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="532.4" textLength="97.6" clip-path="url(#breeze-k8s-run-complete-tests-line-21)">--python</text><text class="breeze-k8s-run-complete-tests-r7" x="292.8" y="532.4" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-21)">-p</text><text class="breeze-k8s-run-complete-tests-r1" x="341.6" y="532.4" textLength="732" clip-path="url(#breeze-k8s-run-complete-tests-line-21)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-run-complete-tests-r6" x="1085.8" y="532.4" textLength="268.4" clip-path="url(#breeze-k8s-run-complete-tests-line-21)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-k8s-run-complete-tests-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-21)">│</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-21)">
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-22)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="341.6" y="556.8" textLength="732" clip-path="url(#breeze-k8s-run-complete-tests-line-22)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-22)">│</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-22)">
 </text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-23)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="581.2" textLength="244" clip-path="url(#breeze-k8s-run-complete-tests-line-23)">--kubernetes-version</text><text class="breeze-k8s-run-complete-tests-r1" x="341.6" y="581.2" textLength="658.8" clip-path="url(#breeze-k8s-run-complete-tests-line-23)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text class="breeze-k8s-run-complete-tests-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-23)">│</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-23)">
 </text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-24)">│</text><text class="breeze-k8s-run-complete-tests-r6" x="341.6" y="605.6" textLength="658.8" clip-path="url(#breeze-k8s-run-complete-tests-line-24)">(&gt;v1.30.10&lt;&#160;|&#160;v1.31.6&#160;|&#160;v1.32.3&#160;|&#160;v1.33.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-24)">│</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-24)">
 </text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-25)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="341.6" y="630" textLength="658.8" clip-path="url(#breeze-k8s-run-complete-tests-line-25)">[default:&#160;v1.30.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-25)">│</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-25)">
@@ -246,7 +246,7 @@
 </text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-36)">│</text><text class="breeze-k8s-run-complete-tests-r6" x="378.2" y="898.4" textLength="1061.4" clip-path="url(#breeze-k8s-run-complete-tests-line-36)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="1451.8" y="898.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-36)">│</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-36)">
 </text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-37)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="378.2" y="922.8" textLength="1061.4" clip-path="url(#breeze-k8s-run-complete-tests-line-37)">[default:&#160;2;&#160;1&lt;=x&lt;=4]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="1451.8" y="922.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-37)">│</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-37)">
 </text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-38)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="947.2" textLength="207.4" clip-path="url(#breeze-k8s-run-complete-tests-line-38)">--python-versions</text><text class="breeze-k8s-run-complete-tests-r1" x="378.2" y="947.2" textLength="951.6" clip-path="url(#breeze-k8s-run-complete-tests-line-38)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;for&#160;build&#160;with&#160;multiple&#160;versions.</text><text class="breeze-k8s-run-complete-tests-r6" x="1342" y="947.2" textLength="73.2" clip-path="url(#breeze-k8s-run-complete-tests-line-38)">(TEXT)</text><text class="breeze-k8s-run-complete-tests-r5" x="1451.8" y="947.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-38)">│</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-38)">
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-39)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="378.2" y="971.6" textLength="951.6" clip-path="url(#breeze-k8s-run-complete-tests-line-39)">[default:&#160;3.9&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="1451.8" y="971.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-39)">│</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-39)">
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-39)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="378.2" y="971.6" textLength="951.6" clip-path="url(#breeze-k8s-run-complete-tests-line-39)">[default:&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="1451.8" y="971.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-39)">│</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-39)">
 </text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-40)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="996" textLength="256.2" clip-path="url(#breeze-k8s-run-complete-tests-line-40)">--kubernetes-versions</text><text class="breeze-k8s-run-complete-tests-r1" x="378.2" y="996" textLength="756.4" clip-path="url(#breeze-k8s-run-complete-tests-line-40)">Kubernetes&#160;versions&#160;used&#160;to&#160;run&#160;in&#160;parallel&#160;(space&#160;separated).</text><text class="breeze-k8s-run-complete-tests-r6" x="1146.8" y="996" textLength="73.2" clip-path="url(#breeze-k8s-run-complete-tests-line-40)">(TEXT)</text><text class="breeze-k8s-run-complete-tests-r5" x="1451.8" y="996" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-40)">│</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-40)">
 </text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-41)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="378.2" y="1020.4" textLength="756.4" clip-path="url(#breeze-k8s-run-complete-tests-line-41)">[default:&#160;v1.30.10&#160;v1.31.6&#160;v1.32.3&#160;v1.33.0]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-41)">│</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-41)">
 </text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-42)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1044.8" textLength="170.8" clip-path="url(#breeze-k8s-run-complete-tests-line-42)">--skip-cleanup</text><text class="breeze-k8s-run-complete-tests-r1" x="378.2" y="1044.8" textLength="732" clip-path="url(#breeze-k8s-run-complete-tests-line-42)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text class="breeze-k8s-run-complete-tests-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-42)">│</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-42)">
diff --git a/dev/breeze/doc/images/output_k8s_run-complete-tests.txt b/dev/breeze/doc/images/output_k8s_run-complete-tests.txt
index efd06d4a5eaa1..128524bb500e8 100644
--- a/dev/breeze/doc/images/output_k8s_run-complete-tests.txt
+++ b/dev/breeze/doc/images/output_k8s_run-complete-tests.txt
@@ -1 +1 @@
-dc81fd3a8134ec0fd3c48a700ac15d4d
+90311a31704a88dbeadc5955a4b26452
diff --git a/dev/breeze/doc/images/output_k8s_shell.svg b/dev/breeze/doc/images/output_k8s_shell.svg
index fd7ecdf9e7743..84449a4aaf6df 100644
--- a/dev/breeze/doc/images/output_k8s_shell.svg
+++ b/dev/breeze/doc/images/output_k8s_shell.svg
@@ -126,8 +126,8 @@
 </text><text class="breeze-k8s-shell-r1" x="12.2" y="93.2" textLength="622.2" clip-path="url(#breeze-k8s-shell-line-3)">Run&#160;shell&#160;environment&#160;for&#160;the&#160;current&#160;KinD&#160;cluster.</text><text class="breeze-k8s-shell-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-3)">
 </text><text class="breeze-k8s-shell-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-4)">
 </text><text class="breeze-k8s-shell-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-k8s-shell-line-5)">╭─</text><text class="breeze-k8s-shell-r5" x="24.4" y="142" textLength="207.4" clip-path="url(#breeze-k8s-shell-line-5)">&#160;K8S&#160;shell&#160;flags&#160;</text><text class="breeze-k8s-shell-r5" x="231.8" y="142" textLength="1207.8" clip-path="url(#breeze-k8s-shell-line-5)">───────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-shell-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-k8s-shell-line-5)">─╮</text><text class="breeze-k8s-shell-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-5)">
-</text><text class="breeze-k8s-shell-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-6)">│</text><text class="breeze-k8s-shell-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-shell-line-6)">--python</text><text class="breeze-k8s-shell-r6" x="292.8" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-shell-line-6)">-p</text><text class="breeze-k8s-shell-r1" x="341.6" y="166.4" textLength="732" clip-path="url(#breeze-k8s-shell-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-shell-r7" x="1085.8" y="166.4" textLength="341.6" clip-path="url(#breeze-k8s-shell-line-6)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-k8s-shell-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-6)">│</text><text class="breeze-k8s-shell-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-6)">
-</text><text class="breeze-k8s-shell-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-7)">│</text><text class="breeze-k8s-shell-r5" x="341.6" y="190.8" textLength="732" clip-path="url(#breeze-k8s-shell-line-7)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-shell-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-7)">│</text><text class="breeze-k8s-shell-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-7)">
+</text><text class="breeze-k8s-shell-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-6)">│</text><text class="breeze-k8s-shell-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-shell-line-6)">--python</text><text class="breeze-k8s-shell-r6" x="292.8" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-shell-line-6)">-p</text><text class="breeze-k8s-shell-r1" x="341.6" y="166.4" textLength="732" clip-path="url(#breeze-k8s-shell-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-shell-r7" x="1085.8" y="166.4" textLength="268.4" clip-path="url(#breeze-k8s-shell-line-6)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-k8s-shell-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-6)">│</text><text class="breeze-k8s-shell-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-6)">
+</text><text class="breeze-k8s-shell-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-7)">│</text><text class="breeze-k8s-shell-r5" x="341.6" y="190.8" textLength="732" clip-path="url(#breeze-k8s-shell-line-7)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-shell-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-7)">│</text><text class="breeze-k8s-shell-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-7)">
 </text><text class="breeze-k8s-shell-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-8)">│</text><text class="breeze-k8s-shell-r4" x="24.4" y="215.2" textLength="244" clip-path="url(#breeze-k8s-shell-line-8)">--kubernetes-version</text><text class="breeze-k8s-shell-r1" x="341.6" y="215.2" textLength="658.8" clip-path="url(#breeze-k8s-shell-line-8)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text class="breeze-k8s-shell-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-8)">│</text><text class="breeze-k8s-shell-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-8)">
 </text><text class="breeze-k8s-shell-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-9)">│</text><text class="breeze-k8s-shell-r7" x="341.6" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-shell-line-9)">(&gt;v1.30.10&lt;&#160;|&#160;v1.31.6&#160;|&#160;v1.32.3&#160;|&#160;v1.33.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-shell-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-9)">│</text><text class="breeze-k8s-shell-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-9)">
 </text><text class="breeze-k8s-shell-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-10)">│</text><text class="breeze-k8s-shell-r5" x="341.6" y="264" textLength="658.8" clip-path="url(#breeze-k8s-shell-line-10)">[default:&#160;v1.30.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-shell-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-10)">│</text><text class="breeze-k8s-shell-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-10)">
diff --git a/dev/breeze/doc/images/output_k8s_shell.txt b/dev/breeze/doc/images/output_k8s_shell.txt
index 56289998e5790..16014bad6d105 100644
--- a/dev/breeze/doc/images/output_k8s_shell.txt
+++ b/dev/breeze/doc/images/output_k8s_shell.txt
@@ -1 +1 @@
-d6b45371ce63aaf4d081fc7b02315c02
+b364a237eaa04d37db3b51620566ac85
diff --git a/dev/breeze/doc/images/output_k8s_status.svg b/dev/breeze/doc/images/output_k8s_status.svg
index 6833c5b44db74..5d4f080a5ebe9 100644
--- a/dev/breeze/doc/images/output_k8s_status.svg
+++ b/dev/breeze/doc/images/output_k8s_status.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 538.0" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 513.5999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-k8s-status-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="487.0" />
+      <rect x="0" y="0" width="1463.0" height="462.59999999999997" />
     </clipPath>
     <clipPath id="breeze-k8s-status-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -99,12 +99,9 @@
 <clipPath id="breeze-k8s-status-line-17">
     <rect x="0" y="416.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="breeze-k8s-status-line-18">
-    <rect x="0" y="440.7" width="1464" height="24.65"/>
-            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="536" rx="8"/><text class="breeze-k8s-status-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;status</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="511.6" rx="8"/><text class="breeze-k8s-status-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;status</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -120,20 +117,19 @@
 </text><text class="breeze-k8s-status-r1" x="12.2" y="93.2" textLength="1085.8" clip-path="url(#breeze-k8s-status-line-3)">Check&#160;status&#160;of&#160;the&#160;current&#160;cluster&#160;and&#160;airflow&#160;deployed&#160;to&#160;it&#160;(optionally&#160;all&#160;clusters).</text><text class="breeze-k8s-status-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-k8s-status-line-3)">
 </text><text class="breeze-k8s-status-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-k8s-status-line-4)">
 </text><text class="breeze-k8s-status-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-k8s-status-line-5)">╭─</text><text class="breeze-k8s-status-r5" x="24.4" y="142" textLength="317.2" clip-path="url(#breeze-k8s-status-line-5)">&#160;K8S&#160;cluster&#160;status&#160;flags&#160;</text><text class="breeze-k8s-status-r5" x="341.6" y="142" textLength="1098" clip-path="url(#breeze-k8s-status-line-5)">──────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-status-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-k8s-status-line-5)">─╮</text><text class="breeze-k8s-status-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-k8s-status-line-5)">
-</text><text class="breeze-k8s-status-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-status-line-6)">│</text><text class="breeze-k8s-status-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-status-line-6)">--python</text><text class="breeze-k8s-status-r6" x="317.2" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-status-line-6)">-p</text><text class="breeze-k8s-status-r1" x="366" y="166.4" textLength="732" clip-path="url(#breeze-k8s-status-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-status-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-status-line-6)">│</text><text class="breeze-k8s-status-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-status-line-6)">
-</text><text class="breeze-k8s-status-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-status-line-7)">│</text><text class="breeze-k8s-status-r7" x="366" y="190.8" textLength="732" clip-path="url(#breeze-k8s-status-line-7)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-status-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-status-line-7)">│</text><text class="breeze-k8s-status-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-status-line-7)">
-</text><text class="breeze-k8s-status-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-status-line-8)">│</text><text class="breeze-k8s-status-r5" x="366" y="215.2" textLength="732" clip-path="url(#breeze-k8s-status-line-8)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-status-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-status-line-8)">│</text><text class="breeze-k8s-status-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-status-line-8)">
-</text><text class="breeze-k8s-status-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-status-line-9)">│</text><text class="breeze-k8s-status-r4" x="24.4" y="239.6" textLength="244" clip-path="url(#breeze-k8s-status-line-9)">--kubernetes-version</text><text class="breeze-k8s-status-r1" x="366" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-status-line-9)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text class="breeze-k8s-status-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-status-line-9)">│</text><text class="breeze-k8s-status-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-status-line-9)">
-</text><text class="breeze-k8s-status-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-status-line-10)">│</text><text class="breeze-k8s-status-r7" x="366" y="264" textLength="658.8" clip-path="url(#breeze-k8s-status-line-10)">(&gt;v1.30.10&lt;&#160;|&#160;v1.31.6&#160;|&#160;v1.32.3&#160;|&#160;v1.33.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-status-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-k8s-status-line-10)">│</text><text class="breeze-k8s-status-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-k8s-status-line-10)">
-</text><text class="breeze-k8s-status-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-status-line-11)">│</text><text class="breeze-k8s-status-r5" x="366" y="288.4" textLength="658.8" clip-path="url(#breeze-k8s-status-line-11)">[default:&#160;v1.30.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-status-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-status-line-11)">│</text><text class="breeze-k8s-status-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-status-line-11)">
-</text><text class="breeze-k8s-status-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-status-line-12)">│</text><text class="breeze-k8s-status-r4" x="24.4" y="312.8" textLength="268.4" clip-path="url(#breeze-k8s-status-line-12)">--wait-time-in-seconds</text><text class="breeze-k8s-status-r1" x="366" y="312.8" textLength="732" clip-path="url(#breeze-k8s-status-line-12)">Wait&#160;for&#160;Airflow&#160;api-server&#160;for&#160;specified&#160;number&#160;of&#160;seconds.</text><text class="breeze-k8s-status-r7" x="1110.2" y="312.8" textLength="183" clip-path="url(#breeze-k8s-status-line-12)">(INTEGER&#160;RANGE)</text><text class="breeze-k8s-status-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-status-line-12)">│</text><text class="breeze-k8s-status-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-status-line-12)">
-</text><text class="breeze-k8s-status-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-status-line-13)">│</text><text class="breeze-k8s-status-r4" x="24.4" y="337.2" textLength="61" clip-path="url(#breeze-k8s-status-line-13)">--all</text><text class="breeze-k8s-status-r1" x="366" y="337.2" textLength="390.4" clip-path="url(#breeze-k8s-status-line-13)">Apply&#160;it&#160;to&#160;all&#160;created&#160;clusters</text><text class="breeze-k8s-status-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-status-line-13)">│</text><text class="breeze-k8s-status-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-status-line-13)">
-</text><text class="breeze-k8s-status-r5" x="0" y="361.6" textLength="1464" clip-path="url(#breeze-k8s-status-line-14)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-status-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-status-line-14)">
-</text><text class="breeze-k8s-status-r5" x="0" y="386" textLength="24.4" clip-path="url(#breeze-k8s-status-line-15)">╭─</text><text class="breeze-k8s-status-r5" x="24.4" y="386" textLength="195.2" clip-path="url(#breeze-k8s-status-line-15)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-status-r5" x="219.6" y="386" textLength="1220" clip-path="url(#breeze-k8s-status-line-15)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-status-r5" x="1439.6" y="386" textLength="24.4" clip-path="url(#breeze-k8s-status-line-15)">─╮</text><text class="breeze-k8s-status-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-k8s-status-line-15)">
-</text><text class="breeze-k8s-status-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-status-line-16)">│</text><text class="breeze-k8s-status-r4" x="24.4" y="410.4" textLength="109.8" clip-path="url(#breeze-k8s-status-line-16)">--verbose</text><text class="breeze-k8s-status-r6" x="158.6" y="410.4" textLength="24.4" clip-path="url(#breeze-k8s-status-line-16)">-v</text><text class="breeze-k8s-status-r1" x="207.4" y="410.4" textLength="585.6" clip-path="url(#breeze-k8s-status-line-16)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-k8s-status-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-status-line-16)">│</text><text class="breeze-k8s-status-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-status-line-16)">
-</text><text class="breeze-k8s-status-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-status-line-17)">│</text><text class="breeze-k8s-status-r4" x="24.4" y="434.8" textLength="109.8" clip-path="url(#breeze-k8s-status-line-17)">--dry-run</text><text class="breeze-k8s-status-r6" x="158.6" y="434.8" textLength="24.4" clip-path="url(#breeze-k8s-status-line-17)">-D</text><text class="breeze-k8s-status-r1" x="207.4" y="434.8" textLength="719.8" clip-path="url(#breeze-k8s-status-line-17)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-k8s-status-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-status-line-17)">│</text><text class="breeze-k8s-status-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-status-line-17)">
-</text><text class="breeze-k8s-status-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-status-line-18)">│</text><text class="breeze-k8s-status-r4" x="24.4" y="459.2" textLength="73.2" clip-path="url(#breeze-k8s-status-line-18)">--help</text><text class="breeze-k8s-status-r6" x="158.6" y="459.2" textLength="24.4" clip-path="url(#breeze-k8s-status-line-18)">-h</text><text class="breeze-k8s-status-r1" x="207.4" y="459.2" textLength="329.4" clip-path="url(#breeze-k8s-status-line-18)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-k8s-status-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-status-line-18)">│</text><text class="breeze-k8s-status-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-status-line-18)">
-</text><text class="breeze-k8s-status-r5" x="0" y="483.6" textLength="1464" clip-path="url(#breeze-k8s-status-line-19)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-status-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-status-line-19)">
+</text><text class="breeze-k8s-status-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-status-line-6)">│</text><text class="breeze-k8s-status-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-status-line-6)">--python</text><text class="breeze-k8s-status-r6" x="317.2" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-status-line-6)">-p</text><text class="breeze-k8s-status-r1" x="366" y="166.4" textLength="732" clip-path="url(#breeze-k8s-status-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-status-r7" x="1110.2" y="166.4" textLength="268.4" clip-path="url(#breeze-k8s-status-line-6)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-k8s-status-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-status-line-6)">│</text><text class="breeze-k8s-status-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-status-line-6)">
+</text><text class="breeze-k8s-status-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-status-line-7)">│</text><text class="breeze-k8s-status-r5" x="366" y="190.8" textLength="732" clip-path="url(#breeze-k8s-status-line-7)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-status-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-status-line-7)">│</text><text class="breeze-k8s-status-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-status-line-7)">
+</text><text class="breeze-k8s-status-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-status-line-8)">│</text><text class="breeze-k8s-status-r4" x="24.4" y="215.2" textLength="244" clip-path="url(#breeze-k8s-status-line-8)">--kubernetes-version</text><text class="breeze-k8s-status-r1" x="366" y="215.2" textLength="658.8" clip-path="url(#breeze-k8s-status-line-8)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text class="breeze-k8s-status-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-status-line-8)">│</text><text class="breeze-k8s-status-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-status-line-8)">
+</text><text class="breeze-k8s-status-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-status-line-9)">│</text><text class="breeze-k8s-status-r7" x="366" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-status-line-9)">(&gt;v1.30.10&lt;&#160;|&#160;v1.31.6&#160;|&#160;v1.32.3&#160;|&#160;v1.33.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-status-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-status-line-9)">│</text><text class="breeze-k8s-status-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-status-line-9)">
+</text><text class="breeze-k8s-status-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-status-line-10)">│</text><text class="breeze-k8s-status-r5" x="366" y="264" textLength="658.8" clip-path="url(#breeze-k8s-status-line-10)">[default:&#160;v1.30.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-status-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-k8s-status-line-10)">│</text><text class="breeze-k8s-status-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-k8s-status-line-10)">
+</text><text class="breeze-k8s-status-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-status-line-11)">│</text><text class="breeze-k8s-status-r4" x="24.4" y="288.4" textLength="268.4" clip-path="url(#breeze-k8s-status-line-11)">--wait-time-in-seconds</text><text class="breeze-k8s-status-r1" x="366" y="288.4" textLength="732" clip-path="url(#breeze-k8s-status-line-11)">Wait&#160;for&#160;Airflow&#160;api-server&#160;for&#160;specified&#160;number&#160;of&#160;seconds.</text><text class="breeze-k8s-status-r7" x="1110.2" y="288.4" textLength="183" clip-path="url(#breeze-k8s-status-line-11)">(INTEGER&#160;RANGE)</text><text class="breeze-k8s-status-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-status-line-11)">│</text><text class="breeze-k8s-status-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-status-line-11)">
+</text><text class="breeze-k8s-status-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-status-line-12)">│</text><text class="breeze-k8s-status-r4" x="24.4" y="312.8" textLength="61" clip-path="url(#breeze-k8s-status-line-12)">--all</text><text class="breeze-k8s-status-r1" x="366" y="312.8" textLength="390.4" clip-path="url(#breeze-k8s-status-line-12)">Apply&#160;it&#160;to&#160;all&#160;created&#160;clusters</text><text class="breeze-k8s-status-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-status-line-12)">│</text><text class="breeze-k8s-status-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-status-line-12)">
+</text><text class="breeze-k8s-status-r5" x="0" y="337.2" textLength="1464" clip-path="url(#breeze-k8s-status-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-status-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-status-line-13)">
+</text><text class="breeze-k8s-status-r5" x="0" y="361.6" textLength="24.4" clip-path="url(#breeze-k8s-status-line-14)">╭─</text><text class="breeze-k8s-status-r5" x="24.4" y="361.6" textLength="195.2" clip-path="url(#breeze-k8s-status-line-14)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-status-r5" x="219.6" y="361.6" textLength="1220" clip-path="url(#breeze-k8s-status-line-14)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-status-r5" x="1439.6" y="361.6" textLength="24.4" clip-path="url(#breeze-k8s-status-line-14)">─╮</text><text class="breeze-k8s-status-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-status-line-14)">
+</text><text class="breeze-k8s-status-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-status-line-15)">│</text><text class="breeze-k8s-status-r4" x="24.4" y="386" textLength="109.8" clip-path="url(#breeze-k8s-status-line-15)">--verbose</text><text class="breeze-k8s-status-r6" x="158.6" y="386" textLength="24.4" clip-path="url(#breeze-k8s-status-line-15)">-v</text><text class="breeze-k8s-status-r1" x="207.4" y="386" textLength="585.6" clip-path="url(#breeze-k8s-status-line-15)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-k8s-status-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-k8s-status-line-15)">│</text><text class="breeze-k8s-status-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-k8s-status-line-15)">
+</text><text class="breeze-k8s-status-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-status-line-16)">│</text><text class="breeze-k8s-status-r4" x="24.4" y="410.4" textLength="109.8" clip-path="url(#breeze-k8s-status-line-16)">--dry-run</text><text class="breeze-k8s-status-r6" x="158.6" y="410.4" textLength="24.4" clip-path="url(#breeze-k8s-status-line-16)">-D</text><text class="breeze-k8s-status-r1" x="207.4" y="410.4" textLength="719.8" clip-path="url(#breeze-k8s-status-line-16)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-k8s-status-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-status-line-16)">│</text><text class="breeze-k8s-status-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-status-line-16)">
+</text><text class="breeze-k8s-status-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-status-line-17)">│</text><text class="breeze-k8s-status-r4" x="24.4" y="434.8" textLength="73.2" clip-path="url(#breeze-k8s-status-line-17)">--help</text><text class="breeze-k8s-status-r6" x="158.6" y="434.8" textLength="24.4" clip-path="url(#breeze-k8s-status-line-17)">-h</text><text class="breeze-k8s-status-r1" x="207.4" y="434.8" textLength="329.4" clip-path="url(#breeze-k8s-status-line-17)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-k8s-status-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-status-line-17)">│</text><text class="breeze-k8s-status-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-status-line-17)">
+</text><text class="breeze-k8s-status-r5" x="0" y="459.2" textLength="1464" clip-path="url(#breeze-k8s-status-line-18)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-status-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-status-line-18)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_k8s_status.txt b/dev/breeze/doc/images/output_k8s_status.txt
index 0e32e381f9731..e9c655c06abeb 100644
--- a/dev/breeze/doc/images/output_k8s_status.txt
+++ b/dev/breeze/doc/images/output_k8s_status.txt
@@ -1 +1 @@
-d2818a9846afffdbfd2f20e5c916181d
+45ae1dbd57e2d8e7c512bf32f5ab4193
diff --git a/dev/breeze/doc/images/output_k8s_tests.svg b/dev/breeze/doc/images/output_k8s_tests.svg
index bcdc44b0b952d..1e15dd87efd79 100644
--- a/dev/breeze/doc/images/output_k8s_tests.svg
+++ b/dev/breeze/doc/images/output_k8s_tests.svg
@@ -168,8 +168,8 @@
 </text><text class="breeze-k8s-tests-r1" x="12.2" y="93.2" textLength="1037" clip-path="url(#breeze-k8s-tests-line-3)">Run&#160;tests&#160;against&#160;the&#160;current&#160;KinD&#160;cluster&#160;(optionally&#160;for&#160;all&#160;clusters&#160;in&#160;parallel).</text><text class="breeze-k8s-tests-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-3)">
 </text><text class="breeze-k8s-tests-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-4)">
 </text><text class="breeze-k8s-tests-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-k8s-tests-line-5)">╭─</text><text class="breeze-k8s-tests-r5" x="24.4" y="142" textLength="207.4" clip-path="url(#breeze-k8s-tests-line-5)">&#160;K8S&#160;tests&#160;flags&#160;</text><text class="breeze-k8s-tests-r5" x="231.8" y="142" textLength="1207.8" clip-path="url(#breeze-k8s-tests-line-5)">───────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-tests-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-k8s-tests-line-5)">─╮</text><text class="breeze-k8s-tests-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-5)">
-</text><text class="breeze-k8s-tests-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-6)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-tests-line-6)">--python</text><text class="breeze-k8s-tests-r6" x="292.8" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-tests-line-6)">-p</text><text class="breeze-k8s-tests-r1" x="341.6" y="166.4" textLength="732" clip-path="url(#breeze-k8s-tests-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-tests-r7" x="1085.8" y="166.4" textLength="341.6" clip-path="url(#breeze-k8s-tests-line-6)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-k8s-tests-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-6)">│</text><text class="breeze-k8s-tests-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-6)">
-</text><text class="breeze-k8s-tests-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-7)">│</text><text class="breeze-k8s-tests-r5" x="341.6" y="190.8" textLength="732" clip-path="url(#breeze-k8s-tests-line-7)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-tests-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-7)">│</text><text class="breeze-k8s-tests-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-7)">
+</text><text class="breeze-k8s-tests-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-6)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-tests-line-6)">--python</text><text class="breeze-k8s-tests-r6" x="292.8" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-tests-line-6)">-p</text><text class="breeze-k8s-tests-r1" x="341.6" y="166.4" textLength="732" clip-path="url(#breeze-k8s-tests-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-tests-r7" x="1085.8" y="166.4" textLength="268.4" clip-path="url(#breeze-k8s-tests-line-6)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-k8s-tests-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-6)">│</text><text class="breeze-k8s-tests-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-6)">
+</text><text class="breeze-k8s-tests-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-7)">│</text><text class="breeze-k8s-tests-r5" x="341.6" y="190.8" textLength="732" clip-path="url(#breeze-k8s-tests-line-7)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-tests-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-7)">│</text><text class="breeze-k8s-tests-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-7)">
 </text><text class="breeze-k8s-tests-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-8)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="215.2" textLength="244" clip-path="url(#breeze-k8s-tests-line-8)">--kubernetes-version</text><text class="breeze-k8s-tests-r1" x="341.6" y="215.2" textLength="658.8" clip-path="url(#breeze-k8s-tests-line-8)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text class="breeze-k8s-tests-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-8)">│</text><text class="breeze-k8s-tests-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-8)">
 </text><text class="breeze-k8s-tests-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-9)">│</text><text class="breeze-k8s-tests-r7" x="341.6" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-tests-line-9)">(&gt;v1.30.10&lt;&#160;|&#160;v1.31.6&#160;|&#160;v1.32.3&#160;|&#160;v1.33.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-tests-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-9)">│</text><text class="breeze-k8s-tests-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-9)">
 </text><text class="breeze-k8s-tests-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-10)">│</text><text class="breeze-k8s-tests-r5" x="341.6" y="264" textLength="658.8" clip-path="url(#breeze-k8s-tests-line-10)">[default:&#160;v1.30.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-tests-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-10)">│</text><text class="breeze-k8s-tests-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-10)">
@@ -186,7 +186,7 @@
 </text><text class="breeze-k8s-tests-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-21)">│</text><text class="breeze-k8s-tests-r7" x="378.2" y="532.4" textLength="1061.4" clip-path="url(#breeze-k8s-tests-line-21)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-tests-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-21)">│</text><text class="breeze-k8s-tests-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-21)">
 </text><text class="breeze-k8s-tests-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-22)">│</text><text class="breeze-k8s-tests-r5" x="378.2" y="556.8" textLength="1061.4" clip-path="url(#breeze-k8s-tests-line-22)">[default:&#160;2;&#160;1&lt;=x&lt;=4]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-tests-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-22)">│</text><text class="breeze-k8s-tests-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-22)">
 </text><text class="breeze-k8s-tests-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-23)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="581.2" textLength="207.4" clip-path="url(#breeze-k8s-tests-line-23)">--python-versions</text><text class="breeze-k8s-tests-r1" x="378.2" y="581.2" textLength="951.6" clip-path="url(#breeze-k8s-tests-line-23)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;for&#160;build&#160;with&#160;multiple&#160;versions.</text><text class="breeze-k8s-tests-r7" x="1342" y="581.2" textLength="73.2" clip-path="url(#breeze-k8s-tests-line-23)">(TEXT)</text><text class="breeze-k8s-tests-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-23)">│</text><text class="breeze-k8s-tests-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-23)">
-</text><text class="breeze-k8s-tests-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-24)">│</text><text class="breeze-k8s-tests-r5" x="378.2" y="605.6" textLength="951.6" clip-path="url(#breeze-k8s-tests-line-24)">[default:&#160;3.9&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-tests-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-24)">│</text><text class="breeze-k8s-tests-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-24)">
+</text><text class="breeze-k8s-tests-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-24)">│</text><text class="breeze-k8s-tests-r5" x="378.2" y="605.6" textLength="951.6" clip-path="url(#breeze-k8s-tests-line-24)">[default:&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-tests-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-24)">│</text><text class="breeze-k8s-tests-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-24)">
 </text><text class="breeze-k8s-tests-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-25)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="630" textLength="256.2" clip-path="url(#breeze-k8s-tests-line-25)">--kubernetes-versions</text><text class="breeze-k8s-tests-r1" x="378.2" y="630" textLength="756.4" clip-path="url(#breeze-k8s-tests-line-25)">Kubernetes&#160;versions&#160;used&#160;to&#160;run&#160;in&#160;parallel&#160;(space&#160;separated).</text><text class="breeze-k8s-tests-r7" x="1146.8" y="630" textLength="73.2" clip-path="url(#breeze-k8s-tests-line-25)">(TEXT)</text><text class="breeze-k8s-tests-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-25)">│</text><text class="breeze-k8s-tests-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-25)">
 </text><text class="breeze-k8s-tests-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-26)">│</text><text class="breeze-k8s-tests-r5" x="378.2" y="654.4" textLength="756.4" clip-path="url(#breeze-k8s-tests-line-26)">[default:&#160;v1.30.10&#160;v1.31.6&#160;v1.32.3&#160;v1.33.0]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-tests-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-26)">│</text><text class="breeze-k8s-tests-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-26)">
 </text><text class="breeze-k8s-tests-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-27)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="678.8" textLength="170.8" clip-path="url(#breeze-k8s-tests-line-27)">--skip-cleanup</text><text class="breeze-k8s-tests-r1" x="378.2" y="678.8" textLength="732" clip-path="url(#breeze-k8s-tests-line-27)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text class="breeze-k8s-tests-r5" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-27)">│</text><text class="breeze-k8s-tests-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-27)">
diff --git a/dev/breeze/doc/images/output_k8s_tests.txt b/dev/breeze/doc/images/output_k8s_tests.txt
index 40ad8ddf69d0d..f5a8137e26795 100644
--- a/dev/breeze/doc/images/output_k8s_tests.txt
+++ b/dev/breeze/doc/images/output_k8s_tests.txt
@@ -1 +1 @@
-3cfcacd444fce25165d418357e061b97
+73297fbd99e02da431cb693f8bd69049
diff --git a/dev/breeze/doc/images/output_k8s_upload-k8s-image.svg b/dev/breeze/doc/images/output_k8s_upload-k8s-image.svg
index c4678d0831191..5aff919e8c664 100644
--- a/dev/breeze/doc/images/output_k8s_upload-k8s-image.svg
+++ b/dev/breeze/doc/images/output_k8s_upload-k8s-image.svg
@@ -150,8 +150,8 @@
 </text><text class="breeze-k8s-upload-k8s-image-r1" x="12.2" y="93.2" textLength="1110.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-3)">Upload&#160;k8s-ready&#160;airflow&#160;image&#160;to&#160;the&#160;KinD&#160;cluster&#160;(optionally&#160;to&#160;all&#160;clusters&#160;in&#160;parallel)</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-3)">
 </text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-4)">
 </text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-5)">╭─</text><text class="breeze-k8s-upload-k8s-image-r5" x="24.4" y="142" textLength="244" clip-path="url(#breeze-k8s-upload-k8s-image-line-5)">&#160;Upload&#160;image&#160;flags&#160;</text><text class="breeze-k8s-upload-k8s-image-r5" x="268.4" y="142" textLength="1171.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-5)">────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-upload-k8s-image-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-5)">─╮</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-5)">
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-6)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-6)">--python</text><text class="breeze-k8s-upload-k8s-image-r6" x="292.8" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-6)">-p</text><text class="breeze-k8s-upload-k8s-image-r1" x="341.6" y="166.4" textLength="732" clip-path="url(#breeze-k8s-upload-k8s-image-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-upload-k8s-image-r7" x="1085.8" y="166.4" textLength="341.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-6)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-k8s-upload-k8s-image-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-6)">│</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-6)">
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-7)">│</text><text class="breeze-k8s-upload-k8s-image-r5" x="341.6" y="190.8" textLength="732" clip-path="url(#breeze-k8s-upload-k8s-image-line-7)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-7)">│</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-7)">
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-6)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-6)">--python</text><text class="breeze-k8s-upload-k8s-image-r6" x="292.8" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-6)">-p</text><text class="breeze-k8s-upload-k8s-image-r1" x="341.6" y="166.4" textLength="732" clip-path="url(#breeze-k8s-upload-k8s-image-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-k8s-upload-k8s-image-r7" x="1085.8" y="166.4" textLength="268.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-6)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-k8s-upload-k8s-image-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-6)">│</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-6)">
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-7)">│</text><text class="breeze-k8s-upload-k8s-image-r5" x="341.6" y="190.8" textLength="732" clip-path="url(#breeze-k8s-upload-k8s-image-line-7)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-7)">│</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-7)">
 </text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-8)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="215.2" textLength="244" clip-path="url(#breeze-k8s-upload-k8s-image-line-8)">--kubernetes-version</text><text class="breeze-k8s-upload-k8s-image-r1" x="341.6" y="215.2" textLength="658.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-8)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text class="breeze-k8s-upload-k8s-image-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-8)">│</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-8)">
 </text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-9)">│</text><text class="breeze-k8s-upload-k8s-image-r7" x="341.6" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-9)">(&gt;v1.30.10&lt;&#160;|&#160;v1.31.6&#160;|&#160;v1.32.3&#160;|&#160;v1.33.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-9)">│</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-9)">
 </text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-10)">│</text><text class="breeze-k8s-upload-k8s-image-r5" x="341.6" y="264" textLength="658.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-10)">[default:&#160;v1.30.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-10)">│</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-10)">
@@ -162,7 +162,7 @@
 </text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-15)">│</text><text class="breeze-k8s-upload-k8s-image-r7" x="378.2" y="386" textLength="915" clip-path="url(#breeze-k8s-upload-k8s-image-line-15)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-15)">│</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-15)">
 </text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-16)">│</text><text class="breeze-k8s-upload-k8s-image-r5" x="378.2" y="410.4" textLength="915" clip-path="url(#breeze-k8s-upload-k8s-image-line-16)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-16)">│</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-16)">
 </text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-17)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="434.8" textLength="207.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-17)">--python-versions</text><text class="breeze-k8s-upload-k8s-image-r1" x="378.2" y="434.8" textLength="951.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-17)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;for&#160;build&#160;with&#160;multiple&#160;versions.</text><text class="breeze-k8s-upload-k8s-image-r7" x="1342" y="434.8" textLength="73.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-17)">(TEXT)</text><text class="breeze-k8s-upload-k8s-image-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-17)">│</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-17)">
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-18)">│</text><text class="breeze-k8s-upload-k8s-image-r5" x="378.2" y="459.2" textLength="951.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-18)">[default:&#160;3.9&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-18)">│</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-18)">
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-18)">│</text><text class="breeze-k8s-upload-k8s-image-r5" x="378.2" y="459.2" textLength="951.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-18)">[default:&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-18)">│</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-18)">
 </text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-19)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="483.6" textLength="256.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-19)">--kubernetes-versions</text><text class="breeze-k8s-upload-k8s-image-r1" x="378.2" y="483.6" textLength="756.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-19)">Kubernetes&#160;versions&#160;used&#160;to&#160;run&#160;in&#160;parallel&#160;(space&#160;separated).</text><text class="breeze-k8s-upload-k8s-image-r7" x="1146.8" y="483.6" textLength="73.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-19)">(TEXT)</text><text class="breeze-k8s-upload-k8s-image-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-19)">│</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-19)">
 </text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-20)">│</text><text class="breeze-k8s-upload-k8s-image-r5" x="378.2" y="508" textLength="756.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-20)">[default:&#160;v1.30.10&#160;v1.31.6&#160;v1.32.3&#160;v1.33.0]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-20)">│</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-20)">
 </text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-21)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="532.4" textLength="170.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-21)">--skip-cleanup</text><text class="breeze-k8s-upload-k8s-image-r1" x="378.2" y="532.4" textLength="732" clip-path="url(#breeze-k8s-upload-k8s-image-line-21)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text class="breeze-k8s-upload-k8s-image-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-21)">│</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-21)">
diff --git a/dev/breeze/doc/images/output_k8s_upload-k8s-image.txt b/dev/breeze/doc/images/output_k8s_upload-k8s-image.txt
index 2f1dc62ea085f..c50b134b778b4 100644
--- a/dev/breeze/doc/images/output_k8s_upload-k8s-image.txt
+++ b/dev/breeze/doc/images/output_k8s_upload-k8s-image.txt
@@ -1 +1 @@
-9eca0f3ec95e6f89e6c8925e664b2af1
+7b05f647b8a0009a1a18471678dbd14d
diff --git a/dev/breeze/doc/images/output_prod-image_build.svg b/dev/breeze/doc/images/output_prod-image_build.svg
index 4827d89a1fc6b..94e6a33e2c482 100644
--- a/dev/breeze/doc/images/output_prod-image_build.svg
+++ b/dev/breeze/doc/images/output_prod-image_build.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 2660.7999999999997" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 2636.3999999999996" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-prod-image-build-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="2609.7999999999997" />
+      <rect x="0" y="0" width="1463.0" height="2585.3999999999996" />
     </clipPath>
     <clipPath id="breeze-prod-image-build-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -360,12 +360,9 @@
 <clipPath id="breeze-prod-image-build-line-104">
     <rect x="0" y="2539.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="breeze-prod-image-build-line-105">
-    <rect x="0" y="2563.5" width="1464" height="24.65"/>
-            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2658.8" rx="8"/><text class="breeze-prod-image-build-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;prod-image&#160;build</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2634.4" rx="8"/><text class="breeze-prod-image-build-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;prod-image&#160;build</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -388,100 +385,99 @@
 </text><text class="breeze-prod-image-build-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-10)">│</text><text class="breeze-prod-image-build-r1" x="402.6" y="264" textLength="1037" clip-path="url(#breeze-prod-image-build-line-10)">option&#160;is&#160;ignored&#160;when&#160;building&#160;images.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-10)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-10)">
 </text><text class="breeze-prod-image-build-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-11)">│</text><text class="breeze-prod-image-build-r6" x="402.6" y="288.4" textLength="1037" clip-path="url(#breeze-prod-image-build-line-11)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-11)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-11)">
 </text><text class="breeze-prod-image-build-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-12)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="312.8" textLength="305" clip-path="url(#breeze-prod-image-build-line-12)">--install-airflow-version</text><text class="breeze-prod-image-build-r7" x="353.8" y="312.8" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-12)">-V</text><text class="breeze-prod-image-build-r1" x="402.6" y="312.8" textLength="451.4" clip-path="url(#breeze-prod-image-build-line-12)">Install&#160;version&#160;of&#160;Airflow&#160;from&#160;PyPI.</text><text class="breeze-prod-image-build-r6" x="866.2" y="312.8" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-12)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-12)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-12)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-13)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="337.2" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-13)">--python</text><text class="breeze-prod-image-build-r7" x="353.8" y="337.2" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-13)">-p</text><text class="breeze-prod-image-build-r1" x="402.6" y="337.2" textLength="732" clip-path="url(#breeze-prod-image-build-line-13)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-13)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-13)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-14)">│</text><text class="breeze-prod-image-build-r6" x="402.6" y="361.6" textLength="732" clip-path="url(#breeze-prod-image-build-line-14)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-14)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-14)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-15)">│</text><text class="breeze-prod-image-build-r5" x="402.6" y="386" textLength="732" clip-path="url(#breeze-prod-image-build-line-15)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-15)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-15)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-16)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="410.4" textLength="195.2" clip-path="url(#breeze-prod-image-build-line-16)">--version-suffix</text><text class="breeze-prod-image-build-r1" x="402.6" y="410.4" textLength="1037" clip-path="url(#breeze-prod-image-build-line-16)">Version&#160;suffix&#160;used&#160;for&#160;PyPI&#160;packages&#160;(a1,&#160;a2,&#160;b1,&#160;rc1,&#160;rc2,&#160;.dev0,&#160;.dev1,&#160;.post1,&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-16)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-16)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-17)">│</text><text class="breeze-prod-image-build-r1" x="402.6" y="434.8" textLength="1037" clip-path="url(#breeze-prod-image-build-line-17)">.post2&#160;etc.).&#160;Note&#160;the&#160;`.`&#160;is&#160;need&#160;in&#160;`.dev0`&#160;and&#160;`.post`.&#160;Might&#160;be&#160;followed&#160;with&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-17)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-17)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-18)">│</text><text class="breeze-prod-image-build-r1" x="402.6" y="459.2" textLength="1037" clip-path="url(#breeze-prod-image-build-line-18)">+local_version&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-18)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-18)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-19)">│</text><text class="breeze-prod-image-build-r6" x="402.6" y="483.6" textLength="1037" clip-path="url(#breeze-prod-image-build-line-19)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-19)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-19)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="508" textLength="1464" clip-path="url(#breeze-prod-image-build-line-20)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-20)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="532.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-21)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="532.4" textLength="353.8" clip-path="url(#breeze-prod-image-build-line-21)">&#160;Building&#160;images&#160;in&#160;parallel&#160;</text><text class="breeze-prod-image-build-r5" x="378.2" y="532.4" textLength="1061.4" clip-path="url(#breeze-prod-image-build-line-21)">───────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-prod-image-build-r5" x="1439.6" y="532.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-21)">─╮</text><text class="breeze-prod-image-build-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-21)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-22)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="556.8" textLength="207.4" clip-path="url(#breeze-prod-image-build-line-22)">--run-in-parallel</text><text class="breeze-prod-image-build-r1" x="378.2" y="556.8" textLength="854" clip-path="url(#breeze-prod-image-build-line-22)">Run&#160;the&#160;operation&#160;in&#160;parallel&#160;on&#160;all&#160;or&#160;selected&#160;subset&#160;of&#160;parameters.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-22)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-22)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-23)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="581.2" textLength="158.6" clip-path="url(#breeze-prod-image-build-line-23)">--parallelism</text><text class="breeze-prod-image-build-r1" x="378.2" y="581.2" textLength="915" clip-path="url(#breeze-prod-image-build-line-23)">Maximum&#160;number&#160;of&#160;processes&#160;to&#160;use&#160;while&#160;running&#160;the&#160;operation&#160;in&#160;parallel.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-23)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-23)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-24)">│</text><text class="breeze-prod-image-build-r6" x="378.2" y="605.6" textLength="915" clip-path="url(#breeze-prod-image-build-line-24)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-24)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-24)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-25)">│</text><text class="breeze-prod-image-build-r5" x="378.2" y="630" textLength="915" clip-path="url(#breeze-prod-image-build-line-25)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-25)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-25)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-26)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="654.4" textLength="207.4" clip-path="url(#breeze-prod-image-build-line-26)">--python-versions</text><text class="breeze-prod-image-build-r1" x="378.2" y="654.4" textLength="951.6" clip-path="url(#breeze-prod-image-build-line-26)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;for&#160;build&#160;with&#160;multiple&#160;versions.</text><text class="breeze-prod-image-build-r6" x="1342" y="654.4" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-26)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-26)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-26)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-27)">│</text><text class="breeze-prod-image-build-r5" x="378.2" y="678.8" textLength="951.6" clip-path="url(#breeze-prod-image-build-line-27)">[default:&#160;3.9&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-27)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-27)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-28)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="703.2" textLength="170.8" clip-path="url(#breeze-prod-image-build-line-28)">--skip-cleanup</text><text class="breeze-prod-image-build-r1" x="378.2" y="703.2" textLength="732" clip-path="url(#breeze-prod-image-build-line-28)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-28)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-28)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-29)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="727.6" textLength="207.4" clip-path="url(#breeze-prod-image-build-line-29)">--debug-resources</text><text class="breeze-prod-image-build-r1" x="378.2" y="727.6" textLength="768.6" clip-path="url(#breeze-prod-image-build-line-29)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;running&#160;in&#160;parallel.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-29)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-29)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-30)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="752" textLength="305" clip-path="url(#breeze-prod-image-build-line-30)">--include-success-outputs</text><text class="breeze-prod-image-build-r1" x="378.2" y="752" textLength="841.8" clip-path="url(#breeze-prod-image-build-line-30)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;runs&#160;(not&#160;shown&#160;by&#160;default).</text><text class="breeze-prod-image-build-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-30)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-30)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="776.4" textLength="1464" clip-path="url(#breeze-prod-image-build-line-31)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-31)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="800.8" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-32)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="800.8" textLength="512.4" clip-path="url(#breeze-prod-image-build-line-32)">&#160;Advanced&#160;build&#160;options&#160;(for&#160;power&#160;users)&#160;</text><text class="breeze-prod-image-build-r5" x="536.8" y="800.8" textLength="902.8" clip-path="url(#breeze-prod-image-build-line-32)">──────────────────────────────────────────────────────────────────────────</text><text class="breeze-prod-image-build-r5" x="1439.6" y="800.8" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-32)">─╮</text><text class="breeze-prod-image-build-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-32)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-33)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="825.2" textLength="366" clip-path="url(#breeze-prod-image-build-line-33)">--additional-pip-install-flags</text><text class="breeze-prod-image-build-r1" x="439.2" y="825.2" textLength="1000.4" clip-path="url(#breeze-prod-image-build-line-33)">Additional&#160;flags&#160;added&#160;to&#160;`pip&#160;install`&#160;commands&#160;(except&#160;reinstalling&#160;`pip`&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-33)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-33)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-34)">│</text><text class="breeze-prod-image-build-r1" x="439.2" y="849.6" textLength="1000.4" clip-path="url(#breeze-prod-image-build-line-34)">itself).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-34)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-34)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-35)">│</text><text class="breeze-prod-image-build-r6" x="439.2" y="874" textLength="1000.4" clip-path="url(#breeze-prod-image-build-line-35)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="874" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-35)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-35)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-36)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="898.4" textLength="146.4" clip-path="url(#breeze-prod-image-build-line-36)">--commit-sha</text><text class="breeze-prod-image-build-r1" x="439.2" y="898.4" textLength="536.8" clip-path="url(#breeze-prod-image-build-line-36)">Commit&#160;SHA&#160;that&#160;is&#160;used&#160;to&#160;build&#160;the&#160;images.</text><text class="breeze-prod-image-build-r6" x="988.2" y="898.4" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-36)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="898.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-36)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-36)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-37)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="922.8" textLength="195.2" clip-path="url(#breeze-prod-image-build-line-37)">--debian-version</text><text class="breeze-prod-image-build-r1" x="439.2" y="922.8" textLength="793" clip-path="url(#breeze-prod-image-build-line-37)">Debian&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;as&#160;base&#160;for&#160;building&#160;images.</text><text class="breeze-prod-image-build-r6" x="1244.4" y="922.8" textLength="122" clip-path="url(#breeze-prod-image-build-line-37)">(bookworm)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="922.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-37)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-37)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-38)">│</text><text class="breeze-prod-image-build-r5" x="439.2" y="947.2" textLength="793" clip-path="url(#breeze-prod-image-build-line-38)">[default:&#160;bookworm]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="947.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-38)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-38)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-39)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="971.6" textLength="170.8" clip-path="url(#breeze-prod-image-build-line-39)">--python-image</text><text class="breeze-prod-image-build-r1" x="439.2" y="971.6" textLength="1000.4" clip-path="url(#breeze-prod-image-build-line-39)">If&#160;specified&#160;this&#160;is&#160;the&#160;base&#160;python&#160;image&#160;used&#160;to&#160;build&#160;the&#160;image.&#160;Should&#160;be&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="971.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-39)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-39)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-40)">│</text><text class="breeze-prod-image-build-r1" x="439.2" y="996" textLength="1000.4" clip-path="url(#breeze-prod-image-build-line-40)">something&#160;like:&#160;python:VERSION-slim-bookworm.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="996" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-40)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-40)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-41)">│</text><text class="breeze-prod-image-build-r6" x="439.2" y="1020.4" textLength="1000.4" clip-path="url(#breeze-prod-image-build-line-41)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-41)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-41)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-42)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1044.8" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-42)">--use-uv</text><text class="breeze-prod-image-build-r1" x="122" y="1044.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-42)">/</text><text class="breeze-prod-image-build-r4" x="134.2" y="1044.8" textLength="134.2" clip-path="url(#breeze-prod-image-build-line-42)">--no-use-uv</text><text class="breeze-prod-image-build-r1" x="439.2" y="1044.8" textLength="719.8" clip-path="url(#breeze-prod-image-build-line-42)">Use&#160;uv&#160;instead&#160;of&#160;pip&#160;as&#160;packaging&#160;tool&#160;to&#160;build&#160;the&#160;image.</text><text class="breeze-prod-image-build-r5" x="1171.2" y="1044.8" textLength="244" clip-path="url(#breeze-prod-image-build-line-42)">[default:&#160;no-use-uv]</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-42)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-42)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-43)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1069.2" textLength="207.4" clip-path="url(#breeze-prod-image-build-line-43)">--uv-http-timeout</text><text class="breeze-prod-image-build-r1" x="439.2" y="1069.2" textLength="829.6" clip-path="url(#breeze-prod-image-build-line-43)">Timeout&#160;for&#160;requests&#160;that&#160;UV&#160;makes&#160;(only&#160;used&#160;in&#160;case&#160;of&#160;UV&#160;builds).</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1069.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-43)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-43)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-44)">│</text><text class="breeze-prod-image-build-r6" x="439.2" y="1093.6" textLength="829.6" clip-path="url(#breeze-prod-image-build-line-44)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1093.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-44)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-44)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-45)">│</text><text class="breeze-prod-image-build-r5" x="439.2" y="1118" textLength="829.6" clip-path="url(#breeze-prod-image-build-line-45)">[default:&#160;300;&#160;x&gt;=1]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1118" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-45)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-45)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1142.4" textLength="1464" clip-path="url(#breeze-prod-image-build-line-46)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-46)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1166.8" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-47)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="1166.8" textLength="597.8" clip-path="url(#breeze-prod-image-build-line-47)">&#160;Selecting&#160;constraint&#160;location&#160;(for&#160;power&#160;users)&#160;</text><text class="breeze-prod-image-build-r5" x="622.2" y="1166.8" textLength="817.4" clip-path="url(#breeze-prod-image-build-line-47)">───────────────────────────────────────────────────────────────────</text><text class="breeze-prod-image-build-r5" x="1439.6" y="1166.8" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-47)">─╮</text><text class="breeze-prod-image-build-r1" x="1464" y="1166.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-47)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-48)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1191.2" textLength="366" clip-path="url(#breeze-prod-image-build-line-48)">--airflow-constraints-location</text><text class="breeze-prod-image-build-r1" x="451.4" y="1191.2" textLength="902.8" clip-path="url(#breeze-prod-image-build-line-48)">Location&#160;of&#160;airflow&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;local&#160;context&#160;file).</text><text class="breeze-prod-image-build-r6" x="1366.4" y="1191.2" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-48)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1191.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-48)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-48)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-49)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1215.6" textLength="317.2" clip-path="url(#breeze-prod-image-build-line-49)">--airflow-constraints-mode</text><text class="breeze-prod-image-build-r1" x="451.4" y="1215.6" textLength="866.2" clip-path="url(#breeze-prod-image-build-line-49)">Mode&#160;of&#160;constraints&#160;for&#160;Airflow&#160;for&#160;PROD&#160;image&#160;building.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1215.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-49)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-49)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-50)">│</text><text class="breeze-prod-image-build-r6" x="451.4" y="1240" textLength="866.2" clip-path="url(#breeze-prod-image-build-line-50)">(constraints&#160;|&#160;constraints-no-providers&#160;|&#160;constraints-source-providers)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1240" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-50)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-50)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-51)">│</text><text class="breeze-prod-image-build-r5" x="451.4" y="1264.4" textLength="866.2" clip-path="url(#breeze-prod-image-build-line-51)">[default:&#160;constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1264.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-51)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-51)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-52)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1288.8" textLength="378.2" clip-path="url(#breeze-prod-image-build-line-52)">--airflow-constraints-reference</text><text class="breeze-prod-image-build-r1" x="451.4" y="1288.8" textLength="634.4" clip-path="url(#breeze-prod-image-build-line-52)">Constraint&#160;reference&#160;to&#160;use&#160;when&#160;building&#160;the&#160;image.</text><text class="breeze-prod-image-build-r6" x="1098" y="1288.8" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-52)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1288.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-52)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-52)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1313.2" textLength="1464" clip-path="url(#breeze-prod-image-build-line-53)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="1313.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-53)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1337.6" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-54)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="1337.6" textLength="634.4" clip-path="url(#breeze-prod-image-build-line-54)">&#160;Choosing&#160;dependencies&#160;and&#160;extras&#160;(for&#160;power&#160;users)&#160;</text><text class="breeze-prod-image-build-r5" x="658.8" y="1337.6" textLength="780.8" clip-path="url(#breeze-prod-image-build-line-54)">────────────────────────────────────────────────────────────────</text><text class="breeze-prod-image-build-r5" x="1439.6" y="1337.6" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-54)">─╮</text><text class="breeze-prod-image-build-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-54)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-55)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1362" textLength="195.2" clip-path="url(#breeze-prod-image-build-line-55)">--airflow-extras</text><text class="breeze-prod-image-build-r1" x="463.6" y="1362" textLength="976" clip-path="url(#breeze-prod-image-build-line-55)">Extras&#160;to&#160;install&#160;by&#160;default.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1362" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-55)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-55)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-56)">│</text><text class="breeze-prod-image-build-r6" x="463.6" y="1386.4" textLength="976" clip-path="url(#breeze-prod-image-build-line-56)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1386.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-56)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-56)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-57)">│</text><text class="breeze-prod-image-build-r5" x="463.6" y="1410.8" textLength="976" clip-path="url(#breeze-prod-image-build-line-57)">[default:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1410.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-57)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-57)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-58)">│</text><text class="breeze-prod-image-build-r5" x="463.6" y="1435.2" textLength="976" clip-path="url(#breeze-prod-image-build-line-58)">aiobotocore,amazon,async,celery,cncf-kubernetes,common-io,common-messaging,dock…</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1435.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-58)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-58)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-59)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1459.6" textLength="329.4" clip-path="url(#breeze-prod-image-build-line-59)">--additional-airflow-extras</text><text class="breeze-prod-image-build-r1" x="463.6" y="1459.6" textLength="768.6" clip-path="url(#breeze-prod-image-build-line-59)">Additional&#160;extra&#160;package&#160;while&#160;installing&#160;Airflow&#160;in&#160;the&#160;image.</text><text class="breeze-prod-image-build-r6" x="1244.4" y="1459.6" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-59)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1459.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-59)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-59)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-60)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1484" textLength="292.8" clip-path="url(#breeze-prod-image-build-line-60)">--additional-python-deps</text><text class="breeze-prod-image-build-r1" x="463.6" y="1484" textLength="768.6" clip-path="url(#breeze-prod-image-build-line-60)">Additional&#160;python&#160;dependencies&#160;to&#160;use&#160;when&#160;building&#160;the&#160;images.</text><text class="breeze-prod-image-build-r6" x="1244.4" y="1484" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-60)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1484" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-60)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-60)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-61)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1508.4" textLength="170.8" clip-path="url(#breeze-prod-image-build-line-61)">--dev-apt-deps</text><text class="breeze-prod-image-build-r1" x="463.6" y="1508.4" textLength="646.6" clip-path="url(#breeze-prod-image-build-line-61)">Apt&#160;dev&#160;dependencies&#160;to&#160;use&#160;when&#160;building&#160;the&#160;images.</text><text class="breeze-prod-image-build-r6" x="1122.4" y="1508.4" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-61)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1508.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-61)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-61)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-62)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1532.8" textLength="305" clip-path="url(#breeze-prod-image-build-line-62)">--additional-dev-apt-deps</text><text class="breeze-prod-image-build-r1" x="463.6" y="1532.8" textLength="780.8" clip-path="url(#breeze-prod-image-build-line-62)">Additional&#160;apt&#160;dev&#160;dependencies&#160;to&#160;use&#160;when&#160;building&#160;the&#160;images.</text><text class="breeze-prod-image-build-r6" x="1256.6" y="1532.8" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-62)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1532.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-62)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-62)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-63)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1557.2" textLength="207.4" clip-path="url(#breeze-prod-image-build-line-63)">--dev-apt-command</text><text class="breeze-prod-image-build-r1" x="463.6" y="1557.2" textLength="622.2" clip-path="url(#breeze-prod-image-build-line-63)">Command&#160;executed&#160;before&#160;dev&#160;apt&#160;deps&#160;are&#160;installed.</text><text class="breeze-prod-image-build-r6" x="1098" y="1557.2" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-63)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1557.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-63)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-63)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-64)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1581.6" textLength="341.6" clip-path="url(#breeze-prod-image-build-line-64)">--additional-dev-apt-command</text><text class="breeze-prod-image-build-r1" x="463.6" y="1581.6" textLength="756.4" clip-path="url(#breeze-prod-image-build-line-64)">Additional&#160;command&#160;executed&#160;before&#160;dev&#160;apt&#160;deps&#160;are&#160;installed.</text><text class="breeze-prod-image-build-r6" x="1232.2" y="1581.6" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-64)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1581.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-64)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-64)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-65)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1606" textLength="292.8" clip-path="url(#breeze-prod-image-build-line-65)">--additional-dev-apt-env</text><text class="breeze-prod-image-build-r1" x="463.6" y="1606" textLength="805.2" clip-path="url(#breeze-prod-image-build-line-65)">Additional&#160;environment&#160;variables&#160;set&#160;when&#160;adding&#160;dev&#160;dependencies.</text><text class="breeze-prod-image-build-r6" x="1281" y="1606" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-65)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1606" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-65)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-65)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-66)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1630.4" textLength="219.6" clip-path="url(#breeze-prod-image-build-line-66)">--runtime-apt-deps</text><text class="breeze-prod-image-build-r1" x="463.6" y="1630.4" textLength="695.4" clip-path="url(#breeze-prod-image-build-line-66)">Apt&#160;runtime&#160;dependencies&#160;to&#160;use&#160;when&#160;building&#160;the&#160;images.</text><text class="breeze-prod-image-build-r6" x="1171.2" y="1630.4" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-66)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1630.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-66)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-66)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-67)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1654.8" textLength="353.8" clip-path="url(#breeze-prod-image-build-line-67)">--additional-runtime-apt-deps</text><text class="breeze-prod-image-build-r1" x="463.6" y="1654.8" textLength="829.6" clip-path="url(#breeze-prod-image-build-line-67)">Additional&#160;apt&#160;runtime&#160;dependencies&#160;to&#160;use&#160;when&#160;building&#160;the&#160;images.</text><text class="breeze-prod-image-build-r6" x="1305.4" y="1654.8" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-67)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1654.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-67)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-67)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-68)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1679.2" textLength="256.2" clip-path="url(#breeze-prod-image-build-line-68)">--runtime-apt-command</text><text class="breeze-prod-image-build-r1" x="463.6" y="1679.2" textLength="671" clip-path="url(#breeze-prod-image-build-line-68)">Command&#160;executed&#160;before&#160;runtime&#160;apt&#160;deps&#160;are&#160;installed.</text><text class="breeze-prod-image-build-r6" x="1146.8" y="1679.2" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-68)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1679.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-68)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-68)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-69)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1703.6" textLength="390.4" clip-path="url(#breeze-prod-image-build-line-69)">--additional-runtime-apt-command</text><text class="breeze-prod-image-build-r1" x="463.6" y="1703.6" textLength="805.2" clip-path="url(#breeze-prod-image-build-line-69)">Additional&#160;command&#160;executed&#160;before&#160;runtime&#160;apt&#160;deps&#160;are&#160;installed.</text><text class="breeze-prod-image-build-r6" x="1281" y="1703.6" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-69)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1703.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-69)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-69)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-70)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1728" textLength="341.6" clip-path="url(#breeze-prod-image-build-line-70)">--additional-runtime-apt-env</text><text class="breeze-prod-image-build-r1" x="463.6" y="1728" textLength="854" clip-path="url(#breeze-prod-image-build-line-70)">Additional&#160;environment&#160;variables&#160;set&#160;when&#160;adding&#160;runtime&#160;dependencies.</text><text class="breeze-prod-image-build-r6" x="1329.8" y="1728" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-70)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1728" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-70)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-70)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1752.4" textLength="1464" clip-path="url(#breeze-prod-image-build-line-71)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="1752.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-71)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1776.8" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-72)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="1776.8" textLength="817.4" clip-path="url(#breeze-prod-image-build-line-72)">&#160;Advanced&#160;customization&#160;options&#160;(for&#160;specific&#160;customization&#160;needs)&#160;</text><text class="breeze-prod-image-build-r5" x="841.8" y="1776.8" textLength="597.8" clip-path="url(#breeze-prod-image-build-line-72)">─────────────────────────────────────────────────</text><text class="breeze-prod-image-build-r5" x="1439.6" y="1776.8" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-72)">─╮</text><text class="breeze-prod-image-build-r1" x="1464" y="1776.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-72)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-73)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1801.2" textLength="256.2" clip-path="url(#breeze-prod-image-build-line-73)">--installation-method</text><text class="breeze-prod-image-build-r1" x="597.8" y="1801.2" textLength="463.6" clip-path="url(#breeze-prod-image-build-line-73)">Install&#160;Airflow&#160;from:&#160;sources&#160;or&#160;PyPI.</text><text class="breeze-prod-image-build-r6" x="1073.6" y="1801.2" textLength="244" clip-path="url(#breeze-prod-image-build-line-73)">(.&#160;|&#160;apache-airflow)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1801.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-73)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-73)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1825.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-74)">│</text><text class="breeze-prod-image-build-r5" x="597.8" y="1825.6" textLength="463.6" clip-path="url(#breeze-prod-image-build-line-74)">[default:&#160;.]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1825.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-74)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-74)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-75)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1850" textLength="329.4" clip-path="url(#breeze-prod-image-build-line-75)">--install-airflow-reference</text><text class="breeze-prod-image-build-r1" x="597.8" y="1850" textLength="524.6" clip-path="url(#breeze-prod-image-build-line-75)">Install&#160;Airflow&#160;using&#160;GitHub&#160;tag&#160;or&#160;branch.</text><text class="breeze-prod-image-build-r6" x="1134.6" y="1850" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-75)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1850" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-75)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-75)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-76)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1874.4" textLength="439.2" clip-path="url(#breeze-prod-image-build-line-76)">--install-distributions-from-context</text><text class="breeze-prod-image-build-r1" x="597.8" y="1874.4" textLength="841.8" clip-path="url(#breeze-prod-image-build-line-76)">Install&#160;distributions&#160;from&#160;local&#160;docker-context-files&#160;when&#160;building&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1874.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-76)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-76)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1898.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-77)">│</text><text class="breeze-prod-image-build-r1" x="597.8" y="1898.8" textLength="183" clip-path="url(#breeze-prod-image-build-line-77)">image.&#160;Implies&#160;</text><text class="breeze-prod-image-build-r4" x="780.8" y="1898.8" textLength="341.6" clip-path="url(#breeze-prod-image-build-line-77)">--disable-airflow-repo-cache</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1898.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-77)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-77)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1923.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-78)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1923.2" textLength="329.4" clip-path="url(#breeze-prod-image-build-line-78)">--install-mysql-client-type</text><text class="breeze-prod-image-build-r1" x="597.8" y="1923.2" textLength="475.8" clip-path="url(#breeze-prod-image-build-line-78)">Which&#160;client&#160;to&#160;choose&#160;when&#160;installing.</text><text class="breeze-prod-image-build-r6" x="1085.8" y="1923.2" textLength="207.4" clip-path="url(#breeze-prod-image-build-line-78)">(mariadb&#160;|&#160;mysql)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1923.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-78)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-78)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-79)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1947.6" textLength="207.4" clip-path="url(#breeze-prod-image-build-line-79)">--cleanup-context</text><text class="breeze-prod-image-build-r1" x="597.8" y="1947.6" textLength="841.8" clip-path="url(#breeze-prod-image-build-line-79)">Clean&#160;up&#160;docker&#160;context&#160;files&#160;before&#160;running&#160;build&#160;(cannot&#160;be&#160;used&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1947.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-79)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1947.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-79)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-80)">│</text><text class="breeze-prod-image-build-r1" x="597.8" y="1972" textLength="170.8" clip-path="url(#breeze-prod-image-build-line-80)">together&#160;with&#160;</text><text class="breeze-prod-image-build-r4" x="768.6" y="1972" textLength="439.2" clip-path="url(#breeze-prod-image-build-line-80)">--install-distributions-from-context</text><text class="breeze-prod-image-build-r1" x="1207.8" y="1972" textLength="231.8" clip-path="url(#breeze-prod-image-build-line-80)">).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1972" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-80)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-80)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-81)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1996.4" textLength="524.6" clip-path="url(#breeze-prod-image-build-line-81)">--use-constraints-for-context-distributions</text><text class="breeze-prod-image-build-r1" x="597.8" y="1996.4" textLength="841.8" clip-path="url(#breeze-prod-image-build-line-81)">Uses&#160;constraints&#160;for&#160;context&#160;distributions&#160;installation&#160;-&#160;either&#160;from</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1996.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-81)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-81)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-82)">│</text><text class="breeze-prod-image-build-r1" x="597.8" y="2020.8" textLength="841.8" clip-path="url(#breeze-prod-image-build-line-82)">constraints&#160;store&#160;in&#160;docker-context-files&#160;or&#160;from&#160;github.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2020.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-82)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-82)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-83)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2045.2" textLength="341.6" clip-path="url(#breeze-prod-image-build-line-83)">--disable-airflow-repo-cache</text><text class="breeze-prod-image-build-r1" x="597.8" y="2045.2" textLength="658.8" clip-path="url(#breeze-prod-image-build-line-83)">Disable&#160;cache&#160;from&#160;Airflow&#160;repository&#160;during&#160;building.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2045.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-83)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-83)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-84)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2069.6" textLength="427" clip-path="url(#breeze-prod-image-build-line-84)">--disable-mysql-client-installation</text><text class="breeze-prod-image-build-r1" x="597.8" y="2069.6" textLength="341.6" clip-path="url(#breeze-prod-image-build-line-84)">Do&#160;not&#160;install&#160;MySQL&#160;client.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2069.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-84)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-84)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-85)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2094" textLength="427" clip-path="url(#breeze-prod-image-build-line-85)">--disable-mssql-client-installation</text><text class="breeze-prod-image-build-r1" x="597.8" y="2094" textLength="341.6" clip-path="url(#breeze-prod-image-build-line-85)">Do&#160;not&#160;install&#160;MsSQl&#160;client.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2094" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-85)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-85)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-86)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2118.4" textLength="463.6" clip-path="url(#breeze-prod-image-build-line-86)">--disable-postgres-client-installation</text><text class="breeze-prod-image-build-r1" x="597.8" y="2118.4" textLength="378.2" clip-path="url(#breeze-prod-image-build-line-86)">Do&#160;not&#160;install&#160;Postgres&#160;client.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2118.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-86)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-86)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2142.8" textLength="1464" clip-path="url(#breeze-prod-image-build-line-87)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-87)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2167.2" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-88)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="2167.2" textLength="622.2" clip-path="url(#breeze-prod-image-build-line-88)">&#160;Preparing&#160;cache&#160;and&#160;push&#160;(for&#160;maintainers&#160;and&#160;CI)&#160;</text><text class="breeze-prod-image-build-r5" x="646.6" y="2167.2" textLength="793" clip-path="url(#breeze-prod-image-build-line-88)">─────────────────────────────────────────────────────────────────</text><text class="breeze-prod-image-build-r5" x="1439.6" y="2167.2" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-88)">─╮</text><text class="breeze-prod-image-build-r1" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-88)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2191.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-89)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2191.6" textLength="109.8" clip-path="url(#breeze-prod-image-build-line-89)">--builder</text><text class="breeze-prod-image-build-r1" x="341.6" y="2191.6" textLength="756.4" clip-path="url(#breeze-prod-image-build-line-89)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build`&#160;commands.</text><text class="breeze-prod-image-build-r6" x="1110.2" y="2191.6" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-89)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2191.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-89)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2191.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-89)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2216" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-90)">│</text><text class="breeze-prod-image-build-r5" x="341.6" y="2216" textLength="756.4" clip-path="url(#breeze-prod-image-build-line-90)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2216" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-90)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2216" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-90)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2240.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-91)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2240.4" textLength="122" clip-path="url(#breeze-prod-image-build-line-91)">--platform</text><text class="breeze-prod-image-build-r1" x="341.6" y="2240.4" textLength="1024.8" clip-path="url(#breeze-prod-image-build-line-91)">Platform&#160;for&#160;Airflow&#160;image.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2240.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-91)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2240.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-91)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2264.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-92)">│</text><text class="breeze-prod-image-build-r6" x="341.6" y="2264.8" textLength="1024.8" clip-path="url(#breeze-prod-image-build-line-92)">(linux/amd64&#160;|&#160;linux/arm64&#160;|&#160;linux/x86_64&#160;|&#160;linux/aarch64&#160;|&#160;linux/amd64,linux/arm64)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2264.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-92)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2264.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-92)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2289.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-93)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2289.2" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-93)">--push</text><text class="breeze-prod-image-build-r1" x="341.6" y="2289.2" textLength="353.8" clip-path="url(#breeze-prod-image-build-line-93)">Push&#160;image&#160;after&#160;building&#160;it.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2289.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-93)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2289.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-93)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2313.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-94)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2313.6" textLength="268.4" clip-path="url(#breeze-prod-image-build-line-94)">--prepare-buildx-cache</text><text class="breeze-prod-image-build-r1" x="341.6" y="2313.6" textLength="1098" clip-path="url(#breeze-prod-image-build-line-94)">Prepares&#160;build&#160;cache&#160;(this&#160;is&#160;done&#160;as&#160;separate&#160;per-platform&#160;steps&#160;instead&#160;of&#160;building&#160;the&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2313.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-94)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2313.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-94)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2338" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-95)">│</text><text class="breeze-prod-image-build-r1" x="341.6" y="2338" textLength="1098" clip-path="url(#breeze-prod-image-build-line-95)">image).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2338" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-95)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2338" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-95)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2362.4" textLength="1464" clip-path="url(#breeze-prod-image-build-line-96)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="2362.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-96)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2386.8" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-97)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="2386.8" textLength="280.6" clip-path="url(#breeze-prod-image-build-line-97)">&#160;Github&#160;authentication&#160;</text><text class="breeze-prod-image-build-r5" x="305" y="2386.8" textLength="1134.6" clip-path="url(#breeze-prod-image-build-line-97)">─────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-prod-image-build-r5" x="1439.6" y="2386.8" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-97)">─╮</text><text class="breeze-prod-image-build-r1" x="1464" y="2386.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-97)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2411.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-98)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2411.2" textLength="231.8" clip-path="url(#breeze-prod-image-build-line-98)">--github-repository</text><text class="breeze-prod-image-build-r7" x="280.6" y="2411.2" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-98)">-g</text><text class="breeze-prod-image-build-r1" x="329.4" y="2411.2" textLength="585.6" clip-path="url(#breeze-prod-image-build-line-98)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-prod-image-build-r6" x="927.2" y="2411.2" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-98)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1012.6" y="2411.2" textLength="305" clip-path="url(#breeze-prod-image-build-line-98)">[default:&#160;apache/airflow]</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2411.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-98)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2411.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-98)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2435.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-99)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2435.6" textLength="170.8" clip-path="url(#breeze-prod-image-build-line-99)">--github-token</text><text class="breeze-prod-image-build-r1" x="329.4" y="2435.6" textLength="500.2" clip-path="url(#breeze-prod-image-build-line-99)">The&#160;token&#160;used&#160;to&#160;authenticate&#160;to&#160;GitHub.</text><text class="breeze-prod-image-build-r6" x="841.8" y="2435.6" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-99)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2435.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-99)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2435.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-99)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2460" textLength="1464" clip-path="url(#breeze-prod-image-build-line-100)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="2460" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-100)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2484.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-101)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="2484.4" textLength="195.2" clip-path="url(#breeze-prod-image-build-line-101)">&#160;Common&#160;options&#160;</text><text class="breeze-prod-image-build-r5" x="219.6" y="2484.4" textLength="1220" clip-path="url(#breeze-prod-image-build-line-101)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-prod-image-build-r5" x="1439.6" y="2484.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-101)">─╮</text><text class="breeze-prod-image-build-r1" x="1464" y="2484.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-101)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2508.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-102)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2508.8" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-102)">--answer</text><text class="breeze-prod-image-build-r7" x="158.6" y="2508.8" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-102)">-a</text><text class="breeze-prod-image-build-r1" x="207.4" y="2508.8" textLength="317.2" clip-path="url(#breeze-prod-image-build-line-102)">Force&#160;answer&#160;to&#160;questions.</text><text class="breeze-prod-image-build-r6" x="536.8" y="2508.8" textLength="353.8" clip-path="url(#breeze-prod-image-build-line-102)">(y&#160;|&#160;n&#160;|&#160;q&#160;|&#160;yes&#160;|&#160;no&#160;|&#160;quit)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2508.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-102)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2508.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-102)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2533.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-103)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2533.2" textLength="109.8" clip-path="url(#breeze-prod-image-build-line-103)">--dry-run</text><text class="breeze-prod-image-build-r7" x="158.6" y="2533.2" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-103)">-D</text><text class="breeze-prod-image-build-r1" x="207.4" y="2533.2" textLength="719.8" clip-path="url(#breeze-prod-image-build-line-103)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2533.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-103)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2533.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-103)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2557.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-104)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2557.6" textLength="109.8" clip-path="url(#breeze-prod-image-build-line-104)">--verbose</text><text class="breeze-prod-image-build-r7" x="158.6" y="2557.6" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-104)">-v</text><text class="breeze-prod-image-build-r1" x="207.4" y="2557.6" textLength="585.6" clip-path="url(#breeze-prod-image-build-line-104)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2557.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-104)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2557.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-104)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2582" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-105)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2582" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-105)">--help</text><text class="breeze-prod-image-build-r7" x="158.6" y="2582" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-105)">-h</text><text class="breeze-prod-image-build-r1" x="207.4" y="2582" textLength="329.4" clip-path="url(#breeze-prod-image-build-line-105)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2582" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-105)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2582" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-105)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2606.4" textLength="1464" clip-path="url(#breeze-prod-image-build-line-106)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="2606.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-106)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-13)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="337.2" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-13)">--python</text><text class="breeze-prod-image-build-r7" x="353.8" y="337.2" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-13)">-p</text><text class="breeze-prod-image-build-r1" x="402.6" y="337.2" textLength="732" clip-path="url(#breeze-prod-image-build-line-13)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-prod-image-build-r6" x="1146.8" y="337.2" textLength="268.4" clip-path="url(#breeze-prod-image-build-line-13)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-13)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-13)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-14)">│</text><text class="breeze-prod-image-build-r5" x="402.6" y="361.6" textLength="732" clip-path="url(#breeze-prod-image-build-line-14)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-14)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-14)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-15)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="386" textLength="195.2" clip-path="url(#breeze-prod-image-build-line-15)">--version-suffix</text><text class="breeze-prod-image-build-r1" x="402.6" y="386" textLength="1037" clip-path="url(#breeze-prod-image-build-line-15)">Version&#160;suffix&#160;used&#160;for&#160;PyPI&#160;packages&#160;(a1,&#160;a2,&#160;b1,&#160;rc1,&#160;rc2,&#160;.dev0,&#160;.dev1,&#160;.post1,&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-15)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-15)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-16)">│</text><text class="breeze-prod-image-build-r1" x="402.6" y="410.4" textLength="1037" clip-path="url(#breeze-prod-image-build-line-16)">.post2&#160;etc.).&#160;Note&#160;the&#160;`.`&#160;is&#160;need&#160;in&#160;`.dev0`&#160;and&#160;`.post`.&#160;Might&#160;be&#160;followed&#160;with&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-16)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-16)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-17)">│</text><text class="breeze-prod-image-build-r1" x="402.6" y="434.8" textLength="1037" clip-path="url(#breeze-prod-image-build-line-17)">+local_version&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-17)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-17)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-18)">│</text><text class="breeze-prod-image-build-r6" x="402.6" y="459.2" textLength="1037" clip-path="url(#breeze-prod-image-build-line-18)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-18)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-18)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="483.6" textLength="1464" clip-path="url(#breeze-prod-image-build-line-19)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-19)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="508" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-20)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="508" textLength="353.8" clip-path="url(#breeze-prod-image-build-line-20)">&#160;Building&#160;images&#160;in&#160;parallel&#160;</text><text class="breeze-prod-image-build-r5" x="378.2" y="508" textLength="1061.4" clip-path="url(#breeze-prod-image-build-line-20)">───────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-prod-image-build-r5" x="1439.6" y="508" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-20)">─╮</text><text class="breeze-prod-image-build-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-20)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-21)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="532.4" textLength="207.4" clip-path="url(#breeze-prod-image-build-line-21)">--run-in-parallel</text><text class="breeze-prod-image-build-r1" x="378.2" y="532.4" textLength="854" clip-path="url(#breeze-prod-image-build-line-21)">Run&#160;the&#160;operation&#160;in&#160;parallel&#160;on&#160;all&#160;or&#160;selected&#160;subset&#160;of&#160;parameters.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-21)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-21)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-22)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="556.8" textLength="158.6" clip-path="url(#breeze-prod-image-build-line-22)">--parallelism</text><text class="breeze-prod-image-build-r1" x="378.2" y="556.8" textLength="915" clip-path="url(#breeze-prod-image-build-line-22)">Maximum&#160;number&#160;of&#160;processes&#160;to&#160;use&#160;while&#160;running&#160;the&#160;operation&#160;in&#160;parallel.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-22)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-22)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-23)">│</text><text class="breeze-prod-image-build-r6" x="378.2" y="581.2" textLength="915" clip-path="url(#breeze-prod-image-build-line-23)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-23)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-23)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-24)">│</text><text class="breeze-prod-image-build-r5" x="378.2" y="605.6" textLength="915" clip-path="url(#breeze-prod-image-build-line-24)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-24)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-24)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-25)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="630" textLength="207.4" clip-path="url(#breeze-prod-image-build-line-25)">--python-versions</text><text class="breeze-prod-image-build-r1" x="378.2" y="630" textLength="951.6" clip-path="url(#breeze-prod-image-build-line-25)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;for&#160;build&#160;with&#160;multiple&#160;versions.</text><text class="breeze-prod-image-build-r6" x="1342" y="630" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-25)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-25)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-25)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-26)">│</text><text class="breeze-prod-image-build-r5" x="378.2" y="654.4" textLength="951.6" clip-path="url(#breeze-prod-image-build-line-26)">[default:&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-26)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-26)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-27)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="678.8" textLength="170.8" clip-path="url(#breeze-prod-image-build-line-27)">--skip-cleanup</text><text class="breeze-prod-image-build-r1" x="378.2" y="678.8" textLength="732" clip-path="url(#breeze-prod-image-build-line-27)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-27)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-27)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-28)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="703.2" textLength="207.4" clip-path="url(#breeze-prod-image-build-line-28)">--debug-resources</text><text class="breeze-prod-image-build-r1" x="378.2" y="703.2" textLength="768.6" clip-path="url(#breeze-prod-image-build-line-28)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;running&#160;in&#160;parallel.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-28)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-28)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-29)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="727.6" textLength="305" clip-path="url(#breeze-prod-image-build-line-29)">--include-success-outputs</text><text class="breeze-prod-image-build-r1" x="378.2" y="727.6" textLength="841.8" clip-path="url(#breeze-prod-image-build-line-29)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;runs&#160;(not&#160;shown&#160;by&#160;default).</text><text class="breeze-prod-image-build-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-29)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-29)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="752" textLength="1464" clip-path="url(#breeze-prod-image-build-line-30)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-30)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="776.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-31)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="776.4" textLength="512.4" clip-path="url(#breeze-prod-image-build-line-31)">&#160;Advanced&#160;build&#160;options&#160;(for&#160;power&#160;users)&#160;</text><text class="breeze-prod-image-build-r5" x="536.8" y="776.4" textLength="902.8" clip-path="url(#breeze-prod-image-build-line-31)">──────────────────────────────────────────────────────────────────────────</text><text class="breeze-prod-image-build-r5" x="1439.6" y="776.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-31)">─╮</text><text class="breeze-prod-image-build-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-31)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-32)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="800.8" textLength="366" clip-path="url(#breeze-prod-image-build-line-32)">--additional-pip-install-flags</text><text class="breeze-prod-image-build-r1" x="439.2" y="800.8" textLength="1000.4" clip-path="url(#breeze-prod-image-build-line-32)">Additional&#160;flags&#160;added&#160;to&#160;`pip&#160;install`&#160;commands&#160;(except&#160;reinstalling&#160;`pip`&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-32)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-32)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-33)">│</text><text class="breeze-prod-image-build-r1" x="439.2" y="825.2" textLength="1000.4" clip-path="url(#breeze-prod-image-build-line-33)">itself).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-33)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-33)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-34)">│</text><text class="breeze-prod-image-build-r6" x="439.2" y="849.6" textLength="1000.4" clip-path="url(#breeze-prod-image-build-line-34)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-34)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-34)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-35)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="874" textLength="146.4" clip-path="url(#breeze-prod-image-build-line-35)">--commit-sha</text><text class="breeze-prod-image-build-r1" x="439.2" y="874" textLength="536.8" clip-path="url(#breeze-prod-image-build-line-35)">Commit&#160;SHA&#160;that&#160;is&#160;used&#160;to&#160;build&#160;the&#160;images.</text><text class="breeze-prod-image-build-r6" x="988.2" y="874" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-35)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="874" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-35)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-35)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-36)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="898.4" textLength="195.2" clip-path="url(#breeze-prod-image-build-line-36)">--debian-version</text><text class="breeze-prod-image-build-r1" x="439.2" y="898.4" textLength="793" clip-path="url(#breeze-prod-image-build-line-36)">Debian&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;as&#160;base&#160;for&#160;building&#160;images.</text><text class="breeze-prod-image-build-r6" x="1244.4" y="898.4" textLength="122" clip-path="url(#breeze-prod-image-build-line-36)">(bookworm)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="898.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-36)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-36)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-37)">│</text><text class="breeze-prod-image-build-r5" x="439.2" y="922.8" textLength="793" clip-path="url(#breeze-prod-image-build-line-37)">[default:&#160;bookworm]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="922.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-37)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-37)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-38)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="947.2" textLength="170.8" clip-path="url(#breeze-prod-image-build-line-38)">--python-image</text><text class="breeze-prod-image-build-r1" x="439.2" y="947.2" textLength="1000.4" clip-path="url(#breeze-prod-image-build-line-38)">If&#160;specified&#160;this&#160;is&#160;the&#160;base&#160;python&#160;image&#160;used&#160;to&#160;build&#160;the&#160;image.&#160;Should&#160;be&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="947.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-38)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-38)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-39)">│</text><text class="breeze-prod-image-build-r1" x="439.2" y="971.6" textLength="1000.4" clip-path="url(#breeze-prod-image-build-line-39)">something&#160;like:&#160;python:VERSION-slim-bookworm.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="971.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-39)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-39)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-40)">│</text><text class="breeze-prod-image-build-r6" x="439.2" y="996" textLength="1000.4" clip-path="url(#breeze-prod-image-build-line-40)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="996" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-40)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-40)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-41)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1020.4" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-41)">--use-uv</text><text class="breeze-prod-image-build-r1" x="122" y="1020.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-41)">/</text><text class="breeze-prod-image-build-r4" x="134.2" y="1020.4" textLength="134.2" clip-path="url(#breeze-prod-image-build-line-41)">--no-use-uv</text><text class="breeze-prod-image-build-r1" x="439.2" y="1020.4" textLength="719.8" clip-path="url(#breeze-prod-image-build-line-41)">Use&#160;uv&#160;instead&#160;of&#160;pip&#160;as&#160;packaging&#160;tool&#160;to&#160;build&#160;the&#160;image.</text><text class="breeze-prod-image-build-r5" x="1171.2" y="1020.4" textLength="244" clip-path="url(#breeze-prod-image-build-line-41)">[default:&#160;no-use-uv]</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-41)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-41)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-42)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1044.8" textLength="207.4" clip-path="url(#breeze-prod-image-build-line-42)">--uv-http-timeout</text><text class="breeze-prod-image-build-r1" x="439.2" y="1044.8" textLength="829.6" clip-path="url(#breeze-prod-image-build-line-42)">Timeout&#160;for&#160;requests&#160;that&#160;UV&#160;makes&#160;(only&#160;used&#160;in&#160;case&#160;of&#160;UV&#160;builds).</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-42)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-42)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-43)">│</text><text class="breeze-prod-image-build-r6" x="439.2" y="1069.2" textLength="829.6" clip-path="url(#breeze-prod-image-build-line-43)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1069.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-43)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-43)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-44)">│</text><text class="breeze-prod-image-build-r5" x="439.2" y="1093.6" textLength="829.6" clip-path="url(#breeze-prod-image-build-line-44)">[default:&#160;300;&#160;x&gt;=1]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1093.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-44)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-44)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1118" textLength="1464" clip-path="url(#breeze-prod-image-build-line-45)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-45)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1142.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-46)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="1142.4" textLength="597.8" clip-path="url(#breeze-prod-image-build-line-46)">&#160;Selecting&#160;constraint&#160;location&#160;(for&#160;power&#160;users)&#160;</text><text class="breeze-prod-image-build-r5" x="622.2" y="1142.4" textLength="817.4" clip-path="url(#breeze-prod-image-build-line-46)">───────────────────────────────────────────────────────────────────</text><text class="breeze-prod-image-build-r5" x="1439.6" y="1142.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-46)">─╮</text><text class="breeze-prod-image-build-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-46)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-47)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1166.8" textLength="366" clip-path="url(#breeze-prod-image-build-line-47)">--airflow-constraints-location</text><text class="breeze-prod-image-build-r1" x="451.4" y="1166.8" textLength="902.8" clip-path="url(#breeze-prod-image-build-line-47)">Location&#160;of&#160;airflow&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;local&#160;context&#160;file).</text><text class="breeze-prod-image-build-r6" x="1366.4" y="1166.8" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-47)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1166.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-47)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1166.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-47)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-48)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1191.2" textLength="317.2" clip-path="url(#breeze-prod-image-build-line-48)">--airflow-constraints-mode</text><text class="breeze-prod-image-build-r1" x="451.4" y="1191.2" textLength="866.2" clip-path="url(#breeze-prod-image-build-line-48)">Mode&#160;of&#160;constraints&#160;for&#160;Airflow&#160;for&#160;PROD&#160;image&#160;building.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1191.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-48)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-48)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-49)">│</text><text class="breeze-prod-image-build-r6" x="451.4" y="1215.6" textLength="866.2" clip-path="url(#breeze-prod-image-build-line-49)">(constraints&#160;|&#160;constraints-no-providers&#160;|&#160;constraints-source-providers)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1215.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-49)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-49)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-50)">│</text><text class="breeze-prod-image-build-r5" x="451.4" y="1240" textLength="866.2" clip-path="url(#breeze-prod-image-build-line-50)">[default:&#160;constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1240" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-50)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-50)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-51)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1264.4" textLength="378.2" clip-path="url(#breeze-prod-image-build-line-51)">--airflow-constraints-reference</text><text class="breeze-prod-image-build-r1" x="451.4" y="1264.4" textLength="634.4" clip-path="url(#breeze-prod-image-build-line-51)">Constraint&#160;reference&#160;to&#160;use&#160;when&#160;building&#160;the&#160;image.</text><text class="breeze-prod-image-build-r6" x="1098" y="1264.4" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-51)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1264.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-51)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-51)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1288.8" textLength="1464" clip-path="url(#breeze-prod-image-build-line-52)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-52)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1313.2" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-53)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="1313.2" textLength="634.4" clip-path="url(#breeze-prod-image-build-line-53)">&#160;Choosing&#160;dependencies&#160;and&#160;extras&#160;(for&#160;power&#160;users)&#160;</text><text class="breeze-prod-image-build-r5" x="658.8" y="1313.2" textLength="780.8" clip-path="url(#breeze-prod-image-build-line-53)">────────────────────────────────────────────────────────────────</text><text class="breeze-prod-image-build-r5" x="1439.6" y="1313.2" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-53)">─╮</text><text class="breeze-prod-image-build-r1" x="1464" y="1313.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-53)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-54)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1337.6" textLength="195.2" clip-path="url(#breeze-prod-image-build-line-54)">--airflow-extras</text><text class="breeze-prod-image-build-r1" x="463.6" y="1337.6" textLength="976" clip-path="url(#breeze-prod-image-build-line-54)">Extras&#160;to&#160;install&#160;by&#160;default.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1337.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-54)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-54)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-55)">│</text><text class="breeze-prod-image-build-r6" x="463.6" y="1362" textLength="976" clip-path="url(#breeze-prod-image-build-line-55)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1362" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-55)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-55)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-56)">│</text><text class="breeze-prod-image-build-r5" x="463.6" y="1386.4" textLength="976" clip-path="url(#breeze-prod-image-build-line-56)">[default:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1386.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-56)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-56)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-57)">│</text><text class="breeze-prod-image-build-r5" x="463.6" y="1410.8" textLength="976" clip-path="url(#breeze-prod-image-build-line-57)">aiobotocore,amazon,async,celery,cncf-kubernetes,common-io,common-messaging,dock…</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1410.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-57)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-57)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-58)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1435.2" textLength="329.4" clip-path="url(#breeze-prod-image-build-line-58)">--additional-airflow-extras</text><text class="breeze-prod-image-build-r1" x="463.6" y="1435.2" textLength="768.6" clip-path="url(#breeze-prod-image-build-line-58)">Additional&#160;extra&#160;package&#160;while&#160;installing&#160;Airflow&#160;in&#160;the&#160;image.</text><text class="breeze-prod-image-build-r6" x="1244.4" y="1435.2" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-58)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1435.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-58)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-58)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-59)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1459.6" textLength="292.8" clip-path="url(#breeze-prod-image-build-line-59)">--additional-python-deps</text><text class="breeze-prod-image-build-r1" x="463.6" y="1459.6" textLength="768.6" clip-path="url(#breeze-prod-image-build-line-59)">Additional&#160;python&#160;dependencies&#160;to&#160;use&#160;when&#160;building&#160;the&#160;images.</text><text class="breeze-prod-image-build-r6" x="1244.4" y="1459.6" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-59)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1459.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-59)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-59)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-60)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1484" textLength="170.8" clip-path="url(#breeze-prod-image-build-line-60)">--dev-apt-deps</text><text class="breeze-prod-image-build-r1" x="463.6" y="1484" textLength="646.6" clip-path="url(#breeze-prod-image-build-line-60)">Apt&#160;dev&#160;dependencies&#160;to&#160;use&#160;when&#160;building&#160;the&#160;images.</text><text class="breeze-prod-image-build-r6" x="1122.4" y="1484" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-60)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1484" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-60)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-60)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-61)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1508.4" textLength="305" clip-path="url(#breeze-prod-image-build-line-61)">--additional-dev-apt-deps</text><text class="breeze-prod-image-build-r1" x="463.6" y="1508.4" textLength="780.8" clip-path="url(#breeze-prod-image-build-line-61)">Additional&#160;apt&#160;dev&#160;dependencies&#160;to&#160;use&#160;when&#160;building&#160;the&#160;images.</text><text class="breeze-prod-image-build-r6" x="1256.6" y="1508.4" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-61)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1508.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-61)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-61)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-62)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1532.8" textLength="207.4" clip-path="url(#breeze-prod-image-build-line-62)">--dev-apt-command</text><text class="breeze-prod-image-build-r1" x="463.6" y="1532.8" textLength="622.2" clip-path="url(#breeze-prod-image-build-line-62)">Command&#160;executed&#160;before&#160;dev&#160;apt&#160;deps&#160;are&#160;installed.</text><text class="breeze-prod-image-build-r6" x="1098" y="1532.8" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-62)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1532.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-62)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-62)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-63)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1557.2" textLength="341.6" clip-path="url(#breeze-prod-image-build-line-63)">--additional-dev-apt-command</text><text class="breeze-prod-image-build-r1" x="463.6" y="1557.2" textLength="756.4" clip-path="url(#breeze-prod-image-build-line-63)">Additional&#160;command&#160;executed&#160;before&#160;dev&#160;apt&#160;deps&#160;are&#160;installed.</text><text class="breeze-prod-image-build-r6" x="1232.2" y="1557.2" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-63)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1557.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-63)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-63)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-64)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1581.6" textLength="292.8" clip-path="url(#breeze-prod-image-build-line-64)">--additional-dev-apt-env</text><text class="breeze-prod-image-build-r1" x="463.6" y="1581.6" textLength="805.2" clip-path="url(#breeze-prod-image-build-line-64)">Additional&#160;environment&#160;variables&#160;set&#160;when&#160;adding&#160;dev&#160;dependencies.</text><text class="breeze-prod-image-build-r6" x="1281" y="1581.6" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-64)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1581.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-64)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-64)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-65)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1606" textLength="219.6" clip-path="url(#breeze-prod-image-build-line-65)">--runtime-apt-deps</text><text class="breeze-prod-image-build-r1" x="463.6" y="1606" textLength="695.4" clip-path="url(#breeze-prod-image-build-line-65)">Apt&#160;runtime&#160;dependencies&#160;to&#160;use&#160;when&#160;building&#160;the&#160;images.</text><text class="breeze-prod-image-build-r6" x="1171.2" y="1606" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-65)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1606" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-65)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-65)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-66)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1630.4" textLength="353.8" clip-path="url(#breeze-prod-image-build-line-66)">--additional-runtime-apt-deps</text><text class="breeze-prod-image-build-r1" x="463.6" y="1630.4" textLength="829.6" clip-path="url(#breeze-prod-image-build-line-66)">Additional&#160;apt&#160;runtime&#160;dependencies&#160;to&#160;use&#160;when&#160;building&#160;the&#160;images.</text><text class="breeze-prod-image-build-r6" x="1305.4" y="1630.4" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-66)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1630.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-66)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-66)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-67)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1654.8" textLength="256.2" clip-path="url(#breeze-prod-image-build-line-67)">--runtime-apt-command</text><text class="breeze-prod-image-build-r1" x="463.6" y="1654.8" textLength="671" clip-path="url(#breeze-prod-image-build-line-67)">Command&#160;executed&#160;before&#160;runtime&#160;apt&#160;deps&#160;are&#160;installed.</text><text class="breeze-prod-image-build-r6" x="1146.8" y="1654.8" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-67)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1654.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-67)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-67)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-68)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1679.2" textLength="390.4" clip-path="url(#breeze-prod-image-build-line-68)">--additional-runtime-apt-command</text><text class="breeze-prod-image-build-r1" x="463.6" y="1679.2" textLength="805.2" clip-path="url(#breeze-prod-image-build-line-68)">Additional&#160;command&#160;executed&#160;before&#160;runtime&#160;apt&#160;deps&#160;are&#160;installed.</text><text class="breeze-prod-image-build-r6" x="1281" y="1679.2" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-68)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1679.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-68)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-68)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-69)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1703.6" textLength="341.6" clip-path="url(#breeze-prod-image-build-line-69)">--additional-runtime-apt-env</text><text class="breeze-prod-image-build-r1" x="463.6" y="1703.6" textLength="854" clip-path="url(#breeze-prod-image-build-line-69)">Additional&#160;environment&#160;variables&#160;set&#160;when&#160;adding&#160;runtime&#160;dependencies.</text><text class="breeze-prod-image-build-r6" x="1329.8" y="1703.6" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-69)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1703.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-69)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-69)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1728" textLength="1464" clip-path="url(#breeze-prod-image-build-line-70)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-70)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1752.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-71)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="1752.4" textLength="817.4" clip-path="url(#breeze-prod-image-build-line-71)">&#160;Advanced&#160;customization&#160;options&#160;(for&#160;specific&#160;customization&#160;needs)&#160;</text><text class="breeze-prod-image-build-r5" x="841.8" y="1752.4" textLength="597.8" clip-path="url(#breeze-prod-image-build-line-71)">─────────────────────────────────────────────────</text><text class="breeze-prod-image-build-r5" x="1439.6" y="1752.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-71)">─╮</text><text class="breeze-prod-image-build-r1" x="1464" y="1752.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-71)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-72)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1776.8" textLength="256.2" clip-path="url(#breeze-prod-image-build-line-72)">--installation-method</text><text class="breeze-prod-image-build-r1" x="597.8" y="1776.8" textLength="463.6" clip-path="url(#breeze-prod-image-build-line-72)">Install&#160;Airflow&#160;from:&#160;sources&#160;or&#160;PyPI.</text><text class="breeze-prod-image-build-r6" x="1073.6" y="1776.8" textLength="244" clip-path="url(#breeze-prod-image-build-line-72)">(.&#160;|&#160;apache-airflow)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1776.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-72)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1776.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-72)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-73)">│</text><text class="breeze-prod-image-build-r5" x="597.8" y="1801.2" textLength="463.6" clip-path="url(#breeze-prod-image-build-line-73)">[default:&#160;.]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1801.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-73)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-73)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1825.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-74)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1825.6" textLength="329.4" clip-path="url(#breeze-prod-image-build-line-74)">--install-airflow-reference</text><text class="breeze-prod-image-build-r1" x="597.8" y="1825.6" textLength="524.6" clip-path="url(#breeze-prod-image-build-line-74)">Install&#160;Airflow&#160;using&#160;GitHub&#160;tag&#160;or&#160;branch.</text><text class="breeze-prod-image-build-r6" x="1134.6" y="1825.6" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-74)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1825.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-74)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-74)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-75)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1850" textLength="439.2" clip-path="url(#breeze-prod-image-build-line-75)">--install-distributions-from-context</text><text class="breeze-prod-image-build-r1" x="597.8" y="1850" textLength="841.8" clip-path="url(#breeze-prod-image-build-line-75)">Install&#160;distributions&#160;from&#160;local&#160;docker-context-files&#160;when&#160;building&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1850" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-75)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-75)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-76)">│</text><text class="breeze-prod-image-build-r1" x="597.8" y="1874.4" textLength="183" clip-path="url(#breeze-prod-image-build-line-76)">image.&#160;Implies&#160;</text><text class="breeze-prod-image-build-r4" x="780.8" y="1874.4" textLength="341.6" clip-path="url(#breeze-prod-image-build-line-76)">--disable-airflow-repo-cache</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1874.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-76)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-76)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1898.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-77)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1898.8" textLength="329.4" clip-path="url(#breeze-prod-image-build-line-77)">--install-mysql-client-type</text><text class="breeze-prod-image-build-r1" x="597.8" y="1898.8" textLength="475.8" clip-path="url(#breeze-prod-image-build-line-77)">Which&#160;client&#160;to&#160;choose&#160;when&#160;installing.</text><text class="breeze-prod-image-build-r6" x="1085.8" y="1898.8" textLength="207.4" clip-path="url(#breeze-prod-image-build-line-77)">(mariadb&#160;|&#160;mysql)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1898.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-77)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-77)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1923.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-78)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1923.2" textLength="207.4" clip-path="url(#breeze-prod-image-build-line-78)">--cleanup-context</text><text class="breeze-prod-image-build-r1" x="597.8" y="1923.2" textLength="841.8" clip-path="url(#breeze-prod-image-build-line-78)">Clean&#160;up&#160;docker&#160;context&#160;files&#160;before&#160;running&#160;build&#160;(cannot&#160;be&#160;used&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1923.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-78)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-78)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-79)">│</text><text class="breeze-prod-image-build-r1" x="597.8" y="1947.6" textLength="170.8" clip-path="url(#breeze-prod-image-build-line-79)">together&#160;with&#160;</text><text class="breeze-prod-image-build-r4" x="768.6" y="1947.6" textLength="439.2" clip-path="url(#breeze-prod-image-build-line-79)">--install-distributions-from-context</text><text class="breeze-prod-image-build-r1" x="1207.8" y="1947.6" textLength="231.8" clip-path="url(#breeze-prod-image-build-line-79)">).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1947.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-79)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1947.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-79)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-80)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1972" textLength="524.6" clip-path="url(#breeze-prod-image-build-line-80)">--use-constraints-for-context-distributions</text><text class="breeze-prod-image-build-r1" x="597.8" y="1972" textLength="841.8" clip-path="url(#breeze-prod-image-build-line-80)">Uses&#160;constraints&#160;for&#160;context&#160;distributions&#160;installation&#160;-&#160;either&#160;from</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1972" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-80)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-80)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-81)">│</text><text class="breeze-prod-image-build-r1" x="597.8" y="1996.4" textLength="841.8" clip-path="url(#breeze-prod-image-build-line-81)">constraints&#160;store&#160;in&#160;docker-context-files&#160;or&#160;from&#160;github.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1996.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-81)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-81)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-82)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2020.8" textLength="341.6" clip-path="url(#breeze-prod-image-build-line-82)">--disable-airflow-repo-cache</text><text class="breeze-prod-image-build-r1" x="597.8" y="2020.8" textLength="658.8" clip-path="url(#breeze-prod-image-build-line-82)">Disable&#160;cache&#160;from&#160;Airflow&#160;repository&#160;during&#160;building.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2020.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-82)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-82)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-83)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2045.2" textLength="427" clip-path="url(#breeze-prod-image-build-line-83)">--disable-mysql-client-installation</text><text class="breeze-prod-image-build-r1" x="597.8" y="2045.2" textLength="341.6" clip-path="url(#breeze-prod-image-build-line-83)">Do&#160;not&#160;install&#160;MySQL&#160;client.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2045.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-83)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-83)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-84)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2069.6" textLength="427" clip-path="url(#breeze-prod-image-build-line-84)">--disable-mssql-client-installation</text><text class="breeze-prod-image-build-r1" x="597.8" y="2069.6" textLength="341.6" clip-path="url(#breeze-prod-image-build-line-84)">Do&#160;not&#160;install&#160;MsSQl&#160;client.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2069.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-84)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-84)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-85)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2094" textLength="463.6" clip-path="url(#breeze-prod-image-build-line-85)">--disable-postgres-client-installation</text><text class="breeze-prod-image-build-r1" x="597.8" y="2094" textLength="378.2" clip-path="url(#breeze-prod-image-build-line-85)">Do&#160;not&#160;install&#160;Postgres&#160;client.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2094" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-85)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-85)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2118.4" textLength="1464" clip-path="url(#breeze-prod-image-build-line-86)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-86)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2142.8" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-87)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="2142.8" textLength="622.2" clip-path="url(#breeze-prod-image-build-line-87)">&#160;Preparing&#160;cache&#160;and&#160;push&#160;(for&#160;maintainers&#160;and&#160;CI)&#160;</text><text class="breeze-prod-image-build-r5" x="646.6" y="2142.8" textLength="793" clip-path="url(#breeze-prod-image-build-line-87)">─────────────────────────────────────────────────────────────────</text><text class="breeze-prod-image-build-r5" x="1439.6" y="2142.8" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-87)">─╮</text><text class="breeze-prod-image-build-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-87)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-88)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2167.2" textLength="109.8" clip-path="url(#breeze-prod-image-build-line-88)">--builder</text><text class="breeze-prod-image-build-r1" x="341.6" y="2167.2" textLength="756.4" clip-path="url(#breeze-prod-image-build-line-88)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build`&#160;commands.</text><text class="breeze-prod-image-build-r6" x="1110.2" y="2167.2" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-88)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2167.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-88)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-88)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2191.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-89)">│</text><text class="breeze-prod-image-build-r5" x="341.6" y="2191.6" textLength="756.4" clip-path="url(#breeze-prod-image-build-line-89)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2191.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-89)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2191.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-89)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2216" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-90)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2216" textLength="122" clip-path="url(#breeze-prod-image-build-line-90)">--platform</text><text class="breeze-prod-image-build-r1" x="341.6" y="2216" textLength="1024.8" clip-path="url(#breeze-prod-image-build-line-90)">Platform&#160;for&#160;Airflow&#160;image.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2216" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-90)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2216" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-90)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2240.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-91)">│</text><text class="breeze-prod-image-build-r6" x="341.6" y="2240.4" textLength="1024.8" clip-path="url(#breeze-prod-image-build-line-91)">(linux/amd64&#160;|&#160;linux/arm64&#160;|&#160;linux/x86_64&#160;|&#160;linux/aarch64&#160;|&#160;linux/amd64,linux/arm64)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2240.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-91)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2240.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-91)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2264.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-92)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2264.8" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-92)">--push</text><text class="breeze-prod-image-build-r1" x="341.6" y="2264.8" textLength="353.8" clip-path="url(#breeze-prod-image-build-line-92)">Push&#160;image&#160;after&#160;building&#160;it.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2264.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-92)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2264.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-92)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2289.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-93)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2289.2" textLength="268.4" clip-path="url(#breeze-prod-image-build-line-93)">--prepare-buildx-cache</text><text class="breeze-prod-image-build-r1" x="341.6" y="2289.2" textLength="1098" clip-path="url(#breeze-prod-image-build-line-93)">Prepares&#160;build&#160;cache&#160;(this&#160;is&#160;done&#160;as&#160;separate&#160;per-platform&#160;steps&#160;instead&#160;of&#160;building&#160;the&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2289.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-93)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2289.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-93)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2313.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-94)">│</text><text class="breeze-prod-image-build-r1" x="341.6" y="2313.6" textLength="1098" clip-path="url(#breeze-prod-image-build-line-94)">image).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2313.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-94)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2313.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-94)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2338" textLength="1464" clip-path="url(#breeze-prod-image-build-line-95)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="2338" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-95)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2362.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-96)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="2362.4" textLength="280.6" clip-path="url(#breeze-prod-image-build-line-96)">&#160;Github&#160;authentication&#160;</text><text class="breeze-prod-image-build-r5" x="305" y="2362.4" textLength="1134.6" clip-path="url(#breeze-prod-image-build-line-96)">─────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-prod-image-build-r5" x="1439.6" y="2362.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-96)">─╮</text><text class="breeze-prod-image-build-r1" x="1464" y="2362.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-96)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2386.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-97)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2386.8" textLength="231.8" clip-path="url(#breeze-prod-image-build-line-97)">--github-repository</text><text class="breeze-prod-image-build-r7" x="280.6" y="2386.8" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-97)">-g</text><text class="breeze-prod-image-build-r1" x="329.4" y="2386.8" textLength="585.6" clip-path="url(#breeze-prod-image-build-line-97)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-prod-image-build-r6" x="927.2" y="2386.8" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-97)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1012.6" y="2386.8" textLength="305" clip-path="url(#breeze-prod-image-build-line-97)">[default:&#160;apache/airflow]</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2386.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-97)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2386.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-97)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2411.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-98)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2411.2" textLength="170.8" clip-path="url(#breeze-prod-image-build-line-98)">--github-token</text><text class="breeze-prod-image-build-r1" x="329.4" y="2411.2" textLength="500.2" clip-path="url(#breeze-prod-image-build-line-98)">The&#160;token&#160;used&#160;to&#160;authenticate&#160;to&#160;GitHub.</text><text class="breeze-prod-image-build-r6" x="841.8" y="2411.2" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-98)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2411.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-98)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2411.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-98)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2435.6" textLength="1464" clip-path="url(#breeze-prod-image-build-line-99)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="2435.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-99)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2460" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-100)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="2460" textLength="195.2" clip-path="url(#breeze-prod-image-build-line-100)">&#160;Common&#160;options&#160;</text><text class="breeze-prod-image-build-r5" x="219.6" y="2460" textLength="1220" clip-path="url(#breeze-prod-image-build-line-100)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-prod-image-build-r5" x="1439.6" y="2460" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-100)">─╮</text><text class="breeze-prod-image-build-r1" x="1464" y="2460" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-100)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2484.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-101)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2484.4" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-101)">--answer</text><text class="breeze-prod-image-build-r7" x="158.6" y="2484.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-101)">-a</text><text class="breeze-prod-image-build-r1" x="207.4" y="2484.4" textLength="317.2" clip-path="url(#breeze-prod-image-build-line-101)">Force&#160;answer&#160;to&#160;questions.</text><text class="breeze-prod-image-build-r6" x="536.8" y="2484.4" textLength="353.8" clip-path="url(#breeze-prod-image-build-line-101)">(y&#160;|&#160;n&#160;|&#160;q&#160;|&#160;yes&#160;|&#160;no&#160;|&#160;quit)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2484.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-101)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2484.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-101)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2508.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-102)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2508.8" textLength="109.8" clip-path="url(#breeze-prod-image-build-line-102)">--dry-run</text><text class="breeze-prod-image-build-r7" x="158.6" y="2508.8" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-102)">-D</text><text class="breeze-prod-image-build-r1" x="207.4" y="2508.8" textLength="719.8" clip-path="url(#breeze-prod-image-build-line-102)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2508.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-102)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2508.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-102)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2533.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-103)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2533.2" textLength="109.8" clip-path="url(#breeze-prod-image-build-line-103)">--verbose</text><text class="breeze-prod-image-build-r7" x="158.6" y="2533.2" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-103)">-v</text><text class="breeze-prod-image-build-r1" x="207.4" y="2533.2" textLength="585.6" clip-path="url(#breeze-prod-image-build-line-103)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2533.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-103)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2533.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-103)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2557.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-104)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2557.6" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-104)">--help</text><text class="breeze-prod-image-build-r7" x="158.6" y="2557.6" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-104)">-h</text><text class="breeze-prod-image-build-r1" x="207.4" y="2557.6" textLength="329.4" clip-path="url(#breeze-prod-image-build-line-104)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2557.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-104)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="2557.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-104)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2582" textLength="1464" clip-path="url(#breeze-prod-image-build-line-105)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="2582" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-105)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_prod-image_build.txt b/dev/breeze/doc/images/output_prod-image_build.txt
index e187149f22ae6..58f9fe1ecf939 100644
--- a/dev/breeze/doc/images/output_prod-image_build.txt
+++ b/dev/breeze/doc/images/output_prod-image_build.txt
@@ -1 +1 @@
-bd7a879acaf67b0332acf3b60e234193
+f0627afea3a75fad4886afaa9a517fdf
diff --git a/dev/breeze/doc/images/output_prod-image_load.svg b/dev/breeze/doc/images/output_prod-image_load.svg
index 746b741f9cdec..d40cc1db81ba9 100644
--- a/dev/breeze/doc/images/output_prod-image_load.svg
+++ b/dev/breeze/doc/images/output_prod-image_load.svg
@@ -156,8 +156,8 @@
 </text><text class="breeze-prod-image-load-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-4)">
 </text><text class="breeze-prod-image-load-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-prod-image-load-line-5)">╭─</text><text class="breeze-prod-image-load-r5" x="24.4" y="142" textLength="219.6" clip-path="url(#breeze-prod-image-load-line-5)">&#160;Load&#160;image&#160;flags&#160;</text><text class="breeze-prod-image-load-r5" x="244" y="142" textLength="1195.6" clip-path="url(#breeze-prod-image-load-line-5)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-prod-image-load-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-prod-image-load-line-5)">─╮</text><text class="breeze-prod-image-load-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-5)">
 </text><text class="breeze-prod-image-load-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-6)">│</text><text class="breeze-prod-image-load-r4" x="61" y="166.4" textLength="97.6" clip-path="url(#breeze-prod-image-load-line-6)">--python</text><text class="breeze-prod-image-load-r6" x="402.6" y="166.4" textLength="24.4" clip-path="url(#breeze-prod-image-load-line-6)">-p</text><text class="breeze-prod-image-load-r1" x="451.4" y="166.4" textLength="732" clip-path="url(#breeze-prod-image-load-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-prod-image-load-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-6)">│</text><text class="breeze-prod-image-load-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-6)">
-</text><text class="breeze-prod-image-load-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-7)">│</text><text class="breeze-prod-image-load-r7" x="451.4" y="190.8" textLength="732" clip-path="url(#breeze-prod-image-load-line-7)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-load-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-7)">│</text><text class="breeze-prod-image-load-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-7)">
-</text><text class="breeze-prod-image-load-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-8)">│</text><text class="breeze-prod-image-load-r5" x="451.4" y="215.2" textLength="732" clip-path="url(#breeze-prod-image-load-line-8)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-load-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-8)">│</text><text class="breeze-prod-image-load-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-8)">
+</text><text class="breeze-prod-image-load-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-7)">│</text><text class="breeze-prod-image-load-r7" x="451.4" y="190.8" textLength="732" clip-path="url(#breeze-prod-image-load-line-7)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-load-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-7)">│</text><text class="breeze-prod-image-load-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-7)">
+</text><text class="breeze-prod-image-load-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-8)">│</text><text class="breeze-prod-image-load-r5" x="451.4" y="215.2" textLength="732" clip-path="url(#breeze-prod-image-load-line-8)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-load-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-8)">│</text><text class="breeze-prod-image-load-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-8)">
 </text><text class="breeze-prod-image-load-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-9)">│</text><text class="breeze-prod-image-load-r4" x="61" y="239.6" textLength="122" clip-path="url(#breeze-prod-image-load-line-9)">--platform</text><text class="breeze-prod-image-load-r1" x="451.4" y="239.6" textLength="707.6" clip-path="url(#breeze-prod-image-load-line-9)">Platform&#160;for&#160;Airflow&#160;image.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-load-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-9)">│</text><text class="breeze-prod-image-load-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-9)">
 </text><text class="breeze-prod-image-load-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-10)">│</text><text class="breeze-prod-image-load-r7" x="451.4" y="264" textLength="707.6" clip-path="url(#breeze-prod-image-load-line-10)">(linux/amd64&#160;|&#160;linux/arm64&#160;|&#160;linux/x86_64&#160;|&#160;linux/aarch64)</text><text class="breeze-prod-image-load-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-10)">│</text><text class="breeze-prod-image-load-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-10)">
 </text><text class="breeze-prod-image-load-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-11)">│</text><text class="breeze-prod-image-load-r4" x="61" y="288.4" textLength="146.4" clip-path="url(#breeze-prod-image-load-line-11)">--image-file</text><text class="breeze-prod-image-load-r1" x="451.4" y="288.4" textLength="427" clip-path="url(#breeze-prod-image-load-line-11)">Optional&#160;file&#160;to&#160;save&#160;the&#160;image&#160;to.</text><text class="breeze-prod-image-load-r7" x="890.6" y="288.4" textLength="73.2" clip-path="url(#breeze-prod-image-load-line-11)">(FILE)</text><text class="breeze-prod-image-load-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-11)">│</text><text class="breeze-prod-image-load-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-11)">
diff --git a/dev/breeze/doc/images/output_prod-image_load.txt b/dev/breeze/doc/images/output_prod-image_load.txt
index 44d94e2b0b108..e229179e97f35 100644
--- a/dev/breeze/doc/images/output_prod-image_load.txt
+++ b/dev/breeze/doc/images/output_prod-image_load.txt
@@ -1 +1 @@
-db73218af61a7c7092636e29846b9b5b
+de986e6f731cef102f8f2f40dd2e8b01
diff --git a/dev/breeze/doc/images/output_prod-image_pull.svg b/dev/breeze/doc/images/output_prod-image_pull.svg
index 23ff7aa9e41d9..ccddaeaf3a14e 100644
--- a/dev/breeze/doc/images/output_prod-image_pull.svg
+++ b/dev/breeze/doc/images/output_prod-image_pull.svg
@@ -153,8 +153,8 @@
 </text><text class="breeze-prod-image-pull-r1" x="12.2" y="93.2" textLength="1122.4" clip-path="url(#breeze-prod-image-pull-line-3)">Pull&#160;and&#160;optionally&#160;verify&#160;Production&#160;images&#160;-&#160;possibly&#160;in&#160;parallel&#160;for&#160;all&#160;Python&#160;versions.</text><text class="breeze-prod-image-pull-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-3)">
 </text><text class="breeze-prod-image-pull-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-4)">
 </text><text class="breeze-prod-image-pull-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-5)">╭─</text><text class="breeze-prod-image-pull-r5" x="24.4" y="142" textLength="219.6" clip-path="url(#breeze-prod-image-pull-line-5)">&#160;Pull&#160;image&#160;flags&#160;</text><text class="breeze-prod-image-pull-r5" x="244" y="142" textLength="1195.6" clip-path="url(#breeze-prod-image-pull-line-5)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-prod-image-pull-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-5)">─╮</text><text class="breeze-prod-image-pull-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-5)">
-</text><text class="breeze-prod-image-pull-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-6)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-prod-image-pull-line-6)">--python</text><text class="breeze-prod-image-pull-r6" x="244" y="166.4" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-6)">-p</text><text class="breeze-prod-image-pull-r1" x="292.8" y="166.4" textLength="732" clip-path="url(#breeze-prod-image-pull-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-prod-image-pull-r7" x="1037" y="166.4" textLength="341.6" clip-path="url(#breeze-prod-image-pull-line-6)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-prod-image-pull-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-6)">│</text><text class="breeze-prod-image-pull-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-6)">
-</text><text class="breeze-prod-image-pull-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-7)">│</text><text class="breeze-prod-image-pull-r5" x="292.8" y="190.8" textLength="732" clip-path="url(#breeze-prod-image-pull-line-7)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-pull-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-7)">│</text><text class="breeze-prod-image-pull-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-7)">
+</text><text class="breeze-prod-image-pull-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-6)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-prod-image-pull-line-6)">--python</text><text class="breeze-prod-image-pull-r6" x="244" y="166.4" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-6)">-p</text><text class="breeze-prod-image-pull-r1" x="292.8" y="166.4" textLength="732" clip-path="url(#breeze-prod-image-pull-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-prod-image-pull-r7" x="1037" y="166.4" textLength="268.4" clip-path="url(#breeze-prod-image-pull-line-6)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-prod-image-pull-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-6)">│</text><text class="breeze-prod-image-pull-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-6)">
+</text><text class="breeze-prod-image-pull-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-7)">│</text><text class="breeze-prod-image-pull-r5" x="292.8" y="190.8" textLength="732" clip-path="url(#breeze-prod-image-pull-line-7)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-pull-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-7)">│</text><text class="breeze-prod-image-pull-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-7)">
 </text><text class="breeze-prod-image-pull-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-8)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="215.2" textLength="97.6" clip-path="url(#breeze-prod-image-pull-line-8)">--verify</text><text class="breeze-prod-image-pull-r1" x="292.8" y="215.2" textLength="158.6" clip-path="url(#breeze-prod-image-pull-line-8)">Verify&#160;image.</text><text class="breeze-prod-image-pull-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-8)">│</text><text class="breeze-prod-image-pull-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-8)">
 </text><text class="breeze-prod-image-pull-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-9)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="239.6" textLength="195.2" clip-path="url(#breeze-prod-image-pull-line-9)">--wait-for-image</text><text class="breeze-prod-image-pull-r1" x="292.8" y="239.6" textLength="366" clip-path="url(#breeze-prod-image-pull-line-9)">Wait&#160;until&#160;image&#160;is&#160;available.</text><text class="breeze-prod-image-pull-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-9)">│</text><text class="breeze-prod-image-pull-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-9)">
 </text><text class="breeze-prod-image-pull-r5" x="0" y="264" textLength="1464" clip-path="url(#breeze-prod-image-pull-line-10)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-pull-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-10)">
@@ -164,7 +164,7 @@
 </text><text class="breeze-prod-image-pull-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-14)">│</text><text class="breeze-prod-image-pull-r7" x="378.2" y="361.6" textLength="915" clip-path="url(#breeze-prod-image-pull-line-14)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-pull-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-14)">│</text><text class="breeze-prod-image-pull-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-14)">
 </text><text class="breeze-prod-image-pull-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-15)">│</text><text class="breeze-prod-image-pull-r5" x="378.2" y="386" textLength="915" clip-path="url(#breeze-prod-image-pull-line-15)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-pull-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-15)">│</text><text class="breeze-prod-image-pull-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-15)">
 </text><text class="breeze-prod-image-pull-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-16)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="410.4" textLength="207.4" clip-path="url(#breeze-prod-image-pull-line-16)">--python-versions</text><text class="breeze-prod-image-pull-r1" x="378.2" y="410.4" textLength="951.6" clip-path="url(#breeze-prod-image-pull-line-16)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;for&#160;build&#160;with&#160;multiple&#160;versions.</text><text class="breeze-prod-image-pull-r7" x="1342" y="410.4" textLength="73.2" clip-path="url(#breeze-prod-image-pull-line-16)">(TEXT)</text><text class="breeze-prod-image-pull-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-16)">│</text><text class="breeze-prod-image-pull-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-16)">
-</text><text class="breeze-prod-image-pull-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-17)">│</text><text class="breeze-prod-image-pull-r5" x="378.2" y="434.8" textLength="951.6" clip-path="url(#breeze-prod-image-pull-line-17)">[default:&#160;3.9&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-pull-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-17)">│</text><text class="breeze-prod-image-pull-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-17)">
+</text><text class="breeze-prod-image-pull-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-17)">│</text><text class="breeze-prod-image-pull-r5" x="378.2" y="434.8" textLength="951.6" clip-path="url(#breeze-prod-image-pull-line-17)">[default:&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-pull-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-17)">│</text><text class="breeze-prod-image-pull-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-17)">
 </text><text class="breeze-prod-image-pull-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-18)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="459.2" textLength="170.8" clip-path="url(#breeze-prod-image-pull-line-18)">--skip-cleanup</text><text class="breeze-prod-image-pull-r1" x="378.2" y="459.2" textLength="732" clip-path="url(#breeze-prod-image-pull-line-18)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text class="breeze-prod-image-pull-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-18)">│</text><text class="breeze-prod-image-pull-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-18)">
 </text><text class="breeze-prod-image-pull-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-19)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="483.6" textLength="207.4" clip-path="url(#breeze-prod-image-pull-line-19)">--debug-resources</text><text class="breeze-prod-image-pull-r1" x="378.2" y="483.6" textLength="768.6" clip-path="url(#breeze-prod-image-pull-line-19)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;running&#160;in&#160;parallel.</text><text class="breeze-prod-image-pull-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-19)">│</text><text class="breeze-prod-image-pull-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-19)">
 </text><text class="breeze-prod-image-pull-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-20)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="508" textLength="305" clip-path="url(#breeze-prod-image-pull-line-20)">--include-success-outputs</text><text class="breeze-prod-image-pull-r1" x="378.2" y="508" textLength="841.8" clip-path="url(#breeze-prod-image-pull-line-20)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;runs&#160;(not&#160;shown&#160;by&#160;default).</text><text class="breeze-prod-image-pull-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-20)">│</text><text class="breeze-prod-image-pull-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-20)">
diff --git a/dev/breeze/doc/images/output_prod-image_pull.txt b/dev/breeze/doc/images/output_prod-image_pull.txt
index d6ac534091a67..6e0a79486fc8e 100644
--- a/dev/breeze/doc/images/output_prod-image_pull.txt
+++ b/dev/breeze/doc/images/output_prod-image_pull.txt
@@ -1 +1 @@
-beceddc6149385f810b4bb8ee798416c
+a1c4d0b647670b696293bde6e97898bd
diff --git a/dev/breeze/doc/images/output_prod-image_save.svg b/dev/breeze/doc/images/output_prod-image_save.svg
index d0c3231c38bcf..992d5ce22e9b0 100644
--- a/dev/breeze/doc/images/output_prod-image_save.svg
+++ b/dev/breeze/doc/images/output_prod-image_save.svg
@@ -117,8 +117,8 @@
 </text><text class="breeze-prod-image-save-r1" x="12.2" y="93.2" textLength="317.2" clip-path="url(#breeze-prod-image-save-line-3)">Save&#160;PROD&#160;image&#160;to&#160;a&#160;file.</text><text class="breeze-prod-image-save-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-3)">
 </text><text class="breeze-prod-image-save-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-4)">
 </text><text class="breeze-prod-image-save-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-prod-image-save-line-5)">╭─</text><text class="breeze-prod-image-save-r5" x="24.4" y="142" textLength="219.6" clip-path="url(#breeze-prod-image-save-line-5)">&#160;Save&#160;image&#160;flags&#160;</text><text class="breeze-prod-image-save-r5" x="244" y="142" textLength="1195.6" clip-path="url(#breeze-prod-image-save-line-5)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-prod-image-save-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-prod-image-save-line-5)">─╮</text><text class="breeze-prod-image-save-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-5)">
-</text><text class="breeze-prod-image-save-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-6)">│</text><text class="breeze-prod-image-save-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-prod-image-save-line-6)">--python</text><text class="breeze-prod-image-save-r6" x="280.6" y="166.4" textLength="24.4" clip-path="url(#breeze-prod-image-save-line-6)">-p</text><text class="breeze-prod-image-save-r1" x="329.4" y="166.4" textLength="732" clip-path="url(#breeze-prod-image-save-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-prod-image-save-r7" x="1073.6" y="166.4" textLength="341.6" clip-path="url(#breeze-prod-image-save-line-6)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-prod-image-save-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-6)">│</text><text class="breeze-prod-image-save-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-6)">
-</text><text class="breeze-prod-image-save-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-7)">│</text><text class="breeze-prod-image-save-r5" x="329.4" y="190.8" textLength="732" clip-path="url(#breeze-prod-image-save-line-7)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-save-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-7)">│</text><text class="breeze-prod-image-save-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-7)">
+</text><text class="breeze-prod-image-save-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-6)">│</text><text class="breeze-prod-image-save-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-prod-image-save-line-6)">--python</text><text class="breeze-prod-image-save-r6" x="280.6" y="166.4" textLength="24.4" clip-path="url(#breeze-prod-image-save-line-6)">-p</text><text class="breeze-prod-image-save-r1" x="329.4" y="166.4" textLength="732" clip-path="url(#breeze-prod-image-save-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-prod-image-save-r7" x="1073.6" y="166.4" textLength="268.4" clip-path="url(#breeze-prod-image-save-line-6)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-prod-image-save-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-6)">│</text><text class="breeze-prod-image-save-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-6)">
+</text><text class="breeze-prod-image-save-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-7)">│</text><text class="breeze-prod-image-save-r5" x="329.4" y="190.8" textLength="732" clip-path="url(#breeze-prod-image-save-line-7)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-save-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-7)">│</text><text class="breeze-prod-image-save-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-7)">
 </text><text class="breeze-prod-image-save-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-8)">│</text><text class="breeze-prod-image-save-r4" x="24.4" y="215.2" textLength="122" clip-path="url(#breeze-prod-image-save-line-8)">--platform</text><text class="breeze-prod-image-save-r1" x="329.4" y="215.2" textLength="329.4" clip-path="url(#breeze-prod-image-save-line-8)">Platform&#160;for&#160;Airflow&#160;image.</text><text class="breeze-prod-image-save-r7" x="671" y="215.2" textLength="707.6" clip-path="url(#breeze-prod-image-save-line-8)">(linux/amd64&#160;|&#160;linux/arm64&#160;|&#160;linux/x86_64&#160;|&#160;linux/aarch64)</text><text class="breeze-prod-image-save-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-8)">│</text><text class="breeze-prod-image-save-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-8)">
 </text><text class="breeze-prod-image-save-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-9)">│</text><text class="breeze-prod-image-save-r4" x="24.4" y="239.6" textLength="231.8" clip-path="url(#breeze-prod-image-save-line-9)">--github-repository</text><text class="breeze-prod-image-save-r6" x="280.6" y="239.6" textLength="24.4" clip-path="url(#breeze-prod-image-save-line-9)">-g</text><text class="breeze-prod-image-save-r1" x="329.4" y="239.6" textLength="585.6" clip-path="url(#breeze-prod-image-save-line-9)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-prod-image-save-r7" x="927.2" y="239.6" textLength="73.2" clip-path="url(#breeze-prod-image-save-line-9)">(TEXT)</text><text class="breeze-prod-image-save-r5" x="1012.6" y="239.6" textLength="305" clip-path="url(#breeze-prod-image-save-line-9)">[default:&#160;apache/airflow]</text><text class="breeze-prod-image-save-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-9)">│</text><text class="breeze-prod-image-save-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-9)">
 </text><text class="breeze-prod-image-save-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-10)">│</text><text class="breeze-prod-image-save-r4" x="24.4" y="264" textLength="146.4" clip-path="url(#breeze-prod-image-save-line-10)">--image-file</text><text class="breeze-prod-image-save-r1" x="329.4" y="264" textLength="427" clip-path="url(#breeze-prod-image-save-line-10)">Optional&#160;file&#160;to&#160;save&#160;the&#160;image&#160;to.</text><text class="breeze-prod-image-save-r7" x="768.6" y="264" textLength="73.2" clip-path="url(#breeze-prod-image-save-line-10)">(FILE)</text><text class="breeze-prod-image-save-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-10)">│</text><text class="breeze-prod-image-save-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-prod-image-save-line-10)">
diff --git a/dev/breeze/doc/images/output_prod-image_save.txt b/dev/breeze/doc/images/output_prod-image_save.txt
index 5edb777eef92c..b39bbfdb68c8a 100644
--- a/dev/breeze/doc/images/output_prod-image_save.txt
+++ b/dev/breeze/doc/images/output_prod-image_save.txt
@@ -1 +1 @@
-60db655a3dbcd7cafcfe68548c60fcb4
+b4b74446ac624e2114a03773996968fc
diff --git a/dev/breeze/doc/images/output_prod-image_verify.svg b/dev/breeze/doc/images/output_prod-image_verify.svg
index d5341f2bbab0d..0c4c68ad8ec87 100644
--- a/dev/breeze/doc/images/output_prod-image_verify.svg
+++ b/dev/breeze/doc/images/output_prod-image_verify.svg
@@ -160,8 +160,8 @@
 </text><text class="breeze-prod-image-verify-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-4)">
 </text><text class="breeze-prod-image-verify-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-prod-image-verify-line-5)">╭─</text><text class="breeze-prod-image-verify-r5" x="24.4" y="142" textLength="244" clip-path="url(#breeze-prod-image-verify-line-5)">&#160;Verify&#160;image&#160;flags&#160;</text><text class="breeze-prod-image-verify-r5" x="268.4" y="142" textLength="1171.2" clip-path="url(#breeze-prod-image-verify-line-5)">────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-prod-image-verify-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-prod-image-verify-line-5)">─╮</text><text class="breeze-prod-image-verify-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-5)">
 </text><text class="breeze-prod-image-verify-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-6)">│</text><text class="breeze-prod-image-verify-r4" x="24.4" y="166.4" textLength="146.4" clip-path="url(#breeze-prod-image-verify-line-6)">--image-name</text><text class="breeze-prod-image-verify-r6" x="231.8" y="166.4" textLength="24.4" clip-path="url(#breeze-prod-image-verify-line-6)">-n</text><text class="breeze-prod-image-verify-r1" x="280.6" y="166.4" textLength="475.8" clip-path="url(#breeze-prod-image-verify-line-6)">Name&#160;of&#160;the&#160;image&#160;to&#160;verify&#160;(overrides&#160;</text><text class="breeze-prod-image-verify-r4" x="756.4" y="166.4" textLength="97.6" clip-path="url(#breeze-prod-image-verify-line-6)">--python</text><text class="breeze-prod-image-verify-r1" x="854" y="166.4" textLength="24.4" clip-path="url(#breeze-prod-image-verify-line-6)">).</text><text class="breeze-prod-image-verify-r7" x="890.6" y="166.4" textLength="73.2" clip-path="url(#breeze-prod-image-verify-line-6)">(TEXT)</text><text class="breeze-prod-image-verify-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-6)">│</text><text class="breeze-prod-image-verify-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-6)">
-</text><text class="breeze-prod-image-verify-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-7)">│</text><text class="breeze-prod-image-verify-r4" x="24.4" y="190.8" textLength="97.6" clip-path="url(#breeze-prod-image-verify-line-7)">--python</text><text class="breeze-prod-image-verify-r6" x="231.8" y="190.8" textLength="24.4" clip-path="url(#breeze-prod-image-verify-line-7)">-p</text><text class="breeze-prod-image-verify-r1" x="280.6" y="190.8" textLength="732" clip-path="url(#breeze-prod-image-verify-line-7)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-prod-image-verify-r7" x="1024.8" y="190.8" textLength="341.6" clip-path="url(#breeze-prod-image-verify-line-7)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-prod-image-verify-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-7)">│</text><text class="breeze-prod-image-verify-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-7)">
-</text><text class="breeze-prod-image-verify-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-8)">│</text><text class="breeze-prod-image-verify-r5" x="280.6" y="215.2" textLength="732" clip-path="url(#breeze-prod-image-verify-line-8)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-verify-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-8)">│</text><text class="breeze-prod-image-verify-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-8)">
+</text><text class="breeze-prod-image-verify-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-7)">│</text><text class="breeze-prod-image-verify-r4" x="24.4" y="190.8" textLength="97.6" clip-path="url(#breeze-prod-image-verify-line-7)">--python</text><text class="breeze-prod-image-verify-r6" x="231.8" y="190.8" textLength="24.4" clip-path="url(#breeze-prod-image-verify-line-7)">-p</text><text class="breeze-prod-image-verify-r1" x="280.6" y="190.8" textLength="732" clip-path="url(#breeze-prod-image-verify-line-7)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-prod-image-verify-r7" x="1024.8" y="190.8" textLength="268.4" clip-path="url(#breeze-prod-image-verify-line-7)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-prod-image-verify-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-7)">│</text><text class="breeze-prod-image-verify-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-7)">
+</text><text class="breeze-prod-image-verify-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-8)">│</text><text class="breeze-prod-image-verify-r5" x="280.6" y="215.2" textLength="732" clip-path="url(#breeze-prod-image-verify-line-8)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-verify-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-8)">│</text><text class="breeze-prod-image-verify-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-8)">
 </text><text class="breeze-prod-image-verify-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-9)">│</text><text class="breeze-prod-image-verify-r4" x="24.4" y="239.6" textLength="146.4" clip-path="url(#breeze-prod-image-verify-line-9)">--slim-image</text><text class="breeze-prod-image-verify-r1" x="280.6" y="239.6" textLength="793" clip-path="url(#breeze-prod-image-verify-line-9)">The&#160;image&#160;to&#160;verify&#160;is&#160;slim&#160;and&#160;non-slim&#160;tests&#160;should&#160;be&#160;skipped.</text><text class="breeze-prod-image-verify-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-9)">│</text><text class="breeze-prod-image-verify-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-9)">
 </text><text class="breeze-prod-image-verify-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-10)">│</text><text class="breeze-prod-image-verify-r4" x="24.4" y="264" textLength="73.2" clip-path="url(#breeze-prod-image-verify-line-10)">--pull</text><text class="breeze-prod-image-verify-r1" x="280.6" y="264" textLength="646.6" clip-path="url(#breeze-prod-image-verify-line-10)">Pull&#160;image&#160;is&#160;missing&#160;before&#160;attempting&#160;to&#160;verify&#160;it.</text><text class="breeze-prod-image-verify-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-10)">│</text><text class="breeze-prod-image-verify-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-10)">
 </text><text class="breeze-prod-image-verify-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-11)">│</text><text class="breeze-prod-image-verify-r4" x="24.4" y="288.4" textLength="183" clip-path="url(#breeze-prod-image-verify-line-11)">--manifest-file</text><text class="breeze-prod-image-verify-r1" x="280.6" y="288.4" textLength="1037" clip-path="url(#breeze-prod-image-verify-line-11)">Read&#160;digest&#160;of&#160;the&#160;image&#160;from&#160;the&#160;manifest&#160;file&#160;instead&#160;of&#160;using&#160;name&#160;and&#160;pulling&#160;it.</text><text class="breeze-prod-image-verify-r7" x="1329.8" y="288.4" textLength="73.2" clip-path="url(#breeze-prod-image-verify-line-11)">(FILE)</text><text class="breeze-prod-image-verify-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-11)">│</text><text class="breeze-prod-image-verify-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-11)">
@@ -172,7 +172,7 @@
 </text><text class="breeze-prod-image-verify-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-16)">│</text><text class="breeze-prod-image-verify-r7" x="378.2" y="410.4" textLength="915" clip-path="url(#breeze-prod-image-verify-line-16)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-verify-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-16)">│</text><text class="breeze-prod-image-verify-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-16)">
 </text><text class="breeze-prod-image-verify-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-17)">│</text><text class="breeze-prod-image-verify-r5" x="378.2" y="434.8" textLength="915" clip-path="url(#breeze-prod-image-verify-line-17)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-verify-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-17)">│</text><text class="breeze-prod-image-verify-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-17)">
 </text><text class="breeze-prod-image-verify-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-18)">│</text><text class="breeze-prod-image-verify-r4" x="24.4" y="459.2" textLength="207.4" clip-path="url(#breeze-prod-image-verify-line-18)">--python-versions</text><text class="breeze-prod-image-verify-r1" x="378.2" y="459.2" textLength="951.6" clip-path="url(#breeze-prod-image-verify-line-18)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;for&#160;build&#160;with&#160;multiple&#160;versions.</text><text class="breeze-prod-image-verify-r7" x="1342" y="459.2" textLength="73.2" clip-path="url(#breeze-prod-image-verify-line-18)">(TEXT)</text><text class="breeze-prod-image-verify-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-18)">│</text><text class="breeze-prod-image-verify-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-18)">
-</text><text class="breeze-prod-image-verify-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-19)">│</text><text class="breeze-prod-image-verify-r5" x="378.2" y="483.6" textLength="951.6" clip-path="url(#breeze-prod-image-verify-line-19)">[default:&#160;3.9&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-verify-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-19)">│</text><text class="breeze-prod-image-verify-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-19)">
+</text><text class="breeze-prod-image-verify-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-19)">│</text><text class="breeze-prod-image-verify-r5" x="378.2" y="483.6" textLength="951.6" clip-path="url(#breeze-prod-image-verify-line-19)">[default:&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod-image-verify-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-19)">│</text><text class="breeze-prod-image-verify-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-19)">
 </text><text class="breeze-prod-image-verify-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-20)">│</text><text class="breeze-prod-image-verify-r4" x="24.4" y="508" textLength="170.8" clip-path="url(#breeze-prod-image-verify-line-20)">--skip-cleanup</text><text class="breeze-prod-image-verify-r1" x="378.2" y="508" textLength="732" clip-path="url(#breeze-prod-image-verify-line-20)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text class="breeze-prod-image-verify-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-20)">│</text><text class="breeze-prod-image-verify-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-20)">
 </text><text class="breeze-prod-image-verify-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-21)">│</text><text class="breeze-prod-image-verify-r4" x="24.4" y="532.4" textLength="207.4" clip-path="url(#breeze-prod-image-verify-line-21)">--debug-resources</text><text class="breeze-prod-image-verify-r1" x="378.2" y="532.4" textLength="768.6" clip-path="url(#breeze-prod-image-verify-line-21)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;running&#160;in&#160;parallel.</text><text class="breeze-prod-image-verify-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-21)">│</text><text class="breeze-prod-image-verify-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-21)">
 </text><text class="breeze-prod-image-verify-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-22)">│</text><text class="breeze-prod-image-verify-r4" x="24.4" y="556.8" textLength="305" clip-path="url(#breeze-prod-image-verify-line-22)">--include-success-outputs</text><text class="breeze-prod-image-verify-r1" x="378.2" y="556.8" textLength="841.8" clip-path="url(#breeze-prod-image-verify-line-22)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;runs&#160;(not&#160;shown&#160;by&#160;default).</text><text class="breeze-prod-image-verify-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-22)">│</text><text class="breeze-prod-image-verify-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-22)">
diff --git a/dev/breeze/doc/images/output_prod-image_verify.txt b/dev/breeze/doc/images/output_prod-image_verify.txt
index 909ac7db8e4aa..857a970c85745 100644
--- a/dev/breeze/doc/images/output_prod-image_verify.txt
+++ b/dev/breeze/doc/images/output_prod-image_verify.txt
@@ -1 +1 @@
-76afb62329b439b9b2a6000c0be68a04
+8fcf39b4153549e82cddcf3746126801
diff --git a/dev/breeze/doc/images/output_release-management_generate-constraints.svg b/dev/breeze/doc/images/output_release-management_generate-constraints.svg
index 4cd4b73b12018..bc0ea443f1c77 100644
--- a/dev/breeze/doc/images/output_release-management_generate-constraints.svg
+++ b/dev/breeze/doc/images/output_release-management_generate-constraints.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 782.0" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 757.5999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-release-management-generate-constraints-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="731.0" />
+      <rect x="0" y="0" width="1463.0" height="706.5999999999999" />
     </clipPath>
     <clipPath id="breeze-release-management-generate-constraints-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -129,12 +129,9 @@
 <clipPath id="breeze-release-management-generate-constraints-line-27">
     <rect x="0" y="660.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="breeze-release-management-generate-constraints-line-28">
-    <rect x="0" y="684.7" width="1464" height="24.65"/>
-            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="780" rx="8"/><text class="breeze-release-management-generate-constraints-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;generate-constraints</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="755.6" rx="8"/><text class="breeze-release-management-generate-constraints-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;generate-constraints</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -154,26 +151,25 @@
 </text><text class="breeze-release-management-generate-constraints-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-7)">│</text><text class="breeze-release-management-generate-constraints-r6" x="414.8" y="190.8" textLength="866.2" clip-path="url(#breeze-release-management-generate-constraints-line-7)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;constraints-no-providers)</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-7)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-7)">
 </text><text class="breeze-release-management-generate-constraints-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-8)">│</text><text class="breeze-release-management-generate-constraints-r5" x="414.8" y="215.2" textLength="866.2" clip-path="url(#breeze-release-management-generate-constraints-line-8)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-8)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-8)">
 </text><text class="breeze-release-management-generate-constraints-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-9)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="239.6" textLength="231.8" clip-path="url(#breeze-release-management-generate-constraints-line-9)">--github-repository</text><text class="breeze-release-management-generate-constraints-r7" x="366" y="239.6" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-9)">-g</text><text class="breeze-release-management-generate-constraints-r1" x="414.8" y="239.6" textLength="585.6" clip-path="url(#breeze-release-management-generate-constraints-line-9)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-release-management-generate-constraints-r6" x="1012.6" y="239.6" textLength="73.2" clip-path="url(#breeze-release-management-generate-constraints-line-9)">(TEXT)</text><text class="breeze-release-management-generate-constraints-r5" x="1098" y="239.6" textLength="305" clip-path="url(#breeze-release-management-generate-constraints-line-9)">[default:&#160;apache/airflow]</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-9)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-9)">
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-10)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="264" textLength="97.6" clip-path="url(#breeze-release-management-generate-constraints-line-10)">--python</text><text class="breeze-release-management-generate-constraints-r7" x="366" y="264" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-10)">-p</text><text class="breeze-release-management-generate-constraints-r1" x="414.8" y="264" textLength="732" clip-path="url(#breeze-release-management-generate-constraints-line-10)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-10)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-10)">
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-11)">│</text><text class="breeze-release-management-generate-constraints-r6" x="414.8" y="288.4" textLength="732" clip-path="url(#breeze-release-management-generate-constraints-line-11)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-11)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-11)">
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-12)">│</text><text class="breeze-release-management-generate-constraints-r5" x="414.8" y="312.8" textLength="732" clip-path="url(#breeze-release-management-generate-constraints-line-12)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-12)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-12)">
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-13)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="337.2" textLength="97.6" clip-path="url(#breeze-release-management-generate-constraints-line-13)">--use-uv</text><text class="breeze-release-management-generate-constraints-r1" x="122" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-13)">/</text><text class="breeze-release-management-generate-constraints-r4" x="134.2" y="337.2" textLength="134.2" clip-path="url(#breeze-release-management-generate-constraints-line-13)">--no-use-uv</text><text class="breeze-release-management-generate-constraints-r1" x="414.8" y="337.2" textLength="719.8" clip-path="url(#breeze-release-management-generate-constraints-line-13)">Use&#160;uv&#160;instead&#160;of&#160;pip&#160;as&#160;packaging&#160;tool&#160;to&#160;build&#160;the&#160;image.</text><text class="breeze-release-management-generate-constraints-r5" x="1146.8" y="337.2" textLength="207.4" clip-path="url(#breeze-release-management-generate-constraints-line-13)">[default:&#160;use-uv]</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-13)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-13)">
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="361.6" textLength="1464" clip-path="url(#breeze-release-management-generate-constraints-line-14)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-14)">
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="386" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-15)">╭─</text><text class="breeze-release-management-generate-constraints-r5" x="24.4" y="386" textLength="219.6" clip-path="url(#breeze-release-management-generate-constraints-line-15)">&#160;Parallel&#160;running&#160;</text><text class="breeze-release-management-generate-constraints-r5" x="244" y="386" textLength="1195.6" clip-path="url(#breeze-release-management-generate-constraints-line-15)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-generate-constraints-r5" x="1439.6" y="386" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-15)">─╮</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-15)">
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-16)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="410.4" textLength="207.4" clip-path="url(#breeze-release-management-generate-constraints-line-16)">--debug-resources</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="410.4" textLength="768.6" clip-path="url(#breeze-release-management-generate-constraints-line-16)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;running&#160;in&#160;parallel.</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-16)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-16)">
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-17)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="434.8" textLength="158.6" clip-path="url(#breeze-release-management-generate-constraints-line-17)">--parallelism</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="434.8" textLength="915" clip-path="url(#breeze-release-management-generate-constraints-line-17)">Maximum&#160;number&#160;of&#160;processes&#160;to&#160;use&#160;while&#160;running&#160;the&#160;operation&#160;in&#160;parallel.</text><text class="breeze-release-management-generate-constraints-r6" x="1207.8" y="434.8" textLength="183" clip-path="url(#breeze-release-management-generate-constraints-line-17)">(INTEGER&#160;RANGE)</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-17)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-17)">
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-18)">│</text><text class="breeze-release-management-generate-constraints-r5" x="280.6" y="459.2" textLength="915" clip-path="url(#breeze-release-management-generate-constraints-line-18)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-18)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-18)">
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-19)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="483.6" textLength="207.4" clip-path="url(#breeze-release-management-generate-constraints-line-19)">--python-versions</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="483.6" textLength="951.6" clip-path="url(#breeze-release-management-generate-constraints-line-19)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;for&#160;build&#160;with&#160;multiple&#160;versions.</text><text class="breeze-release-management-generate-constraints-r6" x="1244.4" y="483.6" textLength="73.2" clip-path="url(#breeze-release-management-generate-constraints-line-19)">(TEXT)</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-19)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-19)">
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-20)">│</text><text class="breeze-release-management-generate-constraints-r5" x="280.6" y="508" textLength="951.6" clip-path="url(#breeze-release-management-generate-constraints-line-20)">[default:&#160;3.9&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-20)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-20)">
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-21)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="532.4" textLength="207.4" clip-path="url(#breeze-release-management-generate-constraints-line-21)">--run-in-parallel</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="532.4" textLength="854" clip-path="url(#breeze-release-management-generate-constraints-line-21)">Run&#160;the&#160;operation&#160;in&#160;parallel&#160;on&#160;all&#160;or&#160;selected&#160;subset&#160;of&#160;parameters.</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-21)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-21)">
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-22)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="556.8" textLength="170.8" clip-path="url(#breeze-release-management-generate-constraints-line-22)">--skip-cleanup</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="556.8" textLength="732" clip-path="url(#breeze-release-management-generate-constraints-line-22)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-22)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-22)">
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="581.2" textLength="1464" clip-path="url(#breeze-release-management-generate-constraints-line-23)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-23)">
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="605.6" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-24)">╭─</text><text class="breeze-release-management-generate-constraints-r5" x="24.4" y="605.6" textLength="195.2" clip-path="url(#breeze-release-management-generate-constraints-line-24)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-generate-constraints-r5" x="219.6" y="605.6" textLength="1220" clip-path="url(#breeze-release-management-generate-constraints-line-24)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-generate-constraints-r5" x="1439.6" y="605.6" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-24)">─╮</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-24)">
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-25)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="630" textLength="109.8" clip-path="url(#breeze-release-management-generate-constraints-line-25)">--verbose</text><text class="breeze-release-management-generate-constraints-r7" x="158.6" y="630" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-25)">-v</text><text class="breeze-release-management-generate-constraints-r1" x="207.4" y="630" textLength="585.6" clip-path="url(#breeze-release-management-generate-constraints-line-25)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-25)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-25)">
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-26)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="654.4" textLength="109.8" clip-path="url(#breeze-release-management-generate-constraints-line-26)">--dry-run</text><text class="breeze-release-management-generate-constraints-r7" x="158.6" y="654.4" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-26)">-D</text><text class="breeze-release-management-generate-constraints-r1" x="207.4" y="654.4" textLength="719.8" clip-path="url(#breeze-release-management-generate-constraints-line-26)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-26)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-26)">
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-27)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="678.8" textLength="97.6" clip-path="url(#breeze-release-management-generate-constraints-line-27)">--answer</text><text class="breeze-release-management-generate-constraints-r7" x="158.6" y="678.8" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-27)">-a</text><text class="breeze-release-management-generate-constraints-r1" x="207.4" y="678.8" textLength="317.2" clip-path="url(#breeze-release-management-generate-constraints-line-27)">Force&#160;answer&#160;to&#160;questions.</text><text class="breeze-release-management-generate-constraints-r6" x="536.8" y="678.8" textLength="353.8" clip-path="url(#breeze-release-management-generate-constraints-line-27)">(y&#160;|&#160;n&#160;|&#160;q&#160;|&#160;yes&#160;|&#160;no&#160;|&#160;quit)</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-27)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-27)">
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-28)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="703.2" textLength="73.2" clip-path="url(#breeze-release-management-generate-constraints-line-28)">--help</text><text class="breeze-release-management-generate-constraints-r7" x="158.6" y="703.2" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-28)">-h</text><text class="breeze-release-management-generate-constraints-r1" x="207.4" y="703.2" textLength="329.4" clip-path="url(#breeze-release-management-generate-constraints-line-28)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-28)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-28)">
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="727.6" textLength="1464" clip-path="url(#breeze-release-management-generate-constraints-line-29)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-29)">
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-10)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="264" textLength="97.6" clip-path="url(#breeze-release-management-generate-constraints-line-10)">--python</text><text class="breeze-release-management-generate-constraints-r7" x="366" y="264" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-10)">-p</text><text class="breeze-release-management-generate-constraints-r1" x="414.8" y="264" textLength="732" clip-path="url(#breeze-release-management-generate-constraints-line-10)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-release-management-generate-constraints-r6" x="1159" y="264" textLength="268.4" clip-path="url(#breeze-release-management-generate-constraints-line-10)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-10)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-10)">
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-11)">│</text><text class="breeze-release-management-generate-constraints-r5" x="414.8" y="288.4" textLength="732" clip-path="url(#breeze-release-management-generate-constraints-line-11)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-11)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-11)">
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-12)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="312.8" textLength="97.6" clip-path="url(#breeze-release-management-generate-constraints-line-12)">--use-uv</text><text class="breeze-release-management-generate-constraints-r1" x="122" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-12)">/</text><text class="breeze-release-management-generate-constraints-r4" x="134.2" y="312.8" textLength="134.2" clip-path="url(#breeze-release-management-generate-constraints-line-12)">--no-use-uv</text><text class="breeze-release-management-generate-constraints-r1" x="414.8" y="312.8" textLength="719.8" clip-path="url(#breeze-release-management-generate-constraints-line-12)">Use&#160;uv&#160;instead&#160;of&#160;pip&#160;as&#160;packaging&#160;tool&#160;to&#160;build&#160;the&#160;image.</text><text class="breeze-release-management-generate-constraints-r5" x="1146.8" y="312.8" textLength="207.4" clip-path="url(#breeze-release-management-generate-constraints-line-12)">[default:&#160;use-uv]</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-12)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-12)">
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="337.2" textLength="1464" clip-path="url(#breeze-release-management-generate-constraints-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-13)">
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="361.6" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-14)">╭─</text><text class="breeze-release-management-generate-constraints-r5" x="24.4" y="361.6" textLength="219.6" clip-path="url(#breeze-release-management-generate-constraints-line-14)">&#160;Parallel&#160;running&#160;</text><text class="breeze-release-management-generate-constraints-r5" x="244" y="361.6" textLength="1195.6" clip-path="url(#breeze-release-management-generate-constraints-line-14)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-generate-constraints-r5" x="1439.6" y="361.6" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-14)">─╮</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-14)">
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-15)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="386" textLength="207.4" clip-path="url(#breeze-release-management-generate-constraints-line-15)">--debug-resources</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="386" textLength="768.6" clip-path="url(#breeze-release-management-generate-constraints-line-15)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;running&#160;in&#160;parallel.</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-15)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-15)">
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-16)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="410.4" textLength="158.6" clip-path="url(#breeze-release-management-generate-constraints-line-16)">--parallelism</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="410.4" textLength="915" clip-path="url(#breeze-release-management-generate-constraints-line-16)">Maximum&#160;number&#160;of&#160;processes&#160;to&#160;use&#160;while&#160;running&#160;the&#160;operation&#160;in&#160;parallel.</text><text class="breeze-release-management-generate-constraints-r6" x="1207.8" y="410.4" textLength="183" clip-path="url(#breeze-release-management-generate-constraints-line-16)">(INTEGER&#160;RANGE)</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-16)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-16)">
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-17)">│</text><text class="breeze-release-management-generate-constraints-r5" x="280.6" y="434.8" textLength="915" clip-path="url(#breeze-release-management-generate-constraints-line-17)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-17)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-17)">
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-18)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="459.2" textLength="207.4" clip-path="url(#breeze-release-management-generate-constraints-line-18)">--python-versions</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="459.2" textLength="951.6" clip-path="url(#breeze-release-management-generate-constraints-line-18)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;for&#160;build&#160;with&#160;multiple&#160;versions.</text><text class="breeze-release-management-generate-constraints-r6" x="1244.4" y="459.2" textLength="73.2" clip-path="url(#breeze-release-management-generate-constraints-line-18)">(TEXT)</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-18)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-18)">
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-19)">│</text><text class="breeze-release-management-generate-constraints-r5" x="280.6" y="483.6" textLength="951.6" clip-path="url(#breeze-release-management-generate-constraints-line-19)">[default:&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-19)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-19)">
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-20)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="508" textLength="207.4" clip-path="url(#breeze-release-management-generate-constraints-line-20)">--run-in-parallel</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="508" textLength="854" clip-path="url(#breeze-release-management-generate-constraints-line-20)">Run&#160;the&#160;operation&#160;in&#160;parallel&#160;on&#160;all&#160;or&#160;selected&#160;subset&#160;of&#160;parameters.</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-20)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-20)">
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-21)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="532.4" textLength="170.8" clip-path="url(#breeze-release-management-generate-constraints-line-21)">--skip-cleanup</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="532.4" textLength="732" clip-path="url(#breeze-release-management-generate-constraints-line-21)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-21)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-21)">
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="556.8" textLength="1464" clip-path="url(#breeze-release-management-generate-constraints-line-22)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-22)">
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="581.2" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-23)">╭─</text><text class="breeze-release-management-generate-constraints-r5" x="24.4" y="581.2" textLength="195.2" clip-path="url(#breeze-release-management-generate-constraints-line-23)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-generate-constraints-r5" x="219.6" y="581.2" textLength="1220" clip-path="url(#breeze-release-management-generate-constraints-line-23)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-generate-constraints-r5" x="1439.6" y="581.2" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-23)">─╮</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-23)">
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-24)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="605.6" textLength="109.8" clip-path="url(#breeze-release-management-generate-constraints-line-24)">--verbose</text><text class="breeze-release-management-generate-constraints-r7" x="158.6" y="605.6" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-24)">-v</text><text class="breeze-release-management-generate-constraints-r1" x="207.4" y="605.6" textLength="585.6" clip-path="url(#breeze-release-management-generate-constraints-line-24)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-24)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-24)">
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-25)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="630" textLength="109.8" clip-path="url(#breeze-release-management-generate-constraints-line-25)">--dry-run</text><text class="breeze-release-management-generate-constraints-r7" x="158.6" y="630" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-25)">-D</text><text class="breeze-release-management-generate-constraints-r1" x="207.4" y="630" textLength="719.8" clip-path="url(#breeze-release-management-generate-constraints-line-25)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-25)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-25)">
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-26)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="654.4" textLength="97.6" clip-path="url(#breeze-release-management-generate-constraints-line-26)">--answer</text><text class="breeze-release-management-generate-constraints-r7" x="158.6" y="654.4" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-26)">-a</text><text class="breeze-release-management-generate-constraints-r1" x="207.4" y="654.4" textLength="317.2" clip-path="url(#breeze-release-management-generate-constraints-line-26)">Force&#160;answer&#160;to&#160;questions.</text><text class="breeze-release-management-generate-constraints-r6" x="536.8" y="654.4" textLength="353.8" clip-path="url(#breeze-release-management-generate-constraints-line-26)">(y&#160;|&#160;n&#160;|&#160;q&#160;|&#160;yes&#160;|&#160;no&#160;|&#160;quit)</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-26)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-26)">
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-27)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="678.8" textLength="73.2" clip-path="url(#breeze-release-management-generate-constraints-line-27)">--help</text><text class="breeze-release-management-generate-constraints-r7" x="158.6" y="678.8" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-27)">-h</text><text class="breeze-release-management-generate-constraints-r1" x="207.4" y="678.8" textLength="329.4" clip-path="url(#breeze-release-management-generate-constraints-line-27)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-release-management-generate-constraints-r5" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-27)">│</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-27)">
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="703.2" textLength="1464" clip-path="url(#breeze-release-management-generate-constraints-line-28)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-28)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_release-management_generate-constraints.txt b/dev/breeze/doc/images/output_release-management_generate-constraints.txt
index a9d57db03a898..b1402f55a33f4 100644
--- a/dev/breeze/doc/images/output_release-management_generate-constraints.txt
+++ b/dev/breeze/doc/images/output_release-management_generate-constraints.txt
@@ -1 +1 @@
-8c14b225d34fd1208e806e1264b1065d
+7721551d951d9d1f1aa4a65fc40590fb
diff --git a/dev/breeze/doc/images/output_release-management_install-provider-distributions.svg b/dev/breeze/doc/images/output_release-management_install-provider-distributions.svg
index 700503f144096..f0b1669dc1af8 100644
--- a/dev/breeze/doc/images/output_release-management_install-provider-distributions.svg
+++ b/dev/breeze/doc/images/output_release-management_install-provider-distributions.svg
@@ -300,8 +300,8 @@
 </text><text class="breeze-release-management-install-provider-distributions-r1" x="12.2" y="93.2" textLength="707.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-3)">Installs&#160;provider&#160;distributiobs&#160;that&#160;can&#160;be&#160;found&#160;in&#160;dist.</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-3)">
 </text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-4)">
 </text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-5)">╭─</text><text class="breeze-release-management-install-provider-distributions-r5" x="24.4" y="142" textLength="353.8" clip-path="url(#breeze-release-management-install-provider-distributions-line-5)">&#160;Provider&#160;installation&#160;flags&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="378.2" y="142" textLength="1061.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-5)">───────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-install-provider-distributions-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-5)">─╮</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-5)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-6)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-6)">--python</text><text class="breeze-release-management-install-provider-distributions-r6" x="280.6" y="166.4" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-6)">-p</text><text class="breeze-release-management-install-provider-distributions-r1" x="329.4" y="166.4" textLength="732" clip-path="url(#breeze-release-management-install-provider-distributions-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-release-management-install-provider-distributions-r7" x="1073.6" y="166.4" textLength="341.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-6)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-6)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-6)">
-</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-7)">│</text><text class="breeze-release-management-install-provider-distributions-r5" x="329.4" y="190.8" textLength="732" clip-path="url(#breeze-release-management-install-provider-distributions-line-7)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-7)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-7)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-6)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-release-management-install-provider-distributions-line-6)">--python</text><text class="breeze-release-management-install-provider-distributions-r6" x="280.6" y="166.4" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-6)">-p</text><text class="breeze-release-management-install-provider-distributions-r1" x="329.4" y="166.4" textLength="732" clip-path="url(#breeze-release-management-install-provider-distributions-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-release-management-install-provider-distributions-r7" x="1073.6" y="166.4" textLength="268.4" clip-path="url(#breeze-release-management-install-provider-distributions-line-6)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-6)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-6)">
+</text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-7)">│</text><text class="breeze-release-management-install-provider-distributions-r5" x="329.4" y="190.8" textLength="732" clip-path="url(#breeze-release-management-install-provider-distributions-line-7)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-7)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-7)">
 </text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-8)">│</text><text class="breeze-release-management-install-provider-distributions-r4" x="24.4" y="215.2" textLength="183" clip-path="url(#breeze-release-management-install-provider-distributions-line-8)">--mount-sources</text><text class="breeze-release-management-install-provider-distributions-r1" x="329.4" y="215.2" textLength="1110.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-8)">Choose&#160;scope&#160;of&#160;local&#160;sources&#160;that&#160;should&#160;be&#160;mounted,&#160;skipped,&#160;or&#160;removed&#160;(default&#160;=&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-8)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-8)">
 </text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-9)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="329.4" y="239.6" textLength="1110.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-9)">selected).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-9)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-9)">
 </text><text class="breeze-release-management-install-provider-distributions-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-10)">│</text><text class="breeze-release-management-install-provider-distributions-r7" x="329.4" y="264" textLength="1110.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-10)">(selected&#160;|&#160;all&#160;|&#160;skip&#160;|&#160;remove&#160;|&#160;tests&#160;|&#160;providers-and-tests)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-install-provider-distributions-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-10)">│</text><text class="breeze-release-management-install-provider-distributions-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-distributions-line-10)">
diff --git a/dev/breeze/doc/images/output_release-management_install-provider-distributions.txt b/dev/breeze/doc/images/output_release-management_install-provider-distributions.txt
index 89c64b6e4d93f..7abc4df7f96ab 100644
--- a/dev/breeze/doc/images/output_release-management_install-provider-distributions.txt
+++ b/dev/breeze/doc/images/output_release-management_install-provider-distributions.txt
@@ -1 +1 @@
-c04ca4aa246f2fd444efed0308474fa1
+1ea2317652b1d9d4f58e25de06c1fca8
diff --git a/dev/breeze/doc/images/output_release-management_merge-prod-images.svg b/dev/breeze/doc/images/output_release-management_merge-prod-images.svg
index 1ba1a022fbb67..50c44e8756f3b 100644
--- a/dev/breeze/doc/images/output_release-management_merge-prod-images.svg
+++ b/dev/breeze/doc/images/output_release-management_merge-prod-images.svg
@@ -149,7 +149,7 @@
 </text><text class="breeze-release-management-merge-prod-images-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-6)">│</text><text class="breeze-release-management-merge-prod-images-r6" x="24.4" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-6)">*</text><text class="breeze-release-management-merge-prod-images-r4" x="61" y="166.4" textLength="207.4" clip-path="url(#breeze-release-management-merge-prod-images-line-6)">--airflow-version</text><text class="breeze-release-management-merge-prod-images-r1" x="341.6" y="166.4" textLength="597.8" clip-path="url(#breeze-release-management-merge-prod-images-line-6)">Airflow&#160;version&#160;to&#160;release&#160;(2.3.0,&#160;2.3.0rc1&#160;etc.)</text><text class="breeze-release-management-merge-prod-images-r7" x="951.6" y="166.4" textLength="73.2" clip-path="url(#breeze-release-management-merge-prod-images-line-6)">(TEXT)</text><text class="breeze-release-management-merge-prod-images-r8" x="1037" y="166.4" textLength="122" clip-path="url(#breeze-release-management-merge-prod-images-line-6)">[required]</text><text class="breeze-release-management-merge-prod-images-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-6)">│</text><text class="breeze-release-management-merge-prod-images-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-6)">
 </text><text class="breeze-release-management-merge-prod-images-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-7)">│</text><text class="breeze-release-management-merge-prod-images-r4" x="61" y="190.8" textLength="97.6" clip-path="url(#breeze-release-management-merge-prod-images-line-7)">--python</text><text class="breeze-release-management-merge-prod-images-r9" x="292.8" y="190.8" textLength="24.4" clip-path="url(#breeze-release-management-merge-prod-images-line-7)">-p</text><text class="breeze-release-management-merge-prod-images-r1" x="341.6" y="190.8" textLength="1098" clip-path="url(#breeze-release-management-merge-prod-images-line-7)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images&#160;(if&#160;not&#160;specified&#160;-&#160;all&#160;python</text><text class="breeze-release-management-merge-prod-images-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-7)">│</text><text class="breeze-release-management-merge-prod-images-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-7)">
 </text><text class="breeze-release-management-merge-prod-images-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-8)">│</text><text class="breeze-release-management-merge-prod-images-r1" x="341.6" y="215.2" textLength="1098" clip-path="url(#breeze-release-management-merge-prod-images-line-8)">versions&#160;are&#160;used).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-merge-prod-images-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-8)">│</text><text class="breeze-release-management-merge-prod-images-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-8)">
-</text><text class="breeze-release-management-merge-prod-images-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-9)">│</text><text class="breeze-release-management-merge-prod-images-r7" x="341.6" y="239.6" textLength="1098" clip-path="url(#breeze-release-management-merge-prod-images-line-9)">(3.9&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-merge-prod-images-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-9)">│</text><text class="breeze-release-management-merge-prod-images-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-9)">
+</text><text class="breeze-release-management-merge-prod-images-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-9)">│</text><text class="breeze-release-management-merge-prod-images-r7" x="341.6" y="239.6" textLength="1098" clip-path="url(#breeze-release-management-merge-prod-images-line-9)">(3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-merge-prod-images-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-9)">│</text><text class="breeze-release-management-merge-prod-images-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-9)">
 </text><text class="breeze-release-management-merge-prod-images-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-10)">│</text><text class="breeze-release-management-merge-prod-images-r4" x="61" y="264" textLength="158.6" clip-path="url(#breeze-release-management-merge-prod-images-line-10)">--slim-images</text><text class="breeze-release-management-merge-prod-images-r1" x="341.6" y="264" textLength="719.8" clip-path="url(#breeze-release-management-merge-prod-images-line-10)">Whether&#160;to&#160;prepare&#160;slim&#160;images&#160;instead&#160;of&#160;the&#160;regular&#160;ones.</text><text class="breeze-release-management-merge-prod-images-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-10)">│</text><text class="breeze-release-management-merge-prod-images-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-10)">
 </text><text class="breeze-release-management-merge-prod-images-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-11)">│</text><text class="breeze-release-management-merge-prod-images-r6" x="24.4" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-11)">*</text><text class="breeze-release-management-merge-prod-images-r4" x="61" y="288.4" textLength="207.4" clip-path="url(#breeze-release-management-merge-prod-images-line-11)">--metadata-folder</text><text class="breeze-release-management-merge-prod-images-r1" x="341.6" y="288.4" textLength="1098" clip-path="url(#breeze-release-management-merge-prod-images-line-11)">Folder&#160;to&#160;write&#160;the&#160;build&#160;metadata&#160;to.&#160;When&#160;this&#160;option&#160;is&#160;specified&#160;the&#160;image&#160;is&#160;pushed&#160;&#160;</text><text class="breeze-release-management-merge-prod-images-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-11)">│</text><text class="breeze-release-management-merge-prod-images-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-11)">
 </text><text class="breeze-release-management-merge-prod-images-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-12)">│</text><text class="breeze-release-management-merge-prod-images-r1" x="341.6" y="312.8" textLength="1098" clip-path="url(#breeze-release-management-merge-prod-images-line-12)">to&#160;registryonly&#160;by&#160;digests&#160;not&#160;by&#160;the&#160;tag&#160;because&#160;we&#160;are&#160;going&#160;to&#160;merge&#160;several&#160;images&#160;in&#160;</text><text class="breeze-release-management-merge-prod-images-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-12)">│</text><text class="breeze-release-management-merge-prod-images-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-merge-prod-images-line-12)">
diff --git a/dev/breeze/doc/images/output_release-management_merge-prod-images.txt b/dev/breeze/doc/images/output_release-management_merge-prod-images.txt
index 7341117037271..f830ba93dbd48 100644
--- a/dev/breeze/doc/images/output_release-management_merge-prod-images.txt
+++ b/dev/breeze/doc/images/output_release-management_merge-prod-images.txt
@@ -1 +1 @@
-3012509bbf65a7cf0d9d95f377ce58ec
+a22a4eeefd00c33e8f68738d49d76c46
diff --git a/dev/breeze/doc/images/output_release-management_release-prod-images.svg b/dev/breeze/doc/images/output_release-management_release-prod-images.svg
index 8584aa2ed5513..74327c40bffa5 100644
--- a/dev/breeze/doc/images/output_release-management_release-prod-images.svg
+++ b/dev/breeze/doc/images/output_release-management_release-prod-images.svg
@@ -170,7 +170,7 @@
 </text><text class="breeze-release-management-release-prod-images-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-6)">│</text><text class="breeze-release-management-release-prod-images-r6" x="24.4" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-6)">*</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="166.4" textLength="207.4" clip-path="url(#breeze-release-management-release-prod-images-line-6)">--airflow-version</text><text class="breeze-release-management-release-prod-images-r1" x="341.6" y="166.4" textLength="597.8" clip-path="url(#breeze-release-management-release-prod-images-line-6)">Airflow&#160;version&#160;to&#160;release&#160;(2.3.0,&#160;2.3.0rc1&#160;etc.)</text><text class="breeze-release-management-release-prod-images-r7" x="951.6" y="166.4" textLength="73.2" clip-path="url(#breeze-release-management-release-prod-images-line-6)">(TEXT)</text><text class="breeze-release-management-release-prod-images-r8" x="1037" y="166.4" textLength="122" clip-path="url(#breeze-release-management-release-prod-images-line-6)">[required]</text><text class="breeze-release-management-release-prod-images-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-6)">│</text><text class="breeze-release-management-release-prod-images-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-6)">
 </text><text class="breeze-release-management-release-prod-images-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-7)">│</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="190.8" textLength="97.6" clip-path="url(#breeze-release-management-release-prod-images-line-7)">--python</text><text class="breeze-release-management-release-prod-images-r9" x="292.8" y="190.8" textLength="24.4" clip-path="url(#breeze-release-management-release-prod-images-line-7)">-p</text><text class="breeze-release-management-release-prod-images-r1" x="341.6" y="190.8" textLength="1098" clip-path="url(#breeze-release-management-release-prod-images-line-7)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images&#160;(if&#160;not&#160;specified&#160;-&#160;all&#160;python</text><text class="breeze-release-management-release-prod-images-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-7)">│</text><text class="breeze-release-management-release-prod-images-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-7)">
 </text><text class="breeze-release-management-release-prod-images-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-8)">│</text><text class="breeze-release-management-release-prod-images-r1" x="341.6" y="215.2" textLength="1098" clip-path="url(#breeze-release-management-release-prod-images-line-8)">versions&#160;are&#160;used).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-release-prod-images-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-8)">│</text><text class="breeze-release-management-release-prod-images-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-8)">
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-9)">│</text><text class="breeze-release-management-release-prod-images-r7" x="341.6" y="239.6" textLength="1098" clip-path="url(#breeze-release-management-release-prod-images-line-9)">(3.9&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-release-prod-images-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-9)">│</text><text class="breeze-release-management-release-prod-images-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-9)">
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-9)">│</text><text class="breeze-release-management-release-prod-images-r7" x="341.6" y="239.6" textLength="1098" clip-path="url(#breeze-release-management-release-prod-images-line-9)">(3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-release-prod-images-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-9)">│</text><text class="breeze-release-management-release-prod-images-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-9)">
 </text><text class="breeze-release-management-release-prod-images-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-10)">│</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="264" textLength="122" clip-path="url(#breeze-release-management-release-prod-images-line-10)">--platform</text><text class="breeze-release-management-release-prod-images-r1" x="341.6" y="264" textLength="1024.8" clip-path="url(#breeze-release-management-release-prod-images-line-10)">Platform&#160;to&#160;build&#160;images&#160;for&#160;(if&#160;not&#160;specified,&#160;multiplatform&#160;images&#160;will&#160;be&#160;built.&#160;</text><text class="breeze-release-management-release-prod-images-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-10)">│</text><text class="breeze-release-management-release-prod-images-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-10)">
 </text><text class="breeze-release-management-release-prod-images-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-11)">│</text><text class="breeze-release-management-release-prod-images-r7" x="341.6" y="288.4" textLength="1024.8" clip-path="url(#breeze-release-management-release-prod-images-line-11)">(linux/amd64&#160;|&#160;linux/arm64&#160;|&#160;linux/x86_64&#160;|&#160;linux/aarch64&#160;|&#160;linux/amd64,linux/arm64)</text><text class="breeze-release-management-release-prod-images-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-11)">│</text><text class="breeze-release-management-release-prod-images-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-11)">
 </text><text class="breeze-release-management-release-prod-images-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-12)">│</text><text class="breeze-release-management-release-prod-images-r5" x="341.6" y="312.8" textLength="1024.8" clip-path="url(#breeze-release-management-release-prod-images-line-12)">[default:&#160;linux/amd64,linux/arm64]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-release-prod-images-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-12)">│</text><text class="breeze-release-management-release-prod-images-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-12)">
diff --git a/dev/breeze/doc/images/output_release-management_release-prod-images.txt b/dev/breeze/doc/images/output_release-management_release-prod-images.txt
index 52e095035a188..7547a6eed14d2 100644
--- a/dev/breeze/doc/images/output_release-management_release-prod-images.txt
+++ b/dev/breeze/doc/images/output_release-management_release-prod-images.txt
@@ -1 +1 @@
-fef18c3d93edfb7eefcf44162788f4f9
+8fc83e19c1176ffd508492fbe911b428
diff --git a/dev/breeze/doc/images/output_release-management_verify-provider-distributions.svg b/dev/breeze/doc/images/output_release-management_verify-provider-distributions.svg
index abffb682a0826..138a709e161ef 100644
--- a/dev/breeze/doc/images/output_release-management_verify-provider-distributions.svg
+++ b/dev/breeze/doc/images/output_release-management_verify-provider-distributions.svg
@@ -273,8 +273,8 @@
 </text><text class="breeze-release-management-verify-provider-distributions-r1" x="12.2" y="93.2" textLength="854" clip-path="url(#breeze-release-management-verify-provider-distributions-line-3)">Verifies&#160;if&#160;all&#160;provider&#160;code&#160;is&#160;following&#160;expectations&#160;for&#160;providers.</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-3)">
 </text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-4)">
 </text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-5)">╭─</text><text class="breeze-release-management-verify-provider-distributions-r5" x="24.4" y="142" textLength="353.8" clip-path="url(#breeze-release-management-verify-provider-distributions-line-5)">&#160;Provider&#160;verification&#160;flags&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="378.2" y="142" textLength="1061.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-5)">───────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-5)">─╮</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-5)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-6)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-6)">--python</text><text class="breeze-release-management-verify-provider-distributions-r6" x="280.6" y="166.4" textLength="24.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-6)">-p</text><text class="breeze-release-management-verify-provider-distributions-r1" x="329.4" y="166.4" textLength="732" clip-path="url(#breeze-release-management-verify-provider-distributions-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-release-management-verify-provider-distributions-r7" x="1073.6" y="166.4" textLength="341.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-6)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-6)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-6)">
-</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-7)">│</text><text class="breeze-release-management-verify-provider-distributions-r5" x="329.4" y="190.8" textLength="732" clip-path="url(#breeze-release-management-verify-provider-distributions-line-7)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-7)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-7)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-6)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-release-management-verify-provider-distributions-line-6)">--python</text><text class="breeze-release-management-verify-provider-distributions-r6" x="280.6" y="166.4" textLength="24.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-6)">-p</text><text class="breeze-release-management-verify-provider-distributions-r1" x="329.4" y="166.4" textLength="732" clip-path="url(#breeze-release-management-verify-provider-distributions-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-release-management-verify-provider-distributions-r7" x="1073.6" y="166.4" textLength="268.4" clip-path="url(#breeze-release-management-verify-provider-distributions-line-6)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-6)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-6)">
+</text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-7)">│</text><text class="breeze-release-management-verify-provider-distributions-r5" x="329.4" y="190.8" textLength="732" clip-path="url(#breeze-release-management-verify-provider-distributions-line-7)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-7)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-7)">
 </text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-8)">│</text><text class="breeze-release-management-verify-provider-distributions-r4" x="24.4" y="215.2" textLength="183" clip-path="url(#breeze-release-management-verify-provider-distributions-line-8)">--mount-sources</text><text class="breeze-release-management-verify-provider-distributions-r1" x="329.4" y="215.2" textLength="1110.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-8)">Choose&#160;scope&#160;of&#160;local&#160;sources&#160;that&#160;should&#160;be&#160;mounted,&#160;skipped,&#160;or&#160;removed&#160;(default&#160;=&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-8)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-8)">
 </text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-9)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="329.4" y="239.6" textLength="1110.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-9)">selected).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-9)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-9)">
 </text><text class="breeze-release-management-verify-provider-distributions-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-10)">│</text><text class="breeze-release-management-verify-provider-distributions-r7" x="329.4" y="264" textLength="1110.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-10)">(selected&#160;|&#160;all&#160;|&#160;skip&#160;|&#160;remove&#160;|&#160;tests&#160;|&#160;providers-and-tests)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-verify-provider-distributions-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-10)">│</text><text class="breeze-release-management-verify-provider-distributions-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-distributions-line-10)">
diff --git a/dev/breeze/doc/images/output_release-management_verify-provider-distributions.txt b/dev/breeze/doc/images/output_release-management_verify-provider-distributions.txt
index 889a731bf110b..1661d2e8a095e 100644
--- a/dev/breeze/doc/images/output_release-management_verify-provider-distributions.txt
+++ b/dev/breeze/doc/images/output_release-management_verify-provider-distributions.txt
@@ -1 +1 @@
-26b34f4a3b053d7114ffc7dee194c87b
+fcc7b57ae5cc1d427981eadc3499f281
diff --git a/dev/breeze/doc/images/output_sbom_export-dependency-information.svg b/dev/breeze/doc/images/output_sbom_export-dependency-information.svg
index fc7ff4373b6ec..ee603e09b45b7 100644
--- a/dev/breeze/doc/images/output_sbom_export-dependency-information.svg
+++ b/dev/breeze/doc/images/output_sbom_export-dependency-information.svg
@@ -160,8 +160,8 @@
 </text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-sbom-export-dependency-information-line-5)">╭─</text><text class="breeze-sbom-export-dependency-information-r5" x="24.4" y="142" textLength="451.4" clip-path="url(#breeze-sbom-export-dependency-information-line-5)">&#160;Export&#160;dependency&#160;information&#160;flags&#160;</text><text class="breeze-sbom-export-dependency-information-r5" x="475.8" y="142" textLength="963.8" clip-path="url(#breeze-sbom-export-dependency-information-line-5)">───────────────────────────────────────────────────────────────────────────────</text><text class="breeze-sbom-export-dependency-information-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-sbom-export-dependency-information-line-5)">─╮</text><text class="breeze-sbom-export-dependency-information-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-5)">
 </text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-6)">│</text><text class="breeze-sbom-export-dependency-information-r6" x="24.4" y="166.4" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-6)">*</text><text class="breeze-sbom-export-dependency-information-r4" x="61" y="166.4" textLength="207.4" clip-path="url(#breeze-sbom-export-dependency-information-line-6)">--airflow-version</text><text class="breeze-sbom-export-dependency-information-r7" x="427" y="166.4" textLength="24.4" clip-path="url(#breeze-sbom-export-dependency-information-line-6)">-A</text><text class="breeze-sbom-export-dependency-information-r1" x="475.8" y="166.4" textLength="475.8" clip-path="url(#breeze-sbom-export-dependency-information-line-6)">Airflow&#160;version&#160;to&#160;use&#160;for&#160;the&#160;command.</text><text class="breeze-sbom-export-dependency-information-r8" x="963.8" y="166.4" textLength="73.2" clip-path="url(#breeze-sbom-export-dependency-information-line-6)">(TEXT)</text><text class="breeze-sbom-export-dependency-information-r9" x="1049.2" y="166.4" textLength="122" clip-path="url(#breeze-sbom-export-dependency-information-line-6)">[required]</text><text class="breeze-sbom-export-dependency-information-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-6)">│</text><text class="breeze-sbom-export-dependency-information-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-6)">
 </text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-7)">│</text><text class="breeze-sbom-export-dependency-information-r4" x="61" y="190.8" textLength="97.6" clip-path="url(#breeze-sbom-export-dependency-information-line-7)">--python</text><text class="breeze-sbom-export-dependency-information-r7" x="427" y="190.8" textLength="24.4" clip-path="url(#breeze-sbom-export-dependency-information-line-7)">-p</text><text class="breeze-sbom-export-dependency-information-r1" x="475.8" y="190.8" textLength="732" clip-path="url(#breeze-sbom-export-dependency-information-line-7)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-sbom-export-dependency-information-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-7)">│</text><text class="breeze-sbom-export-dependency-information-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-7)">
-</text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-8)">│</text><text class="breeze-sbom-export-dependency-information-r8" x="475.8" y="215.2" textLength="732" clip-path="url(#breeze-sbom-export-dependency-information-line-8)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-export-dependency-information-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-8)">│</text><text class="breeze-sbom-export-dependency-information-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-8)">
-</text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-9)">│</text><text class="breeze-sbom-export-dependency-information-r5" x="475.8" y="239.6" textLength="732" clip-path="url(#breeze-sbom-export-dependency-information-line-9)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-export-dependency-information-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-9)">│</text><text class="breeze-sbom-export-dependency-information-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-9)">
+</text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-8)">│</text><text class="breeze-sbom-export-dependency-information-r8" x="475.8" y="215.2" textLength="732" clip-path="url(#breeze-sbom-export-dependency-information-line-8)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-export-dependency-information-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-8)">│</text><text class="breeze-sbom-export-dependency-information-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-8)">
+</text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-9)">│</text><text class="breeze-sbom-export-dependency-information-r5" x="475.8" y="239.6" textLength="732" clip-path="url(#breeze-sbom-export-dependency-information-line-9)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-export-dependency-information-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-9)">│</text><text class="breeze-sbom-export-dependency-information-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-9)">
 </text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-10)">│</text><text class="breeze-sbom-export-dependency-information-r4" x="61" y="264" textLength="341.6" clip-path="url(#breeze-sbom-export-dependency-information-line-10)">--include-open-psf-scorecard</text><text class="breeze-sbom-export-dependency-information-r7" x="427" y="264" textLength="24.4" clip-path="url(#breeze-sbom-export-dependency-information-line-10)">-s</text><text class="breeze-sbom-export-dependency-information-r1" x="475.8" y="264" textLength="561.2" clip-path="url(#breeze-sbom-export-dependency-information-line-10)">Include&#160;statistics&#160;from&#160;the&#160;Open&#160;PSF&#160;Scorecard</text><text class="breeze-sbom-export-dependency-information-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-10)">│</text><text class="breeze-sbom-export-dependency-information-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-10)">
 </text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-11)">│</text><text class="breeze-sbom-export-dependency-information-r4" x="61" y="288.4" textLength="268.4" clip-path="url(#breeze-sbom-export-dependency-information-line-11)">--include-github-stats</text><text class="breeze-sbom-export-dependency-information-r7" x="427" y="288.4" textLength="24.4" clip-path="url(#breeze-sbom-export-dependency-information-line-11)">-G</text><text class="breeze-sbom-export-dependency-information-r1" x="475.8" y="288.4" textLength="366" clip-path="url(#breeze-sbom-export-dependency-information-line-11)">Include&#160;statistics&#160;from&#160;GitHub</text><text class="breeze-sbom-export-dependency-information-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-11)">│</text><text class="breeze-sbom-export-dependency-information-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-11)">
 </text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-12)">│</text><text class="breeze-sbom-export-dependency-information-r4" x="61" y="312.8" textLength="207.4" clip-path="url(#breeze-sbom-export-dependency-information-line-12)">--include-actions</text><text class="breeze-sbom-export-dependency-information-r1" x="475.8" y="312.8" textLength="524.6" clip-path="url(#breeze-sbom-export-dependency-information-line-12)">Include&#160;Actions&#160;recommended&#160;for&#160;the&#160;project</text><text class="breeze-sbom-export-dependency-information-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-12)">│</text><text class="breeze-sbom-export-dependency-information-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-12)">
diff --git a/dev/breeze/doc/images/output_sbom_export-dependency-information.txt b/dev/breeze/doc/images/output_sbom_export-dependency-information.txt
index 8be6d09b5019f..d5a5892cd30bc 100644
--- a/dev/breeze/doc/images/output_sbom_export-dependency-information.txt
+++ b/dev/breeze/doc/images/output_sbom_export-dependency-information.txt
@@ -1 +1 @@
-432576382063ad0f8e30e277713bbc10
+4d738ac97ad21c8dd62bb240022d8d81
diff --git a/dev/breeze/doc/images/output_setup_config.svg b/dev/breeze/doc/images/output_setup_config.svg
index ae0d37872a119..4c99903272683 100644
--- a/dev/breeze/doc/images/output_setup_config.svg
+++ b/dev/breeze/doc/images/output_setup_config.svg
@@ -130,8 +130,8 @@
 </text><text class="breeze-setup-config-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-4)">
 </text><text class="breeze-setup-config-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-setup-config-line-5)">╭─</text><text class="breeze-setup-config-r5" x="24.4" y="142" textLength="170.8" clip-path="url(#breeze-setup-config-line-5)">&#160;Config&#160;flags&#160;</text><text class="breeze-setup-config-r5" x="195.2" y="142" textLength="1244.4" clip-path="url(#breeze-setup-config-line-5)">──────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-setup-config-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-setup-config-line-5)">─╮</text><text class="breeze-setup-config-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-setup-config-line-5)">
 </text><text class="breeze-setup-config-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-6)">│</text><text class="breeze-setup-config-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-setup-config-line-6)">--python</text><text class="breeze-setup-config-r6" x="390.4" y="166.4" textLength="24.4" clip-path="url(#breeze-setup-config-line-6)">-p</text><text class="breeze-setup-config-r1" x="475.8" y="166.4" textLength="732" clip-path="url(#breeze-setup-config-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-setup-config-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-6)">│</text><text class="breeze-setup-config-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-6)">
-</text><text class="breeze-setup-config-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-7)">│</text><text class="breeze-setup-config-r7" x="475.8" y="190.8" textLength="732" clip-path="url(#breeze-setup-config-line-7)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-config-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-7)">│</text><text class="breeze-setup-config-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-7)">
-</text><text class="breeze-setup-config-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-8)">│</text><text class="breeze-setup-config-r5" x="475.8" y="215.2" textLength="732" clip-path="url(#breeze-setup-config-line-8)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-config-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-8)">│</text><text class="breeze-setup-config-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-8)">
+</text><text class="breeze-setup-config-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-7)">│</text><text class="breeze-setup-config-r7" x="475.8" y="190.8" textLength="732" clip-path="url(#breeze-setup-config-line-7)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-config-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-7)">│</text><text class="breeze-setup-config-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-7)">
+</text><text class="breeze-setup-config-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-8)">│</text><text class="breeze-setup-config-r5" x="475.8" y="215.2" textLength="732" clip-path="url(#breeze-setup-config-line-8)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-config-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-8)">│</text><text class="breeze-setup-config-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-8)">
 </text><text class="breeze-setup-config-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-9)">│</text><text class="breeze-setup-config-r4" x="24.4" y="239.6" textLength="109.8" clip-path="url(#breeze-setup-config-line-9)">--backend</text><text class="breeze-setup-config-r6" x="390.4" y="239.6" textLength="24.4" clip-path="url(#breeze-setup-config-line-9)">-b</text><text class="breeze-setup-config-r1" x="475.8" y="239.6" textLength="963.8" clip-path="url(#breeze-setup-config-line-9)">Database&#160;backend&#160;to&#160;use.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;Breeze&#160;will&#160;start&#160;with&#160;an&#160;invalid</text><text class="breeze-setup-config-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-9)">│</text><text class="breeze-setup-config-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-9)">
 </text><text class="breeze-setup-config-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-setup-config-line-10)">│</text><text class="breeze-setup-config-r1" x="475.8" y="264" textLength="963.8" clip-path="url(#breeze-setup-config-line-10)">database&#160;configuration,&#160;meaning&#160;there&#160;will&#160;be&#160;no&#160;database&#160;available,&#160;and&#160;any&#160;&#160;&#160;</text><text class="breeze-setup-config-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-setup-config-line-10)">│</text><text class="breeze-setup-config-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-setup-config-line-10)">
 </text><text class="breeze-setup-config-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-11)">│</text><text class="breeze-setup-config-r1" x="475.8" y="288.4" textLength="963.8" clip-path="url(#breeze-setup-config-line-11)">attempts&#160;to&#160;connect&#160;to&#160;the&#160;Airflow&#160;database&#160;will&#160;fail.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-config-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-11)">│</text><text class="breeze-setup-config-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-11)">
diff --git a/dev/breeze/doc/images/output_setup_config.txt b/dev/breeze/doc/images/output_setup_config.txt
index 3f69ce1d49f86..6a52e60b0b458 100644
--- a/dev/breeze/doc/images/output_setup_config.txt
+++ b/dev/breeze/doc/images/output_setup_config.txt
@@ -1 +1 @@
-9509e3954e5aeb6a991fe5b302701d4d
+ce0a944326c3418706b7aa90d730e186
diff --git a/dev/breeze/doc/images/output_shell.svg b/dev/breeze/doc/images/output_shell.svg
index 2eebfe4d89fb7..34bf0f927e061 100644
--- a/dev/breeze/doc/images/output_shell.svg
+++ b/dev/breeze/doc/images/output_shell.svg
@@ -578,8 +578,8 @@
 </text><text class="breeze-shell-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-shell-line-5)">╭─</text><text class="breeze-shell-r5" x="24.4" y="142" textLength="195.2" clip-path="url(#breeze-shell-line-5)">&#160;Execution&#160;mode&#160;</text><text class="breeze-shell-r5" x="219.6" y="142" textLength="1220" clip-path="url(#breeze-shell-line-5)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-shell-line-5)">─╮</text><text class="breeze-shell-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-shell-line-5)">
 </text><text class="breeze-shell-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-shell-line-6)">│</text><text class="breeze-shell-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-shell-line-6)">--python</text><text class="breeze-shell-r6" x="719.8" y="166.4" textLength="24.4" clip-path="url(#breeze-shell-line-6)">-p</text><text class="breeze-shell-r1" x="768.6" y="166.4" textLength="671" clip-path="url(#breeze-shell-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-shell-line-6)">│</text><text class="breeze-shell-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-shell-line-6)">
 </text><text class="breeze-shell-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-shell-line-7)">│</text><text class="breeze-shell-r1" x="768.6" y="190.8" textLength="671" clip-path="url(#breeze-shell-line-7)">images.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-shell-line-7)">│</text><text class="breeze-shell-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-shell-line-7)">
-</text><text class="breeze-shell-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-shell-line-8)">│</text><text class="breeze-shell-r7" x="768.6" y="215.2" textLength="671" clip-path="url(#breeze-shell-line-8)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-shell-line-8)">│</text><text class="breeze-shell-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-shell-line-8)">
-</text><text class="breeze-shell-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-shell-line-9)">│</text><text class="breeze-shell-r5" x="768.6" y="239.6" textLength="671" clip-path="url(#breeze-shell-line-9)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-shell-line-9)">│</text><text class="breeze-shell-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-shell-line-9)">
+</text><text class="breeze-shell-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-shell-line-8)">│</text><text class="breeze-shell-r7" x="768.6" y="215.2" textLength="671" clip-path="url(#breeze-shell-line-8)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-shell-line-8)">│</text><text class="breeze-shell-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-shell-line-8)">
+</text><text class="breeze-shell-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-shell-line-9)">│</text><text class="breeze-shell-r5" x="768.6" y="239.6" textLength="671" clip-path="url(#breeze-shell-line-9)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-shell-line-9)">│</text><text class="breeze-shell-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-shell-line-9)">
 </text><text class="breeze-shell-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-shell-line-10)">│</text><text class="breeze-shell-r4" x="24.4" y="264" textLength="158.6" clip-path="url(#breeze-shell-line-10)">--integration</text><text class="breeze-shell-r1" x="768.6" y="264" textLength="671" clip-path="url(#breeze-shell-line-10)">Core&#160;Integrations&#160;to&#160;enable&#160;when&#160;running&#160;(can&#160;be&#160;more&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-shell-line-10)">│</text><text class="breeze-shell-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-shell-line-10)">
 </text><text class="breeze-shell-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-shell-line-11)">│</text><text class="breeze-shell-r1" x="768.6" y="288.4" textLength="671" clip-path="url(#breeze-shell-line-11)">than&#160;one).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-shell-line-11)">│</text><text class="breeze-shell-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-shell-line-11)">
 </text><text class="breeze-shell-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-shell-line-12)">│</text><text class="breeze-shell-r7" x="768.6" y="312.8" textLength="671" clip-path="url(#breeze-shell-line-12)">(all&#160;|&#160;all-testable&#160;|&#160;cassandra&#160;|&#160;celery&#160;|&#160;drill&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-shell-line-12)">│</text><text class="breeze-shell-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-shell-line-12)">
diff --git a/dev/breeze/doc/images/output_shell.txt b/dev/breeze/doc/images/output_shell.txt
index 8650401fe3735..ab08dd10a1636 100644
--- a/dev/breeze/doc/images/output_shell.txt
+++ b/dev/breeze/doc/images/output_shell.txt
@@ -1 +1 @@
-00e479003b0f0fd2e7e81d0703a4b829
+88a0320b81a12411637d9b2596394a3a
diff --git a/dev/breeze/doc/images/output_start-airflow.svg b/dev/breeze/doc/images/output_start-airflow.svg
index 5e5e599f53334..24ef4793309b7 100644
--- a/dev/breeze/doc/images/output_start-airflow.svg
+++ b/dev/breeze/doc/images/output_start-airflow.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 3270.7999999999997" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 3490.3999999999996" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-start-airflow-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="3219.7999999999997" />
+      <rect x="0" y="0" width="1463.0" height="3439.3999999999996" />
     </clipPath>
     <clipPath id="breeze-start-airflow-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -438,9 +438,36 @@
 <clipPath id="breeze-start-airflow-line-130">
     <rect x="0" y="3173.5" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-start-airflow-line-131">
+    <rect x="0" y="3197.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-start-airflow-line-132">
+    <rect x="0" y="3222.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-start-airflow-line-133">
+    <rect x="0" y="3246.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-start-airflow-line-134">
+    <rect x="0" y="3271.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-start-airflow-line-135">
+    <rect x="0" y="3295.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-start-airflow-line-136">
+    <rect x="0" y="3319.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-start-airflow-line-137">
+    <rect x="0" y="3344.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-start-airflow-line-138">
+    <rect x="0" y="3368.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-start-airflow-line-139">
+    <rect x="0" y="3393.1" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="3268.8" rx="8"/><text class="breeze-start-airflow-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;start-airflow</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="3488.4" rx="8"/><text class="breeze-start-airflow-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;start-airflow</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -459,8 +486,8 @@
 </text><text class="breeze-start-airflow-r5" x="0" y="166.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-6)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="166.4" textLength="195.2" clip-path="url(#breeze-start-airflow-line-6)">&#160;Execution&#160;mode&#160;</text><text class="breeze-start-airflow-r5" x="219.6" y="166.4" textLength="1220" clip-path="url(#breeze-start-airflow-line-6)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="166.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-6)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-6)">
 </text><text class="breeze-start-airflow-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-7)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="190.8" textLength="97.6" clip-path="url(#breeze-start-airflow-line-7)">--python</text><text class="breeze-start-airflow-r6" x="719.8" y="190.8" textLength="24.4" clip-path="url(#breeze-start-airflow-line-7)">-p</text><text class="breeze-start-airflow-r1" x="768.6" y="190.8" textLength="671" clip-path="url(#breeze-start-airflow-line-7)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-7)">│</text><text class="breeze-start-airflow-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-7)">
 </text><text class="breeze-start-airflow-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-8)">│</text><text class="breeze-start-airflow-r1" x="768.6" y="215.2" textLength="671" clip-path="url(#breeze-start-airflow-line-8)">images.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-8)">│</text><text class="breeze-start-airflow-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-8)">
-</text><text class="breeze-start-airflow-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-9)">│</text><text class="breeze-start-airflow-r7" x="768.6" y="239.6" textLength="671" clip-path="url(#breeze-start-airflow-line-9)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-9)">│</text><text class="breeze-start-airflow-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-9)">
-</text><text class="breeze-start-airflow-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-start-airflow-line-10)">│</text><text class="breeze-start-airflow-r5" x="768.6" y="264" textLength="671" clip-path="url(#breeze-start-airflow-line-10)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-start-airflow-line-10)">│</text><text class="breeze-start-airflow-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-start-airflow-line-10)">
+</text><text class="breeze-start-airflow-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-9)">│</text><text class="breeze-start-airflow-r7" x="768.6" y="239.6" textLength="671" clip-path="url(#breeze-start-airflow-line-9)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-9)">│</text><text class="breeze-start-airflow-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-9)">
+</text><text class="breeze-start-airflow-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-start-airflow-line-10)">│</text><text class="breeze-start-airflow-r5" x="768.6" y="264" textLength="671" clip-path="url(#breeze-start-airflow-line-10)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-start-airflow-line-10)">│</text><text class="breeze-start-airflow-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-start-airflow-line-10)">
 </text><text class="breeze-start-airflow-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-11)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="288.4" textLength="122" clip-path="url(#breeze-start-airflow-line-11)">--platform</text><text class="breeze-start-airflow-r1" x="768.6" y="288.4" textLength="671" clip-path="url(#breeze-start-airflow-line-11)">Platform&#160;for&#160;Airflow&#160;image.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-11)">│</text><text class="breeze-start-airflow-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-11)">
 </text><text class="breeze-start-airflow-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-12)">│</text><text class="breeze-start-airflow-r7" x="768.6" y="312.8" textLength="671" clip-path="url(#breeze-start-airflow-line-12)">(linux/amd64&#160;|&#160;linux/arm64&#160;|&#160;linux/x86_64&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-12)">│</text><text class="breeze-start-airflow-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-12)">
 </text><text class="breeze-start-airflow-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-13)">│</text><text class="breeze-start-airflow-r7" x="768.6" y="337.2" textLength="671" clip-path="url(#breeze-start-airflow-line-13)">linux/aarch64)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-13)">│</text><text class="breeze-start-airflow-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-13)">
@@ -531,57 +558,66 @@
 </text><text class="breeze-start-airflow-r5" x="0" y="1923.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-78)">│</text><text class="breeze-start-airflow-r5" x="256.2" y="1923.2" textLength="1159" clip-path="url(#breeze-start-airflow-line-78)">[default:&#160;selected]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1923.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-78)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-78)">
 </text><text class="breeze-start-airflow-r5" x="0" y="1947.6" textLength="1464" clip-path="url(#breeze-start-airflow-line-79)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="1947.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-79)">
 </text><text class="breeze-start-airflow-r5" x="0" y="1972" textLength="24.4" clip-path="url(#breeze-start-airflow-line-80)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="1972" textLength="512.4" clip-path="url(#breeze-start-airflow-line-80)">&#160;Installing&#160;packages&#160;after&#160;entering&#160;shell&#160;</text><text class="breeze-start-airflow-r5" x="536.8" y="1972" textLength="902.8" clip-path="url(#breeze-start-airflow-line-80)">──────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="1972" textLength="24.4" clip-path="url(#breeze-start-airflow-line-80)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-start-airflow-line-80)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-81)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1996.4" textLength="366" clip-path="url(#breeze-start-airflow-line-81)">--airflow-constraints-location</text><text class="breeze-start-airflow-r1" x="475.8" y="1996.4" textLength="902.8" clip-path="url(#breeze-start-airflow-line-81)">Location&#160;of&#160;airflow&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;local&#160;context&#160;file).</text><text class="breeze-start-airflow-r5" x="1451.8" y="1996.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-81)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-81)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-82)">│</text><text class="breeze-start-airflow-r7" x="475.8" y="2020.8" textLength="902.8" clip-path="url(#breeze-start-airflow-line-82)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2020.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-82)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-82)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-83)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2045.2" textLength="317.2" clip-path="url(#breeze-start-airflow-line-83)">--airflow-constraints-mode</text><text class="breeze-start-airflow-r1" x="475.8" y="2045.2" textLength="866.2" clip-path="url(#breeze-start-airflow-line-83)">Mode&#160;of&#160;constraints&#160;for&#160;Airflow&#160;for&#160;CI&#160;image&#160;building.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2045.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-83)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-83)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-84)">│</text><text class="breeze-start-airflow-r7" x="475.8" y="2069.6" textLength="866.2" clip-path="url(#breeze-start-airflow-line-84)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;constraints-no-providers)</text><text class="breeze-start-airflow-r5" x="1451.8" y="2069.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-84)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-84)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-start-airflow-line-85)">│</text><text class="breeze-start-airflow-r5" x="475.8" y="2094" textLength="866.2" clip-path="url(#breeze-start-airflow-line-85)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2094" textLength="12.2" clip-path="url(#breeze-start-airflow-line-85)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-start-airflow-line-85)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-86)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2118.4" textLength="378.2" clip-path="url(#breeze-start-airflow-line-86)">--airflow-constraints-reference</text><text class="breeze-start-airflow-r1" x="475.8" y="2118.4" textLength="963.8" clip-path="url(#breeze-start-airflow-line-86)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;airflow&#160;installation&#160;(used&#160;in&#160;calculated&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2118.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-86)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-86)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-87)">│</text><text class="breeze-start-airflow-r1" x="475.8" y="2142.8" textLength="963.8" clip-path="url(#breeze-start-airflow-line-87)">constraints&#160;URL).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2142.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-87)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-87)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-88)">│</text><text class="breeze-start-airflow-r7" x="475.8" y="2167.2" textLength="963.8" clip-path="url(#breeze-start-airflow-line-88)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2167.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-88)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-88)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2191.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-89)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2191.6" textLength="195.2" clip-path="url(#breeze-start-airflow-line-89)">--airflow-extras</text><text class="breeze-start-airflow-r1" x="475.8" y="2191.6" textLength="378.2" clip-path="url(#breeze-start-airflow-line-89)">Airflow&#160;extras&#160;to&#160;install&#160;when&#160;</text><text class="breeze-start-airflow-r4" x="854" y="2191.6" textLength="256.2" clip-path="url(#breeze-start-airflow-line-89)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="1110.2" y="2191.6" textLength="97.6" clip-path="url(#breeze-start-airflow-line-89)">&#160;is&#160;used</text><text class="breeze-start-airflow-r7" x="1220" y="2191.6" textLength="73.2" clip-path="url(#breeze-start-airflow-line-89)">(TEXT)</text><text class="breeze-start-airflow-r5" x="1451.8" y="2191.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-89)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2191.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-89)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2216" textLength="12.2" clip-path="url(#breeze-start-airflow-line-90)">│</text><text class="breeze-start-airflow-r5" x="475.8" y="2216" textLength="732" clip-path="url(#breeze-start-airflow-line-90)">[default:&#160;&quot;&quot;]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2216" textLength="12.2" clip-path="url(#breeze-start-airflow-line-90)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2216" textLength="12.2" clip-path="url(#breeze-start-airflow-line-90)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2240.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-91)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2240.4" textLength="341.6" clip-path="url(#breeze-start-airflow-line-91)">--clean-airflow-installation</text><text class="breeze-start-airflow-r1" x="475.8" y="2240.4" textLength="963.8" clip-path="url(#breeze-start-airflow-line-91)">Clean&#160;the&#160;airflow&#160;installation&#160;before&#160;installing&#160;version&#160;specified&#160;by&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2240.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-91)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2240.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-91)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2264.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-92)">│</text><text class="breeze-start-airflow-r4" x="475.8" y="2264.8" textLength="256.2" clip-path="url(#breeze-start-airflow-line-92)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="732" y="2264.8" textLength="707.6" clip-path="url(#breeze-start-airflow-line-92)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2264.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-92)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2264.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-92)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2289.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-93)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2289.2" textLength="341.6" clip-path="url(#breeze-start-airflow-line-93)">--install-selected-providers</text><text class="breeze-start-airflow-r1" x="475.8" y="2289.2" textLength="963.8" clip-path="url(#breeze-start-airflow-line-93)">Comma-separated&#160;list&#160;of&#160;providers&#160;selected&#160;to&#160;be&#160;installed&#160;(implies&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2289.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-93)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2289.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-93)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2313.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-94)">│</text><text class="breeze-start-airflow-r4" x="475.8" y="2313.6" textLength="353.8" clip-path="url(#breeze-start-airflow-line-94)">--use-distributions-from-dist</text><text class="breeze-start-airflow-r1" x="829.6" y="2313.6" textLength="610" clip-path="url(#breeze-start-airflow-line-94)">).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2313.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-94)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2313.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-94)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2338" textLength="12.2" clip-path="url(#breeze-start-airflow-line-95)">│</text><text class="breeze-start-airflow-r7" x="475.8" y="2338" textLength="963.8" clip-path="url(#breeze-start-airflow-line-95)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2338" textLength="12.2" clip-path="url(#breeze-start-airflow-line-95)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2338" textLength="12.2" clip-path="url(#breeze-start-airflow-line-95)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2362.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-96)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2362.4" textLength="256.2" clip-path="url(#breeze-start-airflow-line-96)">--distribution-format</text><text class="breeze-start-airflow-r1" x="475.8" y="2362.4" textLength="658.8" clip-path="url(#breeze-start-airflow-line-96)">Format&#160;of&#160;packages&#160;that&#160;should&#160;be&#160;installed&#160;from&#160;dist.</text><text class="breeze-start-airflow-r7" x="1146.8" y="2362.4" textLength="183" clip-path="url(#breeze-start-airflow-line-96)">(wheel&#160;|&#160;sdist)</text><text class="breeze-start-airflow-r5" x="1451.8" y="2362.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-96)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2362.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-96)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2386.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-97)">│</text><text class="breeze-start-airflow-r5" x="475.8" y="2386.8" textLength="658.8" clip-path="url(#breeze-start-airflow-line-97)">[default:&#160;wheel]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2386.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-97)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2386.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-97)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2411.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-98)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2411.2" textLength="390.4" clip-path="url(#breeze-start-airflow-line-98)">--providers-constraints-location</text><text class="breeze-start-airflow-r1" x="475.8" y="2411.2" textLength="927.2" clip-path="url(#breeze-start-airflow-line-98)">Location&#160;of&#160;providers&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;local&#160;context&#160;file).</text><text class="breeze-start-airflow-r5" x="1451.8" y="2411.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-98)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2411.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-98)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2435.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-99)">│</text><text class="breeze-start-airflow-r7" x="475.8" y="2435.6" textLength="927.2" clip-path="url(#breeze-start-airflow-line-99)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2435.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-99)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2435.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-99)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2460" textLength="12.2" clip-path="url(#breeze-start-airflow-line-100)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2460" textLength="341.6" clip-path="url(#breeze-start-airflow-line-100)">--providers-constraints-mode</text><text class="breeze-start-airflow-r1" x="475.8" y="2460" textLength="866.2" clip-path="url(#breeze-start-airflow-line-100)">Mode&#160;of&#160;constraints&#160;for&#160;Providers&#160;for&#160;CI&#160;image&#160;building.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2460" textLength="12.2" clip-path="url(#breeze-start-airflow-line-100)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2460" textLength="12.2" clip-path="url(#breeze-start-airflow-line-100)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2484.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-101)">│</text><text class="breeze-start-airflow-r7" x="475.8" y="2484.4" textLength="866.2" clip-path="url(#breeze-start-airflow-line-101)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;constraints-no-providers)</text><text class="breeze-start-airflow-r5" x="1451.8" y="2484.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-101)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2484.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-101)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2508.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-102)">│</text><text class="breeze-start-airflow-r5" x="475.8" y="2508.8" textLength="866.2" clip-path="url(#breeze-start-airflow-line-102)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2508.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-102)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2508.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-102)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2533.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-103)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2533.2" textLength="402.6" clip-path="url(#breeze-start-airflow-line-103)">--providers-constraints-reference</text><text class="breeze-start-airflow-r1" x="475.8" y="2533.2" textLength="963.8" clip-path="url(#breeze-start-airflow-line-103)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;providers&#160;installation&#160;(used&#160;in&#160;calculated&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2533.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-103)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2533.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-103)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2557.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-104)">│</text><text class="breeze-start-airflow-r1" x="475.8" y="2557.6" textLength="963.8" clip-path="url(#breeze-start-airflow-line-104)">constraints&#160;URL).&#160;Can&#160;be&#160;&#x27;default&#x27;&#160;in&#160;which&#160;case&#160;the&#160;default&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2557.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-104)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2557.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-104)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2582" textLength="12.2" clip-path="url(#breeze-start-airflow-line-105)">│</text><text class="breeze-start-airflow-r1" x="475.8" y="2582" textLength="963.8" clip-path="url(#breeze-start-airflow-line-105)">constraints-reference&#160;is&#160;used.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2582" textLength="12.2" clip-path="url(#breeze-start-airflow-line-105)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2582" textLength="12.2" clip-path="url(#breeze-start-airflow-line-105)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2606.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-106)">│</text><text class="breeze-start-airflow-r7" x="475.8" y="2606.4" textLength="963.8" clip-path="url(#breeze-start-airflow-line-106)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2606.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-106)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2606.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-106)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2630.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-107)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2630.8" textLength="341.6" clip-path="url(#breeze-start-airflow-line-107)">--providers-skip-constraints</text><text class="breeze-start-airflow-r1" x="475.8" y="2630.8" textLength="597.8" clip-path="url(#breeze-start-airflow-line-107)">Do&#160;not&#160;use&#160;constraints&#160;when&#160;installing&#160;providers.</text><text class="breeze-start-airflow-r5" x="1451.8" y="2630.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-107)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2630.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-107)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2655.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-108)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2655.2" textLength="256.2" clip-path="url(#breeze-start-airflow-line-108)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="475.8" y="2655.2" textLength="963.8" clip-path="url(#breeze-start-airflow-line-108)">Use&#160;(reinstall&#160;at&#160;entry)&#160;Airflow&#160;version&#160;from&#160;PyPI.&#160;It&#160;can&#160;also&#160;be&#160;version&#160;(to&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2655.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-108)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2655.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-108)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2679.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-109)">│</text><text class="breeze-start-airflow-r1" x="475.8" y="2679.6" textLength="963.8" clip-path="url(#breeze-start-airflow-line-109)">install&#160;from&#160;PyPI),&#160;`none`,&#160;`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder,&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2679.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-109)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2679.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-109)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2704" textLength="12.2" clip-path="url(#breeze-start-airflow-line-110)">│</text><text class="breeze-start-airflow-r1" x="475.8" y="2704" textLength="963.8" clip-path="url(#breeze-start-airflow-line-110)">or&#160;VCS&#160;URL&#160;to&#160;install&#160;from&#160;(https://pip.pypa.io/en/stable/topics/vcs-support/).</text><text class="breeze-start-airflow-r5" x="1451.8" y="2704" textLength="12.2" clip-path="url(#breeze-start-airflow-line-110)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2704" textLength="12.2" clip-path="url(#breeze-start-airflow-line-110)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2728.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-111)">│</text><text class="breeze-start-airflow-r1" x="475.8" y="2728.4" textLength="97.6" clip-path="url(#breeze-start-airflow-line-111)">Implies&#160;</text><text class="breeze-start-airflow-r4" x="573.4" y="2728.4" textLength="183" clip-path="url(#breeze-start-airflow-line-111)">--mount-sources</text><text class="breeze-start-airflow-r1" x="756.4" y="2728.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-111)">&#160;`remove`.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2728.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-111)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2728.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-111)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2752.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-112)">│</text><text class="breeze-start-airflow-r7" x="475.8" y="2752.8" textLength="963.8" clip-path="url(#breeze-start-airflow-line-112)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2752.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-112)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2752.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-112)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2777.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-113)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2777.2" textLength="244" clip-path="url(#breeze-start-airflow-line-113)">--allow-pre-releases</text><text class="breeze-start-airflow-r1" x="475.8" y="2777.2" textLength="963.8" clip-path="url(#breeze-start-airflow-line-113)">Allow&#160;pre-releases&#160;of&#160;Airflow,&#160;task-sdk&#160;and&#160;providers&#160;to&#160;be&#160;installed.&#160;Set&#160;to&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2777.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-113)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2777.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-113)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2801.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-114)">│</text><text class="breeze-start-airflow-r1" x="475.8" y="2801.6" textLength="427" clip-path="url(#breeze-start-airflow-line-114)">true&#160;automatically&#160;for&#160;pre-release&#160;</text><text class="breeze-start-airflow-r4" x="902.8" y="2801.6" textLength="256.2" clip-path="url(#breeze-start-airflow-line-114)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="1159" y="2801.6" textLength="280.6" clip-path="url(#breeze-start-airflow-line-114)">)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2801.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-114)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2801.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-114)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2826" textLength="12.2" clip-path="url(#breeze-start-airflow-line-115)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2826" textLength="353.8" clip-path="url(#breeze-start-airflow-line-115)">--use-distributions-from-dist</text><text class="breeze-start-airflow-r1" x="475.8" y="2826" textLength="402.6" clip-path="url(#breeze-start-airflow-line-115)">Install&#160;all&#160;found&#160;distributions&#160;(</text><text class="breeze-start-airflow-r4" x="878.4" y="2826" textLength="256.2" clip-path="url(#breeze-start-airflow-line-115)">--distribution-format</text><text class="breeze-start-airflow-r1" x="1134.6" y="2826" textLength="305" clip-path="url(#breeze-start-airflow-line-115)">&#160;determines&#160;type)&#160;from&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2826" textLength="12.2" clip-path="url(#breeze-start-airflow-line-115)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2826" textLength="12.2" clip-path="url(#breeze-start-airflow-line-115)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2850.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-116)">│</text><text class="breeze-start-airflow-r1" x="475.8" y="2850.4" textLength="963.8" clip-path="url(#breeze-start-airflow-line-116)">&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2850.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-116)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2850.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-116)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2874.8" textLength="1464" clip-path="url(#breeze-start-airflow-line-117)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="2874.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-117)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2899.2" textLength="24.4" clip-path="url(#breeze-start-airflow-line-118)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="2899.2" textLength="183" clip-path="url(#breeze-start-airflow-line-118)">&#160;Other&#160;options&#160;</text><text class="breeze-start-airflow-r5" x="207.4" y="2899.2" textLength="1232.2" clip-path="url(#breeze-start-airflow-line-118)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="2899.2" textLength="24.4" clip-path="url(#breeze-start-airflow-line-118)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="2899.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-118)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2923.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-119)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2923.6" textLength="256.2" clip-path="url(#breeze-start-airflow-line-119)">--forward-credentials</text><text class="breeze-start-airflow-r6" x="305" y="2923.6" textLength="24.4" clip-path="url(#breeze-start-airflow-line-119)">-f</text><text class="breeze-start-airflow-r1" x="353.8" y="2923.6" textLength="634.4" clip-path="url(#breeze-start-airflow-line-119)">Forward&#160;local&#160;credentials&#160;to&#160;container&#160;when&#160;running.</text><text class="breeze-start-airflow-r5" x="1451.8" y="2923.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-119)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2923.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-119)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2948" textLength="1464" clip-path="url(#breeze-start-airflow-line-120)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="2948" textLength="12.2" clip-path="url(#breeze-start-airflow-line-120)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2972.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-121)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="2972.4" textLength="195.2" clip-path="url(#breeze-start-airflow-line-121)">&#160;Common&#160;options&#160;</text><text class="breeze-start-airflow-r5" x="219.6" y="2972.4" textLength="1220" clip-path="url(#breeze-start-airflow-line-121)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="2972.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-121)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="2972.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-121)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2996.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-122)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2996.8" textLength="97.6" clip-path="url(#breeze-start-airflow-line-122)">--answer</text><text class="breeze-start-airflow-r6" x="719.8" y="2996.8" textLength="24.4" clip-path="url(#breeze-start-airflow-line-122)">-a</text><text class="breeze-start-airflow-r1" x="768.6" y="2996.8" textLength="353.8" clip-path="url(#breeze-start-airflow-line-122)">Force&#160;answer&#160;to&#160;questions.&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2996.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-122)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2996.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-122)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3021.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-123)">│</text><text class="breeze-start-airflow-r7" x="768.6" y="3021.2" textLength="353.8" clip-path="url(#breeze-start-airflow-line-123)">(y&#160;|&#160;n&#160;|&#160;q&#160;|&#160;yes&#160;|&#160;no&#160;|&#160;quit)</text><text class="breeze-start-airflow-r5" x="1451.8" y="3021.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-123)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3021.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-123)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3045.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-124)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3045.6" textLength="109.8" clip-path="url(#breeze-start-airflow-line-124)">--dry-run</text><text class="breeze-start-airflow-r6" x="719.8" y="3045.6" textLength="24.4" clip-path="url(#breeze-start-airflow-line-124)">-D</text><text class="breeze-start-airflow-r1" x="768.6" y="3045.6" textLength="671" clip-path="url(#breeze-start-airflow-line-124)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3045.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-124)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3045.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-124)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3070" textLength="12.2" clip-path="url(#breeze-start-airflow-line-125)">│</text><text class="breeze-start-airflow-r1" x="768.6" y="3070" textLength="671" clip-path="url(#breeze-start-airflow-line-125)">executed.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3070" textLength="12.2" clip-path="url(#breeze-start-airflow-line-125)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3070" textLength="12.2" clip-path="url(#breeze-start-airflow-line-125)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3094.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-126)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3094.4" textLength="414.8" clip-path="url(#breeze-start-airflow-line-126)">--install-airflow-with-constraints</text><text class="breeze-start-airflow-r1" x="439.2" y="3094.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-126)">/</text><text class="breeze-start-airflow-r4" x="451.4" y="3094.4" textLength="244" clip-path="url(#breeze-start-airflow-line-126)">--no-install-airflow</text><text class="breeze-start-airflow-r1" x="768.6" y="3094.4" textLength="671" clip-path="url(#breeze-start-airflow-line-126)">Install&#160;airflow&#160;in&#160;a&#160;separate&#160;step,&#160;with&#160;constraints&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3094.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-126)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3094.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-126)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3118.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-127)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3118.8" textLength="207.4" clip-path="url(#breeze-start-airflow-line-127)">-with-constraints</text><text class="breeze-start-airflow-r1" x="768.6" y="3118.8" textLength="671" clip-path="url(#breeze-start-airflow-line-127)">determined&#160;from&#160;package&#160;or&#160;airflow&#160;version.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3118.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-127)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3118.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-127)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3143.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-128)">│</text><text class="breeze-start-airflow-r5" x="768.6" y="3143.2" textLength="671" clip-path="url(#breeze-start-airflow-line-128)">[default:&#160;install-airflow-with-constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3143.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-128)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3143.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-128)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3167.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-129)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3167.6" textLength="109.8" clip-path="url(#breeze-start-airflow-line-129)">--verbose</text><text class="breeze-start-airflow-r6" x="719.8" y="3167.6" textLength="24.4" clip-path="url(#breeze-start-airflow-line-129)">-v</text><text class="breeze-start-airflow-r1" x="768.6" y="3167.6" textLength="585.6" clip-path="url(#breeze-start-airflow-line-129)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-start-airflow-r5" x="1451.8" y="3167.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-129)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3167.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-129)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3192" textLength="12.2" clip-path="url(#breeze-start-airflow-line-130)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3192" textLength="73.2" clip-path="url(#breeze-start-airflow-line-130)">--help</text><text class="breeze-start-airflow-r6" x="719.8" y="3192" textLength="24.4" clip-path="url(#breeze-start-airflow-line-130)">-h</text><text class="breeze-start-airflow-r1" x="768.6" y="3192" textLength="329.4" clip-path="url(#breeze-start-airflow-line-130)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-start-airflow-r5" x="1451.8" y="3192" textLength="12.2" clip-path="url(#breeze-start-airflow-line-130)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3192" textLength="12.2" clip-path="url(#breeze-start-airflow-line-130)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-81)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1996.4" textLength="366" clip-path="url(#breeze-start-airflow-line-81)">--airflow-constraints-location</text><text class="breeze-start-airflow-r1" x="756.4" y="1996.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-81)">Location&#160;of&#160;airflow&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1996.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-81)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-81)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-82)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2020.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-82)">local&#160;context&#160;file).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2020.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-82)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-82)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-83)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2045.2" textLength="683.2" clip-path="url(#breeze-start-airflow-line-83)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2045.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-83)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-83)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-84)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2069.6" textLength="317.2" clip-path="url(#breeze-start-airflow-line-84)">--airflow-constraints-mode</text><text class="breeze-start-airflow-r1" x="756.4" y="2069.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-84)">Mode&#160;of&#160;constraints&#160;for&#160;Airflow&#160;for&#160;CI&#160;image&#160;building.&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2069.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-84)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-84)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-start-airflow-line-85)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2094" textLength="683.2" clip-path="url(#breeze-start-airflow-line-85)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2094" textLength="12.2" clip-path="url(#breeze-start-airflow-line-85)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-start-airflow-line-85)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-86)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2118.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-86)">constraints-no-providers)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2118.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-86)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-86)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-87)">│</text><text class="breeze-start-airflow-r5" x="756.4" y="2142.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-87)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2142.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-87)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-87)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-88)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2167.2" textLength="378.2" clip-path="url(#breeze-start-airflow-line-88)">--airflow-constraints-reference</text><text class="breeze-start-airflow-r1" x="756.4" y="2167.2" textLength="683.2" clip-path="url(#breeze-start-airflow-line-88)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;airflow&#160;installation&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2167.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-88)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-88)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2191.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-89)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2191.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-89)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2191.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-89)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2191.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-89)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2216" textLength="12.2" clip-path="url(#breeze-start-airflow-line-90)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2216" textLength="683.2" clip-path="url(#breeze-start-airflow-line-90)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2216" textLength="12.2" clip-path="url(#breeze-start-airflow-line-90)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2216" textLength="12.2" clip-path="url(#breeze-start-airflow-line-90)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2240.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-91)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2240.4" textLength="195.2" clip-path="url(#breeze-start-airflow-line-91)">--airflow-extras</text><text class="breeze-start-airflow-r1" x="756.4" y="2240.4" textLength="378.2" clip-path="url(#breeze-start-airflow-line-91)">Airflow&#160;extras&#160;to&#160;install&#160;when&#160;</text><text class="breeze-start-airflow-r4" x="1134.6" y="2240.4" textLength="256.2" clip-path="url(#breeze-start-airflow-line-91)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="1390.8" y="2240.4" textLength="48.8" clip-path="url(#breeze-start-airflow-line-91)">&#160;is&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2240.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-91)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2240.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-91)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2264.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-92)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2264.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-92)">used&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2264.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-92)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2264.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-92)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2289.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-93)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2289.2" textLength="683.2" clip-path="url(#breeze-start-airflow-line-93)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2289.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-93)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2289.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-93)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2313.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-94)">│</text><text class="breeze-start-airflow-r5" x="756.4" y="2313.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-94)">[default:&#160;&quot;&quot;]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2313.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-94)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2313.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-94)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2338" textLength="12.2" clip-path="url(#breeze-start-airflow-line-95)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2338" textLength="341.6" clip-path="url(#breeze-start-airflow-line-95)">--clean-airflow-installation</text><text class="breeze-start-airflow-r1" x="756.4" y="2338" textLength="683.2" clip-path="url(#breeze-start-airflow-line-95)">Clean&#160;the&#160;airflow&#160;installation&#160;before&#160;installing&#160;version</text><text class="breeze-start-airflow-r5" x="1451.8" y="2338" textLength="12.2" clip-path="url(#breeze-start-airflow-line-95)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2338" textLength="12.2" clip-path="url(#breeze-start-airflow-line-95)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2362.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-96)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2362.4" textLength="158.6" clip-path="url(#breeze-start-airflow-line-96)">specified&#160;by&#160;</text><text class="breeze-start-airflow-r4" x="915" y="2362.4" textLength="256.2" clip-path="url(#breeze-start-airflow-line-96)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="1171.2" y="2362.4" textLength="268.4" clip-path="url(#breeze-start-airflow-line-96)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2362.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-96)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2362.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-96)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2386.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-97)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2386.8" textLength="414.8" clip-path="url(#breeze-start-airflow-line-97)">--install-airflow-with-constraints</text><text class="breeze-start-airflow-r1" x="439.2" y="2386.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-97)">/</text><text class="breeze-start-airflow-r4" x="451.4" y="2386.8" textLength="256.2" clip-path="url(#breeze-start-airflow-line-97)">--no-install-airflow-</text><text class="breeze-start-airflow-r1" x="756.4" y="2386.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-97)">Install&#160;airflow&#160;in&#160;a&#160;separate&#160;step,&#160;with&#160;constraints&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2386.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-97)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2386.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-97)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2411.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-98)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2411.2" textLength="195.2" clip-path="url(#breeze-start-airflow-line-98)">with-constraints</text><text class="breeze-start-airflow-r1" x="756.4" y="2411.2" textLength="683.2" clip-path="url(#breeze-start-airflow-line-98)">determined&#160;from&#160;package&#160;or&#160;airflow&#160;version.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2411.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-98)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2411.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-98)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2435.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-99)">│</text><text class="breeze-start-airflow-r5" x="756.4" y="2435.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-99)">[default:&#160;install-airflow-with-constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2435.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-99)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2435.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-99)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2460" textLength="12.2" clip-path="url(#breeze-start-airflow-line-100)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2460" textLength="341.6" clip-path="url(#breeze-start-airflow-line-100)">--install-selected-providers</text><text class="breeze-start-airflow-r1" x="756.4" y="2460" textLength="683.2" clip-path="url(#breeze-start-airflow-line-100)">Comma-separated&#160;list&#160;of&#160;providers&#160;selected&#160;to&#160;be&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2460" textLength="12.2" clip-path="url(#breeze-start-airflow-line-100)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2460" textLength="12.2" clip-path="url(#breeze-start-airflow-line-100)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2484.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-101)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2484.4" textLength="231.8" clip-path="url(#breeze-start-airflow-line-101)">installed&#160;(implies&#160;</text><text class="breeze-start-airflow-r4" x="988.2" y="2484.4" textLength="353.8" clip-path="url(#breeze-start-airflow-line-101)">--use-distributions-from-dist</text><text class="breeze-start-airflow-r1" x="1342" y="2484.4" textLength="97.6" clip-path="url(#breeze-start-airflow-line-101)">).&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2484.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-101)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2484.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-101)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2508.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-102)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2508.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-102)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2508.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-102)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2508.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-102)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2533.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-103)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2533.2" textLength="256.2" clip-path="url(#breeze-start-airflow-line-103)">--distribution-format</text><text class="breeze-start-airflow-r1" x="756.4" y="2533.2" textLength="658.8" clip-path="url(#breeze-start-airflow-line-103)">Format&#160;of&#160;packages&#160;that&#160;should&#160;be&#160;installed&#160;from&#160;dist.</text><text class="breeze-start-airflow-r5" x="1451.8" y="2533.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-103)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2533.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-103)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2557.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-104)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2557.6" textLength="658.8" clip-path="url(#breeze-start-airflow-line-104)">(wheel&#160;|&#160;sdist)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2557.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-104)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2557.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-104)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2582" textLength="12.2" clip-path="url(#breeze-start-airflow-line-105)">│</text><text class="breeze-start-airflow-r5" x="756.4" y="2582" textLength="658.8" clip-path="url(#breeze-start-airflow-line-105)">[default:&#160;wheel]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2582" textLength="12.2" clip-path="url(#breeze-start-airflow-line-105)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2582" textLength="12.2" clip-path="url(#breeze-start-airflow-line-105)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2606.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-106)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2606.4" textLength="390.4" clip-path="url(#breeze-start-airflow-line-106)">--providers-constraints-location</text><text class="breeze-start-airflow-r1" x="756.4" y="2606.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-106)">Location&#160;of&#160;providers&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2606.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-106)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2606.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-106)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2630.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-107)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2630.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-107)">local&#160;context&#160;file).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2630.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-107)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2630.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-107)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2655.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-108)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2655.2" textLength="683.2" clip-path="url(#breeze-start-airflow-line-108)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2655.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-108)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2655.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-108)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2679.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-109)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2679.6" textLength="341.6" clip-path="url(#breeze-start-airflow-line-109)">--providers-constraints-mode</text><text class="breeze-start-airflow-r1" x="756.4" y="2679.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-109)">Mode&#160;of&#160;constraints&#160;for&#160;Providers&#160;for&#160;CI&#160;image&#160;building.</text><text class="breeze-start-airflow-r5" x="1451.8" y="2679.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-109)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2679.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-109)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2704" textLength="12.2" clip-path="url(#breeze-start-airflow-line-110)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2704" textLength="683.2" clip-path="url(#breeze-start-airflow-line-110)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2704" textLength="12.2" clip-path="url(#breeze-start-airflow-line-110)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2704" textLength="12.2" clip-path="url(#breeze-start-airflow-line-110)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2728.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-111)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2728.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-111)">constraints-no-providers)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2728.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-111)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2728.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-111)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2752.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-112)">│</text><text class="breeze-start-airflow-r5" x="756.4" y="2752.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-112)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2752.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-112)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2752.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-112)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2777.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-113)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2777.2" textLength="402.6" clip-path="url(#breeze-start-airflow-line-113)">--providers-constraints-reference</text><text class="breeze-start-airflow-r1" x="756.4" y="2777.2" textLength="683.2" clip-path="url(#breeze-start-airflow-line-113)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;providers&#160;installation&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2777.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-113)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2777.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-113)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2801.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-114)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2801.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-114)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;Can&#160;be&#160;&#x27;default&#x27;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2801.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-114)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2801.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-114)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2826" textLength="12.2" clip-path="url(#breeze-start-airflow-line-115)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2826" textLength="683.2" clip-path="url(#breeze-start-airflow-line-115)">in&#160;which&#160;case&#160;the&#160;default&#160;constraints-reference&#160;is&#160;used.</text><text class="breeze-start-airflow-r5" x="1451.8" y="2826" textLength="12.2" clip-path="url(#breeze-start-airflow-line-115)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2826" textLength="12.2" clip-path="url(#breeze-start-airflow-line-115)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2850.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-116)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2850.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-116)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2850.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-116)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2850.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-116)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2874.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-117)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2874.8" textLength="341.6" clip-path="url(#breeze-start-airflow-line-117)">--providers-skip-constraints</text><text class="breeze-start-airflow-r1" x="756.4" y="2874.8" textLength="597.8" clip-path="url(#breeze-start-airflow-line-117)">Do&#160;not&#160;use&#160;constraints&#160;when&#160;installing&#160;providers.</text><text class="breeze-start-airflow-r5" x="1451.8" y="2874.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-117)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2874.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-117)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2899.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-118)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2899.2" textLength="256.2" clip-path="url(#breeze-start-airflow-line-118)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="756.4" y="2899.2" textLength="683.2" clip-path="url(#breeze-start-airflow-line-118)">Use&#160;(reinstall&#160;at&#160;entry)&#160;Airflow&#160;version&#160;from&#160;PyPI.&#160;It&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2899.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-118)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2899.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-118)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2923.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-119)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2923.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-119)">can&#160;also&#160;be&#160;version&#160;(to&#160;install&#160;from&#160;PyPI),&#160;`none`,&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2923.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-119)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2923.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-119)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2948" textLength="12.2" clip-path="url(#breeze-start-airflow-line-120)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2948" textLength="683.2" clip-path="url(#breeze-start-airflow-line-120)">`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder,&#160;or&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2948" textLength="12.2" clip-path="url(#breeze-start-airflow-line-120)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2948" textLength="12.2" clip-path="url(#breeze-start-airflow-line-120)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2972.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-121)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2972.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-121)">VCS&#160;URL&#160;to&#160;install&#160;from&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2972.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-121)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2972.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-121)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2996.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-122)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2996.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-122)">(https://pip.pypa.io/en/stable/topics/vcs-support/).&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2996.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-122)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2996.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-122)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3021.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-123)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="3021.2" textLength="97.6" clip-path="url(#breeze-start-airflow-line-123)">Implies&#160;</text><text class="breeze-start-airflow-r4" x="854" y="3021.2" textLength="183" clip-path="url(#breeze-start-airflow-line-123)">--mount-sources</text><text class="breeze-start-airflow-r1" x="1037" y="3021.2" textLength="402.6" clip-path="url(#breeze-start-airflow-line-123)">&#160;`remove`.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3021.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-123)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3021.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-123)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3045.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-124)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="3045.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-124)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3045.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-124)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3045.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-124)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3070" textLength="12.2" clip-path="url(#breeze-start-airflow-line-125)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3070" textLength="244" clip-path="url(#breeze-start-airflow-line-125)">--allow-pre-releases</text><text class="breeze-start-airflow-r1" x="756.4" y="3070" textLength="683.2" clip-path="url(#breeze-start-airflow-line-125)">Allow&#160;pre-releases&#160;of&#160;Airflow,&#160;task-sdk&#160;and&#160;providers&#160;to</text><text class="breeze-start-airflow-r5" x="1451.8" y="3070" textLength="12.2" clip-path="url(#breeze-start-airflow-line-125)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3070" textLength="12.2" clip-path="url(#breeze-start-airflow-line-125)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3094.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-126)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="3094.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-126)">be&#160;installed.&#160;Set&#160;to&#160;true&#160;automatically&#160;for&#160;pre-release&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3094.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-126)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3094.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-126)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3118.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-127)">│</text><text class="breeze-start-airflow-r4" x="756.4" y="3118.8" textLength="256.2" clip-path="url(#breeze-start-airflow-line-127)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="1012.6" y="3118.8" textLength="427" clip-path="url(#breeze-start-airflow-line-127)">)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3118.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-127)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3118.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-127)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3143.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-128)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3143.2" textLength="353.8" clip-path="url(#breeze-start-airflow-line-128)">--use-distributions-from-dist</text><text class="breeze-start-airflow-r1" x="756.4" y="3143.2" textLength="402.6" clip-path="url(#breeze-start-airflow-line-128)">Install&#160;all&#160;found&#160;distributions&#160;(</text><text class="breeze-start-airflow-r4" x="1159" y="3143.2" textLength="256.2" clip-path="url(#breeze-start-airflow-line-128)">--distribution-format</text><text class="breeze-start-airflow-r5" x="1451.8" y="3143.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-128)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3143.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-128)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3167.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-129)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="3167.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-129)">determines&#160;type)&#160;from&#160;&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3167.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-129)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3167.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-129)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3192" textLength="12.2" clip-path="url(#breeze-start-airflow-line-130)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="3192" textLength="683.2" clip-path="url(#breeze-start-airflow-line-130)">breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3192" textLength="12.2" clip-path="url(#breeze-start-airflow-line-130)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3192" textLength="12.2" clip-path="url(#breeze-start-airflow-line-130)">
 </text><text class="breeze-start-airflow-r5" x="0" y="3216.4" textLength="1464" clip-path="url(#breeze-start-airflow-line-131)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="3216.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-131)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3240.8" textLength="24.4" clip-path="url(#breeze-start-airflow-line-132)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="3240.8" textLength="183" clip-path="url(#breeze-start-airflow-line-132)">&#160;Other&#160;options&#160;</text><text class="breeze-start-airflow-r5" x="207.4" y="3240.8" textLength="1232.2" clip-path="url(#breeze-start-airflow-line-132)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="3240.8" textLength="24.4" clip-path="url(#breeze-start-airflow-line-132)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="3240.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-132)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3265.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-133)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3265.2" textLength="256.2" clip-path="url(#breeze-start-airflow-line-133)">--forward-credentials</text><text class="breeze-start-airflow-r6" x="305" y="3265.2" textLength="24.4" clip-path="url(#breeze-start-airflow-line-133)">-f</text><text class="breeze-start-airflow-r1" x="353.8" y="3265.2" textLength="634.4" clip-path="url(#breeze-start-airflow-line-133)">Forward&#160;local&#160;credentials&#160;to&#160;container&#160;when&#160;running.</text><text class="breeze-start-airflow-r5" x="1451.8" y="3265.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-133)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3265.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-133)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3289.6" textLength="1464" clip-path="url(#breeze-start-airflow-line-134)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="3289.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-134)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3314" textLength="24.4" clip-path="url(#breeze-start-airflow-line-135)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="3314" textLength="195.2" clip-path="url(#breeze-start-airflow-line-135)">&#160;Common&#160;options&#160;</text><text class="breeze-start-airflow-r5" x="219.6" y="3314" textLength="1220" clip-path="url(#breeze-start-airflow-line-135)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="3314" textLength="24.4" clip-path="url(#breeze-start-airflow-line-135)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="3314" textLength="12.2" clip-path="url(#breeze-start-airflow-line-135)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3338.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-136)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3338.4" textLength="97.6" clip-path="url(#breeze-start-airflow-line-136)">--answer</text><text class="breeze-start-airflow-r6" x="158.6" y="3338.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-136)">-a</text><text class="breeze-start-airflow-r1" x="207.4" y="3338.4" textLength="317.2" clip-path="url(#breeze-start-airflow-line-136)">Force&#160;answer&#160;to&#160;questions.</text><text class="breeze-start-airflow-r7" x="536.8" y="3338.4" textLength="353.8" clip-path="url(#breeze-start-airflow-line-136)">(y&#160;|&#160;n&#160;|&#160;q&#160;|&#160;yes&#160;|&#160;no&#160;|&#160;quit)</text><text class="breeze-start-airflow-r5" x="1451.8" y="3338.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-136)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3338.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-136)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3362.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-137)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3362.8" textLength="109.8" clip-path="url(#breeze-start-airflow-line-137)">--dry-run</text><text class="breeze-start-airflow-r6" x="158.6" y="3362.8" textLength="24.4" clip-path="url(#breeze-start-airflow-line-137)">-D</text><text class="breeze-start-airflow-r1" x="207.4" y="3362.8" textLength="719.8" clip-path="url(#breeze-start-airflow-line-137)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-start-airflow-r5" x="1451.8" y="3362.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-137)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3362.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-137)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3387.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-138)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3387.2" textLength="109.8" clip-path="url(#breeze-start-airflow-line-138)">--verbose</text><text class="breeze-start-airflow-r6" x="158.6" y="3387.2" textLength="24.4" clip-path="url(#breeze-start-airflow-line-138)">-v</text><text class="breeze-start-airflow-r1" x="207.4" y="3387.2" textLength="585.6" clip-path="url(#breeze-start-airflow-line-138)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-start-airflow-r5" x="1451.8" y="3387.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-138)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3387.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-138)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3411.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-139)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3411.6" textLength="73.2" clip-path="url(#breeze-start-airflow-line-139)">--help</text><text class="breeze-start-airflow-r6" x="158.6" y="3411.6" textLength="24.4" clip-path="url(#breeze-start-airflow-line-139)">-h</text><text class="breeze-start-airflow-r1" x="207.4" y="3411.6" textLength="329.4" clip-path="url(#breeze-start-airflow-line-139)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-start-airflow-r5" x="1451.8" y="3411.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-139)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3411.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-139)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3436" textLength="1464" clip-path="url(#breeze-start-airflow-line-140)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="3436" textLength="12.2" clip-path="url(#breeze-start-airflow-line-140)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_start-airflow.txt b/dev/breeze/doc/images/output_start-airflow.txt
index bd5fbeafe8e04..a210aa26ef03c 100644
--- a/dev/breeze/doc/images/output_start-airflow.txt
+++ b/dev/breeze/doc/images/output_start-airflow.txt
@@ -1 +1 @@
-055a450825e9a8ff29477615629cffc2
+9610c4e7624dd08101801d61232762f6
diff --git a/dev/breeze/doc/images/output_testing_airflow-ctl-tests.svg b/dev/breeze/doc/images/output_testing_airflow-ctl-tests.svg
index 67f5620e4ed19..ae2181346697d 100644
--- a/dev/breeze/doc/images/output_testing_airflow-ctl-tests.svg
+++ b/dev/breeze/doc/images/output_testing_airflow-ctl-tests.svg
@@ -108,8 +108,8 @@
 </text><text class="breeze-testing-airflow-ctl-tests-r1" x="12.2" y="93.2" textLength="841.8" clip-path="url(#breeze-testing-airflow-ctl-tests-line-3)">Run&#160;airflow-ctl&#160;tests&#160;-&#160;all&#160;Airflow&#160;CTL&#160;tests&#160;are&#160;non-DB&#160;bound&#160;tests.</text><text class="breeze-testing-airflow-ctl-tests-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-testing-airflow-ctl-tests-line-3)">
 </text><text class="breeze-testing-airflow-ctl-tests-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-testing-airflow-ctl-tests-line-4)">
 </text><text class="breeze-testing-airflow-ctl-tests-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-testing-airflow-ctl-tests-line-5)">╭─</text><text class="breeze-testing-airflow-ctl-tests-r5" x="24.4" y="142" textLength="219.6" clip-path="url(#breeze-testing-airflow-ctl-tests-line-5)">&#160;Test&#160;environment&#160;</text><text class="breeze-testing-airflow-ctl-tests-r5" x="244" y="142" textLength="1195.6" clip-path="url(#breeze-testing-airflow-ctl-tests-line-5)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-testing-airflow-ctl-tests-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-testing-airflow-ctl-tests-line-5)">─╮</text><text class="breeze-testing-airflow-ctl-tests-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-testing-airflow-ctl-tests-line-5)">
-</text><text class="breeze-testing-airflow-ctl-tests-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-testing-airflow-ctl-tests-line-6)">│</text><text class="breeze-testing-airflow-ctl-tests-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-testing-airflow-ctl-tests-line-6)">--python</text><text class="breeze-testing-airflow-ctl-tests-r6" x="207.4" y="166.4" textLength="24.4" clip-path="url(#breeze-testing-airflow-ctl-tests-line-6)">-p</text><text class="breeze-testing-airflow-ctl-tests-r1" x="256.2" y="166.4" textLength="732" clip-path="url(#breeze-testing-airflow-ctl-tests-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-testing-airflow-ctl-tests-r7" x="1000.4" y="166.4" textLength="341.6" clip-path="url(#breeze-testing-airflow-ctl-tests-line-6)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-testing-airflow-ctl-tests-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-testing-airflow-ctl-tests-line-6)">│</text><text class="breeze-testing-airflow-ctl-tests-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-testing-airflow-ctl-tests-line-6)">
-</text><text class="breeze-testing-airflow-ctl-tests-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-testing-airflow-ctl-tests-line-7)">│</text><text class="breeze-testing-airflow-ctl-tests-r5" x="256.2" y="190.8" textLength="732" clip-path="url(#breeze-testing-airflow-ctl-tests-line-7)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-airflow-ctl-tests-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-testing-airflow-ctl-tests-line-7)">│</text><text class="breeze-testing-airflow-ctl-tests-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-testing-airflow-ctl-tests-line-7)">
+</text><text class="breeze-testing-airflow-ctl-tests-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-testing-airflow-ctl-tests-line-6)">│</text><text class="breeze-testing-airflow-ctl-tests-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-testing-airflow-ctl-tests-line-6)">--python</text><text class="breeze-testing-airflow-ctl-tests-r6" x="207.4" y="166.4" textLength="24.4" clip-path="url(#breeze-testing-airflow-ctl-tests-line-6)">-p</text><text class="breeze-testing-airflow-ctl-tests-r1" x="256.2" y="166.4" textLength="732" clip-path="url(#breeze-testing-airflow-ctl-tests-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-testing-airflow-ctl-tests-r7" x="1000.4" y="166.4" textLength="268.4" clip-path="url(#breeze-testing-airflow-ctl-tests-line-6)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-testing-airflow-ctl-tests-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-testing-airflow-ctl-tests-line-6)">│</text><text class="breeze-testing-airflow-ctl-tests-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-testing-airflow-ctl-tests-line-6)">
+</text><text class="breeze-testing-airflow-ctl-tests-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-testing-airflow-ctl-tests-line-7)">│</text><text class="breeze-testing-airflow-ctl-tests-r5" x="256.2" y="190.8" textLength="732" clip-path="url(#breeze-testing-airflow-ctl-tests-line-7)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-airflow-ctl-tests-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-testing-airflow-ctl-tests-line-7)">│</text><text class="breeze-testing-airflow-ctl-tests-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-testing-airflow-ctl-tests-line-7)">
 </text><text class="breeze-testing-airflow-ctl-tests-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-testing-airflow-ctl-tests-line-8)">│</text><text class="breeze-testing-airflow-ctl-tests-r4" x="24.4" y="215.2" textLength="158.6" clip-path="url(#breeze-testing-airflow-ctl-tests-line-8)">--parallelism</text><text class="breeze-testing-airflow-ctl-tests-r1" x="256.2" y="215.2" textLength="915" clip-path="url(#breeze-testing-airflow-ctl-tests-line-8)">Maximum&#160;number&#160;of&#160;processes&#160;to&#160;use&#160;while&#160;running&#160;the&#160;operation&#160;in&#160;parallel.</text><text class="breeze-testing-airflow-ctl-tests-r7" x="1183.4" y="215.2" textLength="183" clip-path="url(#breeze-testing-airflow-ctl-tests-line-8)">(INTEGER&#160;RANGE)</text><text class="breeze-testing-airflow-ctl-tests-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-testing-airflow-ctl-tests-line-8)">│</text><text class="breeze-testing-airflow-ctl-tests-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-testing-airflow-ctl-tests-line-8)">
 </text><text class="breeze-testing-airflow-ctl-tests-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-testing-airflow-ctl-tests-line-9)">│</text><text class="breeze-testing-airflow-ctl-tests-r5" x="256.2" y="239.6" textLength="915" clip-path="url(#breeze-testing-airflow-ctl-tests-line-9)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-airflow-ctl-tests-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-testing-airflow-ctl-tests-line-9)">│</text><text class="breeze-testing-airflow-ctl-tests-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-testing-airflow-ctl-tests-line-9)">
 </text><text class="breeze-testing-airflow-ctl-tests-r5" x="0" y="264" textLength="1464" clip-path="url(#breeze-testing-airflow-ctl-tests-line-10)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-airflow-ctl-tests-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-testing-airflow-ctl-tests-line-10)">
diff --git a/dev/breeze/doc/images/output_testing_airflow-ctl-tests.txt b/dev/breeze/doc/images/output_testing_airflow-ctl-tests.txt
index bfce27953dfbc..3d97b4b676ed0 100644
--- a/dev/breeze/doc/images/output_testing_airflow-ctl-tests.txt
+++ b/dev/breeze/doc/images/output_testing_airflow-ctl-tests.txt
@@ -1 +1 @@
-ded529045d0ce777d7d8664efc7856b4
+7950b438b01dc4d75116ef332c7f2812
diff --git a/dev/breeze/doc/images/output_testing_core-integration-tests.svg b/dev/breeze/doc/images/output_testing_core-integration-tests.svg
index 6f8f1fa475ce5..7be29c9cae0d4 100644
--- a/dev/breeze/doc/images/output_testing_core-integration-tests.svg
+++ b/dev/breeze/doc/images/output_testing_core-integration-tests.svg
@@ -224,8 +224,8 @@
 </text><text class="breeze-testing-core-integration-tests-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-20)">│</text><text class="breeze-testing-core-integration-tests-r5" x="610" y="508" textLength="829.6" clip-path="url(#breeze-testing-core-integration-tests-line-20)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-integration-tests-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-20)">│</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-20)">
 </text><text class="breeze-testing-core-integration-tests-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-21)">│</text><text class="breeze-testing-core-integration-tests-r4" x="24.4" y="532.4" textLength="183" clip-path="url(#breeze-testing-core-integration-tests-line-21)">--no-db-cleanup</text><text class="breeze-testing-core-integration-tests-r1" x="610" y="532.4" textLength="597.8" clip-path="url(#breeze-testing-core-integration-tests-line-21)">Do&#160;not&#160;clear&#160;the&#160;database&#160;before&#160;each&#160;test&#160;module</text><text class="breeze-testing-core-integration-tests-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-21)">│</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-21)">
 </text><text class="breeze-testing-core-integration-tests-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-22)">│</text><text class="breeze-testing-core-integration-tests-r4" x="24.4" y="556.8" textLength="97.6" clip-path="url(#breeze-testing-core-integration-tests-line-22)">--python</text><text class="breeze-testing-core-integration-tests-r7" x="561.2" y="556.8" textLength="24.4" clip-path="url(#breeze-testing-core-integration-tests-line-22)">-p</text><text class="breeze-testing-core-integration-tests-r1" x="610" y="556.8" textLength="732" clip-path="url(#breeze-testing-core-integration-tests-line-22)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-testing-core-integration-tests-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-22)">│</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-22)">
-</text><text class="breeze-testing-core-integration-tests-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-23)">│</text><text class="breeze-testing-core-integration-tests-r6" x="610" y="581.2" textLength="732" clip-path="url(#breeze-testing-core-integration-tests-line-23)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-integration-tests-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-23)">│</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-23)">
-</text><text class="breeze-testing-core-integration-tests-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-24)">│</text><text class="breeze-testing-core-integration-tests-r5" x="610" y="605.6" textLength="732" clip-path="url(#breeze-testing-core-integration-tests-line-24)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-integration-tests-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-24)">│</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-24)">
+</text><text class="breeze-testing-core-integration-tests-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-23)">│</text><text class="breeze-testing-core-integration-tests-r6" x="610" y="581.2" textLength="732" clip-path="url(#breeze-testing-core-integration-tests-line-23)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-integration-tests-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-23)">│</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-23)">
+</text><text class="breeze-testing-core-integration-tests-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-24)">│</text><text class="breeze-testing-core-integration-tests-r5" x="610" y="605.6" textLength="732" clip-path="url(#breeze-testing-core-integration-tests-line-24)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-integration-tests-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-24)">│</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-24)">
 </text><text class="breeze-testing-core-integration-tests-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-25)">│</text><text class="breeze-testing-core-integration-tests-r4" x="24.4" y="630" textLength="219.6" clip-path="url(#breeze-testing-core-integration-tests-line-25)">--postgres-version</text><text class="breeze-testing-core-integration-tests-r7" x="561.2" y="630" textLength="24.4" clip-path="url(#breeze-testing-core-integration-tests-line-25)">-P</text><text class="breeze-testing-core-integration-tests-r1" x="610" y="630" textLength="305" clip-path="url(#breeze-testing-core-integration-tests-line-25)">Version&#160;of&#160;Postgres&#160;used.</text><text class="breeze-testing-core-integration-tests-r6" x="927.2" y="630" textLength="317.2" clip-path="url(#breeze-testing-core-integration-tests-line-25)">(&gt;13&lt;&#160;|&#160;14&#160;|&#160;15&#160;|&#160;16&#160;|&#160;17)</text><text class="breeze-testing-core-integration-tests-r5" x="1256.6" y="630" textLength="158.6" clip-path="url(#breeze-testing-core-integration-tests-line-25)">[default:&#160;13]</text><text class="breeze-testing-core-integration-tests-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-25)">│</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-25)">
 </text><text class="breeze-testing-core-integration-tests-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-26)">│</text><text class="breeze-testing-core-integration-tests-r4" x="24.4" y="654.4" textLength="183" clip-path="url(#breeze-testing-core-integration-tests-line-26)">--mysql-version</text><text class="breeze-testing-core-integration-tests-r7" x="561.2" y="654.4" textLength="24.4" clip-path="url(#breeze-testing-core-integration-tests-line-26)">-M</text><text class="breeze-testing-core-integration-tests-r1" x="610" y="654.4" textLength="268.4" clip-path="url(#breeze-testing-core-integration-tests-line-26)">Version&#160;of&#160;MySQL&#160;used.</text><text class="breeze-testing-core-integration-tests-r6" x="890.6" y="654.4" textLength="158.6" clip-path="url(#breeze-testing-core-integration-tests-line-26)">(&gt;8.0&lt;&#160;|&#160;8.4)</text><text class="breeze-testing-core-integration-tests-r5" x="1061.4" y="654.4" textLength="170.8" clip-path="url(#breeze-testing-core-integration-tests-line-26)">[default:&#160;8.0]</text><text class="breeze-testing-core-integration-tests-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-26)">│</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-26)">
 </text><text class="breeze-testing-core-integration-tests-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-27)">│</text><text class="breeze-testing-core-integration-tests-r4" x="24.4" y="678.8" textLength="256.2" clip-path="url(#breeze-testing-core-integration-tests-line-27)">--forward-credentials</text><text class="breeze-testing-core-integration-tests-r7" x="561.2" y="678.8" textLength="24.4" clip-path="url(#breeze-testing-core-integration-tests-line-27)">-f</text><text class="breeze-testing-core-integration-tests-r1" x="610" y="678.8" textLength="634.4" clip-path="url(#breeze-testing-core-integration-tests-line-27)">Forward&#160;local&#160;credentials&#160;to&#160;container&#160;when&#160;running.</text><text class="breeze-testing-core-integration-tests-r5" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-27)">│</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-27)">
diff --git a/dev/breeze/doc/images/output_testing_core-integration-tests.txt b/dev/breeze/doc/images/output_testing_core-integration-tests.txt
index 51fba3c9cfc37..6cc94ab76b850 100644
--- a/dev/breeze/doc/images/output_testing_core-integration-tests.txt
+++ b/dev/breeze/doc/images/output_testing_core-integration-tests.txt
@@ -1 +1 @@
-6a754e606e87c992f855d23294af88b3
+f9a72bab5c6f0a3d4eabddeb547818fe
diff --git a/dev/breeze/doc/images/output_testing_core-tests.svg b/dev/breeze/doc/images/output_testing_core-tests.svg
index a31a8d9909fae..145a15f6cae1e 100644
--- a/dev/breeze/doc/images/output_testing_core-tests.svg
+++ b/dev/breeze/doc/images/output_testing_core-tests.svg
@@ -421,8 +421,8 @@
 </text><text class="breeze-testing-core-tests-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-37)">│</text><text class="breeze-testing-core-tests-r5" x="610" y="922.8" textLength="829.6" clip-path="url(#breeze-testing-core-tests-line-37)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="922.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-37)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-37)">
 </text><text class="breeze-testing-core-tests-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-38)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="947.2" textLength="183" clip-path="url(#breeze-testing-core-tests-line-38)">--no-db-cleanup</text><text class="breeze-testing-core-tests-r1" x="610" y="947.2" textLength="597.8" clip-path="url(#breeze-testing-core-tests-line-38)">Do&#160;not&#160;clear&#160;the&#160;database&#160;before&#160;each&#160;test&#160;module</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="947.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-38)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-38)">
 </text><text class="breeze-testing-core-tests-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-39)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="971.6" textLength="97.6" clip-path="url(#breeze-testing-core-tests-line-39)">--python</text><text class="breeze-testing-core-tests-r7" x="561.2" y="971.6" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-39)">-p</text><text class="breeze-testing-core-tests-r1" x="610" y="971.6" textLength="732" clip-path="url(#breeze-testing-core-tests-line-39)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="971.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-39)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-39)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-40)">│</text><text class="breeze-testing-core-tests-r6" x="610" y="996" textLength="732" clip-path="url(#breeze-testing-core-tests-line-40)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="996" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-40)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-40)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-41)">│</text><text class="breeze-testing-core-tests-r5" x="610" y="1020.4" textLength="732" clip-path="url(#breeze-testing-core-tests-line-41)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-41)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-41)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-40)">│</text><text class="breeze-testing-core-tests-r6" x="610" y="996" textLength="732" clip-path="url(#breeze-testing-core-tests-line-40)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="996" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-40)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-40)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-41)">│</text><text class="breeze-testing-core-tests-r5" x="610" y="1020.4" textLength="732" clip-path="url(#breeze-testing-core-tests-line-41)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-41)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-41)">
 </text><text class="breeze-testing-core-tests-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-42)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1044.8" textLength="219.6" clip-path="url(#breeze-testing-core-tests-line-42)">--postgres-version</text><text class="breeze-testing-core-tests-r7" x="561.2" y="1044.8" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-42)">-P</text><text class="breeze-testing-core-tests-r1" x="610" y="1044.8" textLength="305" clip-path="url(#breeze-testing-core-tests-line-42)">Version&#160;of&#160;Postgres&#160;used.</text><text class="breeze-testing-core-tests-r6" x="927.2" y="1044.8" textLength="317.2" clip-path="url(#breeze-testing-core-tests-line-42)">(&gt;13&lt;&#160;|&#160;14&#160;|&#160;15&#160;|&#160;16&#160;|&#160;17)</text><text class="breeze-testing-core-tests-r5" x="1256.6" y="1044.8" textLength="158.6" clip-path="url(#breeze-testing-core-tests-line-42)">[default:&#160;13]</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-42)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-42)">
 </text><text class="breeze-testing-core-tests-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-43)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1069.2" textLength="183" clip-path="url(#breeze-testing-core-tests-line-43)">--mysql-version</text><text class="breeze-testing-core-tests-r7" x="561.2" y="1069.2" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-43)">-M</text><text class="breeze-testing-core-tests-r1" x="610" y="1069.2" textLength="268.4" clip-path="url(#breeze-testing-core-tests-line-43)">Version&#160;of&#160;MySQL&#160;used.</text><text class="breeze-testing-core-tests-r6" x="890.6" y="1069.2" textLength="158.6" clip-path="url(#breeze-testing-core-tests-line-43)">(&gt;8.0&lt;&#160;|&#160;8.4)</text><text class="breeze-testing-core-tests-r5" x="1061.4" y="1069.2" textLength="170.8" clip-path="url(#breeze-testing-core-tests-line-43)">[default:&#160;8.0]</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1069.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-43)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-43)">
 </text><text class="breeze-testing-core-tests-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-44)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1093.6" textLength="256.2" clip-path="url(#breeze-testing-core-tests-line-44)">--forward-credentials</text><text class="breeze-testing-core-tests-r7" x="561.2" y="1093.6" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-44)">-f</text><text class="breeze-testing-core-tests-r1" x="610" y="1093.6" textLength="634.4" clip-path="url(#breeze-testing-core-tests-line-44)">Forward&#160;local&#160;credentials&#160;to&#160;container&#160;when&#160;running.</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1093.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-44)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-44)">
diff --git a/dev/breeze/doc/images/output_testing_core-tests.txt b/dev/breeze/doc/images/output_testing_core-tests.txt
index 289f6b4062c06..a5c89681ead52 100644
--- a/dev/breeze/doc/images/output_testing_core-tests.txt
+++ b/dev/breeze/doc/images/output_testing_core-tests.txt
@@ -1 +1 @@
-eb0cd2087234798b1d3e9c95120d9a93
+ceb51359e3530c67379ae17cf219647d
diff --git a/dev/breeze/doc/images/output_testing_docker-compose-tests.svg b/dev/breeze/doc/images/output_testing_docker-compose-tests.svg
index 052f1532eb14d..b46d39d0b370d 100644
--- a/dev/breeze/doc/images/output_testing_docker-compose-tests.svg
+++ b/dev/breeze/doc/images/output_testing_docker-compose-tests.svg
@@ -122,8 +122,8 @@
 </text><text class="breeze-testing-docker-compose-tests-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-testing-docker-compose-tests-line-5)">╭─</text><text class="breeze-testing-docker-compose-tests-r5" x="24.4" y="142" textLength="329.4" clip-path="url(#breeze-testing-docker-compose-tests-line-5)">&#160;Docker-compose&#160;tests&#160;flag&#160;</text><text class="breeze-testing-docker-compose-tests-r5" x="353.8" y="142" textLength="1085.8" clip-path="url(#breeze-testing-docker-compose-tests-line-5)">─────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-testing-docker-compose-tests-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-testing-docker-compose-tests-line-5)">─╮</text><text class="breeze-testing-docker-compose-tests-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-5)">
 </text><text class="breeze-testing-docker-compose-tests-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-6)">│</text><text class="breeze-testing-docker-compose-tests-r4" x="24.4" y="166.4" textLength="146.4" clip-path="url(#breeze-testing-docker-compose-tests-line-6)">--image-name</text><text class="breeze-testing-docker-compose-tests-r6" x="414.8" y="166.4" textLength="24.4" clip-path="url(#breeze-testing-docker-compose-tests-line-6)">-n</text><text class="breeze-testing-docker-compose-tests-r1" x="463.6" y="166.4" textLength="475.8" clip-path="url(#breeze-testing-docker-compose-tests-line-6)">Name&#160;of&#160;the&#160;image&#160;to&#160;verify&#160;(overrides&#160;</text><text class="breeze-testing-docker-compose-tests-r4" x="939.4" y="166.4" textLength="97.6" clip-path="url(#breeze-testing-docker-compose-tests-line-6)">--python</text><text class="breeze-testing-docker-compose-tests-r1" x="1037" y="166.4" textLength="24.4" clip-path="url(#breeze-testing-docker-compose-tests-line-6)">).</text><text class="breeze-testing-docker-compose-tests-r7" x="1073.6" y="166.4" textLength="73.2" clip-path="url(#breeze-testing-docker-compose-tests-line-6)">(TEXT)</text><text class="breeze-testing-docker-compose-tests-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-6)">│</text><text class="breeze-testing-docker-compose-tests-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-6)">
 </text><text class="breeze-testing-docker-compose-tests-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-7)">│</text><text class="breeze-testing-docker-compose-tests-r4" x="24.4" y="190.8" textLength="97.6" clip-path="url(#breeze-testing-docker-compose-tests-line-7)">--python</text><text class="breeze-testing-docker-compose-tests-r6" x="414.8" y="190.8" textLength="24.4" clip-path="url(#breeze-testing-docker-compose-tests-line-7)">-p</text><text class="breeze-testing-docker-compose-tests-r1" x="463.6" y="190.8" textLength="732" clip-path="url(#breeze-testing-docker-compose-tests-line-7)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-testing-docker-compose-tests-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-7)">│</text><text class="breeze-testing-docker-compose-tests-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-7)">
-</text><text class="breeze-testing-docker-compose-tests-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-8)">│</text><text class="breeze-testing-docker-compose-tests-r7" x="463.6" y="215.2" textLength="732" clip-path="url(#breeze-testing-docker-compose-tests-line-8)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-docker-compose-tests-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-8)">│</text><text class="breeze-testing-docker-compose-tests-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-8)">
-</text><text class="breeze-testing-docker-compose-tests-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-9)">│</text><text class="breeze-testing-docker-compose-tests-r5" x="463.6" y="239.6" textLength="732" clip-path="url(#breeze-testing-docker-compose-tests-line-9)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-docker-compose-tests-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-9)">│</text><text class="breeze-testing-docker-compose-tests-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-9)">
+</text><text class="breeze-testing-docker-compose-tests-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-8)">│</text><text class="breeze-testing-docker-compose-tests-r7" x="463.6" y="215.2" textLength="732" clip-path="url(#breeze-testing-docker-compose-tests-line-8)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-docker-compose-tests-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-8)">│</text><text class="breeze-testing-docker-compose-tests-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-8)">
+</text><text class="breeze-testing-docker-compose-tests-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-9)">│</text><text class="breeze-testing-docker-compose-tests-r5" x="463.6" y="239.6" textLength="732" clip-path="url(#breeze-testing-docker-compose-tests-line-9)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-docker-compose-tests-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-9)">│</text><text class="breeze-testing-docker-compose-tests-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-9)">
 </text><text class="breeze-testing-docker-compose-tests-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-10)">│</text><text class="breeze-testing-docker-compose-tests-r4" x="24.4" y="264" textLength="366" clip-path="url(#breeze-testing-docker-compose-tests-line-10)">--skip-docker-compose-deletion</text><text class="breeze-testing-docker-compose-tests-r1" x="463.6" y="264" textLength="671" clip-path="url(#breeze-testing-docker-compose-tests-line-10)">Skip&#160;deletion&#160;of&#160;docker-compose&#160;instance&#160;after&#160;the&#160;test</text><text class="breeze-testing-docker-compose-tests-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-10)">│</text><text class="breeze-testing-docker-compose-tests-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-10)">
 </text><text class="breeze-testing-docker-compose-tests-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-11)">│</text><text class="breeze-testing-docker-compose-tests-r4" x="24.4" y="288.4" textLength="305" clip-path="url(#breeze-testing-docker-compose-tests-line-11)">--include-success-outputs</text><text class="breeze-testing-docker-compose-tests-r1" x="463.6" y="288.4" textLength="841.8" clip-path="url(#breeze-testing-docker-compose-tests-line-11)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;runs&#160;(not&#160;shown&#160;by&#160;default).</text><text class="breeze-testing-docker-compose-tests-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-11)">│</text><text class="breeze-testing-docker-compose-tests-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-11)">
 </text><text class="breeze-testing-docker-compose-tests-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-12)">│</text><text class="breeze-testing-docker-compose-tests-r4" x="24.4" y="312.8" textLength="231.8" clip-path="url(#breeze-testing-docker-compose-tests-line-12)">--github-repository</text><text class="breeze-testing-docker-compose-tests-r6" x="414.8" y="312.8" textLength="24.4" clip-path="url(#breeze-testing-docker-compose-tests-line-12)">-g</text><text class="breeze-testing-docker-compose-tests-r1" x="463.6" y="312.8" textLength="585.6" clip-path="url(#breeze-testing-docker-compose-tests-line-12)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-testing-docker-compose-tests-r7" x="1061.4" y="312.8" textLength="73.2" clip-path="url(#breeze-testing-docker-compose-tests-line-12)">(TEXT)</text><text class="breeze-testing-docker-compose-tests-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-12)">│</text><text class="breeze-testing-docker-compose-tests-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-12)">
diff --git a/dev/breeze/doc/images/output_testing_docker-compose-tests.txt b/dev/breeze/doc/images/output_testing_docker-compose-tests.txt
index 006c1079ead23..640b88b2b6c0b 100644
--- a/dev/breeze/doc/images/output_testing_docker-compose-tests.txt
+++ b/dev/breeze/doc/images/output_testing_docker-compose-tests.txt
@@ -1 +1 @@
-31ffebab06e334bd47c15deaf2160736
+51b98fe337251d125d8de538a71a21df
diff --git a/dev/breeze/doc/images/output_testing_providers-integration-tests.svg b/dev/breeze/doc/images/output_testing_providers-integration-tests.svg
index 71bce41db52bd..af73ffc750a72 100644
--- a/dev/breeze/doc/images/output_testing_providers-integration-tests.svg
+++ b/dev/breeze/doc/images/output_testing_providers-integration-tests.svg
@@ -227,8 +227,8 @@
 </text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-20)">│</text><text class="breeze-testing-providers-integration-tests-r5" x="610" y="508" textLength="829.6" clip-path="url(#breeze-testing-providers-integration-tests-line-20)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-20)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-20)">
 </text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-21)">│</text><text class="breeze-testing-providers-integration-tests-r4" x="24.4" y="532.4" textLength="183" clip-path="url(#breeze-testing-providers-integration-tests-line-21)">--no-db-cleanup</text><text class="breeze-testing-providers-integration-tests-r1" x="610" y="532.4" textLength="597.8" clip-path="url(#breeze-testing-providers-integration-tests-line-21)">Do&#160;not&#160;clear&#160;the&#160;database&#160;before&#160;each&#160;test&#160;module</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-21)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-21)">
 </text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-22)">│</text><text class="breeze-testing-providers-integration-tests-r4" x="24.4" y="556.8" textLength="97.6" clip-path="url(#breeze-testing-providers-integration-tests-line-22)">--python</text><text class="breeze-testing-providers-integration-tests-r7" x="561.2" y="556.8" textLength="24.4" clip-path="url(#breeze-testing-providers-integration-tests-line-22)">-p</text><text class="breeze-testing-providers-integration-tests-r1" x="610" y="556.8" textLength="732" clip-path="url(#breeze-testing-providers-integration-tests-line-22)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-22)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-22)">
-</text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-23)">│</text><text class="breeze-testing-providers-integration-tests-r6" x="610" y="581.2" textLength="732" clip-path="url(#breeze-testing-providers-integration-tests-line-23)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-23)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-23)">
-</text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-24)">│</text><text class="breeze-testing-providers-integration-tests-r5" x="610" y="605.6" textLength="732" clip-path="url(#breeze-testing-providers-integration-tests-line-24)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-24)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-24)">
+</text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-23)">│</text><text class="breeze-testing-providers-integration-tests-r6" x="610" y="581.2" textLength="732" clip-path="url(#breeze-testing-providers-integration-tests-line-23)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-23)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-23)">
+</text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-24)">│</text><text class="breeze-testing-providers-integration-tests-r5" x="610" y="605.6" textLength="732" clip-path="url(#breeze-testing-providers-integration-tests-line-24)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-24)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-24)">
 </text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-25)">│</text><text class="breeze-testing-providers-integration-tests-r4" x="24.4" y="630" textLength="219.6" clip-path="url(#breeze-testing-providers-integration-tests-line-25)">--postgres-version</text><text class="breeze-testing-providers-integration-tests-r7" x="561.2" y="630" textLength="24.4" clip-path="url(#breeze-testing-providers-integration-tests-line-25)">-P</text><text class="breeze-testing-providers-integration-tests-r1" x="610" y="630" textLength="305" clip-path="url(#breeze-testing-providers-integration-tests-line-25)">Version&#160;of&#160;Postgres&#160;used.</text><text class="breeze-testing-providers-integration-tests-r6" x="927.2" y="630" textLength="317.2" clip-path="url(#breeze-testing-providers-integration-tests-line-25)">(&gt;13&lt;&#160;|&#160;14&#160;|&#160;15&#160;|&#160;16&#160;|&#160;17)</text><text class="breeze-testing-providers-integration-tests-r5" x="1256.6" y="630" textLength="158.6" clip-path="url(#breeze-testing-providers-integration-tests-line-25)">[default:&#160;13]</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-25)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-25)">
 </text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-26)">│</text><text class="breeze-testing-providers-integration-tests-r4" x="24.4" y="654.4" textLength="183" clip-path="url(#breeze-testing-providers-integration-tests-line-26)">--mysql-version</text><text class="breeze-testing-providers-integration-tests-r7" x="561.2" y="654.4" textLength="24.4" clip-path="url(#breeze-testing-providers-integration-tests-line-26)">-M</text><text class="breeze-testing-providers-integration-tests-r1" x="610" y="654.4" textLength="268.4" clip-path="url(#breeze-testing-providers-integration-tests-line-26)">Version&#160;of&#160;MySQL&#160;used.</text><text class="breeze-testing-providers-integration-tests-r6" x="890.6" y="654.4" textLength="158.6" clip-path="url(#breeze-testing-providers-integration-tests-line-26)">(&gt;8.0&lt;&#160;|&#160;8.4)</text><text class="breeze-testing-providers-integration-tests-r5" x="1061.4" y="654.4" textLength="170.8" clip-path="url(#breeze-testing-providers-integration-tests-line-26)">[default:&#160;8.0]</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-26)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-26)">
 </text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-27)">│</text><text class="breeze-testing-providers-integration-tests-r4" x="24.4" y="678.8" textLength="256.2" clip-path="url(#breeze-testing-providers-integration-tests-line-27)">--forward-credentials</text><text class="breeze-testing-providers-integration-tests-r7" x="561.2" y="678.8" textLength="24.4" clip-path="url(#breeze-testing-providers-integration-tests-line-27)">-f</text><text class="breeze-testing-providers-integration-tests-r1" x="610" y="678.8" textLength="634.4" clip-path="url(#breeze-testing-providers-integration-tests-line-27)">Forward&#160;local&#160;credentials&#160;to&#160;container&#160;when&#160;running.</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-27)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-27)">
diff --git a/dev/breeze/doc/images/output_testing_providers-integration-tests.txt b/dev/breeze/doc/images/output_testing_providers-integration-tests.txt
index 1b6995e16c3d1..6a4377016c653 100644
--- a/dev/breeze/doc/images/output_testing_providers-integration-tests.txt
+++ b/dev/breeze/doc/images/output_testing_providers-integration-tests.txt
@@ -1 +1 @@
-48aafaf7c9282ae70307e168ffefb0ab
+f8cae5908b307cdc14d48857da8e058d
diff --git a/dev/breeze/doc/images/output_testing_providers-tests.svg b/dev/breeze/doc/images/output_testing_providers-tests.svg
index e1aec6f18a145..cc0225e07660e 100644
--- a/dev/breeze/doc/images/output_testing_providers-tests.svg
+++ b/dev/breeze/doc/images/output_testing_providers-tests.svg
@@ -452,8 +452,8 @@
 </text><text class="breeze-testing-providers-tests-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-38)">│</text><text class="breeze-testing-providers-tests-r5" x="610" y="947.2" textLength="829.6" clip-path="url(#breeze-testing-providers-tests-line-38)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="947.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-38)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-38)">
 </text><text class="breeze-testing-providers-tests-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-39)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="971.6" textLength="183" clip-path="url(#breeze-testing-providers-tests-line-39)">--no-db-cleanup</text><text class="breeze-testing-providers-tests-r1" x="610" y="971.6" textLength="597.8" clip-path="url(#breeze-testing-providers-tests-line-39)">Do&#160;not&#160;clear&#160;the&#160;database&#160;before&#160;each&#160;test&#160;module</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="971.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-39)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-39)">
 </text><text class="breeze-testing-providers-tests-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-40)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="996" textLength="97.6" clip-path="url(#breeze-testing-providers-tests-line-40)">--python</text><text class="breeze-testing-providers-tests-r6" x="561.2" y="996" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-40)">-p</text><text class="breeze-testing-providers-tests-r1" x="610" y="996" textLength="732" clip-path="url(#breeze-testing-providers-tests-line-40)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="996" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-40)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-40)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-41)">│</text><text class="breeze-testing-providers-tests-r7" x="610" y="1020.4" textLength="732" clip-path="url(#breeze-testing-providers-tests-line-41)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-41)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-41)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-42)">│</text><text class="breeze-testing-providers-tests-r5" x="610" y="1044.8" textLength="732" clip-path="url(#breeze-testing-providers-tests-line-42)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-42)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-42)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-41)">│</text><text class="breeze-testing-providers-tests-r7" x="610" y="1020.4" textLength="732" clip-path="url(#breeze-testing-providers-tests-line-41)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-41)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-41)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-42)">│</text><text class="breeze-testing-providers-tests-r5" x="610" y="1044.8" textLength="732" clip-path="url(#breeze-testing-providers-tests-line-42)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-42)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-42)">
 </text><text class="breeze-testing-providers-tests-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-43)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1069.2" textLength="219.6" clip-path="url(#breeze-testing-providers-tests-line-43)">--postgres-version</text><text class="breeze-testing-providers-tests-r6" x="561.2" y="1069.2" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-43)">-P</text><text class="breeze-testing-providers-tests-r1" x="610" y="1069.2" textLength="305" clip-path="url(#breeze-testing-providers-tests-line-43)">Version&#160;of&#160;Postgres&#160;used.</text><text class="breeze-testing-providers-tests-r7" x="927.2" y="1069.2" textLength="317.2" clip-path="url(#breeze-testing-providers-tests-line-43)">(&gt;13&lt;&#160;|&#160;14&#160;|&#160;15&#160;|&#160;16&#160;|&#160;17)</text><text class="breeze-testing-providers-tests-r5" x="1256.6" y="1069.2" textLength="158.6" clip-path="url(#breeze-testing-providers-tests-line-43)">[default:&#160;13]</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1069.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-43)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-43)">
 </text><text class="breeze-testing-providers-tests-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-44)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1093.6" textLength="183" clip-path="url(#breeze-testing-providers-tests-line-44)">--mysql-version</text><text class="breeze-testing-providers-tests-r6" x="561.2" y="1093.6" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-44)">-M</text><text class="breeze-testing-providers-tests-r1" x="610" y="1093.6" textLength="268.4" clip-path="url(#breeze-testing-providers-tests-line-44)">Version&#160;of&#160;MySQL&#160;used.</text><text class="breeze-testing-providers-tests-r7" x="890.6" y="1093.6" textLength="158.6" clip-path="url(#breeze-testing-providers-tests-line-44)">(&gt;8.0&lt;&#160;|&#160;8.4)</text><text class="breeze-testing-providers-tests-r5" x="1061.4" y="1093.6" textLength="170.8" clip-path="url(#breeze-testing-providers-tests-line-44)">[default:&#160;8.0]</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1093.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-44)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-44)">
 </text><text class="breeze-testing-providers-tests-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-45)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1118" textLength="256.2" clip-path="url(#breeze-testing-providers-tests-line-45)">--forward-credentials</text><text class="breeze-testing-providers-tests-r6" x="561.2" y="1118" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-45)">-f</text><text class="breeze-testing-providers-tests-r1" x="610" y="1118" textLength="634.4" clip-path="url(#breeze-testing-providers-tests-line-45)">Forward&#160;local&#160;credentials&#160;to&#160;container&#160;when&#160;running.</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1118" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-45)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-45)">
diff --git a/dev/breeze/doc/images/output_testing_providers-tests.txt b/dev/breeze/doc/images/output_testing_providers-tests.txt
index 8a8b1581162bc..8c77d66e03ade 100644
--- a/dev/breeze/doc/images/output_testing_providers-tests.txt
+++ b/dev/breeze/doc/images/output_testing_providers-tests.txt
@@ -1 +1 @@
-3e66e638bf0d2539a9f6da0758e145a9
+40d4ee42e19c31200593c168157a2521
diff --git a/dev/breeze/doc/images/output_testing_python-api-client-tests.svg b/dev/breeze/doc/images/output_testing_python-api-client-tests.svg
index 0babcf9754813..ee1f256149479 100644
--- a/dev/breeze/doc/images/output_testing_python-api-client-tests.svg
+++ b/dev/breeze/doc/images/output_testing_python-api-client-tests.svg
@@ -205,8 +205,8 @@
 </text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-25)">│</text><text class="breeze-testing-python-api-client-tests-r5" x="610" y="630" textLength="829.6" clip-path="url(#breeze-testing-python-api-client-tests-line-25)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-python-api-client-tests-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-25)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-25)">
 </text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-26)">│</text><text class="breeze-testing-python-api-client-tests-r4" x="24.4" y="654.4" textLength="183" clip-path="url(#breeze-testing-python-api-client-tests-line-26)">--no-db-cleanup</text><text class="breeze-testing-python-api-client-tests-r1" x="610" y="654.4" textLength="597.8" clip-path="url(#breeze-testing-python-api-client-tests-line-26)">Do&#160;not&#160;clear&#160;the&#160;database&#160;before&#160;each&#160;test&#160;module</text><text class="breeze-testing-python-api-client-tests-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-26)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-26)">
 </text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-27)">│</text><text class="breeze-testing-python-api-client-tests-r4" x="24.4" y="678.8" textLength="97.6" clip-path="url(#breeze-testing-python-api-client-tests-line-27)">--python</text><text class="breeze-testing-python-api-client-tests-r6" x="561.2" y="678.8" textLength="24.4" clip-path="url(#breeze-testing-python-api-client-tests-line-27)">-p</text><text class="breeze-testing-python-api-client-tests-r1" x="610" y="678.8" textLength="732" clip-path="url(#breeze-testing-python-api-client-tests-line-27)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-testing-python-api-client-tests-r5" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-27)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-27)">
-</text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-28)">│</text><text class="breeze-testing-python-api-client-tests-r7" x="610" y="703.2" textLength="732" clip-path="url(#breeze-testing-python-api-client-tests-line-28)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-python-api-client-tests-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-28)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-28)">
-</text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-29)">│</text><text class="breeze-testing-python-api-client-tests-r5" x="610" y="727.6" textLength="732" clip-path="url(#breeze-testing-python-api-client-tests-line-29)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-python-api-client-tests-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-29)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-29)">
+</text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-28)">│</text><text class="breeze-testing-python-api-client-tests-r7" x="610" y="703.2" textLength="732" clip-path="url(#breeze-testing-python-api-client-tests-line-28)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-python-api-client-tests-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-28)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-28)">
+</text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-29)">│</text><text class="breeze-testing-python-api-client-tests-r5" x="610" y="727.6" textLength="732" clip-path="url(#breeze-testing-python-api-client-tests-line-29)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-python-api-client-tests-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-29)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-29)">
 </text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-30)">│</text><text class="breeze-testing-python-api-client-tests-r4" x="24.4" y="752" textLength="219.6" clip-path="url(#breeze-testing-python-api-client-tests-line-30)">--postgres-version</text><text class="breeze-testing-python-api-client-tests-r6" x="561.2" y="752" textLength="24.4" clip-path="url(#breeze-testing-python-api-client-tests-line-30)">-P</text><text class="breeze-testing-python-api-client-tests-r1" x="610" y="752" textLength="305" clip-path="url(#breeze-testing-python-api-client-tests-line-30)">Version&#160;of&#160;Postgres&#160;used.</text><text class="breeze-testing-python-api-client-tests-r7" x="927.2" y="752" textLength="317.2" clip-path="url(#breeze-testing-python-api-client-tests-line-30)">(&gt;13&lt;&#160;|&#160;14&#160;|&#160;15&#160;|&#160;16&#160;|&#160;17)</text><text class="breeze-testing-python-api-client-tests-r5" x="1256.6" y="752" textLength="158.6" clip-path="url(#breeze-testing-python-api-client-tests-line-30)">[default:&#160;13]</text><text class="breeze-testing-python-api-client-tests-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-30)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-30)">
 </text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-31)">│</text><text class="breeze-testing-python-api-client-tests-r4" x="24.4" y="776.4" textLength="183" clip-path="url(#breeze-testing-python-api-client-tests-line-31)">--mysql-version</text><text class="breeze-testing-python-api-client-tests-r6" x="561.2" y="776.4" textLength="24.4" clip-path="url(#breeze-testing-python-api-client-tests-line-31)">-M</text><text class="breeze-testing-python-api-client-tests-r1" x="610" y="776.4" textLength="268.4" clip-path="url(#breeze-testing-python-api-client-tests-line-31)">Version&#160;of&#160;MySQL&#160;used.</text><text class="breeze-testing-python-api-client-tests-r7" x="890.6" y="776.4" textLength="158.6" clip-path="url(#breeze-testing-python-api-client-tests-line-31)">(&gt;8.0&lt;&#160;|&#160;8.4)</text><text class="breeze-testing-python-api-client-tests-r5" x="1061.4" y="776.4" textLength="170.8" clip-path="url(#breeze-testing-python-api-client-tests-line-31)">[default:&#160;8.0]</text><text class="breeze-testing-python-api-client-tests-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-31)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-31)">
 </text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-32)">│</text><text class="breeze-testing-python-api-client-tests-r4" x="24.4" y="800.8" textLength="256.2" clip-path="url(#breeze-testing-python-api-client-tests-line-32)">--forward-credentials</text><text class="breeze-testing-python-api-client-tests-r6" x="561.2" y="800.8" textLength="24.4" clip-path="url(#breeze-testing-python-api-client-tests-line-32)">-f</text><text class="breeze-testing-python-api-client-tests-r1" x="610" y="800.8" textLength="634.4" clip-path="url(#breeze-testing-python-api-client-tests-line-32)">Forward&#160;local&#160;credentials&#160;to&#160;container&#160;when&#160;running.</text><text class="breeze-testing-python-api-client-tests-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-32)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-32)">
diff --git a/dev/breeze/doc/images/output_testing_python-api-client-tests.txt b/dev/breeze/doc/images/output_testing_python-api-client-tests.txt
index d357add35d963..feaff93e8dbfa 100644
--- a/dev/breeze/doc/images/output_testing_python-api-client-tests.txt
+++ b/dev/breeze/doc/images/output_testing_python-api-client-tests.txt
@@ -1 +1 @@
-bd5df7204b8255b938c2910ae46c578f
+92211c9044658c3f7f3ca81af06f7c43
diff --git a/dev/breeze/doc/images/output_testing_system-tests.svg b/dev/breeze/doc/images/output_testing_system-tests.svg
index 023c7f6f24596..14594a21cdb73 100644
--- a/dev/breeze/doc/images/output_testing_system-tests.svg
+++ b/dev/breeze/doc/images/output_testing_system-tests.svg
@@ -296,8 +296,8 @@
 </text><text class="breeze-testing-system-tests-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-20)">│</text><text class="breeze-testing-system-tests-r5" x="610" y="508" textLength="829.6" clip-path="url(#breeze-testing-system-tests-line-20)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-system-tests-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-20)">│</text><text class="breeze-testing-system-tests-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-20)">
 </text><text class="breeze-testing-system-tests-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-21)">│</text><text class="breeze-testing-system-tests-r4" x="24.4" y="532.4" textLength="183" clip-path="url(#breeze-testing-system-tests-line-21)">--no-db-cleanup</text><text class="breeze-testing-system-tests-r1" x="610" y="532.4" textLength="597.8" clip-path="url(#breeze-testing-system-tests-line-21)">Do&#160;not&#160;clear&#160;the&#160;database&#160;before&#160;each&#160;test&#160;module</text><text class="breeze-testing-system-tests-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-21)">│</text><text class="breeze-testing-system-tests-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-21)">
 </text><text class="breeze-testing-system-tests-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-22)">│</text><text class="breeze-testing-system-tests-r4" x="24.4" y="556.8" textLength="97.6" clip-path="url(#breeze-testing-system-tests-line-22)">--python</text><text class="breeze-testing-system-tests-r7" x="561.2" y="556.8" textLength="24.4" clip-path="url(#breeze-testing-system-tests-line-22)">-p</text><text class="breeze-testing-system-tests-r1" x="610" y="556.8" textLength="732" clip-path="url(#breeze-testing-system-tests-line-22)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-testing-system-tests-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-22)">│</text><text class="breeze-testing-system-tests-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-22)">
-</text><text class="breeze-testing-system-tests-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-23)">│</text><text class="breeze-testing-system-tests-r6" x="610" y="581.2" textLength="732" clip-path="url(#breeze-testing-system-tests-line-23)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-system-tests-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-23)">│</text><text class="breeze-testing-system-tests-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-23)">
-</text><text class="breeze-testing-system-tests-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-24)">│</text><text class="breeze-testing-system-tests-r5" x="610" y="605.6" textLength="732" clip-path="url(#breeze-testing-system-tests-line-24)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-system-tests-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-24)">│</text><text class="breeze-testing-system-tests-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-24)">
+</text><text class="breeze-testing-system-tests-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-23)">│</text><text class="breeze-testing-system-tests-r6" x="610" y="581.2" textLength="732" clip-path="url(#breeze-testing-system-tests-line-23)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-system-tests-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-23)">│</text><text class="breeze-testing-system-tests-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-23)">
+</text><text class="breeze-testing-system-tests-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-24)">│</text><text class="breeze-testing-system-tests-r5" x="610" y="605.6" textLength="732" clip-path="url(#breeze-testing-system-tests-line-24)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-system-tests-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-24)">│</text><text class="breeze-testing-system-tests-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-24)">
 </text><text class="breeze-testing-system-tests-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-25)">│</text><text class="breeze-testing-system-tests-r4" x="24.4" y="630" textLength="219.6" clip-path="url(#breeze-testing-system-tests-line-25)">--postgres-version</text><text class="breeze-testing-system-tests-r7" x="561.2" y="630" textLength="24.4" clip-path="url(#breeze-testing-system-tests-line-25)">-P</text><text class="breeze-testing-system-tests-r1" x="610" y="630" textLength="305" clip-path="url(#breeze-testing-system-tests-line-25)">Version&#160;of&#160;Postgres&#160;used.</text><text class="breeze-testing-system-tests-r6" x="927.2" y="630" textLength="317.2" clip-path="url(#breeze-testing-system-tests-line-25)">(&gt;13&lt;&#160;|&#160;14&#160;|&#160;15&#160;|&#160;16&#160;|&#160;17)</text><text class="breeze-testing-system-tests-r5" x="1256.6" y="630" textLength="158.6" clip-path="url(#breeze-testing-system-tests-line-25)">[default:&#160;13]</text><text class="breeze-testing-system-tests-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-25)">│</text><text class="breeze-testing-system-tests-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-25)">
 </text><text class="breeze-testing-system-tests-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-26)">│</text><text class="breeze-testing-system-tests-r4" x="24.4" y="654.4" textLength="183" clip-path="url(#breeze-testing-system-tests-line-26)">--mysql-version</text><text class="breeze-testing-system-tests-r7" x="561.2" y="654.4" textLength="24.4" clip-path="url(#breeze-testing-system-tests-line-26)">-M</text><text class="breeze-testing-system-tests-r1" x="610" y="654.4" textLength="268.4" clip-path="url(#breeze-testing-system-tests-line-26)">Version&#160;of&#160;MySQL&#160;used.</text><text class="breeze-testing-system-tests-r6" x="890.6" y="654.4" textLength="158.6" clip-path="url(#breeze-testing-system-tests-line-26)">(&gt;8.0&lt;&#160;|&#160;8.4)</text><text class="breeze-testing-system-tests-r5" x="1061.4" y="654.4" textLength="170.8" clip-path="url(#breeze-testing-system-tests-line-26)">[default:&#160;8.0]</text><text class="breeze-testing-system-tests-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-26)">│</text><text class="breeze-testing-system-tests-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-26)">
 </text><text class="breeze-testing-system-tests-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-27)">│</text><text class="breeze-testing-system-tests-r4" x="24.4" y="678.8" textLength="256.2" clip-path="url(#breeze-testing-system-tests-line-27)">--forward-credentials</text><text class="breeze-testing-system-tests-r7" x="561.2" y="678.8" textLength="24.4" clip-path="url(#breeze-testing-system-tests-line-27)">-f</text><text class="breeze-testing-system-tests-r1" x="610" y="678.8" textLength="634.4" clip-path="url(#breeze-testing-system-tests-line-27)">Forward&#160;local&#160;credentials&#160;to&#160;container&#160;when&#160;running.</text><text class="breeze-testing-system-tests-r5" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-27)">│</text><text class="breeze-testing-system-tests-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-27)">
diff --git a/dev/breeze/doc/images/output_testing_system-tests.txt b/dev/breeze/doc/images/output_testing_system-tests.txt
index 269ab6c161ba3..68d7fffd36077 100644
--- a/dev/breeze/doc/images/output_testing_system-tests.txt
+++ b/dev/breeze/doc/images/output_testing_system-tests.txt
@@ -1 +1 @@
-493c89674a60b43795166876bb57f31b
+96c2e355b805d8d2a17d04978f4c6cdc
diff --git a/dev/breeze/doc/images/output_testing_task-sdk-tests.svg b/dev/breeze/doc/images/output_testing_task-sdk-tests.svg
index 36bb1a3734669..9dbbff6b7cc4c 100644
--- a/dev/breeze/doc/images/output_testing_task-sdk-tests.svg
+++ b/dev/breeze/doc/images/output_testing_task-sdk-tests.svg
@@ -170,8 +170,8 @@
 </text><text class="breeze-testing-task-sdk-tests-r5" x="0" y="288.4" textLength="1464" clip-path="url(#breeze-testing-task-sdk-tests-line-11)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-task-sdk-tests-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-11)">
 </text><text class="breeze-testing-task-sdk-tests-r5" x="0" y="312.8" textLength="24.4" clip-path="url(#breeze-testing-task-sdk-tests-line-12)">╭─</text><text class="breeze-testing-task-sdk-tests-r5" x="24.4" y="312.8" textLength="219.6" clip-path="url(#breeze-testing-task-sdk-tests-line-12)">&#160;Test&#160;environment&#160;</text><text class="breeze-testing-task-sdk-tests-r5" x="244" y="312.8" textLength="1195.6" clip-path="url(#breeze-testing-task-sdk-tests-line-12)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-testing-task-sdk-tests-r5" x="1439.6" y="312.8" textLength="24.4" clip-path="url(#breeze-testing-task-sdk-tests-line-12)">─╮</text><text class="breeze-testing-task-sdk-tests-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-12)">
 </text><text class="breeze-testing-task-sdk-tests-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-13)">│</text><text class="breeze-testing-task-sdk-tests-r4" x="24.4" y="337.2" textLength="97.6" clip-path="url(#breeze-testing-task-sdk-tests-line-13)">--python</text><text class="breeze-testing-task-sdk-tests-r7" x="561.2" y="337.2" textLength="24.4" clip-path="url(#breeze-testing-task-sdk-tests-line-13)">-p</text><text class="breeze-testing-task-sdk-tests-r1" x="610" y="337.2" textLength="732" clip-path="url(#breeze-testing-task-sdk-tests-line-13)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-testing-task-sdk-tests-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-13)">│</text><text class="breeze-testing-task-sdk-tests-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-13)">
-</text><text class="breeze-testing-task-sdk-tests-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-14)">│</text><text class="breeze-testing-task-sdk-tests-r6" x="610" y="361.6" textLength="732" clip-path="url(#breeze-testing-task-sdk-tests-line-14)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-task-sdk-tests-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-14)">│</text><text class="breeze-testing-task-sdk-tests-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-14)">
-</text><text class="breeze-testing-task-sdk-tests-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-15)">│</text><text class="breeze-testing-task-sdk-tests-r5" x="610" y="386" textLength="732" clip-path="url(#breeze-testing-task-sdk-tests-line-15)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-task-sdk-tests-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-15)">│</text><text class="breeze-testing-task-sdk-tests-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-15)">
+</text><text class="breeze-testing-task-sdk-tests-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-14)">│</text><text class="breeze-testing-task-sdk-tests-r6" x="610" y="361.6" textLength="732" clip-path="url(#breeze-testing-task-sdk-tests-line-14)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-task-sdk-tests-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-14)">│</text><text class="breeze-testing-task-sdk-tests-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-14)">
+</text><text class="breeze-testing-task-sdk-tests-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-15)">│</text><text class="breeze-testing-task-sdk-tests-r5" x="610" y="386" textLength="732" clip-path="url(#breeze-testing-task-sdk-tests-line-15)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-task-sdk-tests-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-15)">│</text><text class="breeze-testing-task-sdk-tests-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-15)">
 </text><text class="breeze-testing-task-sdk-tests-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-16)">│</text><text class="breeze-testing-task-sdk-tests-r4" x="24.4" y="410.4" textLength="256.2" clip-path="url(#breeze-testing-task-sdk-tests-line-16)">--forward-credentials</text><text class="breeze-testing-task-sdk-tests-r7" x="561.2" y="410.4" textLength="24.4" clip-path="url(#breeze-testing-task-sdk-tests-line-16)">-f</text><text class="breeze-testing-task-sdk-tests-r1" x="610" y="410.4" textLength="634.4" clip-path="url(#breeze-testing-task-sdk-tests-line-16)">Forward&#160;local&#160;credentials&#160;to&#160;container&#160;when&#160;running.</text><text class="breeze-testing-task-sdk-tests-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-16)">│</text><text class="breeze-testing-task-sdk-tests-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-16)">
 </text><text class="breeze-testing-task-sdk-tests-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-17)">│</text><text class="breeze-testing-task-sdk-tests-r4" x="24.4" y="434.8" textLength="231.8" clip-path="url(#breeze-testing-task-sdk-tests-line-17)">--force-sa-warnings</text><text class="breeze-testing-task-sdk-tests-r1" x="256.2" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-17)">/</text><text class="breeze-testing-task-sdk-tests-r4" x="268.4" y="434.8" textLength="268.4" clip-path="url(#breeze-testing-task-sdk-tests-line-17)">--no-force-sa-warnings</text><text class="breeze-testing-task-sdk-tests-r1" x="610" y="434.8" textLength="768.6" clip-path="url(#breeze-testing-task-sdk-tests-line-17)">Enable&#160;`sqlalchemy.exc.MovedIn20Warning`&#160;during&#160;the&#160;tests&#160;runs.</text><text class="breeze-testing-task-sdk-tests-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-17)">│</text><text class="breeze-testing-task-sdk-tests-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-17)">
 </text><text class="breeze-testing-task-sdk-tests-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-18)">│</text><text class="breeze-testing-task-sdk-tests-r5" x="610" y="459.2" textLength="768.6" clip-path="url(#breeze-testing-task-sdk-tests-line-18)">[default:&#160;force-sa-warnings]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-task-sdk-tests-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-18)">│</text><text class="breeze-testing-task-sdk-tests-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-tests-line-18)">
diff --git a/dev/breeze/doc/images/output_testing_task-sdk-tests.txt b/dev/breeze/doc/images/output_testing_task-sdk-tests.txt
index e6a7b3b14f7d7..3e66367f5db6d 100644
--- a/dev/breeze/doc/images/output_testing_task-sdk-tests.txt
+++ b/dev/breeze/doc/images/output_testing_task-sdk-tests.txt
@@ -1 +1 @@
-05f9a5f75222a48aa104060aecab4bf5
+a39f22cb9ce828c2793aad73ac80bd07
diff --git a/dev/breeze/pyproject.toml b/dev/breeze/pyproject.toml
index 82acc5dd06a78..73114320872ec 100644
--- a/dev/breeze/pyproject.toml
+++ b/dev/breeze/pyproject.toml
@@ -41,7 +41,7 @@ classifiers = [
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 dependencies = [
     "black>=23.11.0",
diff --git a/dev/breeze/src/airflow_breeze/commands/minor_release_command.py b/dev/breeze/src/airflow_breeze/commands/minor_release_command.py
index 7e7ffeb6e60bb..4dec224fef0a7 100644
--- a/dev/breeze/src/airflow_breeze/commands/minor_release_command.py
+++ b/dev/breeze/src/airflow_breeze/commands/minor_release_command.py
@@ -191,7 +191,7 @@ def create_minor_version_branch(version_branch):
     create_branch(version_branch)
     # Build ci image
     if confirm_action("Build latest breeze image?"):
-        run_command(["breeze", "ci-image", "build", "--python", "3.9"], check=True)
+        run_command(["breeze", "ci-image", "build", "--python", "3.10"], check=True)
     # Update default branches
     update_default_branch(version_branch)
     # Commit changes
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index 603ec7a59ff82..9ab6bb4ce9fc6 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -38,7 +38,7 @@
 from multiprocessing import Pool
 from pathlib import Path
 from subprocess import DEVNULL
-from typing import IO, TYPE_CHECKING, Any, Literal, NamedTuple, Union
+from typing import IO, TYPE_CHECKING, Any, Literal, NamedTuple
 
 import click
 from rich.progress import Progress
@@ -3747,7 +3747,7 @@ def generate_issue_content(
 ):
     from github import Github, Issue, PullRequest, UnknownObjectException
 
-    PullRequestOrIssue = Union[PullRequest.PullRequest, Issue.Issue]
+    PullRequestOrIssue = PullRequest.PullRequest | Issue.Issue
     verbose = get_verbose()
 
     previous = previous_release
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py b/dev/breeze/src/airflow_breeze/global_constants.py
index a81d7cae2e2f8..184c508f6e0f8 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -44,7 +44,7 @@
 APACHE_AIRFLOW_GITHUB_REPOSITORY = "apache/airflow"
 
 # Checked before putting in build cache
-ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS = ["3.9", "3.10", "3.11", "3.12"]
+ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS = ["3.10", "3.11", "3.12"]
 DEFAULT_PYTHON_MAJOR_MINOR_VERSION = ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS[0]
 ALLOWED_ARCHITECTURES = [Architecture.X86_64, Architecture.ARM]
 # Database Backends used when starting Breeze. The "none" value means that the configuration is invalid.
@@ -384,7 +384,7 @@ def get_default_platform_machine() -> str:
 # All python versions include all past python versions available in previous branches
 # Even if we remove them from the main version. This is needed to make sure we can cherry-pick
 # changes from main to the previous branch.
-ALL_PYTHON_MAJOR_MINOR_VERSIONS = ["3.9", "3.10", "3.11", "3.12"]
+ALL_PYTHON_MAJOR_MINOR_VERSIONS = ["3.10", "3.11", "3.12"]
 CURRENT_PYTHON_MAJOR_MINOR_VERSIONS = ALL_PYTHON_MAJOR_MINOR_VERSIONS
 CURRENT_POSTGRES_VERSIONS = ["13", "14", "15", "16", "17"]
 DEFAULT_POSTGRES_VERSION = CURRENT_POSTGRES_VERSIONS[0]
@@ -727,26 +727,7 @@ def generate_provider_dependencies_if_needed():
     # END OF EXTRAS LIST UPDATED BY PRE COMMIT
 ]
 
-PROVIDERS_COMPATIBILITY_TESTS_MATRIX: list[dict[str, str | list[str]]] = [
-    {
-        "python-version": "3.9",
-        "airflow-version": "2.10.5",
-        "remove-providers": "cloudant common.messaging fab git keycloak",
-        "run-tests": "true",
-    },
-    {
-        "python-version": "3.9",
-        "airflow-version": "2.11.0",
-        "remove-providers": "cloudant common.messaging fab git keycloak",
-        "run-tests": "true",
-    },
-    {
-        "python-version": "3.9",
-        "airflow-version": "3.0.2",
-        "remove-providers": "cloudant",
-        "run-tests": "true",
-    },
-]
+PROVIDERS_COMPATIBILITY_TESTS_MATRIX: list[dict[str, str | list[str]]] = []
 
 # Number of slices for low dep tests
 NUMBER_OF_LOW_DEP_SLICES = 5
diff --git a/dev/breeze/src/airflow_breeze/params/common_build_params.py b/dev/breeze/src/airflow_breeze/params/common_build_params.py
index 95ca20283b4ee..fd20d27b36436 100644
--- a/dev/breeze/src/airflow_breeze/params/common_build_params.py
+++ b/dev/breeze/src/airflow_breeze/params/common_build_params.py
@@ -67,7 +67,7 @@ class CommonBuildParams:
     prepare_buildx_cache: bool = False
     python_image: str | None = None
     push: bool = False
-    python: str = "3.9"
+    python: str = "3.10"
     uv_http_timeout: int = DEFAULT_UV_HTTP_TIMEOUT
     dry_run: bool = False
     version_suffix: str | None = None
diff --git a/dev/breeze/src/airflow_breeze/utils/image.py b/dev/breeze/src/airflow_breeze/utils/image.py
index 0dcde4c33c775..55c9b54a8f621 100644
--- a/dev/breeze/src/airflow_breeze/utils/image.py
+++ b/dev/breeze/src/airflow_breeze/utils/image.py
@@ -18,7 +18,8 @@
 
 import subprocess
 import time
-from typing import TYPE_CHECKING, Callable
+from collections.abc import Callable
+from typing import TYPE_CHECKING
 
 from airflow_breeze.global_constants import (
     ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS,
diff --git a/dev/breeze/src/airflow_breeze/utils/packages.py b/dev/breeze/src/airflow_breeze/utils/packages.py
index 08b63372f0d8c..e330795d24c4d 100644
--- a/dev/breeze/src/airflow_breeze/utils/packages.py
+++ b/dev/breeze/src/airflow_breeze/utils/packages.py
@@ -592,7 +592,7 @@ def get_min_airflow_version(provider_id: str) -> str:
 
 
 def get_python_requires(provider_id: str) -> str:
-    python_requires = "~=3.9"
+    python_requires = "~=3.10"
     provider_details = get_provider_details(provider_id=provider_id)
     for p in provider_details.excluded_python_versions:
         python_requires += f", !={p}"
diff --git a/dev/breeze/src/airflow_breeze/utils/parallel.py b/dev/breeze/src/airflow_breeze/utils/parallel.py
index 1d6af2d174865..68dd0b30967a4 100644
--- a/dev/breeze/src/airflow_breeze/utils/parallel.py
+++ b/dev/breeze/src/airflow_breeze/utils/parallel.py
@@ -217,7 +217,7 @@ def bytes2human(n):
 def get_printable_value(key: str, value: Any) -> str:
     if key == "percent":
         return f"{value} %"
-    if isinstance(value, (int, float)):
+    if isinstance(value, int | float):
         return bytes2human(value)
     return str(value)
 
diff --git a/dev/breeze/src/airflow_breeze/utils/path_utils.py b/dev/breeze/src/airflow_breeze/utils/path_utils.py
index a9cef7c0dc1fd..be9f3c6efc82b 100644
--- a/dev/breeze/src/airflow_breeze/utils/path_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/path_utils.py
@@ -101,8 +101,12 @@ def get_package_setup_metadata_hash() -> str:
     metadata = distribution("apache-airflow-breeze").metadata
     try:
         description = metadata.json["description"]  # type: ignore[attr-defined]
-    except AttributeError:
-        description = metadata.as_string()
+    except (AttributeError, KeyError):
+        description = str(metadata["Description"]) if "Description" in metadata else ""
+
+    if isinstance(description, list):
+        description = "\n".join(description)
+
     for line in description.splitlines(keepends=False):
         if line.startswith(prefix):
             return line[len(prefix) :]
diff --git a/dev/breeze/src/airflow_breeze/utils/run_utils.py b/dev/breeze/src/airflow_breeze/utils/run_utils.py
index a60b6cf681482..dffb56c003012 100644
--- a/dev/breeze/src/airflow_breeze/utils/run_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/run_utils.py
@@ -30,7 +30,8 @@
 import sys
 from collections.abc import Mapping
 from pathlib import Path
-from typing import Union
+from subprocess import CalledProcessError, CompletedProcess
+from typing import Any
 
 from rich.markup import escape
 
@@ -48,7 +49,8 @@
 )
 from airflow_breeze.utils.shared_options import get_dry_run, get_verbose
 
-RunCommandResult = Union[subprocess.CompletedProcess, subprocess.CalledProcessError]
+# RunCommandResult = type[subprocess.CompletedProcess] | type[subprocess.CalledProcessError]
+RunCommandResult = CompletedProcess[Any] | CalledProcessError
 
 OPTION_MATCHER = re.compile(r"^[A-Z_]*=.*$")
 
diff --git a/dev/breeze/tests/test_cache.py b/dev/breeze/tests/test_cache.py
index 2eb501189b7d3..7d97369e2d468 100644
--- a/dev/breeze/tests/test_cache.py
+++ b/dev/breeze/tests/test_cache.py
@@ -36,8 +36,10 @@
     [
         ("backend", "mysql", (True, ["sqlite", "mysql", "postgres", "none"]), None),
         ("backend", "xxx", (False, ["sqlite", "mysql", "postgres", "none"]), None),
-        ("python_major_minor_version", "3.9", (True, ["3.9", "3.10", "3.11", "3.12"]), None),
-        ("python_major_minor_version", "3.8", (False, ["3.9", "3.10", "3.11", "3.12"]), None),
+        ("python_major_minor_version", "3.10", (True, ["3.10", "3.11", "3.12"]), None),
+        ("python_major_minor_version", "3.9", (False, ["3.10", "3.11", "3.12"]), None),
+        ("python_major_minor_version", "3.8", (False, ["3.10", "3.11", "3.12"]), None),
+        ("python_major_minor_version", "3.7", (False, ["3.10", "3.11", "3.12"]), None),
         ("missing", "value", None, AttributeError),
     ],
 )
diff --git a/dev/breeze/tests/test_selective_checks.py b/dev/breeze/tests/test_selective_checks.py
index cc3b5e4abc0df..1b052ce7ada62 100644
--- a/dev/breeze/tests/test_selective_checks.py
+++ b/dev/breeze/tests/test_selective_checks.py
@@ -16,7 +16,6 @@
 # under the License.
 from __future__ import annotations
 
-import itertools
 import json
 import re
 from typing import Any
@@ -54,21 +53,15 @@
 ALL_PYTHON_VERSIONS_AS_STRING = " ".join(ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS)
 ALL_PYTHON_VERSIONS_AS_LIST = "[" + ", ".join([f"'{v}'" for v in ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS]) + "]"
 
+PYTHON_K8S_COMBO_LENGTH = max(len(ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS), len(ALLOWED_KUBERNETES_VERSIONS))
+PYTHON_VERSIONS_MAX = (ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS * 2)[:PYTHON_K8S_COMBO_LENGTH]
+KUBERNETES_VERSIONS_MAX = (ALLOWED_KUBERNETES_VERSIONS * 2)[:PYTHON_K8S_COMBO_LENGTH]
+
 ZIP_PYTHON_AND_KUBERNETES_VERSIONS_AS_STRING = " ".join(
-    [
-        f"{t[0]}-{t[1]}"
-        for t in itertools.zip_longest(ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS, ALLOWED_KUBERNETES_VERSIONS)
-    ]
+    [f"{t[0]}-{t[1]}" for t in zip(PYTHON_VERSIONS_MAX, KUBERNETES_VERSIONS_MAX)]
 )
 ZIP_PYTHON_AND_KUBERNETES_VERSIONS_AS_LIST = (
-    "["
-    + ", ".join(
-        [
-            f"'{t[0]}-{t[1]}'"
-            for t in itertools.zip_longest(ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS, ALLOWED_KUBERNETES_VERSIONS)
-        ]
-    )
-    + "]"
+    "[" + ", ".join([f"'{t[0]}-{t[1]}'" for t in zip(PYTHON_VERSIONS_MAX, KUBERNETES_VERSIONS_MAX)]) + "]"
 )
 
 
@@ -814,9 +807,9 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 ("generated/provider_dependencies.json",),
                 {
                     "selected-providers-list-as-string": ALL_PROVIDERS_AFFECTED,
-                    "all-python-versions": "['3.9', '3.10', '3.11', '3.12']",
+                    "all-python-versions": "['3.10', '3.11', '3.12']",
                     "all-python-versions-list-as-string": ALL_PYTHON_VERSIONS_AS_STRING,
-                    "python-versions": "['3.9', '3.10', '3.11', '3.12']",
+                    "python-versions": "['3.10', '3.11', '3.12']",
                     "python-versions-list-as-string": ALL_PYTHON_VERSIONS_AS_STRING,
                     "ci-image-build": "true",
                     "prod-image-build": "true",
@@ -841,9 +834,9 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 ("generated/provider_dependencies.json",),
                 {
                     "selected-providers-list-as-string": ALL_PROVIDERS_AFFECTED,
-                    "all-python-versions": "['3.9', '3.10', '3.11', '3.12']",
+                    "all-python-versions": "['3.10', '3.11', '3.12']",
                     "all-python-versions-list-as-string": ALL_PYTHON_VERSIONS_AS_STRING,
-                    "python-versions": "['3.9', '3.10', '3.11', '3.12']",
+                    "python-versions": "['3.10', '3.11', '3.12']",
                     "python-versions-list-as-string": ALL_PYTHON_VERSIONS_AS_STRING,
                     "ci-image-build": "true",
                     "prod-image-build": "true",
@@ -1345,7 +1338,10 @@ def test_excluded_providers():
     )
     assert_outputs_are_printed(
         {
-            "excluded-providers-as-string": json.dumps({DEFAULT_PYTHON_MAJOR_MINOR_VERSION: ["cloudant"]}),
+            # In case dict is empty we have no exclusions.
+            # if you need to exclude version use syntax
+            # {DEFAULT_PYTHON_MAJOR_MINOR_VERSION: ["provider_name_package"]}
+            "excluded-providers-as-string": json.dumps({}),
         },
         str(stderr),
     )
@@ -1448,11 +1444,11 @@ def test_full_test_needed_when_scripts_changes(files: tuple[str, ...], expected_
                 {
                     "selected-providers-list-as-string": ALL_PROVIDERS_AFFECTED,
                     "all-versions": "true",
-                    "all-python-versions": "['3.9', '3.10', '3.11', '3.12']",
+                    "all-python-versions": "['3.10', '3.11', '3.12']",
                     "all-python-versions-list-as-string": ALL_PYTHON_VERSIONS_AS_STRING,
                     "mysql-versions": "['8.0', '8.4']",
                     "postgres-versions": "['13', '14', '15', '16', '17']",
-                    "python-versions": "['3.9', '3.10', '3.11', '3.12']",
+                    "python-versions": "['3.10', '3.11', '3.12']",
                     "python-versions-list-as-string": ALL_PYTHON_VERSIONS_AS_STRING,
                     "kubernetes-versions": ALL_KUBERNETES_VERSIONS_AS_LIST,
                     "kubernetes-versions-list-as-string": ALL_KUBERNETES_VERSIONS_AS_STRING,
@@ -1827,7 +1823,7 @@ def test_expected_output_pull_request_v2_7(
             "main",
             {
                 "selected-providers-list-as-string": ALL_PROVIDERS_AFFECTED,
-                "all-python-versions": "['3.9', '3.10', '3.11', '3.12']",
+                "all-python-versions": "['3.10', '3.11', '3.12']",
                 "all-python-versions-list-as-string": ALL_PYTHON_VERSIONS_AS_STRING,
                 "ci-image-build": "true",
                 "prod-image-build": "true",
@@ -1848,7 +1844,7 @@ def test_expected_output_pull_request_v2_7(
             (),
             "v2-3-stable",
             {
-                "all-python-versions": "['3.9', '3.10', '3.11', '3.12']",
+                "all-python-versions": "['3.10', '3.11', '3.12']",
                 "all-python-versions-list-as-string": ALL_PYTHON_VERSIONS_AS_STRING,
                 "ci-image-build": "true",
                 "prod-image-build": "true",
@@ -1871,7 +1867,7 @@ def test_expected_output_pull_request_v2_7(
             "main",
             {
                 "selected-providers-list-as-string": ALL_PROVIDERS_AFFECTED,
-                "all-python-versions": "['3.9', '3.10', '3.11', '3.12']",
+                "all-python-versions": "['3.10', '3.11', '3.12']",
                 "all-python-versions-list-as-string": ALL_PYTHON_VERSIONS_AS_STRING,
                 "ci-image-build": "true",
                 "prod-image-build": "true",
@@ -2155,7 +2151,7 @@ def test_files_provided_trigger_full_build_for_any_event_type(github_event):
     )
     assert_outputs_are_printed(
         {
-            "all-python-versions": "['3.9', '3.10', '3.11', '3.12']",
+            "all-python-versions": "['3.10', '3.11', '3.12']",
             "all-python-versions-list-as-string": ALL_PYTHON_VERSIONS_AS_STRING,
             "ci-image-build": "true",
             "prod-image-build": "true",
diff --git a/dev/breeze/tests/test_shell_params.py b/dev/breeze/tests/test_shell_params.py
index dbcd085ae56d1..917e124972dc2 100644
--- a/dev/breeze/tests/test_shell_params.py
+++ b/dev/breeze/tests/test_shell_params.py
@@ -43,30 +43,30 @@
         ),
         pytest.param(
             {},
-            {"python": "3.9"},
+            {"python": "3.10"},
             {
-                "AIRFLOW_CI_IMAGE": f"ghcr.io/apache/airflow/{AIRFLOW_BRANCH}/ci/python3.9",
-                "PYTHON_MAJOR_MINOR_VERSION": "3.9",
+                "AIRFLOW_CI_IMAGE": f"ghcr.io/apache/airflow/{AIRFLOW_BRANCH}/ci/python3.10",
+                "PYTHON_MAJOR_MINOR_VERSION": "3.10",
             },
-            id="python3.9",
+            id="python3.10",
         ),
         pytest.param(
             {},
-            {"airflow_branch": "v2-7-test"},
+            {"airflow_branch": "v3-0-test"},
             {
-                "DEFAULT_BRANCH": "v2-7-test",
-                "AIRFLOW_CI_IMAGE": "ghcr.io/apache/airflow/v2-7-test/ci/python3.9",
-                "PYTHON_MAJOR_MINOR_VERSION": "3.9",
+                "DEFAULT_BRANCH": "v3-0-test",
+                "AIRFLOW_CI_IMAGE": "ghcr.io/apache/airflow/v3-0-test/ci/python3.10",
+                "PYTHON_MAJOR_MINOR_VERSION": "3.10",
             },
             id="With release branch",
         ),
         pytest.param(
-            {"DEFAULT_BRANCH": "v2-4-test"},
+            {"DEFAULT_BRANCH": "v3-0-test"},
             {},
             {
                 "DEFAULT_BRANCH": AIRFLOW_BRANCH,  # DEFAULT_BRANCH is overridden from sources
-                "AIRFLOW_CI_IMAGE": f"ghcr.io/apache/airflow/{AIRFLOW_BRANCH}/ci/python3.9",
-                "PYTHON_MAJOR_MINOR_VERSION": "3.9",
+                "AIRFLOW_CI_IMAGE": f"ghcr.io/apache/airflow/{AIRFLOW_BRANCH}/ci/python3.10",
+                "PYTHON_MAJOR_MINOR_VERSION": "3.10",
             },
             id="Branch variable from sources not from original env",
         ),
diff --git a/dev/pyproject.toml b/dev/pyproject.toml
index 48e83b1889497..d81ae70ee33a5 100644
--- a/dev/pyproject.toml
+++ b/dev/pyproject.toml
@@ -26,7 +26,7 @@ description = "Development tools for Apache Airflow"
 classifiers = [
     "Private :: Do Not Upload",
 ]
-requires-python = "~=3.9,<3.13"
+requires-python = "~=3.10,<3.13"
 authors = [
     { name = "Apache Software Foundation", email = "dev@airflow.apache.org" },
 ]
diff --git a/dev/refresh_images.sh b/dev/refresh_images.sh
index 5ac46d74f9af5..46700cd75ee4e 100755
--- a/dev/refresh_images.sh
+++ b/dev/refresh_images.sh
@@ -26,7 +26,7 @@ export PLATFORM=${PLATFORM:="linux/amd64,linux/arm64"}
 
 breeze setup self-upgrade --use-current-airflow-sources
 
-for PYTHON in 3.9 3.10 3.11 3.12
+for PYTHON in 3.10 3.11 3.12
 do
     breeze ci-image build \
          --builder airflow_cache \
diff --git a/dev/retag_docker_images.py b/dev/retag_docker_images.py
index edb4c6856c7b1..96aad03b8feeb 100755
--- a/dev/retag_docker_images.py
+++ b/dev/retag_docker_images.py
@@ -32,7 +32,7 @@
 
 import rich_click as click
 
-PYTHON_VERSIONS = ["3.9", "3.10", "3.11", "3.12"]
+PYTHON_VERSIONS = ["3.10", "3.11", "3.12"]
 
 GHCR_IO_PREFIX = "ghcr.io"
 
diff --git a/devel-common/src/docs/build_docs.py b/devel-common/src/docs/build_docs.py
index f45706f1bd47b..081561ff3badd 100755
--- a/devel-common/src/docs/build_docs.py
+++ b/devel-common/src/docs/build_docs.py
@@ -29,9 +29,9 @@
 import shutil
 import sys
 from collections import defaultdict
-from collections.abc import Iterable, Sequence
+from collections.abc import Callable, Iterable, Sequence
 from pathlib import Path
-from typing import Any, Callable, NamedTuple, TypeVar
+from typing import Any, NamedTuple, TypeVar
 
 import rich_click as click
 from click import Choice
diff --git a/devel-common/src/sphinx_exts/operators_and_hooks_ref.py b/devel-common/src/sphinx_exts/operators_and_hooks_ref.py
index 496a45db09ba5..54d4fe86215ca 100644
--- a/devel-common/src/sphinx_exts/operators_and_hooks_ref.py
+++ b/devel-common/src/sphinx_exts/operators_and_hooks_ref.py
@@ -287,7 +287,7 @@ def analyze_decorators(node, _file_path, object_type, _class_name=None):
         if isinstance(child, ast.ClassDef):
             analyze_decorators(child, file_path, object_type="class")
             deprecations.extend(_iter_module_for_deprecations(child, file_path, class_name=child.name))
-        elif isinstance(child, (ast.FunctionDef, ast.AsyncFunctionDef)):
+        elif isinstance(child, ast.FunctionDef | ast.AsyncFunctionDef):
             analyze_decorators(
                 child, file_path, _class_name=class_name, object_type="method" if class_name else "function"
             )
diff --git a/devel-common/src/sphinx_exts/providers_extensions.py b/devel-common/src/sphinx_exts/providers_extensions.py
index 7e040d53870a6..78a0a40df820a 100644
--- a/devel-common/src/sphinx_exts/providers_extensions.py
+++ b/devel-common/src/sphinx_exts/providers_extensions.py
@@ -20,10 +20,10 @@
 
 import ast
 import os
-from collections.abc import Iterable
+from collections.abc import Callable, Iterable
 from functools import partial
 from pathlib import Path
-from typing import Any, Callable
+from typing import Any
 
 # No stub exists for docutils.parsers.rst.directives. See https://github.com/python/typeshed/issues/5755.
 from provider_yaml_utils import load_package_data
@@ -140,7 +140,7 @@ def get_import_mappings(tree) -> dict[str, str]:
     """
     imports = {}
     for node in ast.walk(tree):
-        if isinstance(node, (ast.Import, ast.ImportFrom)):
+        if isinstance(node, ast.Import | ast.ImportFrom):
             for alias in node.names:
                 module_prefix = f"{node.module}." if hasattr(node, "module") and node.module else ""
                 imports[alias.asname or alias.name] = f"{module_prefix}{alias.name}"
diff --git a/devel-common/src/sphinx_exts/removemarktransform.py b/devel-common/src/sphinx_exts/removemarktransform.py
index bb65d026bce93..9561baa9ff43c 100644
--- a/devel-common/src/sphinx_exts/removemarktransform.py
+++ b/devel-common/src/sphinx_exts/removemarktransform.py
@@ -61,7 +61,7 @@ def is_pycode(node: nodes.literal_block) -> bool:
         if language == "guess":
             try:
                 lexer = guess_lexer(node.rawsource)
-                return isinstance(lexer, (PythonLexer, Python3Lexer))
+                return isinstance(lexer, PythonLexer | Python3Lexer)
             except Exception:
                 pass
 
diff --git a/devel-common/src/sphinx_exts/substitution_extensions.py b/devel-common/src/sphinx_exts/substitution_extensions.py
index faa9501ffee77..5fe68e1d55106 100644
--- a/devel-common/src/sphinx_exts/substitution_extensions.py
+++ b/devel-common/src/sphinx_exts/substitution_extensions.py
@@ -60,7 +60,7 @@ class SubstitutionCodeBlockTransform(SphinxTransform):
 
     def apply(self, **kwargs: Any) -> None:
         def condition(node):
-            return isinstance(node, (nodes.literal_block, nodes.literal))
+            return isinstance(node, nodes.literal_block | nodes.literal)
 
         for node in self.document.traverse(condition):
             if _SUBSTITUTION_OPTION_NAME not in node:
diff --git a/devel-common/src/tests_common/_internals/capture_warnings.py b/devel-common/src/tests_common/_internals/capture_warnings.py
index cc17ae5cf0a11..784b4174c9207 100644
--- a/devel-common/src/tests_common/_internals/capture_warnings.py
+++ b/devel-common/src/tests_common/_internals/capture_warnings.py
@@ -24,11 +24,11 @@
 import site
 import sys
 import warnings
-from collections.abc import Generator
+from collections.abc import Callable, Generator
 from contextlib import contextmanager
 from dataclasses import asdict, dataclass
 from pathlib import Path
-from typing import TYPE_CHECKING, Callable
+from typing import TYPE_CHECKING
 
 import pytest
 
diff --git a/devel-common/src/tests_common/_internals/forbidden_warnings.py b/devel-common/src/tests_common/_internals/forbidden_warnings.py
index 6e231160e70b9..77e08c9320f49 100644
--- a/devel-common/src/tests_common/_internals/forbidden_warnings.py
+++ b/devel-common/src/tests_common/_internals/forbidden_warnings.py
@@ -34,7 +34,7 @@ class ForbiddenWarningsPlugin:
     def __init__(self, config: pytest.Config, forbidden_warnings: tuple[str, ...]):
         # Set by a pytest_configure hook in conftest
         deprecations_ignore = config.inicfg["airflow_deprecations_ignore"]
-        if isinstance(deprecations_ignore, (str, os.PathLike)):
+        if isinstance(deprecations_ignore, str | os.PathLike):
             self.deprecations_ignore = [deprecations_ignore]
         else:
             self.deprecations_ignore = deprecations_ignore
diff --git a/devel-common/src/tests_common/pytest_plugin.py b/devel-common/src/tests_common/pytest_plugin.py
index ba3e209901938..0edee542cd67e 100644
--- a/devel-common/src/tests_common/pytest_plugin.py
+++ b/devel-common/src/tests_common/pytest_plugin.py
@@ -26,11 +26,11 @@
 import subprocess
 import sys
 import warnings
-from collections.abc import Generator
+from collections.abc import Callable, Generator
 from contextlib import ExitStack, suppress
 from datetime import datetime, timedelta, timezone
 from pathlib import Path
-from typing import TYPE_CHECKING, Any, Callable, Protocol, TypeVar
+from typing import TYPE_CHECKING, Any, Protocol, TypeVar
 from unittest import mock
 
 import pytest
diff --git a/devel-common/src/tests_common/test_utils/perf/perf_kit/sqlalchemy.py b/devel-common/src/tests_common/test_utils/perf/perf_kit/sqlalchemy.py
index ff17f17b1962b..3ef6ff84fe0b5 100644
--- a/devel-common/src/tests_common/test_utils/perf/perf_kit/sqlalchemy.py
+++ b/devel-common/src/tests_common/test_utils/perf/perf_kit/sqlalchemy.py
@@ -19,7 +19,7 @@
 import os
 import time
 import traceback
-from typing import Callable
+from collections.abc import Callable
 
 from sqlalchemy import event
 
diff --git a/devel-common/src/tests_common/test_utils/system_tests.py b/devel-common/src/tests_common/test_utils/system_tests.py
index 1ba90d24ec811..0950922308867 100644
--- a/devel-common/src/tests_common/test_utils/system_tests.py
+++ b/devel-common/src/tests_common/test_utils/system_tests.py
@@ -18,7 +18,8 @@
 
 import logging
 import os
-from typing import TYPE_CHECKING, Callable
+from collections.abc import Callable
+from typing import TYPE_CHECKING
 
 import pytest
 from tabulate import tabulate
diff --git a/generated/PYPI_README.md b/generated/PYPI_README.md
index 247aca59627da..def66279f2164 100644
--- a/generated/PYPI_README.md
+++ b/generated/PYPI_README.md
@@ -58,7 +58,7 @@ Apache Airflow is tested with:
 
 |            | Main version (dev)     | Stable version (3.0.2) |
 |------------|------------------------|------------------------|
-| Python     | 3.9, 3.10, 3.11, 3.12  | 3.9, 3.10, 3.11, 3.12  |
+| Python     | 3.10, 3.11, 3.12       | 3.9, 3.10, 3.11, 3.12  |
 | Platform   | AMD64/ARM64(\*)        | AMD64/ARM64(\*)        |
 | Kubernetes | 1.30, 1.31, 1.32, 1.33 | 1.30, 1.31, 1.32, 1.33 |
 | PostgreSQL | 13, 14, 15, 16, 17     | 13, 14, 15, 16, 17     |
diff --git a/performance/src/performance_dags/performance_dag/performance_dag_utils.py b/performance/src/performance_dags/performance_dag/performance_dag_utils.py
index e37264a228f83..7dbf79c0e944d 100644
--- a/performance/src/performance_dags/performance_dag/performance_dag_utils.py
+++ b/performance/src/performance_dags/performance_dag/performance_dag_utils.py
@@ -24,10 +24,10 @@
 import re
 import tempfile
 from collections import OrderedDict
+from collections.abc import Callable
 from contextlib import contextmanager
 from datetime import datetime, timedelta
 from shutil import copyfile
-from typing import Callable
 
 import airflow
 
diff --git a/providers-summary-docs/installing-from-pypi.rst b/providers-summary-docs/installing-from-pypi.rst
index 86f2cf61e990d..e7ceb98161c36 100644
--- a/providers-summary-docs/installing-from-pypi.rst
+++ b/providers-summary-docs/installing-from-pypi.rst
@@ -45,6 +45,6 @@ Typical command to install Airflow from PyPI looks like below (you need to use t
 
 .. code-block::
 
-    pip install "apache-airflow-providers-celery" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.10.2/constraints-3.9.txt"
+    pip install "apache-airflow-providers-celery" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.10.2/constraints-3.10.txt"
 
 This is an example, see :doc:`apache-airflow:installation/installing-from-pypi` for more examples, including how to upgrade the providers.
diff --git a/providers/airbyte/pyproject.toml b/providers/airbyte/pyproject.toml
index 1c3499c67052d..c9689d8a43185 100644
--- a/providers/airbyte/pyproject.toml
+++ b/providers/airbyte/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/alibaba/pyproject.toml b/providers/alibaba/pyproject.toml
index bd2a0535e8708..f59305e8deef1 100644
--- a/providers/alibaba/pyproject.toml
+++ b/providers/alibaba/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/alibaba/src/airflow/providers/alibaba/cloud/hooks/analyticdb_spark.py b/providers/alibaba/src/airflow/providers/alibaba/cloud/hooks/analyticdb_spark.py
index 73b6b33e66992..b9bb25766be44 100644
--- a/providers/alibaba/src/airflow/providers/alibaba/cloud/hooks/analyticdb_spark.py
+++ b/providers/alibaba/src/airflow/providers/alibaba/cloud/hooks/analyticdb_spark.py
@@ -306,8 +306,8 @@ def _validate_list_of_stringables(vals: Sequence[str | int | float]) -> bool:
         """
         if (
             vals is None
-            or not isinstance(vals, (tuple, list))
-            or not all(isinstance(val, (str, int, float)) for val in vals)
+            or not isinstance(vals, tuple | list)
+            or not all(isinstance(val, str | int | float) for val in vals)
         ):
             raise ValueError("List of strings expected")
         return True
@@ -322,7 +322,7 @@ def _validate_extra_conf(conf: dict[Any, Any]) -> bool:
         if conf:
             if not isinstance(conf, dict):
                 raise ValueError("'conf' argument must be a dict")
-            if not all(isinstance(v, (str, int)) and v != "" for v in conf.values()):
+            if not all(isinstance(v, str | int) and v != "" for v in conf.values()):
                 raise ValueError("'conf' values must be either strings or ints")
         return True
 
diff --git a/providers/alibaba/src/airflow/providers/alibaba/cloud/hooks/maxcompute.py b/providers/alibaba/src/airflow/providers/alibaba/cloud/hooks/maxcompute.py
index 94de067b07d9b..593f91a5c51c6 100644
--- a/providers/alibaba/src/airflow/providers/alibaba/cloud/hooks/maxcompute.py
+++ b/providers/alibaba/src/airflow/providers/alibaba/cloud/hooks/maxcompute.py
@@ -17,7 +17,8 @@
 from __future__ import annotations
 
 import functools
-from typing import TYPE_CHECKING, Any, Callable, TypeVar
+from collections.abc import Callable
+from typing import TYPE_CHECKING, Any, TypeVar
 
 from odps import ODPS
 
diff --git a/providers/alibaba/src/airflow/providers/alibaba/cloud/hooks/oss.py b/providers/alibaba/src/airflow/providers/alibaba/cloud/hooks/oss.py
index 2f6f18d43577a..c70cad5d9a27d 100644
--- a/providers/alibaba/src/airflow/providers/alibaba/cloud/hooks/oss.py
+++ b/providers/alibaba/src/airflow/providers/alibaba/cloud/hooks/oss.py
@@ -17,9 +17,10 @@
 # under the License.
 from __future__ import annotations
 
+from collections.abc import Callable
 from functools import wraps
 from inspect import signature
-from typing import TYPE_CHECKING, Callable, TypeVar, cast
+from typing import TYPE_CHECKING, TypeVar, cast
 from urllib.parse import urlsplit
 
 import oss2
diff --git a/providers/alibaba/tests/unit/alibaba/cloud/utils/test_utils.py b/providers/alibaba/tests/unit/alibaba/cloud/utils/test_utils.py
index c4755cd53e879..3772cb1181e39 100644
--- a/providers/alibaba/tests/unit/alibaba/cloud/utils/test_utils.py
+++ b/providers/alibaba/tests/unit/alibaba/cloud/utils/test_utils.py
@@ -16,9 +16,10 @@
 # under the License.
 from __future__ import annotations
 
+from collections.abc import Callable
 from functools import wraps
 from inspect import signature
-from typing import Callable, TypeVar, cast
+from typing import TypeVar, cast
 
 T = TypeVar("T", bound=Callable)
 
diff --git a/providers/amazon/pyproject.toml b/providers/amazon/pyproject.toml
index cf9d548c8d11c..df15dae9ec335 100644
--- a/providers/amazon/pyproject.toml
+++ b/providers/amazon/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/executors/ecs/utils.py b/providers/amazon/src/airflow/providers/amazon/aws/executors/ecs/utils.py
index c7602d5a92459..f8d7f58062189 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/executors/ecs/utils.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/executors/ecs/utils.py
@@ -25,9 +25,9 @@
 
 import datetime
 from collections import defaultdict
-from collections.abc import Sequence
+from collections.abc import Callable, Sequence
 from dataclasses import dataclass
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 
 from inflection import camelize
 
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/executors/utils/exponential_backoff_retry.py b/providers/amazon/src/airflow/providers/amazon/aws/executors/utils/exponential_backoff_retry.py
index fa53011f04502..1255f56f0431f 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/executors/utils/exponential_backoff_retry.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/executors/utils/exponential_backoff_retry.py
@@ -17,8 +17,8 @@
 from __future__ import annotations
 
 import logging
+from collections.abc import Callable
 from datetime import datetime, timedelta
-from typing import Callable
 
 from airflow.utils import timezone
 
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/fs/s3.py b/providers/amazon/src/airflow/providers/amazon/aws/fs/s3.py
index e0c28d923c4bb..6eec2d90f4e7d 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/fs/s3.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/fs/s3.py
@@ -18,8 +18,9 @@
 
 import asyncio
 import logging
+from collections.abc import Callable
 from functools import partial
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 
 import requests
 from botocore import UNSIGNED
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/hooks/base_aws.py b/providers/amazon/src/airflow/providers/amazon/aws/hooks/base_aws.py
index 79641397bf485..14e20f0775a1d 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/hooks/base_aws.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/hooks/base_aws.py
@@ -31,10 +31,11 @@
 import logging
 import os
 import warnings
+from collections.abc import Callable
 from copy import deepcopy
 from functools import cached_property, wraps
 from pathlib import Path
-from typing import TYPE_CHECKING, Any, Callable, Generic, TypeVar, Union
+from typing import TYPE_CHECKING, Any, Generic, TypeVar, Union
 
 import boto3
 import botocore
@@ -43,6 +44,8 @@
 import requests
 import tenacity
 from asgiref.sync import sync_to_async
+from boto3.resources.base import ServiceResource
+from botocore.client import BaseClient
 from botocore.config import Config
 from botocore.waiter import Waiter, WaiterModel
 from dateutil.tz import tzlocal
@@ -63,7 +66,16 @@
 from airflow.utils.helpers import exactly_one
 from airflow.utils.log.logging_mixin import LoggingMixin
 
-BaseAwsConnection = TypeVar("BaseAwsConnection", bound=Union[boto3.client, boto3.resource])
+# We need to set typeignore, sadly without it Sphinx build and mypy don't agree.
+# ideally the code should be:
+# BaseAwsConnection = TypeVar("BaseAwsConnection", bound=BaseClient | ServiceResource)
+# but if we do that Sphinx complains about:
+# TypeError: unsupported operand type(s) for |: 'BaseClient' and 'ServiceResource'
+# If we change to Union syntax then mypy is not happy with UP007 Use `X | Y` for type annotations
+# The only way to workaround it for now is to keep the union syntax with ignore for mypy
+# We should try to resolve this later.
+BaseAwsConnection = TypeVar("BaseAwsConnection", bound=Union[BaseClient, ServiceResource])  # type: ignore[operator] # noqa: UP007
+
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.exceptions import AirflowRuntimeError
@@ -1038,7 +1050,7 @@ def _list_custom_waiters(self) -> list[str]:
             return WaiterModel(model_config).waiter_names
 
 
-class AwsBaseHook(AwsGenericHook[Union[boto3.client, boto3.resource]]):
+class AwsBaseHook(AwsGenericHook[Union[boto3.client, boto3.resource]]):  # type: ignore[operator] # noqa: UP007
     """
     Base class for interact with AWS.
 
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/hooks/batch_client.py b/providers/amazon/src/airflow/providers/amazon/aws/hooks/batch_client.py
index 0dcedfce08407..fcf7f4c547ceb 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/hooks/batch_client.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/hooks/batch_client.py
@@ -30,7 +30,8 @@
 import itertools
 import random
 import time
-from typing import TYPE_CHECKING, Callable, Protocol, runtime_checkable
+from collections.abc import Callable
+from typing import TYPE_CHECKING, Protocol, runtime_checkable
 
 import botocore.client
 import botocore.exceptions
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/hooks/batch_waiters.py b/providers/amazon/src/airflow/providers/amazon/aws/hooks/batch_waiters.py
index 44a39c6f2b30d..b2916d8afd884 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/hooks/batch_waiters.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/hooks/batch_waiters.py
@@ -28,9 +28,10 @@
 
 import json
 import sys
+from collections.abc import Callable
 from copy import deepcopy
 from pathlib import Path
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 
 import botocore.client
 import botocore.exceptions
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/hooks/ec2.py b/providers/amazon/src/airflow/providers/amazon/aws/hooks/ec2.py
index ef4f374eb7b76..7e3af904fdcfb 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/hooks/ec2.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/hooks/ec2.py
@@ -19,7 +19,8 @@
 
 import functools
 import time
-from typing import Callable, TypeVar
+from collections.abc import Callable
+from typing import TypeVar
 
 from airflow.exceptions import AirflowException
 from airflow.providers.amazon.aws.hooks.base_aws import AwsBaseHook
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/hooks/eks.py b/providers/amazon/src/airflow/providers/amazon/aws/hooks/eks.py
index 210301590ee1e..6a80e20b7a81e 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/hooks/eks.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/hooks/eks.py
@@ -23,11 +23,10 @@
 import os
 import sys
 import tempfile
-from collections.abc import Generator
+from collections.abc import Callable, Generator
 from contextlib import contextmanager
 from enum import Enum
 from functools import partial
-from typing import Callable
 
 from botocore.exceptions import ClientError
 from botocore.signers import RequestSigner
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/hooks/rds.py b/providers/amazon/src/airflow/providers/amazon/aws/hooks/rds.py
index f58b089d7df1f..0ecba13f63050 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/hooks/rds.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/hooks/rds.py
@@ -20,7 +20,8 @@
 from __future__ import annotations
 
 import time
-from typing import TYPE_CHECKING, Callable
+from collections.abc import Callable
+from typing import TYPE_CHECKING
 
 from airflow.exceptions import AirflowException, AirflowNotFoundException
 from airflow.providers.amazon.aws.hooks.base_aws import AwsGenericHook
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/hooks/s3.py b/providers/amazon/src/airflow/providers/amazon/aws/hooks/s3.py
index 578ba2a2c4646..a432534fab3c3 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/hooks/s3.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/hooks/s3.py
@@ -28,7 +28,7 @@
 import re
 import shutil
 import time
-from collections.abc import AsyncIterator
+from collections.abc import AsyncIterator, Callable
 from contextlib import suppress
 from copy import deepcopy
 from datetime import datetime
@@ -37,7 +37,7 @@
 from io import BytesIO
 from pathlib import Path
 from tempfile import NamedTemporaryFile, gettempdir
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 from urllib.parse import urlsplit
 from uuid import uuid4
 
@@ -652,7 +652,7 @@ async def get_files_async(
             response = paginator.paginate(**params)
             async for page in response:
                 if "Contents" in page:
-                    keys.extend(k for k in page["Contents"] if isinstance(k.get("Size"), (int, float)))
+                    keys.extend(k for k in page["Contents"] if isinstance(k.get("Size"), int | float))
         return keys
 
     async def _list_keys_async(
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/hooks/sagemaker.py b/providers/amazon/src/airflow/providers/amazon/aws/hooks/sagemaker.py
index a785cc5ce83cb..fad70bc4002a9 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/hooks/sagemaker.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/hooks/sagemaker.py
@@ -23,10 +23,10 @@
 import tempfile
 import time
 from collections import Counter, namedtuple
-from collections.abc import AsyncGenerator, Generator
+from collections.abc import AsyncGenerator, Callable, Generator
 from datetime import datetime
 from functools import partial
-from typing import Any, Callable, cast
+from typing import Any, cast
 
 from asgiref.sync import sync_to_async
 from botocore.exceptions import ClientError
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/hooks/sns.py b/providers/amazon/src/airflow/providers/amazon/aws/hooks/sns.py
index 00315fbddc370..275df5b69a907 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/hooks/sns.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/hooks/sns.py
@@ -29,7 +29,7 @@ def _get_message_attribute(o):
         return {"DataType": "Binary", "BinaryValue": o}
     if isinstance(o, str):
         return {"DataType": "String", "StringValue": o}
-    if isinstance(o, (int, float)):
+    if isinstance(o, int | float):
         return {"DataType": "Number", "StringValue": str(o)}
     if hasattr(o, "__iter__"):
         return {"DataType": "String.Array", "StringValue": json.dumps(o)}
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/log/cloudwatch_task_handler.py b/providers/amazon/src/airflow/providers/amazon/aws/log/cloudwatch_task_handler.py
index b5f6aaa12662b..2eab684130c42 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/log/cloudwatch_task_handler.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/log/cloudwatch_task_handler.py
@@ -55,7 +55,7 @@ def json_serialize_legacy(value: Any) -> str | None:
     :param value: the object to serialize
     :return: string representation of `value` if it is an instance of datetime or `None` otherwise
     """
-    if isinstance(value, (date, datetime)):
+    if isinstance(value, date | datetime):
         return value.isoformat()
     return None
 
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/operators/s3.py b/providers/amazon/src/airflow/providers/amazon/aws/operators/s3.py
index f486084f34de0..1757614101a19 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/operators/s3.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/operators/s3.py
@@ -536,7 +536,7 @@ def execute(self, context: Context):
                 "Either keys or at least one of prefix, from_datetime, to_datetime should be set."
             )
 
-        if isinstance(self.keys, (list, str)) and not self.keys:
+        if isinstance(self.keys, list | str) and not self.keys:
             return
         # handle case where dates are strings, specifically when sent as template fields and macros.
         if isinstance(self.to_datetime, str):
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/operators/sagemaker.py b/providers/amazon/src/airflow/providers/amazon/aws/operators/sagemaker.py
index 1653038fbb804..23bcb0e17b28a 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/operators/sagemaker.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/operators/sagemaker.py
@@ -20,8 +20,8 @@
 import json
 import time
 import urllib
-from collections.abc import Sequence
-from typing import TYPE_CHECKING, Any, Callable, ClassVar
+from collections.abc import Callable, Sequence
+from typing import TYPE_CHECKING, Any, ClassVar
 
 from botocore.exceptions import ClientError
 
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/sensors/s3.py b/providers/amazon/src/airflow/providers/amazon/aws/sensors/s3.py
index 8a34812eca6a4..844e8ec304832 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/sensors/s3.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/sensors/s3.py
@@ -21,9 +21,9 @@
 import inspect
 import os
 import re
-from collections.abc import Sequence
+from collections.abc import Callable, Sequence
 from datetime import datetime, timedelta
-from typing import TYPE_CHECKING, Any, Callable, cast
+from typing import TYPE_CHECKING, Any, cast
 
 from airflow.configuration import conf
 from airflow.providers.amazon.aws.utils import validate_execute_complete_event
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/transfers/dynamodb_to_s3.py b/providers/amazon/src/airflow/providers/amazon/aws/transfers/dynamodb_to_s3.py
index d7e7a9e967cc5..266648f1dc151 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/transfers/dynamodb_to_s3.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/transfers/dynamodb_to_s3.py
@@ -20,13 +20,13 @@
 
 import json
 import os
-from collections.abc import Sequence
+from collections.abc import Callable, Sequence
 from copy import copy
 from datetime import datetime
 from decimal import Decimal
 from functools import cached_property
 from tempfile import NamedTemporaryFile
-from typing import IO, TYPE_CHECKING, Any, Callable
+from typing import IO, TYPE_CHECKING, Any
 from uuid import uuid4
 
 from airflow.providers.amazon.aws.hooks.base_aws import AwsBaseHook
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/transfers/hive_to_dynamodb.py b/providers/amazon/src/airflow/providers/amazon/aws/transfers/hive_to_dynamodb.py
index 4e715eba6439f..c96ae1d96c155 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/transfers/hive_to_dynamodb.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/transfers/hive_to_dynamodb.py
@@ -20,8 +20,8 @@
 from __future__ import annotations
 
 import json
-from collections.abc import Sequence
-from typing import TYPE_CHECKING, Callable
+from collections.abc import Callable, Sequence
+from typing import TYPE_CHECKING
 
 from airflow.models import BaseOperator
 from airflow.providers.amazon.aws.hooks.dynamodb import DynamoDBHook
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/transfers/s3_to_sql.py b/providers/amazon/src/airflow/providers/amazon/aws/transfers/s3_to_sql.py
index 16250d2f78ece..baeceb4387650 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/transfers/s3_to_sql.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/transfers/s3_to_sql.py
@@ -16,10 +16,10 @@
 # under the License.
 from __future__ import annotations
 
-from collections.abc import Iterable, Sequence
+from collections.abc import Callable, Iterable, Sequence
 from functools import cached_property
 from tempfile import NamedTemporaryFile
-from typing import TYPE_CHECKING, Callable
+from typing import TYPE_CHECKING
 
 from airflow.exceptions import AirflowException
 from airflow.hooks.base import BaseHook
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/transfers/sql_to_s3.py b/providers/amazon/src/airflow/providers/amazon/aws/transfers/sql_to_s3.py
index 7d1f2656c4f2b..29f58beaf4f58 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/transfers/sql_to_s3.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/transfers/sql_to_s3.py
@@ -22,9 +22,7 @@
 import io
 from collections import namedtuple
 from collections.abc import Iterable, Mapping, Sequence
-from typing import TYPE_CHECKING, Any, cast
-
-from typing_extensions import Literal
+from typing import TYPE_CHECKING, Any, Literal, cast
 
 from airflow.exceptions import AirflowException
 from airflow.hooks.base import BaseHook
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/utils/connection_wrapper.py b/providers/amazon/src/airflow/providers/amazon/aws/utils/connection_wrapper.py
index ef2ca7b4cb343..79e6b966bc056 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/utils/connection_wrapper.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/utils/connection_wrapper.py
@@ -187,7 +187,7 @@ def __post_init__(self, conn: Connection | AwsConnectionWrapper | _ConnectionMet
             return
 
         if TYPE_CHECKING:
-            assert isinstance(conn, (Connection, _ConnectionMetadata))
+            assert isinstance(conn, Connection | _ConnectionMetadata)
 
         # Assign attributes from AWS Connection
         self.conn_id = conn.conn_id
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/utils/suppress.py b/providers/amazon/src/airflow/providers/amazon/aws/utils/suppress.py
index 908106f0c3165..7105840f4b4f4 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/utils/suppress.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/utils/suppress.py
@@ -28,8 +28,9 @@
 from __future__ import annotations
 
 import logging
+from collections.abc import Callable
 from functools import wraps
-from typing import Callable, TypeVar
+from typing import TypeVar
 
 from airflow.typing_compat import ParamSpec
 
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/utils/waiter.py b/providers/amazon/src/airflow/providers/amazon/aws/utils/waiter.py
index 72e03cec5d619..d079d5688a9b7 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/utils/waiter.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/utils/waiter.py
@@ -19,8 +19,8 @@
 
 import logging
 import time
+from collections.abc import Callable
 from enum import Enum
-from typing import Callable
 
 from airflow.exceptions import AirflowException
 
diff --git a/providers/amazon/tests/unit/amazon/aws/executors/ecs/test_ecs_executor.py b/providers/amazon/tests/unit/amazon/aws/executors/ecs/test_ecs_executor.py
index ff7b9699c98a0..6d0b0055906e1 100644
--- a/providers/amazon/tests/unit/amazon/aws/executors/ecs/test_ecs_executor.py
+++ b/providers/amazon/tests/unit/amazon/aws/executors/ecs/test_ecs_executor.py
@@ -22,8 +22,8 @@
 import os
 import re
 import time
+from collections.abc import Callable
 from functools import partial
-from typing import Callable
 from unittest import mock
 from unittest.mock import MagicMock
 
diff --git a/providers/amazon/tests/unit/amazon/aws/utils/eks_test_utils.py b/providers/amazon/tests/unit/amazon/aws/utils/eks_test_utils.py
index 5a000c00611f8..dbf589572796c 100644
--- a/providers/amazon/tests/unit/amazon/aws/utils/eks_test_utils.py
+++ b/providers/amazon/tests/unit/amazon/aws/utils/eks_test_utils.py
@@ -20,7 +20,7 @@
 import re
 from copy import deepcopy
 from re import Pattern
-from typing import TYPE_CHECKING, Union
+from typing import TYPE_CHECKING
 
 from unit.amazon.aws.utils.eks_test_constants import (
     STATUS,
@@ -38,7 +38,7 @@
 
     from airflow.providers.amazon.aws.hooks.eks import EksHook
 
-InputTypes = Union[type[ClusterInputs], type[NodegroupInputs], type[FargateProfileInputs]]
+InputTypes = type[ClusterInputs] | type[NodegroupInputs] | type[FargateProfileInputs]
 
 
 def attributes_to_test(
diff --git a/providers/apache/beam/pyproject.toml b/providers/apache/beam/pyproject.toml
index 0b28523ad0094..590bbe6b0429a 100644
--- a/providers/apache/beam/pyproject.toml
+++ b/providers/apache/beam/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/apache/beam/src/airflow/providers/apache/beam/hooks/beam.py b/providers/apache/beam/src/airflow/providers/apache/beam/hooks/beam.py
index 2ac4ed172d252..476a5ffc0555a 100644
--- a/providers/apache/beam/src/airflow/providers/apache/beam/hooks/beam.py
+++ b/providers/apache/beam/src/airflow/providers/apache/beam/hooks/beam.py
@@ -31,7 +31,8 @@
 import subprocess
 import tempfile
 import textwrap
-from typing import TYPE_CHECKING, Callable
+from collections.abc import Callable
+from typing import TYPE_CHECKING
 
 from packaging.version import Version
 
diff --git a/providers/apache/beam/src/airflow/providers/apache/beam/operators/beam.py b/providers/apache/beam/src/airflow/providers/apache/beam/operators/beam.py
index 073f7bb750c30..d1e3bcd411064 100644
--- a/providers/apache/beam/src/airflow/providers/apache/beam/operators/beam.py
+++ b/providers/apache/beam/src/airflow/providers/apache/beam/operators/beam.py
@@ -24,11 +24,11 @@
 import stat
 import tempfile
 from abc import ABC, ABCMeta, abstractmethod
-from collections.abc import Sequence
+from collections.abc import Callable, Sequence
 from concurrent.futures import ThreadPoolExecutor, as_completed
 from contextlib import ExitStack
 from functools import partial
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 
 from packaging.version import parse as parse_version
 
diff --git a/providers/apache/cassandra/pyproject.toml b/providers/apache/cassandra/pyproject.toml
index 23e836b52ffbb..741413d27c33d 100644
--- a/providers/apache/cassandra/pyproject.toml
+++ b/providers/apache/cassandra/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/apache/cassandra/src/airflow/providers/apache/cassandra/hooks/cassandra.py b/providers/apache/cassandra/src/airflow/providers/apache/cassandra/hooks/cassandra.py
index 2e95f36b25727..9ba9b9915ed4d 100644
--- a/providers/apache/cassandra/src/airflow/providers/apache/cassandra/hooks/cassandra.py
+++ b/providers/apache/cassandra/src/airflow/providers/apache/cassandra/hooks/cassandra.py
@@ -20,7 +20,7 @@
 from __future__ import annotations
 
 import re
-from typing import Any, Union
+from typing import Any, TypeAlias
 
 from cassandra.auth import PlainTextAuthProvider
 from cassandra.cluster import Cluster, Session
@@ -34,7 +34,7 @@
 from airflow.hooks.base import BaseHook
 from airflow.utils.log.logging_mixin import LoggingMixin
 
-Policy = Union[DCAwareRoundRobinPolicy, RoundRobinPolicy, TokenAwarePolicy, WhiteListRoundRobinPolicy]
+Policy: TypeAlias = DCAwareRoundRobinPolicy | RoundRobinPolicy | TokenAwarePolicy | WhiteListRoundRobinPolicy
 
 
 class CassandraHook(BaseHook, LoggingMixin):
diff --git a/providers/apache/drill/pyproject.toml b/providers/apache/drill/pyproject.toml
index dfb78103fd6a2..7e7e5e8ad2b99 100644
--- a/providers/apache/drill/pyproject.toml
+++ b/providers/apache/drill/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/apache/druid/pyproject.toml b/providers/apache/druid/pyproject.toml
index 8ebcd8a10ad10..7e27df39ace7f 100644
--- a/providers/apache/druid/pyproject.toml
+++ b/providers/apache/druid/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/apache/flink/pyproject.toml b/providers/apache/flink/pyproject.toml
index d30de00cd9adb..760651c11b053 100644
--- a/providers/apache/flink/pyproject.toml
+++ b/providers/apache/flink/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/apache/hdfs/pyproject.toml b/providers/apache/hdfs/pyproject.toml
index 5c6030d945fa7..05a00d868a5db 100644
--- a/providers/apache/hdfs/pyproject.toml
+++ b/providers/apache/hdfs/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/apache/hive/pyproject.toml b/providers/apache/hive/pyproject.toml
index 1fe9dd3db1781..03b114a09d803 100644
--- a/providers/apache/hive/pyproject.toml
+++ b/providers/apache/hive/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/apache/hive/src/airflow/providers/apache/hive/hooks/hive.py b/providers/apache/hive/src/airflow/providers/apache/hive/hooks/hive.py
index b3afc1a60c495..2c682ca0d3812 100644
--- a/providers/apache/hive/src/airflow/providers/apache/hive/hooks/hive.py
+++ b/providers/apache/hive/src/airflow/providers/apache/hive/hooks/hive.py
@@ -25,10 +25,10 @@
 import time
 from collections.abc import Iterable, Mapping
 from tempfile import NamedTemporaryFile, TemporaryDirectory
-from typing import TYPE_CHECKING, Any
+from typing import TYPE_CHECKING, Any, Literal
 
 from deprecated import deprecated
-from typing_extensions import Literal, overload
+from typing_extensions import overload
 
 if TYPE_CHECKING:
     import pandas as pd
diff --git a/providers/apache/hive/src/airflow/providers/apache/hive/operators/hive_stats.py b/providers/apache/hive/src/airflow/providers/apache/hive/operators/hive_stats.py
index 9b5daf1f64376..1e117de38ede6 100644
--- a/providers/apache/hive/src/airflow/providers/apache/hive/operators/hive_stats.py
+++ b/providers/apache/hive/src/airflow/providers/apache/hive/operators/hive_stats.py
@@ -18,8 +18,8 @@
 from __future__ import annotations
 
 import json
-from collections.abc import Sequence
-from typing import TYPE_CHECKING, Any, Callable
+from collections.abc import Callable, Sequence
+from typing import TYPE_CHECKING, Any
 
 from airflow.exceptions import AirflowException
 from airflow.models import BaseOperator
diff --git a/providers/apache/iceberg/pyproject.toml b/providers/apache/iceberg/pyproject.toml
index 42452d6fc7ef3..50f453cf53d7d 100644
--- a/providers/apache/iceberg/pyproject.toml
+++ b/providers/apache/iceberg/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/apache/impala/pyproject.toml b/providers/apache/impala/pyproject.toml
index f90366a36af12..fc14a81bf8743 100644
--- a/providers/apache/impala/pyproject.toml
+++ b/providers/apache/impala/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/apache/kafka/pyproject.toml b/providers/apache/kafka/pyproject.toml
index cb3cbbbb485c7..be6f78a23a6b6 100644
--- a/providers/apache/kafka/pyproject.toml
+++ b/providers/apache/kafka/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/apache/kafka/src/airflow/providers/apache/kafka/operators/consume.py b/providers/apache/kafka/src/airflow/providers/apache/kafka/operators/consume.py
index ac382c2a22be2..3dedbdca3f5c3 100644
--- a/providers/apache/kafka/src/airflow/providers/apache/kafka/operators/consume.py
+++ b/providers/apache/kafka/src/airflow/providers/apache/kafka/operators/consume.py
@@ -16,9 +16,9 @@
 # under the License.
 from __future__ import annotations
 
-from collections.abc import Sequence
+from collections.abc import Callable, Sequence
 from functools import partial
-from typing import Any, Callable
+from typing import Any
 
 from airflow.exceptions import AirflowException
 from airflow.models import BaseOperator
diff --git a/providers/apache/kafka/src/airflow/providers/apache/kafka/operators/produce.py b/providers/apache/kafka/src/airflow/providers/apache/kafka/operators/produce.py
index 6c538615eafa9..1dfc553f8a1e6 100644
--- a/providers/apache/kafka/src/airflow/providers/apache/kafka/operators/produce.py
+++ b/providers/apache/kafka/src/airflow/providers/apache/kafka/operators/produce.py
@@ -17,9 +17,9 @@
 from __future__ import annotations
 
 import logging
-from collections.abc import Sequence
+from collections.abc import Callable, Sequence
 from functools import partial
-from typing import Any, Callable
+from typing import Any
 
 from airflow.exceptions import AirflowException
 from airflow.models import BaseOperator
diff --git a/providers/apache/kafka/src/airflow/providers/apache/kafka/sensors/kafka.py b/providers/apache/kafka/src/airflow/providers/apache/kafka/sensors/kafka.py
index 9c545cd2ee6c5..afe196a29f064 100644
--- a/providers/apache/kafka/src/airflow/providers/apache/kafka/sensors/kafka.py
+++ b/providers/apache/kafka/src/airflow/providers/apache/kafka/sensors/kafka.py
@@ -16,8 +16,8 @@
 # under the License.
 from __future__ import annotations
 
-from collections.abc import Sequence
-from typing import Any, Callable
+from collections.abc import Callable, Sequence
+from typing import Any
 
 from airflow.models import BaseOperator
 from airflow.providers.apache.kafka.triggers.await_message import AwaitMessageTrigger
diff --git a/providers/apache/kylin/pyproject.toml b/providers/apache/kylin/pyproject.toml
index 71bd30a376ee5..1c5cea4d70248 100644
--- a/providers/apache/kylin/pyproject.toml
+++ b/providers/apache/kylin/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/apache/livy/pyproject.toml b/providers/apache/livy/pyproject.toml
index 1c477b5d92aae..7850a7f1cc8b0 100644
--- a/providers/apache/livy/pyproject.toml
+++ b/providers/apache/livy/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/apache/livy/src/airflow/providers/apache/livy/hooks/livy.py b/providers/apache/livy/src/airflow/providers/apache/livy/hooks/livy.py
index d1d25a9a2e3e5..2cf8957b1120b 100644
--- a/providers/apache/livy/src/airflow/providers/apache/livy/hooks/livy.py
+++ b/providers/apache/livy/src/airflow/providers/apache/livy/hooks/livy.py
@@ -441,8 +441,8 @@ def _validate_list_of_stringables(vals: Sequence[str | int | float]) -> bool:
         """
         if (
             vals is None
-            or not isinstance(vals, (tuple, list))
-            or not all(isinstance(val, (str, int, float)) for val in vals)
+            or not isinstance(vals, tuple | list)
+            or not all(isinstance(val, str | int | float) for val in vals)
         ):
             raise ValueError("List of strings expected")
         return True
@@ -458,7 +458,7 @@ def _validate_extra_conf(conf: dict[Any, Any]) -> bool:
         if conf:
             if not isinstance(conf, dict):
                 raise ValueError("'conf' argument must be a dict")
-            if not all(isinstance(v, (str, int)) and v != "" for v in conf.values()):
+            if not all(isinstance(v, str | int) and v != "" for v in conf.values()):
                 raise ValueError("'conf' values must be either strings or ints")
         return True
 
@@ -827,8 +827,8 @@ def _validate_list_of_stringables(vals: Sequence[str | int | float]) -> bool:
         """
         if (
             vals is None
-            or not isinstance(vals, (tuple, list))
-            or not all(isinstance(val, (str, int, float)) for val in vals)
+            or not isinstance(vals, tuple | list)
+            or not all(isinstance(val, str | int | float) for val in vals)
         ):
             raise ValueError("List of strings expected")
         return True
@@ -844,6 +844,6 @@ def _validate_extra_conf(conf: dict[Any, Any]) -> bool:
         if conf:
             if not isinstance(conf, dict):
                 raise ValueError("'conf' argument must be a dict")
-            if not all(isinstance(v, (str, int)) and v != "" for v in conf.values()):
+            if not all(isinstance(v, str | int) and v != "" for v in conf.values()):
                 raise ValueError("'conf' values must be either strings or ints")
         return True
diff --git a/providers/apache/pig/pyproject.toml b/providers/apache/pig/pyproject.toml
index d98fc6a6012e3..274e2d03b5e73 100644
--- a/providers/apache/pig/pyproject.toml
+++ b/providers/apache/pig/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/apache/pinot/pyproject.toml b/providers/apache/pinot/pyproject.toml
index 4875767690f53..1a1874d5bb762 100644
--- a/providers/apache/pinot/pyproject.toml
+++ b/providers/apache/pinot/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/apache/spark/pyproject.toml b/providers/apache/spark/pyproject.toml
index 542095930bf51..7b2518d0c6fc2 100644
--- a/providers/apache/spark/pyproject.toml
+++ b/providers/apache/spark/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/apache/spark/src/airflow/providers/apache/spark/decorators/pyspark.py b/providers/apache/spark/src/airflow/providers/apache/spark/decorators/pyspark.py
index 32b1a15d99882..8e93185321f1b 100644
--- a/providers/apache/spark/src/airflow/providers/apache/spark/decorators/pyspark.py
+++ b/providers/apache/spark/src/airflow/providers/apache/spark/decorators/pyspark.py
@@ -18,8 +18,8 @@
 from __future__ import annotations
 
 import inspect
-from collections.abc import Sequence
-from typing import TYPE_CHECKING, Any, Callable
+from collections.abc import Callable, Sequence
+from typing import TYPE_CHECKING, Any
 
 from airflow.providers.apache.spark.version_compat import AIRFLOW_V_3_0_PLUS
 
diff --git a/providers/apache/tinkerpop/pyproject.toml b/providers/apache/tinkerpop/pyproject.toml
index 5103986eac1a9..363a964e13b5b 100644
--- a/providers/apache/tinkerpop/pyproject.toml
+++ b/providers/apache/tinkerpop/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/apprise/pyproject.toml b/providers/apprise/pyproject.toml
index 6d45b938648ed..5675cf21bb5ce 100644
--- a/providers/apprise/pyproject.toml
+++ b/providers/apprise/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/arangodb/pyproject.toml b/providers/arangodb/pyproject.toml
index 0f4a7e0f9fd51..af1e6aff3bc2c 100644
--- a/providers/arangodb/pyproject.toml
+++ b/providers/arangodb/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/arangodb/src/airflow/providers/arangodb/operators/arangodb.py b/providers/arangodb/src/airflow/providers/arangodb/operators/arangodb.py
index 6514f756bd208..50a3421dfe73d 100644
--- a/providers/arangodb/src/airflow/providers/arangodb/operators/arangodb.py
+++ b/providers/arangodb/src/airflow/providers/arangodb/operators/arangodb.py
@@ -17,8 +17,8 @@
 # under the License.
 from __future__ import annotations
 
-from collections.abc import Sequence
-from typing import TYPE_CHECKING, Any, Callable
+from collections.abc import Callable, Sequence
+from typing import TYPE_CHECKING, Any
 
 from airflow.exceptions import AirflowException
 from airflow.models import BaseOperator
diff --git a/providers/asana/pyproject.toml b/providers/asana/pyproject.toml
index 8fe4eaabad303..4d11a30d7bb84 100644
--- a/providers/asana/pyproject.toml
+++ b/providers/asana/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/atlassian/jira/pyproject.toml b/providers/atlassian/jira/pyproject.toml
index b8993b4d4c98f..5696c2ff19f99 100644
--- a/providers/atlassian/jira/pyproject.toml
+++ b/providers/atlassian/jira/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/atlassian/jira/src/airflow/providers/atlassian/jira/operators/jira.py b/providers/atlassian/jira/src/airflow/providers/atlassian/jira/operators/jira.py
index fde6222c208a9..d1a2fe6f06a55 100644
--- a/providers/atlassian/jira/src/airflow/providers/atlassian/jira/operators/jira.py
+++ b/providers/atlassian/jira/src/airflow/providers/atlassian/jira/operators/jira.py
@@ -17,8 +17,8 @@
 # under the License.
 from __future__ import annotations
 
-from collections.abc import Sequence
-from typing import TYPE_CHECKING, Any, Callable
+from collections.abc import Callable, Sequence
+from typing import TYPE_CHECKING, Any
 
 from airflow.models import BaseOperator
 from airflow.providers.atlassian.jira.hooks.jira import JiraHook
diff --git a/providers/atlassian/jira/src/airflow/providers/atlassian/jira/sensors/jira.py b/providers/atlassian/jira/src/airflow/providers/atlassian/jira/sensors/jira.py
index ee8bfaa301407..e81c96b78e6f0 100644
--- a/providers/atlassian/jira/src/airflow/providers/atlassian/jira/sensors/jira.py
+++ b/providers/atlassian/jira/src/airflow/providers/atlassian/jira/sensors/jira.py
@@ -17,8 +17,8 @@
 # under the License.
 from __future__ import annotations
 
-from collections.abc import Sequence
-from typing import TYPE_CHECKING, Any, Callable
+from collections.abc import Callable, Sequence
+from typing import TYPE_CHECKING, Any
 
 from airflow.providers.atlassian.jira.hooks.jira import JiraHook
 from airflow.providers.atlassian.jira.version_compat import AIRFLOW_V_3_0_PLUS
diff --git a/providers/celery/pyproject.toml b/providers/celery/pyproject.toml
index 555d33f6fa4fe..37421f947fd7d 100644
--- a/providers/celery/pyproject.toml
+++ b/providers/celery/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/celery/src/airflow/providers/celery/executors/celery_executor_utils.py b/providers/celery/src/airflow/providers/celery/executors/celery_executor_utils.py
index 6bef6ae9e3e81..0259d60e35d34 100644
--- a/providers/celery/src/airflow/providers/celery/executors/celery_executor_utils.py
+++ b/providers/celery/src/airflow/providers/celery/executors/celery_executor_utils.py
@@ -32,7 +32,7 @@
 import warnings
 from collections.abc import Mapping, MutableMapping, Sequence
 from concurrent.futures import ProcessPoolExecutor
-from typing import TYPE_CHECKING, Any, Optional, Union
+from typing import TYPE_CHECKING, Any
 
 from celery import Celery, Task, states as celery_states
 from celery.backends.base import BaseKeyValueStoreBackend
@@ -71,11 +71,9 @@
     # the type as the union of both kinds
     CommandType = Sequence[str]
 
-    TaskInstanceInCelery: TypeAlias = tuple[
-        TaskInstanceKey, Union[workloads.All, CommandType], Optional[str], Task
-    ]
+    TaskInstanceInCelery: TypeAlias = tuple[TaskInstanceKey, workloads.All | CommandType, str | None, Task]
 
-    TaskTuple = tuple[TaskInstanceKey, CommandType, Optional[str], Optional[Any]]
+    TaskTuple = tuple[TaskInstanceKey, CommandType, str | None, Any | None]
 
 OPERATION_TIMEOUT = conf.getfloat("celery", "operation_timeout")
 
diff --git a/providers/cloudant/provider.yaml b/providers/cloudant/provider.yaml
index 785623450fe75..f845c7f324ba6 100644
--- a/providers/cloudant/provider.yaml
+++ b/providers/cloudant/provider.yaml
@@ -54,13 +54,6 @@ versions:
   - 1.0.1
   - 1.0.0
 
-excluded-python-versions:
-  # ibmcloudant transitively brings in urllib3 2.x, but the snowflake provider has a dependency that pins
-  # urllib3 to 1.x on Python 3.9; thus we exclude those Python versions from taking the update
-  # to ibmcloudant.
-  # See #21004, #41555, and https://github.com/snowflakedb/snowflake-connector-python/issues/2016
-  - "3.9"
-
 integrations:
   - integration-name: IBM Cloudant
     external-doc-url: https://www.ibm.com/cloud/cloudant
diff --git a/providers/cloudant/pyproject.toml b/providers/cloudant/pyproject.toml
index e4243de8fbd88..e247f8da60629 100644
--- a/providers/cloudant/pyproject.toml
+++ b/providers/cloudant/pyproject.toml
@@ -49,7 +49,7 @@ classifiers = [
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9,!=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/cloudant/src/airflow/providers/cloudant/hooks/cloudant.py b/providers/cloudant/src/airflow/providers/cloudant/hooks/cloudant.py
index b09ad6932efa6..35cb6064b9ef9 100644
--- a/providers/cloudant/src/airflow/providers/cloudant/hooks/cloudant.py
+++ b/providers/cloudant/src/airflow/providers/cloudant/hooks/cloudant.py
@@ -19,13 +19,9 @@
 
 from __future__ import annotations
 
-import sys
 from typing import TYPE_CHECKING, Any
 
-if sys.version_info < (3, 10):
-    from airflow.providers.cloudant.cloudant_fake import CloudantV1, CouchDbSessionAuthenticator
-else:
-    from ibmcloudant import CloudantV1, CouchDbSessionAuthenticator
+from ibmcloudant import CloudantV1, CouchDbSessionAuthenticator
 
 from airflow.exceptions import AirflowException
 from airflow.hooks.base import BaseHook
diff --git a/providers/cloudant/tests/unit/cloudant/hooks/test_cloudant.py b/providers/cloudant/tests/unit/cloudant/hooks/test_cloudant.py
index 072c93c79528b..d8dab6f88edd7 100644
--- a/providers/cloudant/tests/unit/cloudant/hooks/test_cloudant.py
+++ b/providers/cloudant/tests/unit/cloudant/hooks/test_cloudant.py
@@ -17,24 +17,15 @@
 # under the License.
 from __future__ import annotations
 
-import sys
 from unittest.mock import patch
 
 import pytest
 
 from airflow.exceptions import AirflowException
 from airflow.models import Connection
+from airflow.providers.cloudant.hooks.cloudant import CloudantHook
 
-pytestmark = []
-
-if sys.version_info < (3, 10):
-    pytestmark.append(
-        pytest.mark.skip(
-            f"Skipping {__name__} as the cloudant provider is not supported on Python 3.9, see #41555."
-        )
-    )
-else:
-    from airflow.providers.cloudant.hooks.cloudant import CloudantHook
+pytestmark: list[pytest.Mark] = []
 
 
 class TestCloudantHook:
diff --git a/providers/cncf/kubernetes/pyproject.toml b/providers/cncf/kubernetes/pyproject.toml
index 79baa43ea9341..f2a495b1f0cee 100644
--- a/providers/cncf/kubernetes/pyproject.toml
+++ b/providers/cncf/kubernetes/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/callbacks.py b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/callbacks.py
index d87e8065dbd1a..20ea0d02a8846 100644
--- a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/callbacks.py
+++ b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/callbacks.py
@@ -17,7 +17,7 @@
 from __future__ import annotations
 
 from enum import Enum
-from typing import TYPE_CHECKING, Union
+from typing import TYPE_CHECKING, TypeAlias
 
 import kubernetes.client as k8s
 import kubernetes_asyncio.client as async_k8s
@@ -26,7 +26,7 @@
     from airflow.providers.cncf.kubernetes.operators.pod import KubernetesPodOperator
     from airflow.utils.context import Context
 
-client_type = Union[k8s.CoreV1Api, async_k8s.CoreV1Api]
+client_type: TypeAlias = k8s.CoreV1Api | async_k8s.CoreV1Api
 
 
 class ExecutionMode(str, Enum):
diff --git a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/decorators/kubernetes.py b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/decorators/kubernetes.py
index 3690ff0d6cd44..eb4752c0ffb07 100644
--- a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/decorators/kubernetes.py
+++ b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/decorators/kubernetes.py
@@ -19,10 +19,10 @@
 import base64
 import os
 import pickle
-from collections.abc import Sequence
+from collections.abc import Callable, Sequence
 from shlex import quote
 from tempfile import TemporaryDirectory
-from typing import TYPE_CHECKING, Callable
+from typing import TYPE_CHECKING
 
 import dill
 from kubernetes.client import models as k8s
diff --git a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/decorators/kubernetes_cmd.py b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/decorators/kubernetes_cmd.py
index a65efad1ae6cf..78e89d44cde02 100644
--- a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/decorators/kubernetes_cmd.py
+++ b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/decorators/kubernetes_cmd.py
@@ -17,8 +17,8 @@
 from __future__ import annotations
 
 import warnings
-from collections.abc import Sequence
-from typing import TYPE_CHECKING, Callable
+from collections.abc import Callable, Sequence
+from typing import TYPE_CHECKING
 
 from airflow.providers.cncf.kubernetes.version_compat import AIRFLOW_V_3_0_PLUS
 
diff --git a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor_types.py b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor_types.py
index 077ac422d4228..78ab517c52677 100644
--- a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor_types.py
+++ b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor_types.py
@@ -16,7 +16,7 @@
 # under the License.
 from __future__ import annotations
 
-from typing import TYPE_CHECKING, Any, Optional, Union
+from typing import TYPE_CHECKING, Any
 
 ADOPTED = "adopted"
 if TYPE_CHECKING:
@@ -29,13 +29,13 @@
     CommandType = Sequence[str]
 
     # TaskInstance key, command, configuration, pod_template_file
-    KubernetesJobType = tuple[TaskInstanceKey, CommandType, Any, Optional[str]]
+    KubernetesJobType = tuple[TaskInstanceKey, CommandType, Any, str | None]
 
     # key, pod state, pod_name, namespace, resource_version
-    KubernetesResultsType = tuple[TaskInstanceKey, Optional[Union[TaskInstanceState, str]], str, str, str]
+    KubernetesResultsType = tuple[TaskInstanceKey, TaskInstanceState | str | None, str, str, str]
 
     # pod_name, namespace, pod state, annotations, resource_version
-    KubernetesWatchType = tuple[str, str, Optional[Union[TaskInstanceState, str]], dict[str, str], str]
+    KubernetesWatchType = tuple[str, str, TaskInstanceState | str | None, dict[str, str], str]
 
 ALL_NAMESPACES = "ALL_NAMESPACES"
 POD_EXECUTOR_DONE_KEY = "airflow_executor_done"
diff --git a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/kube_client.py b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/kube_client.py
index 3a5c099f59518..cc37ed755a61d 100644
--- a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/kube_client.py
+++ b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/kube_client.py
@@ -87,8 +87,17 @@ def _enable_tcp_keepalive() -> None:
     else:
         log.debug("Unable to set TCP_KEEPCNT on this platform")
 
-    HTTPSConnection.default_socket_options = HTTPSConnection.default_socket_options + socket_options
-    HTTPConnection.default_socket_options = HTTPConnection.default_socket_options + socket_options
+    # Cast both the default options and our socket options
+    socket_options_cast: list[tuple[int, int, int | bytes]] = [
+        (level, opt, val) for level, opt, val in socket_options
+    ]
+    default_options_cast: list[tuple[int, int, int | bytes]] = [
+        (level, opt, val) for level, opt, val in HTTPSConnection.default_socket_options
+    ]
+
+    # Then use the cast versions for both HTTPS and HTTP
+    HTTPSConnection.default_socket_options = default_options_cast + socket_options_cast
+    HTTPConnection.default_socket_options = default_options_cast + socket_options_cast
 
 
 def get_kube_client(
diff --git a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/operators/pod.py b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/operators/pod.py
index b5067e7a17bf5..ed8511be98deb 100644
--- a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/operators/pod.py
+++ b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/operators/pod.py
@@ -27,11 +27,11 @@
 import re
 import shlex
 import string
-from collections.abc import Container, Iterable, Sequence
+from collections.abc import Callable, Container, Iterable, Sequence
 from contextlib import AbstractContextManager
 from enum import Enum
 from functools import cached_property
-from typing import TYPE_CHECKING, Any, Callable, Literal
+from typing import TYPE_CHECKING, Any, Literal
 
 import kubernetes
 import tenacity
diff --git a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/utils/k8s_resource_iterator.py b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/utils/k8s_resource_iterator.py
index d66eb9fc80bc0..5102847ecc429 100644
--- a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/utils/k8s_resource_iterator.py
+++ b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/utils/k8s_resource_iterator.py
@@ -16,8 +16,7 @@
 # under the License.
 from __future__ import annotations
 
-from collections.abc import Iterator
-from typing import Callable
+from collections.abc import Callable, Iterator
 
 from kubernetes.utils import FailToCreateError
 
diff --git a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/utils/pod_manager.py b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/utils/pod_manager.py
index 5942b68afa89e..12a10e0dad397 100644
--- a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/utils/pod_manager.py
+++ b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/utils/pod_manager.py
@@ -27,7 +27,7 @@
 from contextlib import closing, suppress
 from dataclasses import dataclass
 from datetime import timedelta
-from typing import TYPE_CHECKING, Protocol, cast
+from typing import TYPE_CHECKING, Literal, Protocol, cast
 
 import pendulum
 import tenacity
@@ -36,7 +36,6 @@
 from kubernetes.stream import stream as kubernetes_stream
 from pendulum import DateTime
 from pendulum.parsing.exceptions import ParserError
-from typing_extensions import Literal
 from urllib3.exceptions import HTTPError, TimeoutError
 
 from airflow.exceptions import AirflowException
diff --git a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_commons.py b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_commons.py
index 015486157e0ae..860cf3294a9ea 100644
--- a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_commons.py
+++ b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_commons.py
@@ -17,7 +17,7 @@
 from __future__ import annotations
 
 import asyncio
-from typing import Callable
+from collections.abc import Callable
 from unittest import mock
 
 import pytest
diff --git a/providers/cohere/pyproject.toml b/providers/cohere/pyproject.toml
index bd2d6ff525ce0..7e2aa17bf12df 100644
--- a/providers/cohere/pyproject.toml
+++ b/providers/cohere/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/common/compat/pyproject.toml b/providers/common/compat/pyproject.toml
index f284d1109879f..5e19191ad0c94 100644
--- a/providers/common/compat/pyproject.toml
+++ b/providers/common/compat/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/common/io/pyproject.toml b/providers/common/io/pyproject.toml
index 0fbb4c4cd6c83..0f8c9c19c48bd 100644
--- a/providers/common/io/pyproject.toml
+++ b/providers/common/io/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/common/messaging/pyproject.toml b/providers/common/messaging/pyproject.toml
index dd7dd73c5cd66..873ae6b503f53 100644
--- a/providers/common/messaging/pyproject.toml
+++ b/providers/common/messaging/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/common/sql/pyproject.toml b/providers/common/sql/pyproject.toml
index 95d6ac9158ba8..5b5d8e743d0f2 100644
--- a/providers/common/sql/pyproject.toml
+++ b/providers/common/sql/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/common/sql/src/airflow/providers/common/sql/dialects/dialect.py b/providers/common/sql/src/airflow/providers/common/sql/dialects/dialect.py
index 88453c73a33e5..6380f4091fd67 100644
--- a/providers/common/sql/src/airflow/providers/common/sql/dialects/dialect.py
+++ b/providers/common/sql/src/airflow/providers/common/sql/dialects/dialect.py
@@ -17,8 +17,8 @@
 from __future__ import annotations
 
 import re
-from collections.abc import Iterable, Mapping
-from typing import TYPE_CHECKING, Any, Callable, TypeVar
+from collections.abc import Callable, Iterable, Mapping
+from typing import TYPE_CHECKING, Any, TypeVar
 
 from methodtools import lru_cache
 
diff --git a/providers/common/sql/src/airflow/providers/common/sql/dialects/dialect.pyi b/providers/common/sql/src/airflow/providers/common/sql/dialects/dialect.pyi
index ff208e77e5c82..7ab9a3efa0f6f 100644
--- a/providers/common/sql/src/airflow/providers/common/sql/dialects/dialect.pyi
+++ b/providers/common/sql/src/airflow/providers/common/sql/dialects/dialect.pyi
@@ -32,8 +32,8 @@ Definition of the public interface for airflow.providers.common.sql.src.airflow.
 isort:skip_file
 """
 
-from collections.abc import Iterable, Mapping
-from typing import Any, Callable, TypeVar
+from collections.abc import Callable, Iterable, Mapping
+from typing import Any, TypeVar
 
 from _typeshed import Incomplete as Incomplete
 from sqlalchemy.engine import Inspector as Inspector
diff --git a/providers/common/sql/src/airflow/providers/common/sql/hooks/sql.py b/providers/common/sql/src/airflow/providers/common/sql/hooks/sql.py
index 58e9a244108ed..d0cf632cf1b17 100644
--- a/providers/common/sql/src/airflow/providers/common/sql/hooks/sql.py
+++ b/providers/common/sql/src/airflow/providers/common/sql/hooks/sql.py
@@ -18,11 +18,11 @@
 
 import contextlib
 import warnings
-from collections.abc import Generator, Iterable, Mapping, MutableMapping, Sequence
+from collections.abc import Callable, Generator, Iterable, Mapping, MutableMapping, Sequence
 from contextlib import closing, contextmanager, suppress
 from datetime import datetime
 from functools import cached_property
-from typing import TYPE_CHECKING, Any, Callable, Protocol, TypeVar, cast, overload
+from typing import TYPE_CHECKING, Any, Literal, Protocol, TypeVar, cast, overload
 from urllib.parse import urlparse
 
 import sqlparse
@@ -32,7 +32,6 @@
 from sqlalchemy import create_engine, inspect
 from sqlalchemy.engine import make_url
 from sqlalchemy.exc import ArgumentError, NoSuchModuleError
-from typing_extensions import Literal
 
 from airflow.configuration import conf
 from airflow.exceptions import (
diff --git a/providers/common/sql/src/airflow/providers/common/sql/hooks/sql.pyi b/providers/common/sql/src/airflow/providers/common/sql/hooks/sql.pyi
index a5caa463e47de..9c792e1bd82ea 100644
--- a/providers/common/sql/src/airflow/providers/common/sql/hooks/sql.pyi
+++ b/providers/common/sql/src/airflow/providers/common/sql/hooks/sql.pyi
@@ -32,9 +32,9 @@ Definition of the public interface for airflow.providers.common.sql.src.airflow.
 isort:skip_file
 """
 
-from collections.abc import Generator, Iterable, Mapping, MutableMapping, Sequence
+from collections.abc import Callable, Generator, Iterable, Mapping, MutableMapping, Sequence
 from functools import cached_property as cached_property
-from typing import Any, Callable, Literal, Protocol, TypeVar, overload
+from typing import Any, Literal, Protocol, TypeVar, overload
 
 from _typeshed import Incomplete as Incomplete
 from pandas import DataFrame as PandasDataFrame
diff --git a/providers/common/sql/src/airflow/providers/common/sql/operators/sql.py b/providers/common/sql/src/airflow/providers/common/sql/operators/sql.py
index ddf1a8b5ce6d3..af04349532a51 100644
--- a/providers/common/sql/src/airflow/providers/common/sql/operators/sql.py
+++ b/providers/common/sql/src/airflow/providers/common/sql/operators/sql.py
@@ -19,9 +19,9 @@
 
 import ast
 import re
-from collections.abc import Iterable, Mapping, Sequence
+from collections.abc import Callable, Iterable, Mapping, Sequence
 from functools import cached_property
-from typing import TYPE_CHECKING, Any, Callable, ClassVar, NoReturn, SupportsAbs
+from typing import TYPE_CHECKING, Any, ClassVar, NoReturn, SupportsAbs
 
 from airflow.exceptions import AirflowException, AirflowFailException
 from airflow.hooks.base import BaseHook
diff --git a/providers/common/sql/src/airflow/providers/common/sql/sensors/sql.py b/providers/common/sql/src/airflow/providers/common/sql/sensors/sql.py
index 2c7cb4543694b..0aa83fef2e5b8 100644
--- a/providers/common/sql/src/airflow/providers/common/sql/sensors/sql.py
+++ b/providers/common/sql/src/airflow/providers/common/sql/sensors/sql.py
@@ -16,9 +16,9 @@
 # under the License.
 from __future__ import annotations
 
-from collections.abc import Mapping, Sequence
+from collections.abc import Callable, Mapping, Sequence
 from operator import itemgetter
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 
 from airflow.exceptions import AirflowException
 from airflow.hooks.base import BaseHook
diff --git a/providers/common/sql/src/airflow/providers/common/sql/sensors/sql.pyi b/providers/common/sql/src/airflow/providers/common/sql/sensors/sql.pyi
index e2d69b6c0b952..edd3dce2326a3 100644
--- a/providers/common/sql/src/airflow/providers/common/sql/sensors/sql.pyi
+++ b/providers/common/sql/src/airflow/providers/common/sql/sensors/sql.pyi
@@ -32,8 +32,8 @@ Definition of the public interface for airflow.providers.common.sql.src.airflow.
 isort:skip_file
 """
 
-from collections.abc import Mapping, Sequence
-from typing import Any, Callable
+from collections.abc import Callable, Mapping, Sequence
+from typing import Any
 
 from _typeshed import Incomplete as Incomplete
 
diff --git a/providers/databricks/pyproject.toml b/providers/databricks/pyproject.toml
index 2da0ace112770..632dd6bf8bf4c 100644
--- a/providers/databricks/pyproject.toml
+++ b/providers/databricks/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/databricks/src/airflow/providers/databricks/hooks/databricks_base.py b/providers/databricks/src/airflow/providers/databricks/hooks/databricks_base.py
index 2829c7012d32b..cba505f9988a8 100644
--- a/providers/databricks/src/airflow/providers/databricks/hooks/databricks_base.py
+++ b/providers/databricks/src/airflow/providers/databricks/hooks/databricks_base.py
@@ -766,7 +766,7 @@ def _get_error_code(exception: BaseException) -> str:
     @staticmethod
     def _retryable_error(exception: BaseException) -> bool:
         if isinstance(exception, requests_exceptions.RequestException):
-            if isinstance(exception, (requests_exceptions.ConnectionError, requests_exceptions.Timeout)) or (
+            if isinstance(exception, requests_exceptions.ConnectionError | requests_exceptions.Timeout) or (
                 exception.response is not None
                 and (
                     exception.response.status_code >= 500
@@ -783,7 +783,7 @@ def _retryable_error(exception: BaseException) -> bool:
             if exception.status >= 500 or exception.status == 429:
                 return True
 
-        if isinstance(exception, (ClientConnectorError, TimeoutError)):
+        if isinstance(exception, ClientConnectorError | TimeoutError):
             return True
 
         return False
diff --git a/providers/databricks/src/airflow/providers/databricks/hooks/databricks_sql.py b/providers/databricks/src/airflow/providers/databricks/hooks/databricks_sql.py
index 11e5ceca39bea..76aea1dde5434 100644
--- a/providers/databricks/src/airflow/providers/databricks/hooks/databricks_sql.py
+++ b/providers/databricks/src/airflow/providers/databricks/hooks/databricks_sql.py
@@ -18,14 +18,13 @@
 
 import threading
 from collections import namedtuple
-from collections.abc import Iterable, Mapping, Sequence
+from collections.abc import Callable, Iterable, Mapping, Sequence
 from contextlib import closing
 from copy import copy
 from datetime import timedelta
 from typing import (
     TYPE_CHECKING,
     Any,
-    Callable,
     TypeVar,
     cast,
     overload,
diff --git a/providers/databricks/src/airflow/providers/databricks/sensors/databricks_partition.py b/providers/databricks/src/airflow/providers/databricks/sensors/databricks_partition.py
index 6aad4f419bcad..86ec7ca385d05 100644
--- a/providers/databricks/src/airflow/providers/databricks/sensors/databricks_partition.py
+++ b/providers/databricks/src/airflow/providers/databricks/sensors/databricks_partition.py
@@ -20,10 +20,10 @@
 
 from __future__ import annotations
 
-from collections.abc import Sequence
+from collections.abc import Callable, Sequence
 from datetime import datetime
 from functools import cached_property
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 
 from databricks.sql.utils import ParamEscaper
 
@@ -205,11 +205,11 @@ def _generate_partition_query(
                     if isinstance(partition_value, list):
                         output_list.append(f"""{partition_col} in {tuple(partition_value)}""")
                         self.log.debug("List formatting for partitions: %s", output_list)
-                    if isinstance(partition_value, (int, float, complex)):
+                    if isinstance(partition_value, int | float | complex):
                         output_list.append(
                             f"""{partition_col}{self.partition_operator}{self.escaper.escape_item(partition_value)}"""
                         )
-                    if isinstance(partition_value, (str, datetime)):
+                    if isinstance(partition_value, str | datetime):
                         output_list.append(
                             f"""{partition_col}{self.partition_operator}{self.escaper.escape_item(partition_value)}"""
                         )
diff --git a/providers/databricks/src/airflow/providers/databricks/sensors/databricks_sql.py b/providers/databricks/src/airflow/providers/databricks/sensors/databricks_sql.py
index d0f060c8487a8..1eca4c7adae4b 100644
--- a/providers/databricks/src/airflow/providers/databricks/sensors/databricks_sql.py
+++ b/providers/databricks/src/airflow/providers/databricks/sensors/databricks_sql.py
@@ -20,9 +20,9 @@
 
 from __future__ import annotations
 
-from collections.abc import Iterable, Sequence
+from collections.abc import Callable, Iterable, Sequence
 from functools import cached_property
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 
 from airflow.exceptions import AirflowException
 from airflow.providers.common.sql.hooks.handlers import fetch_all_handler
diff --git a/providers/databricks/src/airflow/providers/databricks/utils/databricks.py b/providers/databricks/src/airflow/providers/databricks/utils/databricks.py
index e19bccf290a36..8159bce1aff32 100644
--- a/providers/databricks/src/airflow/providers/databricks/utils/databricks.py
+++ b/providers/databricks/src/airflow/providers/databricks/utils/databricks.py
@@ -34,12 +34,12 @@ def normalise_json_content(content, json_path: str = "json") -> str | bool | lis
     to string type because databricks does not understand 'True' or 'False' values.
     """
     normalise = normalise_json_content
-    if isinstance(content, (str, bool)):
+    if isinstance(content, str | bool):
         return content
-    if isinstance(content, (int, float)):
+    if isinstance(content, int | float):
         # Databricks can tolerate either numeric or string types in the API backend.
         return str(content)
-    if isinstance(content, (list, tuple)):
+    if isinstance(content, list | tuple):
         return [normalise(e, f"{json_path}[{i}]") for i, e in enumerate(content)]
     if isinstance(content, dict):
         return {k: normalise(v, f"{json_path}[{k}]") for k, v in content.items()}
diff --git a/providers/datadog/pyproject.toml b/providers/datadog/pyproject.toml
index 2f9770782c270..2932cb651805c 100644
--- a/providers/datadog/pyproject.toml
+++ b/providers/datadog/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/datadog/src/airflow/providers/datadog/sensors/datadog.py b/providers/datadog/src/airflow/providers/datadog/sensors/datadog.py
index 65768936118bc..251020febb871 100644
--- a/providers/datadog/src/airflow/providers/datadog/sensors/datadog.py
+++ b/providers/datadog/src/airflow/providers/datadog/sensors/datadog.py
@@ -17,7 +17,8 @@
 # under the License.
 from __future__ import annotations
 
-from typing import TYPE_CHECKING, Any, Callable
+from collections.abc import Callable
+from typing import TYPE_CHECKING, Any
 
 from datadog import api
 
diff --git a/providers/dbt/cloud/pyproject.toml b/providers/dbt/cloud/pyproject.toml
index 62c941133dab1..2cb0c972bc2b6 100644
--- a/providers/dbt/cloud/pyproject.toml
+++ b/providers/dbt/cloud/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/dbt/cloud/src/airflow/providers/dbt/cloud/hooks/dbt.py b/providers/dbt/cloud/src/airflow/providers/dbt/cloud/hooks/dbt.py
index 2f5ee59b2d27b..e9c37d926dbcb 100644
--- a/providers/dbt/cloud/src/airflow/providers/dbt/cloud/hooks/dbt.py
+++ b/providers/dbt/cloud/src/airflow/providers/dbt/cloud/hooks/dbt.py
@@ -20,11 +20,11 @@
 import json
 import time
 import warnings
-from collections.abc import Sequence
+from collections.abc import Callable, Sequence
 from enum import Enum
 from functools import cached_property, wraps
 from inspect import signature
-from typing import TYPE_CHECKING, Any, Callable, TypedDict, TypeVar, cast
+from typing import TYPE_CHECKING, Any, TypedDict, TypeVar, cast
 
 import aiohttp
 from asgiref.sync import sync_to_async
@@ -117,7 +117,7 @@ class DbtCloudJobRunStatus(Enum):
     @classmethod
     def check_is_valid(cls, statuses: int | Sequence[int] | set[int]):
         """Validate input statuses are a known value."""
-        if isinstance(statuses, (Sequence, set)):
+        if isinstance(statuses, Sequence | set):
             for status in statuses:
                 cls(status)
         else:
diff --git a/providers/dingding/pyproject.toml b/providers/dingding/pyproject.toml
index 63cd02a22ded5..0e3005a499cf4 100644
--- a/providers/dingding/pyproject.toml
+++ b/providers/dingding/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/discord/pyproject.toml b/providers/discord/pyproject.toml
index 986b2668f5198..53b53aa379bd1 100644
--- a/providers/discord/pyproject.toml
+++ b/providers/discord/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/docker/pyproject.toml b/providers/docker/pyproject.toml
index 529b9756b527c..36dd840744b0e 100644
--- a/providers/docker/pyproject.toml
+++ b/providers/docker/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/docker/src/airflow/providers/docker/decorators/docker.py b/providers/docker/src/airflow/providers/docker/decorators/docker.py
index 36451a3d46395..807902d5e8170 100644
--- a/providers/docker/src/airflow/providers/docker/decorators/docker.py
+++ b/providers/docker/src/airflow/providers/docker/decorators/docker.py
@@ -18,9 +18,9 @@
 
 import base64
 import os
-from collections.abc import Sequence
+from collections.abc import Callable, Sequence
 from tempfile import TemporaryDirectory
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 
 from airflow.providers.docker.version_compat import AIRFLOW_V_3_0_PLUS
 
diff --git a/providers/docker/src/airflow/providers/docker/operators/docker.py b/providers/docker/src/airflow/providers/docker/operators/docker.py
index ba2a7adef9151..7c75bb926e9ec 100644
--- a/providers/docker/src/airflow/providers/docker/operators/docker.py
+++ b/providers/docker/src/airflow/providers/docker/operators/docker.py
@@ -27,13 +27,12 @@
 from functools import cached_property
 from io import BytesIO, StringIO
 from tempfile import TemporaryDirectory
-from typing import TYPE_CHECKING
+from typing import TYPE_CHECKING, Literal
 
 from docker.constants import DEFAULT_TIMEOUT_SECONDS
 from docker.errors import APIError
 from docker.types import LogConfig, Mount, Ulimit
 from dotenv import dotenv_values
-from typing_extensions import Literal
 
 from airflow.models import BaseOperator
 from airflow.providers.docker.exceptions import (
diff --git a/providers/edge3/pyproject.toml b/providers/edge3/pyproject.toml
index 302d6f2afafd8..e5f4165d970a9 100644
--- a/providers/edge3/pyproject.toml
+++ b/providers/edge3/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/edge3/src/airflow/providers/edge3/example_dags/win_test.py b/providers/edge3/src/airflow/providers/edge3/example_dags/win_test.py
index 27563452703d2..8de7b50201d2c 100644
--- a/providers/edge3/src/airflow/providers/edge3/example_dags/win_test.py
+++ b/providers/edge3/src/airflow/providers/edge3/example_dags/win_test.py
@@ -26,11 +26,11 @@
 from __future__ import annotations
 
 import os
-from collections.abc import Container, Sequence
+from collections.abc import Callable, Container, Sequence
 from datetime import datetime
 from subprocess import STDOUT, Popen
 from time import sleep
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 
 from airflow.decorators import task, task_group
 from airflow.exceptions import AirflowException, AirflowNotFoundException, AirflowSkipException
diff --git a/providers/edge3/src/airflow/providers/edge3/executors/edge_executor.py b/providers/edge3/src/airflow/providers/edge3/executors/edge_executor.py
index 37659bfc17e14..827e03498f299 100644
--- a/providers/edge3/src/airflow/providers/edge3/executors/edge_executor.py
+++ b/providers/edge3/src/airflow/providers/edge3/executors/edge_executor.py
@@ -21,7 +21,7 @@
 from collections.abc import Sequence
 from copy import deepcopy
 from datetime import datetime, timedelta
-from typing import TYPE_CHECKING, Any, Optional
+from typing import TYPE_CHECKING, Any
 
 from sqlalchemy import delete, inspect, text
 from sqlalchemy.exc import NoSuchTableError
@@ -52,7 +52,7 @@
     # TODO: Airflow 2 type hints; remove when Airflow 2 support is removed
     CommandType = Sequence[str]
     # Task tuple to send to be executed
-    TaskTuple = tuple[TaskInstanceKey, CommandType, Optional[str], Optional[Any]]
+    TaskTuple = tuple[TaskInstanceKey, CommandType, str | None, Any | None]
 
 PARALLELISM: int = conf.getint("core", "PARALLELISM")
 
diff --git a/providers/edge3/src/airflow/providers/edge3/worker_api/routes/_v2_compat.py b/providers/edge3/src/airflow/providers/edge3/worker_api/routes/_v2_compat.py
index 2da0f0e23facc..73378d0e31cd0 100644
--- a/providers/edge3/src/airflow/providers/edge3/worker_api/routes/_v2_compat.py
+++ b/providers/edge3/src/airflow/providers/edge3/worker_api/routes/_v2_compat.py
@@ -35,7 +35,7 @@ def parse_command(command: str) -> ExecuteTask:
         return ExecuteTask.model_validate_json(command)
 else:
     # Mock the external dependencies
-    from typing import Callable
+    from collections.abc import Callable
 
     from connexion import ProblemException
 
diff --git a/providers/elasticsearch/pyproject.toml b/providers/elasticsearch/pyproject.toml
index 260c466b8695e..c77c0f1e983dd 100644
--- a/providers/elasticsearch/pyproject.toml
+++ b/providers/elasticsearch/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/elasticsearch/src/airflow/providers/elasticsearch/log/es_response.py b/providers/elasticsearch/src/airflow/providers/elasticsearch/log/es_response.py
index 610b03f96e199..221a45fdb3b94 100644
--- a/providers/elasticsearch/src/airflow/providers/elasticsearch/log/es_response.py
+++ b/providers/elasticsearch/src/airflow/providers/elasticsearch/log/es_response.py
@@ -130,7 +130,7 @@ def __iter__(self) -> Iterator[Hit]:
 
     def __getitem__(self, key):
         """Retrieve a specific hit or a slice of hits from the Elasticsearch response."""
-        if isinstance(key, (slice, int)):
+        if isinstance(key, slice | int):
             return self.hits[key]
         return super().__getitem__(key)
 
diff --git a/providers/elasticsearch/src/airflow/providers/elasticsearch/log/es_task_handler.py b/providers/elasticsearch/src/airflow/providers/elasticsearch/log/es_task_handler.py
index ee5fc205902b2..3cd8fa5e56766 100644
--- a/providers/elasticsearch/src/airflow/providers/elasticsearch/log/es_task_handler.py
+++ b/providers/elasticsearch/src/airflow/providers/elasticsearch/log/es_task_handler.py
@@ -27,8 +27,9 @@
 import sys
 import time
 from collections import defaultdict
+from collections.abc import Callable
 from operator import attrgetter
-from typing import TYPE_CHECKING, Any, Callable, Literal
+from typing import TYPE_CHECKING, Any, Literal
 from urllib.parse import quote, urlparse
 
 # Using `from elasticsearch import *` would break elasticsearch mocking used in unit test.
@@ -57,11 +58,9 @@
     from airflow.models.taskinstance import TaskInstance, TaskInstanceKey
 
 if AIRFLOW_V_3_0_PLUS:
-    from typing import Union
-
     from airflow.utils.log.file_task_handler import StructuredLogMessage
 
-    EsLogMsgType = Union[list[StructuredLogMessage], str]
+    EsLogMsgType = list[StructuredLogMessage] | str
 else:
     EsLogMsgType = list[tuple[str, str]]  # type: ignore[misc]
 
diff --git a/providers/elasticsearch/tests/unit/elasticsearch/log/elasticmock/utilities/__init__.py b/providers/elasticsearch/tests/unit/elasticsearch/log/elasticmock/utilities/__init__.py
index 50b883e0f02f3..abd3606b1e056 100644
--- a/providers/elasticsearch/tests/unit/elasticsearch/log/elasticmock/utilities/__init__.py
+++ b/providers/elasticsearch/tests/unit/elasticsearch/log/elasticmock/utilities/__init__.py
@@ -177,7 +177,7 @@ def _base64_auth_header(auth_value):
     and returns a base64-encoded string to be used
     as an HTTP authorization header.
     """
-    if isinstance(auth_value, (list, tuple)):
+    if isinstance(auth_value, list | tuple):
         auth_value = base64.b64encode(to_bytes(":".join(auth_value)))
     return to_str(auth_value)
 
@@ -189,11 +189,11 @@ def _escape(value):
     """
 
     # make sequences into comma-separated strings
-    if isinstance(value, (list, tuple)):
+    if isinstance(value, list | tuple):
         value = ",".join(value)
 
     # dates and datetimes into isoformat
-    elif isinstance(value, (date, datetime)):
+    elif isinstance(value, date | datetime):
         value = value.isoformat()
 
     # make bools into true/false strings
diff --git a/providers/exasol/pyproject.toml b/providers/exasol/pyproject.toml
index f6987a182cd48..158befc0c809c 100644
--- a/providers/exasol/pyproject.toml
+++ b/providers/exasol/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/exasol/src/airflow/providers/exasol/hooks/exasol.py b/providers/exasol/src/airflow/providers/exasol/hooks/exasol.py
index cbd59bfb294f6..bf996cf096a40 100644
--- a/providers/exasol/src/airflow/providers/exasol/hooks/exasol.py
+++ b/providers/exasol/src/airflow/providers/exasol/hooks/exasol.py
@@ -17,9 +17,9 @@
 # under the License.
 from __future__ import annotations
 
-from collections.abc import Iterable, Mapping, Sequence
+from collections.abc import Callable, Iterable, Mapping, Sequence
 from contextlib import closing
-from typing import TYPE_CHECKING, Any, Callable, TypeVar, overload
+from typing import TYPE_CHECKING, Any, TypeVar, overload
 
 import pyexasol
 from deprecated import deprecated
diff --git a/providers/fab/pyproject.toml b/providers/fab/pyproject.toml
index bf16575fd921f..c339a9681b754 100644
--- a/providers/fab/pyproject.toml
+++ b/providers/fab/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 license-files = ["NOTICE", "*/LICENSE*"]
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/fab/src/airflow/providers/fab/auth_manager/api/auth/backend/basic_auth.py b/providers/fab/src/airflow/providers/fab/auth_manager/api/auth/backend/basic_auth.py
index bf48beff41c9a..dddb13646e53f 100644
--- a/providers/fab/src/airflow/providers/fab/auth_manager/api/auth/backend/basic_auth.py
+++ b/providers/fab/src/airflow/providers/fab/auth_manager/api/auth/backend/basic_auth.py
@@ -18,8 +18,9 @@
 
 from __future__ import annotations
 
+from collections.abc import Callable
 from functools import wraps
-from typing import TYPE_CHECKING, Any, Callable, TypeVar, cast
+from typing import TYPE_CHECKING, Any, TypeVar, cast
 
 from flask import Response, current_app, request
 from flask_appbuilder.const import AUTH_LDAP
diff --git a/providers/fab/src/airflow/providers/fab/auth_manager/api/auth/backend/kerberos_auth.py b/providers/fab/src/airflow/providers/fab/auth_manager/api/auth/backend/kerberos_auth.py
index d419524bf1043..41341081061b7 100644
--- a/providers/fab/src/airflow/providers/fab/auth_manager/api/auth/backend/kerberos_auth.py
+++ b/providers/fab/src/airflow/providers/fab/auth_manager/api/auth/backend/kerberos_auth.py
@@ -19,8 +19,9 @@
 
 import logging
 import os
+from collections.abc import Callable
 from functools import wraps
-from typing import TYPE_CHECKING, Any, Callable, NamedTuple, TypeVar, cast
+from typing import TYPE_CHECKING, Any, NamedTuple, TypeVar, cast
 
 import kerberos
 from flask import Response, current_app, g, make_response, request
diff --git a/providers/fab/src/airflow/providers/fab/auth_manager/api/auth/backend/session.py b/providers/fab/src/airflow/providers/fab/auth_manager/api/auth/backend/session.py
index 8b39c0e8f775c..75051decef738 100644
--- a/providers/fab/src/airflow/providers/fab/auth_manager/api/auth/backend/session.py
+++ b/providers/fab/src/airflow/providers/fab/auth_manager/api/auth/backend/session.py
@@ -18,8 +18,9 @@
 
 from __future__ import annotations
 
+from collections.abc import Callable
 from functools import wraps
-from typing import Any, Callable, TypeVar, cast
+from typing import Any, TypeVar, cast
 
 from flask import Response
 
diff --git a/providers/fab/src/airflow/providers/fab/www/api_connexion/parameters.py b/providers/fab/src/airflow/providers/fab/www/api_connexion/parameters.py
index f60f2dce23bdc..6d1c7324b9c1a 100644
--- a/providers/fab/src/airflow/providers/fab/www/api_connexion/parameters.py
+++ b/providers/fab/src/airflow/providers/fab/www/api_connexion/parameters.py
@@ -17,9 +17,9 @@
 from __future__ import annotations
 
 import logging
-from collections.abc import Container
+from collections.abc import Callable, Container
 from functools import wraps
-from typing import TYPE_CHECKING, Any, Callable, TypeVar, cast
+from typing import TYPE_CHECKING, Any, TypeVar, cast
 
 from pendulum.parsing import ParserError
 from sqlalchemy import text
diff --git a/providers/fab/src/airflow/providers/fab/www/api_connexion/security.py b/providers/fab/src/airflow/providers/fab/www/api_connexion/security.py
index f238e9de9b356..b1ed503e52b34 100644
--- a/providers/fab/src/airflow/providers/fab/www/api_connexion/security.py
+++ b/providers/fab/src/airflow/providers/fab/www/api_connexion/security.py
@@ -16,8 +16,9 @@
 # under the License.
 from __future__ import annotations
 
+from collections.abc import Callable
 from functools import wraps
-from typing import TYPE_CHECKING, Callable, TypeVar, cast
+from typing import TYPE_CHECKING, TypeVar, cast
 
 from flask import Response, current_app
 
diff --git a/providers/fab/src/airflow/providers/fab/www/api_connexion/types.py b/providers/fab/src/airflow/providers/fab/www/api_connexion/types.py
index f17f2a0d2712b..706436a807417 100644
--- a/providers/fab/src/airflow/providers/fab/www/api_connexion/types.py
+++ b/providers/fab/src/airflow/providers/fab/www/api_connexion/types.py
@@ -17,14 +17,12 @@
 from __future__ import annotations
 
 from collections.abc import Mapping, Sequence
-from typing import Any, Optional, Union
+from typing import Any
 
 from flask import Response
 
-APIResponse = Union[
-    Response,
-    tuple[object, int],  # For '(NoContent, 201)'.
-    Mapping[str, Any],  # JSON.
-]
+# tuple[object, int] For '(NoContent, 201)'.
+# Mapping[str, Any] for json
+APIResponse = Response | tuple[object, int] | Mapping[str, Any]
 
-UpdateMask = Optional[Sequence[str]]
+UpdateMask = Sequence[str] | None
diff --git a/providers/fab/src/airflow/providers/fab/www/auth.py b/providers/fab/src/airflow/providers/fab/www/auth.py
index a01ab8c9e1f9b..5cd35e4600dbd 100644
--- a/providers/fab/src/airflow/providers/fab/www/auth.py
+++ b/providers/fab/src/airflow/providers/fab/www/auth.py
@@ -18,9 +18,9 @@
 
 import functools
 import logging
-from collections.abc import Sequence
+from collections.abc import Callable, Sequence
 from functools import wraps
-from typing import TYPE_CHECKING, Callable, TypeVar, cast
+from typing import TYPE_CHECKING, TypeVar, cast
 
 from flask import flash, redirect, render_template, request, url_for
 from flask_appbuilder._compat import as_unicode
diff --git a/providers/fab/src/airflow/providers/fab/www/security_manager.py b/providers/fab/src/airflow/providers/fab/www/security_manager.py
index 7f3e4ef262035..fc968607de467 100644
--- a/providers/fab/src/airflow/providers/fab/www/security_manager.py
+++ b/providers/fab/src/airflow/providers/fab/www/security_manager.py
@@ -16,7 +16,7 @@
 # under the License.
 from __future__ import annotations
 
-from typing import Callable
+from collections.abc import Callable
 
 from flask import g
 from flask_limiter import Limiter
diff --git a/providers/fab/tests/unit/fab/auth_manager/api_endpoints/remote_user_api_auth_backend.py b/providers/fab/tests/unit/fab/auth_manager/api_endpoints/remote_user_api_auth_backend.py
index 247bb168fd042..976c9123e25e2 100644
--- a/providers/fab/tests/unit/fab/auth_manager/api_endpoints/remote_user_api_auth_backend.py
+++ b/providers/fab/tests/unit/fab/auth_manager/api_endpoints/remote_user_api_auth_backend.py
@@ -20,8 +20,9 @@
 from __future__ import annotations
 
 import logging
+from collections.abc import Callable
 from functools import wraps
-from typing import TYPE_CHECKING, Callable, TypeVar, cast
+from typing import TYPE_CHECKING, TypeVar, cast
 
 from flask import Response, request
 from flask_login import login_user
diff --git a/providers/fab/www-hash.txt b/providers/fab/www-hash.txt
index 5bd3143ffe080..c0a335802faa4 100644
--- a/providers/fab/www-hash.txt
+++ b/providers/fab/www-hash.txt
@@ -1 +1 @@
-502f77e55e8918f27d4a37d323a684d717b7e8f2070bf2c09b05dc8cad5b16ee
+e628a0561343f95bb6547d755d0cd8908e0d556b299a333c91cb8884bf3ee8ae
diff --git a/providers/facebook/pyproject.toml b/providers/facebook/pyproject.toml
index 7b413b35c718f..7c012422d74c8 100644
--- a/providers/facebook/pyproject.toml
+++ b/providers/facebook/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/ftp/pyproject.toml b/providers/ftp/pyproject.toml
index 8b6bd02c17f26..eb56f078d6b50 100644
--- a/providers/ftp/pyproject.toml
+++ b/providers/ftp/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/ftp/src/airflow/providers/ftp/hooks/ftp.py b/providers/ftp/src/airflow/providers/ftp/hooks/ftp.py
index ede52345a8fa2..3a2593f7d24a4 100644
--- a/providers/ftp/src/airflow/providers/ftp/hooks/ftp.py
+++ b/providers/ftp/src/airflow/providers/ftp/hooks/ftp.py
@@ -20,7 +20,8 @@
 import datetime
 import ftplib  # nosec: B402
 import logging
-from typing import Any, Callable
+from collections.abc import Callable
+from typing import Any
 
 from airflow.hooks.base import BaseHook
 
diff --git a/providers/git/pyproject.toml b/providers/git/pyproject.toml
index 9926b9f237028..35d4fa0b44b4d 100644
--- a/providers/git/pyproject.toml
+++ b/providers/git/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/github/pyproject.toml b/providers/github/pyproject.toml
index 50d9c0e6529d3..0839391fbe858 100644
--- a/providers/github/pyproject.toml
+++ b/providers/github/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/github/src/airflow/providers/github/operators/github.py b/providers/github/src/airflow/providers/github/operators/github.py
index 82996d3ecedb4..fb368b9280e32 100644
--- a/providers/github/src/airflow/providers/github/operators/github.py
+++ b/providers/github/src/airflow/providers/github/operators/github.py
@@ -17,7 +17,8 @@
 # under the License.
 from __future__ import annotations
 
-from typing import TYPE_CHECKING, Any, Callable
+from collections.abc import Callable
+from typing import TYPE_CHECKING, Any
 
 from github import GithubException
 
diff --git a/providers/github/src/airflow/providers/github/sensors/github.py b/providers/github/src/airflow/providers/github/sensors/github.py
index 8d7732823095c..b234168494836 100644
--- a/providers/github/src/airflow/providers/github/sensors/github.py
+++ b/providers/github/src/airflow/providers/github/sensors/github.py
@@ -17,7 +17,8 @@
 # under the License.
 from __future__ import annotations
 
-from typing import TYPE_CHECKING, Any, Callable
+from collections.abc import Callable
+from typing import TYPE_CHECKING, Any
 
 from github import GithubException
 
diff --git a/providers/google/pyproject.toml b/providers/google/pyproject.toml
index ba0d3a7f0aa67..c19467f4bdc54 100644
--- a/providers/google/pyproject.toml
+++ b/providers/google/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/google/src/airflow/providers/google/cloud/hooks/bigquery.py b/providers/google/src/airflow/providers/google/cloud/hooks/bigquery.py
index 0230ab5f57d7c..a0f635c584ab4 100644
--- a/providers/google/src/airflow/providers/google/cloud/hooks/bigquery.py
+++ b/providers/google/src/airflow/providers/google/cloud/hooks/bigquery.py
@@ -29,7 +29,7 @@
 from collections.abc import Iterable, Mapping, Sequence
 from copy import deepcopy
 from datetime import datetime, timedelta
-from typing import TYPE_CHECKING, Any, NoReturn, Union, cast, overload
+from typing import TYPE_CHECKING, Any, Literal, NoReturn, cast, overload
 
 from aiohttp import ClientSession as ClientSession
 from gcloud.aio.bigquery import Job, Table as Table_async
@@ -57,7 +57,6 @@
 from pandas_gbq import read_gbq
 from pandas_gbq.gbq import GbqConnector  # noqa: F401 used in ``airflow.contrib.hooks.bigquery``
 from sqlalchemy import create_engine
-from typing_extensions import Literal
 
 from airflow.exceptions import (
     AirflowException,
@@ -89,7 +88,7 @@
 
 log = logging.getLogger(__name__)
 
-BigQueryJob = Union[CopyJob, QueryJob, LoadJob, ExtractJob]
+BigQueryJob = CopyJob | QueryJob | LoadJob | ExtractJob
 
 
 class BigQueryHook(GoogleBaseHook, DbApiHook):
diff --git a/providers/google/src/airflow/providers/google/cloud/hooks/dataflow.py b/providers/google/src/airflow/providers/google/cloud/hooks/dataflow.py
index a9b7e07977a7b..018ba9e9b0672 100644
--- a/providers/google/src/airflow/providers/google/cloud/hooks/dataflow.py
+++ b/providers/google/src/airflow/providers/google/cloud/hooks/dataflow.py
@@ -27,9 +27,9 @@
 import time
 import uuid
 import warnings
-from collections.abc import Generator, Sequence
+from collections.abc import Callable, Generator, Sequence
 from copy import deepcopy
-from typing import TYPE_CHECKING, Any, Callable, TypeVar, cast
+from typing import TYPE_CHECKING, Any, TypeVar, cast
 
 from google.cloud.dataflow_v1beta3 import (
     GetJobRequest,
diff --git a/providers/google/src/airflow/providers/google/cloud/hooks/gcs.py b/providers/google/src/airflow/providers/google/cloud/hooks/gcs.py
index 74aea85fd7934..6e32c49043271 100644
--- a/providers/google/src/airflow/providers/google/cloud/hooks/gcs.py
+++ b/providers/google/src/airflow/providers/google/cloud/hooks/gcs.py
@@ -26,12 +26,12 @@
 import shutil
 import time
 import warnings
-from collections.abc import Generator, Sequence
+from collections.abc import Callable, Generator, Sequence
 from contextlib import contextmanager
 from functools import partial
 from io import BytesIO
 from tempfile import NamedTemporaryFile
-from typing import IO, TYPE_CHECKING, Any, Callable, TypeVar, cast, overload
+from typing import IO, TYPE_CHECKING, Any, TypeVar, cast, overload
 from urllib.parse import urlsplit
 
 from gcloud.aio.storage import Storage
diff --git a/providers/google/src/airflow/providers/google/cloud/hooks/mlengine.py b/providers/google/src/airflow/providers/google/cloud/hooks/mlengine.py
index e37bc13c89802..b79d991227d7b 100644
--- a/providers/google/src/airflow/providers/google/cloud/hooks/mlengine.py
+++ b/providers/google/src/airflow/providers/google/cloud/hooks/mlengine.py
@@ -23,7 +23,8 @@
 import logging
 import random
 import time
-from typing import TYPE_CHECKING, Callable
+from collections.abc import Callable
+from typing import TYPE_CHECKING
 
 from aiohttp import ClientSession
 from gcloud.aio.auth import AioSession, Token
diff --git a/providers/google/src/airflow/providers/google/cloud/hooks/spanner.py b/providers/google/src/airflow/providers/google/cloud/hooks/spanner.py
index 24bea1e9566d5..93ace3ff19606 100644
--- a/providers/google/src/airflow/providers/google/cloud/hooks/spanner.py
+++ b/providers/google/src/airflow/providers/google/cloud/hooks/spanner.py
@@ -19,8 +19,8 @@
 
 from __future__ import annotations
 
-from collections.abc import Sequence
-from typing import TYPE_CHECKING, Callable, NamedTuple
+from collections.abc import Callable, Sequence
+from typing import TYPE_CHECKING, NamedTuple
 
 from google.api_core.exceptions import AlreadyExists, GoogleAPICallError
 from google.cloud.spanner_v1.client import Client
diff --git a/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/ray.py b/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/ray.py
index 5aede4a0465e7..64054d1460802 100644
--- a/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/ray.py
+++ b/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/ray.py
@@ -57,7 +57,7 @@ def serialize_cluster_obj(self, cluster_obj: resources.Cluster) -> dict:
         """Serialize Cluster dataclass to dict."""
 
         def __encode_value(value: Any) -> Any:
-            if isinstance(value, (list, Repeated)):
+            if isinstance(value, list | Repeated):
                 return [__encode_value(nested_value) for nested_value in value]
             if isinstance(value, ScalarMapContainer):
                 return {key: __encode_value(nested_value) for key, nested_value in dict(value).items()}
diff --git a/providers/google/src/airflow/providers/google/cloud/hooks/vision.py b/providers/google/src/airflow/providers/google/cloud/hooks/vision.py
index a144ffad04add..ecbfa7c83f4c0 100644
--- a/providers/google/src/airflow/providers/google/cloud/hooks/vision.py
+++ b/providers/google/src/airflow/providers/google/cloud/hooks/vision.py
@@ -19,10 +19,10 @@
 
 from __future__ import annotations
 
-from collections.abc import Sequence
+from collections.abc import Callable, Sequence
 from copy import deepcopy
 from functools import cached_property
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 
 from google.api_core.gapic_v1.method import DEFAULT, _MethodDefault
 from google.cloud.vision_v1 import (
diff --git a/providers/google/src/airflow/providers/google/cloud/links/base.py b/providers/google/src/airflow/providers/google/cloud/links/base.py
index da5d68bfbe98b..b24b780c61318 100644
--- a/providers/google/src/airflow/providers/google/cloud/links/base.py
+++ b/providers/google/src/airflow/providers/google/cloud/links/base.py
@@ -106,7 +106,7 @@ def get_link(
         ti_key: TaskInstanceKey,
     ) -> str:
         if TYPE_CHECKING:
-            assert isinstance(operator, (GoogleCloudBaseOperator, BaseSensorOperator))
+            assert isinstance(operator, GoogleCloudBaseOperator | BaseSensorOperator)
 
         conf = self.get_config(operator, ti_key)
         if not conf:
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/pubsub.py b/providers/google/src/airflow/providers/google/cloud/operators/pubsub.py
index 4df7586c5e915..c24cacae49368 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/pubsub.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/pubsub.py
@@ -25,8 +25,8 @@
 
 from __future__ import annotations
 
-from collections.abc import Sequence
-from typing import TYPE_CHECKING, Any, Callable
+from collections.abc import Callable, Sequence
+from typing import TYPE_CHECKING, Any
 
 from google.api_core.gapic_v1.method import DEFAULT, _MethodDefault
 from google.cloud.pubsub_v1.types import (
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/bigquery_dts.py b/providers/google/src/airflow/providers/google/cloud/sensors/bigquery_dts.py
index c89763f9b6c49..d7572a05a0fb0 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/bigquery_dts.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/bigquery_dts.py
@@ -112,7 +112,7 @@ def __init__(
         self.location = location
 
     def _normalize_state_list(self, states) -> set[TransferState]:
-        states = {states} if isinstance(states, (str, TransferState, int)) else states
+        states = {states} if isinstance(states, str | TransferState | int) else states
         result = set()
         for state in states:
             if isinstance(state, str):
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/dataflow.py b/providers/google/src/airflow/providers/google/cloud/sensors/dataflow.py
index a82401ef49d48..38d131851e2c9 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/dataflow.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/dataflow.py
@@ -19,9 +19,9 @@
 
 from __future__ import annotations
 
-from collections.abc import Sequence
+from collections.abc import Callable, Sequence
 from functools import cached_property
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 
 from airflow.configuration import conf
 from airflow.exceptions import AirflowException
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/gcs.py b/providers/google/src/airflow/providers/google/cloud/sensors/gcs.py
index 92f3522db1fca..ccf3829cd50cc 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/gcs.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/gcs.py
@@ -21,9 +21,9 @@
 
 import os
 import textwrap
-from collections.abc import Sequence
+from collections.abc import Callable, Sequence
 from datetime import datetime, timedelta
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 
 from google.cloud.storage.retry import DEFAULT_RETRY
 
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/pubsub.py b/providers/google/src/airflow/providers/google/cloud/sensors/pubsub.py
index c52c5ecb0c39e..c93c7fcc5457d 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/pubsub.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/pubsub.py
@@ -19,9 +19,9 @@
 
 from __future__ import annotations
 
-from collections.abc import Sequence
+from collections.abc import Callable, Sequence
 from datetime import timedelta
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 
 from google.cloud import pubsub_v1
 from google.cloud.pubsub_v1.types import ReceivedMessage
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/cassandra_to_gcs.py b/providers/google/src/airflow/providers/google/cloud/transfers/cassandra_to_gcs.py
index 11500011109e2..f283649faac0d 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/cassandra_to_gcs.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/cassandra_to_gcs.py
@@ -259,7 +259,7 @@ def generate_data_dict(self, names: Iterable[str], values: Any) -> dict[str, Any
 
     def convert_value(self, value: Any | None) -> Any | None:
         """Convert value to BQ type."""
-        if not value or isinstance(value, (str, int, float, bool, dict)):
+        if not value or isinstance(value, str | int | float | bool | dict):
             return value
         if isinstance(value, bytes):
             return b64encode(value).decode("ascii")
@@ -267,13 +267,13 @@ def convert_value(self, value: Any | None) -> Any | None:
             if self.encode_uuid:
                 return b64encode(value.bytes).decode("ascii")
             return str(value)
-        if isinstance(value, (datetime, Date)):
+        if isinstance(value, datetime | Date):
             return str(value)
         if isinstance(value, Decimal):
             return float(value)
         if isinstance(value, Time):
             return str(value).split(".")[0]
-        if isinstance(value, (list, SortedSet)):
+        if isinstance(value, list | SortedSet):
             return self.convert_array_types(value)
         if hasattr(value, "_fields"):
             return self.convert_user_type(value)
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/mssql_to_gcs.py b/providers/google/src/airflow/providers/google/cloud/transfers/mssql_to_gcs.py
index 8f861aaee690a..17fd87e9284c5 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/mssql_to_gcs.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/mssql_to_gcs.py
@@ -114,7 +114,7 @@ def convert_type(cls, value, schema_type, **kwargs):
         """
         if isinstance(value, decimal.Decimal):
             return float(value)
-        if isinstance(value, (datetime.date, datetime.time)):
+        if isinstance(value, datetime.date | datetime.time):
             return value.isoformat()
         return value
 
diff --git a/providers/google/src/airflow/providers/google/cloud/utils/field_validator.py b/providers/google/src/airflow/providers/google/cloud/utils/field_validator.py
index 4a1f25ef25a6d..41c7859a6b960 100644
--- a/providers/google/src/airflow/providers/google/cloud/utils/field_validator.py
+++ b/providers/google/src/airflow/providers/google/cloud/utils/field_validator.py
@@ -134,8 +134,7 @@
 from __future__ import annotations
 
 import re
-from collections.abc import Sequence
-from typing import Callable
+from collections.abc import Callable, Sequence
 
 from airflow.exceptions import AirflowException
 from airflow.utils.log.logging_mixin import LoggingMixin
diff --git a/providers/google/src/airflow/providers/google/common/auth_backend/google_openid.py b/providers/google/src/airflow/providers/google/common/auth_backend/google_openid.py
index 6a71bc4846397..6567c6f2a0050 100644
--- a/providers/google/src/airflow/providers/google/common/auth_backend/google_openid.py
+++ b/providers/google/src/airflow/providers/google/common/auth_backend/google_openid.py
@@ -20,8 +20,9 @@
 from __future__ import annotations
 
 import logging
+from collections.abc import Callable
 from functools import wraps
-from typing import Callable, TypeVar, cast
+from typing import TypeVar, cast
 
 import google
 import google.auth.transport.requests
diff --git a/providers/google/src/airflow/providers/google/common/deprecated.py b/providers/google/src/airflow/providers/google/common/deprecated.py
index 8da1618d9f716..00ea534a9a0cb 100644
--- a/providers/google/src/airflow/providers/google/common/deprecated.py
+++ b/providers/google/src/airflow/providers/google/common/deprecated.py
@@ -18,8 +18,9 @@
 
 import inspect
 import re
+from collections.abc import Callable
 from datetime import date, datetime
-from typing import Any, Callable
+from typing import Any
 
 from deprecated import deprecated as standard_deprecated
 from deprecated.classic import ClassicAdapter
diff --git a/providers/google/src/airflow/providers/google/common/hooks/base_google.py b/providers/google/src/airflow/providers/google/common/hooks/base_google.py
index db5d24c8ba625..524acb030c8f3 100644
--- a/providers/google/src/airflow/providers/google/common/hooks/base_google.py
+++ b/providers/google/src/airflow/providers/google/common/hooks/base_google.py
@@ -26,10 +26,10 @@
 import logging
 import os
 import tempfile
-from collections.abc import Generator, Sequence
+from collections.abc import Callable, Generator, Sequence
 from contextlib import ExitStack, contextmanager
 from subprocess import check_output
-from typing import TYPE_CHECKING, Any, Callable, TypeVar, cast
+from typing import TYPE_CHECKING, Any, TypeVar, cast
 
 import google.auth
 import google.oauth2.service_account
@@ -93,7 +93,7 @@ def is_soft_quota_exception(exception: Exception):
     if isinstance(exception, Forbidden):
         return any(reason in error.details() for reason in INVALID_REASONS for error in exception.errors)
 
-    if isinstance(exception, (ResourceExhausted, TooManyRequests)):
+    if isinstance(exception, ResourceExhausted | TooManyRequests):
         return any(key in error.details() for key in INVALID_KEYS for error in exception.errors)
 
     return False
diff --git a/providers/google/src/airflow/providers/google/suite/transfers/sql_to_sheets.py b/providers/google/src/airflow/providers/google/suite/transfers/sql_to_sheets.py
index ed9243a0c900c..e791e3adb880c 100644
--- a/providers/google/src/airflow/providers/google/suite/transfers/sql_to_sheets.py
+++ b/providers/google/src/airflow/providers/google/suite/transfers/sql_to_sheets.py
@@ -88,7 +88,7 @@ def _data_prep(self, data):
         for row in data:
             item_list = []
             for item in row:
-                if isinstance(item, (datetime.date, datetime.datetime)):
+                if isinstance(item, datetime.date | datetime.datetime):
                     item = item.isoformat()
                 elif isinstance(item, int):  # To exclude int from the number check.
                     pass
diff --git a/providers/google/tests/system/google/cloud/dataflow/example_dataflow_native_python_async.py b/providers/google/tests/system/google/cloud/dataflow/example_dataflow_native_python_async.py
index b8016a96bf4b1..33e0554f7bc4b 100644
--- a/providers/google/tests/system/google/cloud/dataflow/example_dataflow_native_python_async.py
+++ b/providers/google/tests/system/google/cloud/dataflow/example_dataflow_native_python_async.py
@@ -23,8 +23,8 @@
 from __future__ import annotations
 
 import os
+from collections.abc import Callable
 from datetime import datetime
-from typing import Callable
 
 from airflow.exceptions import AirflowException
 from airflow.models.dag import DAG
diff --git a/providers/google/tests/system/google/cloud/dataflow/example_dataflow_sensors_deferrable.py b/providers/google/tests/system/google/cloud/dataflow/example_dataflow_sensors_deferrable.py
index 974ca6835c679..b9b110321154f 100644
--- a/providers/google/tests/system/google/cloud/dataflow/example_dataflow_sensors_deferrable.py
+++ b/providers/google/tests/system/google/cloud/dataflow/example_dataflow_sensors_deferrable.py
@@ -21,8 +21,8 @@
 from __future__ import annotations
 
 import os
+from collections.abc import Callable
 from datetime import datetime
-from typing import Callable
 
 from airflow.exceptions import AirflowException
 from airflow.models.dag import DAG
diff --git a/providers/grpc/pyproject.toml b/providers/grpc/pyproject.toml
index f56c15dfcdf97..f083c288b0918 100644
--- a/providers/grpc/pyproject.toml
+++ b/providers/grpc/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/grpc/src/airflow/providers/grpc/hooks/grpc.py b/providers/grpc/src/airflow/providers/grpc/hooks/grpc.py
index 2027f40b5834f..8171e49d36f4a 100644
--- a/providers/grpc/src/airflow/providers/grpc/hooks/grpc.py
+++ b/providers/grpc/src/airflow/providers/grpc/hooks/grpc.py
@@ -18,8 +18,8 @@
 
 from __future__ import annotations
 
-from collections.abc import Generator
-from typing import Any, Callable
+from collections.abc import Callable, Generator
+from typing import Any
 
 import grpc
 from google import auth as google_auth
diff --git a/providers/grpc/src/airflow/providers/grpc/operators/grpc.py b/providers/grpc/src/airflow/providers/grpc/operators/grpc.py
index 020852ccc1730..b877a4ddbf366 100644
--- a/providers/grpc/src/airflow/providers/grpc/operators/grpc.py
+++ b/providers/grpc/src/airflow/providers/grpc/operators/grpc.py
@@ -17,8 +17,8 @@
 # under the License.
 from __future__ import annotations
 
-from collections.abc import Sequence
-from typing import TYPE_CHECKING, Any, Callable
+from collections.abc import Callable, Sequence
+from typing import TYPE_CHECKING, Any
 
 from airflow.models import BaseOperator
 from airflow.providers.grpc.hooks.grpc import GrpcHook
diff --git a/providers/hashicorp/pyproject.toml b/providers/hashicorp/pyproject.toml
index 238a07391acfb..c30e04e3dec3d 100644
--- a/providers/hashicorp/pyproject.toml
+++ b/providers/hashicorp/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/http/pyproject.toml b/providers/http/pyproject.toml
index 1d9f8db806bce..58e0a14282756 100644
--- a/providers/http/pyproject.toml
+++ b/providers/http/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/http/src/airflow/providers/http/hooks/http.py b/providers/http/src/airflow/providers/http/hooks/http.py
index 99281fbe0e928..7635ab67e29b6 100644
--- a/providers/http/src/airflow/providers/http/hooks/http.py
+++ b/providers/http/src/airflow/providers/http/hooks/http.py
@@ -18,7 +18,8 @@
 from __future__ import annotations
 
 import copy
-from typing import TYPE_CHECKING, Any, Callable
+from collections.abc import Callable
+from typing import TYPE_CHECKING, Any
 from urllib.parse import urlparse
 
 import aiohttp
diff --git a/providers/http/src/airflow/providers/http/operators/http.py b/providers/http/src/airflow/providers/http/operators/http.py
index 2c7f260f39e12..ca36ac471c7fd 100644
--- a/providers/http/src/airflow/providers/http/operators/http.py
+++ b/providers/http/src/airflow/providers/http/operators/http.py
@@ -19,8 +19,8 @@
 
 import base64
 import pickle
-from collections.abc import Sequence
-from typing import TYPE_CHECKING, Any, Callable
+from collections.abc import Callable, Sequence
+from typing import TYPE_CHECKING, Any
 
 from aiohttp import BasicAuth
 from requests import Response
diff --git a/providers/http/src/airflow/providers/http/sensors/http.py b/providers/http/src/airflow/providers/http/sensors/http.py
index 55d306d9be213..a9d9274afd109 100644
--- a/providers/http/src/airflow/providers/http/sensors/http.py
+++ b/providers/http/src/airflow/providers/http/sensors/http.py
@@ -17,9 +17,9 @@
 # under the License.
 from __future__ import annotations
 
-from collections.abc import Sequence
+from collections.abc import Callable, Sequence
 from datetime import timedelta
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 
 from airflow.configuration import conf
 from airflow.exceptions import AirflowException
diff --git a/providers/http/src/airflow/providers/http/triggers/http.py b/providers/http/src/airflow/providers/http/triggers/http.py
index 6c1d13b136334..3708e5e13ed69 100644
--- a/providers/http/src/airflow/providers/http/triggers/http.py
+++ b/providers/http/src/airflow/providers/http/triggers/http.py
@@ -142,7 +142,7 @@ async def _convert_response(client_response: ClientResponse) -> requests.Respons
         response.reason = str(client_response.reason)
         cookies = RequestsCookieJar()
         for k, v in client_response.cookies.items():
-            cookies.set(k, v)
+            cookies.set(k, str(v))  # Convert Morsel to string
         response.cookies = cookies
         return response
 
diff --git a/providers/imap/pyproject.toml b/providers/imap/pyproject.toml
index 67593b84b724a..9084ee701fecc 100644
--- a/providers/imap/pyproject.toml
+++ b/providers/imap/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/influxdb/pyproject.toml b/providers/influxdb/pyproject.toml
index e5a78d219b59a..3d42f806d1842 100644
--- a/providers/influxdb/pyproject.toml
+++ b/providers/influxdb/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/jdbc/pyproject.toml b/providers/jdbc/pyproject.toml
index ae4ce6c8be386..81703dcb8114d 100644
--- a/providers/jdbc/pyproject.toml
+++ b/providers/jdbc/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/jenkins/pyproject.toml b/providers/jenkins/pyproject.toml
index 390c607067ec0..6d9121af4558f 100644
--- a/providers/jenkins/pyproject.toml
+++ b/providers/jenkins/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/jenkins/src/airflow/providers/jenkins/operators/jenkins_job_trigger.py b/providers/jenkins/src/airflow/providers/jenkins/operators/jenkins_job_trigger.py
index a4e5d6eeec3c2..0b7d83372d433 100644
--- a/providers/jenkins/src/airflow/providers/jenkins/operators/jenkins_job_trigger.py
+++ b/providers/jenkins/src/airflow/providers/jenkins/operators/jenkins_job_trigger.py
@@ -19,11 +19,10 @@
 
 import ast
 import json
-import socket
 import time
 from collections.abc import Iterable, Mapping, Sequence
 from functools import cached_property
-from typing import Any, Union
+from typing import Any
 from urllib.error import HTTPError, URLError
 
 import jenkins
@@ -35,7 +34,7 @@
 from airflow.providers.jenkins.hooks.jenkins import JenkinsHook
 
 JenkinsRequest = Mapping[str, Any]
-ParamType = Union[str, dict, list, None]
+ParamType = str | dict | list | None
 
 
 def jenkins_request_with_headers(jenkins_server: Jenkins, req: Request) -> JenkinsRequest:
@@ -67,7 +66,7 @@ def jenkins_request_with_headers(jenkins_server: Jenkins, req: Request) -> Jenki
         if e.code == 404:
             raise jenkins.NotFoundException("Requested item could not be found")
         raise
-    except socket.timeout as e:
+    except TimeoutError as e:
         raise jenkins.TimeoutException(f"Error in request: {e}")
     except URLError as e:
         raise JenkinsException(f"Error in request: {e.reason}")
diff --git a/providers/keycloak/pyproject.toml b/providers/keycloak/pyproject.toml
index 29365f2966eec..8a0fda9d74fe3 100644
--- a/providers/keycloak/pyproject.toml
+++ b/providers/keycloak/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/microsoft/azure/pyproject.toml b/providers/microsoft/azure/pyproject.toml
index 34e07d0198957..68e64242e8dee 100644
--- a/providers/microsoft/azure/pyproject.toml
+++ b/providers/microsoft/azure/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/asb.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/asb.py
index c98c99f928eac..ae51108eb43de 100644
--- a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/asb.py
+++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/asb.py
@@ -16,7 +16,8 @@
 # under the License.
 from __future__ import annotations
 
-from typing import TYPE_CHECKING, Any, Callable
+from collections.abc import Callable
+from typing import TYPE_CHECKING, Any
 from uuid import UUID, uuid4
 
 from azure.core.exceptions import ResourceNotFoundError
diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/cosmos.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/cosmos.py
index da11ce10e0a16..f654c0b386190 100644
--- a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/cosmos.py
+++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/cosmos.py
@@ -27,7 +27,7 @@
 from __future__ import annotations
 
 import uuid
-from typing import TYPE_CHECKING, Any, Union
+from typing import TYPE_CHECKING, Any
 from urllib.parse import urlparse
 
 from azure.cosmos import PartitionKey
@@ -44,7 +44,7 @@
 )
 
 if TYPE_CHECKING:
-    PartitionKeyType = Union[str, list[str]]
+    PartitionKeyType = str | list[str]
 
 
 class AzureCosmosDBHook(BaseHook):
diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/data_factory.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/data_factory.py
index d2e2a6207b16c..8f90fc3769d52 100644
--- a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/data_factory.py
+++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/data_factory.py
@@ -35,8 +35,9 @@
 
 import inspect
 import time
+from collections.abc import Callable
 from functools import wraps
-from typing import IO, TYPE_CHECKING, Any, Callable, TypeVar, Union, cast
+from typing import IO, TYPE_CHECKING, Any, TypeVar, cast
 
 from asgiref.sync import sync_to_async
 from azure.identity import ClientSecretCredential, DefaultAzureCredential
@@ -68,8 +69,8 @@
         TriggerResource,
     )
 
-Credentials = Union[ClientSecretCredential, DefaultAzureCredential]
-AsyncCredentials = Union[AsyncClientSecretCredential, AsyncDefaultAzureCredential]
+Credentials = ClientSecretCredential | DefaultAzureCredential
+AsyncCredentials = AsyncClientSecretCredential | AsyncDefaultAzureCredential
 
 T = TypeVar("T", bound=Any)
 
diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/data_lake.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/data_lake.py
index f18ba472015d1..c01dadc03b3cd 100644
--- a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/data_lake.py
+++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/data_lake.py
@@ -18,7 +18,7 @@
 from __future__ import annotations
 
 from functools import cached_property
-from typing import Any, Union
+from typing import Any
 
 from azure.core.exceptions import ResourceExistsError, ResourceNotFoundError
 from azure.datalake.store import core, lib, multithread
@@ -41,7 +41,7 @@
     get_sync_default_azure_credential,
 )
 
-Credentials = Union[ClientSecretCredential, AzureIdentityCredentialAdapter, DefaultAzureCredential]
+Credentials = ClientSecretCredential | AzureIdentityCredentialAdapter | DefaultAzureCredential
 
 
 class AzureDataLakeHook(BaseHook):
diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/synapse.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/synapse.py
index fe00439a0b916..9c184b378a558 100644
--- a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/synapse.py
+++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/synapse.py
@@ -17,7 +17,7 @@
 from __future__ import annotations
 
 import time
-from typing import TYPE_CHECKING, Any, Union
+from typing import TYPE_CHECKING, Any
 
 from azure.core.exceptions import ServiceRequestError
 from azure.identity import ClientSecretCredential, DefaultAzureCredential
@@ -36,7 +36,7 @@
     from azure.synapse.artifacts.models import CreateRunResponse, PipelineRun
     from azure.synapse.spark.models import SparkBatchJobOptions
 
-Credentials = Union[ClientSecretCredential, DefaultAzureCredential]
+Credentials = ClientSecretCredential | DefaultAzureCredential
 
 
 class AzureSynapseSparkBatchRunStatus:
diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/wasb.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/wasb.py
index 7ff704e0f5e45..05cdc7ef283ce 100644
--- a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/wasb.py
+++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/wasb.py
@@ -29,7 +29,7 @@
 import logging
 import os
 from functools import cached_property
-from typing import TYPE_CHECKING, Any, Union
+from typing import TYPE_CHECKING, Any
 
 from asgiref.sync import sync_to_async
 from azure.core.exceptions import HttpResponseError, ResourceExistsError, ResourceNotFoundError
@@ -57,7 +57,7 @@
 if TYPE_CHECKING:
     from azure.storage.blob._models import BlobProperties
 
-AsyncCredentials = Union[AsyncClientSecretCredential, AsyncDefaultAzureCredential]
+AsyncCredentials = AsyncClientSecretCredential | AsyncDefaultAzureCredential
 
 
 class WasbHook(BaseHook):
diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/operators/asb.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/operators/asb.py
index dfd0147c9c889..d74006df4dc8e 100644
--- a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/operators/asb.py
+++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/operators/asb.py
@@ -16,8 +16,8 @@
 # under the License.
 from __future__ import annotations
 
-from collections.abc import Sequence
-from typing import TYPE_CHECKING, Any, Callable
+from collections.abc import Callable, Sequence
+from typing import TYPE_CHECKING, Any
 from uuid import UUID
 
 from airflow.models import BaseOperator
diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/operators/msgraph.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/operators/msgraph.py
index 31d342ccc143a..4f4b3b6dc00cb 100644
--- a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/operators/msgraph.py
+++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/operators/msgraph.py
@@ -18,13 +18,12 @@
 from __future__ import annotations
 
 import warnings
-from collections.abc import Sequence
+from collections.abc import Callable, Sequence
 from contextlib import suppress
 from copy import deepcopy
 from typing import (
     TYPE_CHECKING,
     Any,
-    Callable,
 )
 
 from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning, TaskDeferred
diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/msgraph.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/msgraph.py
index 245bd881e1ea0..d59cb13a46f89 100644
--- a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/msgraph.py
+++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/msgraph.py
@@ -17,8 +17,8 @@
 # under the License.
 from __future__ import annotations
 
-from collections.abc import Sequence
-from typing import TYPE_CHECKING, Any, Callable
+from collections.abc import Callable, Sequence
+from typing import TYPE_CHECKING, Any
 
 from airflow.exceptions import AirflowException
 from airflow.providers.common.compat.standard.triggers import TimeDeltaTrigger
diff --git a/providers/microsoft/mssql/pyproject.toml b/providers/microsoft/mssql/pyproject.toml
index acaaad5ce1c92..e9b40d78144f3 100644
--- a/providers/microsoft/mssql/pyproject.toml
+++ b/providers/microsoft/mssql/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/microsoft/psrp/pyproject.toml b/providers/microsoft/psrp/pyproject.toml
index a443d51e18e9e..1a404ca3f0b5a 100644
--- a/providers/microsoft/psrp/pyproject.toml
+++ b/providers/microsoft/psrp/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/microsoft/psrp/src/airflow/providers/microsoft/psrp/hooks/psrp.py b/providers/microsoft/psrp/src/airflow/providers/microsoft/psrp/hooks/psrp.py
index cc5e2da178630..877c3d237f547 100644
--- a/providers/microsoft/psrp/src/airflow/providers/microsoft/psrp/hooks/psrp.py
+++ b/providers/microsoft/psrp/src/airflow/providers/microsoft/psrp/hooks/psrp.py
@@ -17,11 +17,11 @@
 # under the License.
 from __future__ import annotations
 
-from collections.abc import Generator
+from collections.abc import Callable, Generator
 from contextlib import contextmanager
 from copy import copy
 from logging import DEBUG, ERROR, INFO, WARNING
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 from weakref import WeakKeyDictionary
 
 from pypsrp.host import PSHost
diff --git a/providers/microsoft/winrm/pyproject.toml b/providers/microsoft/winrm/pyproject.toml
index 9b9dbd5d97b1f..356d6cefd3afa 100644
--- a/providers/microsoft/winrm/pyproject.toml
+++ b/providers/microsoft/winrm/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/mongo/pyproject.toml b/providers/mongo/pyproject.toml
index 8dbb08723e547..af17cb618ed88 100644
--- a/providers/mongo/pyproject.toml
+++ b/providers/mongo/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/mongo/src/airflow/providers/mongo/hooks/mongo.py b/providers/mongo/src/airflow/providers/mongo/hooks/mongo.py
index 20dbf9f0dda90..c38c704a72975 100644
--- a/providers/mongo/src/airflow/providers/mongo/hooks/mongo.py
+++ b/providers/mongo/src/airflow/providers/mongo/hooks/mongo.py
@@ -32,10 +32,10 @@
 
 if TYPE_CHECKING:
     from types import TracebackType
+    from typing import Literal
 
     from pymongo.collection import Collection as MongoCollection
     from pymongo.command_cursor import CommandCursor
-    from typing_extensions import Literal
 
     from airflow.models import Connection
 
diff --git a/providers/mysql/pyproject.toml b/providers/mysql/pyproject.toml
index cc900d6d332dc..aee7f18cfd10d 100644
--- a/providers/mysql/pyproject.toml
+++ b/providers/mysql/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/neo4j/pyproject.toml b/providers/neo4j/pyproject.toml
index 808753ed6180a..761b15873eecb 100644
--- a/providers/neo4j/pyproject.toml
+++ b/providers/neo4j/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/odbc/pyproject.toml b/providers/odbc/pyproject.toml
index c975c4a7785cd..f670af470c0db 100644
--- a/providers/odbc/pyproject.toml
+++ b/providers/odbc/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/openai/pyproject.toml b/providers/openai/pyproject.toml
index ef4aa4e7372bb..7422c6aa3a6b3 100644
--- a/providers/openai/pyproject.toml
+++ b/providers/openai/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/openai/src/airflow/providers/openai/operators/openai.py b/providers/openai/src/airflow/providers/openai/operators/openai.py
index 878c5f8870eed..97356ad2f55c2 100644
--- a/providers/openai/src/airflow/providers/openai/operators/openai.py
+++ b/providers/openai/src/airflow/providers/openai/operators/openai.py
@@ -75,7 +75,7 @@ def hook(self) -> OpenAIHook:
         return OpenAIHook(conn_id=self.conn_id)
 
     def execute(self, context: Context) -> list[float]:
-        if not self.input_text or not isinstance(self.input_text, (str, list)):
+        if not self.input_text or not isinstance(self.input_text, str | list):
             raise ValueError(
                 "The 'input_text' must be a non-empty string, list of strings, list of integers, or list of lists of integers."
             )
diff --git a/providers/openfaas/pyproject.toml b/providers/openfaas/pyproject.toml
index c3f215f2ef974..293ce8bb4b951 100644
--- a/providers/openfaas/pyproject.toml
+++ b/providers/openfaas/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/openlineage/pyproject.toml b/providers/openlineage/pyproject.toml
index dfecc87246762..fa006f17fe469 100644
--- a/providers/openlineage/pyproject.toml
+++ b/providers/openlineage/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/openlineage/src/airflow/providers/openlineage/extractors/base.py b/providers/openlineage/src/airflow/providers/openlineage/extractors/base.py
index 05eed3960ca3e..61e17ac099846 100644
--- a/providers/openlineage/src/airflow/providers/openlineage/extractors/base.py
+++ b/providers/openlineage/src/airflow/providers/openlineage/extractors/base.py
@@ -19,7 +19,7 @@
 
 import warnings
 from abc import ABC, abstractmethod
-from typing import Generic, TypeVar, Union
+from typing import Generic, TypeVar
 
 from attrs import Factory, define
 from openlineage.client.event_v2 import Dataset as OLDataset
@@ -33,7 +33,7 @@
 
 # this is not to break static checks compatibility with v1 OpenLineage facet classes
 DatasetSubclass = TypeVar("DatasetSubclass", bound=OLDataset)
-BaseFacetSubclass = TypeVar("BaseFacetSubclass", bound=Union[BaseFacet_V1, RunFacet, JobFacet])
+BaseFacetSubclass = TypeVar("BaseFacetSubclass", bound=BaseFacet_V1 | RunFacet | JobFacet)
 
 OL_METHOD_NAME_START = "get_openlineage_facets_on_start"
 OL_METHOD_NAME_COMPLETE = "get_openlineage_facets_on_complete"
diff --git a/providers/openlineage/src/airflow/providers/openlineage/extractors/python.py b/providers/openlineage/src/airflow/providers/openlineage/extractors/python.py
index c716e28b4d8f0..37054d25d2942 100644
--- a/providers/openlineage/src/airflow/providers/openlineage/extractors/python.py
+++ b/providers/openlineage/src/airflow/providers/openlineage/extractors/python.py
@@ -18,7 +18,7 @@
 from __future__ import annotations
 
 import inspect
-from typing import Callable
+from collections.abc import Callable
 
 from openlineage.client.facet_v2 import source_code_job
 
diff --git a/providers/openlineage/src/airflow/providers/openlineage/sqlparser.py b/providers/openlineage/src/airflow/providers/openlineage/sqlparser.py
index d2d37b317355f..9cb4ef6f319b8 100644
--- a/providers/openlineage/src/airflow/providers/openlineage/sqlparser.py
+++ b/providers/openlineage/src/airflow/providers/openlineage/sqlparser.py
@@ -17,7 +17,8 @@
 from __future__ import annotations
 
 import logging
-from typing import TYPE_CHECKING, Callable, TypedDict
+from collections.abc import Callable
+from typing import TYPE_CHECKING, TypedDict
 
 import sqlparse
 from attrs import define
diff --git a/providers/openlineage/src/airflow/providers/openlineage/utils/sql.py b/providers/openlineage/src/airflow/providers/openlineage/utils/sql.py
index 1223a3618bd7b..2143dd2f19fd7 100644
--- a/providers/openlineage/src/airflow/providers/openlineage/utils/sql.py
+++ b/providers/openlineage/src/airflow/providers/openlineage/utils/sql.py
@@ -20,7 +20,7 @@
 from collections import defaultdict
 from contextlib import closing
 from enum import IntEnum
-from typing import TYPE_CHECKING, Optional
+from typing import TYPE_CHECKING
 
 from attrs import define
 from openlineage.client.event_v2 import Dataset
@@ -50,7 +50,7 @@ class ColumnIndex(IntEnum):
     DATABASE = 5
 
 
-TablesHierarchy = dict[Optional[str], dict[Optional[str], list[str]]]
+TablesHierarchy = dict[str | None, dict[str | None, list[str]]]
 
 
 @define
diff --git a/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py b/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py
index 3d810822f6d41..9134cdb191a61 100644
--- a/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py
+++ b/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py
@@ -20,10 +20,11 @@
 import datetime
 import json
 import logging
+from collections.abc import Callable
 from contextlib import suppress
 from functools import wraps
 from importlib import metadata
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 
 import attrs
 from openlineage.client.facet_v2 import parent_run
@@ -205,7 +206,7 @@ def get_user_provided_run_facets(ti: TaskInstance, ti_state: TaskInstanceState)
 
 
 def get_fully_qualified_class_name(operator: BaseOperator | MappedOperator) -> str:
-    if isinstance(operator, (MappedOperator, SerializedBaseOperator)):
+    if isinstance(operator, MappedOperator | SerializedBaseOperator):
         # as in airflow.api_connexion.schemas.common_schema.ClassReferenceSchema
         return operator._task_module + "." + operator._task_type  # type: ignore
     op_class = get_operator_class(operator)
@@ -222,7 +223,7 @@ def is_selective_lineage_enabled(obj: DAG | BaseOperator | MappedOperator) -> bo
         return True
     if isinstance(obj, DAG):
         return is_dag_lineage_enabled(obj)
-    if isinstance(obj, (BaseOperator, MappedOperator)):
+    if isinstance(obj, BaseOperator | MappedOperator):
         return is_task_lineage_enabled(obj)
     raise TypeError("is_selective_lineage_enabled can only be used on DAG or Operator objects")
 
@@ -300,7 +301,7 @@ def _cast_basic_types(value):
             return value.isoformat()
         if isinstance(value, datetime.timedelta):
             return f"{value.total_seconds()} seconds"
-        if isinstance(value, (set, list, tuple)):
+        if isinstance(value, set | list | tuple):
             return str(list(value))
         return value
 
@@ -375,7 +376,7 @@ def serialize_timetable(cls, dag: DAG) -> dict[str, Any]:
                 return serialized
 
             def _serialize_ds(ds: BaseDatasetEventInput) -> dict[str, Any]:
-                if isinstance(ds, (DatasetAny, DatasetAll)):
+                if isinstance(ds, DatasetAny | DatasetAll):
                     return {
                         "__type": "dataset_all" if isinstance(ds, DatasetAll) else "dataset_any",
                         "objects": [_serialize_ds(child) for child in ds.objects],
diff --git a/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py b/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
index 0b686727a9a59..f268cdbe3cfb7 100644
--- a/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
+++ b/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
@@ -18,9 +18,10 @@
 
 import uuid
 from collections import defaultdict
+from collections.abc import Callable
 from concurrent.futures import Future
 from contextlib import suppress
-from typing import TYPE_CHECKING, Callable
+from typing import TYPE_CHECKING
 from unittest import mock
 from unittest.mock import MagicMock, patch
 
diff --git a/providers/opensearch/pyproject.toml b/providers/opensearch/pyproject.toml
index fdb1cbf961f80..32427508b0f69 100644
--- a/providers/opensearch/pyproject.toml
+++ b/providers/opensearch/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/opensearch/src/airflow/providers/opensearch/log/os_response.py b/providers/opensearch/src/airflow/providers/opensearch/log/os_response.py
index 2827cb0f04547..4479e21b9ce45 100644
--- a/providers/opensearch/src/airflow/providers/opensearch/log/os_response.py
+++ b/providers/opensearch/src/airflow/providers/opensearch/log/os_response.py
@@ -130,7 +130,7 @@ def __iter__(self) -> Iterator[Hit]:
 
     def __getitem__(self, key):
         """Retrieve a specific hit or a slice of hits from the Elasticsearch response."""
-        if isinstance(key, (slice, int)):
+        if isinstance(key, slice | int):
             return self.hits[key]
         return super().__getitem__(key)
 
diff --git a/providers/opensearch/src/airflow/providers/opensearch/log/os_task_handler.py b/providers/opensearch/src/airflow/providers/opensearch/log/os_task_handler.py
index bdb8659c858fd..5a6b60aae24d6 100644
--- a/providers/opensearch/src/airflow/providers/opensearch/log/os_task_handler.py
+++ b/providers/opensearch/src/airflow/providers/opensearch/log/os_task_handler.py
@@ -22,9 +22,10 @@
 import sys
 import time
 from collections import defaultdict
+from collections.abc import Callable
 from datetime import datetime
 from operator import attrgetter
-from typing import TYPE_CHECKING, Any, Callable, Literal
+from typing import TYPE_CHECKING, Any, Literal
 
 import pendulum
 from opensearchpy import OpenSearch
@@ -47,11 +48,9 @@
 
 
 if AIRFLOW_V_3_0_PLUS:
-    from typing import Union
-
     from airflow.utils.log.file_task_handler import StructuredLogMessage
 
-    OsLogMsgType = Union[list[StructuredLogMessage], str]
+    OsLogMsgType = list[StructuredLogMessage] | str
 else:
     OsLogMsgType = list[tuple[str, str]]  # type: ignore[misc]
 
diff --git a/providers/opsgenie/pyproject.toml b/providers/opsgenie/pyproject.toml
index 33ad6faa4577d..ecdee6d22c884 100644
--- a/providers/opsgenie/pyproject.toml
+++ b/providers/opsgenie/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/oracle/pyproject.toml b/providers/oracle/pyproject.toml
index 2e63d60e0aa58..c54ab47567b02 100644
--- a/providers/oracle/pyproject.toml
+++ b/providers/oracle/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/oracle/src/airflow/providers/oracle/hooks/oracle.py b/providers/oracle/src/airflow/providers/oracle/hooks/oracle.py
index 39b32fd119494..355a7b0d8f978 100644
--- a/providers/oracle/src/airflow/providers/oracle/hooks/oracle.py
+++ b/providers/oracle/src/airflow/providers/oracle/hooks/oracle.py
@@ -156,14 +156,14 @@ def get_conn(self) -> oracledb.Connection:
         if thick_mode is True:
             if self.thick_mode_lib_dir is None:
                 self.thick_mode_lib_dir = conn.extra_dejson.get("thick_mode_lib_dir")
-                if not isinstance(self.thick_mode_lib_dir, (str, type(None))):
+                if not isinstance(self.thick_mode_lib_dir, str | type(None)):
                     raise TypeError(
                         f"thick_mode_lib_dir expected str or None, "
                         f"got {type(self.thick_mode_lib_dir).__name__}"
                     )
             if self.thick_mode_config_dir is None:
                 self.thick_mode_config_dir = conn.extra_dejson.get("thick_mode_config_dir")
-                if not isinstance(self.thick_mode_config_dir, (str, type(None))):
+                if not isinstance(self.thick_mode_config_dir, str | type(None)):
                     raise TypeError(
                         f"thick_mode_config_dir expected str or None, "
                         f"got {type(self.thick_mode_config_dir).__name__}"
diff --git a/providers/pagerduty/pyproject.toml b/providers/pagerduty/pyproject.toml
index d708a60a75afc..11d892e73c636 100644
--- a/providers/pagerduty/pyproject.toml
+++ b/providers/pagerduty/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/papermill/pyproject.toml b/providers/papermill/pyproject.toml
index 48e029356b745..6e8ac0550c057 100644
--- a/providers/papermill/pyproject.toml
+++ b/providers/papermill/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/pgvector/pyproject.toml b/providers/pgvector/pyproject.toml
index 15c434e33483c..ac825d11f1987 100644
--- a/providers/pgvector/pyproject.toml
+++ b/providers/pgvector/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/pinecone/pyproject.toml b/providers/pinecone/pyproject.toml
index 6053921a664c7..136e2a8c0c1ac 100644
--- a/providers/pinecone/pyproject.toml
+++ b/providers/pinecone/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/postgres/pyproject.toml b/providers/postgres/pyproject.toml
index 8c4daefbc1401..9314d9cc2d38f 100644
--- a/providers/postgres/pyproject.toml
+++ b/providers/postgres/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/postgres/src/airflow/providers/postgres/hooks/postgres.py b/providers/postgres/src/airflow/providers/postgres/hooks/postgres.py
index b201a155bd29c..3c506656c3d6d 100644
--- a/providers/postgres/src/airflow/providers/postgres/hooks/postgres.py
+++ b/providers/postgres/src/airflow/providers/postgres/hooks/postgres.py
@@ -20,7 +20,7 @@
 import os
 from contextlib import closing
 from copy import deepcopy
-from typing import TYPE_CHECKING, Any, Union
+from typing import TYPE_CHECKING, Any, TypeAlias
 
 import psycopg2
 import psycopg2.extensions
@@ -39,7 +39,7 @@
     from airflow.providers.common.sql.dialects.dialect import Dialect
     from airflow.providers.openlineage.sqlparser import DatabaseInfo
 
-CursorType = Union[DictCursor, RealDictCursor, NamedTupleCursor]
+CursorType: TypeAlias = DictCursor | RealDictCursor | NamedTupleCursor
 
 
 class PostgresHook(DbApiHook):
@@ -228,7 +228,7 @@ def _serialize_cell(cell: object, conn: connection | None = None) -> Any:
         :param conn: The database connection
         :return: The cell
         """
-        if isinstance(cell, (dict, list)):
+        if isinstance(cell, dict | list):
             cell = Json(cell)
         return cell
 
diff --git a/providers/presto/pyproject.toml b/providers/presto/pyproject.toml
index e3c992e92195e..34bc2f1a9aba0 100644
--- a/providers/presto/pyproject.toml
+++ b/providers/presto/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/qdrant/pyproject.toml b/providers/qdrant/pyproject.toml
index 6d473726d7fbc..cd967268e840b 100644
--- a/providers/qdrant/pyproject.toml
+++ b/providers/qdrant/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/redis/pyproject.toml b/providers/redis/pyproject.toml
index 4acc215113c5c..6dacd74327a18 100644
--- a/providers/redis/pyproject.toml
+++ b/providers/redis/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/salesforce/pyproject.toml b/providers/salesforce/pyproject.toml
index c844229839fc0..26134bd4c04d4 100644
--- a/providers/salesforce/pyproject.toml
+++ b/providers/salesforce/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/salesforce/src/airflow/providers/salesforce/operators/bulk.py b/providers/salesforce/src/airflow/providers/salesforce/operators/bulk.py
index 4baff384efc10..fe33f5ab8f4ef 100644
--- a/providers/salesforce/src/airflow/providers/salesforce/operators/bulk.py
+++ b/providers/salesforce/src/airflow/providers/salesforce/operators/bulk.py
@@ -23,8 +23,9 @@
 from airflow.providers.salesforce.hooks.salesforce import SalesforceHook
 
 if TYPE_CHECKING:
+    from typing import Literal
+
     from simple_salesforce.bulk import SFBulkHandler
-    from typing_extensions import Literal
 
     try:
         from airflow.sdk.definitions.context import Context
diff --git a/providers/samba/pyproject.toml b/providers/samba/pyproject.toml
index 44f1f9a4b5ebf..572e7ad34b70b 100644
--- a/providers/samba/pyproject.toml
+++ b/providers/samba/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/segment/pyproject.toml b/providers/segment/pyproject.toml
index c6a926069f887..091fd96c6a638 100644
--- a/providers/segment/pyproject.toml
+++ b/providers/segment/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/sendgrid/pyproject.toml b/providers/sendgrid/pyproject.toml
index d1040c1897cbc..a4a3d748cf033 100644
--- a/providers/sendgrid/pyproject.toml
+++ b/providers/sendgrid/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/sendgrid/src/airflow/providers/sendgrid/utils/emailer.py b/providers/sendgrid/src/airflow/providers/sendgrid/utils/emailer.py
index f22a080deba78..6ab97e577aede 100644
--- a/providers/sendgrid/src/airflow/providers/sendgrid/utils/emailer.py
+++ b/providers/sendgrid/src/airflow/providers/sendgrid/utils/emailer.py
@@ -24,7 +24,6 @@
 import mimetypes
 import os
 from collections.abc import Iterable
-from typing import Union
 
 import sendgrid
 from sendgrid.helpers.mail import (
@@ -44,7 +43,7 @@
 
 log = logging.getLogger(__name__)
 
-AddressesType = Union[str, Iterable[str]]
+AddressesType = str | Iterable[str]
 
 
 def send_email(
diff --git a/providers/sftp/pyproject.toml b/providers/sftp/pyproject.toml
index c0bdea87c741b..841b78d1b1fed 100644
--- a/providers/sftp/pyproject.toml
+++ b/providers/sftp/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/sftp/src/airflow/providers/sftp/decorators/sensors/sftp.py b/providers/sftp/src/airflow/providers/sftp/decorators/sensors/sftp.py
index 1d345ae8d0311..a55b2c67c20a0 100644
--- a/providers/sftp/src/airflow/providers/sftp/decorators/sensors/sftp.py
+++ b/providers/sftp/src/airflow/providers/sftp/decorators/sensors/sftp.py
@@ -17,8 +17,7 @@
 
 from __future__ import annotations
 
-from collections.abc import Sequence
-from typing import Callable
+from collections.abc import Callable, Sequence
 
 from airflow.providers.sftp.version_compat import AIRFLOW_V_3_0_PLUS
 
diff --git a/providers/sftp/src/airflow/providers/sftp/hooks/sftp.py b/providers/sftp/src/airflow/providers/sftp/hooks/sftp.py
index e13fd80fffcb1..f5e3c798b1b01 100644
--- a/providers/sftp/src/airflow/providers/sftp/hooks/sftp.py
+++ b/providers/sftp/src/airflow/providers/sftp/hooks/sftp.py
@@ -24,12 +24,12 @@
 import os
 import stat
 import warnings
-from collections.abc import Generator, Sequence
+from collections.abc import Callable, Generator, Sequence
 from contextlib import contextmanager
 from fnmatch import fnmatch
 from io import BytesIO
 from pathlib import Path
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 
 import asyncssh
 from asgiref.sync import sync_to_async
diff --git a/providers/sftp/src/airflow/providers/sftp/sensors/sftp.py b/providers/sftp/src/airflow/providers/sftp/sensors/sftp.py
index 4d80d9491efdc..dc7758e47f5a2 100644
--- a/providers/sftp/src/airflow/providers/sftp/sensors/sftp.py
+++ b/providers/sftp/src/airflow/providers/sftp/sensors/sftp.py
@@ -20,9 +20,9 @@
 from __future__ import annotations
 
 import os
-from collections.abc import Sequence
+from collections.abc import Callable, Sequence
 from datetime import datetime, timedelta
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 
 from paramiko.sftp import SFTP_NO_SUCH_FILE
 
diff --git a/providers/singularity/pyproject.toml b/providers/singularity/pyproject.toml
index 932881ede0359..f64a24941505d 100644
--- a/providers/singularity/pyproject.toml
+++ b/providers/singularity/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/slack/pyproject.toml b/providers/slack/pyproject.toml
index 6b0123cd30fe2..24677eb44aca7 100644
--- a/providers/slack/pyproject.toml
+++ b/providers/slack/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/slack/src/airflow/providers/slack/hooks/slack_webhook.py b/providers/slack/src/airflow/providers/slack/hooks/slack_webhook.py
index 9eb376227cd02..f9a66c43d6020 100644
--- a/providers/slack/src/airflow/providers/slack/hooks/slack_webhook.py
+++ b/providers/slack/src/airflow/providers/slack/hooks/slack_webhook.py
@@ -19,8 +19,9 @@
 
 import json
 import warnings
+from collections.abc import Callable
 from functools import cached_property, wraps
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 
 from slack_sdk import WebhookClient
 
diff --git a/providers/slack/src/airflow/providers/slack/operators/slack.py b/providers/slack/src/airflow/providers/slack/operators/slack.py
index e4035d057a19e..aed353ea5a021 100644
--- a/providers/slack/src/airflow/providers/slack/operators/slack.py
+++ b/providers/slack/src/airflow/providers/slack/operators/slack.py
@@ -20,9 +20,7 @@
 import json
 from collections.abc import Sequence
 from functools import cached_property
-from typing import TYPE_CHECKING, Any
-
-from typing_extensions import Literal
+from typing import TYPE_CHECKING, Any, Literal
 
 from airflow.models import BaseOperator
 from airflow.providers.slack.hooks.slack import SlackHook
diff --git a/providers/slack/src/airflow/providers/slack/transfers/sql_to_slack.py b/providers/slack/src/airflow/providers/slack/transfers/sql_to_slack.py
index 6cf42418640fc..dfe0f07e6146d 100644
--- a/providers/slack/src/airflow/providers/slack/transfers/sql_to_slack.py
+++ b/providers/slack/src/airflow/providers/slack/transfers/sql_to_slack.py
@@ -19,9 +19,7 @@
 from collections.abc import Mapping, Sequence
 from functools import cached_property
 from tempfile import NamedTemporaryFile
-from typing import TYPE_CHECKING, Any
-
-from typing_extensions import Literal
+from typing import TYPE_CHECKING, Any, Literal
 
 from airflow.exceptions import AirflowException, AirflowSkipException
 from airflow.providers.slack.hooks.slack import SlackHook
diff --git a/providers/smtp/pyproject.toml b/providers/smtp/pyproject.toml
index b8c384991a434..7ea0cc937e5d4 100644
--- a/providers/smtp/pyproject.toml
+++ b/providers/smtp/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/snowflake/pyproject.toml b/providers/snowflake/pyproject.toml
index 311c2da8b3ea7..00d09db4db150 100644
--- a/providers/snowflake/pyproject.toml
+++ b/providers/snowflake/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/snowflake/src/airflow/providers/snowflake/decorators/snowpark.py b/providers/snowflake/src/airflow/providers/snowflake/decorators/snowpark.py
index c299fbb8691c8..a0dabd2193ceb 100644
--- a/providers/snowflake/src/airflow/providers/snowflake/decorators/snowpark.py
+++ b/providers/snowflake/src/airflow/providers/snowflake/decorators/snowpark.py
@@ -17,8 +17,8 @@
 
 from __future__ import annotations
 
-from collections.abc import Sequence
-from typing import TYPE_CHECKING, Callable
+from collections.abc import Callable, Sequence
+from typing import TYPE_CHECKING
 
 from airflow.providers.snowflake.version_compat import AIRFLOW_V_3_0_PLUS
 
diff --git a/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake.py b/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake.py
index 88cb5f331e259..e52fa4df0fc77 100644
--- a/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake.py
+++ b/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake.py
@@ -19,12 +19,12 @@
 
 import base64
 import os
-from collections.abc import Iterable, Mapping
+from collections.abc import Callable, Iterable, Mapping
 from contextlib import closing, contextmanager
 from functools import cached_property
 from io import StringIO
 from pathlib import Path
-from typing import TYPE_CHECKING, Any, Callable, TypeVar, overload
+from typing import TYPE_CHECKING, Any, TypeVar, overload
 from urllib.parse import urlparse
 
 import requests
@@ -49,7 +49,7 @@
 
 
 def _try_to_boolean(value: Any):
-    if isinstance(value, (str, type(None))):
+    if isinstance(value, str | type(None)):
         return to_boolean(value)
     return value
 
diff --git a/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake_sql_api.py b/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake_sql_api.py
index d87e4cd04d37f..f3b23ad3a585d 100644
--- a/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake_sql_api.py
+++ b/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake_sql_api.py
@@ -417,11 +417,7 @@ def _should_retry_on_error(exception) -> bool:
             return exception.status in [429, 503, 504]
         if isinstance(
             exception,
-            (
-                ConnectionError,
-                Timeout,
-                ClientConnectionError,
-            ),
+            ConnectionError | Timeout | ClientConnectionError,
         ):
             return True
         return False
diff --git a/providers/snowflake/src/airflow/providers/snowflake/operators/snowpark.py b/providers/snowflake/src/airflow/providers/snowflake/operators/snowpark.py
index 98c96923ddbfa..31127692902f4 100644
--- a/providers/snowflake/src/airflow/providers/snowflake/operators/snowpark.py
+++ b/providers/snowflake/src/airflow/providers/snowflake/operators/snowpark.py
@@ -17,8 +17,8 @@
 
 from __future__ import annotations
 
-from collections.abc import Collection, Mapping, Sequence
-from typing import Any, Callable
+from collections.abc import Callable, Collection, Mapping, Sequence
+from typing import Any
 
 from airflow.providers.common.compat.standard.operators import PythonOperator, get_current_context
 from airflow.providers.snowflake.hooks.snowflake import SnowflakeHook
diff --git a/providers/snowflake/src/airflow/providers/snowflake/utils/snowpark.py b/providers/snowflake/src/airflow/providers/snowflake/utils/snowpark.py
index 72b1192ad46e2..28bdc5311169f 100644
--- a/providers/snowflake/src/airflow/providers/snowflake/utils/snowpark.py
+++ b/providers/snowflake/src/airflow/providers/snowflake/utils/snowpark.py
@@ -18,7 +18,8 @@
 from __future__ import annotations
 
 import inspect
-from typing import TYPE_CHECKING, Callable
+from collections.abc import Callable
+from typing import TYPE_CHECKING
 
 if TYPE_CHECKING:
     from snowflake.snowpark import Session
diff --git a/providers/snowflake/tests/unit/snowflake/transfers/test_copy_into_snowflake.py b/providers/snowflake/tests/unit/snowflake/transfers/test_copy_into_snowflake.py
index ed0bd3b2dc7bc..168df7d9fef2a 100644
--- a/providers/snowflake/tests/unit/snowflake/transfers/test_copy_into_snowflake.py
+++ b/providers/snowflake/tests/unit/snowflake/transfers/test_copy_into_snowflake.py
@@ -16,7 +16,7 @@
 # under the License.
 from __future__ import annotations
 
-from typing import Callable
+from collections.abc import Callable
 from unittest import mock
 
 import pytest
diff --git a/providers/sqlite/pyproject.toml b/providers/sqlite/pyproject.toml
index 1dbf413d83d8e..e78cb2795dd6e 100644
--- a/providers/sqlite/pyproject.toml
+++ b/providers/sqlite/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/ssh/pyproject.toml b/providers/ssh/pyproject.toml
index 6395fd8d797f5..5a4f2f4374969 100644
--- a/providers/ssh/pyproject.toml
+++ b/providers/ssh/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/standard/pyproject.toml b/providers/standard/pyproject.toml
index 7eea0526ca40d..98acc80d4f43e 100644
--- a/providers/standard/pyproject.toml
+++ b/providers/standard/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/standard/src/airflow/providers/standard/decorators/bash.py b/providers/standard/src/airflow/providers/standard/decorators/bash.py
index c094e050bf7af..59dcfe33be810 100644
--- a/providers/standard/src/airflow/providers/standard/decorators/bash.py
+++ b/providers/standard/src/airflow/providers/standard/decorators/bash.py
@@ -18,8 +18,8 @@
 from __future__ import annotations
 
 import warnings
-from collections.abc import Collection, Mapping, Sequence
-from typing import TYPE_CHECKING, Any, Callable, ClassVar
+from collections.abc import Callable, Collection, Mapping, Sequence
+from typing import TYPE_CHECKING, Any, ClassVar
 
 from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
 
diff --git a/providers/standard/src/airflow/providers/standard/decorators/branch_external_python.py b/providers/standard/src/airflow/providers/standard/decorators/branch_external_python.py
index f055769dd8306..3241d1bbded59 100644
--- a/providers/standard/src/airflow/providers/standard/decorators/branch_external_python.py
+++ b/providers/standard/src/airflow/providers/standard/decorators/branch_external_python.py
@@ -16,7 +16,8 @@
 # under the License.
 from __future__ import annotations
 
-from typing import TYPE_CHECKING, Callable
+from collections.abc import Callable
+from typing import TYPE_CHECKING
 
 from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
 
diff --git a/providers/standard/src/airflow/providers/standard/decorators/branch_python.py b/providers/standard/src/airflow/providers/standard/decorators/branch_python.py
index 598cfa40ca911..719037ac054e5 100644
--- a/providers/standard/src/airflow/providers/standard/decorators/branch_python.py
+++ b/providers/standard/src/airflow/providers/standard/decorators/branch_python.py
@@ -16,7 +16,8 @@
 # under the License.
 from __future__ import annotations
 
-from typing import TYPE_CHECKING, Callable
+from collections.abc import Callable
+from typing import TYPE_CHECKING
 
 from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
 
diff --git a/providers/standard/src/airflow/providers/standard/decorators/branch_virtualenv.py b/providers/standard/src/airflow/providers/standard/decorators/branch_virtualenv.py
index e47df708ba3f6..f138f90bda25e 100644
--- a/providers/standard/src/airflow/providers/standard/decorators/branch_virtualenv.py
+++ b/providers/standard/src/airflow/providers/standard/decorators/branch_virtualenv.py
@@ -16,7 +16,8 @@
 # under the License.
 from __future__ import annotations
 
-from typing import TYPE_CHECKING, Callable
+from collections.abc import Callable
+from typing import TYPE_CHECKING
 
 from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
 
diff --git a/providers/standard/src/airflow/providers/standard/decorators/external_python.py b/providers/standard/src/airflow/providers/standard/decorators/external_python.py
index 68f9f8cd5c9d4..fa399cdb1ee4d 100644
--- a/providers/standard/src/airflow/providers/standard/decorators/external_python.py
+++ b/providers/standard/src/airflow/providers/standard/decorators/external_python.py
@@ -16,7 +16,8 @@
 # under the License.
 from __future__ import annotations
 
-from typing import TYPE_CHECKING, Callable
+from collections.abc import Callable
+from typing import TYPE_CHECKING
 
 from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
 
diff --git a/providers/standard/src/airflow/providers/standard/decorators/python.py b/providers/standard/src/airflow/providers/standard/decorators/python.py
index 6993beb737df0..73dab343d719e 100644
--- a/providers/standard/src/airflow/providers/standard/decorators/python.py
+++ b/providers/standard/src/airflow/providers/standard/decorators/python.py
@@ -16,8 +16,8 @@
 # under the License.
 from __future__ import annotations
 
-from collections.abc import Sequence
-from typing import TYPE_CHECKING, Callable
+from collections.abc import Callable, Sequence
+from typing import TYPE_CHECKING
 
 from airflow.providers.standard.operators.python import PythonOperator
 from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
diff --git a/providers/standard/src/airflow/providers/standard/decorators/python_virtualenv.py b/providers/standard/src/airflow/providers/standard/decorators/python_virtualenv.py
index 2632f1be375bc..91ef7f03c0508 100644
--- a/providers/standard/src/airflow/providers/standard/decorators/python_virtualenv.py
+++ b/providers/standard/src/airflow/providers/standard/decorators/python_virtualenv.py
@@ -16,7 +16,8 @@
 # under the License.
 from __future__ import annotations
 
-from typing import TYPE_CHECKING, Callable
+from collections.abc import Callable
+from typing import TYPE_CHECKING
 
 from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
 
diff --git a/providers/standard/src/airflow/providers/standard/decorators/sensor.py b/providers/standard/src/airflow/providers/standard/decorators/sensor.py
index 2d8c02977a7b7..5310d30695ed8 100644
--- a/providers/standard/src/airflow/providers/standard/decorators/sensor.py
+++ b/providers/standard/src/airflow/providers/standard/decorators/sensor.py
@@ -17,8 +17,8 @@
 
 from __future__ import annotations
 
-from collections.abc import Sequence
-from typing import TYPE_CHECKING, Callable, ClassVar
+from collections.abc import Callable, Sequence
+from typing import TYPE_CHECKING, ClassVar
 
 from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
 
diff --git a/providers/standard/src/airflow/providers/standard/decorators/short_circuit.py b/providers/standard/src/airflow/providers/standard/decorators/short_circuit.py
index 41277335ae892..148a6ed828fdc 100644
--- a/providers/standard/src/airflow/providers/standard/decorators/short_circuit.py
+++ b/providers/standard/src/airflow/providers/standard/decorators/short_circuit.py
@@ -16,7 +16,8 @@
 # under the License.
 from __future__ import annotations
 
-from typing import TYPE_CHECKING, Callable
+from collections.abc import Callable
+from typing import TYPE_CHECKING
 
 from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
 
diff --git a/providers/standard/src/airflow/providers/standard/operators/bash.py b/providers/standard/src/airflow/providers/standard/operators/bash.py
index 3195b33456c59..afb1ad40a7eca 100644
--- a/providers/standard/src/airflow/providers/standard/operators/bash.py
+++ b/providers/standard/src/airflow/providers/standard/operators/bash.py
@@ -20,9 +20,9 @@
 import os
 import shutil
 import tempfile
-from collections.abc import Container, Sequence
+from collections.abc import Callable, Container, Sequence
 from functools import cached_property
-from typing import TYPE_CHECKING, Any, Callable, cast
+from typing import TYPE_CHECKING, Any, cast
 
 from airflow.exceptions import AirflowException, AirflowSkipException
 from airflow.providers.standard.hooks.subprocess import SubprocessHook, SubprocessResult, working_directory
diff --git a/providers/standard/src/airflow/providers/standard/operators/python.py b/providers/standard/src/airflow/providers/standard/operators/python.py
index 54ae1bc3200a6..40bb51ba9d863 100644
--- a/providers/standard/src/airflow/providers/standard/operators/python.py
+++ b/providers/standard/src/airflow/providers/standard/operators/python.py
@@ -29,12 +29,12 @@
 import types
 import warnings
 from abc import ABCMeta, abstractmethod
-from collections.abc import Collection, Container, Iterable, Mapping, Sequence
+from collections.abc import Callable, Collection, Container, Iterable, Mapping, Sequence
 from functools import cache
 from itertools import chain
 from pathlib import Path
 from tempfile import TemporaryDirectory
-from typing import TYPE_CHECKING, Any, Callable, NamedTuple, cast
+from typing import TYPE_CHECKING, Any, NamedTuple, cast
 
 import lazy_object_proxy
 from packaging.requirements import InvalidRequirement, Requirement
diff --git a/providers/standard/src/airflow/providers/standard/operators/trigger_dagrun.py b/providers/standard/src/airflow/providers/standard/operators/trigger_dagrun.py
index f87095f754cb9..4f474c3e6996e 100644
--- a/providers/standard/src/airflow/providers/standard/operators/trigger_dagrun.py
+++ b/providers/standard/src/airflow/providers/standard/operators/trigger_dagrun.py
@@ -195,7 +195,7 @@ def __init__(
         self.logical_date = logical_date
         if logical_date is NOTSET:
             self.logical_date = NOTSET
-        elif logical_date is None or isinstance(logical_date, (str, datetime.datetime)):
+        elif logical_date is None or isinstance(logical_date, str | datetime.datetime):
             self.logical_date = logical_date
         else:
             raise TypeError(
diff --git a/providers/standard/src/airflow/providers/standard/sensors/external_task.py b/providers/standard/src/airflow/providers/standard/sensors/external_task.py
index 7c48f9a449b04..12b41e7acf55b 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/external_task.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/external_task.py
@@ -19,8 +19,8 @@
 import datetime
 import os
 import warnings
-from collections.abc import Collection, Iterable
-from typing import TYPE_CHECKING, Any, Callable, ClassVar
+from collections.abc import Callable, Collection, Iterable
+from typing import TYPE_CHECKING, Any, ClassVar
 
 from airflow.configuration import conf
 from airflow.exceptions import AirflowSkipException
@@ -79,7 +79,7 @@ class ExternalDagLink(BaseOperatorLink):
 
     def get_link(self, operator: BaseOperator, *, ti_key: TaskInstanceKey) -> str:
         if TYPE_CHECKING:
-            assert isinstance(operator, (ExternalTaskMarker, ExternalTaskSensor))
+            assert isinstance(operator, ExternalTaskMarker | ExternalTaskSensor)
 
         external_dag_id = operator.external_dag_id
 
diff --git a/providers/standard/src/airflow/providers/standard/sensors/python.py b/providers/standard/src/airflow/providers/standard/sensors/python.py
index 37c7244ba2b6a..512ebab4449d3 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/python.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/python.py
@@ -17,8 +17,8 @@
 # under the License.
 from __future__ import annotations
 
-from collections.abc import Mapping, Sequence
-from typing import TYPE_CHECKING, Any, Callable
+from collections.abc import Callable, Mapping, Sequence
+from typing import TYPE_CHECKING, Any
 
 from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils.context import context_merge
diff --git a/providers/standard/src/airflow/providers/standard/utils/skipmixin.py b/providers/standard/src/airflow/providers/standard/utils/skipmixin.py
index 5cfb577cd2f7c..b7c8de2de2903 100644
--- a/providers/standard/src/airflow/providers/standard/utils/skipmixin.py
+++ b/providers/standard/src/airflow/providers/standard/utils/skipmixin.py
@@ -52,7 +52,7 @@ def _ensure_tasks(nodes: Iterable[DAGNode]) -> Sequence[Operator]:
         from airflow.models.baseoperator import BaseOperator
         from airflow.models.mappedoperator import MappedOperator
 
-    return [n for n in nodes if isinstance(n, (BaseOperator, MappedOperator))]
+    return [n for n in nodes if isinstance(n, BaseOperator | MappedOperator)]
 
 
 # This class should only be used in Airflow 3.0 and later.
diff --git a/providers/standard/tests/unit/standard/decorators/test_python.py b/providers/standard/tests/unit/standard/decorators/test_python.py
index 4bab68cc04789..578817c5a2be8 100644
--- a/providers/standard/tests/unit/standard/decorators/test_python.py
+++ b/providers/standard/tests/unit/standard/decorators/test_python.py
@@ -19,7 +19,6 @@
 import typing
 from collections import namedtuple
 from datetime import date
-from typing import Union
 
 import pytest
 
@@ -128,7 +127,7 @@ def t1() -> str | None:
 
     def test_infer_multiple_outputs_union_type(self):
         @task_decorator
-        def t1() -> Union[str, None]:
+        def t1() -> str | None:
             return "foo"
 
         assert t1().operator.multiple_outputs is False
@@ -918,7 +917,7 @@ def up1() -> str:
             return "example"
 
         @dag.task(multiple_outputs=multiple_outputs)
-        def up2(x) -> Union[dict, None]:
+        def up2(x) -> dict | None:
             if x == 2:
                 return {"x": "example"}
             raise AirflowSkipException()
diff --git a/providers/tableau/pyproject.toml b/providers/tableau/pyproject.toml
index f57384964380c..910a04e5a4ee8 100644
--- a/providers/tableau/pyproject.toml
+++ b/providers/tableau/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/telegram/pyproject.toml b/providers/telegram/pyproject.toml
index 4820f728aa4a5..5bf66f133056f 100644
--- a/providers/telegram/pyproject.toml
+++ b/providers/telegram/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/teradata/pyproject.toml b/providers/teradata/pyproject.toml
index 3866c56d0a64a..dc86d8e2b7caa 100644
--- a/providers/teradata/pyproject.toml
+++ b/providers/teradata/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py b/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py
index dae400a638825..2d9b0904e48f9 100644
--- a/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py
+++ b/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py
@@ -200,7 +200,7 @@ def _transfer_to_and_execute_bteq_on_remote(
                         and exit_status
                         not in (
                             bteq_quit_rc
-                            if isinstance(bteq_quit_rc, (list, tuple))
+                            if isinstance(bteq_quit_rc, list | tuple)
                             else [bteq_quit_rc if bteq_quit_rc is not None else 0]
                         )
                     ):
@@ -298,7 +298,7 @@ def execute_bteq_script_at_local(
             and process.returncode
             not in (
                 bteq_quit_rc
-                if isinstance(bteq_quit_rc, (list, tuple))
+                if isinstance(bteq_quit_rc, list | tuple)
                 else [bteq_quit_rc if bteq_quit_rc is not None else 0]
             )
         ):
diff --git a/providers/trino/pyproject.toml b/providers/trino/pyproject.toml
index 2d1e882c810a9..fc611438986c4 100644
--- a/providers/trino/pyproject.toml
+++ b/providers/trino/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/vertica/pyproject.toml b/providers/vertica/pyproject.toml
index 08236b730e403..d3eabfb5dba8e 100644
--- a/providers/vertica/pyproject.toml
+++ b/providers/vertica/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/vertica/src/airflow/providers/vertica/hooks/vertica.py b/providers/vertica/src/airflow/providers/vertica/hooks/vertica.py
index 7a59bbbd02e40..b19a8ee2a0900 100644
--- a/providers/vertica/src/airflow/providers/vertica/hooks/vertica.py
+++ b/providers/vertica/src/airflow/providers/vertica/hooks/vertica.py
@@ -17,8 +17,8 @@
 # under the License.
 from __future__ import annotations
 
-from collections.abc import Iterable, Mapping
-from typing import Any, Callable, overload
+from collections.abc import Callable, Iterable, Mapping
+from typing import Any, overload
 
 from vertica_python import connect
 
diff --git a/providers/weaviate/pyproject.toml b/providers/weaviate/pyproject.toml
index 0ba26fded488d..cf91301c010b5 100644
--- a/providers/weaviate/pyproject.toml
+++ b/providers/weaviate/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/weaviate/src/airflow/providers/weaviate/hooks/weaviate.py b/providers/weaviate/src/airflow/providers/weaviate/hooks/weaviate.py
index 267f6848eb445..d9e451d2aa7d0 100644
--- a/providers/weaviate/src/airflow/providers/weaviate/hooks/weaviate.py
+++ b/providers/weaviate/src/airflow/providers/weaviate/hooks/weaviate.py
@@ -36,7 +36,8 @@
 from airflow.hooks.base import BaseHook
 
 if TYPE_CHECKING:
-    from typing import Callable, Literal
+    from collections.abc import Callable
+    from typing import Literal
 
     import pandas as pd
     from weaviate.auth import AuthCredentials
diff --git a/providers/yandex/pyproject.toml b/providers/yandex/pyproject.toml
index 4b461eac85835..1eb44bd7219b9 100644
--- a/providers/yandex/pyproject.toml
+++ b/providers/yandex/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/ydb/pyproject.toml b/providers/ydb/pyproject.toml
index 5f4b1e00b9d09..3ec2d7229d181 100644
--- a/providers/ydb/pyproject.toml
+++ b/providers/ydb/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/providers/zendesk/pyproject.toml b/providers/zendesk/pyproject.toml
index 4d31bd828fd57..775322e61c0f7 100644
--- a/providers/zendesk/pyproject.toml
+++ b/providers/zendesk/pyproject.toml
@@ -44,13 +44,12 @@ classifiers = [
     "Framework :: Apache Airflow",
     "Framework :: Apache Airflow :: Provider",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.10"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
diff --git a/pyproject.toml b/pyproject.toml
index 9453edda31eba..689b2dd788545 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -34,7 +34,7 @@ name = "apache-airflow"
 description = "Programmatically author, schedule and monitor data pipelines"
 readme = { file = "generated/PYPI_README.md", content-type = "text/markdown" }
 license-files.globs = ["LICENSE"]
-requires-python = "~=3.9,<3.13"
+requires-python = "~=3.10,<3.13"
 authors = [
     { name = "Apache Software Foundation", email = "dev@airflow.apache.org" },
 ]
@@ -50,7 +50,6 @@ classifiers = [
     "Intended Audience :: Developers",
     "Intended Audience :: System Administrators",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
@@ -557,11 +556,11 @@ bypass-selection = true
 # Needed until https://github.com/astral-sh/ruff/issues/8237 is available.
 [tool.black]
 line-length = 110
-target-version = ['py39', 'py310', 'py311', 'py312']
+target-version = ['py310', 'py311', 'py312']
 
 ## ruff settings ##
 [tool.ruff]
-target-version = "py39"
+target-version = "py310"
 line-length = 110
 extend-exclude = [
     ".eggs",
diff --git a/scripts/ci/pre_commit/chart_schema.py b/scripts/ci/pre_commit/chart_schema.py
index de720573f7ef3..5257fcca54c49 100755
--- a/scripts/ci/pre_commit/chart_schema.py
+++ b/scripts/ci/pre_commit/chart_schema.py
@@ -58,7 +58,7 @@ def walk(value, path="$"):
     if isinstance(value, dict):
         for k, v in value.items():
             yield from walk(v, path + f"[{k!r}]")
-    elif isinstance(value, (list, set, tuple)):
+    elif isinstance(value, list | set | tuple):
         for no, v in enumerate(value):
             yield from walk(v, path + f"[{no}]")
 
diff --git a/scripts/ci/pre_commit/check_deprecations.py b/scripts/ci/pre_commit/check_deprecations.py
index c1fb6354c9a91..f20d2c55e0459 100755
--- a/scripts/ci/pre_commit/check_deprecations.py
+++ b/scripts/ci/pre_commit/check_deprecations.py
@@ -138,7 +138,7 @@ def built_import(import_clause: ast.Import) -> list[str]:
 def found_compatible_decorators(mod: ast.Module) -> tuple[str, ...]:
     result = []
     for node in mod.body:
-        if not isinstance(node, (ast.ImportFrom, ast.Import)):
+        if not isinstance(node, ast.ImportFrom | ast.Import):
             continue
         result.extend(built_import_from(node) if isinstance(node, ast.ImportFrom) else built_import(node))
     return tuple(sorted(set(result)))
@@ -193,7 +193,7 @@ def check_decorators(mod: ast.Module, file: str, file_group: str) -> int:
             category_value_ast = category_keyword.value
 
             warns_types = allowed_warnings[file_group]
-            if isinstance(category_value_ast, (ast.Name, ast.Attribute)):
+            if isinstance(category_value_ast, ast.Name | ast.Attribute):
                 category_value = resolve_name(category_value_ast)
                 if not any(cv.endswith(category_value) for cv in warns_types):
                     errors += 1
diff --git a/scripts/ci/pre_commit/common_precommit_utils.py b/scripts/ci/pre_commit/common_precommit_utils.py
index e0b965ad0f016..6b0a2511dccec 100644
--- a/scripts/ci/pre_commit/common_precommit_utils.py
+++ b/scripts/ci/pre_commit/common_precommit_utils.py
@@ -41,7 +41,7 @@
 # Here we should add the second level paths that we want to have sub-packages in
 KNOWN_SECOND_LEVEL_PATHS = ["apache", "atlassian", "common", "cncf", "dbt", "microsoft"]
 
-DEFAULT_PYTHON_MAJOR_MINOR_VERSION = "3.9"
+DEFAULT_PYTHON_MAJOR_MINOR_VERSION = "3.10"
 
 try:
     from rich.console import Console
@@ -277,12 +277,12 @@ def validate_cmd_result(cmd_result, include_ci_env_check=False):
                 "\n[yellow]If you see strange stacktraces above, especially about missing imports "
                 "run this command:[/]\n"
             )
-            console.print("[magenta]breeze ci-image build --python 3.9 --upgrade-to-newer-dependencies[/]\n")
+            console.print("[magenta]breeze ci-image build --python 3.10 --upgrade-to-newer-dependencies[/]\n")
 
     elif cmd_result.returncode != 0:
         console.print(
             "[warning]\nIf you see strange stacktraces above, "
-            "run `breeze ci-image build --python 3.9` and try again."
+            "run `breeze ci-image build --python 3.10` and try again."
         )
     sys.exit(cmd_result.returncode)
 
diff --git a/scripts/ci/pre_commit/mypy.py b/scripts/ci/pre_commit/mypy.py
index 0beed5ee4ec77..90e3ae4379325 100755
--- a/scripts/ci/pre_commit/mypy.py
+++ b/scripts/ci/pre_commit/mypy.py
@@ -65,6 +65,6 @@
         "[yellow]If you see strange stacktraces above, and can't reproduce it, please run"
         " this command and try again:\n"
     )
-    console.print(f"breeze ci-image build --python 3.9{flag}\n")
+    console.print(f"breeze ci-image build --python 3.10{flag}\n")
     console.print("[yellow]You can also run `breeze down --cleanup-mypy-cache` to clean up the cache used.\n")
 sys.exit(res.returncode)
diff --git a/scripts/ci/pre_commit/mypy_folder.py b/scripts/ci/pre_commit/mypy_folder.py
index d3ca454e38524..d40542374cec7 100755
--- a/scripts/ci/pre_commit/mypy_folder.py
+++ b/scripts/ci/pre_commit/mypy_folder.py
@@ -156,6 +156,6 @@ def get_all_files(folder: str) -> list[str]:
         "[yellow]If you see strange stacktraces above, and can't reproduce it, please run"
         " this command and try again:\n"
     )
-    console.print(f"breeze ci-image build --python 3.9{flag}\n")
+    console.print(f"breeze ci-image build --python 3.10{flag}\n")
     console.print("[yellow]You can also run `breeze down --cleanup-mypy-cache` to clean up the cache used.\n")
 sys.exit(res.returncode)
diff --git a/scripts/ci/testing/summarize_captured_warnings.py b/scripts/ci/testing/summarize_captured_warnings.py
index ad834be37b32f..1597c47783542 100755
--- a/scripts/ci/testing/summarize_captured_warnings.py
+++ b/scripts/ci/testing/summarize_captured_warnings.py
@@ -23,11 +23,11 @@
 import json
 import os
 import shutil
-from collections.abc import Iterable, Iterator
+from collections.abc import Callable, Iterable, Iterator
 from dataclasses import asdict, dataclass, fields
 from itertools import groupby
 from pathlib import Path
-from typing import Any, Callable
+from typing import Any
 from uuid import NAMESPACE_OID, uuid5
 
 if __name__ not in ("__main__", "__mp_main__"):
diff --git a/scripts/in_container/install_airflow_and_providers.py b/scripts/in_container/install_airflow_and_providers.py
index 05a437178b9c3..1896d1865c3de 100755
--- a/scripts/in_container/install_airflow_and_providers.py
+++ b/scripts/in_container/install_airflow_and_providers.py
@@ -542,7 +542,7 @@ def find_installation_spec(
 )
 @click.option(
     "--python-version",
-    default="3.9",
+    default="3.10",
     envvar="PYTHON_MAJOR_MINOR_VERSION",
     show_default=True,
     help="Python version to use",
diff --git a/scripts/in_container/run_generate_constraints.py b/scripts/in_container/run_generate_constraints.py
index edb8de1df96ad..58cf5cb6afc00 100755
--- a/scripts/in_container/run_generate_constraints.py
+++ b/scripts/in_container/run_generate_constraints.py
@@ -33,7 +33,7 @@
 from in_container_utils import AIRFLOW_DIST_PATH, AIRFLOW_ROOT_PATH, click, console, run_command
 
 DEFAULT_BRANCH = os.environ.get("DEFAULT_BRANCH", "main")
-PYTHON_VERSION = os.environ.get("PYTHON_MAJOR_MINOR_VERSION", "3.9")
+PYTHON_VERSION = os.environ.get("PYTHON_MAJOR_MINOR_VERSION", "3.10")
 GENERATED_PROVIDER_DEPENDENCIES_FILE = AIRFLOW_ROOT_PATH / "generated" / "provider_dependencies.json"
 
 ALL_PROVIDER_DEPENDENCIES = json.loads(GENERATED_PROVIDER_DEPENDENCIES_FILE.read_text())
diff --git a/scripts/in_container/run_migration_reference.py b/scripts/in_container/run_migration_reference.py
index bdf7bf3b7667b..bc92e7766ae15 100755
--- a/scripts/in_container/run_migration_reference.py
+++ b/scripts/in_container/run_migration_reference.py
@@ -58,7 +58,7 @@ def wrap_backticks(val):
     def _wrap_backticks(x):
         return f"``{x}``"
 
-    return ",\n".join(map(_wrap_backticks, val)) if isinstance(val, (tuple, list)) else _wrap_backticks(val)
+    return ",\n".join(map(_wrap_backticks, val)) if isinstance(val, tuple | list) else _wrap_backticks(val)
 
 
 def update_doc(file, data, app):
diff --git a/scripts/in_container/run_provider_yaml_files_check.py b/scripts/in_container/run_provider_yaml_files_check.py
index 3dab9611ea508..e267fe43bb01c 100755
--- a/scripts/in_container/run_provider_yaml_files_check.py
+++ b/scripts/in_container/run_provider_yaml_files_check.py
@@ -29,10 +29,10 @@
 import textwrap
 import warnings
 from collections import Counter
-from collections.abc import Iterable
+from collections.abc import Callable, Iterable
 from enum import Enum
 from functools import cache
-from typing import Any, Callable
+from typing import Any
 
 import jsonschema
 import yaml
diff --git a/task-sdk/src/airflow/sdk/definitions/dag.py b/task-sdk/src/airflow/sdk/definitions/dag.py
index 555207444db2e..c0a4230377449 100644
--- a/task-sdk/src/airflow/sdk/definitions/dag.py
+++ b/task-sdk/src/airflow/sdk/definitions/dag.py
@@ -91,7 +91,7 @@
 
 
 DagStateChangeCallback = Callable[[Context], None]
-ScheduleInterval = Union[None, str, timedelta, relativedelta]
+ScheduleInterval = None | str | timedelta | relativedelta
 
 ScheduleArg = Union[ScheduleInterval, Timetable, BaseAsset, Collection[BaseAsset]]
 

From 26dbca594716d4754daa97e7648eb6bdca1b04c3 Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Fri, 27 Jun 2025 19:37:26 +0530
Subject: [PATCH 231/381] Replace usage of 'set_extra' with 'extra' for athena
 sql hook (#52340)

---
 .../src/airflow/providers/amazon/aws/hooks/athena_sql.py | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/providers/amazon/src/airflow/providers/amazon/aws/hooks/athena_sql.py b/providers/amazon/src/airflow/providers/amazon/aws/hooks/athena_sql.py
index e8d8680c29c11..d66f788226aa8 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/hooks/athena_sql.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/hooks/athena_sql.py
@@ -111,7 +111,14 @@ def conn_config(self) -> AwsConnectionWrapper:
                 connection.login = athena_conn.login
                 connection.password = athena_conn.password
                 connection.schema = athena_conn.schema
-                connection.set_extra(json.dumps({**athena_conn.extra_dejson, **connection.extra_dejson}))
+                merged_extra = {**athena_conn.extra_dejson, **connection.extra_dejson}
+                try:
+                    extra_json = json.dumps(merged_extra)
+                    connection.extra = extra_json
+                except (TypeError, ValueError):
+                    raise ValueError(
+                        f"Encountered non-JSON in `extra` field for connection {self.aws_conn_id!r}."
+                    )
             except AirflowNotFoundException:
                 connection = athena_conn
                 connection.conn_type = "aws"

From c1c8173af69203f4e11caf2d6d5217de18d6e47f Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Fri, 27 Jun 2025 19:59:26 +0530
Subject: [PATCH 232/381] Replace `models.BaseOperator` to Task SDK one for
 Alibaba & Airbyte (#52335)

Follow-up of https://github.com/apache/airflow/pull/52292 for Alibaba & Airbyte
---
 .../airflow/providers/airbyte/operators/airbyte.py    |  7 ++++++-
 .../providers/alibaba/cloud/links/maxcompute.py       |  5 +----
 .../alibaba/cloud/operators/analyticdb_spark.py       |  7 ++++++-
 .../providers/alibaba/cloud/operators/maxcompute.py   | 11 +++++++----
 .../airflow/providers/alibaba/cloud/operators/oss.py  |  7 ++++++-
 .../tests/unit/alibaba/cloud/links/test_maxcompute.py |  4 +---
 .../unit/alibaba/cloud/operators/test_maxcompute.py   |  1 -
 7 files changed, 27 insertions(+), 15 deletions(-)

diff --git a/providers/airbyte/src/airflow/providers/airbyte/operators/airbyte.py b/providers/airbyte/src/airflow/providers/airbyte/operators/airbyte.py
index dd494e855aef2..596765c4a5c53 100644
--- a/providers/airbyte/src/airflow/providers/airbyte/operators/airbyte.py
+++ b/providers/airbyte/src/airflow/providers/airbyte/operators/airbyte.py
@@ -25,9 +25,14 @@
 
 from airflow.configuration import conf
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.airbyte.hooks.airbyte import AirbyteHook
 from airflow.providers.airbyte.triggers.airbyte import AirbyteSyncTrigger
+from airflow.providers.airbyte.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/alibaba/src/airflow/providers/alibaba/cloud/links/maxcompute.py b/providers/alibaba/src/airflow/providers/alibaba/cloud/links/maxcompute.py
index 5147b5fc0f6d4..0c28c538ef6ce 100644
--- a/providers/alibaba/src/airflow/providers/alibaba/cloud/links/maxcompute.py
+++ b/providers/alibaba/src/airflow/providers/alibaba/cloud/links/maxcompute.py
@@ -54,18 +54,15 @@ def get_link(
     @staticmethod
     def persist(
         context: Context,
-        task_instance: BaseOperator,
         log_view_url: str,
     ):
         """
         Persist the log view URL to XCom for later retrieval.
 
         :param context: The context of the task instance.
-        :param task_instance: The task instance.
         :param log_view_url: The log view URL to persist.
         """
-        task_instance.xcom_push(
-            context,
+        context["task_instance"].xcom_push(
             key=MaxComputeLogViewLink.key,
             value=log_view_url,
         )
diff --git a/providers/alibaba/src/airflow/providers/alibaba/cloud/operators/analyticdb_spark.py b/providers/alibaba/src/airflow/providers/alibaba/cloud/operators/analyticdb_spark.py
index 3cf414230f519..bf8228bdc84be 100644
--- a/providers/alibaba/src/airflow/providers/alibaba/cloud/operators/analyticdb_spark.py
+++ b/providers/alibaba/src/airflow/providers/alibaba/cloud/operators/analyticdb_spark.py
@@ -23,8 +23,13 @@
 from typing import TYPE_CHECKING, Any
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.alibaba.cloud.hooks.analyticdb_spark import AnalyticDBSparkHook, AppState
+from airflow.providers.alibaba.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/alibaba/src/airflow/providers/alibaba/cloud/operators/maxcompute.py b/providers/alibaba/src/airflow/providers/alibaba/cloud/operators/maxcompute.py
index d0b16d1eb6eeb..32c3113d3965b 100644
--- a/providers/alibaba/src/airflow/providers/alibaba/cloud/operators/maxcompute.py
+++ b/providers/alibaba/src/airflow/providers/alibaba/cloud/operators/maxcompute.py
@@ -22,9 +22,14 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.alibaba.cloud.hooks.maxcompute import MaxComputeHook
 from airflow.providers.alibaba.cloud.links.maxcompute import MaxComputeLogViewLink
+from airflow.providers.alibaba.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator
 
 if TYPE_CHECKING:
     from odps.models import Instance
@@ -124,9 +129,7 @@ def execute(self, context: Context) -> str:
             quota_name=self.quota_name,
         )
 
-        MaxComputeLogViewLink.persist(
-            context=context, task_instance=self, log_view_url=self.instance.get_logview_address()
-        )
+        MaxComputeLogViewLink.persist(context=context, log_view_url=self.instance.get_logview_address())
 
         self.instance.wait_for_success()
 
diff --git a/providers/alibaba/src/airflow/providers/alibaba/cloud/operators/oss.py b/providers/alibaba/src/airflow/providers/alibaba/cloud/operators/oss.py
index 1e07a4cce85a2..e967c5f2a73d0 100644
--- a/providers/alibaba/src/airflow/providers/alibaba/cloud/operators/oss.py
+++ b/providers/alibaba/src/airflow/providers/alibaba/cloud/operators/oss.py
@@ -21,8 +21,13 @@
 
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.alibaba.cloud.hooks.oss import OSSHook
+from airflow.providers.alibaba.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/alibaba/tests/unit/alibaba/cloud/links/test_maxcompute.py b/providers/alibaba/tests/unit/alibaba/cloud/links/test_maxcompute.py
index 2820cf7c1223a..db0e9b6104579 100644
--- a/providers/alibaba/tests/unit/alibaba/cloud/links/test_maxcompute.py
+++ b/providers/alibaba/tests/unit/alibaba/cloud/links/test_maxcompute.py
@@ -49,18 +49,16 @@ def test_get_link(self, mock_xcom, xcom_value, expected_link):
         assert link == expected_link
 
     def test_persist(self):
-        mock_context = mock.MagicMock()
         mock_task_instance = mock.MagicMock()
+        mock_context = {"task_instance": mock_task_instance}
         mock_url = "mock_url"
 
         MaxComputeLogViewLink.persist(
             context=mock_context,
-            task_instance=mock_task_instance,
             log_view_url=mock_url,
         )
 
         mock_task_instance.xcom_push.assert_called_once_with(
-            mock_context,
             key=MaxComputeLogViewLink.key,
             value=mock_url,
         )
diff --git a/providers/alibaba/tests/unit/alibaba/cloud/operators/test_maxcompute.py b/providers/alibaba/tests/unit/alibaba/cloud/operators/test_maxcompute.py
index 4bbd6f1cd66f7..af49b24810941 100644
--- a/providers/alibaba/tests/unit/alibaba/cloud/operators/test_maxcompute.py
+++ b/providers/alibaba/tests/unit/alibaba/cloud/operators/test_maxcompute.py
@@ -60,7 +60,6 @@ def test_execute(self, mock_hook, mock_log_view_link):
 
         mock_log_view_link.persist.assert_called_once_with(
             context=mock.ANY,
-            task_instance=op,
             log_view_url=instance_mock.get_logview_address.return_value,
         )
 

From 8c86c5e9e52df361536604fe353a24c7703c902a Mon Sep 17 00:00:00 2001
From: Kacper Muda <mudakacper@gmail.com>
Date: Fri, 27 Jun 2025 17:01:48 +0200
Subject: [PATCH 233/381] chore: use task_instance as source for all airflow
 identifiers used in listener (#52339)

---
 .../providers/openlineage/plugins/listener.py |  38 ++---
 .../providers/openlineage/utils/utils.py      |   3 +-
 .../unit/openlineage/plugins/test_listener.py | 136 +++++++-----------
 3 files changed, 75 insertions(+), 102 deletions(-)

diff --git a/providers/openlineage/src/airflow/providers/openlineage/plugins/listener.py b/providers/openlineage/src/airflow/providers/openlineage/plugins/listener.py
index 76b35974c538b..e5bdcd510b44c 100644
--- a/providers/openlineage/src/airflow/providers/openlineage/plugins/listener.py
+++ b/providers/openlineage/src/airflow/providers/openlineage/plugins/listener.py
@@ -147,7 +147,7 @@ def _on_task_instance_running(
                 "Skipping OpenLineage event emission for task `%s` "
                 "due to lack of explicit lineage enablement for task or DAG while "
                 "[openlineage] selective_enable is on.",
-                task.task_id,
+                task_instance.task_id,
             )
             return
 
@@ -170,14 +170,14 @@ def on_running():
                 clear_number = dagrun.clear_number
 
             parent_run_id = self.adapter.build_dag_run_id(
-                dag_id=dag.dag_id,
+                dag_id=task_instance.dag_id,
                 logical_date=date,
                 clear_number=clear_number,
             )
 
             task_uuid = self.adapter.build_task_instance_run_id(
-                dag_id=dag.dag_id,
-                task_id=task.task_id,
+                dag_id=task_instance.dag_id,
+                task_id=task_instance.task_id,
                 try_number=task_instance.try_number,
                 logical_date=date,
                 map_index=task_instance.map_index,
@@ -199,7 +199,7 @@ def on_running():
 
             redacted_event = self.adapter.start_task(
                 run_id=task_uuid,
-                job_name=get_job_name(task),
+                job_name=get_job_name(task_instance),
                 job_description=dag.description,
                 event_time=start_date.isoformat(),
                 nominal_start_time=data_interval_start,
@@ -278,7 +278,7 @@ def _on_task_instance_success(self, task_instance: RuntimeTaskInstance, dag, dag
                 "Skipping OpenLineage event emission for task `%s` "
                 "due to lack of explicit lineage enablement for task or DAG while "
                 "[openlineage] selective_enable is on.",
-                task.task_id,
+                task_instance.task_id,
             )
             return
 
@@ -289,14 +289,14 @@ def on_success():
                 date = dagrun.run_after
 
             parent_run_id = self.adapter.build_dag_run_id(
-                dag_id=dag.dag_id,
+                dag_id=task_instance.dag_id,
                 logical_date=date,
                 clear_number=dagrun.clear_number,
             )
 
             task_uuid = self.adapter.build_task_instance_run_id(
-                dag_id=dag.dag_id,
-                task_id=task.task_id,
+                dag_id=task_instance.dag_id,
+                task_id=task_instance.task_id,
                 try_number=task_instance.try_number,
                 logical_date=date,
                 map_index=task_instance.map_index,
@@ -321,7 +321,7 @@ def on_success():
 
             redacted_event = self.adapter.complete_task(
                 run_id=task_uuid,
-                job_name=get_job_name(task),
+                job_name=get_job_name(task_instance),
                 end_time=end_date.isoformat(),
                 task=task_metadata,
                 # If task owner is default ("airflow"), use DAG owner instead that may have more details
@@ -409,7 +409,7 @@ def _on_task_instance_failed(
                 "Skipping OpenLineage event emission for task `%s` "
                 "due to lack of explicit lineage enablement for task or DAG while "
                 "[openlineage] selective_enable is on.",
-                task.task_id,
+                task_instance.task_id,
             )
             return
 
@@ -420,14 +420,14 @@ def on_failure():
                 date = dagrun.run_after
 
             parent_run_id = self.adapter.build_dag_run_id(
-                dag_id=dag.dag_id,
+                dag_id=task_instance.dag_id,
                 logical_date=date,
                 clear_number=dagrun.clear_number,
             )
 
             task_uuid = self.adapter.build_task_instance_run_id(
-                dag_id=dag.dag_id,
-                task_id=task.task_id,
+                dag_id=task_instance.dag_id,
+                task_id=task_instance.task_id,
                 try_number=task_instance.try_number,
                 logical_date=date,
                 map_index=task_instance.map_index,
@@ -452,7 +452,7 @@ def on_failure():
 
             redacted_event = self.adapter.fail_task(
                 run_id=task_uuid,
-                job_name=get_job_name(task),
+                job_name=get_job_name(task_instance),
                 end_time=end_date.isoformat(),
                 task=task_metadata,
                 error=error,
@@ -489,13 +489,13 @@ def _on_task_instance_manual_state_change(
         def on_state_change():
             date = dagrun.logical_date or dagrun.run_after
             parent_run_id = self.adapter.build_dag_run_id(
-                dag_id=dagrun.dag_id,
+                dag_id=ti.dag_id,
                 logical_date=date,
                 clear_number=dagrun.clear_number,
             )
 
             task_uuid = self.adapter.build_task_instance_run_id(
-                dag_id=dagrun.dag_id,
+                dag_id=ti.dag_id,
                 task_id=ti.task_id,
                 try_number=ti.try_number,
                 logical_date=date,
@@ -507,6 +507,10 @@ def on_state_change():
                 "job_name": get_job_name(ti),
                 "end_time": end_date.isoformat(),
                 "task": OperatorLineage(),
+                "nominal_start_time": None,
+                "nominal_end_time": None,
+                "tags": None,
+                "owners": None,
                 "run_facets": {
                     **get_task_parent_run_facet(parent_run_id=parent_run_id, parent_job_name=ti.dag_id),
                     **get_airflow_debug_facet(),
diff --git a/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py b/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py
index 9134cdb191a61..afe41bcc31839 100644
--- a/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py
+++ b/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py
@@ -79,6 +79,7 @@
         SecretsMasker,
         should_hide_value_for_key,
     )
+    from airflow.sdk.execution_time.task_runner import RuntimeTaskInstance
     from airflow.utils.state import DagRunState, TaskInstanceState
 else:
     try:
@@ -127,7 +128,7 @@ def get_operator_class(task: BaseOperator) -> type:
     return task.__class__
 
 
-def get_job_name(task: TaskInstance) -> str:
+def get_job_name(task: TaskInstance | RuntimeTaskInstance) -> str:
     return f"{task.dag_id}.{task.task_id}"
 
 
diff --git a/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py b/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
index f268cdbe3cfb7..cd763bf6c48c8 100644
--- a/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
+++ b/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
@@ -249,7 +249,7 @@ def mock_task_id(dag_id, task_id, try_number, logical_date, map_index):
         task_instance.dag_run.clear_number = 0
         task_instance.dag_run.execution_date = timezone.datetime(2020, 1, 1, 1, 1, 1)
         task_instance.task = mock.Mock()
-        task_instance.task.task_id = "task_id"
+        task_instance.task.task_id = "task_id_from_task_and_not_ti"
         task_instance.task.dag = mock.Mock()
         task_instance.task.dag.dag_id = "dag_id"
         task_instance.task.dag.description = "Test DAG Description"
@@ -260,6 +260,7 @@ def mock_task_id(dag_id, task_id, try_number, logical_date, map_index):
         task_instance.task.outlets = []
         task_instance.dag_id = "dag_id"
         task_instance.run_id = "dag_run_run_id"
+        task_instance.task_id = "task_id"
         task_instance.try_number = 1
         task_instance.state = State.RUNNING
         task_instance.start_date = timezone.datetime(2023, 1, 1, 13, 1, 1)
@@ -280,13 +281,11 @@ def mock_task_id(dag_id, task_id, try_number, logical_date, map_index):
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_run_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_mapped_task_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_user_provided_run_facets")
-    @mock.patch("airflow.providers.openlineage.plugins.listener.get_job_name")
     @mock.patch(
         "airflow.providers.openlineage.plugins.listener.OpenLineageListener._execute", new=regular_call
     )
     def test_adapter_start_task_is_called_with_proper_arguments(
         self,
-        mock_get_job_name,
         mock_get_airflow_mapped_task_facet,
         mock_get_user_provided_run_facets,
         mock_get_airflow_run_facet,
@@ -304,7 +303,6 @@ def test_adapter_start_task_is_called_with_proper_arguments(
         reflecting the comprehensive tracking of task execution contexts."""
 
         listener, task_instance = self._create_listener_and_task_instance()
-        mock_get_job_name.return_value = "job_name"
         mock_get_airflow_mapped_task_facet.return_value = {"mapped_facet": 1}
         mock_get_user_provided_run_facets.return_value = {"custom_user_facet": 2}
         mock_get_airflow_run_facet.return_value = {"airflow_run_facet": 3}
@@ -315,7 +313,7 @@ def test_adapter_start_task_is_called_with_proper_arguments(
         listener.on_task_instance_running(None, task_instance, None)
         listener.adapter.start_task.assert_called_once_with(
             run_id="2020-01-01T01:01:01+00:00.dag_id.task_id.1.-1",
-            job_name="job_name",
+            job_name="dag_id.task_id",
             job_description="Test DAG Description",
             event_time="2023-01-01T13:01:01+00:00",
             nominal_start_time=None,
@@ -339,13 +337,11 @@ def test_adapter_start_task_is_called_with_proper_arguments(
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_run_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_mapped_task_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_user_provided_run_facets")
-    @mock.patch("airflow.providers.openlineage.plugins.listener.get_job_name")
     @mock.patch(
         "airflow.providers.openlineage.plugins.listener.OpenLineageListener._execute", new=regular_call
     )
     def test_adapter_start_task_is_called_with_dag_owners_when_task_owner_is_default(
         self,
-        mock_get_job_name,
         mock_get_airflow_mapped_task_facet,
         mock_get_user_provided_run_facets,
         mock_get_airflow_run_facet,
@@ -355,7 +351,6 @@ def test_adapter_start_task_is_called_with_dag_owners_when_task_owner_is_default
         mock_debug_mode,
     ):
         listener, task_instance = self._create_listener_and_task_instance()
-        mock_get_job_name.return_value = "job_name"
         mock_get_airflow_mapped_task_facet.return_value = {"mapped_facet": 1}
         mock_get_user_provided_run_facets.return_value = {"custom_user_facet": 2}
         mock_get_airflow_run_facet.return_value = {"airflow_run_facet": 3}
@@ -373,7 +368,6 @@ def test_adapter_start_task_is_called_with_dag_owners_when_task_owner_is_default
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_task_parent_run_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_run_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_user_provided_run_facets")
-    @mock.patch("airflow.providers.openlineage.plugins.listener.get_job_name")
     @mock.patch(
         "airflow.providers.openlineage.plugins.listener.OpenLineageListener._execute", new=regular_call
     )
@@ -381,7 +375,6 @@ def test_adapter_start_task_is_called_with_dag_owners_when_task_owner_is_default
     def test_adapter_fail_task_is_called_with_proper_arguments(
         self,
         mock_utcnow,
-        mock_get_job_name,
         mock_get_user_provided_run_facets,
         mock_get_airflow_run_facet,
         mock_get_task_parent_run_facet,
@@ -399,7 +392,6 @@ def test_adapter_fail_task_is_called_with_proper_arguments(
 
         listener, task_instance = self._create_listener_and_task_instance()
         task_instance.logical_date = timezone.datetime(2020, 1, 1, 1, 1, 1)
-        mock_get_job_name.return_value = "job_name"
         mock_get_user_provided_run_facets.return_value = {"custom_user_facet": 2}
         mock_get_airflow_run_facet.return_value = {"airflow": {"task": "..."}}
         mock_get_task_parent_run_facet.return_value = {"parent": 4}
@@ -412,7 +404,7 @@ def test_adapter_fail_task_is_called_with_proper_arguments(
         )
         listener.adapter.fail_task.assert_called_once_with(
             end_time="2023-01-03T13:01:01+00:00",
-            job_name="job_name",
+            job_name="dag_id.task_id",
             run_id="2020-01-01T01:01:01+00:00.dag_id.task_id.1.-1",
             owners=["task_owner"],
             tags=["tag1", "tag2"],
@@ -435,13 +427,11 @@ def test_adapter_fail_task_is_called_with_proper_arguments(
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_run_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_mapped_task_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_user_provided_run_facets")
-    @mock.patch("airflow.providers.openlineage.plugins.listener.get_job_name")
     @mock.patch(
         "airflow.providers.openlineage.plugins.listener.OpenLineageListener._execute", new=regular_call
     )
     def test_adapter_fail_task_is_called_with_dag_owners_when_task_owner_is_default(
         self,
-        mock_get_job_name,
         mock_get_airflow_mapped_task_facet,
         mock_get_user_provided_run_facets,
         mock_get_airflow_run_facet,
@@ -451,7 +441,6 @@ def test_adapter_fail_task_is_called_with_dag_owners_when_task_owner_is_default(
         mock_debug_mode,
     ):
         listener, task_instance = self._create_listener_and_task_instance()
-        mock_get_job_name.return_value = "job_name"
         mock_get_airflow_mapped_task_facet.return_value = {"mapped_facet": 1}
         mock_get_user_provided_run_facets.return_value = {"custom_user_facet": 2}
         mock_get_airflow_run_facet.return_value = {"airflow_run_facet": 3}
@@ -472,7 +461,6 @@ def test_adapter_fail_task_is_called_with_dag_owners_when_task_owner_is_default(
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_task_parent_run_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_run_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_user_provided_run_facets")
-    @mock.patch("airflow.providers.openlineage.plugins.listener.get_job_name")
     @mock.patch(
         "airflow.providers.openlineage.plugins.listener.OpenLineageListener._execute", new=regular_call
     )
@@ -480,7 +468,6 @@ def test_adapter_fail_task_is_called_with_dag_owners_when_task_owner_is_default(
     def test_adapter_complete_task_is_called_with_proper_arguments(
         self,
         mock_utcnow,
-        mock_get_job_name,
         mock_get_user_provided_run_facets,
         mock_get_airflow_run_facet,
         mock_get_task_parent_run_facet,
@@ -498,7 +485,6 @@ def test_adapter_complete_task_is_called_with_proper_arguments(
         """
 
         listener, task_instance = self._create_listener_and_task_instance()
-        mock_get_job_name.return_value = "job_name"
         mock_get_user_provided_run_facets.return_value = {"custom_user_facet": 2}
         mock_get_airflow_run_facet.return_value = {"airflow": {"task": "..."}}
         mock_get_task_parent_run_facet.return_value = {"parent": 4}
@@ -512,7 +498,7 @@ def test_adapter_complete_task_is_called_with_proper_arguments(
         assert len(calls) == 1
         assert calls[0][1] == dict(
             end_time="2023-01-03T13:01:01+00:00",
-            job_name="job_name",
+            job_name="dag_id.task_id",
             run_id=f"2020-01-01T01:01:01+00:00.dag_id.task_id.{EXPECTED_TRY_NUMBER_1}.-1",
             task=listener.extractor_manager.extract_metadata(),
             owners=["task_owner"],
@@ -534,13 +520,11 @@ def test_adapter_complete_task_is_called_with_proper_arguments(
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_run_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_mapped_task_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_user_provided_run_facets")
-    @mock.patch("airflow.providers.openlineage.plugins.listener.get_job_name")
     @mock.patch(
         "airflow.providers.openlineage.plugins.listener.OpenLineageListener._execute", new=regular_call
     )
     def test_adapter_complete_task_is_called_with_dag_owners_when_task_owner_is_default(
         self,
-        mock_get_job_name,
         mock_get_airflow_mapped_task_facet,
         mock_get_user_provided_run_facets,
         mock_get_airflow_run_facet,
@@ -550,7 +534,6 @@ def test_adapter_complete_task_is_called_with_dag_owners_when_task_owner_is_defa
         mock_debug_mode,
     ):
         listener, task_instance = self._create_listener_and_task_instance()
-        mock_get_job_name.return_value = "job_name"
         mock_get_airflow_mapped_task_facet.return_value = {"mapped_facet": 1}
         mock_get_user_provided_run_facets.return_value = {"custom_user_facet": 2}
         mock_get_airflow_run_facet.return_value = {"airflow_run_facet": 3}
@@ -688,12 +671,10 @@ def success_callable(**kwargs):
     @mock.patch("airflow.providers.openlineage.plugins.listener.is_operator_disabled")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_run_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_user_provided_run_facets")
-    @mock.patch("airflow.providers.openlineage.plugins.listener.get_job_name")
     def test_listener_on_task_instance_running_do_not_call_adapter_when_disabled_operator(
-        self, mock_get_job_name, mock_get_user_provided_run_facets, mock_get_airflow_run_facet, mock_disabled
+        self, mock_get_user_provided_run_facets, mock_get_airflow_run_facet, mock_disabled
     ):
         listener, task_instance = self._create_listener_and_task_instance()
-        mock_get_job_name.return_value = "job_name"
         mock_get_user_provided_run_facets.return_value = {"custom_facet": 2}
         mock_get_airflow_run_facet.return_value = {"airflow_run_facet": 3}
         mock_disabled.return_value = True
@@ -707,9 +688,8 @@ def test_listener_on_task_instance_running_do_not_call_adapter_when_disabled_ope
 
     @mock.patch("airflow.providers.openlineage.plugins.listener.is_operator_disabled")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_user_provided_run_facets")
-    @mock.patch("airflow.providers.openlineage.plugins.listener.get_job_name")
     def test_listener_on_task_instance_failed_do_not_call_adapter_when_disabled_operator(
-        self, mock_get_job_name, mock_get_user_provided_run_facets, mock_disabled
+        self, mock_get_user_provided_run_facets, mock_disabled
     ):
         listener, task_instance = self._create_listener_and_task_instance()
         mock_get_user_provided_run_facets.return_value = {"custom_facet": 2}
@@ -728,9 +708,8 @@ def test_listener_on_task_instance_failed_do_not_call_adapter_when_disabled_oper
 
     @mock.patch("airflow.providers.openlineage.plugins.listener.is_operator_disabled")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_user_provided_run_facets")
-    @mock.patch("airflow.providers.openlineage.plugins.listener.get_job_name")
     def test_listener_on_task_instance_success_do_not_call_adapter_when_disabled_operator(
-        self, mock_get_job_name, mock_get_user_provided_run_facets, mock_disabled
+        self, mock_get_user_provided_run_facets, mock_disabled
     ):
         listener, task_instance = self._create_listener_and_task_instance()
         mock_get_user_provided_run_facets.return_value = {"custom_facet": 2}
@@ -974,7 +953,7 @@ def _create_listener_and_task_instance(
             # TaskInstance is used when on API server (when listener gets called about manual state change)
             task_instance = TaskInstance(task=MagicMock())  # type: ignore
             task_instance.dag_run = DagRun()
-            task_instance.dag_run.dag_id = "dag_id"
+            task_instance.dag_run.dag_id = "dag_id_from_dagrun_and_not_ti"
             task_instance.dag_run.run_id = "dag_run_run_id"
             task_instance.dag_run.clear_number = 0
             task_instance.dag_run.logical_date = timezone.datetime(2020, 1, 1, 1, 1, 1)
@@ -982,6 +961,7 @@ def _create_listener_and_task_instance(
             task_instance.task = None
             task_instance.dag = None
             task_instance.task_id = "task_id"
+            task_instance.dag_id = "dag_id"
             task_instance.try_number = 1
             task_instance.map_index = -1
         else:
@@ -996,12 +976,12 @@ def _create_listener_and_task_instance(
             from airflow.sdk.execution_time.task_runner import RuntimeTaskInstance
 
             dag = DAG(
-                dag_id="dag_id",
+                dag_id="dag_id_from_dag_not_ti",
                 description="Test DAG Description",
                 tags=["tag1", "tag2"],
             )
-            task = EmptyOperator(task_id="task_id", dag=dag, owner="task_owner")
-            task2 = EmptyOperator(task_id="task_id2", dag=dag, owner="another_owner")  # noqa: F841
+            task = EmptyOperator(task_id="task_id_from_task_not_ti", dag=dag, owner="task_owner")
+            task2 = EmptyOperator(task_id="task_id2_from_task_not_ti", dag=dag, owner="another_owner")  # noqa: F841
 
             sdk_task_instance = SdkTaskInstance(
                 id=uuid7(),
@@ -1016,8 +996,8 @@ def _create_listener_and_task_instance(
                 task=task,
                 _ti_context_from_server=TIRunContext(
                     dag_run=SdkDagRun(
-                        dag_id="dag_id",
-                        run_id="dag_run_run_id",
+                        dag_id="dag_id_from_dagrun_not_ti",
+                        run_id="dag_run_run_id_from_dagrun_not_ti",
                         logical_date=timezone.datetime(2020, 1, 1, 1, 1, 1),
                         data_interval_start=None,
                         data_interval_end=None,
@@ -1066,13 +1046,11 @@ def mock_task_id(dag_id, task_id, try_number, logical_date, map_index):
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_run_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_mapped_task_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_user_provided_run_facets")
-    @mock.patch("airflow.providers.openlineage.plugins.listener.get_job_name")
     @mock.patch(
         "airflow.providers.openlineage.plugins.listener.OpenLineageListener._execute", new=regular_call
     )
     def test_adapter_start_task_is_called_with_proper_arguments(
         self,
-        mock_get_job_name,
         mock_get_airflow_mapped_task_facet,
         mock_get_user_provided_run_facets,
         mock_get_airflow_run_facet,
@@ -1090,7 +1068,7 @@ def test_adapter_start_task_is_called_with_proper_arguments(
         reflecting the comprehensive tracking of task execution contexts."""
 
         listener, task_instance = self._create_listener_and_task_instance()
-        mock_get_job_name.return_value = "job_name"
+
         mock_get_airflow_mapped_task_facet.return_value = {"mapped_facet": 1}
         mock_get_user_provided_run_facets.return_value = {"custom_user_facet": 2}
         mock_get_airflow_run_facet.return_value = {"airflow_run_facet": 3}
@@ -1101,7 +1079,7 @@ def test_adapter_start_task_is_called_with_proper_arguments(
         listener.on_task_instance_running(None, task_instance)
         listener.adapter.start_task.assert_called_once_with(
             run_id="2020-01-01T01:01:01+00:00.dag_id.task_id.1.-1",
-            job_name="job_name",
+            job_name="dag_id.task_id",
             job_description="Test DAG Description",
             event_time="2023-01-01T13:01:01+00:00",
             nominal_start_time=None,
@@ -1125,13 +1103,11 @@ def test_adapter_start_task_is_called_with_proper_arguments(
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_run_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_mapped_task_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_user_provided_run_facets")
-    @mock.patch("airflow.providers.openlineage.plugins.listener.get_job_name")
     @mock.patch(
         "airflow.providers.openlineage.plugins.listener.OpenLineageListener._execute", new=regular_call
     )
     def test_adapter_start_task_is_called_with_dag_owners_when_task_owner_is_default(
         self,
-        mock_get_job_name,
         mock_get_airflow_mapped_task_facet,
         mock_get_user_provided_run_facets,
         mock_get_airflow_run_facet,
@@ -1141,7 +1117,6 @@ def test_adapter_start_task_is_called_with_dag_owners_when_task_owner_is_default
         mock_debug_mode,
     ):
         listener, task_instance = self._create_listener_and_task_instance()
-        mock_get_job_name.return_value = "job_name"
         mock_get_airflow_mapped_task_facet.return_value = {"mapped_facet": 1}
         mock_get_user_provided_run_facets.return_value = {"custom_user_facet": 2}
         mock_get_airflow_run_facet.return_value = {"airflow_run_facet": 3}
@@ -1160,7 +1135,6 @@ def test_adapter_start_task_is_called_with_dag_owners_when_task_owner_is_default
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_task_parent_run_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_run_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_user_provided_run_facets")
-    @mock.patch("airflow.providers.openlineage.plugins.listener.get_job_name")
     @mock.patch(
         "airflow.providers.openlineage.plugins.listener.OpenLineageListener._execute", new=regular_call
     )
@@ -1168,7 +1142,6 @@ def test_adapter_start_task_is_called_with_dag_owners_when_task_owner_is_default
     def test_adapter_fail_task_is_called_with_proper_arguments(
         self,
         mock_utcnow,
-        mock_get_job_name,
         mock_get_user_provided_run_facets,
         mock_get_airflow_run_facet,
         mock_get_task_parent_run_facet,
@@ -1186,7 +1159,6 @@ def test_adapter_fail_task_is_called_with_proper_arguments(
 
         listener, task_instance = self._create_listener_and_task_instance()
         task_instance.get_template_context()["dag_run"].logical_date = timezone.datetime(2020, 1, 1, 1, 1, 1)
-        mock_get_job_name.return_value = "job_name"
         mock_get_user_provided_run_facets.return_value = {"custom_user_facet": 2}
         mock_get_airflow_run_facet.return_value = {"airflow": {"task": "..."}}
         mock_get_task_parent_run_facet.return_value = {"parent": 4}
@@ -1197,7 +1169,7 @@ def test_adapter_fail_task_is_called_with_proper_arguments(
         listener.on_task_instance_failed(previous_state=None, task_instance=task_instance, error=err)
         listener.adapter.fail_task.assert_called_once_with(
             end_time="2023-01-03T13:01:01+00:00",
-            job_name="job_name",
+            job_name="dag_id.task_id",
             run_id="2020-01-01T01:01:01+00:00.dag_id.task_id.1.-1",
             task=listener.extractor_manager.extract_metadata(),
             owners=["task_owner"],
@@ -1220,13 +1192,11 @@ def test_adapter_fail_task_is_called_with_proper_arguments(
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_run_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_mapped_task_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_user_provided_run_facets")
-    @mock.patch("airflow.providers.openlineage.plugins.listener.get_job_name")
     @mock.patch(
         "airflow.providers.openlineage.plugins.listener.OpenLineageListener._execute", new=regular_call
     )
     def test_adapter_fail_task_is_called_with_dag_owners_when_task_owner_is_default(
         self,
-        mock_get_job_name,
         mock_get_airflow_mapped_task_facet,
         mock_get_user_provided_run_facets,
         mock_get_airflow_run_facet,
@@ -1236,7 +1206,6 @@ def test_adapter_fail_task_is_called_with_dag_owners_when_task_owner_is_default(
         mock_debug_mode,
     ):
         listener, task_instance = self._create_listener_and_task_instance()
-        mock_get_job_name.return_value = "job_name"
         mock_get_airflow_mapped_task_facet.return_value = {"mapped_facet": 1}
         mock_get_user_provided_run_facets.return_value = {"custom_user_facet": 2}
         mock_get_airflow_run_facet.return_value = {"airflow_run_facet": 3}
@@ -1251,10 +1220,10 @@ def test_adapter_fail_task_is_called_with_dag_owners_when_task_owner_is_default(
         call_owners = listener.adapter.fail_task.call_args.kwargs["owners"]
         assert sorted(call_owners) == ["airflow", "another_owner"]
 
+    @mock.patch("airflow.providers.openlineage.plugins.adapter.OpenLineageAdapter.emit")
     @mock.patch("airflow.providers.openlineage.conf.debug_mode", return_value=True)
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_debug_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_task_parent_run_facet")
-    @mock.patch("airflow.providers.openlineage.plugins.listener.get_job_name")
     @mock.patch(
         "airflow.providers.openlineage.plugins.listener.OpenLineageListener._execute", new=regular_call
     )
@@ -1262,10 +1231,10 @@ def test_adapter_fail_task_is_called_with_dag_owners_when_task_owner_is_default(
     def test_adapter_fail_task_is_called_with_proper_arguments_for_db_task_instance_model(
         self,
         mock_utcnow,
-        mock_get_job_name,
         mock_get_task_parent_run_facet,
         mock_debug_facet,
         mock_debug_mode,
+        mock_emit,
     ):
         """Tests that the 'fail_task' method of the OpenLineageAdapter is invoked with the correct arguments.
 
@@ -1274,31 +1243,36 @@ def test_adapter_fail_task_is_called_with_proper_arguments_for_db_task_instance_
         """
 
         listener, task_instance = self._create_listener_and_task_instance(runtime_ti=False)
-        mock_get_job_name.return_value = "job_name"
         mock_get_task_parent_run_facet.return_value = {"parent": 4}
         mock_debug_facet.return_value = {"debug": "packages"}
 
         err = ValueError("test")
-        on_task_failed_listener_kwargs = {"error": err}
-        expected_err_kwargs = {"error": err}
 
-        listener.on_task_instance_failed(
-            previous_state=None, task_instance=task_instance, **on_task_failed_listener_kwargs
-        )
+        listener.on_task_instance_failed(previous_state=None, task_instance=task_instance, error=err)
         mock_get_task_parent_run_facet.assert_called_once_with(
             parent_run_id="2020-01-01T01:01:01+00:00.dag_id.0", parent_job_name=task_instance.dag_id
         )
-        listener.adapter.fail_task.assert_called_once_with(
+        expected_args = dict(
             end_time="2023-01-03T13:01:01+00:00",
-            job_name="job_name",
+            job_name="dag_id.task_id",
             run_id="2020-01-01T01:01:01+00:00.dag_id.task_id.1.-1",
             task=OperatorLineage(),
+            nominal_start_time=None,
+            nominal_end_time=None,
+            tags=None,
+            owners=None,
             run_facets={
                 "parent": 4,
                 "debug": "packages",
             },
-            **expected_err_kwargs,
+            error=err,
         )
+        listener.adapter.fail_task.assert_called_once_with(**expected_args)
+
+        expected_args["run_id"] = "9d3b14f7-de91-40b6-aeef-e887e2c7673e"
+        adapter = OpenLineageAdapter()
+        adapter.fail_task(**expected_args)
+        assert mock_emit.assert_called_once
 
     @mock.patch("airflow.providers.openlineage.conf.debug_mode", return_value=True)
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_debug_facet")
@@ -1306,7 +1280,6 @@ def test_adapter_fail_task_is_called_with_proper_arguments_for_db_task_instance_
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_task_parent_run_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_run_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_user_provided_run_facets")
-    @mock.patch("airflow.providers.openlineage.plugins.listener.get_job_name")
     @mock.patch(
         "airflow.providers.openlineage.plugins.listener.OpenLineageListener._execute", new=regular_call
     )
@@ -1314,7 +1287,6 @@ def test_adapter_fail_task_is_called_with_proper_arguments_for_db_task_instance_
     def test_adapter_complete_task_is_called_with_proper_arguments(
         self,
         mock_utcnow,
-        mock_get_job_name,
         mock_get_user_provided_run_facets,
         mock_get_airflow_run_facet,
         mock_get_task_parent_run_facet,
@@ -1332,7 +1304,6 @@ def test_adapter_complete_task_is_called_with_proper_arguments(
         """
 
         listener, task_instance = self._create_listener_and_task_instance()
-        mock_get_job_name.return_value = "job_name"
         mock_get_user_provided_run_facets.return_value = {"custom_user_facet": 2}
         mock_get_airflow_run_facet.return_value = {"airflow": {"task": "..."}}
         mock_get_task_parent_run_facet.return_value = {"parent": 4}
@@ -1344,7 +1315,7 @@ def test_adapter_complete_task_is_called_with_proper_arguments(
         assert len(calls) == 1
         assert calls[0][1] == dict(
             end_time="2023-01-03T13:01:01+00:00",
-            job_name="job_name",
+            job_name="dag_id.task_id",
             run_id="2020-01-01T01:01:01+00:00.dag_id.task_id.1.-1",
             task=listener.extractor_manager.extract_metadata(),
             owners=["task_owner"],
@@ -1366,13 +1337,11 @@ def test_adapter_complete_task_is_called_with_proper_arguments(
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_run_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_mapped_task_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_user_provided_run_facets")
-    @mock.patch("airflow.providers.openlineage.plugins.listener.get_job_name")
     @mock.patch(
         "airflow.providers.openlineage.plugins.listener.OpenLineageListener._execute", new=regular_call
     )
     def test_adapter_complete_task_is_called_with_dag_owners_when_task_owner_is_default(
         self,
-        mock_get_job_name,
         mock_get_airflow_mapped_task_facet,
         mock_get_user_provided_run_facets,
         mock_get_airflow_run_facet,
@@ -1382,7 +1351,6 @@ def test_adapter_complete_task_is_called_with_dag_owners_when_task_owner_is_defa
         mock_debug_mode,
     ):
         listener, task_instance = self._create_listener_and_task_instance()
-        mock_get_job_name.return_value = "job_name"
         mock_get_airflow_mapped_task_facet.return_value = {"mapped_facet": 1}
         mock_get_user_provided_run_facets.return_value = {"custom_user_facet": 2}
         mock_get_airflow_run_facet.return_value = {"airflow_run_facet": 3}
@@ -1396,21 +1364,16 @@ def test_adapter_complete_task_is_called_with_dag_owners_when_task_owner_is_defa
         call_owners = listener.adapter.complete_task.call_args.kwargs["owners"]
         assert sorted(call_owners) == ["airflow", "another_owner"]
 
+    @mock.patch("airflow.providers.openlineage.plugins.adapter.OpenLineageAdapter.emit")
     @mock.patch("airflow.providers.openlineage.conf.debug_mode", return_value=True)
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_debug_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_task_parent_run_facet")
-    @mock.patch("airflow.providers.openlineage.plugins.listener.get_job_name")
     @mock.patch(
         "airflow.providers.openlineage.plugins.listener.OpenLineageListener._execute", new=regular_call
     )
     @mock.patch("airflow.utils.timezone.utcnow", return_value=timezone.datetime(2023, 1, 3, 13, 1, 1))
     def test_adapter_complete_task_is_called_with_proper_arguments_for_db_task_instance_model(
-        self,
-        mock_utcnow,
-        mock_get_job_name,
-        mock_get_task_parent_run_facet,
-        mock_debug_facet,
-        mock_debug_mode,
+        self, mock_utcnow, mock_get_task_parent_run_facet, mock_debug_facet, mock_debug_mode, mock_emit
     ):
         """Tests that the 'complete_task' method of the OpenLineageAdapter is called with the correct arguments.
 
@@ -1418,7 +1381,6 @@ def test_adapter_complete_task_is_called_with_proper_arguments_for_db_task_insta
         to simulate the listener being called after task's state has been manually set via API.
         """
         listener, task_instance = self._create_listener_and_task_instance(runtime_ti=False)
-        mock_get_job_name.return_value = "job_name"
         mock_get_task_parent_run_facet.return_value = {"parent": 4}
         mock_debug_facet.return_value = {"debug": "packages"}
 
@@ -1428,16 +1390,26 @@ def test_adapter_complete_task_is_called_with_proper_arguments_for_db_task_insta
         mock_get_task_parent_run_facet.assert_called_once_with(
             parent_run_id="2020-01-01T01:01:01+00:00.dag_id.0", parent_job_name=task_instance.dag_id
         )
-        assert calls[0][1] == dict(
+        expected_args = dict(
             end_time="2023-01-03T13:01:01+00:00",
-            job_name="job_name",
+            job_name="dag_id.task_id",
             run_id="2020-01-01T01:01:01+00:00.dag_id.task_id.1.-1",
             task=OperatorLineage(),
+            nominal_start_time=None,
+            nominal_end_time=None,
+            tags=None,
+            owners=None,
             run_facets={
                 "parent": 4,
                 "debug": "packages",
             },
         )
+        assert calls[0][1] == expected_args
+
+        expected_args["run_id"] = "9d3b14f7-de91-40b6-aeef-e887e2c7673e"
+        adapter = OpenLineageAdapter()
+        adapter.complete_task(**expected_args)
+        assert mock_emit.assert_called_once
 
     @mock.patch(
         "airflow.providers.openlineage.plugins.listener.OpenLineageListener._execute", new=regular_call
@@ -1506,12 +1478,10 @@ def test_on_task_instance_success_correctly_calls_openlineage_adapter_run_id_met
     @mock.patch("airflow.providers.openlineage.plugins.listener.is_operator_disabled")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_airflow_run_facet")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_user_provided_run_facets")
-    @mock.patch("airflow.providers.openlineage.plugins.listener.get_job_name")
     def test_listener_on_task_instance_running_do_not_call_adapter_when_disabled_operator(
-        self, mock_get_job_name, mock_get_user_provided_run_facets, mock_get_airflow_run_facet, mock_disabled
+        self, mock_get_user_provided_run_facets, mock_get_airflow_run_facet, mock_disabled
     ):
         listener, task_instance = self._create_listener_and_task_instance()
-        mock_get_job_name.return_value = "job_name"
         mock_get_user_provided_run_facets.return_value = {"custom_facet": 2}
         mock_get_airflow_run_facet.return_value = {"airflow_run_facet": 3}
         mock_disabled.return_value = True
@@ -1525,9 +1495,8 @@ def test_listener_on_task_instance_running_do_not_call_adapter_when_disabled_ope
 
     @mock.patch("airflow.providers.openlineage.plugins.listener.is_operator_disabled")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_user_provided_run_facets")
-    @mock.patch("airflow.providers.openlineage.plugins.listener.get_job_name")
     def test_listener_on_task_instance_failed_do_not_call_adapter_when_disabled_operator(
-        self, mock_get_job_name, mock_get_user_provided_run_facets, mock_disabled
+        self, mock_get_user_provided_run_facets, mock_disabled
     ):
         listener, task_instance = self._create_listener_and_task_instance()
         mock_get_user_provided_run_facets.return_value = {"custom_facet": 2}
@@ -1546,9 +1515,8 @@ def test_listener_on_task_instance_failed_do_not_call_adapter_when_disabled_oper
 
     @mock.patch("airflow.providers.openlineage.plugins.listener.is_operator_disabled")
     @mock.patch("airflow.providers.openlineage.plugins.listener.get_user_provided_run_facets")
-    @mock.patch("airflow.providers.openlineage.plugins.listener.get_job_name")
     def test_listener_on_task_instance_success_do_not_call_adapter_when_disabled_operator(
-        self, mock_get_job_name, mock_get_user_provided_run_facets, mock_disabled
+        self, mock_get_user_provided_run_facets, mock_disabled
     ):
         listener, task_instance = self._create_listener_and_task_instance()
         mock_get_user_provided_run_facets.return_value = {"custom_facet": 2}

From 490947d1b633b369b39b4fc7c109161dd8ed43e4 Mon Sep 17 00:00:00 2001
From: Elad Kalif <45845474+eladkal@users.noreply.github.com>
Date: Fri, 27 Jun 2025 18:44:37 +0300
Subject: [PATCH 234/381] Bump google-cloud-bigquery>=3.24.0 (#52337)

---
 providers/google/pyproject.toml | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/providers/google/pyproject.toml b/providers/google/pyproject.toml
index c19467f4bdc54..b46d9146dadf8 100644
--- a/providers/google/pyproject.toml
+++ b/providers/google/pyproject.toml
@@ -83,8 +83,7 @@ dependencies = [
     "google-cloud-bigquery-storage>=2.31.0; python_version >= '3.12'",
     "google-cloud-alloydb>=0.4.0",
     "google-cloud-automl>=2.12.0",
-    # Excluded versions contain bug https://github.com/apache/airflow/issues/39541 which is resolved in 3.24.0
-    "google-cloud-bigquery>=3.4.0,!=3.21.*,!=3.22.0,!=3.23.*",
+    "google-cloud-bigquery>=3.24.0",
     "google-cloud-bigquery-datatransfer>=3.13.0",
     "google-cloud-bigtable>=2.17.0",
     "google-cloud-build>=3.31.0",

From 830c24d82be9bee56d1529b0716dc954307d45b5 Mon Sep 17 00:00:00 2001
From: Elad Kalif <45845474+eladkal@users.noreply.github.com>
Date: Fri, 27 Jun 2025 18:44:58 +0300
Subject: [PATCH 235/381] Cleanup stale Python3.9 dependencies (#52344)

---
 airflow-core/pyproject.toml | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/airflow-core/pyproject.toml b/airflow-core/pyproject.toml
index 06e8f32bec991..36826c11661a2 100644
--- a/airflow-core/pyproject.toml
+++ b/airflow-core/pyproject.toml
@@ -78,9 +78,6 @@ dependencies = [
     "cryptography>=41.0.0",
     "deprecated>=1.2.13",
     "dill>=0.2.2",
-    # Required for python 3.9 to work with new annotations styles. Check package
-    # description on PyPI for more details: https://pypi.org/project/eval-type-backport/
-    'eval-type-backport>=0.2.0;python_version<"3.10"',
     # 0.115.10 fastapi was a bad release that broke our API's and static checks.
     # Related fastapi issue here: https://github.com/fastapi/fastapi/discussions/13431
     "fastapi[standard]>=0.115.0,!=0.115.10",
@@ -95,8 +92,7 @@ dependencies = [
     "jinja2>=3.1.5",
     "jsonschema>=4.19.1",
     "lazy-object-proxy>=1.2.0",
-    'libcst >=1.1.0,!=1.8.1;python_version<"3.10"',
-    'libcst >=1.1.0;python_version>="3.10"',
+    'libcst >=1.1.0',
     "linkify-it-py>=2.0.0",
     "lockfile>=0.12.2",
     "methodtools>=0.4.7",

From 0ffa1628bf3aabca7700e8d82483b51187e3e560 Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Fri, 27 Jun 2025 23:12:44 +0530
Subject: [PATCH 236/381] Make airflow-ctl test_login safe for parallel
 execution by using temp AIRFLOW_HOME (#52345)

* Handle directory creation for tests more robustly in airflow-ctl

* generalising it to temp home
---
 airflow-ctl/src/airflowctl/api/client.py      |  3 +-
 .../ctl/commands/test_auth_command.py         | 49 ++++++++++---------
 2 files changed, 27 insertions(+), 25 deletions(-)

diff --git a/airflow-ctl/src/airflowctl/api/client.py b/airflow-ctl/src/airflowctl/api/client.py
index 44ea80e9e61e6..162e21c9422dc 100644
--- a/airflow-ctl/src/airflowctl/api/client.py
+++ b/airflow-ctl/src/airflowctl/api/client.py
@@ -130,8 +130,7 @@ def input_cli_config_file(self) -> str:
     def save(self):
         """Save the credentials to keyring and URL to disk as a file."""
         default_config_dir = os.environ.get("AIRFLOW_HOME", os.path.expanduser("~/airflow"))
-        if not os.path.exists(default_config_dir):
-            os.makedirs(default_config_dir)
+        os.makedirs(default_config_dir, exist_ok=True)
         with open(os.path.join(default_config_dir, self.input_cli_config_file), "w") as f:
             json.dump({"api_url": self.api_url}, f)
         try:
diff --git a/airflow-ctl/tests/airflow_ctl/ctl/commands/test_auth_command.py b/airflow-ctl/tests/airflow_ctl/ctl/commands/test_auth_command.py
index f1d4b95f014b7..c5285710d58c3 100644
--- a/airflow-ctl/tests/airflow_ctl/ctl/commands/test_auth_command.py
+++ b/airflow-ctl/tests/airflow_ctl/ctl/commands/test_auth_command.py
@@ -19,6 +19,7 @@
 import io
 import json
 import os
+import tempfile
 from unittest import mock
 from unittest.mock import patch
 
@@ -40,32 +41,34 @@ class TestCliAuthCommands:
     @patch.dict(os.environ, {"AIRFLOW_CLI_ENVIRONMENT": "TEST_AUTH_LOGIN"})
     @patch("airflowctl.api.client.keyring")
     @pytest.mark.flaky(reruns=3, reruns_delay=10)
-    def test_login(self, mock_keyring, api_client_maker):
-        api_client = api_client_maker(
-            path="/auth/token/cli",
-            response_json=self.login_response.model_dump(),
-            expected_http_status_code=201,
-            kind=ClientKind.AUTH,
-        )
+    def test_login(self, mock_keyring, api_client_maker, monkeypatch):
+        with tempfile.TemporaryDirectory() as temp_airflow_home:
+            monkeypatch.setenv("AIRFLOW_HOME", temp_airflow_home)
 
-        mock_keyring.set_password = mock.MagicMock()
-        mock_keyring.get_password.return_value = None
-        env = "TEST_AUTH_LOGIN"
+            api_client = api_client_maker(
+                path="/auth/token/cli",
+                response_json=self.login_response.model_dump(),
+                expected_http_status_code=201,
+                kind=ClientKind.AUTH,
+            )
 
-        auth_command.login(
-            self.parser.parse_args(["auth", "login", "--api-url", "http://localhost:8080"]),
-            api_client=api_client,
-        )
-        default_config_dir = os.environ.get("AIRFLOW_HOME", os.path.expanduser("~/airflow"))
-        assert os.path.exists(default_config_dir)
-        with open(os.path.join(default_config_dir, f"{env}.json")) as f:
-            assert json.load(f) == {
-                "api_url": "http://localhost:8080",
-            }
+            mock_keyring.set_password = mock.MagicMock()
+            mock_keyring.get_password.return_value = None
+            env = "TEST_AUTH_LOGIN"
 
-        mock_keyring.set_password.assert_called_once_with(
-            "airflowctl", "api_token-TEST_AUTH_LOGIN", "TEST_TOKEN"
-        )
+            auth_command.login(
+                self.parser.parse_args(["auth", "login", "--api-url", "http://localhost:8080"]),
+                api_client=api_client,
+            )
+
+            config_path = os.path.join(temp_airflow_home, f"{env}.json")
+            assert os.path.exists(config_path)
+            with open(config_path) as f:
+                assert json.load(f) == {"api_url": "http://localhost:8080"}
+
+            mock_keyring.set_password.assert_called_once_with(
+                "airflowctl", "api_token-TEST_AUTH_LOGIN", "TEST_TOKEN"
+            )
 
     # Test auth login with username and password
     @patch("airflowctl.api.client.keyring")

From 05497f40309cf5420b6f1910ce614312b4db65ce Mon Sep 17 00:00:00 2001
From: Pierre Jeambrun <pierrejbrun@gmail.com>
Date: Fri, 27 Jun 2025 19:54:05 +0200
Subject: [PATCH 237/381] Improve safety for external views (#52352)

---
 .../src/airflow/api_fastapi/core_api/datamodels/plugins.py      | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/plugins.py b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/plugins.py
index 61d4ec8a0842b..92ad988b087fe 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/plugins.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/plugins.py
@@ -130,7 +130,7 @@ def convert_source(cls, data: Any) -> Any:
     @model_validator(mode="before")
     @classmethod
     def convert_external_views(cls, data: Any) -> Any:
-        data["external_views"] = [*data["external_views"], *data.get("appbuilder_menu_items", [])]
+        data["external_views"] = [*data["external_views"], *data["appbuilder_menu_items"]]
         return data
 
 

From a5e026f94cbc0b777e70ec9fcca878449bf52fe7 Mon Sep 17 00:00:00 2001
From: Elad Kalif <45845474+eladkal@users.noreply.github.com>
Date: Fri, 27 Jun 2025 21:06:53 +0300
Subject: [PATCH 238/381] Set snowflake-snowpark-python for Python 3.12
 (#52356)

* Set snowflake-snowpark-python for Python 3.12

* fix
---
 providers/snowflake/pyproject.toml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/providers/snowflake/pyproject.toml b/providers/snowflake/pyproject.toml
index 00d09db4db150..16f9b6a73a4b5 100644
--- a/providers/snowflake/pyproject.toml
+++ b/providers/snowflake/pyproject.toml
@@ -65,6 +65,7 @@ dependencies = [
     "snowflake-connector-python>=3.7.1",
     "snowflake-sqlalchemy>=1.4.0",
     "snowflake-snowpark-python>=1.17.0;python_version<'3.12'",
+    "snowflake-snowpark-python>=1.27.0;python_version>='3.12'",
 ]
 
 # The optional dependencies should be modified in place in the generated file

From 14040dab2d26bb9e7c77457a3aedbc9c74dcb25e Mon Sep 17 00:00:00 2001
From: Elad Kalif <45845474+eladkal@users.noreply.github.com>
Date: Fri, 27 Jun 2025 21:48:08 +0300
Subject: [PATCH 239/381] Bump ibmcloudant>=0.10.0 (#52354)

---
 providers/cloudant/pyproject.toml | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/providers/cloudant/pyproject.toml b/providers/cloudant/pyproject.toml
index e247f8da60629..d07eb7e0e73a6 100644
--- a/providers/cloudant/pyproject.toml
+++ b/providers/cloudant/pyproject.toml
@@ -57,9 +57,7 @@ requires-python = "~=3.10"
 # After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
 dependencies = [
     "apache-airflow>=2.10.0",
-    # Even though 3.9 is excluded below, we need to make this python_version aware so that `uv` can generate a
-    # full lock file when building lock file from provider sources
-    "ibmcloudant==0.9.1;python_version>=\"3.10\"",
+    "ibmcloudant>=0.10.0",
 ]
 
 [dependency-groups]

From a068b8cb422500f579a696f31ff6751bf420e3b8 Mon Sep 17 00:00:00 2001
From: Yanshi <8177510+yanshil@users.noreply.github.com>
Date: Sat, 28 Jun 2025 04:19:23 +0800
Subject: [PATCH 240/381] Fix UnboundLocalError for `edge_job_command_len`
 (#52328)

* fix: fix UnboundLocalError for `edge_job_command_len`

* Fix `edge_job_command_len` UnboundLocalError (explicitly init)
---
 .../edge3/src/airflow/providers/edge3/executors/edge_executor.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/providers/edge3/src/airflow/providers/edge3/executors/edge_executor.py b/providers/edge3/src/airflow/providers/edge3/executors/edge_executor.py
index 827e03498f299..e2e380fe7e285 100644
--- a/providers/edge3/src/airflow/providers/edge3/executors/edge_executor.py
+++ b/providers/edge3/src/airflow/providers/edge3/executors/edge_executor.py
@@ -72,6 +72,7 @@ def _check_db_schema(self, engine: Engine) -> None:
         """
         inspector = inspect(engine)
         edge_job_columns = None
+        edge_job_command_len = None
         with contextlib.suppress(NoSuchTableError):
             edge_job_schema = inspector.get_columns("edge_job")
             edge_job_columns = [column["name"] for column in edge_job_schema]

From f6b0e4bcad0adc0e0fbdbd808811e939dcc5da2d Mon Sep 17 00:00:00 2001
From: Junmin Ahn <36021827+junminahn@users.noreply.github.com>
Date: Fri, 27 Jun 2025 13:21:12 -0700
Subject: [PATCH 241/381] Chart: Fix JWT secret name (#52268)

---
 chart/templates/secrets/jwt-secret.yaml                         | 2 +-
 .../tests/helm_tests/airflow_aux/test_basic_helm_chart.py       | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/chart/templates/secrets/jwt-secret.yaml b/chart/templates/secrets/jwt-secret.yaml
index 7eb524c90b119..314e40c4d40bc 100644
--- a/chart/templates/secrets/jwt-secret.yaml
+++ b/chart/templates/secrets/jwt-secret.yaml
@@ -26,7 +26,7 @@
 apiVersion: v1
 kind: Secret
 metadata:
-  name: {{ include "airflow.fullname" . }}-jwt-secret
+  name: {{ include "jwt_secret" . }}
   labels:
     tier: airflow
     component: api-server
diff --git a/helm-tests/tests/helm_tests/airflow_aux/test_basic_helm_chart.py b/helm-tests/tests/helm_tests/airflow_aux/test_basic_helm_chart.py
index 96b9c1e118251..a3cc64b96688e 100644
--- a/helm-tests/tests/helm_tests/airflow_aux/test_basic_helm_chart.py
+++ b/helm-tests/tests/helm_tests/airflow_aux/test_basic_helm_chart.py
@@ -71,7 +71,7 @@
         ("Deployment", "test-basic-airflow-dag-processor"),
         ("ServiceAccount", "test-basic-airflow-api-server"),
         ("ServiceAccount", "test-basic-airflow-dag-processor"),
-        ("Secret", "test-basic-airflow-jwt-secret"),
+        ("Secret", "test-basic-jwt-secret"),
     }
 )
 

From 4f34f3bd0d2d6494f70825fd8db683921cd41735 Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Fri, 27 Jun 2025 23:37:16 +0100
Subject: [PATCH 242/381] Fix indexerror in _find_caplog_in_def selective check
 function (#52369)

---
 dev/breeze/src/airflow_breeze/utils/selective_checks.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dev/breeze/src/airflow_breeze/utils/selective_checks.py b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
index 0393d39d49b52..f6e302fbf4c93 100644
--- a/dev/breeze/src/airflow_breeze/utils/selective_checks.py
+++ b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
@@ -1457,7 +1457,7 @@ def _find_caplog_in_def(cls, added_lines):
             if all(keyword in added_lines[line_counter] for keyword in ["def", "caplog", "(", ")"]):
                 return True
             if "def" in added_lines[line_counter] and ")" not in added_lines[line_counter]:
-                while ")" not in added_lines[line_counter]:
+                while line_counter < len(added_lines) and ")" not in added_lines[line_counter]:
                     if "caplog" in added_lines[line_counter]:
                         return True
                     line_counter += 1

From f1d0f2d3433c2a0b95e24130fc3f94ac6328c1d9 Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Fri, 27 Jun 2025 23:38:07 +0100
Subject: [PATCH 243/381] Bump microsoft kiota packages to 1.9.4 and update
 tests (#52367)

---
 providers/microsoft/azure/pyproject.toml               | 10 +++++-----
 .../airflow/providers/microsoft/azure/hooks/msgraph.py |  6 ++++--
 .../tests/unit/microsoft/azure/hooks/test_msgraph.py   |  4 ++--
 3 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/providers/microsoft/azure/pyproject.toml b/providers/microsoft/azure/pyproject.toml
index 68e64242e8dee..bb62f0052c3b1 100644
--- a/providers/microsoft/azure/pyproject.toml
+++ b/providers/microsoft/azure/pyproject.toml
@@ -81,11 +81,11 @@ dependencies = [
     "azure-mgmt-containerinstance>=10.1.0",
     "flask-appbuilder>=4.0.0",
     "msgraph-core>=1.3.3",
-    "microsoft-kiota-http>=1.9.0,<2.0.0",
-    "microsoft-kiota-serialization-json>=1.9.0",
-    "microsoft-kiota-serialization-text>=1.9.0",
-    "microsoft-kiota-abstractions>=1.9.0,<2.0.0",
-    "microsoft-kiota-authentication-azure>=1.9.0,<2.0.0",
+    "microsoft-kiota-http>=1.9.4,<2.0.0",
+    "microsoft-kiota-serialization-json>=1.9.4",
+    "microsoft-kiota-serialization-text>=1.9.4",
+    "microsoft-kiota-abstractions>=1.9.4,<2.0.0",
+    "microsoft-kiota-authentication-azure>=1.9.4,<2.0.0",
     "msal-extensions>=1.1.0",
     "portalocker>=2.8.1",
 ]
diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/msgraph.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/msgraph.py
index 94ee15847f8ff..be1725836a3c5 100644
--- a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/msgraph.py
+++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/msgraph.py
@@ -299,6 +299,7 @@ def get_conn(self) -> RequestAdapter:
                     timeout=Timeout(timeout=self.timeout),
                     verify=verify,
                     trust_env=trust_env,
+                    base_url=base_url,
                 ),
                 host=host,  # type: ignore
             )
@@ -446,9 +447,9 @@ def request_information(
             request_information.url = url
         elif request_information.query_parameters.keys():
             query = ",".join(request_information.query_parameters.keys())
-            request_information.url_template = f"{{+baseurl}}/{self.normalize_url(url)}{{?{query}}}"
+            request_information.url_template = f"{{+baseurl}}{self.normalize_url(url)}{{?{query}}}"
         else:
-            request_information.url_template = f"{{+baseurl}}/{self.normalize_url(url)}"
+            request_information.url_template = f"{{+baseurl}}{self.normalize_url(url)}"
         if not response_type:
             request_information.request_options[ResponseHandlerOption.get_key()] = ResponseHandlerOption(
                 response_handler=DefaultResponseHandler()
@@ -467,6 +468,7 @@ def request_information(
                 header_name=RequestInformation.CONTENT_TYPE_HEADER, header_value="application/json"
             )
             request_information.content = json.dumps(data).encode("utf-8")
+        print("Request Information:", request_information.url)
         return request_information
 
     @staticmethod
diff --git a/providers/microsoft/azure/tests/unit/microsoft/azure/hooks/test_msgraph.py b/providers/microsoft/azure/tests/unit/microsoft/azure/hooks/test_msgraph.py
index a81e4df2e5a95..e01ab8de6a20d 100644
--- a/providers/microsoft/azure/tests/unit/microsoft/azure/hooks/test_msgraph.py
+++ b/providers/microsoft/azure/tests/unit/microsoft/azure/hooks/test_msgraph.py
@@ -88,7 +88,7 @@ def test_get_conn(self):
             actual = hook.get_conn()
 
             assert isinstance(actual, HttpxRequestAdapter)
-            assert actual.base_url == "https://graph.microsoft.com/v1.0"
+            assert actual.base_url == "https://graph.microsoft.com/v1.0/"
 
     def test_get_conn_with_custom_base_url(self):
         connection = lambda conn_id: get_airflow_connection(
@@ -105,7 +105,7 @@ def test_get_conn_with_custom_base_url(self):
             actual = hook.get_conn()
 
             assert isinstance(actual, HttpxRequestAdapter)
-            assert actual.base_url == "https://api.fabric.microsoft.com/v1"
+            assert actual.base_url == "https://api.fabric.microsoft.com/v1/"
 
     def test_get_conn_with_proxies_as_string(self):
         connection = lambda conn_id: get_airflow_connection(

From 6177bd637fa343e4a76fddce3dd23091a93af112 Mon Sep 17 00:00:00 2001
From: Jed Cunningham <66968678+jedcunningham@users.noreply.github.com>
Date: Fri, 27 Jun 2025 16:43:00 -0600
Subject: [PATCH 244/381] Check chart annotations with pre-commit (#52365)

It's easy to get "valid" helm annotations, but still be invalid
artifacthub annotations because they are strings with yaml in them.
Let's validate the strings are valid yaml too.
---
 .pre-commit-config.yaml                       |  7 ++
 chart/Chart.yaml                              |  2 +-
 contributing-docs/08_static_code_checks.rst   |  2 +
 .../doc/images/output_static-checks.svg       |  4 +-
 .../doc/images/output_static-checks.txt       |  2 +-
 .../src/airflow_breeze/pre_commit_ids.py      |  1 +
 .../pre_commit/validate_chart_annotations.py  | 75 +++++++++++++++++++
 7 files changed, 89 insertions(+), 4 deletions(-)
 create mode 100755 scripts/ci/pre_commit/validate_chart_annotations.py

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index c31f3d6d7b153..265f52fd1c2ba 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -924,6 +924,13 @@ repos:
         files: ^chart
         require_serial: true
         additional_dependencies: ['rich>=12.4.4','requests>=2.31.0']
+      - id: validate-chart-annotations
+        name: Validate chart annotations
+        entry: ./scripts/ci/pre_commit/validate_chart_annotations.py
+        language: python
+        pass_filenames: false
+        files: ^chart/Chart\.yaml$
+        additional_dependencies: ['pyyaml>=6.0.2', 'rich>=12.4.4']
       - id: kubeconform
         name: Kubeconform check on our helm chart
         entry: ./scripts/ci/pre_commit/check_kubeconform.py
diff --git a/chart/Chart.yaml b/chart/Chart.yaml
index f53fc21407eee..5f247d5650e9d 100644
--- a/chart/Chart.yaml
+++ b/chart/Chart.yaml
@@ -136,7 +136,7 @@ annotations:
     - description: 'Fix execution_api_server_url when base_url has a subpath'
       kind: changed
       links:
-      - name: '#51454
+      - name: '#51454'
         url: https://github.com/apache/airflow/pull/51454
     - description: 'Docs: Bump minimum helm version in docs'
       kind: changed
diff --git a/contributing-docs/08_static_code_checks.rst b/contributing-docs/08_static_code_checks.rst
index db0c4e3129d7b..70fd44db68d8f 100644
--- a/contributing-docs/08_static_code_checks.rst
+++ b/contributing-docs/08_static_code_checks.rst
@@ -412,6 +412,8 @@ require Breeze Docker image to be built locally.
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
 | update-version                                            | Update versions in docs                                |         |
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
+| validate-chart-annotations                                | Validate chart annotations                             |         |
++-----------------------------------------------------------+--------------------------------------------------------+---------+
 | validate-operators-init                                   | No templated field logic checks in operator __init__   |         |
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
 | yamllint                                                  | Check YAML files with yamllint                         |         |
diff --git a/dev/breeze/doc/images/output_static-checks.svg b/dev/breeze/doc/images/output_static-checks.svg
index 9918dedfb8bfb..0e6fb97574d95 100644
--- a/dev/breeze/doc/images/output_static-checks.svg
+++ b/dev/breeze/doc/images/output_static-checks.svg
@@ -384,8 +384,8 @@
 </text><text class="breeze-static-checks-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1410.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-57)">update-providers-build-files&#160;|&#160;update-providers-dependencies&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1410.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text class="breeze-static-checks-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">
 </text><text class="breeze-static-checks-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1435.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-58)">update-pyproject-toml&#160;|&#160;update-reproducible-source-date-epoch&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text class="breeze-static-checks-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">
 </text><text class="breeze-static-checks-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1459.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-59)">update-spelling-wordlist-to-be-sorted&#160;|&#160;update-supported-versions&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1459.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">│</text><text class="breeze-static-checks-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">
-</text><text class="breeze-static-checks-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1484" textLength="988.2" clip-path="url(#breeze-static-checks-line-60)">update-vendored-in-k8s-json-schema&#160;|&#160;update-version&#160;|&#160;validate-operators-init&#160;|&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">│</text><text class="breeze-static-checks-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">
-</text><text class="breeze-static-checks-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1508.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-61)">yamllint&#160;|&#160;zizmor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text class="breeze-static-checks-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">
+</text><text class="breeze-static-checks-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1484" textLength="988.2" clip-path="url(#breeze-static-checks-line-60)">update-vendored-in-k8s-json-schema&#160;|&#160;update-version&#160;|&#160;validate-chart-annotations&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">│</text><text class="breeze-static-checks-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">
+</text><text class="breeze-static-checks-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1508.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-61)">|&#160;validate-operators-init&#160;|&#160;yamllint&#160;|&#160;zizmor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text class="breeze-static-checks-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">
 </text><text class="breeze-static-checks-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1532.8" textLength="268.4" clip-path="url(#breeze-static-checks-line-62)">--show-diff-on-failure</text><text class="breeze-static-checks-r6" x="402.6" y="1532.8" textLength="24.4" clip-path="url(#breeze-static-checks-line-62)">-s</text><text class="breeze-static-checks-r1" x="451.4" y="1532.8" textLength="524.6" clip-path="url(#breeze-static-checks-line-62)">Show&#160;diff&#160;for&#160;files&#160;modified&#160;by&#160;the&#160;checks.</text><text class="breeze-static-checks-r5" x="1451.8" y="1532.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">│</text><text class="breeze-static-checks-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">
 </text><text class="breeze-static-checks-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1557.2" textLength="292.8" clip-path="url(#breeze-static-checks-line-63)">--initialize-environment</text><text class="breeze-static-checks-r1" x="451.4" y="1557.2" textLength="549" clip-path="url(#breeze-static-checks-line-63)">Initialize&#160;environment&#160;before&#160;running&#160;checks.</text><text class="breeze-static-checks-r5" x="1451.8" y="1557.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">│</text><text class="breeze-static-checks-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">
 </text><text class="breeze-static-checks-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1581.6" textLength="353.8" clip-path="url(#breeze-static-checks-line-64)">--max-initialization-attempts</text><text class="breeze-static-checks-r1" x="451.4" y="1581.6" textLength="854" clip-path="url(#breeze-static-checks-line-64)">Maximum&#160;number&#160;of&#160;attempts&#160;to&#160;initialize&#160;environment&#160;before&#160;giving&#160;up.</text><text class="breeze-static-checks-r5" x="1451.8" y="1581.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">│</text><text class="breeze-static-checks-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">
diff --git a/dev/breeze/doc/images/output_static-checks.txt b/dev/breeze/doc/images/output_static-checks.txt
index e1d3187c5864b..e8dbbc57b6271 100644
--- a/dev/breeze/doc/images/output_static-checks.txt
+++ b/dev/breeze/doc/images/output_static-checks.txt
@@ -1 +1 @@
-d0dc18a59b8997b9c06a3bd15879c8c7
+4d21a8da51102b0c61707aac83f31b3a
diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids.py b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
index c5ad5b2040a4e..9f1a79c15a4e2 100644
--- a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
+++ b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
@@ -158,6 +158,7 @@
     "update-supported-versions",
     "update-vendored-in-k8s-json-schema",
     "update-version",
+    "validate-chart-annotations",
     "validate-operators-init",
     "yamllint",
     "zizmor",
diff --git a/scripts/ci/pre_commit/validate_chart_annotations.py b/scripts/ci/pre_commit/validate_chart_annotations.py
new file mode 100755
index 0000000000000..77f001e13fbd7
--- /dev/null
+++ b/scripts/ci/pre_commit/validate_chart_annotations.py
@@ -0,0 +1,75 @@
+#!/usr/bin/env python
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import sys
+from pathlib import Path
+
+import yaml
+
+sys.path.insert(0, str(Path(__file__).parent.resolve()))
+from common_precommit_utils import AIRFLOW_ROOT_PATH, console
+
+CHART_YAML_FILE = AIRFLOW_ROOT_PATH / "chart" / "Chart.yaml"
+
+# List of artifacthub.io annotations that should contain valid YAML strings
+ARTIFACTHUB_ANNOTATIONS_TO_CHECK = [
+    "artifacthub.io/links",
+    "artifacthub.io/screenshots",
+    "artifacthub.io/changes",
+]
+
+
+def validate_chart_annotations():
+    """Validate that chart annotations are valid - e.g. strings that hold yaml are valid yaml"""
+    errors = []
+
+    try:
+        chart_content = yaml.safe_load(CHART_YAML_FILE.read_text())
+    except yaml.YAMLError as e:
+        console.print(f"[red]Error parsing Chart.yaml: {e}")
+        return False
+
+    annotations = chart_content.get("annotations", {})
+
+    for annotation_key in ARTIFACTHUB_ANNOTATIONS_TO_CHECK:
+        if annotation_key in annotations:
+            annotation_value = annotations[annotation_key]
+            try:
+                # Try to parse the string value as YAML
+                yaml.safe_load(annotation_value)
+                console.print(f"[green]✓[/] {annotation_key} contains valid YAML")
+            except yaml.YAMLError as e:
+                error_msg = f"Invalid YAML in annotation '{annotation_key}': {e}"
+                errors.append(error_msg)
+                console.print(f"[red]✗ {error_msg}[/]")
+
+    if errors:
+        console.print("\n[red]Chart.yaml validation failed![/]")
+        console.print("[red]The following artifacthub.io annotations contain invalid YAML:[/]")
+        for error in errors:
+            console.print(f"[red]  - {error}[/]")
+        return False
+
+    console.print("\n[green]All artifacthub.io annotations contain valid YAML![/]")
+    return True
+
+
+if __name__ == "__main__":
+    if not validate_chart_annotations():
+        sys.exit(1)

From bb041b3e1ac4afe962faf273c7798d819b5d5351 Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Sat, 28 Jun 2025 04:40:08 +0530
Subject: [PATCH 245/381] Add new `breeze run` command for non-interactive
 command execution (#52370)

Add a new `breeze run` command that allows running commands in the Breeze
environment without entering an interactive shell. This is useful for
automated testing, and one-off command execution which is useful for AI too.
---
 dev/breeze/doc/03_developer_tasks.rst         |  50 ++++
 dev/breeze/doc/images/output-commands.svg     |  54 ++--
 dev/breeze/doc/images/output_run.svg          | 240 ++++++++++++++++++
 dev/breeze/doc/images/output_run.txt          |   1 +
 ...utput_setup_check-all-params-in-groups.svg |   2 +-
 ...utput_setup_check-all-params-in-groups.txt |   2 +-
 ...output_setup_regenerate-command-images.svg |   2 +-
 ...output_setup_regenerate-command-images.txt |   2 +-
 .../commands/developer_commands.py            | 137 ++++++++++
 .../commands/developer_commands_config.py     |  37 +++
 .../airflow_breeze/commands/setup_commands.py |   1 +
 11 files changed, 499 insertions(+), 29 deletions(-)
 create mode 100644 dev/breeze/doc/images/output_run.svg
 create mode 100644 dev/breeze/doc/images/output_run.txt

diff --git a/dev/breeze/doc/03_developer_tasks.rst b/dev/breeze/doc/03_developer_tasks.rst
index 9bc70819903c0..3a425469283de 100644
--- a/dev/breeze/doc/03_developer_tasks.rst
+++ b/dev/breeze/doc/03_developer_tasks.rst
@@ -494,6 +494,56 @@ Those are all available flags of ``shell`` command:
   :width: 100%
   :alt: Breeze shell
 
+Running commands without interactive shell
+------------------------------------------
+
+For automated testing, and one-off command execution, you can use the ``breeze run`` command
+to execute commands in the Breeze environment without entering the interactive shell. This command is
+particularly useful when you want to run a specific command and exit immediately, without the overhead
+of an interactive session.
+
+The ``breeze run`` command creates a fresh container that is automatically cleaned up after the command
+completes, and each run uses a unique project name to avoid conflicts with other instances.
+
+Here are some common examples:
+
+Running a specific test:
+
+.. code-block:: bash
+
+    breeze run pytest providers/google/tests/unit/google/cloud/operators/test_dataflow.py -v
+
+Running Python commands:
+
+.. code-block:: bash
+
+    breeze run python -c "from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS; print(AIRFLOW_V_3_0_PLUS)"
+
+Running bash commands:
+
+.. code-block:: bash
+
+    breeze run bash -c "cd /opt/airflow && python -m pytest providers/google/tests/"
+
+Running with different Python version:
+
+.. code-block:: bash
+
+    breeze run --python 3.11 pytest providers/standard/tests/unit/operators/test_bash.py
+
+Running with PostgreSQL backend:
+
+.. code-block:: bash
+
+    breeze run --backend postgres pytest providers/postgres/tests/
+
+Those are all available flags of ``run`` command:
+
+.. image:: ./images/output_run.svg
+  :target: https://raw.githubusercontent.com/apache/airflow/main/dev/breeze/images/output_run.svg
+  :width: 100%
+  :alt: Breeze run
+
 Running Breeze with Metrics
 ---------------------------
 
diff --git a/dev/breeze/doc/images/output-commands.svg b/dev/breeze/doc/images/output-commands.svg
index b82c5f4b870b5..f3b92217dc0bd 100644
--- a/dev/breeze/doc/images/output-commands.svg
+++ b/dev/breeze/doc/images/output-commands.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 2172.7999999999997" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 2197.2" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-help-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="2121.7999999999997" />
+      <rect x="0" y="0" width="1463.0" height="2146.2" />
     </clipPath>
     <clipPath id="breeze-help-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -303,9 +303,12 @@
 <clipPath id="breeze-help-line-85">
     <rect x="0" y="2075.5" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-help-line-86">
+    <rect x="0" y="2099.9" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2170.8" rx="8"/><text class="breeze-help-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Breeze&#160;commands</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2195.2" rx="8"/><text class="breeze-help-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Breeze&#160;commands</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -380,28 +383,29 @@
 </text><text class="breeze-help-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-help-line-62)">│</text><text class="breeze-help-r4" x="24.4" y="1532.8" textLength="280.6" clip-path="url(#breeze-help-line-62)">down&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1532.8" textLength="1110.2" clip-path="url(#breeze-help-line-62)">Stop&#160;running&#160;breeze&#160;environment.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1532.8" textLength="12.2" clip-path="url(#breeze-help-line-62)">│</text><text class="breeze-help-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-help-line-62)">
 </text><text class="breeze-help-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-help-line-63)">│</text><text class="breeze-help-r4" x="24.4" y="1557.2" textLength="280.6" clip-path="url(#breeze-help-line-63)">shell&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1557.2" textLength="1110.2" clip-path="url(#breeze-help-line-63)">Enter&#160;breeze&#160;environment.&#160;this&#160;is&#160;the&#160;default&#160;command&#160;use&#160;when&#160;no&#160;other&#160;is&#160;selected.&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1557.2" textLength="12.2" clip-path="url(#breeze-help-line-63)">│</text><text class="breeze-help-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-help-line-63)">
 </text><text class="breeze-help-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-help-line-64)">│</text><text class="breeze-help-r4" x="24.4" y="1581.6" textLength="280.6" clip-path="url(#breeze-help-line-64)">exec&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1581.6" textLength="1110.2" clip-path="url(#breeze-help-line-64)">Joins&#160;the&#160;interactive&#160;shell&#160;of&#160;running&#160;airflow&#160;container.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1581.6" textLength="12.2" clip-path="url(#breeze-help-line-64)">│</text><text class="breeze-help-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-help-line-64)">
-</text><text class="breeze-help-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-help-line-65)">│</text><text class="breeze-help-r4" x="24.4" y="1606" textLength="280.6" clip-path="url(#breeze-help-line-65)">compile-ui-assets&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1606" textLength="1110.2" clip-path="url(#breeze-help-line-65)">Compiles&#160;ui&#160;assets.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1606" textLength="12.2" clip-path="url(#breeze-help-line-65)">│</text><text class="breeze-help-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-help-line-65)">
-</text><text class="breeze-help-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-help-line-66)">│</text><text class="breeze-help-r4" x="24.4" y="1630.4" textLength="280.6" clip-path="url(#breeze-help-line-66)">cleanup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1630.4" textLength="1110.2" clip-path="url(#breeze-help-line-66)">Cleans&#160;the&#160;cache&#160;of&#160;parameters,&#160;docker&#160;cache&#160;and&#160;optionally&#160;built&#160;CI/PROD&#160;images.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1630.4" textLength="12.2" clip-path="url(#breeze-help-line-66)">│</text><text class="breeze-help-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-help-line-66)">
-</text><text class="breeze-help-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-help-line-67)">│</text><text class="breeze-help-r4" x="24.4" y="1654.8" textLength="280.6" clip-path="url(#breeze-help-line-67)">generate-migration-file</text><text class="breeze-help-r1" x="329.4" y="1654.8" textLength="1110.2" clip-path="url(#breeze-help-line-67)">Autogenerate&#160;the&#160;alembic&#160;migration&#160;file&#160;for&#160;the&#160;ORM&#160;changes.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1654.8" textLength="12.2" clip-path="url(#breeze-help-line-67)">│</text><text class="breeze-help-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-help-line-67)">
-</text><text class="breeze-help-r5" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-help-line-68)">│</text><text class="breeze-help-r4" x="24.4" y="1679.2" textLength="280.6" clip-path="url(#breeze-help-line-68)">doctor&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1679.2" textLength="1110.2" clip-path="url(#breeze-help-line-68)">Auto-healing&#160;of&#160;breeze&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1679.2" textLength="12.2" clip-path="url(#breeze-help-line-68)">│</text><text class="breeze-help-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-help-line-68)">
-</text><text class="breeze-help-r5" x="0" y="1703.6" textLength="1464" clip-path="url(#breeze-help-line-69)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-help-line-69)">
-</text><text class="breeze-help-r5" x="0" y="1728" textLength="24.4" clip-path="url(#breeze-help-line-70)">╭─</text><text class="breeze-help-r5" x="24.4" y="1728" textLength="219.6" clip-path="url(#breeze-help-line-70)">&#160;Testing&#160;commands&#160;</text><text class="breeze-help-r5" x="244" y="1728" textLength="1195.6" clip-path="url(#breeze-help-line-70)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="1728" textLength="24.4" clip-path="url(#breeze-help-line-70)">─╮</text><text class="breeze-help-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-help-line-70)">
-</text><text class="breeze-help-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-help-line-71)">│</text><text class="breeze-help-r4" x="24.4" y="1752.4" textLength="183" clip-path="url(#breeze-help-line-71)">testing&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="231.8" y="1752.4" textLength="1207.8" clip-path="url(#breeze-help-line-71)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;run&#160;tests&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1752.4" textLength="12.2" clip-path="url(#breeze-help-line-71)">│</text><text class="breeze-help-r1" x="1464" y="1752.4" textLength="12.2" clip-path="url(#breeze-help-line-71)">
-</text><text class="breeze-help-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-help-line-72)">│</text><text class="breeze-help-r4" x="24.4" y="1776.8" textLength="183" clip-path="url(#breeze-help-line-72)">k8s&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="231.8" y="1776.8" textLength="1207.8" clip-path="url(#breeze-help-line-72)">Tools&#160;that&#160;developers&#160;use&#160;to&#160;run&#160;Kubernetes&#160;tests&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1776.8" textLength="12.2" clip-path="url(#breeze-help-line-72)">│</text><text class="breeze-help-r1" x="1464" y="1776.8" textLength="12.2" clip-path="url(#breeze-help-line-72)">
-</text><text class="breeze-help-r5" x="0" y="1801.2" textLength="1464" clip-path="url(#breeze-help-line-73)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-help-line-73)">
-</text><text class="breeze-help-r5" x="0" y="1825.6" textLength="24.4" clip-path="url(#breeze-help-line-74)">╭─</text><text class="breeze-help-r5" x="24.4" y="1825.6" textLength="195.2" clip-path="url(#breeze-help-line-74)">&#160;Image&#160;commands&#160;</text><text class="breeze-help-r5" x="219.6" y="1825.6" textLength="1220" clip-path="url(#breeze-help-line-74)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="1825.6" textLength="24.4" clip-path="url(#breeze-help-line-74)">─╮</text><text class="breeze-help-r1" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-help-line-74)">
-</text><text class="breeze-help-r5" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-help-line-75)">│</text><text class="breeze-help-r4" x="24.4" y="1850" textLength="207.4" clip-path="url(#breeze-help-line-75)">ci-image&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="256.2" y="1850" textLength="1183.4" clip-path="url(#breeze-help-line-75)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;manually&#160;manage&#160;CI&#160;images&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1850" textLength="12.2" clip-path="url(#breeze-help-line-75)">│</text><text class="breeze-help-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-help-line-75)">
-</text><text class="breeze-help-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-help-line-76)">│</text><text class="breeze-help-r4" x="24.4" y="1874.4" textLength="207.4" clip-path="url(#breeze-help-line-76)">prod-image&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="256.2" y="1874.4" textLength="1183.4" clip-path="url(#breeze-help-line-76)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;manually&#160;manage&#160;PROD&#160;images&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1874.4" textLength="12.2" clip-path="url(#breeze-help-line-76)">│</text><text class="breeze-help-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-help-line-76)">
-</text><text class="breeze-help-r5" x="0" y="1898.8" textLength="1464" clip-path="url(#breeze-help-line-77)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-help-line-77)">
-</text><text class="breeze-help-r5" x="0" y="1923.2" textLength="24.4" clip-path="url(#breeze-help-line-78)">╭─</text><text class="breeze-help-r5" x="24.4" y="1923.2" textLength="353.8" clip-path="url(#breeze-help-line-78)">&#160;Release&#160;management&#160;commands&#160;</text><text class="breeze-help-r5" x="378.2" y="1923.2" textLength="1061.4" clip-path="url(#breeze-help-line-78)">───────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="1923.2" textLength="24.4" clip-path="url(#breeze-help-line-78)">─╮</text><text class="breeze-help-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-help-line-78)">
-</text><text class="breeze-help-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-help-line-79)">│</text><text class="breeze-help-r4" x="24.4" y="1947.6" textLength="280.6" clip-path="url(#breeze-help-line-79)">release-management&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1947.6" textLength="1110.2" clip-path="url(#breeze-help-line-79)">Tools&#160;that&#160;release&#160;managers&#160;can&#160;use&#160;to&#160;prepare&#160;and&#160;manage&#160;Airflow&#160;releases&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1947.6" textLength="12.2" clip-path="url(#breeze-help-line-79)">│</text><text class="breeze-help-r1" x="1464" y="1947.6" textLength="12.2" clip-path="url(#breeze-help-line-79)">
-</text><text class="breeze-help-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-help-line-80)">│</text><text class="breeze-help-r4" x="24.4" y="1972" textLength="280.6" clip-path="url(#breeze-help-line-80)">sbom&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1972" textLength="1110.2" clip-path="url(#breeze-help-line-80)">Tools&#160;that&#160;release&#160;managers&#160;can&#160;use&#160;to&#160;prepare&#160;sbom&#160;information&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1972" textLength="12.2" clip-path="url(#breeze-help-line-80)">│</text><text class="breeze-help-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-help-line-80)">
-</text><text class="breeze-help-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-help-line-81)">│</text><text class="breeze-help-r4" x="24.4" y="1996.4" textLength="280.6" clip-path="url(#breeze-help-line-81)">workflow-run&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1996.4" textLength="1110.2" clip-path="url(#breeze-help-line-81)">Tools&#160;to&#160;manage&#160;Airflow&#160;repository&#160;workflows&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1996.4" textLength="12.2" clip-path="url(#breeze-help-line-81)">│</text><text class="breeze-help-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-help-line-81)">
-</text><text class="breeze-help-r5" x="0" y="2020.8" textLength="1464" clip-path="url(#breeze-help-line-82)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-help-line-82)">
-</text><text class="breeze-help-r5" x="0" y="2045.2" textLength="24.4" clip-path="url(#breeze-help-line-83)">╭─</text><text class="breeze-help-r5" x="24.4" y="2045.2" textLength="195.2" clip-path="url(#breeze-help-line-83)">&#160;Other&#160;commands&#160;</text><text class="breeze-help-r5" x="219.6" y="2045.2" textLength="1220" clip-path="url(#breeze-help-line-83)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="2045.2" textLength="24.4" clip-path="url(#breeze-help-line-83)">─╮</text><text class="breeze-help-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-help-line-83)">
-</text><text class="breeze-help-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-help-line-84)">│</text><text class="breeze-help-r4" x="24.4" y="2069.6" textLength="122" clip-path="url(#breeze-help-line-84)">setup&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="170.8" y="2069.6" textLength="1268.8" clip-path="url(#breeze-help-line-84)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;configure&#160;Breeze&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="2069.6" textLength="12.2" clip-path="url(#breeze-help-line-84)">│</text><text class="breeze-help-r1" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-help-line-84)">
-</text><text class="breeze-help-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-help-line-85)">│</text><text class="breeze-help-r4" x="24.4" y="2094" textLength="122" clip-path="url(#breeze-help-line-85)">ci&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="170.8" y="2094" textLength="1268.8" clip-path="url(#breeze-help-line-85)">Tools&#160;that&#160;CI&#160;workflows&#160;use&#160;to&#160;cleanup/manage&#160;CI&#160;environment&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="2094" textLength="12.2" clip-path="url(#breeze-help-line-85)">│</text><text class="breeze-help-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-help-line-85)">
-</text><text class="breeze-help-r5" x="0" y="2118.4" textLength="1464" clip-path="url(#breeze-help-line-86)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-help-line-86)">
+</text><text class="breeze-help-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-help-line-65)">│</text><text class="breeze-help-r4" x="24.4" y="1606" textLength="280.6" clip-path="url(#breeze-help-line-65)">run&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1606" textLength="1110.2" clip-path="url(#breeze-help-line-65)">Run&#160;a&#160;command&#160;in&#160;the&#160;Breeze&#160;environment&#160;without&#160;entering&#160;the&#160;interactive&#160;shell.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1606" textLength="12.2" clip-path="url(#breeze-help-line-65)">│</text><text class="breeze-help-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-help-line-65)">
+</text><text class="breeze-help-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-help-line-66)">│</text><text class="breeze-help-r4" x="24.4" y="1630.4" textLength="280.6" clip-path="url(#breeze-help-line-66)">compile-ui-assets&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1630.4" textLength="1110.2" clip-path="url(#breeze-help-line-66)">Compiles&#160;ui&#160;assets.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1630.4" textLength="12.2" clip-path="url(#breeze-help-line-66)">│</text><text class="breeze-help-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-help-line-66)">
+</text><text class="breeze-help-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-help-line-67)">│</text><text class="breeze-help-r4" x="24.4" y="1654.8" textLength="280.6" clip-path="url(#breeze-help-line-67)">cleanup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1654.8" textLength="1110.2" clip-path="url(#breeze-help-line-67)">Cleans&#160;the&#160;cache&#160;of&#160;parameters,&#160;docker&#160;cache&#160;and&#160;optionally&#160;built&#160;CI/PROD&#160;images.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1654.8" textLength="12.2" clip-path="url(#breeze-help-line-67)">│</text><text class="breeze-help-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-help-line-67)">
+</text><text class="breeze-help-r5" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-help-line-68)">│</text><text class="breeze-help-r4" x="24.4" y="1679.2" textLength="280.6" clip-path="url(#breeze-help-line-68)">generate-migration-file</text><text class="breeze-help-r1" x="329.4" y="1679.2" textLength="1110.2" clip-path="url(#breeze-help-line-68)">Autogenerate&#160;the&#160;alembic&#160;migration&#160;file&#160;for&#160;the&#160;ORM&#160;changes.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1679.2" textLength="12.2" clip-path="url(#breeze-help-line-68)">│</text><text class="breeze-help-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-help-line-68)">
+</text><text class="breeze-help-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-help-line-69)">│</text><text class="breeze-help-r4" x="24.4" y="1703.6" textLength="280.6" clip-path="url(#breeze-help-line-69)">doctor&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1703.6" textLength="1110.2" clip-path="url(#breeze-help-line-69)">Auto-healing&#160;of&#160;breeze&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1703.6" textLength="12.2" clip-path="url(#breeze-help-line-69)">│</text><text class="breeze-help-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-help-line-69)">
+</text><text class="breeze-help-r5" x="0" y="1728" textLength="1464" clip-path="url(#breeze-help-line-70)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-help-line-70)">
+</text><text class="breeze-help-r5" x="0" y="1752.4" textLength="24.4" clip-path="url(#breeze-help-line-71)">╭─</text><text class="breeze-help-r5" x="24.4" y="1752.4" textLength="219.6" clip-path="url(#breeze-help-line-71)">&#160;Testing&#160;commands&#160;</text><text class="breeze-help-r5" x="244" y="1752.4" textLength="1195.6" clip-path="url(#breeze-help-line-71)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="1752.4" textLength="24.4" clip-path="url(#breeze-help-line-71)">─╮</text><text class="breeze-help-r1" x="1464" y="1752.4" textLength="12.2" clip-path="url(#breeze-help-line-71)">
+</text><text class="breeze-help-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-help-line-72)">│</text><text class="breeze-help-r4" x="24.4" y="1776.8" textLength="183" clip-path="url(#breeze-help-line-72)">testing&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="231.8" y="1776.8" textLength="1207.8" clip-path="url(#breeze-help-line-72)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;run&#160;tests&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1776.8" textLength="12.2" clip-path="url(#breeze-help-line-72)">│</text><text class="breeze-help-r1" x="1464" y="1776.8" textLength="12.2" clip-path="url(#breeze-help-line-72)">
+</text><text class="breeze-help-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-help-line-73)">│</text><text class="breeze-help-r4" x="24.4" y="1801.2" textLength="183" clip-path="url(#breeze-help-line-73)">k8s&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="231.8" y="1801.2" textLength="1207.8" clip-path="url(#breeze-help-line-73)">Tools&#160;that&#160;developers&#160;use&#160;to&#160;run&#160;Kubernetes&#160;tests&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1801.2" textLength="12.2" clip-path="url(#breeze-help-line-73)">│</text><text class="breeze-help-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-help-line-73)">
+</text><text class="breeze-help-r5" x="0" y="1825.6" textLength="1464" clip-path="url(#breeze-help-line-74)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-help-line-74)">
+</text><text class="breeze-help-r5" x="0" y="1850" textLength="24.4" clip-path="url(#breeze-help-line-75)">╭─</text><text class="breeze-help-r5" x="24.4" y="1850" textLength="195.2" clip-path="url(#breeze-help-line-75)">&#160;Image&#160;commands&#160;</text><text class="breeze-help-r5" x="219.6" y="1850" textLength="1220" clip-path="url(#breeze-help-line-75)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="1850" textLength="24.4" clip-path="url(#breeze-help-line-75)">─╮</text><text class="breeze-help-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-help-line-75)">
+</text><text class="breeze-help-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-help-line-76)">│</text><text class="breeze-help-r4" x="24.4" y="1874.4" textLength="207.4" clip-path="url(#breeze-help-line-76)">ci-image&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="256.2" y="1874.4" textLength="1183.4" clip-path="url(#breeze-help-line-76)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;manually&#160;manage&#160;CI&#160;images&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1874.4" textLength="12.2" clip-path="url(#breeze-help-line-76)">│</text><text class="breeze-help-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-help-line-76)">
+</text><text class="breeze-help-r5" x="0" y="1898.8" textLength="12.2" clip-path="url(#breeze-help-line-77)">│</text><text class="breeze-help-r4" x="24.4" y="1898.8" textLength="207.4" clip-path="url(#breeze-help-line-77)">prod-image&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="256.2" y="1898.8" textLength="1183.4" clip-path="url(#breeze-help-line-77)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;manually&#160;manage&#160;PROD&#160;images&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1898.8" textLength="12.2" clip-path="url(#breeze-help-line-77)">│</text><text class="breeze-help-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-help-line-77)">
+</text><text class="breeze-help-r5" x="0" y="1923.2" textLength="1464" clip-path="url(#breeze-help-line-78)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-help-line-78)">
+</text><text class="breeze-help-r5" x="0" y="1947.6" textLength="24.4" clip-path="url(#breeze-help-line-79)">╭─</text><text class="breeze-help-r5" x="24.4" y="1947.6" textLength="353.8" clip-path="url(#breeze-help-line-79)">&#160;Release&#160;management&#160;commands&#160;</text><text class="breeze-help-r5" x="378.2" y="1947.6" textLength="1061.4" clip-path="url(#breeze-help-line-79)">───────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="1947.6" textLength="24.4" clip-path="url(#breeze-help-line-79)">─╮</text><text class="breeze-help-r1" x="1464" y="1947.6" textLength="12.2" clip-path="url(#breeze-help-line-79)">
+</text><text class="breeze-help-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-help-line-80)">│</text><text class="breeze-help-r4" x="24.4" y="1972" textLength="280.6" clip-path="url(#breeze-help-line-80)">release-management&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1972" textLength="1110.2" clip-path="url(#breeze-help-line-80)">Tools&#160;that&#160;release&#160;managers&#160;can&#160;use&#160;to&#160;prepare&#160;and&#160;manage&#160;Airflow&#160;releases&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1972" textLength="12.2" clip-path="url(#breeze-help-line-80)">│</text><text class="breeze-help-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-help-line-80)">
+</text><text class="breeze-help-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-help-line-81)">│</text><text class="breeze-help-r4" x="24.4" y="1996.4" textLength="280.6" clip-path="url(#breeze-help-line-81)">sbom&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1996.4" textLength="1110.2" clip-path="url(#breeze-help-line-81)">Tools&#160;that&#160;release&#160;managers&#160;can&#160;use&#160;to&#160;prepare&#160;sbom&#160;information&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1996.4" textLength="12.2" clip-path="url(#breeze-help-line-81)">│</text><text class="breeze-help-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-help-line-81)">
+</text><text class="breeze-help-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-help-line-82)">│</text><text class="breeze-help-r4" x="24.4" y="2020.8" textLength="280.6" clip-path="url(#breeze-help-line-82)">workflow-run&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="2020.8" textLength="1110.2" clip-path="url(#breeze-help-line-82)">Tools&#160;to&#160;manage&#160;Airflow&#160;repository&#160;workflows&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="2020.8" textLength="12.2" clip-path="url(#breeze-help-line-82)">│</text><text class="breeze-help-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-help-line-82)">
+</text><text class="breeze-help-r5" x="0" y="2045.2" textLength="1464" clip-path="url(#breeze-help-line-83)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-help-line-83)">
+</text><text class="breeze-help-r5" x="0" y="2069.6" textLength="24.4" clip-path="url(#breeze-help-line-84)">╭─</text><text class="breeze-help-r5" x="24.4" y="2069.6" textLength="195.2" clip-path="url(#breeze-help-line-84)">&#160;Other&#160;commands&#160;</text><text class="breeze-help-r5" x="219.6" y="2069.6" textLength="1220" clip-path="url(#breeze-help-line-84)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="2069.6" textLength="24.4" clip-path="url(#breeze-help-line-84)">─╮</text><text class="breeze-help-r1" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-help-line-84)">
+</text><text class="breeze-help-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-help-line-85)">│</text><text class="breeze-help-r4" x="24.4" y="2094" textLength="122" clip-path="url(#breeze-help-line-85)">setup&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="170.8" y="2094" textLength="1268.8" clip-path="url(#breeze-help-line-85)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;configure&#160;Breeze&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="2094" textLength="12.2" clip-path="url(#breeze-help-line-85)">│</text><text class="breeze-help-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-help-line-85)">
+</text><text class="breeze-help-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-help-line-86)">│</text><text class="breeze-help-r4" x="24.4" y="2118.4" textLength="122" clip-path="url(#breeze-help-line-86)">ci&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="170.8" y="2118.4" textLength="1268.8" clip-path="url(#breeze-help-line-86)">Tools&#160;that&#160;CI&#160;workflows&#160;use&#160;to&#160;cleanup/manage&#160;CI&#160;environment&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="2118.4" textLength="12.2" clip-path="url(#breeze-help-line-86)">│</text><text class="breeze-help-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-help-line-86)">
+</text><text class="breeze-help-r5" x="0" y="2142.8" textLength="1464" clip-path="url(#breeze-help-line-87)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-help-line-87)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_run.svg b/dev/breeze/doc/images/output_run.svg
new file mode 100644
index 0000000000000..b672a174b29e0
--- /dev/null
+++ b/dev/breeze/doc/images/output_run.svg
@@ -0,0 +1,240 @@
+<svg class="rich-terminal" viewBox="0 0 1482 1148.0" xmlns="http://www.w3.org/2000/svg">
+    <!-- Generated with Rich https://www.textualize.io -->
+    <style>
+
+    @font-face {
+        font-family: "Fira Code";
+        src: local("FiraCode-Regular"),
+                url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
+                url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
+        font-style: normal;
+        font-weight: 400;
+    }
+    @font-face {
+        font-family: "Fira Code";
+        src: local("FiraCode-Bold"),
+                url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
+                url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
+        font-style: bold;
+        font-weight: 700;
+    }
+
+    .breeze-run-matrix {
+        font-family: Fira Code, monospace;
+        font-size: 20px;
+        line-height: 24.4px;
+        font-variant-east-asian: full-width;
+    }
+
+    .breeze-run-title {
+        font-size: 18px;
+        font-weight: bold;
+        font-family: arial;
+    }
+
+    .breeze-run-r1 { fill: #c5c8c6 }
+.breeze-run-r2 { fill: #d0b344 }
+.breeze-run-r3 { fill: #c5c8c6;font-weight: bold }
+.breeze-run-r4 { fill: #68a0b3;font-weight: bold }
+.breeze-run-r5 { fill: #868887 }
+.breeze-run-r6 { fill: #98a84b;font-weight: bold }
+.breeze-run-r7 { fill: #8d7b39 }
+    </style>
+
+    <defs>
+    <clipPath id="breeze-run-clip-terminal">
+      <rect x="0" y="0" width="1463.0" height="1097.0" />
+    </clipPath>
+    <clipPath id="breeze-run-line-0">
+    <rect x="0" y="1.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-1">
+    <rect x="0" y="25.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-2">
+    <rect x="0" y="50.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-3">
+    <rect x="0" y="74.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-4">
+    <rect x="0" y="99.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-5">
+    <rect x="0" y="123.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-6">
+    <rect x="0" y="147.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-7">
+    <rect x="0" y="172.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-8">
+    <rect x="0" y="196.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-9">
+    <rect x="0" y="221.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-10">
+    <rect x="0" y="245.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-11">
+    <rect x="0" y="269.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-12">
+    <rect x="0" y="294.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-13">
+    <rect x="0" y="318.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-14">
+    <rect x="0" y="343.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-15">
+    <rect x="0" y="367.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-16">
+    <rect x="0" y="391.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-17">
+    <rect x="0" y="416.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-18">
+    <rect x="0" y="440.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-19">
+    <rect x="0" y="465.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-20">
+    <rect x="0" y="489.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-21">
+    <rect x="0" y="513.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-22">
+    <rect x="0" y="538.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-23">
+    <rect x="0" y="562.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-24">
+    <rect x="0" y="587.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-25">
+    <rect x="0" y="611.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-26">
+    <rect x="0" y="635.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-27">
+    <rect x="0" y="660.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-28">
+    <rect x="0" y="684.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-29">
+    <rect x="0" y="709.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-30">
+    <rect x="0" y="733.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-31">
+    <rect x="0" y="757.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-32">
+    <rect x="0" y="782.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-33">
+    <rect x="0" y="806.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-34">
+    <rect x="0" y="831.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-35">
+    <rect x="0" y="855.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-36">
+    <rect x="0" y="879.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-37">
+    <rect x="0" y="904.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-38">
+    <rect x="0" y="928.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-39">
+    <rect x="0" y="953.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-40">
+    <rect x="0" y="977.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-41">
+    <rect x="0" y="1001.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-42">
+    <rect x="0" y="1026.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-43">
+    <rect x="0" y="1050.7" width="1464" height="24.65"/>
+            </clipPath>
+    </defs>
+
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1146" rx="8"/><text class="breeze-run-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;run</text>
+            <g transform="translate(26,22)">
+            <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
+            <circle cx="22" cy="0" r="7" fill="#febc2e"/>
+            <circle cx="44" cy="0" r="7" fill="#28c840"/>
+            </g>
+        
+    <g transform="translate(9, 41)" clip-path="url(#breeze-run-clip-terminal)">
+    
+    <g class="breeze-run-matrix">
+    <text class="breeze-run-r1" x="1464" y="20" textLength="12.2" clip-path="url(#breeze-run-line-0)">
+</text><text class="breeze-run-r2" x="12.2" y="44.4" textLength="73.2" clip-path="url(#breeze-run-line-1)">Usage:</text><text class="breeze-run-r3" x="97.6" y="44.4" textLength="122" clip-path="url(#breeze-run-line-1)">breeze&#160;run</text><text class="breeze-run-r1" x="231.8" y="44.4" textLength="12.2" clip-path="url(#breeze-run-line-1)">[</text><text class="breeze-run-r4" x="244" y="44.4" textLength="85.4" clip-path="url(#breeze-run-line-1)">OPTIONS</text><text class="breeze-run-r1" x="329.4" y="44.4" textLength="24.4" clip-path="url(#breeze-run-line-1)">]&#160;</text><text class="breeze-run-r4" x="353.8" y="44.4" textLength="85.4" clip-path="url(#breeze-run-line-1)">COMMAND</text><text class="breeze-run-r1" x="439.2" y="44.4" textLength="24.4" clip-path="url(#breeze-run-line-1)">&#160;[</text><text class="breeze-run-r4" x="463.6" y="44.4" textLength="146.4" clip-path="url(#breeze-run-line-1)">COMMAND_ARGS</text><text class="breeze-run-r1" x="610" y="44.4" textLength="48.8" clip-path="url(#breeze-run-line-1)">]...</text><text class="breeze-run-r1" x="1464" y="44.4" textLength="12.2" clip-path="url(#breeze-run-line-1)">
+</text><text class="breeze-run-r1" x="1464" y="68.8" textLength="12.2" clip-path="url(#breeze-run-line-2)">
+</text><text class="breeze-run-r1" x="12.2" y="93.2" textLength="963.8" clip-path="url(#breeze-run-line-3)">Run&#160;a&#160;command&#160;in&#160;the&#160;Breeze&#160;environment&#160;without&#160;entering&#160;the&#160;interactive&#160;shell.</text><text class="breeze-run-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-run-line-3)">
+</text><text class="breeze-run-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-run-line-4)">
+</text><text class="breeze-run-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-run-line-5)">╭─</text><text class="breeze-run-r5" x="24.4" y="142" textLength="231.8" clip-path="url(#breeze-run-line-5)">&#160;Command&#160;execution&#160;</text><text class="breeze-run-r5" x="256.2" y="142" textLength="1183.4" clip-path="url(#breeze-run-line-5)">─────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-run-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-run-line-5)">─╮</text><text class="breeze-run-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-run-line-5)">
+</text><text class="breeze-run-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-run-line-6)">│</text><text class="breeze-run-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-run-line-6)">--python</text><text class="breeze-run-r6" x="268.4" y="166.4" textLength="24.4" clip-path="url(#breeze-run-line-6)">-p</text><text class="breeze-run-r1" x="317.2" y="166.4" textLength="732" clip-path="url(#breeze-run-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-run-r7" x="1061.4" y="166.4" textLength="268.4" clip-path="url(#breeze-run-line-6)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-run-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-run-line-6)">│</text><text class="breeze-run-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-run-line-6)">
+</text><text class="breeze-run-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-run-line-7)">│</text><text class="breeze-run-r5" x="317.2" y="190.8" textLength="732" clip-path="url(#breeze-run-line-7)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-run-line-7)">│</text><text class="breeze-run-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-run-line-7)">
+</text><text class="breeze-run-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-run-line-8)">│</text><text class="breeze-run-r4" x="24.4" y="215.2" textLength="109.8" clip-path="url(#breeze-run-line-8)">--backend</text><text class="breeze-run-r6" x="268.4" y="215.2" textLength="24.4" clip-path="url(#breeze-run-line-8)">-b</text><text class="breeze-run-r1" x="317.2" y="215.2" textLength="1122.4" clip-path="url(#breeze-run-line-8)">Database&#160;backend&#160;to&#160;use.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;Breeze&#160;will&#160;start&#160;with&#160;an&#160;invalid&#160;database&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-run-line-8)">│</text><text class="breeze-run-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-run-line-8)">
+</text><text class="breeze-run-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-run-line-9)">│</text><text class="breeze-run-r1" x="317.2" y="239.6" textLength="1122.4" clip-path="url(#breeze-run-line-9)">configuration,&#160;meaning&#160;there&#160;will&#160;be&#160;no&#160;database&#160;available,&#160;and&#160;any&#160;attempts&#160;to&#160;connect&#160;to&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-run-line-9)">│</text><text class="breeze-run-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-run-line-9)">
+</text><text class="breeze-run-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-run-line-10)">│</text><text class="breeze-run-r1" x="317.2" y="264" textLength="1122.4" clip-path="url(#breeze-run-line-10)">the&#160;Airflow&#160;database&#160;will&#160;fail.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-run-line-10)">│</text><text class="breeze-run-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-run-line-10)">
+</text><text class="breeze-run-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-run-line-11)">│</text><text class="breeze-run-r7" x="317.2" y="288.4" textLength="1122.4" clip-path="url(#breeze-run-line-11)">(&gt;sqlite&lt;&#160;|&#160;mysql&#160;|&#160;postgres&#160;|&#160;none)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-run-line-11)">│</text><text class="breeze-run-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-run-line-11)">
+</text><text class="breeze-run-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-run-line-12)">│</text><text class="breeze-run-r5" x="317.2" y="312.8" textLength="1122.4" clip-path="url(#breeze-run-line-12)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-run-line-12)">│</text><text class="breeze-run-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-run-line-12)">
+</text><text class="breeze-run-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-run-line-13)">│</text><text class="breeze-run-r4" x="24.4" y="337.2" textLength="219.6" clip-path="url(#breeze-run-line-13)">--postgres-version</text><text class="breeze-run-r6" x="268.4" y="337.2" textLength="24.4" clip-path="url(#breeze-run-line-13)">-P</text><text class="breeze-run-r1" x="317.2" y="337.2" textLength="305" clip-path="url(#breeze-run-line-13)">Version&#160;of&#160;Postgres&#160;used.</text><text class="breeze-run-r7" x="634.4" y="337.2" textLength="317.2" clip-path="url(#breeze-run-line-13)">(&gt;13&lt;&#160;|&#160;14&#160;|&#160;15&#160;|&#160;16&#160;|&#160;17)</text><text class="breeze-run-r5" x="963.8" y="337.2" textLength="158.6" clip-path="url(#breeze-run-line-13)">[default:&#160;13]</text><text class="breeze-run-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-run-line-13)">│</text><text class="breeze-run-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-run-line-13)">
+</text><text class="breeze-run-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-run-line-14)">│</text><text class="breeze-run-r4" x="24.4" y="361.6" textLength="183" clip-path="url(#breeze-run-line-14)">--mysql-version</text><text class="breeze-run-r6" x="268.4" y="361.6" textLength="24.4" clip-path="url(#breeze-run-line-14)">-M</text><text class="breeze-run-r1" x="317.2" y="361.6" textLength="268.4" clip-path="url(#breeze-run-line-14)">Version&#160;of&#160;MySQL&#160;used.</text><text class="breeze-run-r7" x="597.8" y="361.6" textLength="158.6" clip-path="url(#breeze-run-line-14)">(&gt;8.0&lt;&#160;|&#160;8.4)</text><text class="breeze-run-r5" x="768.6" y="361.6" textLength="170.8" clip-path="url(#breeze-run-line-14)">[default:&#160;8.0]</text><text class="breeze-run-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-run-line-14)">│</text><text class="breeze-run-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-run-line-14)">
+</text><text class="breeze-run-r5" x="0" y="386" textLength="1464" clip-path="url(#breeze-run-line-15)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-run-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-run-line-15)">
+</text><text class="breeze-run-r5" x="0" y="410.4" textLength="24.4" clip-path="url(#breeze-run-line-16)">╭─</text><text class="breeze-run-r5" x="24.4" y="410.4" textLength="500.2" clip-path="url(#breeze-run-line-16)">&#160;Build&#160;CI&#160;image&#160;(before&#160;running&#160;command)&#160;</text><text class="breeze-run-r5" x="524.6" y="410.4" textLength="915" clip-path="url(#breeze-run-line-16)">───────────────────────────────────────────────────────────────────────────</text><text class="breeze-run-r5" x="1439.6" y="410.4" textLength="24.4" clip-path="url(#breeze-run-line-16)">─╮</text><text class="breeze-run-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-run-line-16)">
+</text><text class="breeze-run-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-run-line-17)">│</text><text class="breeze-run-r4" x="24.4" y="434.8" textLength="158.6" clip-path="url(#breeze-run-line-17)">--force-build</text><text class="breeze-run-r1" x="341.6" y="434.8" textLength="707.6" clip-path="url(#breeze-run-line-17)">Force&#160;image&#160;build&#160;no&#160;matter&#160;if&#160;it&#160;is&#160;determined&#160;as&#160;needed.</text><text class="breeze-run-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-run-line-17)">│</text><text class="breeze-run-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-run-line-17)">
+</text><text class="breeze-run-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-run-line-18)">│</text><text class="breeze-run-r4" x="24.4" y="459.2" textLength="122" clip-path="url(#breeze-run-line-18)">--platform</text><text class="breeze-run-r1" x="341.6" y="459.2" textLength="329.4" clip-path="url(#breeze-run-line-18)">Platform&#160;for&#160;Airflow&#160;image.</text><text class="breeze-run-r7" x="683.2" y="459.2" textLength="707.6" clip-path="url(#breeze-run-line-18)">(linux/amd64&#160;|&#160;linux/arm64&#160;|&#160;linux/x86_64&#160;|&#160;linux/aarch64)</text><text class="breeze-run-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-run-line-18)">│</text><text class="breeze-run-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-run-line-18)">
+</text><text class="breeze-run-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-run-line-19)">│</text><text class="breeze-run-r4" x="24.4" y="483.6" textLength="231.8" clip-path="url(#breeze-run-line-19)">--github-repository</text><text class="breeze-run-r6" x="292.8" y="483.6" textLength="24.4" clip-path="url(#breeze-run-line-19)">-g</text><text class="breeze-run-r1" x="341.6" y="483.6" textLength="585.6" clip-path="url(#breeze-run-line-19)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-run-r7" x="939.4" y="483.6" textLength="73.2" clip-path="url(#breeze-run-line-19)">(TEXT)</text><text class="breeze-run-r5" x="1024.8" y="483.6" textLength="305" clip-path="url(#breeze-run-line-19)">[default:&#160;apache/airflow]</text><text class="breeze-run-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-run-line-19)">│</text><text class="breeze-run-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-run-line-19)">
+</text><text class="breeze-run-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-run-line-20)">│</text><text class="breeze-run-r4" x="24.4" y="508" textLength="109.8" clip-path="url(#breeze-run-line-20)">--builder</text><text class="breeze-run-r1" x="341.6" y="508" textLength="756.4" clip-path="url(#breeze-run-line-20)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build`&#160;commands.</text><text class="breeze-run-r7" x="1110.2" y="508" textLength="73.2" clip-path="url(#breeze-run-line-20)">(TEXT)</text><text class="breeze-run-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-run-line-20)">│</text><text class="breeze-run-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-run-line-20)">
+</text><text class="breeze-run-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-run-line-21)">│</text><text class="breeze-run-r5" x="341.6" y="532.4" textLength="756.4" clip-path="url(#breeze-run-line-21)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-run-line-21)">│</text><text class="breeze-run-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-run-line-21)">
+</text><text class="breeze-run-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-run-line-22)">│</text><text class="breeze-run-r4" x="24.4" y="556.8" textLength="97.6" clip-path="url(#breeze-run-line-22)">--use-uv</text><text class="breeze-run-r1" x="122" y="556.8" textLength="12.2" clip-path="url(#breeze-run-line-22)">/</text><text class="breeze-run-r4" x="134.2" y="556.8" textLength="134.2" clip-path="url(#breeze-run-line-22)">--no-use-uv</text><text class="breeze-run-r1" x="341.6" y="556.8" textLength="719.8" clip-path="url(#breeze-run-line-22)">Use&#160;uv&#160;instead&#160;of&#160;pip&#160;as&#160;packaging&#160;tool&#160;to&#160;build&#160;the&#160;image.</text><text class="breeze-run-r5" x="1073.6" y="556.8" textLength="207.4" clip-path="url(#breeze-run-line-22)">[default:&#160;use-uv]</text><text class="breeze-run-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-run-line-22)">│</text><text class="breeze-run-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-run-line-22)">
+</text><text class="breeze-run-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-run-line-23)">│</text><text class="breeze-run-r4" x="24.4" y="581.2" textLength="207.4" clip-path="url(#breeze-run-line-23)">--uv-http-timeout</text><text class="breeze-run-r1" x="341.6" y="581.2" textLength="829.6" clip-path="url(#breeze-run-line-23)">Timeout&#160;for&#160;requests&#160;that&#160;UV&#160;makes&#160;(only&#160;used&#160;in&#160;case&#160;of&#160;UV&#160;builds).</text><text class="breeze-run-r7" x="1183.4" y="581.2" textLength="183" clip-path="url(#breeze-run-line-23)">(INTEGER&#160;RANGE)</text><text class="breeze-run-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-run-line-23)">│</text><text class="breeze-run-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-run-line-23)">
+</text><text class="breeze-run-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-run-line-24)">│</text><text class="breeze-run-r5" x="341.6" y="605.6" textLength="829.6" clip-path="url(#breeze-run-line-24)">[default:&#160;300;&#160;x&gt;=1]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-run-line-24)">│</text><text class="breeze-run-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-run-line-24)">
+</text><text class="breeze-run-r5" x="0" y="630" textLength="1464" clip-path="url(#breeze-run-line-25)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-run-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-run-line-25)">
+</text><text class="breeze-run-r5" x="0" y="654.4" textLength="24.4" clip-path="url(#breeze-run-line-26)">╭─</text><text class="breeze-run-r5" x="24.4" y="654.4" textLength="427" clip-path="url(#breeze-run-line-26)">&#160;Docker&#160;Compose&#160;project&#160;management&#160;</text><text class="breeze-run-r5" x="451.4" y="654.4" textLength="988.2" clip-path="url(#breeze-run-line-26)">─────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-run-r5" x="1439.6" y="654.4" textLength="24.4" clip-path="url(#breeze-run-line-26)">─╮</text><text class="breeze-run-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-run-line-26)">
+</text><text class="breeze-run-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-run-line-27)">│</text><text class="breeze-run-r4" x="24.4" y="678.8" textLength="170.8" clip-path="url(#breeze-run-line-27)">--project-name</text><text class="breeze-run-r1" x="244" y="678.8" textLength="1195.6" clip-path="url(#breeze-run-line-27)">Name&#160;of&#160;the&#160;docker-compose&#160;project&#160;to&#160;bring&#160;down.&#160;The&#160;`docker-compose`&#160;is&#160;for&#160;legacy&#160;breeze&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#breeze-run-line-27)">│</text><text class="breeze-run-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-run-line-27)">
+</text><text class="breeze-run-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-run-line-28)">│</text><text class="breeze-run-r1" x="244" y="703.2" textLength="512.4" clip-path="url(#breeze-run-line-28)">project&#160;name&#160;and&#160;you&#160;can&#160;use&#160;`breeze&#160;down&#160;</text><text class="breeze-run-r4" x="756.4" y="703.2" textLength="170.8" clip-path="url(#breeze-run-line-28)">--project-name</text><text class="breeze-run-r1" x="927.2" y="703.2" textLength="512.4" clip-path="url(#breeze-run-line-28)">&#160;docker-compose`&#160;to&#160;stop&#160;all&#160;containers&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-run-line-28)">│</text><text class="breeze-run-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-run-line-28)">
+</text><text class="breeze-run-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-run-line-29)">│</text><text class="breeze-run-r1" x="244" y="727.6" textLength="1195.6" clip-path="url(#breeze-run-line-29)">belonging&#160;to&#160;it.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-run-line-29)">│</text><text class="breeze-run-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-run-line-29)">
+</text><text class="breeze-run-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-run-line-30)">│</text><text class="breeze-run-r7" x="244" y="752" textLength="1195.6" clip-path="url(#breeze-run-line-30)">(breeze&#160;|&#160;pre-commit&#160;|&#160;docker-compose)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-run-line-30)">│</text><text class="breeze-run-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-run-line-30)">
+</text><text class="breeze-run-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-run-line-31)">│</text><text class="breeze-run-r5" x="244" y="776.4" textLength="1195.6" clip-path="url(#breeze-run-line-31)">[default:&#160;breeze]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-run-line-31)">│</text><text class="breeze-run-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-run-line-31)">
+</text><text class="breeze-run-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-run-line-32)">│</text><text class="breeze-run-r4" x="24.4" y="800.8" textLength="158.6" clip-path="url(#breeze-run-line-32)">--docker-host</text><text class="breeze-run-r1" x="244" y="800.8" textLength="915" clip-path="url(#breeze-run-line-32)">Optional&#160;-&#160;docker&#160;host&#160;to&#160;use&#160;when&#160;running&#160;docker&#160;commands.&#160;When&#160;set,&#160;the&#160;`</text><text class="breeze-run-r4" x="1159" y="800.8" textLength="109.8" clip-path="url(#breeze-run-line-32)">--builder</text><text class="breeze-run-r1" x="1268.8" y="800.8" textLength="170.8" clip-path="url(#breeze-run-line-32)">`&#160;option&#160;is&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-run-line-32)">│</text><text class="breeze-run-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-run-line-32)">
+</text><text class="breeze-run-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-run-line-33)">│</text><text class="breeze-run-r1" x="244" y="825.2" textLength="1195.6" clip-path="url(#breeze-run-line-33)">ignored&#160;when&#160;building&#160;images.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-run-line-33)">│</text><text class="breeze-run-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-run-line-33)">
+</text><text class="breeze-run-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-run-line-34)">│</text><text class="breeze-run-r7" x="244" y="849.6" textLength="1195.6" clip-path="url(#breeze-run-line-34)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-run-line-34)">│</text><text class="breeze-run-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-run-line-34)">
+</text><text class="breeze-run-r5" x="0" y="874" textLength="1464" clip-path="url(#breeze-run-line-35)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-run-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-run-line-35)">
+</text><text class="breeze-run-r5" x="0" y="898.4" textLength="24.4" clip-path="url(#breeze-run-line-36)">╭─</text><text class="breeze-run-r5" x="24.4" y="898.4" textLength="183" clip-path="url(#breeze-run-line-36)">&#160;Other&#160;options&#160;</text><text class="breeze-run-r5" x="207.4" y="898.4" textLength="1232.2" clip-path="url(#breeze-run-line-36)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-run-r5" x="1439.6" y="898.4" textLength="24.4" clip-path="url(#breeze-run-line-36)">─╮</text><text class="breeze-run-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-run-line-36)">
+</text><text class="breeze-run-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-run-line-37)">│</text><text class="breeze-run-r4" x="24.4" y="922.8" textLength="256.2" clip-path="url(#breeze-run-line-37)">--forward-credentials</text><text class="breeze-run-r6" x="366" y="922.8" textLength="24.4" clip-path="url(#breeze-run-line-37)">-f</text><text class="breeze-run-r1" x="414.8" y="922.8" textLength="634.4" clip-path="url(#breeze-run-line-37)">Forward&#160;local&#160;credentials&#160;to&#160;container&#160;when&#160;running.</text><text class="breeze-run-r5" x="1451.8" y="922.8" textLength="12.2" clip-path="url(#breeze-run-line-37)">│</text><text class="breeze-run-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-run-line-37)">
+</text><text class="breeze-run-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-run-line-38)">│</text><text class="breeze-run-r4" x="24.4" y="947.2" textLength="317.2" clip-path="url(#breeze-run-line-38)">--skip-image-upgrade-check</text><text class="breeze-run-r1" x="414.8" y="947.2" textLength="536.8" clip-path="url(#breeze-run-line-38)">Skip&#160;checking&#160;if&#160;the&#160;CI&#160;image&#160;is&#160;up&#160;to&#160;date.</text><text class="breeze-run-r5" x="1451.8" y="947.2" textLength="12.2" clip-path="url(#breeze-run-line-38)">│</text><text class="breeze-run-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-run-line-38)">
+</text><text class="breeze-run-r5" x="0" y="971.6" textLength="1464" clip-path="url(#breeze-run-line-39)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-run-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-run-line-39)">
+</text><text class="breeze-run-r5" x="0" y="996" textLength="24.4" clip-path="url(#breeze-run-line-40)">╭─</text><text class="breeze-run-r5" x="24.4" y="996" textLength="195.2" clip-path="url(#breeze-run-line-40)">&#160;Common&#160;options&#160;</text><text class="breeze-run-r5" x="219.6" y="996" textLength="1220" clip-path="url(#breeze-run-line-40)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-run-r5" x="1439.6" y="996" textLength="24.4" clip-path="url(#breeze-run-line-40)">─╮</text><text class="breeze-run-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-run-line-40)">
+</text><text class="breeze-run-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-run-line-41)">│</text><text class="breeze-run-r4" x="24.4" y="1020.4" textLength="109.8" clip-path="url(#breeze-run-line-41)">--dry-run</text><text class="breeze-run-r6" x="158.6" y="1020.4" textLength="24.4" clip-path="url(#breeze-run-line-41)">-D</text><text class="breeze-run-r1" x="207.4" y="1020.4" textLength="719.8" clip-path="url(#breeze-run-line-41)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-run-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-run-line-41)">│</text><text class="breeze-run-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-run-line-41)">
+</text><text class="breeze-run-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-run-line-42)">│</text><text class="breeze-run-r4" x="24.4" y="1044.8" textLength="109.8" clip-path="url(#breeze-run-line-42)">--verbose</text><text class="breeze-run-r6" x="158.6" y="1044.8" textLength="24.4" clip-path="url(#breeze-run-line-42)">-v</text><text class="breeze-run-r1" x="207.4" y="1044.8" textLength="585.6" clip-path="url(#breeze-run-line-42)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-run-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-run-line-42)">│</text><text class="breeze-run-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-run-line-42)">
+</text><text class="breeze-run-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-run-line-43)">│</text><text class="breeze-run-r4" x="24.4" y="1069.2" textLength="73.2" clip-path="url(#breeze-run-line-43)">--help</text><text class="breeze-run-r6" x="158.6" y="1069.2" textLength="24.4" clip-path="url(#breeze-run-line-43)">-h</text><text class="breeze-run-r1" x="207.4" y="1069.2" textLength="329.4" clip-path="url(#breeze-run-line-43)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-run-r5" x="1451.8" y="1069.2" textLength="12.2" clip-path="url(#breeze-run-line-43)">│</text><text class="breeze-run-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-run-line-43)">
+</text><text class="breeze-run-r5" x="0" y="1093.6" textLength="1464" clip-path="url(#breeze-run-line-44)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-run-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-run-line-44)">
+</text>
+    </g>
+    </g>
+</svg>
diff --git a/dev/breeze/doc/images/output_run.txt b/dev/breeze/doc/images/output_run.txt
new file mode 100644
index 0000000000000..53c445f3e151b
--- /dev/null
+++ b/dev/breeze/doc/images/output_run.txt
@@ -0,0 +1 @@
+820a829e6ae777a8625862d010f8e693
diff --git a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.svg b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.svg
index dd7f6cd19f2a2..0603451c7d5cb 100644
--- a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.svg
+++ b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.svg
@@ -208,7 +208,7 @@
 </text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-25)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="630" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-25)">release-management:publish-docs-to-s3&#160;|&#160;release-management:release-prod-images&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-check-all-params-in-groups-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-25)">│</text><text class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-25)">
 </text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-26)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="654.4" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-26)">release-management:start-rc-process&#160;|&#160;release-management:start-release&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-check-all-params-in-groups-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-26)">│</text><text class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-26)">
 </text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-27)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="678.8" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-27)">release-management:tag-providers&#160;|&#160;release-management:update-constraints&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-check-all-params-in-groups-r5" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-27)">│</text><text class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-27)">
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-28)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="703.2" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-28)">release-management:verify-provider-distributions&#160;|&#160;sbom&#160;|&#160;sbom:build-all-airflow-images&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-check-all-params-in-groups-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-28)">│</text><text class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-28)">
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-28)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="703.2" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-28)">release-management:verify-provider-distributions&#160;|&#160;run&#160;|&#160;sbom&#160;|&#160;sbom:build-all-airflow-images&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-check-all-params-in-groups-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-28)">│</text><text class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-28)">
 </text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-29)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="727.6" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-29)">sbom:export-dependency-information&#160;|&#160;sbom:generate-providers-requirements&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-check-all-params-in-groups-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-29)">│</text><text class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-29)">
 </text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-30)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="752" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-30)">sbom:update-sbom-information&#160;|&#160;setup&#160;|&#160;setup:autocomplete&#160;|&#160;setup:check-all-params-in-groups&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-check-all-params-in-groups-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-30)">│</text><text class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-30)">
 </text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-31)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="776.4" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-31)">setup:config&#160;|&#160;setup:regenerate-command-images&#160;|&#160;setup:self-upgrade&#160;|&#160;setup:synchronize-local-mounts&#160;|&#160;</text><text class="breeze-setup-check-all-params-in-groups-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-31)">│</text><text class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-31)">
diff --git a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
index c712a698cd5b1..6afbc1c4b9a5e 100644
--- a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
+++ b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
@@ -1 +1 @@
-990975cc123e19cc0e094e129dcac59b
+b1c66655acd75f4f7c65b2d35552f54e
diff --git a/dev/breeze/doc/images/output_setup_regenerate-command-images.svg b/dev/breeze/doc/images/output_setup_regenerate-command-images.svg
index 9304f343dbc58..9134575003316 100644
--- a/dev/breeze/doc/images/output_setup_regenerate-command-images.svg
+++ b/dev/breeze/doc/images/output_setup_regenerate-command-images.svg
@@ -229,7 +229,7 @@
 </text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-28)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="703.2" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-28)">release-management:publish-docs-to-s3&#160;|&#160;release-management:release-prod-images&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-regenerate-command-images-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-28)">│</text><text class="breeze-setup-regenerate-command-images-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-28)">
 </text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-29)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="727.6" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-29)">release-management:start-rc-process&#160;|&#160;release-management:start-release&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-regenerate-command-images-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-29)">│</text><text class="breeze-setup-regenerate-command-images-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-29)">
 </text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-30)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="752" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-30)">release-management:tag-providers&#160;|&#160;release-management:update-constraints&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-regenerate-command-images-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-30)">│</text><text class="breeze-setup-regenerate-command-images-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-30)">
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-31)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="776.4" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-31)">release-management:verify-provider-distributions&#160;|&#160;sbom&#160;|&#160;sbom:build-all-airflow-images&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-regenerate-command-images-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-31)">│</text><text class="breeze-setup-regenerate-command-images-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-31)">
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-31)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="776.4" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-31)">release-management:verify-provider-distributions&#160;|&#160;run&#160;|&#160;sbom&#160;|&#160;sbom:build-all-airflow-images&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-regenerate-command-images-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-31)">│</text><text class="breeze-setup-regenerate-command-images-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-31)">
 </text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-32)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="800.8" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-32)">sbom:export-dependency-information&#160;|&#160;sbom:generate-providers-requirements&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-regenerate-command-images-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-32)">│</text><text class="breeze-setup-regenerate-command-images-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-32)">
 </text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-33)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="825.2" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-33)">sbom:update-sbom-information&#160;|&#160;setup&#160;|&#160;setup:autocomplete&#160;|&#160;setup:check-all-params-in-groups&#160;|&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-regenerate-command-images-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-33)">│</text><text class="breeze-setup-regenerate-command-images-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-33)">
 </text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-34)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="849.6" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-34)">setup:config&#160;|&#160;setup:regenerate-command-images&#160;|&#160;setup:self-upgrade&#160;|&#160;setup:synchronize-local-mounts</text><text class="breeze-setup-regenerate-command-images-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-34)">│</text><text class="breeze-setup-regenerate-command-images-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-34)">
diff --git a/dev/breeze/doc/images/output_setup_regenerate-command-images.txt b/dev/breeze/doc/images/output_setup_regenerate-command-images.txt
index 4fd763c19df69..e1261a2289751 100644
--- a/dev/breeze/doc/images/output_setup_regenerate-command-images.txt
+++ b/dev/breeze/doc/images/output_setup_regenerate-command-images.txt
@@ -1 +1 @@
-dd551b481de86089ffc562db65a88f2c
+d112f32bf3ac63a45cafb3cd1248d728
diff --git a/dev/breeze/src/airflow_breeze/commands/developer_commands.py b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
index e4f032108fd10..0a6ad96790971 100644
--- a/dev/breeze/src/airflow_breeze/commands/developer_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
@@ -1075,6 +1075,9 @@ def exec(exec_args: tuple):
         if not process:
             sys.exit(1)
         sys.exit(process.returncode)
+    else:
+        get_console().print("[error]No airflow containers are running[/]")
+        sys.exit(1)
 
 
 def stop_exec_on_error(returncode: int):
@@ -1197,3 +1200,137 @@ def doctor(ctx):
         ctx.forward(cleanup)
     elif given_answer == Answer.QUIT:
         sys.exit(0)
+
+
+@main.command(
+    name="run",
+    help="Run a command in the Breeze environment without entering the interactive shell.",
+    context_settings={"ignore_unknown_options": True, "allow_extra_args": True},
+)
+@click.argument("command", required=True)
+@click.argument("command_args", nargs=-1, type=click.UNPROCESSED)
+@option_backend
+@option_builder
+@option_docker_host
+@option_dry_run
+@option_force_build
+@option_forward_credentials
+@option_github_repository
+@option_mysql_version
+@option_platform_single
+@option_postgres_version
+@option_project_name
+@option_python
+@option_skip_image_upgrade_check
+@option_use_uv
+@option_uv_http_timeout
+@option_verbose
+def run(
+    command: str,
+    command_args: tuple,
+    backend: str,
+    builder: str,
+    docker_host: str | None,
+    force_build: bool,
+    forward_credentials: bool,
+    github_repository: str,
+    mysql_version: str,
+    platform: str | None,
+    postgres_version: str,
+    project_name: str,
+    python: str,
+    skip_image_upgrade_check: bool,
+    use_uv: bool,
+    uv_http_timeout: int,
+):
+    """
+    Run a command in the Breeze environment without entering the interactive shell.
+
+    This is useful for automated testing, CI workflows, and one-off command execution.
+    The command will be executed in a fresh container that is automatically cleaned up.
+    Each run uses a unique project name to avoid conflicts with other instances.
+
+    Examples:
+        # Run a specific test
+        breeze run pytest providers/google/tests/unit/google/cloud/operators/test_dataflow.py -v
+
+        # Check version compatibility
+        breeze run python -c "from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS; print(AIRFLOW_V_3_0_PLUS)"
+
+        # Run bash commands
+        breeze run bash -c "cd /opt/airflow && python -m pytest providers/google/tests/"
+
+        # Run with different Python version
+        breeze run --python 3.11 pytest providers/standard/tests/unit/operators/test_bash.py
+
+        # Run with PostgreSQL backend
+        breeze run --backend postgres pytest providers/postgres/tests/
+    """
+    import uuid
+
+    from airflow_breeze.commands.ci_image_commands import rebuild_or_pull_ci_image_if_needed
+    from airflow_breeze.params.shell_params import ShellParams
+    from airflow_breeze.utils.ci_group import ci_group
+    from airflow_breeze.utils.docker_command_utils import execute_command_in_shell
+    from airflow_breeze.utils.platforms import get_normalized_platform
+
+    # Generate a unique project name to avoid conflicts with other running instances
+    unique_project_name = f"{project_name}-run-{uuid.uuid4().hex[:8]}"
+
+    # Build the full command string with proper escaping
+    import shlex
+
+    if command_args:
+        # Use shlex.join to properly escape arguments
+        full_command = f"{command} {shlex.join(command_args)}"
+    else:
+        full_command = command
+
+    platform = get_normalized_platform(platform)
+
+    # Create shell parameters optimized for non-interactive command execution
+    shell_params = ShellParams(
+        backend=backend,
+        builder=builder,
+        docker_host=docker_host,
+        force_build=force_build,
+        forward_credentials=forward_credentials,
+        github_repository=github_repository,
+        mysql_version=mysql_version,
+        platform=platform,
+        postgres_version=postgres_version,
+        project_name=unique_project_name,
+        python=python,
+        skip_image_upgrade_check=skip_image_upgrade_check,
+        use_uv=use_uv,
+        uv_http_timeout=uv_http_timeout,
+        # Optimizations for non-interactive execution
+        quiet=True,
+        skip_environment_initialization=True,
+        tty="disabled",
+        # Set extra_args to empty tuple since we'll pass the command directly
+        extra_args=(),
+    )
+
+    if get_verbose():
+        get_console().print(f"[info]Running command in Breeze: {full_command}[/]")
+        get_console().print(f"[info]Using project name: {unique_project_name}[/]")
+
+    # Build or pull the CI image if needed
+    rebuild_or_pull_ci_image_if_needed(command_params=shell_params)
+
+    # Execute the command in the shell
+    with ci_group(f"Running command: {command}"):
+        result = execute_command_in_shell(
+            shell_params=shell_params,
+            project_name=unique_project_name,
+            command=full_command,
+        )
+
+    # Clean up ownership
+    from airflow_breeze.utils.docker_command_utils import fix_ownership_using_docker
+
+    fix_ownership_using_docker()
+
+    # Exit with the same code as the command
+    sys.exit(result.returncode)
diff --git a/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py b/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py
index bb5e449d03837..eae6e0cb862cc 100644
--- a/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py
@@ -25,6 +25,7 @@
         "down",
         "shell",
         "exec",
+        "run",
         "compile-ui-assets",
         "cleanup",
         "generate-migration-file",
@@ -295,6 +296,42 @@
     "breeze exec": [
         {"name": "Drops in the interactive shell of active airflow container"},
     ],
+    "breeze run": [
+        {
+            "name": "Command execution",
+            "options": [
+                "--python",
+                "--backend",
+                "--postgres-version",
+                "--mysql-version",
+            ],
+        },
+        {
+            "name": "Build CI image (before running command)",
+            "options": [
+                "--force-build",
+                "--platform",
+                "--github-repository",
+                "--builder",
+                "--use-uv",
+                "--uv-http-timeout",
+            ],
+        },
+        {
+            "name": "Docker Compose project management",
+            "options": [
+                "--project-name",
+                "--docker-host",
+            ],
+        },
+        {
+            "name": "Other options",
+            "options": [
+                "--forward-credentials",
+                "--skip-image-upgrade-check",
+            ],
+        },
+    ],
     "breeze down": [
         {
             "name": "Down flags",
diff --git a/dev/breeze/src/airflow_breeze/commands/setup_commands.py b/dev/breeze/src/airflow_breeze/commands/setup_commands.py
index 1429a6b13f458..6895452900732 100644
--- a/dev/breeze/src/airflow_breeze/commands/setup_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/setup_commands.py
@@ -562,6 +562,7 @@ def regenerate_help_images_for_all_commands(commands: tuple[str, ...], check_onl
     "down",
     "exec",
     "shell",
+    "run",
     "compile-ui-assets",
     "cleanup",
     "generate-migration-file",

From 713ddaa6de890908b29e736f1239a7a822e8d26b Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Sat, 28 Jun 2025 04:55:32 +0530
Subject: [PATCH 246/381] Bump ``uv`` to ``0.7.16`` (#52372)

`0.7.16` was just released.
---
 .github/actions/install-pre-commit/action.yml                   | 2 +-
 .github/workflows/ci-amd.yml                                    | 2 +-
 Dockerfile                                                      | 2 +-
 Dockerfile.ci                                                   | 2 +-
 dev/breeze/doc/ci/02_images.md                                  | 2 +-
 .../src/airflow_breeze/commands/release_management_commands.py  | 2 +-
 dev/breeze/src/airflow_breeze/global_constants.py               | 2 +-
 pyproject.toml                                                  | 2 +-
 scripts/ci/install_breeze.sh                                    | 2 +-
 scripts/tools/setup_breeze                                      | 2 +-
 10 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/.github/actions/install-pre-commit/action.yml b/.github/actions/install-pre-commit/action.yml
index e053e8e90571c..9f4b091fddcea 100644
--- a/.github/actions/install-pre-commit/action.yml
+++ b/.github/actions/install-pre-commit/action.yml
@@ -24,7 +24,7 @@ inputs:
     default: "3.9"
   uv-version:
     description: 'uv version to use'
-    default: "0.7.14"  # Keep this comment to allow automatic replacement of uv version
+    default: "0.7.16"  # Keep this comment to allow automatic replacement of uv version
   pre-commit-version:
     description: 'pre-commit version to use'
     default: "4.2.0"  # Keep this comment to allow automatic replacement of pre-commit version
diff --git a/.github/workflows/ci-amd.yml b/.github/workflows/ci-amd.yml
index 67489683d9538..e9cea64578e12 100644
--- a/.github/workflows/ci-amd.yml
+++ b/.github/workflows/ci-amd.yml
@@ -186,7 +186,7 @@ jobs:
       - name: Install pre-commit, uv, and pre-commit-uv
         shell: bash
         env:
-          UV_VERSION: "0.7.14"  # Keep this comment to allow automatic replacement of uv version
+          UV_VERSION: "0.7.16"  # Keep this comment to allow automatic replacement of uv version
           PRE_COMMIT_VERSION: "4.2.0"  # Keep this comment to allow automatic replacement of pre-commit version
           PRE_COMMIT_UV_VERSION: "4.1.4"  # Keep this comment to allow automatic replacement of pre-commit-uv version
         run: |
diff --git a/Dockerfile b/Dockerfile
index 2336543d42fab..d06b263c79dfa 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -57,7 +57,7 @@ ARG PYTHON_BASE_IMAGE="python:3.10-slim-bookworm"
 ARG AIRFLOW_PIP_VERSION=25.1.1
 # ARG AIRFLOW_PIP_VERSION="git+https://github.com/pypa/pip.git@main"
 ARG AIRFLOW_SETUPTOOLS_VERSION=80.9.0
-ARG AIRFLOW_UV_VERSION=0.7.14
+ARG AIRFLOW_UV_VERSION=0.7.16
 ARG AIRFLOW_USE_UV="false"
 ARG UV_HTTP_TIMEOUT="300"
 ARG AIRFLOW_IMAGE_REPOSITORY="https://github.com/apache/airflow"
diff --git a/Dockerfile.ci b/Dockerfile.ci
index e9057ce19736e..766305fb0e6f9 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -1389,7 +1389,7 @@ COPY --from=scripts common.sh install_packaging_tools.sh install_additional_depe
 ARG AIRFLOW_PIP_VERSION=25.1.1
 # ARG AIRFLOW_PIP_VERSION="git+https://github.com/pypa/pip.git@main"
 ARG AIRFLOW_SETUPTOOLS_VERSION=80.9.0
-ARG AIRFLOW_UV_VERSION=0.7.14
+ARG AIRFLOW_UV_VERSION=0.7.16
 # TODO(potiuk): automate with upgrade check (possibly)
 ARG AIRFLOW_PRE_COMMIT_VERSION="4.2.0"
 ARG AIRFLOW_PRE_COMMIT_UV_VERSION="4.1.4"
diff --git a/dev/breeze/doc/ci/02_images.md b/dev/breeze/doc/ci/02_images.md
index 52fa5cacf83ea..00007ded26e71 100644
--- a/dev/breeze/doc/ci/02_images.md
+++ b/dev/breeze/doc/ci/02_images.md
@@ -443,7 +443,7 @@ can be used for CI images:
 | `ADDITIONAL_DEV_APT_DEPS`         |                            | Additional apt dev dependencies installed in the first part of the image                                          |
 | `ADDITIONAL_DEV_APT_ENV`          |                            | Additional env variables defined when installing dev deps                                                         |
 | `AIRFLOW_PIP_VERSION`             | `25.1.1`                   | `pip` version used.                                                                                               |
-| `AIRFLOW_UV_VERSION`              | `0.7.14`                   | `uv` version used.                                                                                                |
+| `AIRFLOW_UV_VERSION`              | `0.7.16`                   | `uv` version used.                                                                                                |
 | `AIRFLOW_PRE_COMMIT_VERSION`      | `4.2.0`                    | `pre-commit` version used.                                                                                        |
 | `AIRFLOW_PRE_COMMIT_UV_VERSION`   | `4.1.4`                    | `pre-commit-uv` version used.                                                                                     |
 | `AIRFLOW_USE_UV`                  | `true`                     | Whether to use UV for installation.                                                                               |
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index 9ab6bb4ce9fc6..9474cce67b50f 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -241,7 +241,7 @@ class VersionedFile(NamedTuple):
 
 
 AIRFLOW_PIP_VERSION = "25.1.1"
-AIRFLOW_UV_VERSION = "0.7.14"
+AIRFLOW_UV_VERSION = "0.7.16"
 AIRFLOW_USE_UV = False
 # TODO(potiuk): automate upgrades of these versions (likely via requirements.txt file)
 GITPYTHON_VERSION = "3.1.44"
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py b/dev/breeze/src/airflow_breeze/global_constants.py
index 184c508f6e0f8..b2a381c854d77 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -194,7 +194,7 @@
 ALLOWED_INSTALL_MYSQL_CLIENT_TYPES = ["mariadb", "mysql"]
 
 PIP_VERSION = "25.1.1"
-UV_VERSION = "0.7.14"
+UV_VERSION = "0.7.16"
 
 DEFAULT_UV_HTTP_TIMEOUT = 300
 DEFAULT_WSL2_HTTP_TIMEOUT = 900
diff --git a/pyproject.toml b/pyproject.toml
index 689b2dd788545..b23a2851b5310 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -528,7 +528,7 @@ packages = []
     "apache-airflow-providers-amazon[s3fs]",
 ]
 "uv" = [
-    "uv>=0.7.14",
+    "uv>=0.7.16",
 ]
 
 
diff --git a/scripts/ci/install_breeze.sh b/scripts/ci/install_breeze.sh
index d2ef488d1cca1..1743f549be8f6 100755
--- a/scripts/ci/install_breeze.sh
+++ b/scripts/ci/install_breeze.sh
@@ -22,7 +22,7 @@ cd "$( dirname "${BASH_SOURCE[0]}" )/../../"
 PYTHON_ARG=""
 
 PIP_VERSION="25.1.1"
-UV_VERSION="0.7.14"
+UV_VERSION="0.7.16"
 if [[ ${PYTHON_VERSION=} != "" ]]; then
     PYTHON_ARG="--python=$(which python"${PYTHON_VERSION}") "
 fi
diff --git a/scripts/tools/setup_breeze b/scripts/tools/setup_breeze
index e132a50f70dea..bb795c4672356 100755
--- a/scripts/tools/setup_breeze
+++ b/scripts/tools/setup_breeze
@@ -27,7 +27,7 @@ COLOR_YELLOW=$'\e[33m'
 COLOR_BLUE=$'\e[34m'
 COLOR_RESET=$'\e[0m'
 
-UV_VERSION="0.7.14"
+UV_VERSION="0.7.16"
 
 function manual_instructions() {
     echo

From 0a95c3327af8e7971b1b0b0ce206ab59e2630b40 Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Sat, 28 Jun 2025 05:33:03 +0530
Subject: [PATCH 247/381] Replace `models.BaseOperator` to Task SDK one for
 Google Provider (#52366)

Follow-up of https://github.com/apache/airflow/pull/52292 for Google provider.
---
 .../providers/google/ads/operators/ads.py     |  2 +-
 .../google/ads/transfers/ads_to_gcs.py        |  2 +-
 .../providers/google/cloud/links/base.py      | 21 +++--
 .../providers/google/cloud/links/dataproc.py  | 28 +++---
 .../google/cloud/operators/automl.py          |  7 +-
 .../google/cloud/operators/bigquery_dts.py    |  4 +-
 .../google/cloud/operators/cloud_base.py      |  2 +-
 .../google/cloud/operators/cloud_build.py     | 12 +--
 .../google/cloud/operators/datacatalog.py     | 10 +-
 .../google/cloud/operators/dataflow.py        | 14 +--
 .../google/cloud/operators/dataplex.py        | 15 +--
 .../google/cloud/operators/dataproc.py        |  6 +-
 .../cloud/operators/dataproc_metastore.py     |  2 +-
 .../google/cloud/operators/functions.py       |  2 +-
 .../google/cloud/operators/managed_kafka.py   |  9 +-
 .../google/cloud/operators/translate.py       |  6 +-
 .../cloud/operators/vertex_ai/auto_ml.py      | 16 ++--
 .../vertex_ai/batch_prediction_job.py         |  8 +-
 .../cloud/operators/vertex_ai/custom_job.py   | 28 +++---
 .../cloud/operators/vertex_ai/dataset.py      |  2 +-
 .../operators/vertex_ai/endpoint_service.py   |  4 +-
 .../operators/vertex_ai/generative_model.py   | 12 +--
 .../vertex_ai/hyperparameter_tuning_job.py    |  2 +-
 .../operators/vertex_ai/model_service.py      |  4 +-
 .../cloud/operators/vertex_ai/pipeline_job.py |  2 +-
 .../google/cloud/operators/vertex_ai/ray.py   |  3 +-
 .../google/cloud/operators/workflows.py       |  2 +-
 .../google/cloud/sensors/bigquery.py          |  7 +-
 .../google/cloud/sensors/dataflow.py          |  7 +-
 .../cloud/transfers/azure_blob_to_gcs.py      |  2 +-
 .../cloud/transfers/azure_fileshare_to_gcs.py |  2 +-
 .../cloud/transfers/bigquery_to_bigquery.py   |  2 +-
 .../google/cloud/transfers/bigquery_to_gcs.py |  2 +-
 .../google/cloud/transfers/bigquery_to_sql.py |  2 +-
 .../google/cloud/transfers/calendar_to_gcs.py |  2 +-
 .../cloud/transfers/cassandra_to_gcs.py       |  2 +-
 .../cloud/transfers/facebook_ads_to_gcs.py    |  2 +-
 .../google/cloud/transfers/gcs_to_bigquery.py |  2 +-
 .../google/cloud/transfers/gcs_to_gcs.py      |  2 +-
 .../google/cloud/transfers/gcs_to_local.py    |  2 +-
 .../google/cloud/transfers/gcs_to_sftp.py     |  2 +-
 .../google/cloud/transfers/gdrive_to_gcs.py   |  6 +-
 .../google/cloud/transfers/gdrive_to_local.py |  2 +-
 .../google/cloud/transfers/http_to_gcs.py     |  2 +-
 .../google/cloud/transfers/local_to_gcs.py    |  2 +-
 .../cloud/transfers/salesforce_to_gcs.py      |  2 +-
 .../google/cloud/transfers/sftp_to_gcs.py     |  2 +-
 .../google/cloud/transfers/sheets_to_gcs.py   |  4 +-
 .../google/cloud/transfers/sql_to_gcs.py      |  2 +-
 .../google/firebase/operators/firestore.py    |  2 +-
 .../google/leveldb/operators/leveldb.py       |  2 +-
 .../links/analytics_admin.py                  |  9 +-
 .../operators/analytics_admin.py              |  1 -
 .../operators/campaign_manager.py             |  8 +-
 .../operators/display_video.py                | 12 +--
 .../operators/search_ads.py                   |  2 +-
 .../google/suite/operators/sheets.py          |  6 +-
 .../google/suite/transfers/gcs_to_gdrive.py   |  2 +-
 .../google/suite/transfers/gcs_to_sheets.py   |  2 +-
 .../google/suite/transfers/local_to_drive.py  |  2 +-
 .../providers/google/version_compat.py        | 28 ++++++
 .../cloud/operators/test_cloud_build.py       |  2 +-
 .../cloud/operators/test_datacatalog.py       | 71 +++++++--------
 .../google/cloud/operators/test_dataflow.py   | 31 ++++---
 .../google/cloud/operators/test_dataproc.py   |  2 +-
 .../google/cloud/operators/test_functions.py  | 11 +--
 .../google/cloud/operators/test_translate.py  | 36 ++++----
 .../google/cloud/operators/test_vertex_ai.py  | 91 ++++++++++---------
 .../cloud/transfers/test_sheets_to_gcs.py     | 18 ++--
 .../unit/google/cloud/utils/airflow_util.py   |  2 +-
 .../links/test_analytics_admin.py             |  4 +-
 .../operators/test_campaign_manager.py        | 38 ++++----
 .../operators/test_display_video.py           | 60 ++++++------
 .../google/suite/operators/test_sheets.py     | 13 ++-
 74 files changed, 377 insertions(+), 363 deletions(-)

diff --git a/providers/google/src/airflow/providers/google/ads/operators/ads.py b/providers/google/src/airflow/providers/google/ads/operators/ads.py
index b8ef110c19d17..f6aaf1df3fda2 100644
--- a/providers/google/src/airflow/providers/google/ads/operators/ads.py
+++ b/providers/google/src/airflow/providers/google/ads/operators/ads.py
@@ -24,9 +24,9 @@
 from tempfile import NamedTemporaryFile
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.google.ads.hooks.ads import GoogleAdsHook
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
+from airflow.providers.google.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/ads/transfers/ads_to_gcs.py b/providers/google/src/airflow/providers/google/ads/transfers/ads_to_gcs.py
index 591eaf3b4f0da..baa99c5b4aa5d 100644
--- a/providers/google/src/airflow/providers/google/ads/transfers/ads_to_gcs.py
+++ b/providers/google/src/airflow/providers/google/ads/transfers/ads_to_gcs.py
@@ -22,9 +22,9 @@
 from tempfile import NamedTemporaryFile
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.google.ads.hooks.ads import GoogleAdsHook
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
+from airflow.providers.google.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/cloud/links/base.py b/providers/google/src/airflow/providers/google/cloud/links/base.py
index b24b780c61318..d543b495ab10c 100644
--- a/providers/google/src/airflow/providers/google/cloud/links/base.py
+++ b/providers/google/src/airflow/providers/google/cloud/links/base.py
@@ -19,22 +19,23 @@
 
 from typing import TYPE_CHECKING, ClassVar
 
-from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
-
-if TYPE_CHECKING:
-    from airflow.models import BaseOperator
-    from airflow.models.taskinstancekey import TaskInstanceKey
-    from airflow.providers.google.cloud.operators.cloud_base import GoogleCloudBaseOperator
-    from airflow.sdk import BaseSensorOperator
-    from airflow.utils.context import Context
+from airflow.providers.google.version_compat import (
+    AIRFLOW_V_3_0_PLUS,
+    BaseOperator,
+    BaseOperatorLink,
+    BaseSensorOperator,
+)
 
 if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseOperatorLink
     from airflow.sdk.execution_time.xcom import XCom
 else:
-    from airflow.models.baseoperatorlink import BaseOperatorLink  # type: ignore[no-redef]
     from airflow.models.xcom import XCom  # type: ignore[no-redef]
 
+if TYPE_CHECKING:
+    from airflow.models.taskinstancekey import TaskInstanceKey
+    from airflow.providers.google.cloud.operators.cloud_base import GoogleCloudBaseOperator
+    from airflow.utils.context import Context
+
 BASE_LINK = "https://console.cloud.google.com"
 
 
diff --git a/providers/google/src/airflow/providers/google/cloud/links/dataproc.py b/providers/google/src/airflow/providers/google/cloud/links/dataproc.py
index 832c66bf132e0..67be746ff4d4a 100644
--- a/providers/google/src/airflow/providers/google/cloud/links/dataproc.py
+++ b/providers/google/src/airflow/providers/google/cloud/links/dataproc.py
@@ -26,19 +26,20 @@
 
 from airflow.exceptions import AirflowProviderDeprecationWarning
 from airflow.providers.google.cloud.links.base import BASE_LINK, BaseGoogleLink
-from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+from airflow.providers.google.version_compat import (
+    AIRFLOW_V_3_0_PLUS,
+    BaseOperator,
+    BaseOperatorLink,
+)
 
 if TYPE_CHECKING:
-    from airflow.models import BaseOperator
     from airflow.models.taskinstancekey import TaskInstanceKey
     from airflow.utils.context import Context
 
 if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseOperatorLink
     from airflow.sdk.execution_time.xcom import XCom
 else:
-    from airflow.models import XCom  # type: ignore[no-redef]
-    from airflow.models.baseoperatorlink import BaseOperatorLink  # type: ignore[no-redef]
+    from airflow.models.xcom import XCom  # type: ignore[no-redef]
 
 
 def __getattr__(name: str) -> Any:
@@ -94,16 +95,16 @@ class DataprocLink(BaseOperatorLink):
     @staticmethod
     def persist(
         context: Context,
-        task_instance,
         url: str,
         resource: str,
+        region: str,
+        project_id: str,
     ):
-        task_instance.xcom_push(
-            context=context,
+        context["task_instance"].xcom_push(
             key=DataprocLink.key,
             value={
-                "region": task_instance.region,
-                "project_id": task_instance.project_id,
+                "region": region,
+                "project_id": project_id,
                 "url": url,
                 "resource": resource,
             },
@@ -147,14 +148,13 @@ class DataprocListLink(BaseOperatorLink):
     @staticmethod
     def persist(
         context: Context,
-        task_instance,
         url: str,
+        project_id: str,
     ):
-        task_instance.xcom_push(
-            context=context,
+        context["task_instance"].xcom_push(
             key=DataprocListLink.key,
             value={
-                "project_id": task_instance.project_id,
+                "project_id": project_id,
                 "url": url,
             },
         )
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/automl.py b/providers/google/src/airflow/providers/google/cloud/operators/automl.py
index 648cee403be6a..7d2cd4ee49fa1 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/automl.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/automl.py
@@ -163,7 +163,7 @@ def execute(self, context: Context):
         model_id = hook.extract_object_id(result)
         self.log.info("Model is created, model_id: %s", model_id)
 
-        self.xcom_push(context, key="model_id", value=model_id)
+        context["task_instance"].xcom_push(key="model_id", value=model_id)
         if project_id:
             TranslationLegacyModelLink.persist(
                 context=context,
@@ -415,7 +415,7 @@ def execute(self, context: Context):
         dataset_id = hook.extract_object_id(result)
         self.log.info("Creating completed. Dataset id: %s", dataset_id)
 
-        self.xcom_push(context, key="dataset_id", value=dataset_id)
+        context["task_instance"].xcom_push(key="dataset_id", value=dataset_id)
         project_id = self.project_id or hook.project_id
         if project_id:
             TranslationLegacyDatasetLink.persist(
@@ -1248,8 +1248,7 @@ def execute(self, context: Context):
             result.append(Dataset.to_dict(dataset))
         self.log.info("Datasets obtained.")
 
-        self.xcom_push(
-            context,
+        context["task_instance"].xcom_push(
             key="dataset_id_list",
             value=[hook.extract_object_id(d) for d in result],
         )
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/bigquery_dts.py b/providers/google/src/airflow/providers/google/cloud/operators/bigquery_dts.py
index 387a2ab55f32c..b06dea7bc0283 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/bigquery_dts.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/bigquery_dts.py
@@ -141,7 +141,7 @@ def execute(self, context: Context):
 
         result = TransferConfig.to_dict(response)
         self.log.info("Created DTS transfer config %s", get_object_id(result))
-        self.xcom_push(context, key="transfer_config_id", value=get_object_id(result))
+        context["ti"].xcom_push(key="transfer_config_id", value=get_object_id(result))
         # don't push AWS secret in XCOM
         result.get("params", {}).pop("secret_access_key", None)
         result.get("params", {}).pop("access_key_id", None)
@@ -335,7 +335,7 @@ def execute(self, context: Context):
 
         result = StartManualTransferRunsResponse.to_dict(response)
         run_id = get_object_id(result["runs"][0])
-        self.xcom_push(context, key="run_id", value=run_id)
+        context["ti"].xcom_push(key="run_id", value=run_id)
 
         if not self.deferrable:
             # Save as attribute for further use by OpenLineage
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/cloud_base.py b/providers/google/src/airflow/providers/google/cloud/operators/cloud_base.py
index fb11a7276fb01..4e7e2cf6ea9d4 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/cloud_base.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/cloud_base.py
@@ -23,7 +23,7 @@
 
 from google.api_core.gapic_v1.method import DEFAULT
 
-from airflow.models import BaseOperator
+from airflow.providers.google.version_compat import BaseOperator
 
 
 class GoogleCloudBaseOperator(BaseOperator):
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/cloud_build.py b/providers/google/src/airflow/providers/google/cloud/operators/cloud_build.py
index 78d4bc2d6065c..26f1444df36c2 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/cloud_build.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/cloud_build.py
@@ -125,7 +125,7 @@ def execute(self, context: Context):
             location=self.location,
         )
 
-        self.xcom_push(context, key="id", value=result.id)
+        context["task_instance"].xcom_push(key="id", value=result.id)
         project_id = self.project_id or hook.project_id
         if project_id:
             CloudBuildLink.persist(
@@ -235,7 +235,7 @@ def execute(self, context: Context):
             metadata=self.metadata,
             location=self.location,
         )
-        self.xcom_push(context, key="id", value=self.id_)
+        context["task_instance"].xcom_push(key="id", value=self.id_)
         if not self.wait:
             return Build.to_dict(
                 hook.get_build(id_=self.id_, project_id=self.project_id, location=self.location)
@@ -358,7 +358,7 @@ def execute(self, context: Context):
             metadata=self.metadata,
             location=self.location,
         )
-        self.xcom_push(context, key="id", value=result.id)
+        context["task_instance"].xcom_push(key="id", value=result.id)
         project_id = self.project_id or hook.project_id
         if project_id:
             CloudBuildTriggerDetailsLink.persist(
@@ -854,7 +854,7 @@ def execute(self, context: Context):
             location=self.location,
         )
 
-        self.xcom_push(context, key="id", value=result.id)
+        context["task_instance"].xcom_push(key="id", value=result.id)
         project_id = self.project_id or hook.project_id
         if project_id:
             CloudBuildLink.persist(
@@ -944,7 +944,7 @@ def execute(self, context: Context):
             metadata=self.metadata,
             location=self.location,
         )
-        self.xcom_push(context, key="id", value=result.id)
+        context["task_instance"].xcom_push(key="id", value=result.id)
         project_id = self.project_id or hook.project_id
         if project_id:
             CloudBuildLink.persist(
@@ -1030,7 +1030,7 @@ def execute(self, context: Context):
             metadata=self.metadata,
             location=self.location,
         )
-        self.xcom_push(context, key="id", value=result.id)
+        context["task_instance"].xcom_push(key="id", value=result.id)
         project_id = self.project_id or hook.project_id
         if project_id:
             CloudBuildTriggerDetailsLink.persist(
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/datacatalog.py b/providers/google/src/airflow/providers/google/cloud/operators/datacatalog.py
index 48b444f8b13b7..ba6692cb1e802 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/datacatalog.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/datacatalog.py
@@ -163,7 +163,7 @@ def execute(self, context: Context):
             )
         _, _, entry_id = result.name.rpartition("/")
         self.log.info("Current entry_id ID: %s", entry_id)
-        self.xcom_push(context, key="entry_id", value=entry_id)
+        context["ti"].xcom_push(key="entry_id", value=entry_id)
         DataCatalogEntryLink.persist(
             context=context,
             entry_id=self.entry_id,
@@ -283,7 +283,7 @@ def execute(self, context: Context):
 
         _, _, entry_group_id = result.name.rpartition("/")
         self.log.info("Current entry group ID: %s", entry_group_id)
-        self.xcom_push(context, key="entry_group_id", value=entry_group_id)
+        context["ti"].xcom_push(key="entry_group_id", value=entry_group_id)
         DataCatalogEntryGroupLink.persist(
             context=context,
             entry_group_id=self.entry_group_id,
@@ -425,7 +425,7 @@ def execute(self, context: Context):
 
         _, _, tag_id = tag.name.rpartition("/")
         self.log.info("Current Tag ID: %s", tag_id)
-        self.xcom_push(context, key="tag_id", value=tag_id)
+        context["ti"].xcom_push(key="tag_id", value=tag_id)
         DataCatalogEntryLink.persist(
             context=context,
             entry_id=self.entry,
@@ -542,7 +542,7 @@ def execute(self, context: Context):
             )
         _, _, tag_template = result.name.rpartition("/")
         self.log.info("Current Tag ID: %s", tag_template)
-        self.xcom_push(context, key="tag_template_id", value=tag_template)
+        context["ti"].xcom_push(key="tag_template_id", value=tag_template)
         DataCatalogTagTemplateLink.persist(
             context=context,
             tag_template_id=self.tag_template_id,
@@ -668,7 +668,7 @@ def execute(self, context: Context):
             result = tag_template.fields[self.tag_template_field_id]
 
         self.log.info("Current Tag ID: %s", self.tag_template_field_id)
-        self.xcom_push(context, key="tag_template_field_id", value=self.tag_template_field_id)
+        context["ti"].xcom_push(key="tag_template_field_id", value=self.tag_template_field_id)
         DataCatalogTagTemplateLink.persist(
             context=context,
             tag_template_id=self.tag_template,
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/dataflow.py b/providers/google/src/airflow/providers/google/cloud/operators/dataflow.py
index c61a19b6a3495..88542a8f1e401 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/dataflow.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/dataflow.py
@@ -409,7 +409,7 @@ def set_current_job(current_job):
                 append_job_name=self.append_job_name,
             )
             job_id = self.hook.extract_job_id(self.job)
-            self.xcom_push(context, key="job_id", value=job_id)
+            context["task_instance"].xcom_push(key="job_id", value=job_id)
             return job_id
 
         self.job = self.hook.launch_job_with_template(
@@ -446,7 +446,7 @@ def execute_complete(self, context: Context, event: dict[str, Any]) -> str:
             raise AirflowException(event["message"])
 
         job_id = event["job_id"]
-        self.xcom_push(context, key="job_id", value=job_id)
+        context["task_instance"].xcom_push(key="job_id", value=job_id)
         self.log.info("Task %s completed with response %s", self.task_id, event["message"])
         return job_id
 
@@ -609,7 +609,7 @@ def set_current_job(current_job):
                 on_new_job_callback=set_current_job,
             )
             job_id = self.hook.extract_job_id(self.job)
-            self.xcom_push(context, key="job_id", value=job_id)
+            context["task_instance"].xcom_push(key="job_id", value=job_id)
             return self.job
 
         self.job = self.hook.launch_job_with_flex_template(
@@ -650,7 +650,7 @@ def execute_complete(self, context: Context, event: dict) -> dict[str, str]:
 
         job_id = event["job_id"]
         self.log.info("Task %s completed with response %s", job_id, event["message"])
-        self.xcom_push(context, key="job_id", value=job_id)
+        context["task_instance"].xcom_push(key="job_id", value=job_id)
         job = self.hook.get_job(job_id=job_id, project_id=self.project_id, location=self.location)
         return job
 
@@ -807,7 +807,7 @@ def execute_complete(self, context: Context, event: dict) -> dict[str, Any]:
             raise AirflowException(event["message"])
         job = event["job"]
         self.log.info("Job %s completed with response %s", job["id"], event["message"])
-        self.xcom_push(context, key="job_id", value=job["id"])
+        context["task_instance"].xcom_push(key="job_id", value=job["id"])
 
         return job
 
@@ -1025,7 +1025,7 @@ def execute(self, context: Context):
                     location=self.location,
                 )
         DataflowPipelineLink.persist(context=context)
-        self.xcom_push(context, key="pipeline_name", value=self.pipeline_name)
+        context["task_instance"].xcom_push(key="pipeline_name", value=self.pipeline_name)
         if self.pipeline:
             if "error" in self.pipeline:
                 raise AirflowException(self.pipeline.get("error").get("message"))
@@ -1096,7 +1096,7 @@ def execute(self, context: Context):
                 location=self.location,
             )["job"]
             job_id = self.dataflow_hook.extract_job_id(self.job)
-            self.xcom_push(context, key="job_id", value=job_id)
+            context["task_instance"].xcom_push(key="job_id", value=job_id)
             DataflowJobLink.persist(
                 context=context, project_id=self.project_id, region=self.location, job_id=job_id
             )
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/dataplex.py b/providers/google/src/airflow/providers/google/cloud/operators/dataplex.py
index ad6a7217e2cc9..45361b364ab75 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/dataplex.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/dataplex.py
@@ -2533,8 +2533,7 @@ def execute(self, context: Context):
                 metadata=self.metadata,
             )
             self.log.info("EntryGroup on page: %s", entry_group_on_page)
-            self.xcom_push(
-                context=context,
+            context["ti"].xcom_push(
                 key="entry_group_page",
                 value=ListEntryGroupsResponse.to_dict(entry_group_on_page._response),
             )
@@ -2954,8 +2953,7 @@ def execute(self, context: Context):
                 metadata=self.metadata,
             )
             self.log.info("EntryType on page: %s", entry_type_on_page)
-            self.xcom_push(
-                context=context,
+            context["ti"].xcom_push(
                 key="entry_type_page",
                 value=ListEntryTypesResponse.to_dict(entry_type_on_page._response),
             )
@@ -3308,8 +3306,7 @@ def execute(self, context: Context):
                 metadata=self.metadata,
             )
             self.log.info("AspectType on page: %s", aspect_type_on_page)
-            self.xcom_push(
-                context=context,
+            context["ti"].xcom_push(
                 key="aspect_type_page",
                 value=ListAspectTypesResponse.to_dict(aspect_type_on_page._response),
             )
@@ -3803,8 +3800,7 @@ def execute(self, context: Context):
                 metadata=self.metadata,
             )
             self.log.info("Entries on page: %s", entries_on_page)
-            self.xcom_push(
-                context=context,
+            context["ti"].xcom_push(
                 key="entry_page",
                 value=ListEntriesResponse.to_dict(entries_on_page._response),
             )
@@ -3901,8 +3897,7 @@ def execute(self, context: Context):
                 metadata=self.metadata,
             )
             self.log.info("Entries on page: %s", entries_on_page)
-            self.xcom_push(
-                context=context,
+            context["ti"].xcom_push(
                 key="entry_page",
                 value=SearchEntriesResponse.to_dict(entries_on_page._response),
             )
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/dataproc.py b/providers/google/src/airflow/providers/google/cloud/operators/dataproc.py
index 3246c5bb6c356..5ed6923821ac8 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/dataproc.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/dataproc.py
@@ -1353,7 +1353,11 @@ def execute(self, context: Context):
             self.log.info("Job %s submitted successfully.", job_id)
             # Save data required for extra links no matter what the job status will be
             DataprocLink.persist(
-                context=context, task_instance=self, url=DATAPROC_JOB_LINK_DEPRECATED, resource=job_id
+                context=context,
+                url=DATAPROC_JOB_LINK_DEPRECATED,
+                resource=job_id,
+                region=self.region,
+                project_id=self.project_id,
             )
 
             if self.deferrable:
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/dataproc_metastore.py b/providers/google/src/airflow/providers/google/cloud/operators/dataproc_metastore.py
index 01340af99c612..25743a13a701f 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/dataproc_metastore.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/dataproc_metastore.py
@@ -39,8 +39,8 @@
 if TYPE_CHECKING:
     from google.protobuf.field_mask_pb2 import FieldMask
 
-    from airflow.models import BaseOperator
     from airflow.models.taskinstancekey import TaskInstanceKey
+    from airflow.providers.google.version_compat import BaseOperator
     from airflow.utils.context import Context
 
 BASE_LINK = "https://console.cloud.google.com"
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/functions.py b/providers/google/src/airflow/providers/google/cloud/operators/functions.py
index 77dee5089f2c9..f31f93c27dbc4 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/functions.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/functions.py
@@ -488,7 +488,7 @@ def execute(self, context: Context):
             project_id=self.project_id,
         )
         self.log.info("Function called successfully. Execution id %s", result.get("executionId"))
-        self.xcom_push(context=context, key="execution_id", value=result.get("executionId"))
+        context["ti"].xcom_push(key="execution_id", value=result.get("executionId"))
 
         project_id = self.project_id or hook.project_id
         if project_id:
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/managed_kafka.py b/providers/google/src/airflow/providers/google/cloud/operators/managed_kafka.py
index 6c42eb8be1d01..c4f7d09e5789c 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/managed_kafka.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/managed_kafka.py
@@ -256,8 +256,7 @@ def execute(self, context: Context):
                 timeout=self.timeout,
                 metadata=self.metadata,
             )
-            self.xcom_push(
-                context=context,
+            context["ti"].xcom_push(
                 key="cluster_page",
                 value=types.ListClustersResponse.to_dict(cluster_list_pager._response),
             )
@@ -622,8 +621,7 @@ def execute(self, context: Context):
                 timeout=self.timeout,
                 metadata=self.metadata,
             )
-            self.xcom_push(
-                context=context,
+            context["ti"].xcom_push(
                 key="topic_page",
                 value=types.ListTopicsResponse.to_dict(topic_list_pager._response),
             )
@@ -897,8 +895,7 @@ def execute(self, context: Context):
                 timeout=self.timeout,
                 metadata=self.metadata,
             )
-            self.xcom_push(
-                context=context,
+            context["ti"].xcom_push(
                 key="consumer_group_page",
                 value=types.ListConsumerGroupsResponse.to_dict(consumer_group_list_pager._response),
             )
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/translate.py b/providers/google/src/airflow/providers/google/cloud/operators/translate.py
index dd30b4536ae5e..ba6b0c338abde 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/translate.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/translate.py
@@ -479,7 +479,7 @@ def execute(self, context: Context) -> str:
         result = hook.wait_for_operation_result(result_operation)
         result = type(result).to_dict(result)
         dataset_id = hook.extract_object_id(result)
-        self.xcom_push(context, key="dataset_id", value=dataset_id)
+        context["ti"].xcom_push(key="dataset_id", value=dataset_id)
         self.log.info("Dataset creation complete. The dataset_id: %s.", dataset_id)
 
         project_id = self.project_id or hook.project_id
@@ -819,7 +819,7 @@ def execute(self, context: Context) -> str:
         result = hook.wait_for_operation_result(operation=result_operation)
         result = type(result).to_dict(result)
         model_id = hook.extract_object_id(result)
-        self.xcom_push(context, key="model_id", value=model_id)
+        context["ti"].xcom_push(key="model_id", value=model_id)
         self.log.info("Model creation complete. The model_id: %s.", model_id)
 
         project_id = self.project_id or hook.project_id
@@ -1406,7 +1406,7 @@ def execute(self, context: Context) -> str:
         result = type(result).to_dict(result)
 
         glossary_id = hook.extract_object_id(result)
-        self.xcom_push(context, key="glossary_id", value=glossary_id)
+        context["ti"].xcom_push(key="glossary_id", value=glossary_id)
         self.log.info("Glossary creation complete. The glossary_id: %s.", glossary_id)
         return result
 
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/auto_ml.py b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/auto_ml.py
index e1a1f50575ae6..4251b4becaa5a 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/auto_ml.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/auto_ml.py
@@ -249,11 +249,11 @@ def execute(self, context: Context):
         if model:
             result = Model.to_dict(model)
             model_id = self.hook.extract_model_id(result)
-            self.xcom_push(context, key="model_id", value=model_id)
+            context["ti"].xcom_push(key="model_id", value=model_id)
             VertexAIModelLink.persist(context=context, model_id=model_id)
         else:
             result = model  # type: ignore
-        self.xcom_push(context, key="training_id", value=training_id)
+        context["ti"].xcom_push(key="training_id", value=training_id)
         VertexAITrainingLink.persist(context=context, training_id=training_id)
         return result
 
@@ -341,11 +341,11 @@ def execute(self, context: Context):
         if model:
             result = Model.to_dict(model)
             model_id = self.hook.extract_model_id(result)
-            self.xcom_push(context, key="model_id", value=model_id)
+            context["ti"].xcom_push(key="model_id", value=model_id)
             VertexAIModelLink.persist(context=context, model_id=model_id)
         else:
             result = model  # type: ignore
-        self.xcom_push(context, key="training_id", value=training_id)
+        context["ti"].xcom_push(key="training_id", value=training_id)
         VertexAITrainingLink.persist(context=context, training_id=training_id)
         return result
 
@@ -464,11 +464,11 @@ def execute(self, context: Context):
         if model:
             result = Model.to_dict(model)
             model_id = self.hook.extract_model_id(result)
-            self.xcom_push(context, key="model_id", value=model_id)
+            context["ti"].xcom_push(key="model_id", value=model_id)
             VertexAIModelLink.persist(context=context, model_id=model_id)
         else:
             result = model  # type: ignore
-        self.xcom_push(context, key="training_id", value=training_id)
+        context["ti"].xcom_push(key="training_id", value=training_id)
         VertexAITrainingLink.persist(context=context, training_id=training_id)
         return result
 
@@ -538,11 +538,11 @@ def execute(self, context: Context):
         if model:
             result = Model.to_dict(model)
             model_id = self.hook.extract_model_id(result)
-            self.xcom_push(context, key="model_id", value=model_id)
+            context["ti"].xcom_push(key="model_id", value=model_id)
             VertexAIModelLink.persist(context=context, model_id=model_id)
         else:
             result = model  # type: ignore
-        self.xcom_push(context, key="training_id", value=training_id)
+        context["ti"].xcom_push(key="training_id", value=training_id)
         VertexAITrainingLink.persist(context=context, training_id=training_id)
         return result
 
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/batch_prediction_job.py b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/batch_prediction_job.py
index 156aefdc6fa6b..4aad729a9dff4 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/batch_prediction_job.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/batch_prediction_job.py
@@ -269,7 +269,7 @@ def execute(self, context: Context):
         batch_prediction_job_id = batch_prediction_job.name
         self.log.info("Batch prediction job was created. Job id: %s", batch_prediction_job_id)
 
-        self.xcom_push(context, key="batch_prediction_job_id", value=batch_prediction_job_id)
+        context["ti"].xcom_push(key="batch_prediction_job_id", value=batch_prediction_job_id)
         VertexAIBatchPredictionJobLink.persist(
             context=context,
             batch_prediction_job_id=batch_prediction_job_id,
@@ -303,13 +303,11 @@ def execute_complete(self, context: Context, event: dict[str, Any]) -> dict[str,
         job: dict[str, Any] = event["job"]
         self.log.info("Batch prediction job %s created and completed successfully.", job["name"])
         job_id = self.hook.extract_batch_prediction_job_id(job)
-        self.xcom_push(
-            context,
+        context["ti"].xcom_push(
             key="batch_prediction_job_id",
             value=job_id,
         )
-        self.xcom_push(
-            context,
+        context["ti"].xcom_push(
             key="training_conf",
             value={
                 "training_conf_id": job_id,
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/custom_job.py b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/custom_job.py
index 9543f27c71924..24a7efaeadc03 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/custom_job.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/custom_job.py
@@ -182,11 +182,11 @@ def execute_complete(self, context: Context, event: dict[str, Any]) -> dict[str,
             raise AirflowException(event["message"])
         training_pipeline = event["job"]
         custom_job_id = self.hook.extract_custom_job_id_from_training_pipeline(training_pipeline)
-        self.xcom_push(context, key="custom_job_id", value=custom_job_id)
+        context["ti"].xcom_push(key="custom_job_id", value=custom_job_id)
         try:
             model = training_pipeline["model_to_upload"]
             model_id = self.hook.extract_model_id(model)
-            self.xcom_push(context, key="model_id", value=model_id)
+            context["ti"].xcom_push(key="model_id", value=model_id)
             VertexAIModelLink.persist(context=context, model_id=model_id)
             return model
         except KeyError:
@@ -591,12 +591,12 @@ def execute(self, context: Context):
         if model:
             result = Model.to_dict(model)
             model_id = self.hook.extract_model_id(result)
-            self.xcom_push(context, key="model_id", value=model_id)
+            context["ti"].xcom_push(key="model_id", value=model_id)
             VertexAIModelLink.persist(context=context, model_id=model_id)
         else:
             result = model  # type: ignore
-        self.xcom_push(context, key="training_id", value=training_id)
-        self.xcom_push(context, key="custom_job_id", value=custom_job_id)
+        context["ti"].xcom_push(key="training_id", value=training_id)
+        context["ti"].xcom_push(key="custom_job_id", value=custom_job_id)
         VertexAITrainingLink.persist(context=context, training_id=training_id)
         return result
 
@@ -655,7 +655,7 @@ def invoke_defer(self, context: Context) -> None:
         )
         custom_container_training_job_obj.wait_for_resource_creation()
         training_pipeline_id: str = custom_container_training_job_obj.name
-        self.xcom_push(context, key="training_id", value=training_pipeline_id)
+        context["ti"].xcom_push(key="training_id", value=training_pipeline_id)
         VertexAITrainingLink.persist(context=context, training_id=training_pipeline_id)
         self.defer(
             trigger=CustomContainerTrainingJobTrigger(
@@ -1048,12 +1048,12 @@ def execute(self, context: Context):
         if model:
             result = Model.to_dict(model)
             model_id = self.hook.extract_model_id(result)
-            self.xcom_push(context, key="model_id", value=model_id)
+            context["ti"].xcom_push(key="model_id", value=model_id)
             VertexAIModelLink.persist(context=context, model_id=model_id)
         else:
             result = model  # type: ignore
-        self.xcom_push(context, key="training_id", value=training_id)
-        self.xcom_push(context, key="custom_job_id", value=custom_job_id)
+        context["ti"].xcom_push(key="training_id", value=training_id)
+        context["ti"].xcom_push(key="custom_job_id", value=custom_job_id)
         VertexAITrainingLink.persist(context=context, training_id=training_id)
         return result
 
@@ -1113,7 +1113,7 @@ def invoke_defer(self, context: Context) -> None:
         )
         custom_python_training_job_obj.wait_for_resource_creation()
         training_pipeline_id: str = custom_python_training_job_obj.name
-        self.xcom_push(context, key="training_id", value=training_pipeline_id)
+        context["ti"].xcom_push(key="training_id", value=training_pipeline_id)
         VertexAITrainingLink.persist(context=context, training_id=training_pipeline_id)
         self.defer(
             trigger=CustomPythonPackageTrainingJobTrigger(
@@ -1511,12 +1511,12 @@ def execute(self, context: Context):
         if model:
             result = Model.to_dict(model)
             model_id = self.hook.extract_model_id(result)
-            self.xcom_push(context, key="model_id", value=model_id)
+            context["ti"].xcom_push(key="model_id", value=model_id)
             VertexAIModelLink.persist(context=context, model_id=model_id)
         else:
             result = model  # type: ignore
-        self.xcom_push(context, key="training_id", value=training_id)
-        self.xcom_push(context, key="custom_job_id", value=custom_job_id)
+        context["ti"].xcom_push(key="training_id", value=training_id)
+        context["ti"].xcom_push(key="custom_job_id", value=custom_job_id)
         VertexAITrainingLink.persist(context=context, training_id=training_id)
         return result
 
@@ -1576,7 +1576,7 @@ def invoke_defer(self, context: Context) -> None:
         )
         custom_training_job_obj.wait_for_resource_creation()
         training_pipeline_id: str = custom_training_job_obj.name
-        self.xcom_push(context, key="training_id", value=training_pipeline_id)
+        context["ti"].xcom_push(key="training_id", value=training_pipeline_id)
         VertexAITrainingLink.persist(context=context, training_id=training_pipeline_id)
         self.defer(
             trigger=CustomTrainingJobTrigger(
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/dataset.py b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/dataset.py
index 594b8e4fcdab8..a2c0c79eb0fd3 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/dataset.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/dataset.py
@@ -113,7 +113,7 @@ def execute(self, context: Context):
         dataset_id = hook.extract_dataset_id(dataset)
         self.log.info("Dataset was created. Dataset id: %s", dataset_id)
 
-        self.xcom_push(context, key="dataset_id", value=dataset_id)
+        context["ti"].xcom_push(key="dataset_id", value=dataset_id)
         VertexAIDatasetLink.persist(context=context, dataset_id=dataset_id)
         return dataset
 
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/endpoint_service.py b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/endpoint_service.py
index 32a64e17bcabf..9871cdccdc49a 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/endpoint_service.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/endpoint_service.py
@@ -122,7 +122,7 @@ def execute(self, context: Context):
         endpoint_id = hook.extract_endpoint_id(endpoint)
         self.log.info("Endpoint was created. Endpoint ID: %s", endpoint_id)
 
-        self.xcom_push(context, key="endpoint_id", value=endpoint_id)
+        context["ti"].xcom_push(key="endpoint_id", value=endpoint_id)
         VertexAIEndpointLink.persist(context=context, endpoint_id=endpoint_id)
         return endpoint
 
@@ -292,7 +292,7 @@ def execute(self, context: Context):
         deployed_model_id = hook.extract_deployed_model_id(deploy_model)
         self.log.info("Model was deployed. Deployed Model ID: %s", deployed_model_id)
 
-        self.xcom_push(context, key="deployed_model_id", value=deployed_model_id)
+        context["ti"].xcom_push(key="deployed_model_id", value=deployed_model_id)
         VertexAIModelLink.persist(context=context, model_id=deployed_model_id)
         return deploy_model
 
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/generative_model.py b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/generative_model.py
index 20257dad196c8..2c47b2ee5aff8 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/generative_model.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/generative_model.py
@@ -93,7 +93,7 @@ def execute(self, context: Context):
         )
 
         self.log.info("Model response: %s", response)
-        self.xcom_push(context, key="model_response", value=response)
+        context["ti"].xcom_push(key="model_response", value=response)
 
         return response
 
@@ -172,7 +172,7 @@ def execute(self, context: Context):
         )
 
         self.log.info("Model response: %s", response)
-        self.xcom_push(context, key="model_response", value=response)
+        context["ti"].xcom_push(key="model_response", value=response)
 
         return response
 
@@ -261,8 +261,8 @@ def execute(self, context: Context):
         self.log.info("Tuned Model Name: %s", response.tuned_model_name)
         self.log.info("Tuned Model Endpoint Name: %s", response.tuned_model_endpoint_name)
 
-        self.xcom_push(context, key="tuned_model_name", value=response.tuned_model_name)
-        self.xcom_push(context, key="tuned_model_endpoint_name", value=response.tuned_model_endpoint_name)
+        context["ti"].xcom_push(key="tuned_model_name", value=response.tuned_model_name)
+        context["ti"].xcom_push(key="tuned_model_endpoint_name", value=response.tuned_model_endpoint_name)
 
         result = {
             "tuned_model_name": response.tuned_model_name,
@@ -332,8 +332,8 @@ def execute(self, context: Context):
         self.log.info("Total tokens: %s", response.total_tokens)
         self.log.info("Total billable characters: %s", response.total_billable_characters)
 
-        self.xcom_push(context, key="total_tokens", value=response.total_tokens)
-        self.xcom_push(context, key="total_billable_characters", value=response.total_billable_characters)
+        context["ti"].xcom_push(key="total_tokens", value=response.total_tokens)
+        context["ti"].xcom_push(key="total_billable_characters", value=response.total_billable_characters)
 
 
 class RunEvaluationOperator(GoogleCloudBaseOperator):
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/hyperparameter_tuning_job.py b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/hyperparameter_tuning_job.py
index 86d278c9ab1ba..a667778965bc7 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/hyperparameter_tuning_job.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/hyperparameter_tuning_job.py
@@ -257,7 +257,7 @@ def execute(self, context: Context):
         hyperparameter_tuning_job_id = hyperparameter_tuning_job.name
         self.log.info("Hyperparameter Tuning job was created. Job id: %s", hyperparameter_tuning_job_id)
 
-        self.xcom_push(context, key="hyperparameter_tuning_job_id", value=hyperparameter_tuning_job_id)
+        context["ti"].xcom_push(key="hyperparameter_tuning_job_id", value=hyperparameter_tuning_job_id)
         VertexAITrainingLink.persist(context=context, training_id=hyperparameter_tuning_job_id)
 
         if self.deferrable:
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/model_service.py b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/model_service.py
index d5f9c26e5a078..2b6459d434986 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/model_service.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/model_service.py
@@ -186,7 +186,7 @@ def execute(self, context: Context):
             )
             self.log.info("Model found. Model ID: %s", self.model_id)
 
-            self.xcom_push(context, key="model_id", value=self.model_id)
+            context["ti"].xcom_push(key="model_id", value=self.model_id)
             VertexAIModelLink.persist(context=context, model_id=self.model_id)
             return Model.to_dict(model)
         except NotFound:
@@ -453,7 +453,7 @@ def execute(self, context: Context):
         model_id = hook.extract_model_id(model_resp)
         self.log.info("Model was uploaded. Model ID: %s", model_id)
 
-        self.xcom_push(context, key="model_id", value=model_id)
+        context["ti"].xcom_push(key="model_id", value=model_id)
         VertexAIModelLink.persist(context=context, model_id=model_id)
         return model_resp
 
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/pipeline_job.py b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/pipeline_job.py
index d12adaaf27222..875d2eff00e50 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/pipeline_job.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/pipeline_job.py
@@ -195,7 +195,7 @@ def execute(self, context: Context):
         )
         pipeline_job_id = pipeline_job_obj.job_id
         self.log.info("Pipeline job was created. Job id: %s", pipeline_job_id)
-        self.xcom_push(context, key="pipeline_job_id", value=pipeline_job_id)
+        context["ti"].xcom_push(key="pipeline_job_id", value=pipeline_job_id)
         VertexAIPipelineJobLink.persist(context=context, pipeline_id=pipeline_job_id)
 
         if self.deferrable:
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/ray.py b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/ray.py
index 6368e81eb0170..0cd222ec6d2fa 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/ray.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/ray.py
@@ -188,8 +188,7 @@ def execute(self, context: Context):
                 labels=self.labels,
             )
             cluster_id = self.hook.extract_cluster_id(cluster_path)
-            self.xcom_push(
-                context=context,
+            context["ti"].xcom_push(
                 key="cluster_id",
                 value=cluster_id,
             )
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/workflows.py b/providers/google/src/airflow/providers/google/cloud/operators/workflows.py
index 81f97d18a6d97..51da294c664ac 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/workflows.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/workflows.py
@@ -501,7 +501,7 @@ def execute(self, context: Context):
             metadata=self.metadata,
         )
         execution_id = execution.name.split("/")[-1]
-        self.xcom_push(context, key="execution_id", value=execution_id)
+        context["task_instance"].xcom_push(key="execution_id", value=execution_id)
 
         WorkflowsExecutionLink.persist(
             context=context,
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/bigquery.py b/providers/google/src/airflow/providers/google/cloud/sensors/bigquery.py
index 2b82d5cfff122..f08757f0edd0a 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/bigquery.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/bigquery.py
@@ -31,12 +31,7 @@
     BigQueryTableExistenceTrigger,
     BigQueryTablePartitionExistenceTrigger,
 )
-from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+from airflow.providers.google.version_compat import BaseSensorOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/dataflow.py b/providers/google/src/airflow/providers/google/cloud/sensors/dataflow.py
index 38d131851e2c9..bc71934e9dc87 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/dataflow.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/dataflow.py
@@ -37,12 +37,7 @@
     DataflowJobStatusTrigger,
 )
 from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID
-from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+from airflow.providers.google.version_compat import BaseSensorOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/azure_blob_to_gcs.py b/providers/google/src/airflow/providers/google/cloud/transfers/azure_blob_to_gcs.py
index 303f0c00761a1..edbfd61b1a2fd 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/azure_blob_to_gcs.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/azure_blob_to_gcs.py
@@ -21,8 +21,8 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
+from airflow.providers.google.version_compat import BaseOperator
 
 try:
     from airflow.providers.microsoft.azure.hooks.wasb import WasbHook
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/azure_fileshare_to_gcs.py b/providers/google/src/airflow/providers/google/cloud/transfers/azure_fileshare_to_gcs.py
index 9dd3ca6015f47..4b890b6c59d59 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/azure_fileshare_to_gcs.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/azure_fileshare_to_gcs.py
@@ -23,8 +23,8 @@
 from typing import TYPE_CHECKING
 
 from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.gcs import GCSHook, _parse_gcs_url, gcs_object_is_directory
+from airflow.providers.google.version_compat import BaseOperator
 
 try:
     from airflow.providers.microsoft.azure.hooks.fileshare import AzureFileShareHook
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/bigquery_to_bigquery.py b/providers/google/src/airflow/providers/google/cloud/transfers/bigquery_to_bigquery.py
index 603fe3929dae3..d34c71a7dc0fb 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/bigquery_to_bigquery.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/bigquery_to_bigquery.py
@@ -22,10 +22,10 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.bigquery import BigQueryHook
 from airflow.providers.google.cloud.links.bigquery import BigQueryTableLink
 from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID
+from airflow.providers.google.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/bigquery_to_gcs.py b/providers/google/src/airflow/providers/google/cloud/transfers/bigquery_to_gcs.py
index 1531807884673..719d565a9fc32 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/bigquery_to_gcs.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/bigquery_to_gcs.py
@@ -27,11 +27,11 @@
 
 from airflow.configuration import conf
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.bigquery import BigQueryHook, BigQueryJob
 from airflow.providers.google.cloud.links.bigquery import BigQueryTableLink
 from airflow.providers.google.cloud.triggers.bigquery import BigQueryInsertJobTrigger
 from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID
+from airflow.providers.google.version_compat import BaseOperator
 from airflow.utils.helpers import merge_dicts
 
 if TYPE_CHECKING:
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/bigquery_to_sql.py b/providers/google/src/airflow/providers/google/cloud/transfers/bigquery_to_sql.py
index 081bb8df9d63e..dc3ad68fb81ce 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/bigquery_to_sql.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/bigquery_to_sql.py
@@ -23,9 +23,9 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.bigquery import BigQueryHook
 from airflow.providers.google.cloud.utils.bigquery_get_data import bigquery_get_data
+from airflow.providers.google.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.providers.common.sql.hooks.sql import DbApiHook
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/calendar_to_gcs.py b/providers/google/src/airflow/providers/google/cloud/transfers/calendar_to_gcs.py
index f9d7b977db0c1..bc6e9628b5462 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/calendar_to_gcs.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/calendar_to_gcs.py
@@ -21,9 +21,9 @@
 from tempfile import NamedTemporaryFile
 from typing import TYPE_CHECKING, Any
 
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
 from airflow.providers.google.suite.hooks.calendar import GoogleCalendarHook
+from airflow.providers.google.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from datetime import datetime
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/cassandra_to_gcs.py b/providers/google/src/airflow/providers/google/cloud/transfers/cassandra_to_gcs.py
index f283649faac0d..7c40c8fae5d47 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/cassandra_to_gcs.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/cassandra_to_gcs.py
@@ -31,9 +31,9 @@
 from cassandra.util import Date, OrderedMapSerializedKey, SortedSet, Time
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.apache.cassandra.hooks.cassandra import CassandraHook
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
+from airflow.providers.google.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/facebook_ads_to_gcs.py b/providers/google/src/airflow/providers/google/cloud/transfers/facebook_ads_to_gcs.py
index ea43667076651..8814df2c02da3 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/facebook_ads_to_gcs.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/facebook_ads_to_gcs.py
@@ -26,9 +26,9 @@
 from typing import TYPE_CHECKING, Any
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.facebook.ads.hooks.ads import FacebookAdsReportingHook
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
+from airflow.providers.google.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from facebook_business.adobjects.adsinsights import AdsInsights
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/gcs_to_bigquery.py b/providers/google/src/airflow/providers/google/cloud/transfers/gcs_to_bigquery.py
index 08a119a4d3a53..f4c47dec9420c 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/gcs_to_bigquery.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/gcs_to_bigquery.py
@@ -38,12 +38,12 @@
 
 from airflow.configuration import conf
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.bigquery import BigQueryHook, BigQueryJob
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
 from airflow.providers.google.cloud.links.bigquery import BigQueryTableLink
 from airflow.providers.google.cloud.triggers.bigquery import BigQueryInsertJobTrigger
 from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID
+from airflow.providers.google.version_compat import BaseOperator
 from airflow.utils.helpers import merge_dicts
 
 if TYPE_CHECKING:
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/gcs_to_gcs.py b/providers/google/src/airflow/providers/google/cloud/transfers/gcs_to_gcs.py
index 54a8269709a9b..296d216b88135 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/gcs_to_gcs.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/gcs_to_gcs.py
@@ -24,8 +24,8 @@
 from typing import TYPE_CHECKING
 
 from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
+from airflow.providers.google.version_compat import BaseOperator
 
 WILDCARD = "*"
 
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/gcs_to_local.py b/providers/google/src/airflow/providers/google/cloud/transfers/gcs_to_local.py
index 70cdf0cdb9baf..b407829cc52a5 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/gcs_to_local.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/gcs_to_local.py
@@ -20,9 +20,9 @@
 from typing import TYPE_CHECKING
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.models.xcom import MAX_XCOM_SIZE
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
+from airflow.providers.google.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/gcs_to_sftp.py b/providers/google/src/airflow/providers/google/cloud/transfers/gcs_to_sftp.py
index f529cef36133e..7aebbe1b6850c 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/gcs_to_sftp.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/gcs_to_sftp.py
@@ -26,8 +26,8 @@
 from typing import TYPE_CHECKING
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
+from airflow.providers.google.version_compat import BaseOperator
 from airflow.providers.sftp.hooks.sftp import SFTPHook
 
 WILDCARD = "*"
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/gdrive_to_gcs.py b/providers/google/src/airflow/providers/google/cloud/transfers/gdrive_to_gcs.py
index dc57fd712c568..827f7455910fe 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/gdrive_to_gcs.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/gdrive_to_gcs.py
@@ -19,9 +19,9 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
 from airflow.providers.google.suite.hooks.drive import GoogleDriveHook
+from airflow.providers.google.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
@@ -99,3 +99,7 @@ def execute(self, context: Context):
             bucket_name=self.bucket_name, object_name=self.object_name
         ) as file:
             gdrive_hook.download_file(file_id=file_metadata["id"], file_handle=file)
+
+    def dry_run(self):
+        """Perform a dry run of the operator."""
+        return None
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/gdrive_to_local.py b/providers/google/src/airflow/providers/google/cloud/transfers/gdrive_to_local.py
index 22dcc9f67ccb8..12d903ea52f08 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/gdrive_to_local.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/gdrive_to_local.py
@@ -19,8 +19,8 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.google.suite.hooks.drive import GoogleDriveHook
+from airflow.providers.google.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/http_to_gcs.py b/providers/google/src/airflow/providers/google/cloud/transfers/http_to_gcs.py
index 71b2b7020af4c..b06ac8d22e561 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/http_to_gcs.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/http_to_gcs.py
@@ -22,8 +22,8 @@
 from functools import cached_property
 from typing import TYPE_CHECKING, Any
 
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
+from airflow.providers.google.version_compat import BaseOperator
 from airflow.providers.http.hooks.http import HttpHook
 
 if TYPE_CHECKING:
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/local_to_gcs.py b/providers/google/src/airflow/providers/google/cloud/transfers/local_to_gcs.py
index b1a143b242f30..b6c183e600597 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/local_to_gcs.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/local_to_gcs.py
@@ -24,8 +24,8 @@
 from glob import glob
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
+from airflow.providers.google.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/salesforce_to_gcs.py b/providers/google/src/airflow/providers/google/cloud/transfers/salesforce_to_gcs.py
index b83f09be70b24..5ffe7f59f32cc 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/salesforce_to_gcs.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/salesforce_to_gcs.py
@@ -21,8 +21,8 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
+from airflow.providers.google.version_compat import BaseOperator
 from airflow.providers.salesforce.hooks.salesforce import SalesforceHook
 
 if TYPE_CHECKING:
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/sftp_to_gcs.py b/providers/google/src/airflow/providers/google/cloud/transfers/sftp_to_gcs.py
index 1653b84ec2b82..9e53d16f94395 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/sftp_to_gcs.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/sftp_to_gcs.py
@@ -26,8 +26,8 @@
 from typing import TYPE_CHECKING
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
+from airflow.providers.google.version_compat import BaseOperator
 from airflow.providers.sftp.hooks.sftp import SFTPHook
 
 if TYPE_CHECKING:
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/sheets_to_gcs.py b/providers/google/src/airflow/providers/google/cloud/transfers/sheets_to_gcs.py
index 8c681bc5c9db6..6f11b38531f18 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/sheets_to_gcs.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/sheets_to_gcs.py
@@ -21,9 +21,9 @@
 from tempfile import NamedTemporaryFile
 from typing import TYPE_CHECKING, Any
 
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
 from airflow.providers.google.suite.hooks.sheets import GSheetsHook
+from airflow.providers.google.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
@@ -130,5 +130,5 @@ def execute(self, context: Context):
             gcs_path_to_file = self._upload_data(gcs_hook, sheet_hook, sheet_range, data)
             destination_array.append(gcs_path_to_file)
 
-        self.xcom_push(context, "destination_objects", destination_array)
+        context["ti"].xcom_push(key="destination_objects", value=destination_array)
         return destination_array
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/sql_to_gcs.py b/providers/google/src/airflow/providers/google/cloud/transfers/sql_to_gcs.py
index 6953c70876733..e4ec2d730ef81 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/sql_to_gcs.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/sql_to_gcs.py
@@ -30,8 +30,8 @@
 import pyarrow as pa
 import pyarrow.parquet as pq
 
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
+from airflow.providers.google.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.providers.common.compat.openlineage.facet import OutputDataset
diff --git a/providers/google/src/airflow/providers/google/firebase/operators/firestore.py b/providers/google/src/airflow/providers/google/firebase/operators/firestore.py
index 055bcadb92a41..08ad61c7616eb 100644
--- a/providers/google/src/airflow/providers/google/firebase/operators/firestore.py
+++ b/providers/google/src/airflow/providers/google/firebase/operators/firestore.py
@@ -20,9 +20,9 @@
 from typing import TYPE_CHECKING
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID
 from airflow.providers.google.firebase.hooks.firestore import CloudFirestoreHook
+from airflow.providers.google.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/leveldb/operators/leveldb.py b/providers/google/src/airflow/providers/google/leveldb/operators/leveldb.py
index 2d544e89b45bc..77320d5e6bd7a 100644
--- a/providers/google/src/airflow/providers/google/leveldb/operators/leveldb.py
+++ b/providers/google/src/airflow/providers/google/leveldb/operators/leveldb.py
@@ -18,8 +18,8 @@
 
 from typing import TYPE_CHECKING, Any
 
-from airflow.models import BaseOperator
 from airflow.providers.google.leveldb.hooks.leveldb import LevelDBHook
+from airflow.providers.google.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/marketing_platform/links/analytics_admin.py b/providers/google/src/airflow/providers/google/marketing_platform/links/analytics_admin.py
index 9c055889bd751..a783ddf008181 100644
--- a/providers/google/src/airflow/providers/google/marketing_platform/links/analytics_admin.py
+++ b/providers/google/src/airflow/providers/google/marketing_platform/links/analytics_admin.py
@@ -18,13 +18,12 @@
 
 from typing import TYPE_CHECKING, ClassVar
 
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS, BaseOperator
+
 if TYPE_CHECKING:
-    from airflow.models import BaseOperator
     from airflow.models.taskinstancekey import TaskInstanceKey
     from airflow.utils.context import Context
 
-from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
-
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import BaseOperatorLink
     from airflow.sdk.execution_time.xcom import XCom
@@ -64,11 +63,9 @@ class GoogleAnalyticsPropertyLink(GoogleAnalyticsBaseLink):
     @staticmethod
     def persist(
         context: Context,
-        task_instance: BaseOperator,
         property_id: str,
     ):
-        task_instance.xcom_push(
-            context,
+        context["task_instance"].xcom_push(
             key=GoogleAnalyticsPropertyLink.key,
             value={"property_id": property_id},
         )
diff --git a/providers/google/src/airflow/providers/google/marketing_platform/operators/analytics_admin.py b/providers/google/src/airflow/providers/google/marketing_platform/operators/analytics_admin.py
index 8f662f9c92d50..4465a6084aa4d 100644
--- a/providers/google/src/airflow/providers/google/marketing_platform/operators/analytics_admin.py
+++ b/providers/google/src/airflow/providers/google/marketing_platform/operators/analytics_admin.py
@@ -194,7 +194,6 @@ def execute(
         self.log.info("The Google Analytics property %s was created successfully.", prop.name)
         GoogleAnalyticsPropertyLink.persist(
             context=context,
-            task_instance=self,
             property_id=prop.name.lstrip("properties/"),
         )
 
diff --git a/providers/google/src/airflow/providers/google/marketing_platform/operators/campaign_manager.py b/providers/google/src/airflow/providers/google/marketing_platform/operators/campaign_manager.py
index 4673f3c53a2ae..e68a286284872 100644
--- a/providers/google/src/airflow/providers/google/marketing_platform/operators/campaign_manager.py
+++ b/providers/google/src/airflow/providers/google/marketing_platform/operators/campaign_manager.py
@@ -28,9 +28,9 @@
 from googleapiclient import http
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
 from airflow.providers.google.marketing_platform.hooks.campaign_manager import GoogleCampaignManagerHook
+from airflow.providers.google.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
@@ -237,7 +237,7 @@ def execute(self, context: Context) -> None:
                 mime_type="text/csv",
             )
 
-        self.xcom_push(context, key="report_name", value=report_name)
+        context["task_instance"].xcom_push(key="report_name", value=report_name)
 
 
 class GoogleCampaignManagerInsertReportOperator(BaseOperator):
@@ -308,7 +308,7 @@ def execute(self, context: Context):
         self.log.info("Inserting Campaign Manager report.")
         response = hook.insert_report(profile_id=self.profile_id, report=self.report)
         report_id = response.get("id")
-        self.xcom_push(context, key="report_id", value=report_id)
+        context["task_instance"].xcom_push(key="report_id", value=report_id)
         self.log.info("Report successfully inserted. Report id: %s", report_id)
         return response
 
@@ -381,7 +381,7 @@ def execute(self, context: Context):
             synchronous=self.synchronous,
         )
         file_id = response.get("id")
-        self.xcom_push(context, key="file_id", value=file_id)
+        context["task_instance"].xcom_push(key="file_id", value=file_id)
         self.log.info("Report file id: %s", file_id)
         return response
 
diff --git a/providers/google/src/airflow/providers/google/marketing_platform/operators/display_video.py b/providers/google/src/airflow/providers/google/marketing_platform/operators/display_video.py
index a45ca8ae2d22d..0c88db9f94e4a 100644
--- a/providers/google/src/airflow/providers/google/marketing_platform/operators/display_video.py
+++ b/providers/google/src/airflow/providers/google/marketing_platform/operators/display_video.py
@@ -29,9 +29,9 @@
 from urllib.parse import urlsplit
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
 from airflow.providers.google.marketing_platform.hooks.display_video import GoogleDisplayVideo360Hook
+from airflow.providers.google.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
@@ -99,7 +99,7 @@ def execute(self, context: Context) -> dict:
         self.log.info("Creating Display & Video 360 query.")
         response = hook.create_query(query=self.body)
         query_id = response["queryId"]
-        self.xcom_push(context, key="query_id", value=query_id)
+        context["task_instance"].xcom_push(key="query_id", value=query_id)
         self.log.info("Created query with ID: %s", query_id)
         return response
 
@@ -295,7 +295,7 @@ def execute(self, context: Context):
             self.bucket_name,
             report_name,
         )
-        self.xcom_push(context, key="report_name", value=report_name)
+        context["task_instance"].xcom_push(key="report_name", value=report_name)
 
 
 class GoogleDisplayVideo360RunQueryOperator(BaseOperator):
@@ -360,8 +360,8 @@ def execute(self, context: Context) -> dict:
             self.parameters,
         )
         response = hook.run_query(query_id=self.query_id, params=self.parameters)
-        self.xcom_push(context, key="query_id", value=response["key"]["queryId"])
-        self.xcom_push(context, key="report_id", value=response["key"]["reportId"])
+        context["task_instance"].xcom_push(key="query_id", value=response["key"]["queryId"])
+        context["task_instance"].xcom_push(key="report_id", value=response["key"]["reportId"])
         return response
 
 
@@ -564,7 +564,7 @@ def execute(self, context: Context) -> dict[str, Any]:
         operation = hook.create_sdf_download_operation(body_request=self.body_request)
 
         name = operation["name"]
-        self.xcom_push(context, key="name", value=name)
+        context["task_instance"].xcom_push(key="name", value=name)
         self.log.info("Created SDF operation with name: %s", name)
 
         return operation
diff --git a/providers/google/src/airflow/providers/google/marketing_platform/operators/search_ads.py b/providers/google/src/airflow/providers/google/marketing_platform/operators/search_ads.py
index 1c7e120aa37f0..7b22197596c71 100644
--- a/providers/google/src/airflow/providers/google/marketing_platform/operators/search_ads.py
+++ b/providers/google/src/airflow/providers/google/marketing_platform/operators/search_ads.py
@@ -23,8 +23,8 @@
 from functools import cached_property
 from typing import TYPE_CHECKING, Any
 
-from airflow.models import BaseOperator
 from airflow.providers.google.marketing_platform.hooks.search_ads import GoogleSearchAdsReportingHook
+from airflow.providers.google.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/suite/operators/sheets.py b/providers/google/src/airflow/providers/google/suite/operators/sheets.py
index f6eaaf9d2ba07..2cf942218c675 100644
--- a/providers/google/src/airflow/providers/google/suite/operators/sheets.py
+++ b/providers/google/src/airflow/providers/google/suite/operators/sheets.py
@@ -19,8 +19,8 @@
 from collections.abc import Sequence
 from typing import Any
 
-from airflow.models import BaseOperator
 from airflow.providers.google.suite.hooks.sheets import GSheetsHook
+from airflow.providers.google.version_compat import BaseOperator
 
 
 class GoogleSheetsCreateSpreadsheetOperator(BaseOperator):
@@ -68,6 +68,6 @@ def execute(self, context: Any) -> dict[str, Any]:
             impersonation_chain=self.impersonation_chain,
         )
         spreadsheet = hook.create_spreadsheet(spreadsheet=self.spreadsheet)
-        self.xcom_push(context, "spreadsheet_id", spreadsheet["spreadsheetId"])
-        self.xcom_push(context, "spreadsheet_url", spreadsheet["spreadsheetUrl"])
+        context["task_instance"].xcom_push(key="spreadsheet_id", value=spreadsheet["spreadsheetId"])
+        context["task_instance"].xcom_push(key="spreadsheet_url", value=spreadsheet["spreadsheetUrl"])
         return spreadsheet
diff --git a/providers/google/src/airflow/providers/google/suite/transfers/gcs_to_gdrive.py b/providers/google/src/airflow/providers/google/suite/transfers/gcs_to_gdrive.py
index 2a8728e30ea13..06854bca89d7b 100644
--- a/providers/google/src/airflow/providers/google/suite/transfers/gcs_to_gdrive.py
+++ b/providers/google/src/airflow/providers/google/suite/transfers/gcs_to_gdrive.py
@@ -24,9 +24,9 @@
 from typing import TYPE_CHECKING
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
 from airflow.providers.google.suite.hooks.drive import GoogleDriveHook
+from airflow.providers.google.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/suite/transfers/gcs_to_sheets.py b/providers/google/src/airflow/providers/google/suite/transfers/gcs_to_sheets.py
index 95b9120df91d3..77f3fc03e4271 100644
--- a/providers/google/src/airflow/providers/google/suite/transfers/gcs_to_sheets.py
+++ b/providers/google/src/airflow/providers/google/suite/transfers/gcs_to_sheets.py
@@ -21,9 +21,9 @@
 from tempfile import NamedTemporaryFile
 from typing import Any
 
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
 from airflow.providers.google.suite.hooks.sheets import GSheetsHook
+from airflow.providers.google.version_compat import BaseOperator
 
 
 class GCSToGoogleSheetsOperator(BaseOperator):
diff --git a/providers/google/src/airflow/providers/google/suite/transfers/local_to_drive.py b/providers/google/src/airflow/providers/google/suite/transfers/local_to_drive.py
index 9a9e831762850..aa712d773da27 100644
--- a/providers/google/src/airflow/providers/google/suite/transfers/local_to_drive.py
+++ b/providers/google/src/airflow/providers/google/suite/transfers/local_to_drive.py
@@ -24,8 +24,8 @@
 from typing import TYPE_CHECKING
 
 from airflow.exceptions import AirflowFailException
-from airflow.models import BaseOperator
 from airflow.providers.google.suite.hooks.drive import GoogleDriveHook
+from airflow.providers.google.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/google/src/airflow/providers/google/version_compat.py b/providers/google/src/airflow/providers/google/version_compat.py
index 48d122b669696..9b604e6b95008 100644
--- a/providers/google/src/airflow/providers/google/version_compat.py
+++ b/providers/google/src/airflow/providers/google/version_compat.py
@@ -33,3 +33,31 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+AIRFLOW_V_3_1_PLUS = get_base_airflow_version_tuple() >= (3, 1, 0)
+
+# Version-compatible imports
+# BaseOperator: Use 3.1+ due to xcom_push method missing in SDK BaseOperator 3.0.x
+# This is needed for DecoratedOperator compatibility
+if AIRFLOW_V_3_1_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator
+
+# Other SDK components: Available since 3.0+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import (
+        BaseOperatorLink,
+        BaseSensorOperator,
+    )
+else:
+    from airflow.models import BaseOperatorLink  # type: ignore[no-redef]
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+
+# Explicitly export these imports to protect them from being removed by linters
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "AIRFLOW_V_3_1_PLUS",
+    "BaseOperator",
+    "BaseSensorOperator",
+    "BaseOperatorLink",
+]
diff --git a/providers/google/tests/unit/google/cloud/operators/test_cloud_build.py b/providers/google/tests/unit/google/cloud/operators/test_cloud_build.py
index b7ca33cae727b..66602204431c0 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_cloud_build.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_cloud_build.py
@@ -426,7 +426,7 @@ def test_async_create_build_fires_correct_trigger_should_execute_successfully(
     )
 
     with pytest.raises(TaskDeferred) as exc:
-        ti.task.execute({"ti": ti})
+        ti.task.execute({"ti": ti, "task_instance": ti})
 
     assert isinstance(exc.value.trigger, CloudBuildCreateBuildTrigger), (
         "Trigger is not a CloudBuildCreateBuildTrigger"
diff --git a/providers/google/tests/unit/google/cloud/operators/test_datacatalog.py b/providers/google/tests/unit/google/cloud/operators/test_datacatalog.py
index 0026dd1f50111..da5b420edb374 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_datacatalog.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_datacatalog.py
@@ -121,6 +121,7 @@
 }
 TEST_TAG_TEMPLATE: TagTemplate = TagTemplate(name=TEST_TAG_TEMPLATE_PATH)
 TEST_TAG_TEMPLATE_DICT: dict = {
+    "dataplex_transfer_status": 0,
     "display_name": "",
     "fields": {},
     "is_publicly_readable": False,
@@ -145,8 +146,7 @@ class TestCloudDataCatalogCreateEntryOperator:
         "airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogHook",
         **{"return_value.create_entry.return_value": TEST_ENTRY},
     )
-    @mock.patch(BASE_PATH.format("CloudDataCatalogCreateEntryOperator.xcom_push"))
-    def test_assert_valid_hook_call(self, mock_xcom, mock_hook) -> None:
+    def test_assert_valid_hook_call(self, mock_hook) -> None:
         with pytest.warns(AirflowProviderDeprecationWarning):
             task = CloudDataCatalogCreateEntryOperator(
                 task_id="task_id",
@@ -161,8 +161,9 @@ def test_assert_valid_hook_call(self, mock_xcom, mock_hook) -> None:
                 gcp_conn_id=TEST_GCP_CONN_ID,
                 impersonation_chain=TEST_IMPERSONATION_CHAIN,
             )
-        context = mock.MagicMock()
-        result = task.execute(context=context)
+        mock_ti = mock.MagicMock()
+        mock_context = {"ti": mock_ti}
+        result = task.execute(context=mock_context)  # type: ignore[arg-type]
         mock_hook.assert_called_once_with(
             gcp_conn_id=TEST_GCP_CONN_ID,
             impersonation_chain=TEST_IMPERSONATION_CHAIN,
@@ -177,8 +178,7 @@ def test_assert_valid_hook_call(self, mock_xcom, mock_hook) -> None:
             timeout=TEST_TIMEOUT,
             metadata=TEST_METADATA,
         )
-        mock_xcom.assert_called_with(
-            context,
+        mock_ti.xcom_push.assert_any_call(
             key="entry_id",
             value=TEST_ENTRY_ID,
         )
@@ -186,8 +186,7 @@ def test_assert_valid_hook_call(self, mock_xcom, mock_hook) -> None:
         assert result == TEST_ENTRY_DICT
 
     @mock.patch("airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogHook")
-    @mock.patch(BASE_PATH.format("CloudDataCatalogCreateEntryOperator.xcom_push"))
-    def test_assert_valid_hook_call_when_exists(self, mock_xcom, mock_hook) -> None:
+    def test_assert_valid_hook_call_when_exists(self, mock_hook) -> None:
         mock_hook.return_value.create_entry.side_effect = AlreadyExists(message="message")
         mock_hook.return_value.get_entry.return_value = TEST_ENTRY
         with pytest.warns(AirflowProviderDeprecationWarning):
@@ -204,8 +203,9 @@ def test_assert_valid_hook_call_when_exists(self, mock_xcom, mock_hook) -> None:
                 gcp_conn_id=TEST_GCP_CONN_ID,
                 impersonation_chain=TEST_IMPERSONATION_CHAIN,
             )
-        context = mock.MagicMock()
-        result = task.execute(context=context)
+        mock_ti = mock.MagicMock()
+        mock_context = {"ti": mock_ti}
+        result = task.execute(context=mock_context)  # type: ignore[arg-type]
         mock_hook.assert_called_once_with(
             gcp_conn_id=TEST_GCP_CONN_ID,
             impersonation_chain=TEST_IMPERSONATION_CHAIN,
@@ -229,8 +229,7 @@ def test_assert_valid_hook_call_when_exists(self, mock_xcom, mock_hook) -> None:
             timeout=TEST_TIMEOUT,
             metadata=TEST_METADATA,
         )
-        mock_xcom.assert_called_with(
-            context,
+        mock_ti.xcom_push.assert_any_call(
             key="entry_id",
             value=TEST_ENTRY_ID,
         )
@@ -242,8 +241,7 @@ class TestCloudDataCatalogCreateEntryGroupOperator:
         "airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogHook",
         **{"return_value.create_entry_group.return_value": TEST_ENTRY_GROUP},
     )
-    @mock.patch(BASE_PATH.format("CloudDataCatalogCreateEntryGroupOperator.xcom_push"))
-    def test_assert_valid_hook_call(self, mock_xcom, mock_hook) -> None:
+    def test_assert_valid_hook_call(self, mock_hook) -> None:
         with pytest.warns(AirflowProviderDeprecationWarning):
             task = CloudDataCatalogCreateEntryGroupOperator(
                 task_id="task_id",
@@ -257,8 +255,9 @@ def test_assert_valid_hook_call(self, mock_xcom, mock_hook) -> None:
                 gcp_conn_id=TEST_GCP_CONN_ID,
                 impersonation_chain=TEST_IMPERSONATION_CHAIN,
             )
-        context = mock.MagicMock()
-        result = task.execute(context=context)
+        mock_ti = mock.MagicMock()
+        mock_context = {"ti": mock_ti}
+        result = task.execute(context=mock_context)  # type: ignore[arg-type]
         mock_hook.assert_called_once_with(
             gcp_conn_id=TEST_GCP_CONN_ID,
             impersonation_chain=TEST_IMPERSONATION_CHAIN,
@@ -272,8 +271,7 @@ def test_assert_valid_hook_call(self, mock_xcom, mock_hook) -> None:
             timeout=TEST_TIMEOUT,
             metadata=TEST_METADATA,
         )
-        mock_xcom.assert_called_with(
-            context,
+        mock_ti.xcom_push.assert_any_call(
             key="entry_group_id",
             value=TEST_ENTRY_GROUP_ID,
         )
@@ -285,8 +283,7 @@ class TestCloudDataCatalogCreateTagOperator:
         "airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogHook",
         **{"return_value.create_tag.return_value": TEST_TAG},
     )
-    @mock.patch(BASE_PATH.format("CloudDataCatalogCreateTagOperator.xcom_push"))
-    def test_assert_valid_hook_call(self, mock_xcom, mock_hook) -> None:
+    def test_assert_valid_hook_call(self, mock_hook) -> None:
         with pytest.warns(AirflowProviderDeprecationWarning):
             task = CloudDataCatalogCreateTagOperator(
                 task_id="task_id",
@@ -302,8 +299,9 @@ def test_assert_valid_hook_call(self, mock_xcom, mock_hook) -> None:
                 gcp_conn_id=TEST_GCP_CONN_ID,
                 impersonation_chain=TEST_IMPERSONATION_CHAIN,
             )
-        context = mock.MagicMock()
-        result = task.execute(context=context)
+        mock_ti = mock.MagicMock()
+        mock_context = {"ti": mock_ti}
+        result = task.execute(context=mock_context)  # type: ignore[arg-type]
         mock_hook.assert_called_once_with(
             gcp_conn_id=TEST_GCP_CONN_ID,
             impersonation_chain=TEST_IMPERSONATION_CHAIN,
@@ -319,8 +317,7 @@ def test_assert_valid_hook_call(self, mock_xcom, mock_hook) -> None:
             timeout=TEST_TIMEOUT,
             metadata=TEST_METADATA,
         )
-        mock_xcom.assert_called_with(
-            context,
+        mock_ti.xcom_push.assert_any_call(
             key="tag_id",
             value=TEST_TAG_ID,
         )
@@ -332,8 +329,7 @@ class TestCloudDataCatalogCreateTagTemplateOperator:
         "airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogHook",
         **{"return_value.create_tag_template.return_value": TEST_TAG_TEMPLATE},
     )
-    @mock.patch(BASE_PATH.format("CloudDataCatalogCreateTagTemplateOperator.xcom_push"))
-    def test_assert_valid_hook_call(self, mock_xcom, mock_hook) -> None:
+    def test_assert_valid_hook_call(self, mock_hook) -> None:
         with pytest.warns(AirflowProviderDeprecationWarning):
             task = CloudDataCatalogCreateTagTemplateOperator(
                 task_id="task_id",
@@ -347,8 +343,9 @@ def test_assert_valid_hook_call(self, mock_xcom, mock_hook) -> None:
                 gcp_conn_id=TEST_GCP_CONN_ID,
                 impersonation_chain=TEST_IMPERSONATION_CHAIN,
             )
-        context = mock.MagicMock()
-        result = task.execute(context=context)
+        mock_ti = mock.MagicMock()
+        mock_context = {"ti": mock_ti}
+        result = task.execute(context=mock_context)  # type: ignore[arg-type]
         mock_hook.assert_called_once_with(
             gcp_conn_id=TEST_GCP_CONN_ID,
             impersonation_chain=TEST_IMPERSONATION_CHAIN,
@@ -362,12 +359,11 @@ def test_assert_valid_hook_call(self, mock_xcom, mock_hook) -> None:
             timeout=TEST_TIMEOUT,
             metadata=TEST_METADATA,
         )
-        mock_xcom.assert_called_with(
-            context,
+        mock_ti.xcom_push.assert_any_call(
             key="tag_template_id",
             value=TEST_TAG_TEMPLATE_ID,
         )
-        assert result == {**result, **TEST_TAG_TEMPLATE_DICT}
+        assert result == TEST_TAG_TEMPLATE_DICT
 
 
 class TestCloudDataCatalogCreateTagTemplateFieldOperator:
@@ -375,8 +371,7 @@ class TestCloudDataCatalogCreateTagTemplateFieldOperator:
         "airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogHook",
         **{"return_value.create_tag_template_field.return_value": TEST_TAG_TEMPLATE_FIELD},  # type: ignore
     )
-    @mock.patch(BASE_PATH.format("CloudDataCatalogCreateTagTemplateFieldOperator.xcom_push"))
-    def test_assert_valid_hook_call(self, mock_xcom, mock_hook) -> None:
+    def test_assert_valid_hook_call(self, mock_hook) -> None:
         with pytest.warns(AirflowProviderDeprecationWarning):
             task = CloudDataCatalogCreateTagTemplateFieldOperator(
                 task_id="task_id",
@@ -391,8 +386,9 @@ def test_assert_valid_hook_call(self, mock_xcom, mock_hook) -> None:
                 gcp_conn_id=TEST_GCP_CONN_ID,
                 impersonation_chain=TEST_IMPERSONATION_CHAIN,
             )
-        context = mock.MagicMock()
-        result = task.execute(context=context)
+        mock_ti = mock.MagicMock()
+        mock_context = {"ti": mock_ti}
+        result = task.execute(context=mock_context)  # type: ignore[arg-type]
         mock_hook.assert_called_once_with(
             gcp_conn_id=TEST_GCP_CONN_ID,
             impersonation_chain=TEST_IMPERSONATION_CHAIN,
@@ -407,12 +403,11 @@ def test_assert_valid_hook_call(self, mock_xcom, mock_hook) -> None:
             timeout=TEST_TIMEOUT,
             metadata=TEST_METADATA,
         )
-        mock_xcom.assert_called_with(
-            context,
+        mock_ti.xcom_push.assert_any_call(
             key="tag_template_field_id",
             value=TEST_TAG_TEMPLATE_FIELD_ID,
         )
-        assert result == {**result, **TEST_TAG_TEMPLATE_FIELD_DICT}
+        assert result == TEST_TAG_TEMPLATE_FIELD_DICT
 
 
 class TestCloudDataCatalogDeleteEntryOperator:
diff --git a/providers/google/tests/unit/google/cloud/operators/test_dataflow.py b/providers/google/tests/unit/google/cloud/operators/test_dataflow.py
index a9bc77b02b6d3..c7e7622b65fbd 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_dataflow.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_dataflow.py
@@ -161,11 +161,11 @@ def deferrable_operator(self):
             cancel_timeout=CANCEL_TIMEOUT,
         )
 
-    @mock.patch(f"{DATAFLOW_PATH}.DataflowTemplatedJobStartOperator.xcom_push")
     @mock.patch(f"{DATAFLOW_PATH}.DataflowHook")
-    def test_execute(self, hook_mock, mock_xcom_push, sync_operator):
+    def test_execute(self, hook_mock, sync_operator):
         start_template_hook = hook_mock.return_value.start_template_dataflow
-        sync_operator.execute(None)
+        mock_context = {"task_instance": mock.MagicMock()}
+        sync_operator.execute(mock_context)
         assert hook_mock.called
         expected_options = {
             "project": "test",
@@ -231,9 +231,8 @@ def test_validation_deferrable_params_raises_error(self):
             DataflowTemplatedJobStartOperator(**init_kwargs)
 
     @pytest.mark.db_test
-    @mock.patch(f"{DATAFLOW_PATH}.DataflowTemplatedJobStartOperator.xcom_push")
     @mock.patch(f"{DATAFLOW_PATH}.DataflowHook.start_template_dataflow")
-    def test_start_with_custom_region(self, dataflow_mock, mock_xcom_push):
+    def test_start_with_custom_region(self, dataflow_mock):
         init_kwargs = {
             "task_id": TASK_ID,
             "template": TEMPLATE,
@@ -245,16 +244,16 @@ def test_start_with_custom_region(self, dataflow_mock, mock_xcom_push):
             "cancel_timeout": CANCEL_TIMEOUT,
         }
         operator = DataflowTemplatedJobStartOperator(**init_kwargs)
-        operator.execute(None)
+        mock_context = {"task_instance": mock.MagicMock()}
+        operator.execute(mock_context)
         assert dataflow_mock.called
         _, kwargs = dataflow_mock.call_args_list[0]
         assert kwargs["variables"]["region"] == TEST_REGION
         assert kwargs["location"] == DEFAULT_DATAFLOW_LOCATION
 
     @pytest.mark.db_test
-    @mock.patch(f"{DATAFLOW_PATH}.DataflowTemplatedJobStartOperator.xcom_push")
     @mock.patch(f"{DATAFLOW_PATH}.DataflowHook.start_template_dataflow")
-    def test_start_with_location(self, dataflow_mock, mock_xcom_push):
+    def test_start_with_location(self, dataflow_mock):
         init_kwargs = {
             "task_id": TASK_ID,
             "template": TEMPLATE,
@@ -264,7 +263,8 @@ def test_start_with_location(self, dataflow_mock, mock_xcom_push):
             "cancel_timeout": CANCEL_TIMEOUT,
         }
         operator = DataflowTemplatedJobStartOperator(**init_kwargs)
-        operator.execute(None)
+        mock_context = {"task_instance": mock.MagicMock()}
+        operator.execute(mock_context)
         assert dataflow_mock.called
         _, kwargs = dataflow_mock.call_args_list[0]
         assert not kwargs["variables"]
@@ -409,19 +409,18 @@ def test_execute_with_deferrable_mode(self, mock_hook, mock_defer_method, deferr
         )
         mock_defer_method.assert_called_once()
 
-    @mock.patch(f"{DATAFLOW_PATH}.DataflowStartYamlJobOperator.xcom_push")
     @mock.patch(f"{DATAFLOW_PATH}.DataflowHook")
-    def test_execute_complete_success(self, mock_hook, mock_xcom_push, deferrable_operator):
+    def test_execute_complete_success(self, mock_hook, deferrable_operator):
         expected_result = {"id": JOB_ID}
+        mock_context = {"task_instance": mock.MagicMock()}
         actual_result = deferrable_operator.execute_complete(
-            context=None,
+            context=mock_context,
             event={
                 "status": "success",
                 "message": "Batch job completed.",
                 "job": expected_result,
             },
         )
-        mock_xcom_push.assert_called_with(None, key="job_id", value=JOB_ID)
         assert actual_result == expected_result
 
     def test_execute_complete_error_status_raises_exception(self, deferrable_operator):
@@ -449,7 +448,8 @@ def test_exec_job_id(self, dataflow_mock):
         Test DataflowHook is created and the right args are passed to cancel_job.
         """
         cancel_job_hook = dataflow_mock.return_value.cancel_job
-        self.dataflow.execute(None)
+        mock_context = {"task_instance": mock.MagicMock()}
+        self.dataflow.execute(mock_context)
         assert dataflow_mock.called
         cancel_job_hook.assert_called_once_with(
             job_name=None,
@@ -473,7 +473,8 @@ def test_exec_job_name_prefix(self, dataflow_mock):
         """
         is_job_running_hook = dataflow_mock.return_value.is_job_dataflow_running
         cancel_job_hook = dataflow_mock.return_value.cancel_job
-        self.dataflow.execute(None)
+        mock_context = {"task_instance": mock.MagicMock()}
+        self.dataflow.execute(mock_context)
         assert dataflow_mock.called
         is_job_running_hook.assert_called_once_with(
             name=JOB_NAME,
diff --git a/providers/google/tests/unit/google/cloud/operators/test_dataproc.py b/providers/google/tests/unit/google/cloud/operators/test_dataproc.py
index 00923cb590a1f..91c2c0a351262 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_dataproc.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_dataproc.py
@@ -69,11 +69,11 @@
     DataprocSubmitTrigger,
 )
 from airflow.providers.google.common.consts import GOOGLE_DEFAULT_DEFERRABLE_METHOD_NAME
+from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.serialization.serialized_objects import SerializedDAG
 from airflow.utils.timezone import datetime
 
 from tests_common.test_utils.db import clear_db_runs, clear_db_xcom
-from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
diff --git a/providers/google/tests/unit/google/cloud/operators/test_functions.py b/providers/google/tests/unit/google/cloud/operators/test_functions.py
index b075236589364..47b3e4ebde680 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_functions.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_functions.py
@@ -693,9 +693,8 @@ def test_non_404_gcf_error_bubbled_up(self, mock_hook):
 
 
 class TestGcfFunctionInvokeOperator:
-    @mock.patch("airflow.providers.google.cloud.operators.functions.GoogleCloudBaseOperator.xcom_push")
     @mock.patch("airflow.providers.google.cloud.operators.functions.CloudFunctionsHook")
-    def test_execute(self, mock_gcf_hook, mock_xcom):
+    def test_execute(self, mock_gcf_hook):
         exec_id = "exec_id"
         mock_gcf_hook.return_value.call_function.return_value = {"executionId": exec_id}
 
@@ -715,8 +714,9 @@ def test_execute(self, mock_gcf_hook, mock_xcom):
             gcp_conn_id=gcp_conn_id,
             impersonation_chain=impersonation_chain,
         )
-        context = mock.MagicMock()
-        op.execute(context=context)
+        mock_ti = mock.MagicMock()
+        mock_context = {"ti": mock_ti}
+        op.execute(mock_context)
 
         mock_gcf_hook.assert_called_once_with(
             api_version=api_version,
@@ -728,8 +728,7 @@ def test_execute(self, mock_gcf_hook, mock_xcom):
             function_id=function_id, input_data=payload, location=GCP_LOCATION, project_id=GCP_PROJECT_ID
         )
 
-        mock_xcom.assert_called_with(
-            context=context,
+        mock_ti.xcom_push.assert_any_call(
             key="execution_id",
             value=exec_id,
         )
diff --git a/providers/google/tests/unit/google/cloud/operators/test_translate.py b/providers/google/tests/unit/google/cloud/operators/test_translate.py
index 957bd3ddd1b5b..4e20d8ee2ace3 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_translate.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_translate.py
@@ -214,9 +214,8 @@ def test_minimal_green_path(self, mock_hook, mock_link_persist):
 
 class TestTranslateDatasetCreate:
     @mock.patch("airflow.providers.google.cloud.operators.translate.TranslationNativeDatasetLink.persist")
-    @mock.patch("airflow.providers.google.cloud.operators.translate.TranslateCreateDatasetOperator.xcom_push")
     @mock.patch("airflow.providers.google.cloud.operators.translate.TranslateHook")
-    def test_minimal_green_path(self, mock_hook, mock_xcom_push, mock_link_persist):
+    def test_minimal_green_path(self, mock_hook, mock_link_persist):
         DS_CREATION_RESULT_SAMPLE = {
             "display_name": "",
             "example_count": 0,
@@ -249,8 +248,9 @@ def test_minimal_green_path(self, mock_hook, mock_xcom_push, mock_link_persist):
             timeout=TIMEOUT_VALUE,
             retry=None,
         )
-        context = mock.MagicMock()
-        result = op.execute(context=context)
+        mock_ti = mock.MagicMock()
+        mock_context = {"ti": mock_ti}
+        result = op.execute(context=mock_context)
         mock_hook.assert_called_once_with(
             gcp_conn_id=GCP_CONN_ID,
             impersonation_chain=IMPERSONATION_CHAIN,
@@ -263,9 +263,9 @@ def test_minimal_green_path(self, mock_hook, mock_xcom_push, mock_link_persist):
             retry=None,
             metadata=(),
         )
-        mock_xcom_push.assert_called_once_with(context, key="dataset_id", value=DATASET_ID)
+        mock_ti.xcom_push.assert_any_call(key="dataset_id", value=DATASET_ID)
         mock_link_persist.assert_called_once_with(
-            context=context,
+            context=mock_context,
             dataset_id=DATASET_ID,
             location=LOCATION,
             project_id=PROJECT_ID,
@@ -402,9 +402,8 @@ def test_minimal_green_path(self, mock_hook):
 
 class TestTranslateModelCreate:
     @mock.patch("airflow.providers.google.cloud.links.translate.TranslationModelLink.persist")
-    @mock.patch("airflow.providers.google.cloud.operators.translate.TranslateCreateModelOperator.xcom_push")
     @mock.patch("airflow.providers.google.cloud.operators.translate.TranslateHook")
-    def test_minimal_green_path(self, mock_hook, mock_xcom_push, mock_link_persist):
+    def test_minimal_green_path(self, mock_hook, mock_link_persist):
         MODEL_DISPLAY_NAME = "model_display_name_01"
         MODEL_CREATION_RESULT_SAMPLE = {
             "display_name": MODEL_DISPLAY_NAME,
@@ -435,8 +434,9 @@ def test_minimal_green_path(self, mock_hook, mock_xcom_push, mock_link_persist):
             timeout=TIMEOUT_VALUE,
             retry=None,
         )
-        context = mock.MagicMock()
-        result = op.execute(context=context)
+        mock_ti = mock.MagicMock()
+        mock_context = {"ti": mock_ti}
+        result = op.execute(context=mock_context)
         mock_hook.assert_called_once_with(
             gcp_conn_id=GCP_CONN_ID,
             impersonation_chain=IMPERSONATION_CHAIN,
@@ -450,9 +450,9 @@ def test_minimal_green_path(self, mock_hook, mock_xcom_push, mock_link_persist):
             retry=None,
             metadata=(),
         )
-        mock_xcom_push.assert_called_once_with(context, key="model_id", value=MODEL_ID)
+        mock_ti.xcom_push.assert_any_call(key="model_id", value=MODEL_ID)
         mock_link_persist.assert_called_once_with(
-            context=context,
+            context=mock_context,
             model_id=MODEL_ID,
             project_id=PROJECT_ID,
             dataset_id=DATASET_ID,
@@ -711,11 +711,8 @@ def test_minimal_green_path(self, mock_hook, mock_link_persist):
 
 
 class TestTranslateGlossaryCreate:
-    @mock.patch(
-        "airflow.providers.google.cloud.operators.translate.TranslateCreateGlossaryOperator.xcom_push"
-    )
     @mock.patch("airflow.providers.google.cloud.operators.translate.TranslateHook")
-    def test_minimal_green_path(self, mock_hook, mock_xcom_push):
+    def test_minimal_green_path(self, mock_hook):
         GLOSSARY_CREATION_RESULT = {
             "name": f"projects/{PROJECT_ID}/locations/{LOCATION}/glossaries/{GLOSSARY_ID}",
             "display_name": f"{GLOSSARY_ID}",
@@ -746,8 +743,9 @@ def test_minimal_green_path(self, mock_hook, mock_xcom_push):
             timeout=TIMEOUT_VALUE,
             retry=None,
         )
-        context = mock.MagicMock()
-        result = op.execute(context=context)
+        mock_ti = mock.MagicMock()
+        mock_context = {"ti": mock_ti}
+        result = op.execute(context=mock_context)
 
         mock_hook.assert_called_once_with(
             gcp_conn_id=GCP_CONN_ID,
@@ -764,7 +762,7 @@ def test_minimal_green_path(self, mock_hook, mock_xcom_push):
             retry=None,
             metadata=(),
         )
-        mock_xcom_push.assert_called_once_with(context, key="glossary_id", value=GLOSSARY_ID)
+        mock_ti.xcom_push.assert_any_call(key="glossary_id", value=GLOSSARY_ID)
         assert result == GLOSSARY_CREATION_RESULT
 
 
diff --git a/providers/google/tests/unit/google/cloud/operators/test_vertex_ai.py b/providers/google/tests/unit/google/cloud/operators/test_vertex_ai.py
index 67d11428cb76b..460e8b24847c3 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_vertex_ai.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_vertex_ai.py
@@ -439,14 +439,11 @@ def test_execute_enters_deferred_state(self, mock_hook):
         )
 
     @mock.patch(VERTEX_AI_LINKS_PATH.format("VertexAIModelLink.persist"))
-    @mock.patch(VERTEX_AI_PATH.format("custom_job.CreateCustomContainerTrainingJobOperator.xcom_push"))
     @mock.patch(
         VERTEX_AI_PATH.format("custom_job.CreateCustomContainerTrainingJobOperator.hook.extract_model_id")
     )
     @mock.patch(VERTEX_AI_PATH.format("custom_job.CreateCustomContainerTrainingJobOperator.hook"))
-    def test_execute_complete_success(
-        self, mock_hook, mock_hook_extract_model_id, mock_xcom_push, mock_link_persist
-    ):
+    def test_execute_complete_success(self, mock_hook, mock_hook_extract_model_id, mock_link_persist):
         task = CreateCustomContainerTrainingJobOperator(
             task_id=TASK_ID,
             gcp_conn_id=GCP_CONN_ID,
@@ -471,16 +468,20 @@ def test_execute_complete_success(
         )
         expected_result = TEST_TRAINING_PIPELINE_DATA["model_to_upload"]
         mock_hook_extract_model_id.return_value = "test-model"
+
+        mock_ti = mock.MagicMock()
+        mock_context = {"ti": mock_ti}
+
         actual_result = task.execute_complete(
-            context=None,
+            context=mock_context,
             event={
                 "status": "success",
                 "message": "",
                 "job": TEST_TRAINING_PIPELINE_DATA,
             },
         )
-        mock_xcom_push.assert_called_with(None, key="model_id", value="test-model")
-        mock_link_persist.assert_called_once_with(context=None, model_id="test-model")
+        mock_ti.xcom_push.assert_any_call(key="model_id", value="test-model")
+        mock_link_persist.assert_called_once_with(context=mock_context, model_id="test-model")
         assert actual_result == expected_result
 
     def test_execute_complete_error_status_raises_exception(self):
@@ -510,7 +511,6 @@ def test_execute_complete_error_status_raises_exception(self):
             task.execute_complete(context=None, event={"status": "error", "message": "test message"})
 
     @mock.patch(VERTEX_AI_LINKS_PATH.format("VertexAIModelLink.persist"))
-    @mock.patch(VERTEX_AI_PATH.format("custom_job.CreateCustomContainerTrainingJobOperator.xcom_push"))
     @mock.patch(
         VERTEX_AI_PATH.format("custom_job.CreateCustomContainerTrainingJobOperator.hook.extract_model_id")
     )
@@ -519,7 +519,6 @@ def test_execute_complete_no_model_produced(
         self,
         mock_hook,
         hook_extract_model_id,
-        mock_xcom_push,
         mock_link_persist,
     ):
         task = CreateCustomContainerTrainingJobOperator(
@@ -544,11 +543,16 @@ def test_execute_complete_no_model_produced(
         )
         expected_result = None
         hook_extract_model_id.return_value = None
+
+        mock_ti = mock.MagicMock()
+        mock_context = {"ti": mock_ti}
+
         actual_result = task.execute_complete(
-            context=None,
+            context=mock_context,
             event={"status": "success", "message": "", "job": TEST_TRAINING_PIPELINE_DATA_NO_MODEL},
         )
-        mock_xcom_push.assert_called_once()
+        # When no model is produced, xcom_push should still be called but with None value
+        mock_ti.xcom_push.assert_called_once()
         mock_link_persist.assert_not_called()
         assert actual_result == expected_result
 
@@ -765,7 +769,6 @@ def test_execute_enters_deferred_state(self, mock_hook):
         )
 
     @mock.patch(VERTEX_AI_LINKS_PATH.format("VertexAIModelLink.persist"))
-    @mock.patch(VERTEX_AI_PATH.format("custom_job.CreateCustomPythonPackageTrainingJobOperator.xcom_push"))
     @mock.patch(
         VERTEX_AI_PATH.format("custom_job.CreateCustomPythonPackageTrainingJobOperator.hook.extract_model_id")
     )
@@ -774,7 +777,6 @@ def test_execute_complete_success(
         self,
         mock_hook,
         hook_extract_model_id,
-        mock_xcom_push,
         mock_link_persist,
     ):
         task = CreateCustomPythonPackageTrainingJobOperator(
@@ -802,16 +804,20 @@ def test_execute_complete_success(
         )
         expected_result = TEST_TRAINING_PIPELINE_DATA["model_to_upload"]
         hook_extract_model_id.return_value = "test-model"
+
+        mock_ti = mock.MagicMock()
+        mock_context = {"ti": mock_ti}
+
         actual_result = task.execute_complete(
-            context=None,
+            context=mock_context,
             event={
                 "status": "success",
                 "message": "",
                 "job": TEST_TRAINING_PIPELINE_DATA,
             },
         )
-        mock_xcom_push.assert_called_with(None, key="model_id", value="test-model")
-        mock_link_persist.assert_called_once_with(context=None, model_id="test-model")
+        mock_ti.xcom_push.assert_any_call(key="model_id", value="test-model")
+        mock_link_persist.assert_called_once_with(context=mock_context, model_id="test-model")
         assert actual_result == expected_result
 
     def test_execute_complete_error_status_raises_exception(self):
@@ -842,7 +848,6 @@ def test_execute_complete_error_status_raises_exception(self):
             task.execute_complete(context=None, event={"status": "error", "message": "test message"})
 
     @mock.patch(VERTEX_AI_LINKS_PATH.format("VertexAIModelLink.persist"))
-    @mock.patch(VERTEX_AI_PATH.format("custom_job.CreateCustomPythonPackageTrainingJobOperator.xcom_push"))
     @mock.patch(
         VERTEX_AI_PATH.format("custom_job.CreateCustomPythonPackageTrainingJobOperator.hook.extract_model_id")
     )
@@ -851,7 +856,6 @@ def test_execute_complete_no_model_produced(
         self,
         mock_hook,
         hook_extract_model_id,
-        mock_xcom_push,
         mock_link_persist,
     ):
         task = CreateCustomPythonPackageTrainingJobOperator(
@@ -875,12 +879,15 @@ def test_execute_complete_no_model_produced(
             project_id=GCP_PROJECT,
             deferrable=True,
         )
+
+        mock_ti = mock.MagicMock()
+
         expected_result = None
         actual_result = task.execute_complete(
-            context=None,
+            context={"ti": mock_ti},
             event={"status": "success", "message": "", "job": TEST_TRAINING_PIPELINE_DATA_NO_MODEL},
         )
-        mock_xcom_push.assert_called_once()
+        mock_ti.xcom_push.assert_called_once()
         mock_link_persist.assert_not_called()
         assert actual_result == expected_result
 
@@ -1076,14 +1083,12 @@ def test_execute_enters_deferred_state(self, mock_hook):
         )
 
     @mock.patch(VERTEX_AI_LINKS_PATH.format("VertexAIModelLink.persist"))
-    @mock.patch(VERTEX_AI_PATH.format("custom_job.CreateCustomTrainingJobOperator.xcom_push"))
     @mock.patch(VERTEX_AI_PATH.format("custom_job.CreateCustomTrainingJobOperator.hook.extract_model_id"))
     @mock.patch(VERTEX_AI_PATH.format("custom_job.CreateCustomTrainingJobOperator.hook"))
     def test_execute_complete_success(
         self,
         mock_hook,
         hook_extract_model_id,
-        mock_xcom_push,
         mock_link_persist,
     ):
         task = CreateCustomTrainingJobOperator(
@@ -1104,16 +1109,18 @@ def test_execute_complete_success(
         )
         expected_result = TEST_TRAINING_PIPELINE_DATA["model_to_upload"]
         hook_extract_model_id.return_value = "test-model"
+
+        mock_ti = mock.MagicMock()
         actual_result = task.execute_complete(
-            context=None,
+            context={"ti": mock_ti},
             event={
                 "status": "success",
                 "message": "",
                 "job": TEST_TRAINING_PIPELINE_DATA,
             },
         )
-        mock_xcom_push.assert_called_with(None, key="model_id", value="test-model")
-        mock_link_persist.assert_called_once_with(context=None, model_id="test-model")
+        mock_ti.xcom_push.assert_called_with(key="model_id", value="test-model")
+        mock_link_persist.assert_called_once_with(context={"ti": mock_ti}, model_id="test-model")
         assert actual_result == expected_result
 
     def test_execute_complete_error_status_raises_exception(self):
@@ -1127,7 +1134,6 @@ def test_execute_complete_error_status_raises_exception(self):
             args=PYTHON_PACKAGE_CMDARGS,
             container_uri=CONTAINER_URI,
             model_serving_container_image_uri=CONTAINER_URI,
-            requirements=[],
             replica_count=1,
             region=GCP_LOCATION,
             project_id=GCP_PROJECT,
@@ -1137,14 +1143,12 @@ def test_execute_complete_error_status_raises_exception(self):
             task.execute_complete(context=None, event={"status": "error", "message": "test message"})
 
     @mock.patch(VERTEX_AI_LINKS_PATH.format("VertexAIModelLink.persist"))
-    @mock.patch(VERTEX_AI_PATH.format("custom_job.CreateCustomTrainingJobOperator.xcom_push"))
     @mock.patch(VERTEX_AI_PATH.format("custom_job.CreateCustomTrainingJobOperator.hook.extract_model_id"))
     @mock.patch(VERTEX_AI_PATH.format("custom_job.CreateCustomTrainingJobOperator.hook"))
     def test_execute_complete_no_model_produced(
         self,
         mock_hook,
         hook_extract_model_id,
-        mock_xcom_push,
         mock_link_persist,
     ):
         task = CreateCustomTrainingJobOperator(
@@ -1164,10 +1168,14 @@ def test_execute_complete_no_model_produced(
         )
         expected_result = None
         hook_extract_model_id.return_value = None
+
+        mock_ti = mock.MagicMock()
+        mock_context = {"ti": mock_ti}
+
         actual_result = task.execute_complete(
-            context=None, event={"status": "success", "message": "", "job": {}}
+            context=mock_context, event={"status": "success", "message": "", "job": {}}
         )
-        mock_xcom_push.assert_called_once()
+        mock_ti.xcom_push.assert_called_once()
         mock_link_persist.assert_not_called()
         assert actual_result == expected_result
 
@@ -2115,10 +2123,10 @@ def test_execute_deferrable(self, mock_hook, mock_link_persist):
         assert exception_info.value.trigger.poll_interval == 10
         assert exception_info.value.trigger.impersonation_chain == IMPERSONATION_CHAIN
 
-    @mock.patch(VERTEX_AI_PATH.format("batch_prediction_job.CreateBatchPredictionJobOperator.xcom_push"))
     @mock.patch(VERTEX_AI_PATH.format("batch_prediction_job.BatchPredictionJobHook"))
-    def test_execute_complete(self, mock_hook, mock_xcom_push):
-        context = mock.MagicMock()
+    def test_execute_complete(self, mock_hook):
+        mock_ti = mock.MagicMock()
+        mock_context = {"ti": mock_ti}
         mock_job = {"name": TEST_JOB_DISPLAY_NAME}
         event = {
             "status": "success",
@@ -2139,14 +2147,13 @@ def test_execute_complete(self, mock_hook, mock_xcom_push):
             create_request_timeout=TEST_CREATE_REQUEST_TIMEOUT,
             batch_size=TEST_BATCH_SIZE,
         )
-        execute_complete_result = op.execute_complete(context=context, event=event)
+        execute_complete_result = op.execute_complete(context=mock_context, event=event)
 
         mock_hook.return_value.extract_batch_prediction_job_id.assert_called_once_with(mock_job)
-        mock_xcom_push.assert_has_calls(
+        mock_ti.xcom_push.assert_has_calls(
             [
-                call(context, key="batch_prediction_job_id", value=TEST_BATCH_PREDICTION_JOB_ID),
+                call(key="batch_prediction_job_id", value=TEST_BATCH_PREDICTION_JOB_ID),
                 call(
-                    context,
                     key="training_conf",
                     value={
                         "training_conf_id": TEST_BATCH_PREDICTION_JOB_ID,
@@ -2969,9 +2976,8 @@ def test_execute_enters_deferred_state(self, mock_hook):
             task.execute(context={"ti": mock.MagicMock(), "task": mock.MagicMock()})
         assert isinstance(exc.value.trigger, RunPipelineJobTrigger), "Trigger is not a RunPipelineJobTrigger"
 
-    @mock.patch(VERTEX_AI_PATH.format("pipeline_job.RunPipelineJobOperator.xcom_push"))
     @mock.patch(VERTEX_AI_PATH.format("pipeline_job.PipelineJobHook"))
-    def test_execute_complete_success(self, mock_hook, mock_xcom_push):
+    def test_execute_complete_success(self, mock_hook):
         task = RunPipelineJobOperator(
             task_id=TASK_ID,
             gcp_conn_id=GCP_CONN_ID,
@@ -2987,9 +2993,12 @@ def test_execute_complete_success(self, mock_hook, mock_xcom_push):
             "name": f"projects/{GCP_PROJECT}/locations/{GCP_LOCATION}/pipelineJobs/{TEST_PIPELINE_JOB_ID}",
         }
         mock_hook.return_value.exists.return_value = False
-        mock_xcom_push.return_value = None
+
+        mock_ti = mock.MagicMock()
+        mock_context = {"ti": mock_ti}
+
         actual_result = task.execute_complete(
-            context=None, event={"status": "success", "message": "", "job": expected_pipeline_job}
+            context=mock_context, event={"status": "success", "message": "", "job": expected_pipeline_job}
         )
         assert actual_result == expected_result
 
diff --git a/providers/google/tests/unit/google/cloud/transfers/test_sheets_to_gcs.py b/providers/google/tests/unit/google/cloud/transfers/test_sheets_to_gcs.py
index 797203ae818a6..5e4446a6c2034 100644
--- a/providers/google/tests/unit/google/cloud/transfers/test_sheets_to_gcs.py
+++ b/providers/google/tests/unit/google/cloud/transfers/test_sheets_to_gcs.py
@@ -78,14 +78,15 @@ def test_upload_data(self, mock_tempfile, mock_writer):
 
     @mock.patch("airflow.providers.google.cloud.transfers.sheets_to_gcs.GCSHook")
     @mock.patch("airflow.providers.google.cloud.transfers.sheets_to_gcs.GSheetsHook")
-    @mock.patch("airflow.providers.google.cloud.transfers.sheets_to_gcs.GoogleSheetsToGCSOperator.xcom_push")
     @mock.patch(
         "airflow.providers.google.cloud.transfers.sheets_to_gcs.GoogleSheetsToGCSOperator._upload_data"
     )
-    def test_execute(self, mock_upload_data, mock_xcom, mock_sheet_hook, mock_gcs_hook):
-        context = {}
+    def test_execute(self, mock_upload_data, mock_sheet_hook, mock_gcs_hook):
+        mock_ti = mock.MagicMock()
+        mock_context = {"ti": mock_ti}
         data = ["data1", "data2"]
         mock_sheet_hook.return_value.get_sheet_titles.return_value = RANGES
+        mock_sheet_hook.return_value.get_values.side_effect = data
         mock_upload_data.side_effect = [PATH, PATH]
 
         op = GoogleSheetsToGCSOperator(
@@ -97,7 +98,7 @@ def test_execute(self, mock_upload_data, mock_xcom, mock_sheet_hook, mock_gcs_ho
             gcp_conn_id=GCP_CONN_ID,
             impersonation_chain=IMPERSONATION_CHAIN,
         )
-        op.execute(context)
+        op.execute(mock_context)
 
         mock_sheet_hook.assert_called_once_with(
             gcp_conn_id=GCP_CONN_ID,
@@ -115,9 +116,12 @@ def test_execute(self, mock_upload_data, mock_xcom, mock_sheet_hook, mock_gcs_ho
         calls = [mock.call(spreadsheet_id=SPREADSHEET_ID, range_=r) for r in RANGES]
         mock_sheet_hook.return_value.get_values.assert_has_calls(calls)
 
-        calls = [mock.call(mock_gcs_hook, mock_sheet_hook, r, v) for r, v in zip(RANGES, data)]
-        mock_upload_data.assert_called()
+        calls = [
+            mock.call(mock_gcs_hook.return_value, mock_sheet_hook.return_value, r, v)
+            for r, v in zip(RANGES, data)
+        ]
+        mock_upload_data.assert_has_calls(calls)
         actual_call_count = mock_upload_data.call_count
         assert len(RANGES) == actual_call_count
 
-        mock_xcom.assert_called_once_with(context, "destination_objects", [PATH, PATH])
+        mock_ti.xcom_push.assert_called_once_with(key="destination_objects", value=[PATH, PATH])
diff --git a/providers/google/tests/unit/google/cloud/utils/airflow_util.py b/providers/google/tests/unit/google/cloud/utils/airflow_util.py
index 891a00780b594..3e0b14cb0a567 100644
--- a/providers/google/tests/unit/google/cloud/utils/airflow_util.py
+++ b/providers/google/tests/unit/google/cloud/utils/airflow_util.py
@@ -28,7 +28,7 @@
 from airflow.utils.types import DagRunType
 
 if TYPE_CHECKING:
-    from airflow.models.baseoperator import BaseOperator
+    from airflow.providers.google.version_compat import BaseOperator
 
 
 def get_dag_run(dag_id: str = "test_dag_id", run_id: str = "test_dag_id") -> DagRun:
diff --git a/providers/google/tests/unit/google/marketing_platform/links/test_analytics_admin.py b/providers/google/tests/unit/google/marketing_platform/links/test_analytics_admin.py
index bb015c9be2485..9a1db76e79b7e 100644
--- a/providers/google/tests/unit/google/marketing_platform/links/test_analytics_admin.py
+++ b/providers/google/tests/unit/google/marketing_platform/links/test_analytics_admin.py
@@ -55,17 +55,15 @@ def test_get_link_not_found(self, mock_xcom):
         assert url == ""
 
     def test_persist(self):
-        mock_context = mock.MagicMock()
         mock_task_instance = mock.MagicMock()
+        mock_context = {"task_instance": mock_task_instance}
 
         GoogleAnalyticsPropertyLink.persist(
             context=mock_context,
-            task_instance=mock_task_instance,
             property_id=TEST_PROPERTY_ID,
         )
 
         mock_task_instance.xcom_push.assert_called_once_with(
-            mock_context,
             key=GoogleAnalyticsPropertyLink.key,
             value={"property_id": TEST_PROPERTY_ID},
         )
diff --git a/providers/google/tests/unit/google/marketing_platform/operators/test_campaign_manager.py b/providers/google/tests/unit/google/marketing_platform/operators/test_campaign_manager.py
index cb2af61d9d297..f2240b79aa586 100644
--- a/providers/google/tests/unit/google/marketing_platform/operators/test_campaign_manager.py
+++ b/providers/google/tests/unit/google/marketing_platform/operators/test_campaign_manager.py
@@ -102,13 +102,8 @@ def teardown_method(self):
     )
     @mock.patch("airflow.providers.google.marketing_platform.operators.campaign_manager.GCSHook")
     @mock.patch("airflow.providers.google.marketing_platform.operators.campaign_manager.BaseOperator")
-    @mock.patch(
-        "airflow.providers.google.marketing_platform.operators."
-        "campaign_manager.GoogleCampaignManagerDownloadReportOperator.xcom_push"
-    )
     def test_execute(
         self,
-        xcom_mock,
         mock_base_op,
         gcs_hook_mock,
         hook_mock,
@@ -120,6 +115,9 @@ def test_execute(
             True,
         )
         tempfile_mock.NamedTemporaryFile.return_value.__enter__.return_value.name = TEMP_FILE_NAME
+
+        mock_context = {"task_instance": mock.Mock()}
+
         op = GoogleCampaignManagerDownloadReportOperator(
             profile_id=PROFILE_ID,
             report_id=REPORT_ID,
@@ -129,7 +127,7 @@ def test_execute(
             api_version=API_VERSION,
             task_id="test_task",
         )
-        op.execute(context=None)
+        op.execute(context=mock_context)
         hook_mock.assert_called_once_with(
             gcp_conn_id=GCP_CONN_ID,
             api_version=API_VERSION,
@@ -149,7 +147,9 @@ def test_execute(
             filename=TEMP_FILE_NAME,
             mime_type="text/csv",
         )
-        xcom_mock.assert_called_once_with(None, key="report_name", value=REPORT_NAME + ".gz")
+        mock_context["task_instance"].xcom_push.assert_called_once_with(
+            key="report_name", value=REPORT_NAME + ".gz"
+        )
 
     @pytest.mark.parametrize(
         "test_bucket_name",
@@ -214,13 +214,11 @@ class TestGoogleCampaignManagerInsertReportOperator:
         "airflow.providers.google.marketing_platform.operators.campaign_manager.GoogleCampaignManagerHook"
     )
     @mock.patch("airflow.providers.google.marketing_platform.operators.campaign_manager.BaseOperator")
-    @mock.patch(
-        "airflow.providers.google.marketing_platform.operators."
-        "campaign_manager.GoogleCampaignManagerInsertReportOperator.xcom_push"
-    )
-    def test_execute(self, xcom_mock, mock_base_op, hook_mock):
+    def test_execute(self, mock_base_op, hook_mock):
         report = {"report": "test"}
 
+        mock_context = {"task_instance": mock.Mock()}
+
         hook_mock.return_value.insert_report.return_value = {"id": REPORT_ID}
 
         op = GoogleCampaignManagerInsertReportOperator(
@@ -229,14 +227,14 @@ def test_execute(self, xcom_mock, mock_base_op, hook_mock):
             api_version=API_VERSION,
             task_id="test_task",
         )
-        op.execute(context=None)
+        op.execute(context=mock_context)
         hook_mock.assert_called_once_with(
             gcp_conn_id=GCP_CONN_ID,
             api_version=API_VERSION,
             impersonation_chain=None,
         )
         hook_mock.return_value.insert_report.assert_called_once_with(profile_id=PROFILE_ID, report=report)
-        xcom_mock.assert_called_once_with(None, key="report_id", value=REPORT_ID)
+        mock_context["task_instance"].xcom_push.assert_called_once_with(key="report_id", value=REPORT_ID)
 
     def test_prepare_template(self):
         report = {"key": "value"}
@@ -260,13 +258,11 @@ class TestGoogleCampaignManagerRunReportOperator:
         "airflow.providers.google.marketing_platform.operators.campaign_manager.GoogleCampaignManagerHook"
     )
     @mock.patch("airflow.providers.google.marketing_platform.operators.campaign_manager.BaseOperator")
-    @mock.patch(
-        "airflow.providers.google.marketing_platform.operators."
-        "campaign_manager.GoogleCampaignManagerRunReportOperator.xcom_push"
-    )
-    def test_execute(self, xcom_mock, mock_base_op, hook_mock):
+    def test_execute(self, mock_base_op, hook_mock):
         synchronous = True
 
+        mock_context = {"task_instance": mock.Mock()}
+
         hook_mock.return_value.run_report.return_value = {"id": FILE_ID}
 
         op = GoogleCampaignManagerRunReportOperator(
@@ -276,7 +272,7 @@ def test_execute(self, xcom_mock, mock_base_op, hook_mock):
             api_version=API_VERSION,
             task_id="test_task",
         )
-        op.execute(context=None)
+        op.execute(context=mock_context)
         hook_mock.assert_called_once_with(
             gcp_conn_id=GCP_CONN_ID,
             api_version=API_VERSION,
@@ -285,7 +281,7 @@ def test_execute(self, xcom_mock, mock_base_op, hook_mock):
         hook_mock.return_value.run_report.assert_called_once_with(
             profile_id=PROFILE_ID, report_id=REPORT_ID, synchronous=synchronous
         )
-        xcom_mock.assert_called_once_with(None, key="file_id", value=FILE_ID)
+        mock_context["task_instance"].xcom_push.assert_called_once_with(key="file_id", value=FILE_ID)
 
 
 class TestGoogleCampaignManagerBatchInsertConversionsOperator:
diff --git a/providers/google/tests/unit/google/marketing_platform/operators/test_display_video.py b/providers/google/tests/unit/google/marketing_platform/operators/test_display_video.py
index 8596743dd7d6b..db361c80f4a64 100644
--- a/providers/google/tests/unit/google/marketing_platform/operators/test_display_video.py
+++ b/providers/google/tests/unit/google/marketing_platform/operators/test_display_video.py
@@ -83,10 +83,6 @@ def teardown_method(self):
     @mock.patch("airflow.providers.google.marketing_platform.operators.display_video.shutil")
     @mock.patch("airflow.providers.google.marketing_platform.operators.display_video.urllib.request")
     @mock.patch("airflow.providers.google.marketing_platform.operators.display_video.tempfile")
-    @mock.patch(
-        "airflow.providers.google.marketing_platform.operators."
-        "display_video.GoogleDisplayVideo360DownloadReportV2Operator.xcom_push"
-    )
     @mock.patch("airflow.providers.google.marketing_platform.operators.display_video.GCSHook")
     @mock.patch(
         "airflow.providers.google.marketing_platform.operators.display_video.GoogleDisplayVideo360Hook"
@@ -95,7 +91,6 @@ def test_execute(
         self,
         mock_hook,
         mock_gcs_hook,
-        mock_xcom,
         mock_temp,
         mock_request,
         mock_shutil,
@@ -109,6 +104,9 @@ def test_execute(
                 "googleCloudStoragePath": file_path,
             }
         }
+        # Create mock context with task_instance
+        mock_context = {"task_instance": mock.Mock()}
+
         op = GoogleDisplayVideo360DownloadReportV2Operator(
             query_id=QUERY_ID,
             report_id=REPORT_ID,
@@ -118,9 +116,9 @@ def test_execute(
         )
         if should_except:
             with pytest.raises(AirflowException):
-                op.execute(context=None)
+                op.execute(context=mock_context)
             return
-        op.execute(context=None)
+        op.execute(context=mock_context)
         mock_hook.assert_called_once_with(
             gcp_conn_id=GCP_CONN_ID,
             api_version="v2",
@@ -139,7 +137,9 @@ def test_execute(
             mime_type="text/csv",
             object_name=REPORT_NAME + ".gz",
         )
-        mock_xcom.assert_called_once_with(None, key="report_name", value=REPORT_NAME + ".gz")
+        mock_context["task_instance"].xcom_push.assert_called_once_with(
+            key="report_name", value=REPORT_NAME + ".gz"
+        )
 
     @pytest.mark.parametrize(
         "test_bucket_name",
@@ -199,15 +199,15 @@ def f():
 
 
 class TestGoogleDisplayVideo360RunQueryOperator:
-    @mock.patch(
-        "airflow.providers.google.marketing_platform.operators."
-        "display_video.GoogleDisplayVideo360RunQueryOperator.xcom_push"
-    )
     @mock.patch(
         "airflow.providers.google.marketing_platform.operators.display_video.GoogleDisplayVideo360Hook"
     )
-    def test_execute(self, hook_mock, mock_xcom):
+    def test_execute(self, hook_mock):
         parameters = {"param": "test"}
+
+        # Create mock context with task_instance
+        mock_context = {"task_instance": mock.Mock()}
+
         hook_mock.return_value.run_query.return_value = {
             "key": {
                 "queryId": QUERY_ID,
@@ -220,15 +220,15 @@ def test_execute(self, hook_mock, mock_xcom):
             api_version=API_VERSION,
             task_id="test_task",
         )
-        op.execute(context=None)
+        op.execute(context=mock_context)
         hook_mock.assert_called_once_with(
             gcp_conn_id=GCP_CONN_ID,
             api_version=API_VERSION,
             impersonation_chain=None,
         )
 
-        mock_xcom.assert_any_call(None, key="query_id", value=QUERY_ID)
-        mock_xcom.assert_any_call(None, key="report_id", value=REPORT_ID)
+        mock_context["task_instance"].xcom_push.assert_any_call(key="query_id", value=QUERY_ID)
+        mock_context["task_instance"].xcom_push.assert_any_call(key="report_id", value=REPORT_ID)
         hook_mock.return_value.run_query.assert_called_once_with(query_id=QUERY_ID, params=parameters)
 
 
@@ -388,20 +388,20 @@ def test_execute(self, mock_temp, gcs_mock_hook, mock_hook):
 
 
 class TestGoogleDisplayVideo360CreateSDFDownloadTaskOperator:
-    @mock.patch(
-        "airflow.providers.google.marketing_platform.operators."
-        "display_video.GoogleDisplayVideo360CreateSDFDownloadTaskOperator.xcom_push"
-    )
     @mock.patch(
         "airflow.providers.google.marketing_platform.operators.display_video.GoogleDisplayVideo360Hook"
     )
-    def test_execute(self, mock_hook, xcom_mock):
+    def test_execute(self, mock_hook):
         body_request = {
             "version": "1",
             "id": "id",
             "filter": {"id": []},
         }
         test_name = "test_task"
+
+        # Create mock context with task_instance
+        mock_context = {"task_instance": mock.Mock()}
+
         mock_hook.return_value.create_sdf_download_operation.return_value = {"name": test_name}
 
         op = GoogleDisplayVideo360CreateSDFDownloadTaskOperator(
@@ -411,7 +411,7 @@ def test_execute(self, mock_hook, xcom_mock):
             task_id="test_task",
         )
 
-        op.execute(context=None)
+        op.execute(context=mock_context)
         mock_hook.assert_called_once_with(
             gcp_conn_id=GCP_CONN_ID,
             api_version=API_VERSION,
@@ -422,29 +422,29 @@ def test_execute(self, mock_hook, xcom_mock):
         mock_hook.return_value.create_sdf_download_operation.assert_called_once_with(
             body_request=body_request
         )
-        xcom_mock.assert_called_once_with(None, key="name", value=test_name)
+        mock_context["task_instance"].xcom_push.assert_called_once_with(key="name", value=test_name)
 
 
 class TestGoogleDisplayVideo360CreateQueryOperator:
-    @mock.patch(
-        "airflow.providers.google.marketing_platform.operators."
-        "display_video.GoogleDisplayVideo360CreateQueryOperator.xcom_push"
-    )
     @mock.patch(
         "airflow.providers.google.marketing_platform.operators.display_video.GoogleDisplayVideo360Hook"
     )
-    def test_execute(self, hook_mock, xcom_mock):
+    def test_execute(self, hook_mock):
         body = {"body": "test"}
+
+        # Create mock context with task_instance
+        mock_context = {"task_instance": mock.Mock()}
+
         hook_mock.return_value.create_query.return_value = {"queryId": QUERY_ID}
         op = GoogleDisplayVideo360CreateQueryOperator(body=body, task_id="test_task")
-        op.execute(context=None)
+        op.execute(context=mock_context)
         hook_mock.assert_called_once_with(
             gcp_conn_id=GCP_CONN_ID,
             api_version="v2",
             impersonation_chain=None,
         )
         hook_mock.return_value.create_query.assert_called_once_with(query=body)
-        xcom_mock.assert_called_once_with(None, key="query_id", value=QUERY_ID)
+        mock_context["task_instance"].xcom_push.assert_called_once_with(key="query_id", value=QUERY_ID)
 
     def test_prepare_template(self):
         body = {"key": "value"}
diff --git a/providers/google/tests/unit/google/suite/operators/test_sheets.py b/providers/google/tests/unit/google/suite/operators/test_sheets.py
index 6e04a2b9fe56d..1d0fc216c0308 100644
--- a/providers/google/tests/unit/google/suite/operators/test_sheets.py
+++ b/providers/google/tests/unit/google/suite/operators/test_sheets.py
@@ -27,11 +27,9 @@
 
 class TestGoogleSheetsCreateSpreadsheet:
     @mock.patch("airflow.providers.google.suite.operators.sheets.GSheetsHook")
-    @mock.patch(
-        "airflow.providers.google.suite.operators.sheets.GoogleSheetsCreateSpreadsheetOperator.xcom_push"
-    )
-    def test_execute(self, mock_xcom, mock_hook):
-        context = {}
+    def test_execute(self, mock_hook):
+        mock_task_instance = mock.MagicMock()
+        context = {"task_instance": mock_task_instance}
         spreadsheet = mock.MagicMock()
         mock_hook.return_value.create_spreadsheet.return_value = {
             "spreadsheetId": SPREADSHEET_ID,
@@ -44,5 +42,10 @@ def test_execute(self, mock_xcom, mock_hook):
 
         mock_hook.return_value.create_spreadsheet.assert_called_once_with(spreadsheet=spreadsheet)
 
+        # Verify xcom_push was called with correct arguments
+        assert mock_task_instance.xcom_push.call_count == 2
+        mock_task_instance.xcom_push.assert_any_call(key="spreadsheet_id", value=SPREADSHEET_ID)
+        mock_task_instance.xcom_push.assert_any_call(key="spreadsheet_url", value=SPREADSHEET_URL)
+
         assert op_execute_result["spreadsheetId"] == "1234567890"
         assert op_execute_result["spreadsheetUrl"] == "https://example/sheets"

From 3ef47449cf3151cca54e69442c7182e0f3a490f3 Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Sat, 28 Jun 2025 11:57:47 +0530
Subject: [PATCH 248/381] Add Python <=> Airflow compat filtering for breeze
 (#52386)

---
 .../commands/release_management_commands.py   | 23 +++++++++++++++++++
 .../src/airflow_breeze/global_constants.py    |  5 ++++
 2 files changed, 28 insertions(+)

diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index 9474cce67b50f..d3fb805f03d10 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -98,6 +98,7 @@
     DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
     DESTINATION_LOCATIONS,
     MULTI_PLATFORM,
+    PYTHON_TO_MIN_AIRFLOW_MAPPING,
     UV_VERSION,
 )
 from airflow_breeze.params.shell_params import ShellParams
@@ -2756,6 +2757,21 @@ def generate_issue_content_core(
     )
 
 
+def is_airflow_version_supported_for_python(airflow_version: str, python_version: str) -> bool:
+    from packaging.version import Version
+
+    min_airflow_version = PYTHON_TO_MIN_AIRFLOW_MAPPING.get(python_version)
+    if not min_airflow_version:
+        return False
+    return Version(airflow_version) >= Version(min_airflow_version)
+
+
+def get_airflow_versions_supported_by_python(
+    all_airflow_versions: list[str], python_version: str
+) -> list[str]:
+    return [v for v in all_airflow_versions if is_airflow_version_supported_for_python(v, python_version)]
+
+
 def get_all_constraint_files(
     refresh_constraints: bool,
     python_version: str,
@@ -2764,6 +2780,13 @@ def get_all_constraint_files(
     if refresh_constraints:
         shutil.rmtree(CONSTRAINTS_CACHE_PATH, ignore_errors=True)
     all_airflow_versions, airflow_release_dates = get_active_airflow_versions(confirm=False)
+
+    get_console().print(
+        f"[info]Filtering to only use airflow versions supported by current python version: {python_version}[/]"
+    )
+
+    all_airflow_versions = get_airflow_versions_supported_by_python(all_airflow_versions, python_version)
+
     if not CONSTRAINTS_CACHE_PATH.exists():
         with ci_group(f"Downloading constraints for all Airflow versions for Python {python_version}"):
             CONSTRAINTS_CACHE_PATH.mkdir(parents=True, exist_ok=True)
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py b/dev/breeze/src/airflow_breeze/global_constants.py
index b2a381c854d77..224a6d3be56e1 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -46,6 +46,11 @@
 # Checked before putting in build cache
 ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS = ["3.10", "3.11", "3.12"]
 DEFAULT_PYTHON_MAJOR_MINOR_VERSION = ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS[0]
+
+# Maps each supported Python version to the minimum Airflow version that supports it.
+# Used to filter Airflow versions incompatible with a given Python runtime.
+PYTHON_TO_MIN_AIRFLOW_MAPPING = {"3.10": "2.4.0"}
+
 ALLOWED_ARCHITECTURES = [Architecture.X86_64, Architecture.ARM]
 # Database Backends used when starting Breeze. The "none" value means that the configuration is invalid.
 # No database will be started - access to a database will fail.

From 0c2e41631181c28718366e8d4b2d81b7f2bcf53f Mon Sep 17 00:00:00 2001
From: arvindp25 <58228701+arvindp25@users.noreply.github.com>
Date: Sat, 28 Jun 2025 12:00:23 +0530
Subject: [PATCH 249/381] docstring update for gcp dataplex operator and hook
 (#52387)

---
 .../google/src/airflow/providers/google/cloud/hooks/dataplex.py | 2 +-
 .../src/airflow/providers/google/cloud/operators/dataplex.py    | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/providers/google/src/airflow/providers/google/cloud/hooks/dataplex.py b/providers/google/src/airflow/providers/google/cloud/hooks/dataplex.py
index 028a3756f8539..5f4c799680646 100644
--- a/providers/google/src/airflow/providers/google/cloud/hooks/dataplex.py
+++ b/providers/google/src/airflow/providers/google/cloud/hooks/dataplex.py
@@ -515,7 +515,7 @@ def update_entry(
             fields are non-required and omitted in the request body, their values are emptied.
         :param allow_missing: Optional. If set to true and entry doesn't exist, the service will create it.
         :param delete_missing_aspects: Optional. If set to true and the aspect_keys specify aspect
-            ranges, the service deletes any existing aspects from that range that weren't provided
+            ranges, the service deletes any existing aspects from that range that were not provided
             in the request.
         :param aspect_keys: Optional. The map keys of the Aspects which the service should modify.
             It supports the following syntax:
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/dataplex.py b/providers/google/src/airflow/providers/google/cloud/operators/dataplex.py
index 45361b364ab75..e6f04e6306233 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/dataplex.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/dataplex.py
@@ -4043,7 +4043,7 @@ class DataplexCatalogUpdateEntryOperator(DataplexCatalogBaseOperator):
     :param entry_configuration: Required. The updated configuration body of the Entry.
     :param allow_missing: Optional. If set to true and entry doesn't exist, the service will create it.
     :param delete_missing_aspects: Optional. If set to true and the aspect_keys specify aspect
-        ranges, the service deletes any existing aspects from that range that weren't provided
+        ranges, the service deletes any existing aspects from that range that were not provided
         in the request.
     :param aspect_keys: Optional. The map keys of the Aspects which the service should modify.
         It supports the following syntax:

From 759653961f4fa1e188ca719c61e92c1d7126b3d4 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sat, 28 Jun 2025 09:46:52 +0200
Subject: [PATCH 250/381] Run release tests always - not only in canary runs
 (#52389)

---
 .github/workflows/basic-tests.yml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/.github/workflows/basic-tests.yml b/.github/workflows/basic-tests.yml
index 3183ace6b0095..64c348501e0d5 100644
--- a/.github/workflows/basic-tests.yml
+++ b/.github/workflows/basic-tests.yml
@@ -317,7 +317,6 @@ jobs:
       GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
       GITHUB_USERNAME: ${{ github.actor }}
       VERBOSE: "true"
-    if: inputs.canary-run == 'true'
     steps:
       - name: "Cleanup repo"
         shell: bash

From a46a837a480e7a696e90e31e78fcc8e6c462fcb9 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sat, 28 Jun 2025 09:48:06 +0200
Subject: [PATCH 251/381] Add plural per-language forms in check-translations
 script (#52391)

Different languages have different plural forms. Our script should
take the original English forms and convert them into the right
plural forms for the language.

Also noticed that sorting order is slightly different than the one
that eslint uses. The "eslint" sorting order is now used when
generating missing keys.
---
 dev/i18n/check_translations_completeness.py | 92 ++++++++++++++++++---
 1 file changed, 81 insertions(+), 11 deletions(-)

diff --git a/dev/i18n/check_translations_completeness.py b/dev/i18n/check_translations_completeness.py
index 9202ca0012880..b8d5437d631c9 100755
--- a/dev/i18n/check_translations_completeness.py
+++ b/dev/i18n/check_translations_completeness.py
@@ -44,6 +44,19 @@
     Path(__file__).parents[2] / "airflow-core" / "src" / "airflow" / "ui" / "public" / "i18n" / "locales"
 )
 
+# Plural suffixes per language (expand as needed)
+PLURAL_SUFFIXES = {
+    "en": ["_one", "_other"],
+    "pl": ["_one", "_few", "_many", "_other"],
+    "de": ["_one", "_other"],
+    "fr": ["_one", "_other"],
+    "nl": ["_one", "_other"],
+    "ar": ["_zero", "_one", "_two", "_few", "_many", "_other"],
+    "he": ["_one", "_other"],
+    "ko": ["_other"],
+    "zh-TW": ["_other"],
+}
+
 
 class LocaleSummary(NamedTuple):
     """
@@ -84,6 +97,30 @@ class LocaleKeySet(NamedTuple):
     keys: set[str] | None
 
 
+def get_plural_base(key: str, suffixes: list[str]) -> str | None:
+    for suffix in suffixes:
+        if key.endswith(suffix):
+            return key[: -len(suffix)]
+    return None
+
+
+def expand_plural_keys(keys: set[str], lang: str) -> set[str]:
+    """
+    For a set of keys, expand all plural bases to include all required suffixes for the language.
+    """
+    suffixes = PLURAL_SUFFIXES.get(lang, ["_one", "_other"])
+    base_to_suffixes: dict[str, set[str]] = {}
+    for key in keys:
+        base = get_plural_base(key, suffixes)
+        if base:
+            base_to_suffixes.setdefault(base, set()).add(key[len(base) :])
+    expanded = set(keys)
+    for base in base_to_suffixes.keys():
+        for suffix in suffixes:
+            expanded.add(base + suffix)
+    return expanded
+
+
 def get_locale_files() -> list[LocaleFiles]:
     return [
         LocaleFiles(
@@ -127,6 +164,7 @@ def compare_keys(
     for filename in all_files:
         key_sets: list[LocaleKeySet] = []
         for lf in locale_files:
+            keys = set()
             if filename in lf.files:
                 path = LOCALES_DIR / lf.locale / filename
                 try:
@@ -134,26 +172,26 @@ def compare_keys(
                     keys = set(flatten_keys(data))
                 except Exception as e:
                     print(f"Error loading {path}: {e}")
-                    keys = set()
-            else:
-                keys = None
             key_sets.append(LocaleKeySet(locale=lf.locale, keys=keys))
         keys_by_locale = {ks.locale: ks.keys for ks in key_sets}
         en_keys = keys_by_locale.get("en", set()) or set()
+        # Expand English keys for all required plural forms in each language
+        expanded_en_keys = {lang: expand_plural_keys(en_keys, lang) for lang in keys_by_locale.keys()}
         missing_keys: dict[str, list[str]] = {}
         extra_keys: dict[str, list[str]] = {}
         missing_counts[filename] = {}
         for ks in key_sets:
             if ks.locale == "en":
                 continue
+            required_keys = expanded_en_keys.get(ks.locale, en_keys)
             if ks.keys is None:
-                missing_keys[ks.locale] = list(en_keys)
+                missing_keys[ks.locale] = list(required_keys)
                 extra_keys[ks.locale] = []
-                missing_counts[filename][ks.locale] = len(en_keys)
+                missing_counts[filename][ks.locale] = len(required_keys)
             else:
-                missing = list(en_keys - ks.keys)
+                missing = list(required_keys - ks.keys)
                 missing_keys[ks.locale] = missing
-                extra_keys[ks.locale] = list(ks.keys - en_keys)
+                extra_keys[ks.locale] = list(ks.keys - required_keys)
                 missing_counts[filename][ks.locale] = len(missing)
         summary[filename] = LocaleSummary(missing_keys=missing_keys, extra_keys=extra_keys)
     return summary, missing_counts
@@ -429,9 +467,11 @@ def add_missing_translations(language: str, summary: dict[str, LocaleSummary], c
     Add missing translations for the selected language.
 
     It does it by copying them from English and prefixing with 'TODO: translate:'.
+    Ensures all required plural forms for the language are added.
     """
+    suffixes = PLURAL_SUFFIXES.get(language, ["_one", "_other"])
     for filename, diff in summary.items():
-        missing_keys = diff.missing_keys.get(language, [])
+        missing_keys = set(diff.missing_keys.get(language, []))
         if not missing_keys:
             continue
         en_path = LOCALES_DIR / "en" / filename
@@ -447,10 +487,23 @@ def add_missing_translations(language: str, summary: dict[str, LocaleSummary], c
             console.print(f"[yellow]Failed to load {language} file {language}: {e}[/yellow]")
             lang_data = {}  # Start with an empty dict if the file doesn't exist
 
-        # Helper to recursively add missing keys
+        # Helper to recursively add missing keys, including plural forms
         def add_keys(src, dst, prefix=""):
             for k, v in src.items():
                 full_key = f"{prefix}.{k}" if prefix else k
+                base = get_plural_base(full_key, suffixes)
+                if base and any(full_key == base + s for s in suffixes):
+                    # Add all plural forms at the current level (not nested)
+                    for suffix in suffixes:
+                        plural_key = base + suffix
+                        key_name = plural_key.split(".")[-1]
+                        if plural_key in missing_keys:
+                            if isinstance(v, dict):
+                                dst[key_name] = {}
+                                add_keys(v, dst[key_name], plural_key)
+                            else:
+                                dst[key_name] = f"TODO: translate: {v}"
+                    continue
                 if full_key in missing_keys:
                     if isinstance(v, dict):
                         dst[k] = {}
@@ -464,10 +517,27 @@ def add_keys(src, dst, prefix=""):
                         add_keys(v, dst[k], full_key)
 
         add_keys(en_data, lang_data)
-        # Write back to file, preserving order
+
+        # Write back to file, preserving order and using eslint-style key sorting
+        def eslint_key_sort(obj):
+            if isinstance(obj, dict):
+                # Sort keys: numbers first, then uppercase, then lowercase, then others (eslint default)
+                def sort_key(k):
+                    if k.isdigit():
+                        return (0, int(k))
+                    if k and k[0].isupper():
+                        return (1, k)
+                    if k and k[0].islower():
+                        return (2, k)
+                    return (3, k)
+
+                return {k: eslint_key_sort(obj[k]) for k in sorted(obj, key=sort_key)}
+            return obj
+
+        lang_data = eslint_key_sort(lang_data)
         lang_path.parent.mkdir(parents=True, exist_ok=True)
         with open(lang_path, "w", encoding="utf-8") as f:
-            json.dump(lang_data, f, ensure_ascii=False, indent=2, sort_keys=True)
+            json.dump(lang_data, f, ensure_ascii=False, indent=2)
             f.write("\n")  # Ensure newline at the end of the file
         console.print(f"[green]Added missing translations to {lang_path}[/green]")
 

From d5794656da2c9e216768103fdaa59dfdc7a027b7 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sat, 28 Jun 2025 11:37:00 +0200
Subject: [PATCH 252/381] Update click requirement in /dev/breeze (#52361)

Updates the requirements on [click](https://github.com/pallets/click) to permit the latest version.
- [Release notes](https://github.com/pallets/click/releases)
- [Changelog](https://github.com/pallets/click/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/click/compare/8.1.8...8.2.1)

---
updated-dependencies:
- dependency-name: click
  dependency-version: 8.2.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
 dev/breeze/README.md                          |   2 +-
 dev/breeze/doc/images/output_build-docs.txt   |   2 +-
 .../doc/images/output_ci-image_build.txt      |   2 +-
 .../output_ci-image_export-mount-cache.txt    |   2 +-
 .../output_ci-image_import-mount-cache.txt    |   2 +-
 .../doc/images/output_ci-image_load.txt       |   2 +-
 .../doc/images/output_ci-image_pull.txt       |   2 +-
 .../doc/images/output_ci-image_save.txt       |   2 +-
 .../doc/images/output_ci-image_verify.txt     |   2 +-
 .../doc/images/output_ci_free-space.txt       |   2 +-
 .../images/output_ci_get-workflow-info.txt    |   2 +-
 .../doc/images/output_ci_selective-check.txt  |   2 +-
 dev/breeze/doc/images/output_cleanup.txt      |   2 +-
 dev/breeze/doc/images/output_doctor.txt       |   2 +-
 .../images/output_generate-migration-file.txt |   2 +-
 .../doc/images/output_k8s_build-k8s-image.txt |   2 +-
 .../images/output_k8s_configure-cluster.txt   |   2 +-
 .../doc/images/output_k8s_create-cluster.txt  |   2 +-
 .../doc/images/output_k8s_delete-cluster.txt  |   2 +-
 .../doc/images/output_k8s_deploy-airflow.txt  |   2 +-
 dev/breeze/doc/images/output_k8s_k9s.txt      |   2 +-
 dev/breeze/doc/images/output_k8s_logs.txt     |   2 +-
 .../images/output_k8s_run-complete-tests.txt  |   2 +-
 dev/breeze/doc/images/output_k8s_shell.txt    |   2 +-
 dev/breeze/doc/images/output_k8s_status.txt   |   2 +-
 dev/breeze/doc/images/output_k8s_tests.txt    |   2 +-
 .../images/output_k8s_upload-k8s-image.txt    |   2 +-
 .../doc/images/output_prod-image_build.txt    |   2 +-
 .../doc/images/output_prod-image_load.txt     |   2 +-
 .../doc/images/output_prod-image_pull.txt     |   2 +-
 .../doc/images/output_prod-image_save.txt     |   2 +-
 .../doc/images/output_prod-image_verify.txt   |   2 +-
 ...release-management_add-back-references.txt |   2 +-
 ...anagement_clean-old-provider-artifacts.txt |   2 +-
 ...release-management_create-minor-branch.txt |   2 +-
 ...elease-management_generate-constraints.txt |   2 +-
 ...management_generate-issue-content-core.txt |   2 +-
 ...ment_generate-issue-content-helm-chart.txt |   2 +-
 ...ement_generate-issue-content-providers.txt |   2 +-
 ...management_generate-providers-metadata.txt |   2 +-
 ...agement_install-provider-distributions.txt |   2 +-
 ...t_release-management_merge-prod-images.txt |   2 +-
 ...ment_prepare-airflow-ctl-distributions.txt |   2 +-
 ...nagement_prepare-airflow-distributions.txt |   2 +-
 ...ase-management_prepare-airflow-tarball.txt |   2 +-
 ...-management_prepare-helm-chart-package.txt |   2 +-
 ...-management_prepare-helm-chart-tarball.txt |   2 +-
 ...agement_prepare-provider-distributions.txt |   2 +-
 ...agement_prepare-provider-documentation.txt |   2 +-
 ...lease-management_prepare-python-client.txt |   2 +-
 ...agement_prepare-task-sdk-distributions.txt |   2 +-
 ..._release-management_publish-docs-to-s3.txt |   2 +-
 ...output_release-management_publish-docs.txt |   2 +-
 ...release-management_release-prod-images.txt |   2 +-
 ...ut_release-management_start-rc-process.txt |   2 +-
 ...utput_release-management_start-release.txt |   2 +-
 ..._release-management_update-constraints.txt |   2 +-
 ...nagement_verify-provider-distributions.txt |   2 +-
 dev/breeze/doc/images/output_run.txt          |   2 +-
 .../output_sbom_build-all-airflow-images.txt  |   2 +-
 ...put_sbom_export-dependency-information.txt |   2 +-
 ...t_sbom_generate-providers-requirements.txt |   2 +-
 .../output_sbom_update-sbom-information.txt   |   2 +-
 .../doc/images/output_setup_autocomplete.txt  |   2 +-
 ...utput_setup_check-all-params-in-groups.txt |   2 +-
 dev/breeze/doc/images/output_setup_config.txt |   2 +-
 ...output_setup_regenerate-command-images.txt |   2 +-
 dev/breeze/doc/images/output_shell.svg        |   2 +-
 dev/breeze/doc/images/output_shell.txt        |   2 +-
 .../doc/images/output_start-airflow.svg       |   4 +-
 .../doc/images/output_start-airflow.txt       |   2 +-
 .../doc/images/output_static-checks.txt       |   2 +-
 .../output_testing_airflow-ctl-tests.txt      |   2 +-
 .../output_testing_core-integration-tests.txt |   2 +-
 .../doc/images/output_testing_core-tests.txt  |   2 +-
 .../output_testing_docker-compose-tests.txt   |   2 +-
 .../doc/images/output_testing_helm-tests.txt  |   2 +-
 ...ut_testing_providers-integration-tests.txt |   2 +-
 .../images/output_testing_providers-tests.txt |   2 +-
 ...output_testing_python-api-client-tests.txt |   2 +-
 .../images/output_testing_system-tests.txt    |   2 +-
 .../images/output_testing_task-sdk-tests.txt  |   2 +-
 .../output_workflow-run_publish-docs.txt      |   2 +-
 dev/breeze/pyproject.toml                     |   4 +-
 dev/breeze/uv.lock                            | 231 +-----------------
 85 files changed, 97 insertions(+), 306 deletions(-)

diff --git a/dev/breeze/README.md b/dev/breeze/README.md
index 85a6dc144ee1e..a5ee760fc7ba7 100644
--- a/dev/breeze/README.md
+++ b/dev/breeze/README.md
@@ -135,6 +135,6 @@ PLEASE DO NOT MODIFY THE HASH BELOW! IT IS AUTOMATICALLY UPDATED BY PRE-COMMIT.
 
 ---------------------------------------------------------------------------------------------------------
 
-Package config hash: 980100f98596f859c1d3d1b9db547275f0cc29031f32c80a0f23a811f2695902b1ce04a9d0f1d7e6ef5522745d728d457039cf67d48d4dcf25dcd9ab340d94dd
+Package config hash: 05507dc6f59fb3cf6a073b09473d712603fda88505767df40755ad33e32513a836c1e4b2b8f103b220fbf6585c88865741d1e036cd0f7eaa926ba8058a8e6936
 
 ---------------------------------------------------------------------------------------------------------
diff --git a/dev/breeze/doc/images/output_build-docs.txt b/dev/breeze/doc/images/output_build-docs.txt
index 6ec0cbe183a37..7ef24816c0515 100644
--- a/dev/breeze/doc/images/output_build-docs.txt
+++ b/dev/breeze/doc/images/output_build-docs.txt
@@ -1 +1 @@
-f64fad45c016c4dec0b180b3e7ff2826
+ba7ca723e87b8d7f95fb78562f2740ae
diff --git a/dev/breeze/doc/images/output_ci-image_build.txt b/dev/breeze/doc/images/output_ci-image_build.txt
index f1d7c7a717a1a..1033af461e732 100644
--- a/dev/breeze/doc/images/output_ci-image_build.txt
+++ b/dev/breeze/doc/images/output_ci-image_build.txt
@@ -1 +1 @@
-c075a5d7ad1134165d16d1c938161fc9
+6bf7eb3329761372b61c7302e874232f
diff --git a/dev/breeze/doc/images/output_ci-image_export-mount-cache.txt b/dev/breeze/doc/images/output_ci-image_export-mount-cache.txt
index 6d1c1347207a2..6864fcc13151b 100644
--- a/dev/breeze/doc/images/output_ci-image_export-mount-cache.txt
+++ b/dev/breeze/doc/images/output_ci-image_export-mount-cache.txt
@@ -1 +1 @@
-824109d9d232ba19a9aa0781ba8fccd9
+f00b94a655e8f9edb0765ba2928295c4
diff --git a/dev/breeze/doc/images/output_ci-image_import-mount-cache.txt b/dev/breeze/doc/images/output_ci-image_import-mount-cache.txt
index 00f5024812d07..a7888e6c09f53 100644
--- a/dev/breeze/doc/images/output_ci-image_import-mount-cache.txt
+++ b/dev/breeze/doc/images/output_ci-image_import-mount-cache.txt
@@ -1 +1 @@
-65be4537eea8d56d3ddc34d4ccab60c7
+f5a3c033c9904a8257a8db9bb716a4a2
diff --git a/dev/breeze/doc/images/output_ci-image_load.txt b/dev/breeze/doc/images/output_ci-image_load.txt
index d7d932a7463cb..5549b7a3bf5c2 100644
--- a/dev/breeze/doc/images/output_ci-image_load.txt
+++ b/dev/breeze/doc/images/output_ci-image_load.txt
@@ -1 +1 @@
-d86e2e217fe99bd74580f751dc4c51bd
+f06c4edbaa5623ac2d67da5bbfc0f84d
diff --git a/dev/breeze/doc/images/output_ci-image_pull.txt b/dev/breeze/doc/images/output_ci-image_pull.txt
index 0de3a5b933769..c9b72f3fdd63e 100644
--- a/dev/breeze/doc/images/output_ci-image_pull.txt
+++ b/dev/breeze/doc/images/output_ci-image_pull.txt
@@ -1 +1 @@
-c29b9a5e5bf4b503f4e0310006414597
+81f6b37f2afb82d2f5e350a9bf1ead69
diff --git a/dev/breeze/doc/images/output_ci-image_save.txt b/dev/breeze/doc/images/output_ci-image_save.txt
index 5e457d7c315e1..f70dfef42a4c7 100644
--- a/dev/breeze/doc/images/output_ci-image_save.txt
+++ b/dev/breeze/doc/images/output_ci-image_save.txt
@@ -1 +1 @@
-807d082ba3edd987a78c50608eb280c3
+1997d34fe934551a639d060a867b5923
diff --git a/dev/breeze/doc/images/output_ci-image_verify.txt b/dev/breeze/doc/images/output_ci-image_verify.txt
index e1300b3163f00..bd66a3ee629a8 100644
--- a/dev/breeze/doc/images/output_ci-image_verify.txt
+++ b/dev/breeze/doc/images/output_ci-image_verify.txt
@@ -1 +1 @@
-af0c91ebd8bb2ed858bdad86c43c579a
+a6ccb6771da344dd14bc15eddd583e57
diff --git a/dev/breeze/doc/images/output_ci_free-space.txt b/dev/breeze/doc/images/output_ci_free-space.txt
index 28dab1aeb49be..757e1bafa8ae9 100644
--- a/dev/breeze/doc/images/output_ci_free-space.txt
+++ b/dev/breeze/doc/images/output_ci_free-space.txt
@@ -1 +1 @@
-21f9955c2f47b4524f1df73af8594d54
+4f9c3078d0108954df8e66634f3655b0
diff --git a/dev/breeze/doc/images/output_ci_get-workflow-info.txt b/dev/breeze/doc/images/output_ci_get-workflow-info.txt
index 9fd843d756a74..a13fbabb4568f 100644
--- a/dev/breeze/doc/images/output_ci_get-workflow-info.txt
+++ b/dev/breeze/doc/images/output_ci_get-workflow-info.txt
@@ -1 +1 @@
-8246038093359b9c3c110043419473e2
+7b2b0d6b2decf3ecba3db4ede5d2d711
diff --git a/dev/breeze/doc/images/output_ci_selective-check.txt b/dev/breeze/doc/images/output_ci_selective-check.txt
index ebeb5277929f6..0e5e77f51ea6b 100644
--- a/dev/breeze/doc/images/output_ci_selective-check.txt
+++ b/dev/breeze/doc/images/output_ci_selective-check.txt
@@ -1 +1 @@
-78d4ac07ec90efce5bd901f461d940bc
+afe8f35b0f4e7c8349b5f830ef191047
diff --git a/dev/breeze/doc/images/output_cleanup.txt b/dev/breeze/doc/images/output_cleanup.txt
index bf619de66a7e0..8c71591169dde 100644
--- a/dev/breeze/doc/images/output_cleanup.txt
+++ b/dev/breeze/doc/images/output_cleanup.txt
@@ -1 +1 @@
-45d1ac665d85bff99d1ea396be00f892
+4efe4187a04e5b6228642edf03fefa88
diff --git a/dev/breeze/doc/images/output_doctor.txt b/dev/breeze/doc/images/output_doctor.txt
index 022c50501b643..13375fcc8534b 100644
--- a/dev/breeze/doc/images/output_doctor.txt
+++ b/dev/breeze/doc/images/output_doctor.txt
@@ -1 +1 @@
-f9972cd23929342783a9eef3ceca1116
+14b718b299e3df02cb6e5227e15432a3
diff --git a/dev/breeze/doc/images/output_generate-migration-file.txt b/dev/breeze/doc/images/output_generate-migration-file.txt
index 1a80bedb173c1..a2f184c13cb67 100644
--- a/dev/breeze/doc/images/output_generate-migration-file.txt
+++ b/dev/breeze/doc/images/output_generate-migration-file.txt
@@ -1 +1 @@
-fe2f7beb040bd87d2ba9ec143c067711
+206f1ce888dbabd0cae6f9a350dcfb6e
diff --git a/dev/breeze/doc/images/output_k8s_build-k8s-image.txt b/dev/breeze/doc/images/output_k8s_build-k8s-image.txt
index 67f0160b50209..2db6917ae571b 100644
--- a/dev/breeze/doc/images/output_k8s_build-k8s-image.txt
+++ b/dev/breeze/doc/images/output_k8s_build-k8s-image.txt
@@ -1 +1 @@
-40442787a9fafb301236e1821099092a
+b69eb25ba5e0048721c560e125489cc1
diff --git a/dev/breeze/doc/images/output_k8s_configure-cluster.txt b/dev/breeze/doc/images/output_k8s_configure-cluster.txt
index 7ecd42d760681..07fc6c93aa573 100644
--- a/dev/breeze/doc/images/output_k8s_configure-cluster.txt
+++ b/dev/breeze/doc/images/output_k8s_configure-cluster.txt
@@ -1 +1 @@
-6e93a011facfa3eef2cf3daccdbac9bd
+ba3810411d120af3790a87ffec349e86
diff --git a/dev/breeze/doc/images/output_k8s_create-cluster.txt b/dev/breeze/doc/images/output_k8s_create-cluster.txt
index 8d6330198c8b5..b2c9419bb0ec0 100644
--- a/dev/breeze/doc/images/output_k8s_create-cluster.txt
+++ b/dev/breeze/doc/images/output_k8s_create-cluster.txt
@@ -1 +1 @@
-10b1e7982d783b404e854b6bccec5787
+bf532e3384db66f57477c8ab689152d3
diff --git a/dev/breeze/doc/images/output_k8s_delete-cluster.txt b/dev/breeze/doc/images/output_k8s_delete-cluster.txt
index 169719432d2ff..583a693430532 100644
--- a/dev/breeze/doc/images/output_k8s_delete-cluster.txt
+++ b/dev/breeze/doc/images/output_k8s_delete-cluster.txt
@@ -1 +1 @@
-ad0eea9be87ef3d5451698aab8a25358
+02eb829a8538e463499ae9a03ccf9042
diff --git a/dev/breeze/doc/images/output_k8s_deploy-airflow.txt b/dev/breeze/doc/images/output_k8s_deploy-airflow.txt
index 9b82b31144831..cb1f8da8d0122 100644
--- a/dev/breeze/doc/images/output_k8s_deploy-airflow.txt
+++ b/dev/breeze/doc/images/output_k8s_deploy-airflow.txt
@@ -1 +1 @@
-c31bffdf3bba32ed1278cd59f20c2faf
+67ad2f6427e991a568e0e0064d7e099f
diff --git a/dev/breeze/doc/images/output_k8s_k9s.txt b/dev/breeze/doc/images/output_k8s_k9s.txt
index 7191c67d24e31..b79356813e79e 100644
--- a/dev/breeze/doc/images/output_k8s_k9s.txt
+++ b/dev/breeze/doc/images/output_k8s_k9s.txt
@@ -1 +1 @@
-efedbc9d3a96d716fa0f560e8dc5ea7e
+283aa1251878949198f8f6c48d34d313
diff --git a/dev/breeze/doc/images/output_k8s_logs.txt b/dev/breeze/doc/images/output_k8s_logs.txt
index 46cec2dd8bb7e..62299e6247701 100644
--- a/dev/breeze/doc/images/output_k8s_logs.txt
+++ b/dev/breeze/doc/images/output_k8s_logs.txt
@@ -1 +1 @@
-cf00d923f26a0d331dd7fe7251c56f37
+d40828be00a2b47175867e720d1daaf7
diff --git a/dev/breeze/doc/images/output_k8s_run-complete-tests.txt b/dev/breeze/doc/images/output_k8s_run-complete-tests.txt
index 128524bb500e8..21e9f2e3215e2 100644
--- a/dev/breeze/doc/images/output_k8s_run-complete-tests.txt
+++ b/dev/breeze/doc/images/output_k8s_run-complete-tests.txt
@@ -1 +1 @@
-90311a31704a88dbeadc5955a4b26452
+9af2caa7281fa5749cda59a518c54cdc
diff --git a/dev/breeze/doc/images/output_k8s_shell.txt b/dev/breeze/doc/images/output_k8s_shell.txt
index 16014bad6d105..564bbe05e9f16 100644
--- a/dev/breeze/doc/images/output_k8s_shell.txt
+++ b/dev/breeze/doc/images/output_k8s_shell.txt
@@ -1 +1 @@
-b364a237eaa04d37db3b51620566ac85
+85b62ab046d9799e6f84b9facc7a91ea
diff --git a/dev/breeze/doc/images/output_k8s_status.txt b/dev/breeze/doc/images/output_k8s_status.txt
index e9c655c06abeb..8cb0cbc0a008d 100644
--- a/dev/breeze/doc/images/output_k8s_status.txt
+++ b/dev/breeze/doc/images/output_k8s_status.txt
@@ -1 +1 @@
-45ae1dbd57e2d8e7c512bf32f5ab4193
+2a97ebce9c3211206b7f7cc6b65f820b
diff --git a/dev/breeze/doc/images/output_k8s_tests.txt b/dev/breeze/doc/images/output_k8s_tests.txt
index f5a8137e26795..006a674c04e0c 100644
--- a/dev/breeze/doc/images/output_k8s_tests.txt
+++ b/dev/breeze/doc/images/output_k8s_tests.txt
@@ -1 +1 @@
-73297fbd99e02da431cb693f8bd69049
+8250fb567cba4be27a36b487d616d5a7
diff --git a/dev/breeze/doc/images/output_k8s_upload-k8s-image.txt b/dev/breeze/doc/images/output_k8s_upload-k8s-image.txt
index c50b134b778b4..16b731e7a45c5 100644
--- a/dev/breeze/doc/images/output_k8s_upload-k8s-image.txt
+++ b/dev/breeze/doc/images/output_k8s_upload-k8s-image.txt
@@ -1 +1 @@
-7b05f647b8a0009a1a18471678dbd14d
+9dde13d40b4ff9480b1248499a06b7ca
diff --git a/dev/breeze/doc/images/output_prod-image_build.txt b/dev/breeze/doc/images/output_prod-image_build.txt
index 58f9fe1ecf939..10070d87d2acd 100644
--- a/dev/breeze/doc/images/output_prod-image_build.txt
+++ b/dev/breeze/doc/images/output_prod-image_build.txt
@@ -1 +1 @@
-f0627afea3a75fad4886afaa9a517fdf
+e05113a2a2bdbbd524c534418a2cf048
diff --git a/dev/breeze/doc/images/output_prod-image_load.txt b/dev/breeze/doc/images/output_prod-image_load.txt
index e229179e97f35..ceef534863ca2 100644
--- a/dev/breeze/doc/images/output_prod-image_load.txt
+++ b/dev/breeze/doc/images/output_prod-image_load.txt
@@ -1 +1 @@
-de986e6f731cef102f8f2f40dd2e8b01
+19d074b533f6f0960a1be1bff1dfeb19
diff --git a/dev/breeze/doc/images/output_prod-image_pull.txt b/dev/breeze/doc/images/output_prod-image_pull.txt
index 6e0a79486fc8e..81d112b03ace6 100644
--- a/dev/breeze/doc/images/output_prod-image_pull.txt
+++ b/dev/breeze/doc/images/output_prod-image_pull.txt
@@ -1 +1 @@
-a1c4d0b647670b696293bde6e97898bd
+7b82e53559f6807d54dc8a33a79d191f
diff --git a/dev/breeze/doc/images/output_prod-image_save.txt b/dev/breeze/doc/images/output_prod-image_save.txt
index b39bbfdb68c8a..4d102b87fc07c 100644
--- a/dev/breeze/doc/images/output_prod-image_save.txt
+++ b/dev/breeze/doc/images/output_prod-image_save.txt
@@ -1 +1 @@
-b4b74446ac624e2114a03773996968fc
+84108456263fa64de7685819230c57f6
diff --git a/dev/breeze/doc/images/output_prod-image_verify.txt b/dev/breeze/doc/images/output_prod-image_verify.txt
index 857a970c85745..a7f3287f5e10a 100644
--- a/dev/breeze/doc/images/output_prod-image_verify.txt
+++ b/dev/breeze/doc/images/output_prod-image_verify.txt
@@ -1 +1 @@
-8fcf39b4153549e82cddcf3746126801
+2883fea4e35b128c7ad3bd9020d08b6f
diff --git a/dev/breeze/doc/images/output_release-management_add-back-references.txt b/dev/breeze/doc/images/output_release-management_add-back-references.txt
index 5372e6d41c398..f241d08e67efd 100644
--- a/dev/breeze/doc/images/output_release-management_add-back-references.txt
+++ b/dev/breeze/doc/images/output_release-management_add-back-references.txt
@@ -1 +1 @@
-5d1541667a68b9dd5b149bdc80dfe082
+03bd6c8a89914dea47a02ffc23a1701d
diff --git a/dev/breeze/doc/images/output_release-management_clean-old-provider-artifacts.txt b/dev/breeze/doc/images/output_release-management_clean-old-provider-artifacts.txt
index 644ef44e5799a..d83b1dd12737a 100644
--- a/dev/breeze/doc/images/output_release-management_clean-old-provider-artifacts.txt
+++ b/dev/breeze/doc/images/output_release-management_clean-old-provider-artifacts.txt
@@ -1 +1 @@
-085dfd3570b78ad1be8dd95f480be582
+dafdee6153bdbb48e598767a77fa559d
diff --git a/dev/breeze/doc/images/output_release-management_create-minor-branch.txt b/dev/breeze/doc/images/output_release-management_create-minor-branch.txt
index 52b3e6a8f579b..07f451cc0d517 100644
--- a/dev/breeze/doc/images/output_release-management_create-minor-branch.txt
+++ b/dev/breeze/doc/images/output_release-management_create-minor-branch.txt
@@ -1 +1 @@
-83ae80576428b38723dccf2c385c1407
+24539873771457043408812541c37216
diff --git a/dev/breeze/doc/images/output_release-management_generate-constraints.txt b/dev/breeze/doc/images/output_release-management_generate-constraints.txt
index b1402f55a33f4..76e0173b7d724 100644
--- a/dev/breeze/doc/images/output_release-management_generate-constraints.txt
+++ b/dev/breeze/doc/images/output_release-management_generate-constraints.txt
@@ -1 +1 @@
-7721551d951d9d1f1aa4a65fc40590fb
+ea34b6e28163f0439afd729f7e1033c7
diff --git a/dev/breeze/doc/images/output_release-management_generate-issue-content-core.txt b/dev/breeze/doc/images/output_release-management_generate-issue-content-core.txt
index ff9db17bc0776..72c113190979c 100644
--- a/dev/breeze/doc/images/output_release-management_generate-issue-content-core.txt
+++ b/dev/breeze/doc/images/output_release-management_generate-issue-content-core.txt
@@ -1 +1 @@
-4392efab41586255c9af6b05b028399a
+524b78655000e9bcdeda6d4a6897b4be
diff --git a/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.txt b/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.txt
index 21b7200bb2177..b708707140bdb 100644
--- a/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.txt
+++ b/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.txt
@@ -1 +1 @@
-02d79407876c87adbbb32e53dc028ced
+6c32d6c84fce4906829e83edd5b33729
diff --git a/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.txt b/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.txt
index 155e1a7438bb4..d4fd42b205407 100644
--- a/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.txt
+++ b/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.txt
@@ -1 +1 @@
-c0ce0d36e7ecaf5406cd9910774b2bc8
+6785d49fc08fb3dd179fd508bcbc1103
diff --git a/dev/breeze/doc/images/output_release-management_generate-providers-metadata.txt b/dev/breeze/doc/images/output_release-management_generate-providers-metadata.txt
index e885738de07e4..0bfbd7e4d2709 100644
--- a/dev/breeze/doc/images/output_release-management_generate-providers-metadata.txt
+++ b/dev/breeze/doc/images/output_release-management_generate-providers-metadata.txt
@@ -1 +1 @@
-d4630907f51e9f17d442492905a3c47d
+49cf8a379bddef1b39fe21dc5e83ee1b
diff --git a/dev/breeze/doc/images/output_release-management_install-provider-distributions.txt b/dev/breeze/doc/images/output_release-management_install-provider-distributions.txt
index 7abc4df7f96ab..fe4d670355036 100644
--- a/dev/breeze/doc/images/output_release-management_install-provider-distributions.txt
+++ b/dev/breeze/doc/images/output_release-management_install-provider-distributions.txt
@@ -1 +1 @@
-1ea2317652b1d9d4f58e25de06c1fca8
+b7f2f937640c383c2605e9bc8c9404c5
diff --git a/dev/breeze/doc/images/output_release-management_merge-prod-images.txt b/dev/breeze/doc/images/output_release-management_merge-prod-images.txt
index f830ba93dbd48..cb5c82b954121 100644
--- a/dev/breeze/doc/images/output_release-management_merge-prod-images.txt
+++ b/dev/breeze/doc/images/output_release-management_merge-prod-images.txt
@@ -1 +1 @@
-a22a4eeefd00c33e8f68738d49d76c46
+d612c71a92a2b512519b7bea000cd2b1
diff --git a/dev/breeze/doc/images/output_release-management_prepare-airflow-ctl-distributions.txt b/dev/breeze/doc/images/output_release-management_prepare-airflow-ctl-distributions.txt
index 57efa6d396357..9a3a2411da29b 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-airflow-ctl-distributions.txt
+++ b/dev/breeze/doc/images/output_release-management_prepare-airflow-ctl-distributions.txt
@@ -1 +1 @@
-27d124c071deddbcd64dc7ec6e570abe
+17d21a6f2ccb560eb1f46f0e93beb88d
diff --git a/dev/breeze/doc/images/output_release-management_prepare-airflow-distributions.txt b/dev/breeze/doc/images/output_release-management_prepare-airflow-distributions.txt
index 23cfaca119493..8fb8f37aafebc 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-airflow-distributions.txt
+++ b/dev/breeze/doc/images/output_release-management_prepare-airflow-distributions.txt
@@ -1 +1 @@
-ded1f764fbbd1ef0cb885615f9e0ae83
+b5a1c86e7c45855ef254242f5a7157f5
diff --git a/dev/breeze/doc/images/output_release-management_prepare-airflow-tarball.txt b/dev/breeze/doc/images/output_release-management_prepare-airflow-tarball.txt
index 19b5526b1c6a6..1994c9ebbc3b8 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-airflow-tarball.txt
+++ b/dev/breeze/doc/images/output_release-management_prepare-airflow-tarball.txt
@@ -1 +1 @@
-f98358d95810966a00142a5e654c7909
+c0c18e77151b5518db69e3803cd0b602
diff --git a/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.txt b/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.txt
index 6051dbc2d7903..ce418ef7963c6 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.txt
+++ b/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.txt
@@ -1 +1 @@
-27169c83fcbcca907a0b32a5c4faeb48
+6f69199a4d3f3a71a802e8f6aab14ce3
diff --git a/dev/breeze/doc/images/output_release-management_prepare-helm-chart-tarball.txt b/dev/breeze/doc/images/output_release-management_prepare-helm-chart-tarball.txt
index d939b7b6a1096..246db7727ca51 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-helm-chart-tarball.txt
+++ b/dev/breeze/doc/images/output_release-management_prepare-helm-chart-tarball.txt
@@ -1 +1 @@
-15c3eb3be97998320dc95431840d8b3a
+dca352f1a6f7c2d383c85df3dc4a0067
diff --git a/dev/breeze/doc/images/output_release-management_prepare-provider-distributions.txt b/dev/breeze/doc/images/output_release-management_prepare-provider-distributions.txt
index 7f9b17b9cc51f..0bdfc2317da56 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-provider-distributions.txt
+++ b/dev/breeze/doc/images/output_release-management_prepare-provider-distributions.txt
@@ -1 +1 @@
-4e330b96a0802f7854631f0578d9a770
+4e4a2a479fec452ad1edc19717287817
diff --git a/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.txt b/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.txt
index 11719f039a9de..0bd3bcb6d86eb 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.txt
+++ b/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.txt
@@ -1 +1 @@
-f308e97af5a7f47147b006ed66af2c1c
+0cd7e2b0f5f50e5d6518b4a501ea5799
diff --git a/dev/breeze/doc/images/output_release-management_prepare-python-client.txt b/dev/breeze/doc/images/output_release-management_prepare-python-client.txt
index 4ea96ac486040..d77d7b0b44f13 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-python-client.txt
+++ b/dev/breeze/doc/images/output_release-management_prepare-python-client.txt
@@ -1 +1 @@
-be9b27fa7ff18398b87d5d1a1746edf9
+581c1aabe78d934c066fb17bc4f22d94
diff --git a/dev/breeze/doc/images/output_release-management_prepare-task-sdk-distributions.txt b/dev/breeze/doc/images/output_release-management_prepare-task-sdk-distributions.txt
index 67f5f0cf65bc4..b5614d4f0956d 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-task-sdk-distributions.txt
+++ b/dev/breeze/doc/images/output_release-management_prepare-task-sdk-distributions.txt
@@ -1 +1 @@
-d4edfdcbafb4f63ddeca69d26851eb20
+f8af293ee7689528ff37872a508a1a3f
diff --git a/dev/breeze/doc/images/output_release-management_publish-docs-to-s3.txt b/dev/breeze/doc/images/output_release-management_publish-docs-to-s3.txt
index e4fb5d52989a4..bac20268c45b5 100644
--- a/dev/breeze/doc/images/output_release-management_publish-docs-to-s3.txt
+++ b/dev/breeze/doc/images/output_release-management_publish-docs-to-s3.txt
@@ -1 +1 @@
-568376d5841031b748c6021beef486b5
+60fe4ff6e64884db8f4b715b37d68bdf
diff --git a/dev/breeze/doc/images/output_release-management_publish-docs.txt b/dev/breeze/doc/images/output_release-management_publish-docs.txt
index ecf2e8cee6c1e..0c359c74d0cae 100644
--- a/dev/breeze/doc/images/output_release-management_publish-docs.txt
+++ b/dev/breeze/doc/images/output_release-management_publish-docs.txt
@@ -1 +1 @@
-e529c5ebc1394484334dc188e7ef8f2c
+5f49b26d3d18961fb6f8a434191ac8ef
diff --git a/dev/breeze/doc/images/output_release-management_release-prod-images.txt b/dev/breeze/doc/images/output_release-management_release-prod-images.txt
index 7547a6eed14d2..752a4910e7ade 100644
--- a/dev/breeze/doc/images/output_release-management_release-prod-images.txt
+++ b/dev/breeze/doc/images/output_release-management_release-prod-images.txt
@@ -1 +1 @@
-8fc83e19c1176ffd508492fbe911b428
+17c498db246f01df4de2ec59a5f1d5ee
diff --git a/dev/breeze/doc/images/output_release-management_start-rc-process.txt b/dev/breeze/doc/images/output_release-management_start-rc-process.txt
index b3b458160d9a5..d96b23fffed71 100644
--- a/dev/breeze/doc/images/output_release-management_start-rc-process.txt
+++ b/dev/breeze/doc/images/output_release-management_start-rc-process.txt
@@ -1 +1 @@
-e213b793839b778288f40a3af9e076f6
+0b22405e2f4ba2d411032c2296f70cf8
diff --git a/dev/breeze/doc/images/output_release-management_start-release.txt b/dev/breeze/doc/images/output_release-management_start-release.txt
index 98156901ab4a5..2e04e76e4b0c9 100644
--- a/dev/breeze/doc/images/output_release-management_start-release.txt
+++ b/dev/breeze/doc/images/output_release-management_start-release.txt
@@ -1 +1 @@
-d84c6e5a6fcab35c07287bc4d2d65841
+9fa3d5d374ad9a0ccff26bf21bfd6823
diff --git a/dev/breeze/doc/images/output_release-management_update-constraints.txt b/dev/breeze/doc/images/output_release-management_update-constraints.txt
index 9c73e6a05a096..8073eee7358b0 100644
--- a/dev/breeze/doc/images/output_release-management_update-constraints.txt
+++ b/dev/breeze/doc/images/output_release-management_update-constraints.txt
@@ -1 +1 @@
-cd4df9af29227f6de406050fbb12dd3b
+8b45a2272dbaac58622e6acf00731e13
diff --git a/dev/breeze/doc/images/output_release-management_verify-provider-distributions.txt b/dev/breeze/doc/images/output_release-management_verify-provider-distributions.txt
index 1661d2e8a095e..471eee7d648e3 100644
--- a/dev/breeze/doc/images/output_release-management_verify-provider-distributions.txt
+++ b/dev/breeze/doc/images/output_release-management_verify-provider-distributions.txt
@@ -1 +1 @@
-fcc7b57ae5cc1d427981eadc3499f281
+a98ed781eb97bf02cebf48af34729fb7
diff --git a/dev/breeze/doc/images/output_run.txt b/dev/breeze/doc/images/output_run.txt
index 53c445f3e151b..21033512a001c 100644
--- a/dev/breeze/doc/images/output_run.txt
+++ b/dev/breeze/doc/images/output_run.txt
@@ -1 +1 @@
-820a829e6ae777a8625862d010f8e693
+b3d47850966f15dabc455ab3b5f0297f
diff --git a/dev/breeze/doc/images/output_sbom_build-all-airflow-images.txt b/dev/breeze/doc/images/output_sbom_build-all-airflow-images.txt
index 5ee0acb4bbdf9..87fcdabbfe3ef 100644
--- a/dev/breeze/doc/images/output_sbom_build-all-airflow-images.txt
+++ b/dev/breeze/doc/images/output_sbom_build-all-airflow-images.txt
@@ -1 +1 @@
-ce2966460a42af3eb835997e07324ea2
+6cac7736f2a825b0da9d1db9e9c4ef65
diff --git a/dev/breeze/doc/images/output_sbom_export-dependency-information.txt b/dev/breeze/doc/images/output_sbom_export-dependency-information.txt
index d5a5892cd30bc..afce79dabf93c 100644
--- a/dev/breeze/doc/images/output_sbom_export-dependency-information.txt
+++ b/dev/breeze/doc/images/output_sbom_export-dependency-information.txt
@@ -1 +1 @@
-4d738ac97ad21c8dd62bb240022d8d81
+b7bddccf714426f1483bb935f0e6ef2a
diff --git a/dev/breeze/doc/images/output_sbom_generate-providers-requirements.txt b/dev/breeze/doc/images/output_sbom_generate-providers-requirements.txt
index aee1a1f98cc63..399a5bed05cfb 100644
--- a/dev/breeze/doc/images/output_sbom_generate-providers-requirements.txt
+++ b/dev/breeze/doc/images/output_sbom_generate-providers-requirements.txt
@@ -1 +1 @@
-ccece867103e42ef0497a52a0ec0b6d1
+8662375eb70621a696cb1e6f721bc5f0
diff --git a/dev/breeze/doc/images/output_sbom_update-sbom-information.txt b/dev/breeze/doc/images/output_sbom_update-sbom-information.txt
index 6e5ac979b168c..835bdb117370c 100644
--- a/dev/breeze/doc/images/output_sbom_update-sbom-information.txt
+++ b/dev/breeze/doc/images/output_sbom_update-sbom-information.txt
@@ -1 +1 @@
-7cb3c6bd7a08706720035864df941273
+2024df97f443b385a80619a4905705c7
diff --git a/dev/breeze/doc/images/output_setup_autocomplete.txt b/dev/breeze/doc/images/output_setup_autocomplete.txt
index d8bdc2e111b4a..14651a3342c92 100644
--- a/dev/breeze/doc/images/output_setup_autocomplete.txt
+++ b/dev/breeze/doc/images/output_setup_autocomplete.txt
@@ -1 +1 @@
-3da8dc88411f34d3ed52c155df744c22
+f85f309e3bdc563a4d93613141e64960
diff --git a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
index 6afbc1c4b9a5e..653c909ad59ba 100644
--- a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
+++ b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
@@ -1 +1 @@
-b1c66655acd75f4f7c65b2d35552f54e
+5fa8fb8159581b0877f5675e3fb7096f
diff --git a/dev/breeze/doc/images/output_setup_config.txt b/dev/breeze/doc/images/output_setup_config.txt
index 6a52e60b0b458..d70168e36a88b 100644
--- a/dev/breeze/doc/images/output_setup_config.txt
+++ b/dev/breeze/doc/images/output_setup_config.txt
@@ -1 +1 @@
-ce0a944326c3418706b7aa90d730e186
+03f155c3dfbfedd2a772ee226fcee2dd
diff --git a/dev/breeze/doc/images/output_setup_regenerate-command-images.txt b/dev/breeze/doc/images/output_setup_regenerate-command-images.txt
index e1261a2289751..53bc74e1d387d 100644
--- a/dev/breeze/doc/images/output_setup_regenerate-command-images.txt
+++ b/dev/breeze/doc/images/output_setup_regenerate-command-images.txt
@@ -1 +1 @@
-d112f32bf3ac63a45cafb3cd1248d728
+05a1e10f75069ec835fc74a5293669a5
diff --git a/dev/breeze/doc/images/output_shell.svg b/dev/breeze/doc/images/output_shell.svg
index 34bf0f927e061..04f2d9f07ce2f 100644
--- a/dev/breeze/doc/images/output_shell.svg
+++ b/dev/breeze/doc/images/output_shell.svg
@@ -629,7 +629,7 @@
 </text><text class="breeze-shell-r5" x="0" y="1386.4" textLength="1464" clip-path="url(#breeze-shell-line-56)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-shell-line-56)">
 </text><text class="breeze-shell-r5" x="0" y="1410.8" textLength="24.4" clip-path="url(#breeze-shell-line-57)">╭─</text><text class="breeze-shell-r5" x="24.4" y="1410.8" textLength="207.4" clip-path="url(#breeze-shell-line-57)">&#160;Choose&#160;executor&#160;</text><text class="breeze-shell-r5" x="231.8" y="1410.8" textLength="1207.8" clip-path="url(#breeze-shell-line-57)">───────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="1410.8" textLength="24.4" clip-path="url(#breeze-shell-line-57)">─╮</text><text class="breeze-shell-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-shell-line-57)">
 </text><text class="breeze-shell-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-shell-line-58)">│</text><text class="breeze-shell-r4" x="24.4" y="1435.2" textLength="122" clip-path="url(#breeze-shell-line-58)">--executor</text><text class="breeze-shell-r1" x="256.2" y="1435.2" textLength="1061.4" clip-path="url(#breeze-shell-line-58)">Specify&#160;the&#160;executor&#160;to&#160;use&#160;with&#160;shell&#160;command.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1435.2" textLength="12.2" clip-path="url(#breeze-shell-line-58)">│</text><text class="breeze-shell-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-shell-line-58)">
-</text><text class="breeze-shell-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-shell-line-59)">│</text><text class="breeze-shell-r7" x="256.2" y="1459.6" textLength="1061.4" clip-path="url(#breeze-shell-line-59)">(LocalExecutor|KubernetesExecutor|CeleryExecutor|CeleryKubernetesExecutor|EdgeExecutor)</text><text class="breeze-shell-r5" x="1451.8" y="1459.6" textLength="12.2" clip-path="url(#breeze-shell-line-59)">│</text><text class="breeze-shell-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-shell-line-59)">
+</text><text class="breeze-shell-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-shell-line-59)">│</text><text class="breeze-shell-r7" x="256.2" y="1459.6" textLength="1061.4" clip-path="url(#breeze-shell-line-59)">(localexecutor|kubernetesexecutor|celeryexecutor|celerykubernetesexecutor|edgeexecutor)</text><text class="breeze-shell-r5" x="1451.8" y="1459.6" textLength="12.2" clip-path="url(#breeze-shell-line-59)">│</text><text class="breeze-shell-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-shell-line-59)">
 </text><text class="breeze-shell-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-shell-line-60)">│</text><text class="breeze-shell-r5" x="256.2" y="1484" textLength="1061.4" clip-path="url(#breeze-shell-line-60)">[default:&#160;LocalExecutor]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1484" textLength="12.2" clip-path="url(#breeze-shell-line-60)">│</text><text class="breeze-shell-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-shell-line-60)">
 </text><text class="breeze-shell-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-shell-line-61)">│</text><text class="breeze-shell-r4" x="24.4" y="1508.4" textLength="183" clip-path="url(#breeze-shell-line-61)">--celery-broker</text><text class="breeze-shell-r1" x="256.2" y="1508.4" textLength="402.6" clip-path="url(#breeze-shell-line-61)">Specify&#160;the&#160;celery&#160;message&#160;broker</text><text class="breeze-shell-r7" x="671" y="1508.4" textLength="195.2" clip-path="url(#breeze-shell-line-61)">(rabbitmq|redis)</text><text class="breeze-shell-r5" x="878.4" y="1508.4" textLength="195.2" clip-path="url(#breeze-shell-line-61)">[default:&#160;redis]</text><text class="breeze-shell-r5" x="1451.8" y="1508.4" textLength="12.2" clip-path="url(#breeze-shell-line-61)">│</text><text class="breeze-shell-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-shell-line-61)">
 </text><text class="breeze-shell-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-shell-line-62)">│</text><text class="breeze-shell-r4" x="24.4" y="1532.8" textLength="183" clip-path="url(#breeze-shell-line-62)">--celery-flower</text><text class="breeze-shell-r1" x="256.2" y="1532.8" textLength="231.8" clip-path="url(#breeze-shell-line-62)">Start&#160;celery&#160;flower</text><text class="breeze-shell-r5" x="1451.8" y="1532.8" textLength="12.2" clip-path="url(#breeze-shell-line-62)">│</text><text class="breeze-shell-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-shell-line-62)">
diff --git a/dev/breeze/doc/images/output_shell.txt b/dev/breeze/doc/images/output_shell.txt
index ab08dd10a1636..0658d1403b7b5 100644
--- a/dev/breeze/doc/images/output_shell.txt
+++ b/dev/breeze/doc/images/output_shell.txt
@@ -1 +1 @@
-88a0320b81a12411637d9b2596394a3a
+114c7905dcd3b0b35ee97fd7e5da4d4e
diff --git a/dev/breeze/doc/images/output_start-airflow.svg b/dev/breeze/doc/images/output_start-airflow.svg
index 24ef4793309b7..a4f89fa37fd93 100644
--- a/dev/breeze/doc/images/output_start-airflow.svg
+++ b/dev/breeze/doc/images/output_start-airflow.svg
@@ -529,12 +529,12 @@
 </text><text class="breeze-start-airflow-r5" x="0" y="1215.6" textLength="24.4" clip-path="url(#breeze-start-airflow-line-49)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="1215.6" textLength="231.8" clip-path="url(#breeze-start-airflow-line-49)">&#160;Choosing&#160;executor&#160;</text><text class="breeze-start-airflow-r5" x="256.2" y="1215.6" textLength="1183.4" clip-path="url(#breeze-start-airflow-line-49)">─────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="1215.6" textLength="24.4" clip-path="url(#breeze-start-airflow-line-49)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-49)">
 </text><text class="breeze-start-airflow-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-start-airflow-line-50)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1240" textLength="122" clip-path="url(#breeze-start-airflow-line-50)">--executor</text><text class="breeze-start-airflow-r1" x="256.2" y="1240" textLength="1183.4" clip-path="url(#breeze-start-airflow-line-50)">Specify&#160;the&#160;executor&#160;to&#160;use&#160;with&#160;start-airflow&#160;(defaults&#160;to&#160;LocalExecutor&#160;or&#160;CeleryExecutor&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1240" textLength="12.2" clip-path="url(#breeze-start-airflow-line-50)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-start-airflow-line-50)">
 </text><text class="breeze-start-airflow-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-51)">│</text><text class="breeze-start-airflow-r1" x="256.2" y="1264.4" textLength="1183.4" clip-path="url(#breeze-start-airflow-line-51)">depending&#160;on&#160;the&#160;integration&#160;used).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1264.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-51)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-51)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-52)">│</text><text class="breeze-start-airflow-r7" x="256.2" y="1288.8" textLength="1183.4" clip-path="url(#breeze-start-airflow-line-52)">(LocalExecutor|CeleryExecutor|EdgeExecutor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1288.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-52)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-52)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-52)">│</text><text class="breeze-start-airflow-r7" x="256.2" y="1288.8" textLength="1183.4" clip-path="url(#breeze-start-airflow-line-52)">(localexecutor|celeryexecutor|edgeexecutor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1288.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-52)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-52)">
 </text><text class="breeze-start-airflow-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-53)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1313.2" textLength="183" clip-path="url(#breeze-start-airflow-line-53)">--celery-broker</text><text class="breeze-start-airflow-r1" x="256.2" y="1313.2" textLength="402.6" clip-path="url(#breeze-start-airflow-line-53)">Specify&#160;the&#160;celery&#160;message&#160;broker</text><text class="breeze-start-airflow-r7" x="671" y="1313.2" textLength="195.2" clip-path="url(#breeze-start-airflow-line-53)">(rabbitmq|redis)</text><text class="breeze-start-airflow-r5" x="878.4" y="1313.2" textLength="195.2" clip-path="url(#breeze-start-airflow-line-53)">[default:&#160;redis]</text><text class="breeze-start-airflow-r5" x="1451.8" y="1313.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-53)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1313.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-53)">
 </text><text class="breeze-start-airflow-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-54)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1337.6" textLength="183" clip-path="url(#breeze-start-airflow-line-54)">--celery-flower</text><text class="breeze-start-airflow-r1" x="256.2" y="1337.6" textLength="231.8" clip-path="url(#breeze-start-airflow-line-54)">Start&#160;celery&#160;flower</text><text class="breeze-start-airflow-r5" x="1451.8" y="1337.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-54)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-54)">
 </text><text class="breeze-start-airflow-r5" x="0" y="1362" textLength="1464" clip-path="url(#breeze-start-airflow-line-55)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#breeze-start-airflow-line-55)">
 </text><text class="breeze-start-airflow-r5" x="0" y="1386.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-56)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="1386.4" textLength="170.8" clip-path="url(#breeze-start-airflow-line-56)">&#160;Auth&#160;manager&#160;</text><text class="breeze-start-airflow-r5" x="195.2" y="1386.4" textLength="1244.4" clip-path="url(#breeze-start-airflow-line-56)">──────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="1386.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-56)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-56)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-57)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1410.8" textLength="170.8" clip-path="url(#breeze-start-airflow-line-57)">--auth-manager</text><text class="breeze-start-airflow-r1" x="244" y="1410.8" textLength="610" clip-path="url(#breeze-start-airflow-line-57)">Specify&#160;the&#160;auth&#160;manager&#160;to&#160;use&#160;with&#160;start-airflow</text><text class="breeze-start-airflow-r7" x="866.2" y="1410.8" textLength="414.8" clip-path="url(#breeze-start-airflow-line-57)">(SimpleAuthManager|FabAuthManager)</text><text class="breeze-start-airflow-r5" x="1451.8" y="1410.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-57)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-57)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-57)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1410.8" textLength="170.8" clip-path="url(#breeze-start-airflow-line-57)">--auth-manager</text><text class="breeze-start-airflow-r1" x="244" y="1410.8" textLength="610" clip-path="url(#breeze-start-airflow-line-57)">Specify&#160;the&#160;auth&#160;manager&#160;to&#160;use&#160;with&#160;start-airflow</text><text class="breeze-start-airflow-r7" x="866.2" y="1410.8" textLength="414.8" clip-path="url(#breeze-start-airflow-line-57)">(simpleauthmanager|fabauthmanager)</text><text class="breeze-start-airflow-r5" x="1451.8" y="1410.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-57)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-57)">
 </text><text class="breeze-start-airflow-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-58)">│</text><text class="breeze-start-airflow-r5" x="244" y="1435.2" textLength="610" clip-path="url(#breeze-start-airflow-line-58)">[default:&#160;SimpleAuthManager]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1435.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-58)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-58)">
 </text><text class="breeze-start-airflow-r5" x="0" y="1459.6" textLength="1464" clip-path="url(#breeze-start-airflow-line-59)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-59)">
 </text><text class="breeze-start-airflow-r5" x="0" y="1484" textLength="24.4" clip-path="url(#breeze-start-airflow-line-60)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="1484" textLength="329.4" clip-path="url(#breeze-start-airflow-line-60)">&#160;Asset&#160;compilation&#160;options&#160;</text><text class="breeze-start-airflow-r5" x="353.8" y="1484" textLength="1085.8" clip-path="url(#breeze-start-airflow-line-60)">─────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="1484" textLength="24.4" clip-path="url(#breeze-start-airflow-line-60)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-start-airflow-line-60)">
diff --git a/dev/breeze/doc/images/output_start-airflow.txt b/dev/breeze/doc/images/output_start-airflow.txt
index a210aa26ef03c..4735e4ff3fc94 100644
--- a/dev/breeze/doc/images/output_start-airflow.txt
+++ b/dev/breeze/doc/images/output_start-airflow.txt
@@ -1 +1 @@
-9610c4e7624dd08101801d61232762f6
+e6915ea0ebe1a25577d3a7e055e6e414
diff --git a/dev/breeze/doc/images/output_static-checks.txt b/dev/breeze/doc/images/output_static-checks.txt
index e8dbbc57b6271..91520a15b2e70 100644
--- a/dev/breeze/doc/images/output_static-checks.txt
+++ b/dev/breeze/doc/images/output_static-checks.txt
@@ -1 +1 @@
-4d21a8da51102b0c61707aac83f31b3a
+68081f3a0a81c8210e838f8609504e2b
diff --git a/dev/breeze/doc/images/output_testing_airflow-ctl-tests.txt b/dev/breeze/doc/images/output_testing_airflow-ctl-tests.txt
index 3d97b4b676ed0..1d6cc7d3adcd9 100644
--- a/dev/breeze/doc/images/output_testing_airflow-ctl-tests.txt
+++ b/dev/breeze/doc/images/output_testing_airflow-ctl-tests.txt
@@ -1 +1 @@
-7950b438b01dc4d75116ef332c7f2812
+3b91aa29796d3512e9221bbf2e5d7a8c
diff --git a/dev/breeze/doc/images/output_testing_core-integration-tests.txt b/dev/breeze/doc/images/output_testing_core-integration-tests.txt
index 6cc94ab76b850..be8555cfdf376 100644
--- a/dev/breeze/doc/images/output_testing_core-integration-tests.txt
+++ b/dev/breeze/doc/images/output_testing_core-integration-tests.txt
@@ -1 +1 @@
-f9a72bab5c6f0a3d4eabddeb547818fe
+8c055fd94fd219b6e4b4fe6971c20269
diff --git a/dev/breeze/doc/images/output_testing_core-tests.txt b/dev/breeze/doc/images/output_testing_core-tests.txt
index a5c89681ead52..0c91e6779f145 100644
--- a/dev/breeze/doc/images/output_testing_core-tests.txt
+++ b/dev/breeze/doc/images/output_testing_core-tests.txt
@@ -1 +1 @@
-ceb51359e3530c67379ae17cf219647d
+02a1070920013e5e971818868f8300a2
diff --git a/dev/breeze/doc/images/output_testing_docker-compose-tests.txt b/dev/breeze/doc/images/output_testing_docker-compose-tests.txt
index 640b88b2b6c0b..59d14571df121 100644
--- a/dev/breeze/doc/images/output_testing_docker-compose-tests.txt
+++ b/dev/breeze/doc/images/output_testing_docker-compose-tests.txt
@@ -1 +1 @@
-51b98fe337251d125d8de538a71a21df
+d7be3a2ecc04a84d303ba53031ed5cd1
diff --git a/dev/breeze/doc/images/output_testing_helm-tests.txt b/dev/breeze/doc/images/output_testing_helm-tests.txt
index 14ca452d17ba6..ab713360677dc 100644
--- a/dev/breeze/doc/images/output_testing_helm-tests.txt
+++ b/dev/breeze/doc/images/output_testing_helm-tests.txt
@@ -1 +1 @@
-f67f6341ee5ef1786505b25152a278cc
+668fcec6898e91c2f80cd929200885a3
diff --git a/dev/breeze/doc/images/output_testing_providers-integration-tests.txt b/dev/breeze/doc/images/output_testing_providers-integration-tests.txt
index 6a4377016c653..988bdb0bf070b 100644
--- a/dev/breeze/doc/images/output_testing_providers-integration-tests.txt
+++ b/dev/breeze/doc/images/output_testing_providers-integration-tests.txt
@@ -1 +1 @@
-f8cae5908b307cdc14d48857da8e058d
+101f31d9f98a721a113bdebd6bff2701
diff --git a/dev/breeze/doc/images/output_testing_providers-tests.txt b/dev/breeze/doc/images/output_testing_providers-tests.txt
index 8c77d66e03ade..69ecf43903ef2 100644
--- a/dev/breeze/doc/images/output_testing_providers-tests.txt
+++ b/dev/breeze/doc/images/output_testing_providers-tests.txt
@@ -1 +1 @@
-40d4ee42e19c31200593c168157a2521
+80c28930cd69675e804506f6693cc2b6
diff --git a/dev/breeze/doc/images/output_testing_python-api-client-tests.txt b/dev/breeze/doc/images/output_testing_python-api-client-tests.txt
index feaff93e8dbfa..74f8904e200de 100644
--- a/dev/breeze/doc/images/output_testing_python-api-client-tests.txt
+++ b/dev/breeze/doc/images/output_testing_python-api-client-tests.txt
@@ -1 +1 @@
-92211c9044658c3f7f3ca81af06f7c43
+6f0d122750efb8f9c877698a648d7a8f
diff --git a/dev/breeze/doc/images/output_testing_system-tests.txt b/dev/breeze/doc/images/output_testing_system-tests.txt
index 68d7fffd36077..26423352289dc 100644
--- a/dev/breeze/doc/images/output_testing_system-tests.txt
+++ b/dev/breeze/doc/images/output_testing_system-tests.txt
@@ -1 +1 @@
-96c2e355b805d8d2a17d04978f4c6cdc
+c5a420fa9e8065d067a2f425ca761509
diff --git a/dev/breeze/doc/images/output_testing_task-sdk-tests.txt b/dev/breeze/doc/images/output_testing_task-sdk-tests.txt
index 3e66367f5db6d..aa016bcde1fbf 100644
--- a/dev/breeze/doc/images/output_testing_task-sdk-tests.txt
+++ b/dev/breeze/doc/images/output_testing_task-sdk-tests.txt
@@ -1 +1 @@
-a39f22cb9ce828c2793aad73ac80bd07
+ac0c0d9d9252a7ddc7f8083fa64e0659
diff --git a/dev/breeze/doc/images/output_workflow-run_publish-docs.txt b/dev/breeze/doc/images/output_workflow-run_publish-docs.txt
index b64cbd5c82a07..25d1e7eecfc3d 100644
--- a/dev/breeze/doc/images/output_workflow-run_publish-docs.txt
+++ b/dev/breeze/doc/images/output_workflow-run_publish-docs.txt
@@ -1 +1 @@
-aee3662a42543b525bf4ccfd23adaf62
+70c9f03eb3c6f2b1b857b1636aea1819
diff --git a/dev/breeze/pyproject.toml b/dev/breeze/pyproject.toml
index 73114320872ec..1381e546d8402 100644
--- a/dev/breeze/pyproject.toml
+++ b/dev/breeze/pyproject.toml
@@ -45,9 +45,7 @@ requires-python = "~=3.10"
 
 dependencies = [
     "black>=23.11.0",
-    # TODO: Click 8.2.0 is Python 3.10+ only by mistake (should be ~3.8) so we should limit it
-    #       until this is fixed https://github.com/pallets/click/issues/2896
-    "click>=8.1.8, <8.2.0",
+    "click>=8.1.8",
     "filelock>=3.13.0",
     "flit>=3.12.0",
     "flit-core>=3.12.0",
diff --git a/dev/breeze/uv.lock b/dev/breeze/uv.lock
index 1b21ff92a42ec..bda5fd052e7bc 100644
--- a/dev/breeze/uv.lock
+++ b/dev/breeze/uv.lock
@@ -1,12 +1,11 @@
 version = 1
 revision = 2
-requires-python = ">=3.9, <4"
+requires-python = ">=3.10, <4"
 resolution-markers = [
+    "python_full_version >= '3.13'",
     "python_full_version == '3.12.*'",
     "python_full_version == '3.11.*'",
-    "python_full_version == '3.10.*'",
-    "python_full_version < '3.10'",
-    "python_full_version >= '3.13'",
+    "python_full_version < '3.11'",
 ]
 
 [[package]]
@@ -68,7 +67,7 @@ requires-dist = [
     { name = "awswrangler", specifier = ">=3.11.0" },
     { name = "black", specifier = ">=23.11.0" },
     { name = "boto3", specifier = ">=1.34.90" },
-    { name = "click", specifier = ">=8.1.8,<8.2.0" },
+    { name = "click", specifier = ">=8.1.8" },
     { name = "filelock", specifier = ">=3.13.0" },
     { name = "flit", specifier = ">=3.12.0" },
     { name = "flit-core", specifier = ">=3.12.0" },
@@ -85,10 +84,10 @@ requires-dist = [
     { name = "pre-commit-uv", specifier = ">=4.1.3" },
     { name = "psutil", specifier = ">=5.9.6" },
     { name = "pygithub", specifier = ">=2.1.1" },
-    { name = "pytest", specifier = ">=8.2,<9" },
+    { name = "pytest", specifier = ">=8.3.3" },
     { name = "pytest-xdist", specifier = ">=3.3.1" },
     { name = "pyyaml", specifier = ">=6.0.2" },
-    { name = "requests", specifier = ">=2.31.0" },
+    { name = "requests", specifier = ">=2.32.0" },
     { name = "restructuredtext-lint", specifier = ">=1.4.0" },
     { name = "rich", specifier = ">=13.6.0" },
     { name = "rich-click", specifier = ">=1.7.1" },
@@ -115,8 +114,7 @@ source = { registry = "https://pypi.org/simple" }
 dependencies = [
     { name = "boto3" },
     { name = "botocore" },
-    { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
-    { name = "numpy", version = "2.2.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+    { name = "numpy" },
     { name = "packaging" },
     { name = "pandas" },
     { name = "pyarrow" },
@@ -168,10 +166,6 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/37/d5/602d0ef5dfcace3fb4f79c436762f130abd9ee8d950fa2abdbf8bbc555e0/black-24.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1f93102e0c5bb3907451063e08b9876dbeac810e7da5a8bfb7aeb5a9ef89066b", size = 1448085, upload_time = "2024-10-07T19:28:12.093Z" },
     { url = "https://files.pythonhosted.org/packages/47/6d/a3a239e938960df1a662b93d6230d4f3e9b4a22982d060fc38c42f45a56b/black-24.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ddacb691cdcdf77b96f549cf9591701d8db36b2f19519373d60d31746068dbf2", size = 1760928, upload_time = "2024-10-07T19:24:15.233Z" },
     { url = "https://files.pythonhosted.org/packages/dd/cf/af018e13b0eddfb434df4d9cd1b2b7892bab119f7a20123e93f6910982e8/black-24.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:680359d932801c76d2e9c9068d05c6b107f2584b2a5b88831c83962eb9984c1b", size = 1436875, upload_time = "2024-10-07T19:24:42.762Z" },
-    { url = "https://files.pythonhosted.org/packages/fe/02/f408c804e0ee78c367dcea0a01aedde4f1712af93b8b6e60df981e0228c7/black-24.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:17374989640fbca88b6a448129cd1745c5eb8d9547b464f281b251dd00155ccd", size = 1622516, upload_time = "2024-10-07T19:29:40.629Z" },
-    { url = "https://files.pythonhosted.org/packages/f8/b9/9b706ed2f55bfb28b436225a9c57da35990c9005b90b8c91f03924454ad7/black-24.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:63f626344343083322233f175aaf372d326de8436f5928c042639a4afbbf1d3f", size = 1456181, upload_time = "2024-10-07T19:28:11.16Z" },
-    { url = "https://files.pythonhosted.org/packages/0a/1c/314d7f17434a5375682ad097f6f4cc0e3f414f3c95a9b1bb4df14a0f11f9/black-24.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfa1d0cb6200857f1923b602f978386a3a2758a65b52e0950299ea014be6800", size = 1752801, upload_time = "2024-10-07T19:23:56.594Z" },
-    { url = "https://files.pythonhosted.org/packages/39/a7/20e5cd9237d28ad0b31438de5d9f01c8b99814576f4c0cda1edd62caf4b0/black-24.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:2cd9c95431d94adc56600710f8813ee27eea544dd118d45896bb734e9d7a0dc7", size = 1413626, upload_time = "2024-10-07T19:24:46.133Z" },
     { url = "https://files.pythonhosted.org/packages/8d/a7/4b27c50537ebca8bec139b872861f9d2bf501c5ec51fcf897cb924d9e264/black-24.10.0-py3-none-any.whl", hash = "sha256:3bb2b7a1f7b685f85b11fed1ef10f8a9148bceb49853e47a294a3dd963c1dd7d", size = 206898, upload_time = "2024-10-07T19:20:48.317Z" },
 ]
 
@@ -196,8 +190,7 @@ source = { registry = "https://pypi.org/simple" }
 dependencies = [
     { name = "jmespath" },
     { name = "python-dateutil" },
-    { name = "urllib3", version = "1.26.20", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
-    { name = "urllib3", version = "2.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+    { name = "urllib3" },
 ]
 sdist = { url = "https://files.pythonhosted.org/packages/de/36/5b0faba074684744244e1e030e73fd5612bc2c38f557eec0a7f1a3d7ddd2/botocore-1.38.13.tar.gz", hash = "sha256:22feee15753cd3f9f7179d041604078a1024701497d27b22be7c6707e8d13ccb", size = 13882010, upload_time = "2025-05-09T19:32:51.172Z" }
 wheels = [
@@ -277,18 +270,6 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469, upload_time = "2024-09-04T20:44:41.616Z" },
     { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475, upload_time = "2024-09-04T20:44:43.733Z" },
     { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009, upload_time = "2024-09-04T20:44:45.309Z" },
-    { url = "https://files.pythonhosted.org/packages/b9/ea/8bb50596b8ffbc49ddd7a1ad305035daa770202a6b782fc164647c2673ad/cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16", size = 182220, upload_time = "2024-09-04T20:45:01.577Z" },
-    { url = "https://files.pythonhosted.org/packages/ae/11/e77c8cd24f58285a82c23af484cf5b124a376b32644e445960d1a4654c3a/cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36", size = 178605, upload_time = "2024-09-04T20:45:03.837Z" },
-    { url = "https://files.pythonhosted.org/packages/ed/65/25a8dc32c53bf5b7b6c2686b42ae2ad58743f7ff644844af7cdb29b49361/cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8", size = 424910, upload_time = "2024-09-04T20:45:05.315Z" },
-    { url = "https://files.pythonhosted.org/packages/42/7a/9d086fab7c66bd7c4d0f27c57a1b6b068ced810afc498cc8c49e0088661c/cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576", size = 447200, upload_time = "2024-09-04T20:45:06.903Z" },
-    { url = "https://files.pythonhosted.org/packages/da/63/1785ced118ce92a993b0ec9e0d0ac8dc3e5dbfbcaa81135be56c69cabbb6/cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", size = 454565, upload_time = "2024-09-04T20:45:08.975Z" },
-    { url = "https://files.pythonhosted.org/packages/74/06/90b8a44abf3556599cdec107f7290277ae8901a58f75e6fe8f970cd72418/cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0", size = 435635, upload_time = "2024-09-04T20:45:10.64Z" },
-    { url = "https://files.pythonhosted.org/packages/bd/62/a1f468e5708a70b1d86ead5bab5520861d9c7eacce4a885ded9faa7729c3/cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3", size = 445218, upload_time = "2024-09-04T20:45:12.366Z" },
-    { url = "https://files.pythonhosted.org/packages/5b/95/b34462f3ccb09c2594aa782d90a90b045de4ff1f70148ee79c69d37a0a5a/cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595", size = 460486, upload_time = "2024-09-04T20:45:13.935Z" },
-    { url = "https://files.pythonhosted.org/packages/fc/fc/a1e4bebd8d680febd29cf6c8a40067182b64f00c7d105f8f26b5bc54317b/cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a", size = 437911, upload_time = "2024-09-04T20:45:15.696Z" },
-    { url = "https://files.pythonhosted.org/packages/e6/c3/21cab7a6154b6a5ea330ae80de386e7665254835b9e98ecc1340b3a7de9a/cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e", size = 460632, upload_time = "2024-09-04T20:45:17.284Z" },
-    { url = "https://files.pythonhosted.org/packages/cb/b5/fd9f8b5a84010ca169ee49f4e4ad6f8c05f4e3545b72ee041dbbcb159882/cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7", size = 171820, upload_time = "2024-09-04T20:45:18.762Z" },
-    { url = "https://files.pythonhosted.org/packages/8c/52/b08750ce0bce45c143e1b5d7357ee8c55341b52bdef4b0f081af1eb248c2/cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662", size = 181290, upload_time = "2024-09-04T20:45:20.226Z" },
 ]
 
 [[package]]
@@ -366,21 +347,6 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/d8/90/6af4cd042066a4adad58ae25648a12c09c879efa4849c705719ba1b23d8c/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482", size = 144970, upload_time = "2024-10-09T07:39:21.452Z" },
     { url = "https://files.pythonhosted.org/packages/cc/67/e5e7e0cbfefc4ca79025238b43cdf8a2037854195b37d6417f3d0895c4c2/charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67", size = 94973, upload_time = "2024-10-09T07:39:22.509Z" },
     { url = "https://files.pythonhosted.org/packages/65/97/fc9bbc54ee13d33dc54a7fcf17b26368b18505500fc01e228c27b5222d80/charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b", size = 102308, upload_time = "2024-10-09T07:39:23.524Z" },
-    { url = "https://files.pythonhosted.org/packages/54/2f/28659eee7f5d003e0f5a3b572765bf76d6e0fe6601ab1f1b1dd4cba7e4f1/charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa", size = 196326, upload_time = "2024-10-09T07:39:59.619Z" },
-    { url = "https://files.pythonhosted.org/packages/d1/18/92869d5c0057baa973a3ee2af71573be7b084b3c3d428fe6463ce71167f8/charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a", size = 125614, upload_time = "2024-10-09T07:40:00.776Z" },
-    { url = "https://files.pythonhosted.org/packages/d6/27/327904c5a54a7796bb9f36810ec4173d2df5d88b401d2b95ef53111d214e/charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0", size = 120450, upload_time = "2024-10-09T07:40:02.621Z" },
-    { url = "https://files.pythonhosted.org/packages/a4/23/65af317914a0308495133b2d654cf67b11bbd6ca16637c4e8a38f80a5a69/charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a", size = 140135, upload_time = "2024-10-09T07:40:05.719Z" },
-    { url = "https://files.pythonhosted.org/packages/f2/41/6190102ad521a8aa888519bb014a74251ac4586cde9b38e790901684f9ab/charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242", size = 150413, upload_time = "2024-10-09T07:40:06.777Z" },
-    { url = "https://files.pythonhosted.org/packages/7b/ab/f47b0159a69eab9bd915591106859f49670c75f9a19082505ff16f50efc0/charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b", size = 142992, upload_time = "2024-10-09T07:40:07.921Z" },
-    { url = "https://files.pythonhosted.org/packages/28/89/60f51ad71f63aaaa7e51a2a2ad37919985a341a1d267070f212cdf6c2d22/charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62", size = 144871, upload_time = "2024-10-09T07:40:09.035Z" },
-    { url = "https://files.pythonhosted.org/packages/0c/48/0050550275fea585a6e24460b42465020b53375017d8596c96be57bfabca/charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0", size = 146756, upload_time = "2024-10-09T07:40:10.186Z" },
-    { url = "https://files.pythonhosted.org/packages/dc/b5/47f8ee91455946f745e6c9ddbb0f8f50314d2416dd922b213e7d5551ad09/charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd", size = 141034, upload_time = "2024-10-09T07:40:11.386Z" },
-    { url = "https://files.pythonhosted.org/packages/84/79/5c731059ebab43e80bf61fa51666b9b18167974b82004f18c76378ed31a3/charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be", size = 149434, upload_time = "2024-10-09T07:40:12.513Z" },
-    { url = "https://files.pythonhosted.org/packages/ca/f3/0719cd09fc4dc42066f239cb3c48ced17fc3316afca3e2a30a4756fe49ab/charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d", size = 152443, upload_time = "2024-10-09T07:40:13.655Z" },
-    { url = "https://files.pythonhosted.org/packages/f7/0e/c6357297f1157c8e8227ff337e93fd0a90e498e3d6ab96b2782204ecae48/charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3", size = 150294, upload_time = "2024-10-09T07:40:14.883Z" },
-    { url = "https://files.pythonhosted.org/packages/54/9a/acfa96dc4ea8c928040b15822b59d0863d6e1757fba8bd7de3dc4f761c13/charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742", size = 145314, upload_time = "2024-10-09T07:40:16.043Z" },
-    { url = "https://files.pythonhosted.org/packages/73/1c/b10a63032eaebb8d7bcb8544f12f063f41f5f463778ac61da15d9985e8b6/charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2", size = 94724, upload_time = "2024-10-09T07:40:17.199Z" },
-    { url = "https://files.pythonhosted.org/packages/c5/77/3a78bf28bfaa0863f9cfef278dbeadf55efe064eafff8c7c424ae3c4c1bf/charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca", size = 102159, upload_time = "2024-10-09T07:40:18.264Z" },
     { url = "https://files.pythonhosted.org/packages/bf/9b/08c0432272d77b04803958a4598a51e2a4b51c06640af8b8f0f908c18bf2/charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", size = 49446, upload_time = "2024-10-09T07:40:19.383Z" },
 ]
 
@@ -436,10 +402,6 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/93/90/116edd5f8ec23b2dc879f7a42443e073cdad22950d3c8ee834e3b8124543/cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a2a431ee15799d6db9fe80c82b055bae5a752bef645bba795e8e52687c69efe3", size = 3679828, upload_time = "2024-10-18T15:58:15.254Z" },
     { url = "https://files.pythonhosted.org/packages/d8/32/1e1d78b316aa22c0ba6493cc271c1c309969e5aa5c22c830a1d7ce3471e6/cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:281c945d0e28c92ca5e5930664c1cefd85efe80e5c0d2bc58dd63383fda29f83", size = 3908132, upload_time = "2024-10-18T15:58:16.943Z" },
     { url = "https://files.pythonhosted.org/packages/91/bb/cd2c13be3332e7af3cdf16154147952d39075b9f61ea5e6b5241bf4bf436/cryptography-43.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f18c716be16bc1fea8e95def49edf46b82fccaa88587a45f8dc0ff6ab5d8e0a7", size = 2988811, upload_time = "2024-10-18T15:58:19.674Z" },
-    { url = "https://files.pythonhosted.org/packages/cc/fc/ff7c76afdc4f5933b5e99092528d4783d3d1b131960fc8b31eb38e076ca8/cryptography-43.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4a02ded6cd4f0a5562a8887df8b3bd14e822a90f97ac5e544c162899bc467664", size = 3146844, upload_time = "2024-10-18T15:58:21.595Z" },
-    { url = "https://files.pythonhosted.org/packages/d7/29/a233efb3e98b13d9175dcb3c3146988ec990896c8fa07e8467cce27d5a80/cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:53a583b6637ab4c4e3591a15bc9db855b8d9dee9a669b550f311480acab6eb08", size = 3681997, upload_time = "2024-10-18T15:58:24.08Z" },
-    { url = "https://files.pythonhosted.org/packages/c0/cf/c9eea7791b961f279fb6db86c3355cfad29a73141f46427af71852b23b95/cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1ec0bcf7e17c0c5669d881b1cd38c4972fade441b27bda1051665faaa89bdcaa", size = 3905208, upload_time = "2024-10-18T15:58:25.699Z" },
-    { url = "https://files.pythonhosted.org/packages/21/ea/6c38ca546d5b6dab3874c2b8fc6b1739baac29bacdea31a8c6c0513b3cfa/cryptography-43.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2ce6fae5bdad59577b44e4dfed356944fbf1d925269114c28be377692643b4ff", size = 2989787, upload_time = "2024-10-18T15:58:27.521Z" },
 ]
 
 [[package]]
@@ -963,16 +925,6 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098, upload_time = "2024-10-18T15:21:40.813Z" },
     { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208, upload_time = "2024-10-18T15:21:41.814Z" },
     { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload_time = "2024-10-18T15:21:42.784Z" },
-    { url = "https://files.pythonhosted.org/packages/a7/ea/9b1530c3fdeeca613faeb0fb5cbcf2389d816072fab72a71b45749ef6062/MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a", size = 14344, upload_time = "2024-10-18T15:21:43.721Z" },
-    { url = "https://files.pythonhosted.org/packages/4b/c2/fbdbfe48848e7112ab05e627e718e854d20192b674952d9042ebd8c9e5de/MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff", size = 12389, upload_time = "2024-10-18T15:21:44.666Z" },
-    { url = "https://files.pythonhosted.org/packages/f0/25/7a7c6e4dbd4f867d95d94ca15449e91e52856f6ed1905d58ef1de5e211d0/MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13", size = 21607, upload_time = "2024-10-18T15:21:45.452Z" },
-    { url = "https://files.pythonhosted.org/packages/53/8f/f339c98a178f3c1e545622206b40986a4c3307fe39f70ccd3d9df9a9e425/MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144", size = 20728, upload_time = "2024-10-18T15:21:46.295Z" },
-    { url = "https://files.pythonhosted.org/packages/1a/03/8496a1a78308456dbd50b23a385c69b41f2e9661c67ea1329849a598a8f9/MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29", size = 20826, upload_time = "2024-10-18T15:21:47.134Z" },
-    { url = "https://files.pythonhosted.org/packages/e6/cf/0a490a4bd363048c3022f2f475c8c05582179bb179defcee4766fb3dcc18/MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0", size = 21843, upload_time = "2024-10-18T15:21:48.334Z" },
-    { url = "https://files.pythonhosted.org/packages/19/a3/34187a78613920dfd3cdf68ef6ce5e99c4f3417f035694074beb8848cd77/MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0", size = 21219, upload_time = "2024-10-18T15:21:49.587Z" },
-    { url = "https://files.pythonhosted.org/packages/17/d8/5811082f85bb88410ad7e452263af048d685669bbbfb7b595e8689152498/MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178", size = 20946, upload_time = "2024-10-18T15:21:50.441Z" },
-    { url = "https://files.pythonhosted.org/packages/7c/31/bd635fb5989440d9365c5e3c47556cfea121c7803f5034ac843e8f37c2f2/MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f", size = 15063, upload_time = "2024-10-18T15:21:51.385Z" },
-    { url = "https://files.pythonhosted.org/packages/b3/73/085399401383ce949f727afec55ec3abd76648d04b9f22e1c0e99cb4bec3/MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a", size = 15506, upload_time = "2024-10-18T15:21:52.974Z" },
 ]
 
 [[package]]
@@ -1034,71 +986,10 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314, upload_time = "2024-06-04T18:44:08.352Z" },
 ]
 
-[[package]]
-name = "numpy"
-version = "2.0.2"
-source = { registry = "https://pypi.org/simple" }
-resolution-markers = [
-    "python_full_version < '3.10'",
-]
-sdist = { url = "https://files.pythonhosted.org/packages/a9/75/10dd1f8116a8b796cb2c737b674e02d02e80454bda953fa7e65d8c12b016/numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78", size = 18902015, upload_time = "2024-08-26T20:19:40.945Z" }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/21/91/3495b3237510f79f5d81f2508f9f13fea78ebfdf07538fc7444badda173d/numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece", size = 21165245, upload_time = "2024-08-26T20:04:14.625Z" },
-    { url = "https://files.pythonhosted.org/packages/05/33/26178c7d437a87082d11019292dce6d3fe6f0e9026b7b2309cbf3e489b1d/numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04", size = 13738540, upload_time = "2024-08-26T20:04:36.784Z" },
-    { url = "https://files.pythonhosted.org/packages/ec/31/cc46e13bf07644efc7a4bf68df2df5fb2a1a88d0cd0da9ddc84dc0033e51/numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66", size = 5300623, upload_time = "2024-08-26T20:04:46.491Z" },
-    { url = "https://files.pythonhosted.org/packages/6e/16/7bfcebf27bb4f9d7ec67332ffebee4d1bf085c84246552d52dbb548600e7/numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b", size = 6901774, upload_time = "2024-08-26T20:04:58.173Z" },
-    { url = "https://files.pythonhosted.org/packages/f9/a3/561c531c0e8bf082c5bef509d00d56f82e0ea7e1e3e3a7fc8fa78742a6e5/numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd", size = 13907081, upload_time = "2024-08-26T20:05:19.098Z" },
-    { url = "https://files.pythonhosted.org/packages/fa/66/f7177ab331876200ac7563a580140643d1179c8b4b6a6b0fc9838de2a9b8/numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318", size = 19523451, upload_time = "2024-08-26T20:05:47.479Z" },
-    { url = "https://files.pythonhosted.org/packages/25/7f/0b209498009ad6453e4efc2c65bcdf0ae08a182b2b7877d7ab38a92dc542/numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8", size = 19927572, upload_time = "2024-08-26T20:06:17.137Z" },
-    { url = "https://files.pythonhosted.org/packages/3e/df/2619393b1e1b565cd2d4c4403bdd979621e2c4dea1f8532754b2598ed63b/numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326", size = 14400722, upload_time = "2024-08-26T20:06:39.16Z" },
-    { url = "https://files.pythonhosted.org/packages/22/ad/77e921b9f256d5da36424ffb711ae79ca3f451ff8489eeca544d0701d74a/numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97", size = 6472170, upload_time = "2024-08-26T20:06:50.361Z" },
-    { url = "https://files.pythonhosted.org/packages/10/05/3442317535028bc29cf0c0dd4c191a4481e8376e9f0db6bcf29703cadae6/numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131", size = 15905558, upload_time = "2024-08-26T20:07:13.881Z" },
-    { url = "https://files.pythonhosted.org/packages/8b/cf/034500fb83041aa0286e0fb16e7c76e5c8b67c0711bb6e9e9737a717d5fe/numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448", size = 21169137, upload_time = "2024-08-26T20:07:45.345Z" },
-    { url = "https://files.pythonhosted.org/packages/4a/d9/32de45561811a4b87fbdee23b5797394e3d1504b4a7cf40c10199848893e/numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195", size = 13703552, upload_time = "2024-08-26T20:08:06.666Z" },
-    { url = "https://files.pythonhosted.org/packages/c1/ca/2f384720020c7b244d22508cb7ab23d95f179fcfff33c31a6eeba8d6c512/numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57", size = 5298957, upload_time = "2024-08-26T20:08:15.83Z" },
-    { url = "https://files.pythonhosted.org/packages/0e/78/a3e4f9fb6aa4e6fdca0c5428e8ba039408514388cf62d89651aade838269/numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a", size = 6905573, upload_time = "2024-08-26T20:08:27.185Z" },
-    { url = "https://files.pythonhosted.org/packages/a0/72/cfc3a1beb2caf4efc9d0b38a15fe34025230da27e1c08cc2eb9bfb1c7231/numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669", size = 13914330, upload_time = "2024-08-26T20:08:48.058Z" },
-    { url = "https://files.pythonhosted.org/packages/ba/a8/c17acf65a931ce551fee11b72e8de63bf7e8a6f0e21add4c937c83563538/numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951", size = 19534895, upload_time = "2024-08-26T20:09:16.536Z" },
-    { url = "https://files.pythonhosted.org/packages/ba/86/8767f3d54f6ae0165749f84648da9dcc8cd78ab65d415494962c86fac80f/numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9", size = 19937253, upload_time = "2024-08-26T20:09:46.263Z" },
-    { url = "https://files.pythonhosted.org/packages/df/87/f76450e6e1c14e5bb1eae6836478b1028e096fd02e85c1c37674606ab752/numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15", size = 14414074, upload_time = "2024-08-26T20:10:08.483Z" },
-    { url = "https://files.pythonhosted.org/packages/5c/ca/0f0f328e1e59f73754f06e1adfb909de43726d4f24c6a3f8805f34f2b0fa/numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4", size = 6470640, upload_time = "2024-08-26T20:10:19.732Z" },
-    { url = "https://files.pythonhosted.org/packages/eb/57/3a3f14d3a759dcf9bf6e9eda905794726b758819df4663f217d658a58695/numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc", size = 15910230, upload_time = "2024-08-26T20:10:43.413Z" },
-    { url = "https://files.pythonhosted.org/packages/45/40/2e117be60ec50d98fa08c2f8c48e09b3edea93cfcabd5a9ff6925d54b1c2/numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b", size = 20895803, upload_time = "2024-08-26T20:11:13.916Z" },
-    { url = "https://files.pythonhosted.org/packages/46/92/1b8b8dee833f53cef3e0a3f69b2374467789e0bb7399689582314df02651/numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e", size = 13471835, upload_time = "2024-08-26T20:11:34.779Z" },
-    { url = "https://files.pythonhosted.org/packages/7f/19/e2793bde475f1edaea6945be141aef6c8b4c669b90c90a300a8954d08f0a/numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c", size = 5038499, upload_time = "2024-08-26T20:11:43.902Z" },
-    { url = "https://files.pythonhosted.org/packages/e3/ff/ddf6dac2ff0dd50a7327bcdba45cb0264d0e96bb44d33324853f781a8f3c/numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c", size = 6633497, upload_time = "2024-08-26T20:11:55.09Z" },
-    { url = "https://files.pythonhosted.org/packages/72/21/67f36eac8e2d2cd652a2e69595a54128297cdcb1ff3931cfc87838874bd4/numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692", size = 13621158, upload_time = "2024-08-26T20:12:14.95Z" },
-    { url = "https://files.pythonhosted.org/packages/39/68/e9f1126d757653496dbc096cb429014347a36b228f5a991dae2c6b6cfd40/numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a", size = 19236173, upload_time = "2024-08-26T20:12:44.049Z" },
-    { url = "https://files.pythonhosted.org/packages/d1/e9/1f5333281e4ebf483ba1c888b1d61ba7e78d7e910fdd8e6499667041cc35/numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c", size = 19634174, upload_time = "2024-08-26T20:13:13.634Z" },
-    { url = "https://files.pythonhosted.org/packages/71/af/a469674070c8d8408384e3012e064299f7a2de540738a8e414dcfd639996/numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded", size = 14099701, upload_time = "2024-08-26T20:13:34.851Z" },
-    { url = "https://files.pythonhosted.org/packages/d0/3d/08ea9f239d0e0e939b6ca52ad403c84a2bce1bde301a8eb4888c1c1543f1/numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5", size = 6174313, upload_time = "2024-08-26T20:13:45.653Z" },
-    { url = "https://files.pythonhosted.org/packages/b2/b5/4ac39baebf1fdb2e72585c8352c56d063b6126be9fc95bd2bb5ef5770c20/numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a", size = 15606179, upload_time = "2024-08-26T20:14:08.786Z" },
-    { url = "https://files.pythonhosted.org/packages/43/c1/41c8f6df3162b0c6ffd4437d729115704bd43363de0090c7f913cfbc2d89/numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c", size = 21169942, upload_time = "2024-08-26T20:14:40.108Z" },
-    { url = "https://files.pythonhosted.org/packages/39/bc/fd298f308dcd232b56a4031fd6ddf11c43f9917fbc937e53762f7b5a3bb1/numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd", size = 13711512, upload_time = "2024-08-26T20:15:00.985Z" },
-    { url = "https://files.pythonhosted.org/packages/96/ff/06d1aa3eeb1c614eda245c1ba4fb88c483bee6520d361641331872ac4b82/numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b", size = 5306976, upload_time = "2024-08-26T20:15:10.876Z" },
-    { url = "https://files.pythonhosted.org/packages/2d/98/121996dcfb10a6087a05e54453e28e58694a7db62c5a5a29cee14c6e047b/numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729", size = 6906494, upload_time = "2024-08-26T20:15:22.055Z" },
-    { url = "https://files.pythonhosted.org/packages/15/31/9dffc70da6b9bbf7968f6551967fc21156207366272c2a40b4ed6008dc9b/numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1", size = 13912596, upload_time = "2024-08-26T20:15:42.452Z" },
-    { url = "https://files.pythonhosted.org/packages/b9/14/78635daab4b07c0930c919d451b8bf8c164774e6a3413aed04a6d95758ce/numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd", size = 19526099, upload_time = "2024-08-26T20:16:11.048Z" },
-    { url = "https://files.pythonhosted.org/packages/26/4c/0eeca4614003077f68bfe7aac8b7496f04221865b3a5e7cb230c9d055afd/numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d", size = 19932823, upload_time = "2024-08-26T20:16:40.171Z" },
-    { url = "https://files.pythonhosted.org/packages/f1/46/ea25b98b13dccaebddf1a803f8c748680d972e00507cd9bc6dcdb5aa2ac1/numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d", size = 14404424, upload_time = "2024-08-26T20:17:02.604Z" },
-    { url = "https://files.pythonhosted.org/packages/c8/a6/177dd88d95ecf07e722d21008b1b40e681a929eb9e329684d449c36586b2/numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa", size = 6476809, upload_time = "2024-08-26T20:17:13.553Z" },
-    { url = "https://files.pythonhosted.org/packages/ea/2b/7fc9f4e7ae5b507c1a3a21f0f15ed03e794c1242ea8a242ac158beb56034/numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73", size = 15911314, upload_time = "2024-08-26T20:17:36.72Z" },
-    { url = "https://files.pythonhosted.org/packages/8f/3b/df5a870ac6a3be3a86856ce195ef42eec7ae50d2a202be1f5a4b3b340e14/numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8", size = 21025288, upload_time = "2024-08-26T20:18:07.732Z" },
-    { url = "https://files.pythonhosted.org/packages/2c/97/51af92f18d6f6f2d9ad8b482a99fb74e142d71372da5d834b3a2747a446e/numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4", size = 6762793, upload_time = "2024-08-26T20:18:19.125Z" },
-    { url = "https://files.pythonhosted.org/packages/12/46/de1fbd0c1b5ccaa7f9a005b66761533e2f6a3e560096682683a223631fe9/numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c", size = 19334885, upload_time = "2024-08-26T20:18:47.237Z" },
-    { url = "https://files.pythonhosted.org/packages/cc/dc/d330a6faefd92b446ec0f0dfea4c3207bb1fef3c4771d19cf4543efd2c78/numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385", size = 15828784, upload_time = "2024-08-26T20:19:11.19Z" },
-]
-
 [[package]]
 name = "numpy"
 version = "2.2.5"
 source = { registry = "https://pypi.org/simple" }
-resolution-markers = [
-    "python_full_version == '3.12.*'",
-    "python_full_version == '3.11.*'",
-    "python_full_version == '3.10.*'",
-    "python_full_version >= '3.13'",
-]
 sdist = { url = "https://files.pythonhosted.org/packages/dc/b2/ce4b867d8cd9c0ee84938ae1e6a6f7926ebf928c9090d036fc3c6a04f946/numpy-2.2.5.tar.gz", hash = "sha256:a9c0d994680cd991b1cb772e8b297340085466a6fe964bc9d4e80f5e2f43c291", size = 20273920, upload_time = "2025-04-19T23:27:42.561Z" }
 wheels = [
     { url = "https://files.pythonhosted.org/packages/ef/4e/3d9e6d16237c2aa5485695f0626cbba82f6481efca2e9132368dea3b885e/numpy-2.2.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1f4a922da1729f4c40932b2af4fe84909c7a6e167e6e99f71838ce3a29f3fe26", size = 21252117, upload_time = "2025-04-19T22:31:01.142Z" },
@@ -1180,8 +1071,7 @@ name = "pandas"
 version = "2.2.3"
 source = { registry = "https://pypi.org/simple" }
 dependencies = [
-    { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
-    { name = "numpy", version = "2.2.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+    { name = "numpy" },
     { name = "python-dateutil" },
     { name = "pytz" },
     { name = "tzdata" },
@@ -1222,13 +1112,6 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/25/b0/98d6ae2e1abac4f35230aa756005e8654649d305df9a28b16b9ae4353bff/pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", size = 11871013, upload_time = "2024-09-20T13:09:44.39Z" },
     { url = "https://files.pythonhosted.org/packages/cc/57/0f72a10f9db6a4628744c8e8f0df4e6e21de01212c7c981d31e50ffc8328/pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", size = 15711620, upload_time = "2024-09-20T19:02:20.639Z" },
     { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436, upload_time = "2024-09-20T13:09:48.112Z" },
-    { url = "https://files.pythonhosted.org/packages/ca/8c/8848a4c9b8fdf5a534fe2077af948bf53cd713d77ffbcd7bd15710348fd7/pandas-2.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39", size = 12595535, upload_time = "2024-09-20T13:09:51.339Z" },
-    { url = "https://files.pythonhosted.org/packages/9c/b9/5cead4f63b6d31bdefeb21a679bc5a7f4aaf262ca7e07e2bc1c341b68470/pandas-2.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30", size = 11319822, upload_time = "2024-09-20T13:09:54.31Z" },
-    { url = "https://files.pythonhosted.org/packages/31/af/89e35619fb573366fa68dc26dad6ad2c08c17b8004aad6d98f1a31ce4bb3/pandas-2.2.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c", size = 15625439, upload_time = "2024-09-20T19:02:23.689Z" },
-    { url = "https://files.pythonhosted.org/packages/3d/dd/bed19c2974296661493d7acc4407b1d2db4e2a482197df100f8f965b6225/pandas-2.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c", size = 13068928, upload_time = "2024-09-20T13:09:56.746Z" },
-    { url = "https://files.pythonhosted.org/packages/31/a3/18508e10a31ea108d746c848b5a05c0711e0278fa0d6f1c52a8ec52b80a5/pandas-2.2.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea", size = 16783266, upload_time = "2024-09-20T19:02:26.247Z" },
-    { url = "https://files.pythonhosted.org/packages/c4/a5/3429bd13d82bebc78f4d78c3945efedef63a7cd0c15c17b2eeb838d1121f/pandas-2.2.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761", size = 14450871, upload_time = "2024-09-20T13:09:59.779Z" },
-    { url = "https://files.pythonhosted.org/packages/2f/49/5c30646e96c684570925b772eac4eb0a8cb0ca590fa978f56c5d3ae73ea1/pandas-2.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e", size = 11618011, upload_time = "2024-09-20T13:10:02.351Z" },
 ]
 
 [[package]]
@@ -1340,8 +1223,6 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/1c/f2/baf397f3dd1d3e4af7e3f5a0382b868d25ac068eefe1ebde05132333436c/protobuf-5.28.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:a3f6857551e53ce35e60b403b8a27b0295f7d6eb63d10484f12bc6879c715687", size = 414743, upload_time = "2024-10-23T01:07:13.455Z" },
     { url = "https://files.pythonhosted.org/packages/85/50/cd61a358ba1601f40e7d38bcfba22e053f40ef2c50d55b55926aecc8fec7/protobuf-5.28.3-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:3fa2de6b8b29d12c61911505d893afe7320ce7ccba4df913e2971461fa36d584", size = 316511, upload_time = "2024-10-23T01:07:14.51Z" },
     { url = "https://files.pythonhosted.org/packages/5d/ae/3257b09328c0b4e59535e497b0c7537d4954038bdd53a2f0d2f49d15a7c4/protobuf-5.28.3-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:712319fbdddb46f21abb66cd33cb9e491a5763b2febd8f228251add221981135", size = 316624, upload_time = "2024-10-23T01:07:16.192Z" },
-    { url = "https://files.pythonhosted.org/packages/57/b5/ee3d918f536168def73b3f49edeba065429ab3a7e7b033d33e69c46ddff9/protobuf-5.28.3-cp39-cp39-win32.whl", hash = "sha256:135658402f71bbd49500322c0f736145731b16fc79dc8f367ab544a17eab4535", size = 419648, upload_time = "2024-10-23T01:07:21.922Z" },
-    { url = "https://files.pythonhosted.org/packages/53/54/e1bdf6f1d29828ddb6aca0a83bf208ab1d5f88126f34e17e487b2cd20d93/protobuf-5.28.3-cp39-cp39-win_amd64.whl", hash = "sha256:70585a70fc2dd4818c51287ceef5bdba6387f88a578c86d47bb34669b5552c36", size = 431591, upload_time = "2024-10-23T01:07:23.112Z" },
     { url = "https://files.pythonhosted.org/packages/ad/c3/2377c159e28ea89a91cf1ca223f827ae8deccb2c9c401e5ca233cd73002f/protobuf-5.28.3-py3-none-any.whl", hash = "sha256:cee1757663fa32a1ee673434fcf3bf24dd54763c79690201208bafec62f19eed", size = 169511, upload_time = "2024-10-23T01:07:24.738Z" },
 ]
 
@@ -1409,13 +1290,6 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/1d/d6/5d704b0d25c3c79532f8c0639f253ec2803b897100f64bcb3f53ced236e5/pyarrow-18.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6cf5c05f3cee251d80e98726b5c7cc9f21bab9e9783673bac58e6dfab57ecc8", size = 40090940, upload_time = "2024-11-26T02:01:02.31Z" },
     { url = "https://files.pythonhosted.org/packages/37/29/366bc7e588220d74ec00e497ac6710c2833c9176f0372fe0286929b2d64c/pyarrow-18.1.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:11b676cd410cf162d3f6a70b43fb9e1e40affbc542a1e9ed3681895f2962d3d9", size = 38548177, upload_time = "2024-11-26T02:01:07.371Z" },
     { url = "https://files.pythonhosted.org/packages/c8/11/fabf6ecabb1fe5b7d96889228ca2a9158c4c3bb732e3b8ee3f7f6d40b703/pyarrow-18.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:b76130d835261b38f14fc41fdfb39ad8d672afb84c447126b84d5472244cfaba", size = 40043567, upload_time = "2024-11-26T02:01:12.931Z" },
-    { url = "https://files.pythonhosted.org/packages/fd/9b/60516e3876ec6f25b0909afa70f90a15de83b48c7c0d8042fac4e64c4411/pyarrow-18.1.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:0b331e477e40f07238adc7ba7469c36b908f07c89b95dd4bd3a0ec84a3d1e21e", size = 29543752, upload_time = "2024-11-26T02:01:17.179Z" },
-    { url = "https://files.pythonhosted.org/packages/14/a7/bd08b6f1a2bd2e71dc6bb0451fc1872607e44c83daf1ee63c82764a2d233/pyarrow-18.1.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:2c4dd0c9010a25ba03e198fe743b1cc03cd33c08190afff371749c52ccbbaf76", size = 30850753, upload_time = "2024-11-26T02:01:21.374Z" },
-    { url = "https://files.pythonhosted.org/packages/84/c9/62ef9c6281c0e5b4ee1afa9d7bd556e72e06da6706b7906c32c15e69b3d6/pyarrow-18.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f97b31b4c4e21ff58c6f330235ff893cc81e23da081b1a4b1c982075e0ed4e9", size = 39226870, upload_time = "2024-11-26T02:01:25.533Z" },
-    { url = "https://files.pythonhosted.org/packages/b2/99/a6e89e71655a38475e76b060777c8bf69c078b772bec3b7daf7361440f05/pyarrow-18.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a4813cb8ecf1809871fd2d64a8eff740a1bd3691bbe55f01a3cf6c5ec869754", size = 40139114, upload_time = "2024-11-26T02:01:31.317Z" },
-    { url = "https://files.pythonhosted.org/packages/64/a9/06d79923890682e4fe7a16524abee307407008a413115354aaf3226b8410/pyarrow-18.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:05a5636ec3eb5cc2a36c6edb534a38ef57b2ab127292a716d00eabb887835f1e", size = 38639231, upload_time = "2024-11-26T02:01:36.734Z" },
-    { url = "https://files.pythonhosted.org/packages/3b/8c/4c3ed19026a00740b81fe1c87f3ff235b2763a0a1ddf5711a9d026b775ce/pyarrow-18.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:73eeed32e724ea3568bb06161cad5fa7751e45bc2228e33dcb10c614044165c7", size = 40070949, upload_time = "2024-11-26T02:01:41.703Z" },
-    { url = "https://files.pythonhosted.org/packages/87/d8/94161a7ca5c55199484e926165e9e33f318ea1d1b0d7cdbcbc3652b933ec/pyarrow-18.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:a1880dd6772b685e803011a6b43a230c23b566859a6e0c9a276c1e0faf4f4052", size = 25301373, upload_time = "2024-11-26T02:01:46.244Z" },
 ]
 
 [[package]]
@@ -1458,8 +1332,7 @@ dependencies = [
     { name = "pynacl" },
     { name = "requests" },
     { name = "typing-extensions" },
-    { name = "urllib3", version = "1.26.20", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
-    { name = "urllib3", version = "2.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+    { name = "urllib3" },
 ]
 sdist = { url = "https://files.pythonhosted.org/packages/f1/a0/1e8b8ca88df9857836f5bf8e3ee15dfb810d19814ef700b12f99ce11f691/pygithub-2.4.0.tar.gz", hash = "sha256:6601e22627e87bac192f1e2e39c6e6f69a43152cfb8f307cee575879320b3051", size = 3476673, upload_time = "2024-08-26T06:49:44.029Z" }
 wheels = [
@@ -1620,15 +1493,6 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload_time = "2024-08-06T20:32:56.985Z" },
     { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload_time = "2024-08-06T20:33:03.001Z" },
     { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload_time = "2024-08-06T20:33:04.33Z" },
-    { url = "https://files.pythonhosted.org/packages/65/d8/b7a1db13636d7fb7d4ff431593c510c8b8fca920ade06ca8ef20015493c5/PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d", size = 184777, upload_time = "2024-08-06T20:33:25.896Z" },
-    { url = "https://files.pythonhosted.org/packages/0a/02/6ec546cd45143fdf9840b2c6be8d875116a64076218b61d68e12548e5839/PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f", size = 172318, upload_time = "2024-08-06T20:33:27.212Z" },
-    { url = "https://files.pythonhosted.org/packages/0e/9a/8cc68be846c972bda34f6c2a93abb644fb2476f4dcc924d52175786932c9/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290", size = 720891, upload_time = "2024-08-06T20:33:28.974Z" },
-    { url = "https://files.pythonhosted.org/packages/e9/6c/6e1b7f40181bc4805e2e07f4abc10a88ce4648e7e95ff1abe4ae4014a9b2/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12", size = 722614, upload_time = "2024-08-06T20:33:34.157Z" },
-    { url = "https://files.pythonhosted.org/packages/3d/32/e7bd8535d22ea2874cef6a81021ba019474ace0d13a4819c2a4bce79bd6a/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19", size = 737360, upload_time = "2024-08-06T20:33:35.84Z" },
-    { url = "https://files.pythonhosted.org/packages/d7/12/7322c1e30b9be969670b672573d45479edef72c9a0deac3bb2868f5d7469/PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e", size = 699006, upload_time = "2024-08-06T20:33:37.501Z" },
-    { url = "https://files.pythonhosted.org/packages/82/72/04fcad41ca56491995076630c3ec1e834be241664c0c09a64c9a2589b507/PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725", size = 723577, upload_time = "2024-08-06T20:33:39.389Z" },
-    { url = "https://files.pythonhosted.org/packages/ed/5e/46168b1f2757f1fcd442bc3029cd8767d88a98c9c05770d8b420948743bb/PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631", size = 144593, upload_time = "2024-08-06T20:33:46.63Z" },
-    { url = "https://files.pythonhosted.org/packages/19/87/5124b1c1f2412bb95c59ec481eaf936cd32f0fe2a7b16b97b81c4c017a6a/PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8", size = 162312, upload_time = "2024-08-06T20:33:49.073Z" },
 ]
 
 [[package]]
@@ -1666,8 +1530,7 @@ dependencies = [
     { name = "certifi" },
     { name = "charset-normalizer" },
     { name = "idna" },
-    { name = "urllib3", version = "1.26.20", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
-    { name = "urllib3", version = "2.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+    { name = "urllib3" },
 ]
 sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218, upload_time = "2024-05-29T15:37:49.536Z" }
 wheels = [
@@ -1803,19 +1666,6 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/87/81/dc30bc449ccba63ad23a0f6633486d4e0e6955f45f3715a130dacabd6ad0/rpds_py-0.20.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:37fe0f12aebb6a0e3e17bb4cd356b1286d2d18d2e93b2d39fe647138458b4bcb", size = 531076, upload_time = "2024-10-31T14:28:10.545Z" },
     { url = "https://files.pythonhosted.org/packages/50/80/fb62ab48f3b5cfe704ead6ad372da1922ddaa76397055e02eb507054c979/rpds_py-0.20.1-cp313-none-win32.whl", hash = "sha256:a624cc00ef2158e04188df5e3016385b9353638139a06fb77057b3498f794782", size = 202804, upload_time = "2024-10-31T14:28:12.877Z" },
     { url = "https://files.pythonhosted.org/packages/d9/30/a3391e76d0b3313f33bdedd394a519decae3a953d2943e3dabf80ae32447/rpds_py-0.20.1-cp313-none-win_amd64.whl", hash = "sha256:b71b8666eeea69d6363248822078c075bac6ed135faa9216aa85f295ff009b1e", size = 220502, upload_time = "2024-10-31T14:28:14.597Z" },
-    { url = "https://files.pythonhosted.org/packages/d6/87/e7e0fcbfdc0d0e261534bcc885f6ae6253095b972e32f8b8b1278c78a2a9/rpds_py-0.20.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b41b6321805c472f66990c2849e152aff7bc359eb92f781e3f606609eac877ad", size = 327867, upload_time = "2024-10-31T14:28:44.167Z" },
-    { url = "https://files.pythonhosted.org/packages/93/a0/17836b7961fc82586e9b818abdee2a27e2e605a602bb8c0d43f02092f8c2/rpds_py-0.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a90c373ea2975519b58dece25853dbcb9779b05cc46b4819cb1917e3b3215b6", size = 318893, upload_time = "2024-10-31T14:28:46.753Z" },
-    { url = "https://files.pythonhosted.org/packages/dc/03/deb81d8ea3a8b974e7b03cfe8c8c26616ef8f4980dd430d8dd0a2f1b4d8e/rpds_py-0.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16d4477bcb9fbbd7b5b0e4a5d9b493e42026c0bf1f06f723a9353f5153e75d30", size = 361664, upload_time = "2024-10-31T14:28:49.782Z" },
-    { url = "https://files.pythonhosted.org/packages/16/49/d9938603731745c7b6babff97ca61ff3eb4619e7128b5ab0111ad4e91d6d/rpds_py-0.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:84b8382a90539910b53a6307f7c35697bc7e6ffb25d9c1d4e998a13e842a5e83", size = 369796, upload_time = "2024-10-31T14:28:52.263Z" },
-    { url = "https://files.pythonhosted.org/packages/87/d2/480b36c69cdc373853401b6aab6a281cf60f6d72b1545d82c0d23d9dd77c/rpds_py-0.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4888e117dd41b9d34194d9e31631af70d3d526efc363085e3089ab1a62c32ed1", size = 403860, upload_time = "2024-10-31T14:28:54.388Z" },
-    { url = "https://files.pythonhosted.org/packages/31/7c/f6d909cb57761293308dbef14f1663d84376f2e231892a10aafc57b42037/rpds_py-0.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5265505b3d61a0f56618c9b941dc54dc334dc6e660f1592d112cd103d914a6db", size = 430793, upload_time = "2024-10-31T14:28:56.811Z" },
-    { url = "https://files.pythonhosted.org/packages/d4/62/c9bd294c4b5f84d9cc2c387b548ae53096ad7e71ac5b02b6310e9dc85aa4/rpds_py-0.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e75ba609dba23f2c95b776efb9dd3f0b78a76a151e96f96cc5b6b1b0004de66f", size = 360927, upload_time = "2024-10-31T14:28:58.868Z" },
-    { url = "https://files.pythonhosted.org/packages/c1/a7/15d927d83a44da8307a432b1cac06284b6657706d099a98cc99fec34ad51/rpds_py-0.20.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1791ff70bc975b098fe6ecf04356a10e9e2bd7dc21fa7351c1742fdeb9b4966f", size = 382660, upload_time = "2024-10-31T14:29:01.261Z" },
-    { url = "https://files.pythonhosted.org/packages/4c/28/0630719c18456238bb07d59c4302fed50a13aa8035ec23dbfa80d116f9bc/rpds_py-0.20.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d126b52e4a473d40232ec2052a8b232270ed1f8c9571aaf33f73a14cc298c24f", size = 546888, upload_time = "2024-10-31T14:29:03.923Z" },
-    { url = "https://files.pythonhosted.org/packages/b9/75/3c9bda11b9c15d680b315f898af23825159314d4b56568f24b53ace8afcd/rpds_py-0.20.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c14937af98c4cc362a1d4374806204dd51b1e12dded1ae30645c298e5a5c4cb1", size = 550088, upload_time = "2024-10-31T14:29:07.107Z" },
-    { url = "https://files.pythonhosted.org/packages/70/f1/8fe7d04c194218171220a412057429defa9e2da785de0777c4d39309337e/rpds_py-0.20.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3d089d0b88996df627693639d123c8158cff41c0651f646cd8fd292c7da90eaf", size = 528270, upload_time = "2024-10-31T14:29:09.933Z" },
-    { url = "https://files.pythonhosted.org/packages/d6/62/41b0020f4b00af042b008e679dbe25a2f5bce655139a81f8b812f9068e52/rpds_py-0.20.1-cp39-none-win32.whl", hash = "sha256:653647b8838cf83b2e7e6a0364f49af96deec64d2a6578324db58380cff82aca", size = 200658, upload_time = "2024-10-31T14:29:12.234Z" },
-    { url = "https://files.pythonhosted.org/packages/05/01/e64bb8889f2dcc951e53de33d8b8070456397ae4e10edc35e6cb9908f5c8/rpds_py-0.20.1-cp39-none-win_amd64.whl", hash = "sha256:fa41a64ac5b08b292906e248549ab48b69c5428f3987b09689ab2441f267d04d", size = 218883, upload_time = "2024-10-31T14:29:14.846Z" },
     { url = "https://files.pythonhosted.org/packages/b6/fa/7959429e69569d0f6e7d27f80451402da0409349dd2b07f6bcbdd5fad2d3/rpds_py-0.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7a07ced2b22f0cf0b55a6a510078174c31b6d8544f3bc00c2bcee52b3d613f74", size = 328209, upload_time = "2024-10-31T14:29:17.44Z" },
     { url = "https://files.pythonhosted.org/packages/25/97/5dfdb091c30267ff404d2fd9e70c7a6d6ffc65ca77fffe9456e13b719066/rpds_py-0.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:68cb0a499f2c4a088fd2f521453e22ed3527154136a855c62e148b7883b99f9a", size = 319499, upload_time = "2024-10-31T14:29:19.527Z" },
     { url = "https://files.pythonhosted.org/packages/7c/98/cf2608722400f5f9bb4c82aa5ac09026f3ac2ebea9d4059d3533589ed0b6/rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa3060d885657abc549b2a0f8e1b79699290e5d83845141717c6c90c2df38311", size = 361795, upload_time = "2024-10-31T14:29:22.395Z" },
@@ -1828,18 +1678,6 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/8f/8f/e1c2db4fcca3947d9a28ec9553700b4dc8038f0eff575f579e75885b0661/rpds_py-0.20.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:92b68b79c0da2a980b1c4197e56ac3dd0c8a149b4603747c4378914a68706979", size = 550059, upload_time = "2024-10-31T14:29:40.342Z" },
     { url = "https://files.pythonhosted.org/packages/67/29/00a9e986df36721b5def82fff60995c1ee8827a7d909a6ec8929fb4cc668/rpds_py-0.20.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:93da1d3db08a827eda74356f9f58884adb254e59b6664f64cc04cdff2cc19b0d", size = 529131, upload_time = "2024-10-31T14:29:42.993Z" },
     { url = "https://files.pythonhosted.org/packages/a3/32/95364440560ec476b19c6a2704259e710c223bf767632ebaa72cc2a1760f/rpds_py-0.20.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:754bbed1a4ca48479e9d4182a561d001bbf81543876cdded6f695ec3d465846b", size = 219677, upload_time = "2024-10-31T14:29:45.332Z" },
-    { url = "https://files.pythonhosted.org/packages/ed/bf/ad8492e972c90a3d48a38e2b5095c51a8399d5b57e83f2d5d1649490f72b/rpds_py-0.20.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ca449520e7484534a2a44faf629362cae62b660601432d04c482283c47eaebab", size = 328046, upload_time = "2024-10-31T14:29:48.968Z" },
-    { url = "https://files.pythonhosted.org/packages/75/fd/84f42386165d6d555acb76c6d39c90b10c9dcf25116daf4f48a0a9d6867a/rpds_py-0.20.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:9c4cb04a16b0f199a8c9bf807269b2f63b7b5b11425e4a6bd44bd6961d28282c", size = 319306, upload_time = "2024-10-31T14:29:51.212Z" },
-    { url = "https://files.pythonhosted.org/packages/6c/8a/abcd5119a0573f9588ad71a3fde3c07ddd1d1393cfee15a6ba7495c256f1/rpds_py-0.20.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb63804105143c7e24cee7db89e37cb3f3941f8e80c4379a0b355c52a52b6780", size = 362558, upload_time = "2024-10-31T14:29:53.551Z" },
-    { url = "https://files.pythonhosted.org/packages/9d/65/1c2bb10afd4bd32800227a658ae9097bc1d08a4e5048a57a9bd2efdf6306/rpds_py-0.20.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:55cd1fa4ecfa6d9f14fbd97ac24803e6f73e897c738f771a9fe038f2f11ff07c", size = 370811, upload_time = "2024-10-31T14:29:56.672Z" },
-    { url = "https://files.pythonhosted.org/packages/6c/ee/f4bab2b9e51ced30351cfd210647885391463ae682028c79760e7db28e4e/rpds_py-0.20.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f8f741b6292c86059ed175d80eefa80997125b7c478fb8769fd9ac8943a16c0", size = 404660, upload_time = "2024-10-31T14:29:59.276Z" },
-    { url = "https://files.pythonhosted.org/packages/48/0f/9d04d0939682f0c97be827fc51ff986555ffb573e6781bd5132441f0ce25/rpds_py-0.20.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fc212779bf8411667234b3cdd34d53de6c2b8b8b958e1e12cb473a5f367c338", size = 430490, upload_time = "2024-10-31T14:30:01.543Z" },
-    { url = "https://files.pythonhosted.org/packages/0d/f2/e9b90fd8416d59941b6a12f2c2e1d898b63fd092f5a7a6f98236cb865764/rpds_py-0.20.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ad56edabcdb428c2e33bbf24f255fe2b43253b7d13a2cdbf05de955217313e6", size = 361448, upload_time = "2024-10-31T14:30:04.294Z" },
-    { url = "https://files.pythonhosted.org/packages/0b/83/1cc776dce7bedb17d6f4ea62eafccee8a57a4678f4fac414ab69fb9b6b0b/rpds_py-0.20.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0a3a1e9ee9728b2c1734f65d6a1d376c6f2f6fdcc13bb007a08cc4b1ff576dc5", size = 383681, upload_time = "2024-10-31T14:30:07.717Z" },
-    { url = "https://files.pythonhosted.org/packages/17/5c/e0cdd6b0a8373fdef3667af2778dd9ff3abf1bbb9c7bd92c603c91440eb0/rpds_py-0.20.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e13de156137b7095442b288e72f33503a469aa1980ed856b43c353ac86390519", size = 546203, upload_time = "2024-10-31T14:30:10.156Z" },
-    { url = "https://files.pythonhosted.org/packages/1b/a8/81fc9cbc01e7ef6d10652aedc1de4e8473934773e2808ba49094e03575df/rpds_py-0.20.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:07f59760ef99f31422c49038964b31c4dfcfeb5d2384ebfc71058a7c9adae2d2", size = 549855, upload_time = "2024-10-31T14:30:13.691Z" },
-    { url = "https://files.pythonhosted.org/packages/b3/87/99648693d3c1bbce088119bc61ecaab62e5f9c713894edc604ffeca5ae88/rpds_py-0.20.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:59240685e7da61fb78f65a9f07f8108e36a83317c53f7b276b4175dc44151684", size = 528625, upload_time = "2024-10-31T14:30:16.191Z" },
-    { url = "https://files.pythonhosted.org/packages/05/c3/10c68a08849f1fa45d205e54141fa75d316013e3d701ef01770ee1220bb8/rpds_py-0.20.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:83cba698cfb3c2c5a7c3c6bac12fe6c6a51aae69513726be6411076185a8b24a", size = 219991, upload_time = "2024-10-31T14:30:18.49Z" },
 ]
 
 [[package]]
@@ -2003,8 +1841,7 @@ dependencies = [
     { name = "requests-toolbelt" },
     { name = "rfc3986" },
     { name = "rich" },
-    { name = "urllib3", version = "1.26.20", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
-    { name = "urllib3", version = "2.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+    { name = "urllib3" },
 ]
 sdist = { url = "https://files.pythonhosted.org/packages/77/68/bd982e5e949ef8334e6f7dcf76ae40922a8750aa2e347291ae1477a4782b/twine-5.1.1.tar.gz", hash = "sha256:9aa0825139c02b3434d913545c7b847a21c835e11597f5255842d457da2322db", size = 225531, upload_time = "2024-06-26T15:00:46.58Z" }
 wheels = [
@@ -2038,28 +1875,10 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/81/c0/7461b49cd25aeece13766f02ee576d1db528f1c37ce69aee300e075b485b/uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e", size = 10356, upload_time = "2021-10-13T11:15:12.316Z" },
 ]
 
-[[package]]
-name = "urllib3"
-version = "1.26.20"
-source = { registry = "https://pypi.org/simple" }
-resolution-markers = [
-    "python_full_version < '3.10'",
-]
-sdist = { url = "https://files.pythonhosted.org/packages/e4/e8/6ff5e6bc22095cfc59b6ea711b687e2b7ed4bdb373f7eeec370a97d7392f/urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32", size = 307380, upload_time = "2024-08-29T15:43:11.37Z" }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/33/cf/8435d5a7159e2a9c83a95896ed596f68cf798005fe107cc655b5c5c14704/urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e", size = 144225, upload_time = "2024-08-29T15:43:08.921Z" },
-]
-
 [[package]]
 name = "urllib3"
 version = "2.2.3"
 source = { registry = "https://pypi.org/simple" }
-resolution-markers = [
-    "python_full_version == '3.12.*'",
-    "python_full_version == '3.11.*'",
-    "python_full_version == '3.10.*'",
-    "python_full_version >= '3.13'",
-]
 sdist = { url = "https://files.pythonhosted.org/packages/ed/63/22ba4ebfe7430b76388e7cd448d5478814d3032121827c12a2cc287e2260/urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9", size = 300677, upload_time = "2024-09-12T10:52:18.401Z" }
 wheels = [
     { url = "https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", size = 126338, upload_time = "2024-09-12T10:52:16.589Z" },
@@ -2152,16 +1971,6 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/14/26/93a9fa02c6f257df54d7570dfe8011995138118d11939a4ecd82cb849613/wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c", size = 91738, upload_time = "2023-11-09T06:32:20.989Z" },
     { url = "https://files.pythonhosted.org/packages/a2/5b/4660897233eb2c8c4de3dc7cefed114c61bacb3c28327e64150dc44ee2f6/wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc", size = 35568, upload_time = "2023-11-09T06:32:22.715Z" },
     { url = "https://files.pythonhosted.org/packages/5c/cc/8297f9658506b224aa4bd71906447dea6bb0ba629861a758c28f67428b91/wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8", size = 37653, upload_time = "2023-11-09T06:32:24.533Z" },
-    { url = "https://files.pythonhosted.org/packages/70/cc/b92e1da2cad6a9f8ee481000ece07a35e3b24e041e60ff8b850c079f0ebf/wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2", size = 37314, upload_time = "2023-11-09T06:33:12.535Z" },
-    { url = "https://files.pythonhosted.org/packages/4a/cc/3402bcc897978be00fef608cd9e3e39ec8869c973feeb5e1e277670e5ad2/wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb", size = 38162, upload_time = "2023-11-09T06:33:14.102Z" },
-    { url = "https://files.pythonhosted.org/packages/28/d3/4f079f649c515727c127c987b2ec2e0816b80d95784f2d28d1a57d2a1029/wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8", size = 80235, upload_time = "2023-11-09T06:33:15.446Z" },
-    { url = "https://files.pythonhosted.org/packages/a3/1c/226c2a4932e578a2241dcb383f425995f80224b446f439c2e112eb51c3a6/wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c", size = 72553, upload_time = "2023-11-09T06:33:17.315Z" },
-    { url = "https://files.pythonhosted.org/packages/b1/e7/459a8a4f40f2fa65eb73cb3f339e6d152957932516d18d0e996c7ae2d7ae/wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a", size = 80129, upload_time = "2023-11-09T06:33:18.858Z" },
-    { url = "https://files.pythonhosted.org/packages/da/6f/6d0b3c4983f1fc764a422989dabc268ee87d937763246cd48aa92f1eed1e/wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664", size = 84550, upload_time = "2023-11-09T06:33:20.267Z" },
-    { url = "https://files.pythonhosted.org/packages/96/e8/27ef35cf61e5147c1c3abcb89cfbb8d691b2bb8364803fcc950140bc14d8/wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f", size = 77352, upload_time = "2023-11-09T06:33:22.041Z" },
-    { url = "https://files.pythonhosted.org/packages/b6/ad/7a0766341081bfd9f18a7049e4d6d45586ae5c5bb0a640f05e2f558e849c/wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537", size = 84626, upload_time = "2023-11-09T06:33:23.634Z" },
-    { url = "https://files.pythonhosted.org/packages/09/43/b26852e9c45a1aac0d14b1080b25b612fa840ba99739c5fc55db07b7ce08/wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3", size = 35327, upload_time = "2023-11-09T06:33:25.43Z" },
-    { url = "https://files.pythonhosted.org/packages/74/f2/96ed140b08743f7f68d5bda35a2a589600781366c3da96f056043d258b1a/wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35", size = 37526, upload_time = "2023-11-09T06:33:26.882Z" },
     { url = "https://files.pythonhosted.org/packages/ff/21/abdedb4cdf6ff41ebf01a74087740a709e2edb146490e4d9beea054b0b7a/wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1", size = 23362, upload_time = "2023-11-09T06:33:28.271Z" },
 ]
 
@@ -2247,20 +2056,4 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/02/90/2633473864f67a15526324b007a9f96c96f56d5f32ef2a56cc12f9548723/zstandard-0.23.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa6ce8b52c5987b3e34d5674b0ab529a4602b632ebab0a93b07bfb4dfc8f8a33", size = 5191299, upload_time = "2024-07-15T00:16:49.053Z" },
     { url = "https://files.pythonhosted.org/packages/b0/4c/315ca5c32da7e2dc3455f3b2caee5c8c2246074a61aac6ec3378a97b7136/zstandard-0.23.0-cp313-cp313-win32.whl", hash = "sha256:a9b07268d0c3ca5c170a385a0ab9fb7fdd9f5fd866be004c4ea39e44edce47dd", size = 430862, upload_time = "2024-07-15T00:16:51.003Z" },
     { url = "https://files.pythonhosted.org/packages/a2/bf/c6aaba098e2d04781e8f4f7c0ba3c7aa73d00e4c436bcc0cf059a66691d1/zstandard-0.23.0-cp313-cp313-win_amd64.whl", hash = "sha256:f3513916e8c645d0610815c257cbfd3242adfd5c4cfa78be514e5a3ebb42a41b", size = 495578, upload_time = "2024-07-15T00:16:53.135Z" },
-    { url = "https://files.pythonhosted.org/packages/fb/96/4fcafeb7e013a2386d22f974b5b97a0b9a65004ed58c87ae001599bfbd48/zstandard-0.23.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa014d55c3af933c1315eb4bb06dd0459661cc0b15cd61077afa6489bec63bb", size = 788697, upload_time = "2024-07-15T00:17:31.236Z" },
-    { url = "https://files.pythonhosted.org/packages/83/ff/a52ce725be69b86a2967ecba0497a8184540cc284c0991125515449e54e2/zstandard-0.23.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a7f0804bb3799414af278e9ad51be25edf67f78f916e08afdb983e74161b916", size = 633679, upload_time = "2024-07-15T00:17:32.911Z" },
-    { url = "https://files.pythonhosted.org/packages/34/0f/3dc62db122f6a9c481c335fff6fc9f4e88d8f6e2d47321ee3937328addb4/zstandard-0.23.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb2b1ecfef1e67897d336de3a0e3f52478182d6a47eda86cbd42504c5cbd009a", size = 4940416, upload_time = "2024-07-15T00:17:34.849Z" },
-    { url = "https://files.pythonhosted.org/packages/1d/e5/9fe0dd8c85fdc2f635e6660d07872a5dc4b366db566630161e39f9f804e1/zstandard-0.23.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:837bb6764be6919963ef41235fd56a6486b132ea64afe5fafb4cb279ac44f259", size = 5307693, upload_time = "2024-07-15T00:17:37.355Z" },
-    { url = "https://files.pythonhosted.org/packages/73/bf/fe62c0cd865c171ee8ed5bc83174b5382a2cb729c8d6162edfb99a83158b/zstandard-0.23.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1516c8c37d3a053b01c1c15b182f3b5f5eef19ced9b930b684a73bad121addf4", size = 5341236, upload_time = "2024-07-15T00:17:40.213Z" },
-    { url = "https://files.pythonhosted.org/packages/39/86/4fe79b30c794286110802a6cd44a73b6a314ac8196b9338c0fbd78c2407d/zstandard-0.23.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48ef6a43b1846f6025dde6ed9fee0c24e1149c1c25f7fb0a0585572b2f3adc58", size = 5439101, upload_time = "2024-07-15T00:17:42.284Z" },
-    { url = "https://files.pythonhosted.org/packages/72/ed/cacec235c581ebf8c608c7fb3d4b6b70d1b490d0e5128ea6996f809ecaef/zstandard-0.23.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11e3bf3c924853a2d5835b24f03eeba7fc9b07d8ca499e247e06ff5676461a15", size = 4860320, upload_time = "2024-07-15T00:17:44.21Z" },
-    { url = "https://files.pythonhosted.org/packages/f6/1e/2c589a2930f93946b132fc852c574a19d5edc23fad2b9e566f431050c7ec/zstandard-0.23.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2fb4535137de7e244c230e24f9d1ec194f61721c86ebea04e1581d9d06ea1269", size = 4931933, upload_time = "2024-07-15T00:17:46.455Z" },
-    { url = "https://files.pythonhosted.org/packages/8e/f5/30eadde3686d902b5d4692bb5f286977cbc4adc082145eb3f49d834b2eae/zstandard-0.23.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8c24f21fa2af4bb9f2c492a86fe0c34e6d2c63812a839590edaf177b7398f700", size = 5463878, upload_time = "2024-07-15T00:17:48.866Z" },
-    { url = "https://files.pythonhosted.org/packages/e0/c8/8aed1f0ab9854ef48e5ad4431367fcb23ce73f0304f7b72335a8edc66556/zstandard-0.23.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a8c86881813a78a6f4508ef9daf9d4995b8ac2d147dcb1a450448941398091c9", size = 4857192, upload_time = "2024-07-15T00:17:51.558Z" },
-    { url = "https://files.pythonhosted.org/packages/a8/c6/55e666cfbcd032b9e271865e8578fec56e5594d4faeac379d371526514f5/zstandard-0.23.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fe3b385d996ee0822fd46528d9f0443b880d4d05528fd26a9119a54ec3f91c69", size = 4696513, upload_time = "2024-07-15T00:17:53.924Z" },
-    { url = "https://files.pythonhosted.org/packages/dc/bd/720b65bea63ec9de0ac7414c33b9baf271c8de8996e5ff324dc93fc90ff1/zstandard-0.23.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:82d17e94d735c99621bf8ebf9995f870a6b3e6d14543b99e201ae046dfe7de70", size = 5204823, upload_time = "2024-07-15T00:17:55.948Z" },
-    { url = "https://files.pythonhosted.org/packages/d8/40/d678db1556e3941d330cd4e95623a63ef235b18547da98fa184cbc028ecf/zstandard-0.23.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c7c517d74bea1a6afd39aa612fa025e6b8011982a0897768a2f7c8ab4ebb78a2", size = 5666490, upload_time = "2024-07-15T00:17:58.327Z" },
-    { url = "https://files.pythonhosted.org/packages/ed/cc/c89329723d7515898a1fc7ef5d251264078548c505719d13e9511800a103/zstandard-0.23.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fd7e0f1cfb70eb2f95a19b472ee7ad6d9a0a992ec0ae53286870c104ca939e5", size = 5196622, upload_time = "2024-07-15T00:18:00.404Z" },
-    { url = "https://files.pythonhosted.org/packages/78/4c/634289d41e094327a94500dfc919e58841b10ea3a9efdfafbac614797ec2/zstandard-0.23.0-cp39-cp39-win32.whl", hash = "sha256:43da0f0092281bf501f9c5f6f3b4c975a8a0ea82de49ba3f7100e64d422a1274", size = 430620, upload_time = "2024-07-15T00:18:02.613Z" },
-    { url = "https://files.pythonhosted.org/packages/a2/e2/0b0c5a0f4f7699fecd92c1ba6278ef9b01f2b0b0dd46f62bfc6729c05659/zstandard-0.23.0-cp39-cp39-win_amd64.whl", hash = "sha256:f8346bfa098532bc1fb6c7ef06783e969d87a99dd1d2a5a18a892c1d7a643c58", size = 495528, upload_time = "2024-07-15T00:18:04.452Z" },
 ]

From 9140bd659a2f08433d235e7621281f1ba6a68002 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sat, 28 Jun 2025 12:47:18 +0200
Subject: [PATCH 253/381] Limit click back to 8.2.0 because it has an ENVVAR
 bug for flags (#52404)

There is a bug in Click 8.2.0 and 8.2.1 that makes flag variables do not
properly evaluate "false"-y values set in environment variables. See
the issue https://github.com/pallets/click/issues/2952
---
 dev/breeze/README.md                                          | 2 +-
 dev/breeze/doc/images/output_build-docs.txt                   | 2 +-
 dev/breeze/doc/images/output_ci-image_build.txt               | 2 +-
 dev/breeze/doc/images/output_ci-image_export-mount-cache.txt  | 2 +-
 dev/breeze/doc/images/output_ci-image_import-mount-cache.txt  | 2 +-
 dev/breeze/doc/images/output_ci-image_load.txt                | 2 +-
 dev/breeze/doc/images/output_ci-image_pull.txt                | 2 +-
 dev/breeze/doc/images/output_ci-image_save.txt                | 2 +-
 dev/breeze/doc/images/output_ci-image_verify.txt              | 2 +-
 dev/breeze/doc/images/output_ci_free-space.txt                | 2 +-
 dev/breeze/doc/images/output_ci_get-workflow-info.txt         | 2 +-
 dev/breeze/doc/images/output_ci_selective-check.txt           | 2 +-
 dev/breeze/doc/images/output_cleanup.txt                      | 2 +-
 dev/breeze/doc/images/output_doctor.txt                       | 2 +-
 dev/breeze/doc/images/output_generate-migration-file.txt      | 2 +-
 dev/breeze/doc/images/output_k8s_build-k8s-image.txt          | 2 +-
 dev/breeze/doc/images/output_k8s_configure-cluster.txt        | 2 +-
 dev/breeze/doc/images/output_k8s_create-cluster.txt           | 2 +-
 dev/breeze/doc/images/output_k8s_delete-cluster.txt           | 2 +-
 dev/breeze/doc/images/output_k8s_deploy-airflow.txt           | 2 +-
 dev/breeze/doc/images/output_k8s_k9s.txt                      | 2 +-
 dev/breeze/doc/images/output_k8s_logs.txt                     | 2 +-
 dev/breeze/doc/images/output_k8s_run-complete-tests.txt       | 2 +-
 dev/breeze/doc/images/output_k8s_shell.txt                    | 2 +-
 dev/breeze/doc/images/output_k8s_status.txt                   | 2 +-
 dev/breeze/doc/images/output_k8s_tests.txt                    | 2 +-
 dev/breeze/doc/images/output_k8s_upload-k8s-image.txt         | 2 +-
 dev/breeze/doc/images/output_prod-image_build.txt             | 2 +-
 dev/breeze/doc/images/output_prod-image_load.txt              | 2 +-
 dev/breeze/doc/images/output_prod-image_pull.txt              | 2 +-
 dev/breeze/doc/images/output_prod-image_save.txt              | 2 +-
 dev/breeze/doc/images/output_prod-image_verify.txt            | 2 +-
 .../images/output_release-management_add-back-references.txt  | 2 +-
 ...output_release-management_clean-old-provider-artifacts.txt | 2 +-
 .../images/output_release-management_create-minor-branch.txt  | 2 +-
 .../images/output_release-management_generate-constraints.txt | 2 +-
 .../output_release-management_generate-issue-content-core.txt | 2 +-
 ...t_release-management_generate-issue-content-helm-chart.txt | 2 +-
 ...ut_release-management_generate-issue-content-providers.txt | 2 +-
 .../output_release-management_generate-providers-metadata.txt | 2 +-
 ...tput_release-management_install-provider-distributions.txt | 2 +-
 .../images/output_release-management_merge-prod-images.txt    | 2 +-
 ...t_release-management_prepare-airflow-ctl-distributions.txt | 2 +-
 ...utput_release-management_prepare-airflow-distributions.txt | 2 +-
 .../output_release-management_prepare-airflow-tarball.txt     | 2 +-
 .../output_release-management_prepare-helm-chart-package.txt  | 2 +-
 .../output_release-management_prepare-helm-chart-tarball.txt  | 2 +-
 ...tput_release-management_prepare-provider-distributions.txt | 2 +-
 ...tput_release-management_prepare-provider-documentation.txt | 2 +-
 .../output_release-management_prepare-python-client.txt       | 2 +-
 ...tput_release-management_prepare-task-sdk-distributions.txt | 2 +-
 .../images/output_release-management_publish-docs-to-s3.txt   | 2 +-
 .../doc/images/output_release-management_publish-docs.txt     | 2 +-
 .../images/output_release-management_release-prod-images.txt  | 2 +-
 .../doc/images/output_release-management_start-rc-process.txt | 2 +-
 .../doc/images/output_release-management_start-release.txt    | 2 +-
 .../images/output_release-management_update-constraints.txt   | 2 +-
 ...utput_release-management_verify-provider-distributions.txt | 2 +-
 dev/breeze/doc/images/output_run.txt                          | 2 +-
 .../doc/images/output_sbom_build-all-airflow-images.txt       | 2 +-
 .../doc/images/output_sbom_export-dependency-information.txt  | 2 +-
 .../images/output_sbom_generate-providers-requirements.txt    | 2 +-
 dev/breeze/doc/images/output_sbom_update-sbom-information.txt | 2 +-
 dev/breeze/doc/images/output_setup_autocomplete.txt           | 2 +-
 .../doc/images/output_setup_check-all-params-in-groups.txt    | 2 +-
 dev/breeze/doc/images/output_setup_config.txt                 | 2 +-
 .../doc/images/output_setup_regenerate-command-images.txt     | 2 +-
 dev/breeze/doc/images/output_shell.svg                        | 2 +-
 dev/breeze/doc/images/output_shell.txt                        | 2 +-
 dev/breeze/doc/images/output_start-airflow.svg                | 4 ++--
 dev/breeze/doc/images/output_start-airflow.txt                | 2 +-
 dev/breeze/doc/images/output_static-checks.txt                | 2 +-
 dev/breeze/doc/images/output_testing_airflow-ctl-tests.txt    | 2 +-
 .../doc/images/output_testing_core-integration-tests.txt      | 2 +-
 dev/breeze/doc/images/output_testing_core-tests.txt           | 2 +-
 dev/breeze/doc/images/output_testing_docker-compose-tests.txt | 2 +-
 dev/breeze/doc/images/output_testing_helm-tests.txt           | 2 +-
 .../doc/images/output_testing_providers-integration-tests.txt | 2 +-
 dev/breeze/doc/images/output_testing_providers-tests.txt      | 2 +-
 .../doc/images/output_testing_python-api-client-tests.txt     | 2 +-
 dev/breeze/doc/images/output_testing_system-tests.txt         | 2 +-
 dev/breeze/doc/images/output_testing_task-sdk-tests.txt       | 2 +-
 dev/breeze/doc/images/output_workflow-run_publish-docs.txt    | 2 +-
 dev/breeze/pyproject.toml                                     | 4 +++-
 dev/breeze/uv.lock                                            | 2 +-
 85 files changed, 88 insertions(+), 86 deletions(-)

diff --git a/dev/breeze/README.md b/dev/breeze/README.md
index a5ee760fc7ba7..d1c689d1791c3 100644
--- a/dev/breeze/README.md
+++ b/dev/breeze/README.md
@@ -135,6 +135,6 @@ PLEASE DO NOT MODIFY THE HASH BELOW! IT IS AUTOMATICALLY UPDATED BY PRE-COMMIT.
 
 ---------------------------------------------------------------------------------------------------------
 
-Package config hash: 05507dc6f59fb3cf6a073b09473d712603fda88505767df40755ad33e32513a836c1e4b2b8f103b220fbf6585c88865741d1e036cd0f7eaa926ba8058a8e6936
+Package config hash: 098162a9dca075feeada933f58455aa74f58811a34959f06bd3298aef9773a60f3800e9d5d00b9335d300572842a2838f06bd83f7a79a5ce5f529fb6202059af
 
 ---------------------------------------------------------------------------------------------------------
diff --git a/dev/breeze/doc/images/output_build-docs.txt b/dev/breeze/doc/images/output_build-docs.txt
index 7ef24816c0515..6ec0cbe183a37 100644
--- a/dev/breeze/doc/images/output_build-docs.txt
+++ b/dev/breeze/doc/images/output_build-docs.txt
@@ -1 +1 @@
-ba7ca723e87b8d7f95fb78562f2740ae
+f64fad45c016c4dec0b180b3e7ff2826
diff --git a/dev/breeze/doc/images/output_ci-image_build.txt b/dev/breeze/doc/images/output_ci-image_build.txt
index 1033af461e732..f1d7c7a717a1a 100644
--- a/dev/breeze/doc/images/output_ci-image_build.txt
+++ b/dev/breeze/doc/images/output_ci-image_build.txt
@@ -1 +1 @@
-6bf7eb3329761372b61c7302e874232f
+c075a5d7ad1134165d16d1c938161fc9
diff --git a/dev/breeze/doc/images/output_ci-image_export-mount-cache.txt b/dev/breeze/doc/images/output_ci-image_export-mount-cache.txt
index 6864fcc13151b..6d1c1347207a2 100644
--- a/dev/breeze/doc/images/output_ci-image_export-mount-cache.txt
+++ b/dev/breeze/doc/images/output_ci-image_export-mount-cache.txt
@@ -1 +1 @@
-f00b94a655e8f9edb0765ba2928295c4
+824109d9d232ba19a9aa0781ba8fccd9
diff --git a/dev/breeze/doc/images/output_ci-image_import-mount-cache.txt b/dev/breeze/doc/images/output_ci-image_import-mount-cache.txt
index a7888e6c09f53..00f5024812d07 100644
--- a/dev/breeze/doc/images/output_ci-image_import-mount-cache.txt
+++ b/dev/breeze/doc/images/output_ci-image_import-mount-cache.txt
@@ -1 +1 @@
-f5a3c033c9904a8257a8db9bb716a4a2
+65be4537eea8d56d3ddc34d4ccab60c7
diff --git a/dev/breeze/doc/images/output_ci-image_load.txt b/dev/breeze/doc/images/output_ci-image_load.txt
index 5549b7a3bf5c2..d7d932a7463cb 100644
--- a/dev/breeze/doc/images/output_ci-image_load.txt
+++ b/dev/breeze/doc/images/output_ci-image_load.txt
@@ -1 +1 @@
-f06c4edbaa5623ac2d67da5bbfc0f84d
+d86e2e217fe99bd74580f751dc4c51bd
diff --git a/dev/breeze/doc/images/output_ci-image_pull.txt b/dev/breeze/doc/images/output_ci-image_pull.txt
index c9b72f3fdd63e..0de3a5b933769 100644
--- a/dev/breeze/doc/images/output_ci-image_pull.txt
+++ b/dev/breeze/doc/images/output_ci-image_pull.txt
@@ -1 +1 @@
-81f6b37f2afb82d2f5e350a9bf1ead69
+c29b9a5e5bf4b503f4e0310006414597
diff --git a/dev/breeze/doc/images/output_ci-image_save.txt b/dev/breeze/doc/images/output_ci-image_save.txt
index f70dfef42a4c7..5e457d7c315e1 100644
--- a/dev/breeze/doc/images/output_ci-image_save.txt
+++ b/dev/breeze/doc/images/output_ci-image_save.txt
@@ -1 +1 @@
-1997d34fe934551a639d060a867b5923
+807d082ba3edd987a78c50608eb280c3
diff --git a/dev/breeze/doc/images/output_ci-image_verify.txt b/dev/breeze/doc/images/output_ci-image_verify.txt
index bd66a3ee629a8..e1300b3163f00 100644
--- a/dev/breeze/doc/images/output_ci-image_verify.txt
+++ b/dev/breeze/doc/images/output_ci-image_verify.txt
@@ -1 +1 @@
-a6ccb6771da344dd14bc15eddd583e57
+af0c91ebd8bb2ed858bdad86c43c579a
diff --git a/dev/breeze/doc/images/output_ci_free-space.txt b/dev/breeze/doc/images/output_ci_free-space.txt
index 757e1bafa8ae9..28dab1aeb49be 100644
--- a/dev/breeze/doc/images/output_ci_free-space.txt
+++ b/dev/breeze/doc/images/output_ci_free-space.txt
@@ -1 +1 @@
-4f9c3078d0108954df8e66634f3655b0
+21f9955c2f47b4524f1df73af8594d54
diff --git a/dev/breeze/doc/images/output_ci_get-workflow-info.txt b/dev/breeze/doc/images/output_ci_get-workflow-info.txt
index a13fbabb4568f..9fd843d756a74 100644
--- a/dev/breeze/doc/images/output_ci_get-workflow-info.txt
+++ b/dev/breeze/doc/images/output_ci_get-workflow-info.txt
@@ -1 +1 @@
-7b2b0d6b2decf3ecba3db4ede5d2d711
+8246038093359b9c3c110043419473e2
diff --git a/dev/breeze/doc/images/output_ci_selective-check.txt b/dev/breeze/doc/images/output_ci_selective-check.txt
index 0e5e77f51ea6b..ebeb5277929f6 100644
--- a/dev/breeze/doc/images/output_ci_selective-check.txt
+++ b/dev/breeze/doc/images/output_ci_selective-check.txt
@@ -1 +1 @@
-afe8f35b0f4e7c8349b5f830ef191047
+78d4ac07ec90efce5bd901f461d940bc
diff --git a/dev/breeze/doc/images/output_cleanup.txt b/dev/breeze/doc/images/output_cleanup.txt
index 8c71591169dde..bf619de66a7e0 100644
--- a/dev/breeze/doc/images/output_cleanup.txt
+++ b/dev/breeze/doc/images/output_cleanup.txt
@@ -1 +1 @@
-4efe4187a04e5b6228642edf03fefa88
+45d1ac665d85bff99d1ea396be00f892
diff --git a/dev/breeze/doc/images/output_doctor.txt b/dev/breeze/doc/images/output_doctor.txt
index 13375fcc8534b..022c50501b643 100644
--- a/dev/breeze/doc/images/output_doctor.txt
+++ b/dev/breeze/doc/images/output_doctor.txt
@@ -1 +1 @@
-14b718b299e3df02cb6e5227e15432a3
+f9972cd23929342783a9eef3ceca1116
diff --git a/dev/breeze/doc/images/output_generate-migration-file.txt b/dev/breeze/doc/images/output_generate-migration-file.txt
index a2f184c13cb67..1a80bedb173c1 100644
--- a/dev/breeze/doc/images/output_generate-migration-file.txt
+++ b/dev/breeze/doc/images/output_generate-migration-file.txt
@@ -1 +1 @@
-206f1ce888dbabd0cae6f9a350dcfb6e
+fe2f7beb040bd87d2ba9ec143c067711
diff --git a/dev/breeze/doc/images/output_k8s_build-k8s-image.txt b/dev/breeze/doc/images/output_k8s_build-k8s-image.txt
index 2db6917ae571b..67f0160b50209 100644
--- a/dev/breeze/doc/images/output_k8s_build-k8s-image.txt
+++ b/dev/breeze/doc/images/output_k8s_build-k8s-image.txt
@@ -1 +1 @@
-b69eb25ba5e0048721c560e125489cc1
+40442787a9fafb301236e1821099092a
diff --git a/dev/breeze/doc/images/output_k8s_configure-cluster.txt b/dev/breeze/doc/images/output_k8s_configure-cluster.txt
index 07fc6c93aa573..7ecd42d760681 100644
--- a/dev/breeze/doc/images/output_k8s_configure-cluster.txt
+++ b/dev/breeze/doc/images/output_k8s_configure-cluster.txt
@@ -1 +1 @@
-ba3810411d120af3790a87ffec349e86
+6e93a011facfa3eef2cf3daccdbac9bd
diff --git a/dev/breeze/doc/images/output_k8s_create-cluster.txt b/dev/breeze/doc/images/output_k8s_create-cluster.txt
index b2c9419bb0ec0..8d6330198c8b5 100644
--- a/dev/breeze/doc/images/output_k8s_create-cluster.txt
+++ b/dev/breeze/doc/images/output_k8s_create-cluster.txt
@@ -1 +1 @@
-bf532e3384db66f57477c8ab689152d3
+10b1e7982d783b404e854b6bccec5787
diff --git a/dev/breeze/doc/images/output_k8s_delete-cluster.txt b/dev/breeze/doc/images/output_k8s_delete-cluster.txt
index 583a693430532..169719432d2ff 100644
--- a/dev/breeze/doc/images/output_k8s_delete-cluster.txt
+++ b/dev/breeze/doc/images/output_k8s_delete-cluster.txt
@@ -1 +1 @@
-02eb829a8538e463499ae9a03ccf9042
+ad0eea9be87ef3d5451698aab8a25358
diff --git a/dev/breeze/doc/images/output_k8s_deploy-airflow.txt b/dev/breeze/doc/images/output_k8s_deploy-airflow.txt
index cb1f8da8d0122..9b82b31144831 100644
--- a/dev/breeze/doc/images/output_k8s_deploy-airflow.txt
+++ b/dev/breeze/doc/images/output_k8s_deploy-airflow.txt
@@ -1 +1 @@
-67ad2f6427e991a568e0e0064d7e099f
+c31bffdf3bba32ed1278cd59f20c2faf
diff --git a/dev/breeze/doc/images/output_k8s_k9s.txt b/dev/breeze/doc/images/output_k8s_k9s.txt
index b79356813e79e..7191c67d24e31 100644
--- a/dev/breeze/doc/images/output_k8s_k9s.txt
+++ b/dev/breeze/doc/images/output_k8s_k9s.txt
@@ -1 +1 @@
-283aa1251878949198f8f6c48d34d313
+efedbc9d3a96d716fa0f560e8dc5ea7e
diff --git a/dev/breeze/doc/images/output_k8s_logs.txt b/dev/breeze/doc/images/output_k8s_logs.txt
index 62299e6247701..46cec2dd8bb7e 100644
--- a/dev/breeze/doc/images/output_k8s_logs.txt
+++ b/dev/breeze/doc/images/output_k8s_logs.txt
@@ -1 +1 @@
-d40828be00a2b47175867e720d1daaf7
+cf00d923f26a0d331dd7fe7251c56f37
diff --git a/dev/breeze/doc/images/output_k8s_run-complete-tests.txt b/dev/breeze/doc/images/output_k8s_run-complete-tests.txt
index 21e9f2e3215e2..128524bb500e8 100644
--- a/dev/breeze/doc/images/output_k8s_run-complete-tests.txt
+++ b/dev/breeze/doc/images/output_k8s_run-complete-tests.txt
@@ -1 +1 @@
-9af2caa7281fa5749cda59a518c54cdc
+90311a31704a88dbeadc5955a4b26452
diff --git a/dev/breeze/doc/images/output_k8s_shell.txt b/dev/breeze/doc/images/output_k8s_shell.txt
index 564bbe05e9f16..16014bad6d105 100644
--- a/dev/breeze/doc/images/output_k8s_shell.txt
+++ b/dev/breeze/doc/images/output_k8s_shell.txt
@@ -1 +1 @@
-85b62ab046d9799e6f84b9facc7a91ea
+b364a237eaa04d37db3b51620566ac85
diff --git a/dev/breeze/doc/images/output_k8s_status.txt b/dev/breeze/doc/images/output_k8s_status.txt
index 8cb0cbc0a008d..e9c655c06abeb 100644
--- a/dev/breeze/doc/images/output_k8s_status.txt
+++ b/dev/breeze/doc/images/output_k8s_status.txt
@@ -1 +1 @@
-2a97ebce9c3211206b7f7cc6b65f820b
+45ae1dbd57e2d8e7c512bf32f5ab4193
diff --git a/dev/breeze/doc/images/output_k8s_tests.txt b/dev/breeze/doc/images/output_k8s_tests.txt
index 006a674c04e0c..f5a8137e26795 100644
--- a/dev/breeze/doc/images/output_k8s_tests.txt
+++ b/dev/breeze/doc/images/output_k8s_tests.txt
@@ -1 +1 @@
-8250fb567cba4be27a36b487d616d5a7
+73297fbd99e02da431cb693f8bd69049
diff --git a/dev/breeze/doc/images/output_k8s_upload-k8s-image.txt b/dev/breeze/doc/images/output_k8s_upload-k8s-image.txt
index 16b731e7a45c5..c50b134b778b4 100644
--- a/dev/breeze/doc/images/output_k8s_upload-k8s-image.txt
+++ b/dev/breeze/doc/images/output_k8s_upload-k8s-image.txt
@@ -1 +1 @@
-9dde13d40b4ff9480b1248499a06b7ca
+7b05f647b8a0009a1a18471678dbd14d
diff --git a/dev/breeze/doc/images/output_prod-image_build.txt b/dev/breeze/doc/images/output_prod-image_build.txt
index 10070d87d2acd..58f9fe1ecf939 100644
--- a/dev/breeze/doc/images/output_prod-image_build.txt
+++ b/dev/breeze/doc/images/output_prod-image_build.txt
@@ -1 +1 @@
-e05113a2a2bdbbd524c534418a2cf048
+f0627afea3a75fad4886afaa9a517fdf
diff --git a/dev/breeze/doc/images/output_prod-image_load.txt b/dev/breeze/doc/images/output_prod-image_load.txt
index ceef534863ca2..e229179e97f35 100644
--- a/dev/breeze/doc/images/output_prod-image_load.txt
+++ b/dev/breeze/doc/images/output_prod-image_load.txt
@@ -1 +1 @@
-19d074b533f6f0960a1be1bff1dfeb19
+de986e6f731cef102f8f2f40dd2e8b01
diff --git a/dev/breeze/doc/images/output_prod-image_pull.txt b/dev/breeze/doc/images/output_prod-image_pull.txt
index 81d112b03ace6..6e0a79486fc8e 100644
--- a/dev/breeze/doc/images/output_prod-image_pull.txt
+++ b/dev/breeze/doc/images/output_prod-image_pull.txt
@@ -1 +1 @@
-7b82e53559f6807d54dc8a33a79d191f
+a1c4d0b647670b696293bde6e97898bd
diff --git a/dev/breeze/doc/images/output_prod-image_save.txt b/dev/breeze/doc/images/output_prod-image_save.txt
index 4d102b87fc07c..b39bbfdb68c8a 100644
--- a/dev/breeze/doc/images/output_prod-image_save.txt
+++ b/dev/breeze/doc/images/output_prod-image_save.txt
@@ -1 +1 @@
-84108456263fa64de7685819230c57f6
+b4b74446ac624e2114a03773996968fc
diff --git a/dev/breeze/doc/images/output_prod-image_verify.txt b/dev/breeze/doc/images/output_prod-image_verify.txt
index a7f3287f5e10a..857a970c85745 100644
--- a/dev/breeze/doc/images/output_prod-image_verify.txt
+++ b/dev/breeze/doc/images/output_prod-image_verify.txt
@@ -1 +1 @@
-2883fea4e35b128c7ad3bd9020d08b6f
+8fcf39b4153549e82cddcf3746126801
diff --git a/dev/breeze/doc/images/output_release-management_add-back-references.txt b/dev/breeze/doc/images/output_release-management_add-back-references.txt
index f241d08e67efd..5372e6d41c398 100644
--- a/dev/breeze/doc/images/output_release-management_add-back-references.txt
+++ b/dev/breeze/doc/images/output_release-management_add-back-references.txt
@@ -1 +1 @@
-03bd6c8a89914dea47a02ffc23a1701d
+5d1541667a68b9dd5b149bdc80dfe082
diff --git a/dev/breeze/doc/images/output_release-management_clean-old-provider-artifacts.txt b/dev/breeze/doc/images/output_release-management_clean-old-provider-artifacts.txt
index d83b1dd12737a..644ef44e5799a 100644
--- a/dev/breeze/doc/images/output_release-management_clean-old-provider-artifacts.txt
+++ b/dev/breeze/doc/images/output_release-management_clean-old-provider-artifacts.txt
@@ -1 +1 @@
-dafdee6153bdbb48e598767a77fa559d
+085dfd3570b78ad1be8dd95f480be582
diff --git a/dev/breeze/doc/images/output_release-management_create-minor-branch.txt b/dev/breeze/doc/images/output_release-management_create-minor-branch.txt
index 07f451cc0d517..52b3e6a8f579b 100644
--- a/dev/breeze/doc/images/output_release-management_create-minor-branch.txt
+++ b/dev/breeze/doc/images/output_release-management_create-minor-branch.txt
@@ -1 +1 @@
-24539873771457043408812541c37216
+83ae80576428b38723dccf2c385c1407
diff --git a/dev/breeze/doc/images/output_release-management_generate-constraints.txt b/dev/breeze/doc/images/output_release-management_generate-constraints.txt
index 76e0173b7d724..b1402f55a33f4 100644
--- a/dev/breeze/doc/images/output_release-management_generate-constraints.txt
+++ b/dev/breeze/doc/images/output_release-management_generate-constraints.txt
@@ -1 +1 @@
-ea34b6e28163f0439afd729f7e1033c7
+7721551d951d9d1f1aa4a65fc40590fb
diff --git a/dev/breeze/doc/images/output_release-management_generate-issue-content-core.txt b/dev/breeze/doc/images/output_release-management_generate-issue-content-core.txt
index 72c113190979c..ff9db17bc0776 100644
--- a/dev/breeze/doc/images/output_release-management_generate-issue-content-core.txt
+++ b/dev/breeze/doc/images/output_release-management_generate-issue-content-core.txt
@@ -1 +1 @@
-524b78655000e9bcdeda6d4a6897b4be
+4392efab41586255c9af6b05b028399a
diff --git a/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.txt b/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.txt
index b708707140bdb..21b7200bb2177 100644
--- a/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.txt
+++ b/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.txt
@@ -1 +1 @@
-6c32d6c84fce4906829e83edd5b33729
+02d79407876c87adbbb32e53dc028ced
diff --git a/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.txt b/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.txt
index d4fd42b205407..155e1a7438bb4 100644
--- a/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.txt
+++ b/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.txt
@@ -1 +1 @@
-6785d49fc08fb3dd179fd508bcbc1103
+c0ce0d36e7ecaf5406cd9910774b2bc8
diff --git a/dev/breeze/doc/images/output_release-management_generate-providers-metadata.txt b/dev/breeze/doc/images/output_release-management_generate-providers-metadata.txt
index 0bfbd7e4d2709..e885738de07e4 100644
--- a/dev/breeze/doc/images/output_release-management_generate-providers-metadata.txt
+++ b/dev/breeze/doc/images/output_release-management_generate-providers-metadata.txt
@@ -1 +1 @@
-49cf8a379bddef1b39fe21dc5e83ee1b
+d4630907f51e9f17d442492905a3c47d
diff --git a/dev/breeze/doc/images/output_release-management_install-provider-distributions.txt b/dev/breeze/doc/images/output_release-management_install-provider-distributions.txt
index fe4d670355036..7abc4df7f96ab 100644
--- a/dev/breeze/doc/images/output_release-management_install-provider-distributions.txt
+++ b/dev/breeze/doc/images/output_release-management_install-provider-distributions.txt
@@ -1 +1 @@
-b7f2f937640c383c2605e9bc8c9404c5
+1ea2317652b1d9d4f58e25de06c1fca8
diff --git a/dev/breeze/doc/images/output_release-management_merge-prod-images.txt b/dev/breeze/doc/images/output_release-management_merge-prod-images.txt
index cb5c82b954121..f830ba93dbd48 100644
--- a/dev/breeze/doc/images/output_release-management_merge-prod-images.txt
+++ b/dev/breeze/doc/images/output_release-management_merge-prod-images.txt
@@ -1 +1 @@
-d612c71a92a2b512519b7bea000cd2b1
+a22a4eeefd00c33e8f68738d49d76c46
diff --git a/dev/breeze/doc/images/output_release-management_prepare-airflow-ctl-distributions.txt b/dev/breeze/doc/images/output_release-management_prepare-airflow-ctl-distributions.txt
index 9a3a2411da29b..57efa6d396357 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-airflow-ctl-distributions.txt
+++ b/dev/breeze/doc/images/output_release-management_prepare-airflow-ctl-distributions.txt
@@ -1 +1 @@
-17d21a6f2ccb560eb1f46f0e93beb88d
+27d124c071deddbcd64dc7ec6e570abe
diff --git a/dev/breeze/doc/images/output_release-management_prepare-airflow-distributions.txt b/dev/breeze/doc/images/output_release-management_prepare-airflow-distributions.txt
index 8fb8f37aafebc..23cfaca119493 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-airflow-distributions.txt
+++ b/dev/breeze/doc/images/output_release-management_prepare-airflow-distributions.txt
@@ -1 +1 @@
-b5a1c86e7c45855ef254242f5a7157f5
+ded1f764fbbd1ef0cb885615f9e0ae83
diff --git a/dev/breeze/doc/images/output_release-management_prepare-airflow-tarball.txt b/dev/breeze/doc/images/output_release-management_prepare-airflow-tarball.txt
index 1994c9ebbc3b8..19b5526b1c6a6 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-airflow-tarball.txt
+++ b/dev/breeze/doc/images/output_release-management_prepare-airflow-tarball.txt
@@ -1 +1 @@
-c0c18e77151b5518db69e3803cd0b602
+f98358d95810966a00142a5e654c7909
diff --git a/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.txt b/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.txt
index ce418ef7963c6..6051dbc2d7903 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.txt
+++ b/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.txt
@@ -1 +1 @@
-6f69199a4d3f3a71a802e8f6aab14ce3
+27169c83fcbcca907a0b32a5c4faeb48
diff --git a/dev/breeze/doc/images/output_release-management_prepare-helm-chart-tarball.txt b/dev/breeze/doc/images/output_release-management_prepare-helm-chart-tarball.txt
index 246db7727ca51..d939b7b6a1096 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-helm-chart-tarball.txt
+++ b/dev/breeze/doc/images/output_release-management_prepare-helm-chart-tarball.txt
@@ -1 +1 @@
-dca352f1a6f7c2d383c85df3dc4a0067
+15c3eb3be97998320dc95431840d8b3a
diff --git a/dev/breeze/doc/images/output_release-management_prepare-provider-distributions.txt b/dev/breeze/doc/images/output_release-management_prepare-provider-distributions.txt
index 0bdfc2317da56..7f9b17b9cc51f 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-provider-distributions.txt
+++ b/dev/breeze/doc/images/output_release-management_prepare-provider-distributions.txt
@@ -1 +1 @@
-4e4a2a479fec452ad1edc19717287817
+4e330b96a0802f7854631f0578d9a770
diff --git a/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.txt b/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.txt
index 0bd3bcb6d86eb..11719f039a9de 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.txt
+++ b/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.txt
@@ -1 +1 @@
-0cd7e2b0f5f50e5d6518b4a501ea5799
+f308e97af5a7f47147b006ed66af2c1c
diff --git a/dev/breeze/doc/images/output_release-management_prepare-python-client.txt b/dev/breeze/doc/images/output_release-management_prepare-python-client.txt
index d77d7b0b44f13..4ea96ac486040 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-python-client.txt
+++ b/dev/breeze/doc/images/output_release-management_prepare-python-client.txt
@@ -1 +1 @@
-581c1aabe78d934c066fb17bc4f22d94
+be9b27fa7ff18398b87d5d1a1746edf9
diff --git a/dev/breeze/doc/images/output_release-management_prepare-task-sdk-distributions.txt b/dev/breeze/doc/images/output_release-management_prepare-task-sdk-distributions.txt
index b5614d4f0956d..67f5f0cf65bc4 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-task-sdk-distributions.txt
+++ b/dev/breeze/doc/images/output_release-management_prepare-task-sdk-distributions.txt
@@ -1 +1 @@
-f8af293ee7689528ff37872a508a1a3f
+d4edfdcbafb4f63ddeca69d26851eb20
diff --git a/dev/breeze/doc/images/output_release-management_publish-docs-to-s3.txt b/dev/breeze/doc/images/output_release-management_publish-docs-to-s3.txt
index bac20268c45b5..e4fb5d52989a4 100644
--- a/dev/breeze/doc/images/output_release-management_publish-docs-to-s3.txt
+++ b/dev/breeze/doc/images/output_release-management_publish-docs-to-s3.txt
@@ -1 +1 @@
-60fe4ff6e64884db8f4b715b37d68bdf
+568376d5841031b748c6021beef486b5
diff --git a/dev/breeze/doc/images/output_release-management_publish-docs.txt b/dev/breeze/doc/images/output_release-management_publish-docs.txt
index 0c359c74d0cae..ecf2e8cee6c1e 100644
--- a/dev/breeze/doc/images/output_release-management_publish-docs.txt
+++ b/dev/breeze/doc/images/output_release-management_publish-docs.txt
@@ -1 +1 @@
-5f49b26d3d18961fb6f8a434191ac8ef
+e529c5ebc1394484334dc188e7ef8f2c
diff --git a/dev/breeze/doc/images/output_release-management_release-prod-images.txt b/dev/breeze/doc/images/output_release-management_release-prod-images.txt
index 752a4910e7ade..7547a6eed14d2 100644
--- a/dev/breeze/doc/images/output_release-management_release-prod-images.txt
+++ b/dev/breeze/doc/images/output_release-management_release-prod-images.txt
@@ -1 +1 @@
-17c498db246f01df4de2ec59a5f1d5ee
+8fc83e19c1176ffd508492fbe911b428
diff --git a/dev/breeze/doc/images/output_release-management_start-rc-process.txt b/dev/breeze/doc/images/output_release-management_start-rc-process.txt
index d96b23fffed71..b3b458160d9a5 100644
--- a/dev/breeze/doc/images/output_release-management_start-rc-process.txt
+++ b/dev/breeze/doc/images/output_release-management_start-rc-process.txt
@@ -1 +1 @@
-0b22405e2f4ba2d411032c2296f70cf8
+e213b793839b778288f40a3af9e076f6
diff --git a/dev/breeze/doc/images/output_release-management_start-release.txt b/dev/breeze/doc/images/output_release-management_start-release.txt
index 2e04e76e4b0c9..98156901ab4a5 100644
--- a/dev/breeze/doc/images/output_release-management_start-release.txt
+++ b/dev/breeze/doc/images/output_release-management_start-release.txt
@@ -1 +1 @@
-9fa3d5d374ad9a0ccff26bf21bfd6823
+d84c6e5a6fcab35c07287bc4d2d65841
diff --git a/dev/breeze/doc/images/output_release-management_update-constraints.txt b/dev/breeze/doc/images/output_release-management_update-constraints.txt
index 8073eee7358b0..9c73e6a05a096 100644
--- a/dev/breeze/doc/images/output_release-management_update-constraints.txt
+++ b/dev/breeze/doc/images/output_release-management_update-constraints.txt
@@ -1 +1 @@
-8b45a2272dbaac58622e6acf00731e13
+cd4df9af29227f6de406050fbb12dd3b
diff --git a/dev/breeze/doc/images/output_release-management_verify-provider-distributions.txt b/dev/breeze/doc/images/output_release-management_verify-provider-distributions.txt
index 471eee7d648e3..1661d2e8a095e 100644
--- a/dev/breeze/doc/images/output_release-management_verify-provider-distributions.txt
+++ b/dev/breeze/doc/images/output_release-management_verify-provider-distributions.txt
@@ -1 +1 @@
-a98ed781eb97bf02cebf48af34729fb7
+fcc7b57ae5cc1d427981eadc3499f281
diff --git a/dev/breeze/doc/images/output_run.txt b/dev/breeze/doc/images/output_run.txt
index 21033512a001c..53c445f3e151b 100644
--- a/dev/breeze/doc/images/output_run.txt
+++ b/dev/breeze/doc/images/output_run.txt
@@ -1 +1 @@
-b3d47850966f15dabc455ab3b5f0297f
+820a829e6ae777a8625862d010f8e693
diff --git a/dev/breeze/doc/images/output_sbom_build-all-airflow-images.txt b/dev/breeze/doc/images/output_sbom_build-all-airflow-images.txt
index 87fcdabbfe3ef..5ee0acb4bbdf9 100644
--- a/dev/breeze/doc/images/output_sbom_build-all-airflow-images.txt
+++ b/dev/breeze/doc/images/output_sbom_build-all-airflow-images.txt
@@ -1 +1 @@
-6cac7736f2a825b0da9d1db9e9c4ef65
+ce2966460a42af3eb835997e07324ea2
diff --git a/dev/breeze/doc/images/output_sbom_export-dependency-information.txt b/dev/breeze/doc/images/output_sbom_export-dependency-information.txt
index afce79dabf93c..d5a5892cd30bc 100644
--- a/dev/breeze/doc/images/output_sbom_export-dependency-information.txt
+++ b/dev/breeze/doc/images/output_sbom_export-dependency-information.txt
@@ -1 +1 @@
-b7bddccf714426f1483bb935f0e6ef2a
+4d738ac97ad21c8dd62bb240022d8d81
diff --git a/dev/breeze/doc/images/output_sbom_generate-providers-requirements.txt b/dev/breeze/doc/images/output_sbom_generate-providers-requirements.txt
index 399a5bed05cfb..aee1a1f98cc63 100644
--- a/dev/breeze/doc/images/output_sbom_generate-providers-requirements.txt
+++ b/dev/breeze/doc/images/output_sbom_generate-providers-requirements.txt
@@ -1 +1 @@
-8662375eb70621a696cb1e6f721bc5f0
+ccece867103e42ef0497a52a0ec0b6d1
diff --git a/dev/breeze/doc/images/output_sbom_update-sbom-information.txt b/dev/breeze/doc/images/output_sbom_update-sbom-information.txt
index 835bdb117370c..6e5ac979b168c 100644
--- a/dev/breeze/doc/images/output_sbom_update-sbom-information.txt
+++ b/dev/breeze/doc/images/output_sbom_update-sbom-information.txt
@@ -1 +1 @@
-2024df97f443b385a80619a4905705c7
+7cb3c6bd7a08706720035864df941273
diff --git a/dev/breeze/doc/images/output_setup_autocomplete.txt b/dev/breeze/doc/images/output_setup_autocomplete.txt
index 14651a3342c92..d8bdc2e111b4a 100644
--- a/dev/breeze/doc/images/output_setup_autocomplete.txt
+++ b/dev/breeze/doc/images/output_setup_autocomplete.txt
@@ -1 +1 @@
-f85f309e3bdc563a4d93613141e64960
+3da8dc88411f34d3ed52c155df744c22
diff --git a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
index 653c909ad59ba..6afbc1c4b9a5e 100644
--- a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
+++ b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
@@ -1 +1 @@
-5fa8fb8159581b0877f5675e3fb7096f
+b1c66655acd75f4f7c65b2d35552f54e
diff --git a/dev/breeze/doc/images/output_setup_config.txt b/dev/breeze/doc/images/output_setup_config.txt
index d70168e36a88b..6a52e60b0b458 100644
--- a/dev/breeze/doc/images/output_setup_config.txt
+++ b/dev/breeze/doc/images/output_setup_config.txt
@@ -1 +1 @@
-03f155c3dfbfedd2a772ee226fcee2dd
+ce0a944326c3418706b7aa90d730e186
diff --git a/dev/breeze/doc/images/output_setup_regenerate-command-images.txt b/dev/breeze/doc/images/output_setup_regenerate-command-images.txt
index 53bc74e1d387d..e1261a2289751 100644
--- a/dev/breeze/doc/images/output_setup_regenerate-command-images.txt
+++ b/dev/breeze/doc/images/output_setup_regenerate-command-images.txt
@@ -1 +1 @@
-05a1e10f75069ec835fc74a5293669a5
+d112f32bf3ac63a45cafb3cd1248d728
diff --git a/dev/breeze/doc/images/output_shell.svg b/dev/breeze/doc/images/output_shell.svg
index 04f2d9f07ce2f..34bf0f927e061 100644
--- a/dev/breeze/doc/images/output_shell.svg
+++ b/dev/breeze/doc/images/output_shell.svg
@@ -629,7 +629,7 @@
 </text><text class="breeze-shell-r5" x="0" y="1386.4" textLength="1464" clip-path="url(#breeze-shell-line-56)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-shell-line-56)">
 </text><text class="breeze-shell-r5" x="0" y="1410.8" textLength="24.4" clip-path="url(#breeze-shell-line-57)">╭─</text><text class="breeze-shell-r5" x="24.4" y="1410.8" textLength="207.4" clip-path="url(#breeze-shell-line-57)">&#160;Choose&#160;executor&#160;</text><text class="breeze-shell-r5" x="231.8" y="1410.8" textLength="1207.8" clip-path="url(#breeze-shell-line-57)">───────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="1410.8" textLength="24.4" clip-path="url(#breeze-shell-line-57)">─╮</text><text class="breeze-shell-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-shell-line-57)">
 </text><text class="breeze-shell-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-shell-line-58)">│</text><text class="breeze-shell-r4" x="24.4" y="1435.2" textLength="122" clip-path="url(#breeze-shell-line-58)">--executor</text><text class="breeze-shell-r1" x="256.2" y="1435.2" textLength="1061.4" clip-path="url(#breeze-shell-line-58)">Specify&#160;the&#160;executor&#160;to&#160;use&#160;with&#160;shell&#160;command.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1435.2" textLength="12.2" clip-path="url(#breeze-shell-line-58)">│</text><text class="breeze-shell-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-shell-line-58)">
-</text><text class="breeze-shell-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-shell-line-59)">│</text><text class="breeze-shell-r7" x="256.2" y="1459.6" textLength="1061.4" clip-path="url(#breeze-shell-line-59)">(localexecutor|kubernetesexecutor|celeryexecutor|celerykubernetesexecutor|edgeexecutor)</text><text class="breeze-shell-r5" x="1451.8" y="1459.6" textLength="12.2" clip-path="url(#breeze-shell-line-59)">│</text><text class="breeze-shell-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-shell-line-59)">
+</text><text class="breeze-shell-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-shell-line-59)">│</text><text class="breeze-shell-r7" x="256.2" y="1459.6" textLength="1061.4" clip-path="url(#breeze-shell-line-59)">(LocalExecutor|KubernetesExecutor|CeleryExecutor|CeleryKubernetesExecutor|EdgeExecutor)</text><text class="breeze-shell-r5" x="1451.8" y="1459.6" textLength="12.2" clip-path="url(#breeze-shell-line-59)">│</text><text class="breeze-shell-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-shell-line-59)">
 </text><text class="breeze-shell-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-shell-line-60)">│</text><text class="breeze-shell-r5" x="256.2" y="1484" textLength="1061.4" clip-path="url(#breeze-shell-line-60)">[default:&#160;LocalExecutor]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1484" textLength="12.2" clip-path="url(#breeze-shell-line-60)">│</text><text class="breeze-shell-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-shell-line-60)">
 </text><text class="breeze-shell-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-shell-line-61)">│</text><text class="breeze-shell-r4" x="24.4" y="1508.4" textLength="183" clip-path="url(#breeze-shell-line-61)">--celery-broker</text><text class="breeze-shell-r1" x="256.2" y="1508.4" textLength="402.6" clip-path="url(#breeze-shell-line-61)">Specify&#160;the&#160;celery&#160;message&#160;broker</text><text class="breeze-shell-r7" x="671" y="1508.4" textLength="195.2" clip-path="url(#breeze-shell-line-61)">(rabbitmq|redis)</text><text class="breeze-shell-r5" x="878.4" y="1508.4" textLength="195.2" clip-path="url(#breeze-shell-line-61)">[default:&#160;redis]</text><text class="breeze-shell-r5" x="1451.8" y="1508.4" textLength="12.2" clip-path="url(#breeze-shell-line-61)">│</text><text class="breeze-shell-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-shell-line-61)">
 </text><text class="breeze-shell-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-shell-line-62)">│</text><text class="breeze-shell-r4" x="24.4" y="1532.8" textLength="183" clip-path="url(#breeze-shell-line-62)">--celery-flower</text><text class="breeze-shell-r1" x="256.2" y="1532.8" textLength="231.8" clip-path="url(#breeze-shell-line-62)">Start&#160;celery&#160;flower</text><text class="breeze-shell-r5" x="1451.8" y="1532.8" textLength="12.2" clip-path="url(#breeze-shell-line-62)">│</text><text class="breeze-shell-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-shell-line-62)">
diff --git a/dev/breeze/doc/images/output_shell.txt b/dev/breeze/doc/images/output_shell.txt
index 0658d1403b7b5..ab08dd10a1636 100644
--- a/dev/breeze/doc/images/output_shell.txt
+++ b/dev/breeze/doc/images/output_shell.txt
@@ -1 +1 @@
-114c7905dcd3b0b35ee97fd7e5da4d4e
+88a0320b81a12411637d9b2596394a3a
diff --git a/dev/breeze/doc/images/output_start-airflow.svg b/dev/breeze/doc/images/output_start-airflow.svg
index a4f89fa37fd93..24ef4793309b7 100644
--- a/dev/breeze/doc/images/output_start-airflow.svg
+++ b/dev/breeze/doc/images/output_start-airflow.svg
@@ -529,12 +529,12 @@
 </text><text class="breeze-start-airflow-r5" x="0" y="1215.6" textLength="24.4" clip-path="url(#breeze-start-airflow-line-49)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="1215.6" textLength="231.8" clip-path="url(#breeze-start-airflow-line-49)">&#160;Choosing&#160;executor&#160;</text><text class="breeze-start-airflow-r5" x="256.2" y="1215.6" textLength="1183.4" clip-path="url(#breeze-start-airflow-line-49)">─────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="1215.6" textLength="24.4" clip-path="url(#breeze-start-airflow-line-49)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-49)">
 </text><text class="breeze-start-airflow-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-start-airflow-line-50)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1240" textLength="122" clip-path="url(#breeze-start-airflow-line-50)">--executor</text><text class="breeze-start-airflow-r1" x="256.2" y="1240" textLength="1183.4" clip-path="url(#breeze-start-airflow-line-50)">Specify&#160;the&#160;executor&#160;to&#160;use&#160;with&#160;start-airflow&#160;(defaults&#160;to&#160;LocalExecutor&#160;or&#160;CeleryExecutor&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1240" textLength="12.2" clip-path="url(#breeze-start-airflow-line-50)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-start-airflow-line-50)">
 </text><text class="breeze-start-airflow-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-51)">│</text><text class="breeze-start-airflow-r1" x="256.2" y="1264.4" textLength="1183.4" clip-path="url(#breeze-start-airflow-line-51)">depending&#160;on&#160;the&#160;integration&#160;used).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1264.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-51)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-51)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-52)">│</text><text class="breeze-start-airflow-r7" x="256.2" y="1288.8" textLength="1183.4" clip-path="url(#breeze-start-airflow-line-52)">(localexecutor|celeryexecutor|edgeexecutor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1288.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-52)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-52)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-52)">│</text><text class="breeze-start-airflow-r7" x="256.2" y="1288.8" textLength="1183.4" clip-path="url(#breeze-start-airflow-line-52)">(LocalExecutor|CeleryExecutor|EdgeExecutor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1288.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-52)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-52)">
 </text><text class="breeze-start-airflow-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-53)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1313.2" textLength="183" clip-path="url(#breeze-start-airflow-line-53)">--celery-broker</text><text class="breeze-start-airflow-r1" x="256.2" y="1313.2" textLength="402.6" clip-path="url(#breeze-start-airflow-line-53)">Specify&#160;the&#160;celery&#160;message&#160;broker</text><text class="breeze-start-airflow-r7" x="671" y="1313.2" textLength="195.2" clip-path="url(#breeze-start-airflow-line-53)">(rabbitmq|redis)</text><text class="breeze-start-airflow-r5" x="878.4" y="1313.2" textLength="195.2" clip-path="url(#breeze-start-airflow-line-53)">[default:&#160;redis]</text><text class="breeze-start-airflow-r5" x="1451.8" y="1313.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-53)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1313.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-53)">
 </text><text class="breeze-start-airflow-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-54)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1337.6" textLength="183" clip-path="url(#breeze-start-airflow-line-54)">--celery-flower</text><text class="breeze-start-airflow-r1" x="256.2" y="1337.6" textLength="231.8" clip-path="url(#breeze-start-airflow-line-54)">Start&#160;celery&#160;flower</text><text class="breeze-start-airflow-r5" x="1451.8" y="1337.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-54)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-54)">
 </text><text class="breeze-start-airflow-r5" x="0" y="1362" textLength="1464" clip-path="url(#breeze-start-airflow-line-55)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#breeze-start-airflow-line-55)">
 </text><text class="breeze-start-airflow-r5" x="0" y="1386.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-56)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="1386.4" textLength="170.8" clip-path="url(#breeze-start-airflow-line-56)">&#160;Auth&#160;manager&#160;</text><text class="breeze-start-airflow-r5" x="195.2" y="1386.4" textLength="1244.4" clip-path="url(#breeze-start-airflow-line-56)">──────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="1386.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-56)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-56)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-57)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1410.8" textLength="170.8" clip-path="url(#breeze-start-airflow-line-57)">--auth-manager</text><text class="breeze-start-airflow-r1" x="244" y="1410.8" textLength="610" clip-path="url(#breeze-start-airflow-line-57)">Specify&#160;the&#160;auth&#160;manager&#160;to&#160;use&#160;with&#160;start-airflow</text><text class="breeze-start-airflow-r7" x="866.2" y="1410.8" textLength="414.8" clip-path="url(#breeze-start-airflow-line-57)">(simpleauthmanager|fabauthmanager)</text><text class="breeze-start-airflow-r5" x="1451.8" y="1410.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-57)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-57)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-57)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1410.8" textLength="170.8" clip-path="url(#breeze-start-airflow-line-57)">--auth-manager</text><text class="breeze-start-airflow-r1" x="244" y="1410.8" textLength="610" clip-path="url(#breeze-start-airflow-line-57)">Specify&#160;the&#160;auth&#160;manager&#160;to&#160;use&#160;with&#160;start-airflow</text><text class="breeze-start-airflow-r7" x="866.2" y="1410.8" textLength="414.8" clip-path="url(#breeze-start-airflow-line-57)">(SimpleAuthManager|FabAuthManager)</text><text class="breeze-start-airflow-r5" x="1451.8" y="1410.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-57)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-57)">
 </text><text class="breeze-start-airflow-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-58)">│</text><text class="breeze-start-airflow-r5" x="244" y="1435.2" textLength="610" clip-path="url(#breeze-start-airflow-line-58)">[default:&#160;SimpleAuthManager]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1435.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-58)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-58)">
 </text><text class="breeze-start-airflow-r5" x="0" y="1459.6" textLength="1464" clip-path="url(#breeze-start-airflow-line-59)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-59)">
 </text><text class="breeze-start-airflow-r5" x="0" y="1484" textLength="24.4" clip-path="url(#breeze-start-airflow-line-60)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="1484" textLength="329.4" clip-path="url(#breeze-start-airflow-line-60)">&#160;Asset&#160;compilation&#160;options&#160;</text><text class="breeze-start-airflow-r5" x="353.8" y="1484" textLength="1085.8" clip-path="url(#breeze-start-airflow-line-60)">─────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="1484" textLength="24.4" clip-path="url(#breeze-start-airflow-line-60)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-start-airflow-line-60)">
diff --git a/dev/breeze/doc/images/output_start-airflow.txt b/dev/breeze/doc/images/output_start-airflow.txt
index 4735e4ff3fc94..a210aa26ef03c 100644
--- a/dev/breeze/doc/images/output_start-airflow.txt
+++ b/dev/breeze/doc/images/output_start-airflow.txt
@@ -1 +1 @@
-e6915ea0ebe1a25577d3a7e055e6e414
+9610c4e7624dd08101801d61232762f6
diff --git a/dev/breeze/doc/images/output_static-checks.txt b/dev/breeze/doc/images/output_static-checks.txt
index 91520a15b2e70..e8dbbc57b6271 100644
--- a/dev/breeze/doc/images/output_static-checks.txt
+++ b/dev/breeze/doc/images/output_static-checks.txt
@@ -1 +1 @@
-68081f3a0a81c8210e838f8609504e2b
+4d21a8da51102b0c61707aac83f31b3a
diff --git a/dev/breeze/doc/images/output_testing_airflow-ctl-tests.txt b/dev/breeze/doc/images/output_testing_airflow-ctl-tests.txt
index 1d6cc7d3adcd9..3d97b4b676ed0 100644
--- a/dev/breeze/doc/images/output_testing_airflow-ctl-tests.txt
+++ b/dev/breeze/doc/images/output_testing_airflow-ctl-tests.txt
@@ -1 +1 @@
-3b91aa29796d3512e9221bbf2e5d7a8c
+7950b438b01dc4d75116ef332c7f2812
diff --git a/dev/breeze/doc/images/output_testing_core-integration-tests.txt b/dev/breeze/doc/images/output_testing_core-integration-tests.txt
index be8555cfdf376..6cc94ab76b850 100644
--- a/dev/breeze/doc/images/output_testing_core-integration-tests.txt
+++ b/dev/breeze/doc/images/output_testing_core-integration-tests.txt
@@ -1 +1 @@
-8c055fd94fd219b6e4b4fe6971c20269
+f9a72bab5c6f0a3d4eabddeb547818fe
diff --git a/dev/breeze/doc/images/output_testing_core-tests.txt b/dev/breeze/doc/images/output_testing_core-tests.txt
index 0c91e6779f145..a5c89681ead52 100644
--- a/dev/breeze/doc/images/output_testing_core-tests.txt
+++ b/dev/breeze/doc/images/output_testing_core-tests.txt
@@ -1 +1 @@
-02a1070920013e5e971818868f8300a2
+ceb51359e3530c67379ae17cf219647d
diff --git a/dev/breeze/doc/images/output_testing_docker-compose-tests.txt b/dev/breeze/doc/images/output_testing_docker-compose-tests.txt
index 59d14571df121..640b88b2b6c0b 100644
--- a/dev/breeze/doc/images/output_testing_docker-compose-tests.txt
+++ b/dev/breeze/doc/images/output_testing_docker-compose-tests.txt
@@ -1 +1 @@
-d7be3a2ecc04a84d303ba53031ed5cd1
+51b98fe337251d125d8de538a71a21df
diff --git a/dev/breeze/doc/images/output_testing_helm-tests.txt b/dev/breeze/doc/images/output_testing_helm-tests.txt
index ab713360677dc..14ca452d17ba6 100644
--- a/dev/breeze/doc/images/output_testing_helm-tests.txt
+++ b/dev/breeze/doc/images/output_testing_helm-tests.txt
@@ -1 +1 @@
-668fcec6898e91c2f80cd929200885a3
+f67f6341ee5ef1786505b25152a278cc
diff --git a/dev/breeze/doc/images/output_testing_providers-integration-tests.txt b/dev/breeze/doc/images/output_testing_providers-integration-tests.txt
index 988bdb0bf070b..6a4377016c653 100644
--- a/dev/breeze/doc/images/output_testing_providers-integration-tests.txt
+++ b/dev/breeze/doc/images/output_testing_providers-integration-tests.txt
@@ -1 +1 @@
-101f31d9f98a721a113bdebd6bff2701
+f8cae5908b307cdc14d48857da8e058d
diff --git a/dev/breeze/doc/images/output_testing_providers-tests.txt b/dev/breeze/doc/images/output_testing_providers-tests.txt
index 69ecf43903ef2..8c77d66e03ade 100644
--- a/dev/breeze/doc/images/output_testing_providers-tests.txt
+++ b/dev/breeze/doc/images/output_testing_providers-tests.txt
@@ -1 +1 @@
-80c28930cd69675e804506f6693cc2b6
+40d4ee42e19c31200593c168157a2521
diff --git a/dev/breeze/doc/images/output_testing_python-api-client-tests.txt b/dev/breeze/doc/images/output_testing_python-api-client-tests.txt
index 74f8904e200de..feaff93e8dbfa 100644
--- a/dev/breeze/doc/images/output_testing_python-api-client-tests.txt
+++ b/dev/breeze/doc/images/output_testing_python-api-client-tests.txt
@@ -1 +1 @@
-6f0d122750efb8f9c877698a648d7a8f
+92211c9044658c3f7f3ca81af06f7c43
diff --git a/dev/breeze/doc/images/output_testing_system-tests.txt b/dev/breeze/doc/images/output_testing_system-tests.txt
index 26423352289dc..68d7fffd36077 100644
--- a/dev/breeze/doc/images/output_testing_system-tests.txt
+++ b/dev/breeze/doc/images/output_testing_system-tests.txt
@@ -1 +1 @@
-c5a420fa9e8065d067a2f425ca761509
+96c2e355b805d8d2a17d04978f4c6cdc
diff --git a/dev/breeze/doc/images/output_testing_task-sdk-tests.txt b/dev/breeze/doc/images/output_testing_task-sdk-tests.txt
index aa016bcde1fbf..3e66367f5db6d 100644
--- a/dev/breeze/doc/images/output_testing_task-sdk-tests.txt
+++ b/dev/breeze/doc/images/output_testing_task-sdk-tests.txt
@@ -1 +1 @@
-ac0c0d9d9252a7ddc7f8083fa64e0659
+a39f22cb9ce828c2793aad73ac80bd07
diff --git a/dev/breeze/doc/images/output_workflow-run_publish-docs.txt b/dev/breeze/doc/images/output_workflow-run_publish-docs.txt
index 25d1e7eecfc3d..b64cbd5c82a07 100644
--- a/dev/breeze/doc/images/output_workflow-run_publish-docs.txt
+++ b/dev/breeze/doc/images/output_workflow-run_publish-docs.txt
@@ -1 +1 @@
-70c9f03eb3c6f2b1b857b1636aea1819
+aee3662a42543b525bf4ccfd23adaf62
diff --git a/dev/breeze/pyproject.toml b/dev/breeze/pyproject.toml
index 1381e546d8402..722ed77772b44 100644
--- a/dev/breeze/pyproject.toml
+++ b/dev/breeze/pyproject.toml
@@ -45,7 +45,9 @@ requires-python = "~=3.10"
 
 dependencies = [
     "black>=23.11.0",
-    "click>=8.1.8",
+    # There is a bug in Click 8.2.0 and 8.2.1 that makes flag variables do not properly evaluate
+    # "false"-y values set in environment variables. See https://github.com/pallets/click/issues/2952
+    "click>=8.1.8,<8.2.0",
     "filelock>=3.13.0",
     "flit>=3.12.0",
     "flit-core>=3.12.0",
diff --git a/dev/breeze/uv.lock b/dev/breeze/uv.lock
index bda5fd052e7bc..3e48e28d860ca 100644
--- a/dev/breeze/uv.lock
+++ b/dev/breeze/uv.lock
@@ -67,7 +67,7 @@ requires-dist = [
     { name = "awswrangler", specifier = ">=3.11.0" },
     { name = "black", specifier = ">=23.11.0" },
     { name = "boto3", specifier = ">=1.34.90" },
-    { name = "click", specifier = ">=8.1.8" },
+    { name = "click", specifier = ">=8.1.8,<8.2.0" },
     { name = "filelock", specifier = ">=3.13.0" },
     { name = "flit", specifier = ">=3.12.0" },
     { name = "flit-core", specifier = ">=3.12.0" },

From ed81cd5700ceaa5bd65fcb9f9c9020cb6999a945 Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Sat, 28 Jun 2025 17:00:17 +0530
Subject: [PATCH 254/381] Replace `models.BaseOperator` to Task SDK one for
 Asana & Arangodb (#52374)

Follow-up of https://github.com/apache/airflow/pull/52292 for Asana & Arangodb
---
 .../unit/always/test_project_structure.py     |  1 +
 .../providers/arangodb/operators/arangodb.py  |  2 +-
 .../providers/arangodb/sensors/arangodb.py    |  7 +---
 .../providers/arangodb/version_compat.py      | 12 ++++++
 .../providers/asana/operators/asana_tasks.py  |  2 +-
 .../airflow/providers/asana/version_compat.py | 40 +++++++++++++++++++
 6 files changed, 56 insertions(+), 8 deletions(-)
 create mode 100644 providers/asana/src/airflow/providers/asana/version_compat.py

diff --git a/airflow-core/tests/unit/always/test_project_structure.py b/airflow-core/tests/unit/always/test_project_structure.py
index 1f55eac96be6e..798cc54756bc6 100644
--- a/airflow-core/tests/unit/always/test_project_structure.py
+++ b/airflow-core/tests/unit/always/test_project_structure.py
@@ -96,6 +96,7 @@ def test_providers_modules_should_have_tests(self):
             "providers/apache/livy/tests/unit/apache/livy/test_version_compat.py",
             "providers/apache/spark/tests/unit/apache/spark/test_version_compat.py",
             "providers/arangodb/tests/unit/arangodb/test_version_compat.py",
+            "providers/asana/tests/unit/asana/test_version_compat.py",
             "providers/atlassian/jira/tests/unit/atlassian/jira/test_version_compat.py",
             "providers/celery/tests/unit/celery/executors/test_celery_executor_utils.py",
             "providers/celery/tests/unit/celery/executors/test_default_celery.py",
diff --git a/providers/arangodb/src/airflow/providers/arangodb/operators/arangodb.py b/providers/arangodb/src/airflow/providers/arangodb/operators/arangodb.py
index 50a3421dfe73d..570a1666676c5 100644
--- a/providers/arangodb/src/airflow/providers/arangodb/operators/arangodb.py
+++ b/providers/arangodb/src/airflow/providers/arangodb/operators/arangodb.py
@@ -21,8 +21,8 @@
 from typing import TYPE_CHECKING, Any
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.arangodb.hooks.arangodb import ArangoDBHook
+from airflow.providers.arangodb.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/arangodb/src/airflow/providers/arangodb/sensors/arangodb.py b/providers/arangodb/src/airflow/providers/arangodb/sensors/arangodb.py
index 8ad897b69e42e..4221b92499642 100644
--- a/providers/arangodb/src/airflow/providers/arangodb/sensors/arangodb.py
+++ b/providers/arangodb/src/airflow/providers/arangodb/sensors/arangodb.py
@@ -21,12 +21,7 @@
 from typing import TYPE_CHECKING
 
 from airflow.providers.arangodb.hooks.arangodb import ArangoDBHook
-from airflow.providers.arangodb.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+from airflow.providers.arangodb.version_compat import BaseSensorOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/arangodb/src/airflow/providers/arangodb/version_compat.py b/providers/arangodb/src/airflow/providers/arangodb/version_compat.py
index 48d122b669696..b326387fea2a1 100644
--- a/providers/arangodb/src/airflow/providers/arangodb/version_compat.py
+++ b/providers/arangodb/src/airflow/providers/arangodb/version_compat.py
@@ -33,3 +33,15 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator, BaseSensorOperator
+else:
+    from airflow.models import BaseOperator
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+    "BaseSensorOperator",
+]
diff --git a/providers/asana/src/airflow/providers/asana/operators/asana_tasks.py b/providers/asana/src/airflow/providers/asana/operators/asana_tasks.py
index 04a44bed9cfb0..35e0999d91bf5 100644
--- a/providers/asana/src/airflow/providers/asana/operators/asana_tasks.py
+++ b/providers/asana/src/airflow/providers/asana/operators/asana_tasks.py
@@ -19,8 +19,8 @@
 
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.asana.hooks.asana import AsanaHook
+from airflow.providers.asana.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/asana/src/airflow/providers/asana/version_compat.py b/providers/asana/src/airflow/providers/asana/version_compat.py
new file mode 100644
index 0000000000000..78cd58dd016ab
--- /dev/null
+++ b/providers/asana/src/airflow/providers/asana/version_compat.py
@@ -0,0 +1,40 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+]

From 49c28e99dd7ded2e8a4d74876c72e264725bd343 Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Sat, 28 Jun 2025 17:01:48 +0530
Subject: [PATCH 255/381] Replace `models.BaseOperator` to Task SDK one for
 Atlassian (#52376)

Follow-up of https://github.com/apache/airflow/pull/52292
---
 .../atlassian/jira/operators/jira.py          |  4 ++--
 .../atlassian/jira/version_compat.py          | 12 +++++++++++
 .../atlassian/jira/operators/test_jira.py     | 20 ++++++++++---------
 3 files changed, 25 insertions(+), 11 deletions(-)

diff --git a/providers/atlassian/jira/src/airflow/providers/atlassian/jira/operators/jira.py b/providers/atlassian/jira/src/airflow/providers/atlassian/jira/operators/jira.py
index d1a2fe6f06a55..a9c11be54165d 100644
--- a/providers/atlassian/jira/src/airflow/providers/atlassian/jira/operators/jira.py
+++ b/providers/atlassian/jira/src/airflow/providers/atlassian/jira/operators/jira.py
@@ -20,8 +20,8 @@
 from collections.abc import Callable, Sequence
 from typing import TYPE_CHECKING, Any
 
-from airflow.models import BaseOperator
 from airflow.providers.atlassian.jira.hooks.jira import JiraHook
+from airflow.providers.atlassian.jira.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
@@ -80,7 +80,7 @@ def execute(self, context: Context) -> Any:
         jira_result: Any = getattr(resource, self.method_name)(**self.jira_method_args)
 
         output = jira_result.get("id", None) if isinstance(jira_result, dict) else None
-        self.xcom_push(context, key="id", value=output)
+        context["task_instance"].xcom_push(key="id", value=output)
 
         if self.result_processor:
             return self.result_processor(context, jira_result)
diff --git a/providers/atlassian/jira/src/airflow/providers/atlassian/jira/version_compat.py b/providers/atlassian/jira/src/airflow/providers/atlassian/jira/version_compat.py
index 48d122b669696..b326387fea2a1 100644
--- a/providers/atlassian/jira/src/airflow/providers/atlassian/jira/version_compat.py
+++ b/providers/atlassian/jira/src/airflow/providers/atlassian/jira/version_compat.py
@@ -33,3 +33,15 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator, BaseSensorOperator
+else:
+    from airflow.models import BaseOperator
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+    "BaseSensorOperator",
+]
diff --git a/providers/atlassian/jira/tests/unit/atlassian/jira/operators/test_jira.py b/providers/atlassian/jira/tests/unit/atlassian/jira/operators/test_jira.py
index 45f06fe46a3ae..473d32cf3f8a9 100644
--- a/providers/atlassian/jira/tests/unit/atlassian/jira/operators/test_jira.py
+++ b/providers/atlassian/jira/tests/unit/atlassian/jira/operators/test_jira.py
@@ -61,9 +61,11 @@ def setup_test_cases(self, monkeypatch):
                 )
             ),
         )
-        with mock.patch("airflow.models.baseoperator.BaseOperator.xcom_push", return_value=None) as m:
-            self.mocked_xcom_push = m
-            yield
+        # Mock task instance for xcom_push
+        mock_ti = mock.Mock()
+        mock_ti.xcom_push = mock.Mock(return_value=None)
+        self.mock_ti = mock_ti
+        self.mock_context = {"task_instance": mock_ti}
 
     def test_operator_init_with_optional_args(self):
         jira_operator = JiraOperator(task_id="jira_list_issue_types", jira_method="issue_types")
@@ -80,11 +82,11 @@ def test_project_issue_count(self, mocked_jira_client):
             jira_method_args={"project": "ABC"},
         )
 
-        op.execute({})
+        op.execute(self.mock_context)  # type: ignore[arg-type]
 
         assert mocked_jira_client.called
         assert mocked_jira_client.return_value.get_project_issues_count.called
-        self.mocked_xcom_push.assert_called_once_with(mock.ANY, key="id", value=None)
+        self.mock_ti.xcom_push.assert_called_once_with(key="id", value=None)
 
     def test_issue_search(self, mocked_jira_client):
         jql_str = "issuekey=TEST-1226"
@@ -95,11 +97,11 @@ def test_issue_search(self, mocked_jira_client):
             jira_method_args={"jql": jql_str, "limit": "1"},
         )
 
-        op.execute({})
+        op.execute(self.mock_context)  # type: ignore[arg-type]
 
         assert mocked_jira_client.called
         assert mocked_jira_client.return_value.jql_get_list_of_tickets.called
-        self.mocked_xcom_push.assert_called_once_with(mock.ANY, key="id", value="911539")
+        self.mock_ti.xcom_push.assert_called_once_with(key="id", value="911539")
 
     def test_update_issue(self, mocked_jira_client):
         mocked_jira_client.return_value.issue_add_comment.return_value = MINIMAL_TEST_TICKET
@@ -110,8 +112,8 @@ def test_update_issue(self, mocked_jira_client):
             jira_method_args={"issue_key": MINIMAL_TEST_TICKET.get("key"), "comment": "this is test comment"},
         )
 
-        op.execute({})
+        op.execute(self.mock_context)  # type: ignore[arg-type]
 
         assert mocked_jira_client.called
         assert mocked_jira_client.return_value.issue_add_comment.called
-        self.mocked_xcom_push.assert_called_once_with(mock.ANY, key="id", value="911539")
+        self.mock_ti.xcom_push.assert_called_once_with(key="id", value="911539")

From 6c5d879e0a360d922a38ce5248c6729721c0764e Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Sat, 28 Jun 2025 17:02:33 +0530
Subject: [PATCH 256/381] Replace `models.BaseOperator` to Task SDK one for
 Apache Pig (#52375)

Follow-up of https://github.com/apache/airflow/pull/52292
---
 .../unit/always/test_project_structure.py     |  1 +
 .../providers/apache/pig/operators/pig.py     |  2 +-
 .../providers/apache/pig/version_compat.py    | 45 +++++++++++++++++++
 3 files changed, 47 insertions(+), 1 deletion(-)
 create mode 100644 providers/apache/pig/src/airflow/providers/apache/pig/version_compat.py

diff --git a/airflow-core/tests/unit/always/test_project_structure.py b/airflow-core/tests/unit/always/test_project_structure.py
index 798cc54756bc6..14d63b8b2116b 100644
--- a/airflow-core/tests/unit/always/test_project_structure.py
+++ b/airflow-core/tests/unit/always/test_project_structure.py
@@ -94,6 +94,7 @@ def test_providers_modules_should_have_tests(self):
             "providers/apache/hive/tests/unit/apache/hive/test_version_compat.py",
             "providers/apache/hive/tests/unit/apache/hive/plugins/test_hive.py",
             "providers/apache/livy/tests/unit/apache/livy/test_version_compat.py",
+            "providers/apache/pig/tests/unit/apache/pig/test_version_compat.py",
             "providers/apache/spark/tests/unit/apache/spark/test_version_compat.py",
             "providers/arangodb/tests/unit/arangodb/test_version_compat.py",
             "providers/asana/tests/unit/asana/test_version_compat.py",
diff --git a/providers/apache/pig/src/airflow/providers/apache/pig/operators/pig.py b/providers/apache/pig/src/airflow/providers/apache/pig/operators/pig.py
index 30359cb9c231d..742e15acd742e 100644
--- a/providers/apache/pig/src/airflow/providers/apache/pig/operators/pig.py
+++ b/providers/apache/pig/src/airflow/providers/apache/pig/operators/pig.py
@@ -21,8 +21,8 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING, Any
 
-from airflow.models import BaseOperator
 from airflow.providers.apache.pig.hooks.pig import PigCliHook
+from airflow.providers.apache.pig.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/apache/pig/src/airflow/providers/apache/pig/version_compat.py b/providers/apache/pig/src/airflow/providers/apache/pig/version_compat.py
new file mode 100644
index 0000000000000..e7a259afb357c
--- /dev/null
+++ b/providers/apache/pig/src/airflow/providers/apache/pig/version_compat.py
@@ -0,0 +1,45 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+]

From f9c5d085c445078403279de6e34deac86437d736 Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Sat, 28 Jun 2025 18:37:46 +0530
Subject: [PATCH 257/381] Replace `models.BaseOperator` to Task SDK one for DBT
 & Databricks (#52377)

---
 .../providers/databricks/operators/databricks.py |  3 +--
 .../databricks/operators/databricks_repos.py     |  2 +-
 .../databricks/operators/databricks_sql.py       |  2 +-
 .../databricks/operators/databricks_workflow.py  |  3 +--
 .../providers/databricks/version_compat.py       | 10 ++++++++++
 .../airflow/providers/dbt/cloud/operators/dbt.py | 14 +++++---------
 .../providers/dbt/cloud/version_compat.py        | 16 ++++++++++++++++
 7 files changed, 35 insertions(+), 15 deletions(-)

diff --git a/providers/databricks/src/airflow/providers/databricks/operators/databricks.py b/providers/databricks/src/airflow/providers/databricks/operators/databricks.py
index 95d5783de0a92..e341daaa8a096 100644
--- a/providers/databricks/src/airflow/providers/databricks/operators/databricks.py
+++ b/providers/databricks/src/airflow/providers/databricks/operators/databricks.py
@@ -29,7 +29,6 @@
 
 from airflow.configuration import conf
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.databricks.hooks.databricks import (
     DatabricksHook,
     RunLifeCycleState,
@@ -49,7 +48,7 @@
 )
 from airflow.providers.databricks.utils.databricks import normalise_json_content, validate_trigger_event
 from airflow.providers.databricks.utils.mixins import DatabricksSQLStatementsMixin
-from airflow.providers.databricks.version_compat import AIRFLOW_V_3_0_PLUS
+from airflow.providers.databricks.version_compat import AIRFLOW_V_3_0_PLUS, BaseOperator
 
 if TYPE_CHECKING:
     from airflow.models.taskinstancekey import TaskInstanceKey
diff --git a/providers/databricks/src/airflow/providers/databricks/operators/databricks_repos.py b/providers/databricks/src/airflow/providers/databricks/operators/databricks_repos.py
index 75e6f9f8f9f6e..2d5f6db840480 100644
--- a/providers/databricks/src/airflow/providers/databricks/operators/databricks_repos.py
+++ b/providers/databricks/src/airflow/providers/databricks/operators/databricks_repos.py
@@ -26,8 +26,8 @@
 from urllib.parse import urlsplit
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.databricks.hooks.databricks import DatabricksHook
+from airflow.providers.databricks.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/databricks/src/airflow/providers/databricks/operators/databricks_sql.py b/providers/databricks/src/airflow/providers/databricks/operators/databricks_sql.py
index 5e0f9cc7d244c..5d9b08a662652 100644
--- a/providers/databricks/src/airflow/providers/databricks/operators/databricks_sql.py
+++ b/providers/databricks/src/airflow/providers/databricks/operators/databricks_sql.py
@@ -28,9 +28,9 @@
 from databricks.sql.utils import ParamEscaper
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.common.sql.operators.sql import SQLExecuteQueryOperator
 from airflow.providers.databricks.hooks.databricks_sql import DatabricksSqlHook
+from airflow.providers.databricks.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/databricks/src/airflow/providers/databricks/operators/databricks_workflow.py b/providers/databricks/src/airflow/providers/databricks/operators/databricks_workflow.py
index 9f714fa06d95c..210004944028c 100644
--- a/providers/databricks/src/airflow/providers/databricks/operators/databricks_workflow.py
+++ b/providers/databricks/src/airflow/providers/databricks/operators/databricks_workflow.py
@@ -26,14 +26,13 @@
 from mergedeep import merge
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.databricks.hooks.databricks import DatabricksHook, RunLifeCycleState
 from airflow.providers.databricks.plugins.databricks_workflow import (
     WorkflowJobRepairAllFailedLink,
     WorkflowJobRunLink,
     store_databricks_job_run_link,
 )
-from airflow.providers.databricks.version_compat import AIRFLOW_V_3_0_PLUS
+from airflow.providers.databricks.version_compat import AIRFLOW_V_3_0_PLUS, BaseOperator
 from airflow.utils.task_group import TaskGroup
 
 if TYPE_CHECKING:
diff --git a/providers/databricks/src/airflow/providers/databricks/version_compat.py b/providers/databricks/src/airflow/providers/databricks/version_compat.py
index 48d122b669696..e7a259afb357c 100644
--- a/providers/databricks/src/airflow/providers/databricks/version_compat.py
+++ b/providers/databricks/src/airflow/providers/databricks/version_compat.py
@@ -33,3 +33,13 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+]
diff --git a/providers/dbt/cloud/src/airflow/providers/dbt/cloud/operators/dbt.py b/providers/dbt/cloud/src/airflow/providers/dbt/cloud/operators/dbt.py
index 1a77ad1d0ca90..882cd9073c015 100644
--- a/providers/dbt/cloud/src/airflow/providers/dbt/cloud/operators/dbt.py
+++ b/providers/dbt/cloud/src/airflow/providers/dbt/cloud/operators/dbt.py
@@ -24,8 +24,6 @@
 from typing import TYPE_CHECKING, Any
 
 from airflow.configuration import conf
-from airflow.models import BaseOperator
-from airflow.providers.common.compat.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.providers.dbt.cloud.hooks.dbt import (
     DbtCloudHook,
     DbtCloudJobRunException,
@@ -34,18 +32,16 @@
 )
 from airflow.providers.dbt.cloud.triggers.dbt import DbtCloudRunJobTrigger
 from airflow.providers.dbt.cloud.utils.openlineage import generate_openlineage_events_from_dbt_cloud_run
+from airflow.providers.dbt.cloud.version_compat import (
+    BaseOperator,
+    BaseOperatorLink,
+    XCom,
+)
 
 if TYPE_CHECKING:
     from airflow.providers.openlineage.extractors import OperatorLineage
     from airflow.utils.context import Context
 
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseOperatorLink
-    from airflow.sdk.execution_time.xcom import XCom
-else:
-    from airflow.models import XCom  # type: ignore[no-redef]
-    from airflow.models.baseoperatorlink import BaseOperatorLink  # type: ignore[no-redef]
-
 
 class DbtCloudRunJobOperatorLink(BaseOperatorLink):
     """Allows users to monitor the triggered job run directly in dbt Cloud."""
diff --git a/providers/dbt/cloud/src/airflow/providers/dbt/cloud/version_compat.py b/providers/dbt/cloud/src/airflow/providers/dbt/cloud/version_compat.py
index 48d122b669696..940fa8385a5a2 100644
--- a/providers/dbt/cloud/src/airflow/providers/dbt/cloud/version_compat.py
+++ b/providers/dbt/cloud/src/airflow/providers/dbt/cloud/version_compat.py
@@ -33,3 +33,19 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator, BaseOperatorLink, BaseSensorOperator
+    from airflow.sdk.execution_time.xcom import XCom
+else:
+    from airflow.models import BaseOperator, XCom
+    from airflow.models.baseoperatorlink import BaseOperatorLink  # type: ignore[no-redef]
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+    "BaseSensorOperator",
+    "BaseOperatorLink",
+    "XCom",
+]

From 51b53cccb3ba48fb6678e8b18b5fb73c0ff061cc Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Sat, 28 Jun 2025 14:31:57 +0100
Subject: [PATCH 258/381] Reduce timeout for task-sdk/airflow-ctl tests job
 workflow (#52399)

* Add timeout for distribution tests job

* Add timeout for distribution tests job
---
 .github/workflows/airflow-distributions-tests.yml | 7 ++++++-
 .github/workflows/ci-amd.yml                      | 2 ++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/airflow-distributions-tests.yml b/.github/workflows/airflow-distributions-tests.yml
index ffcd9e3183005..62d4ee1f6b420 100644
--- a/.github/workflows/airflow-distributions-tests.yml
+++ b/.github/workflows/airflow-distributions-tests.yml
@@ -61,11 +61,16 @@ on:  # yamllint disable-line rule:truthy
         description: "Whether local venv should be used for tests (true/false)"
         required: true
         type: string
+      test-timeout:
+        required: false
+        type: number
+        default: 60
+
 permissions:
   contents: read
 jobs:
   distributions-tests:
-    timeout-minutes: 80
+    timeout-minutes: ${{ fromJSON(inputs.test-timeout) }}
     name: ${{ inputs.distribution-name }}:P${{ matrix.python-version }} tests
     runs-on: ${{ fromJSON(inputs.runners) }}
     strategy:
diff --git a/.github/workflows/ci-amd.yml b/.github/workflows/ci-amd.yml
index e9cea64578e12..084cb63779c40 100644
--- a/.github/workflows/ci-amd.yml
+++ b/.github/workflows/ci-amd.yml
@@ -784,6 +784,7 @@ jobs:
       distribution-cmd-format: "prepare-task-sdk-distributions"
       test-type: "task-sdk-tests"
       use-local-venv: 'false'
+      test-timeout: 20
     if: >
       ( needs.build-info.outputs.run-task-sdk-tests == 'true' ||
       needs.build-info.outputs.run-tests == 'true' &&
@@ -844,6 +845,7 @@ jobs:
       distribution-cmd-format: "prepare-airflow-ctl-distributions"
       test-type: "airflow-ctl-tests"
       use-local-venv: 'true'
+      test-timeout: 20
     if: >
       ( needs.build-info.outputs.run-airflow-ctl-tests == 'true' ||
       needs.build-info.outputs.run-tests == 'true' &&

From 8599a9eee938e92e3046fcb20d51d8aeeebbafb3 Mon Sep 17 00:00:00 2001
From: Kyungjun Lee <kyungjunlee.me@gmail.com>
Date: Sat, 28 Jun 2025 22:46:40 +0900
Subject: [PATCH 259/381] Provider Migration: Update trino for Airflow 3.0
 compatibility  (#52383)

* ADD: impport for BaseOperator in version_compat.py

* CHG: import change
---
 .../airflow/providers/trino/transfers/gcs_to_trino.py  |  2 +-
 .../src/airflow/providers/trino/version_compat.py      | 10 ++++++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/providers/trino/src/airflow/providers/trino/transfers/gcs_to_trino.py b/providers/trino/src/airflow/providers/trino/transfers/gcs_to_trino.py
index 65e8b2d6d9e59..ffa09b4268b4d 100644
--- a/providers/trino/src/airflow/providers/trino/transfers/gcs_to_trino.py
+++ b/providers/trino/src/airflow/providers/trino/transfers/gcs_to_trino.py
@@ -25,9 +25,9 @@
 from tempfile import NamedTemporaryFile
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
 from airflow.providers.trino.hooks.trino import TrinoHook
+from airflow.providers.trino.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/trino/src/airflow/providers/trino/version_compat.py b/providers/trino/src/airflow/providers/trino/version_compat.py
index 48d122b669696..e7a259afb357c 100644
--- a/providers/trino/src/airflow/providers/trino/version_compat.py
+++ b/providers/trino/src/airflow/providers/trino/version_compat.py
@@ -33,3 +33,13 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+]

From 26d0adf432a030344b21999c9a8e51cb9c610100 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sat, 28 Jun 2025 15:56:41 +0200
Subject: [PATCH 260/381] Add missing Polish Translations including proper
 plural forms (#52395)

Update airflow-core/src/airflow/ui/public/i18n/locales/pl/components.json

Co-authored-by: Kacper Muda <mudakacper@gmail.com>
---
 .../ui/public/i18n/locales/pl/admin.json      | 16 +++++++++
 .../ui/public/i18n/locales/pl/common.json     | 33 ++++++++++++++++++-
 .../ui/public/i18n/locales/pl/components.json | 18 +++++++++-
 .../ui/public/i18n/locales/pl/dag.json        | 10 ++++++
 .../ui/public/i18n/locales/pl/dashboard.json  |  2 ++
 5 files changed, 77 insertions(+), 2 deletions(-)

diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/pl/admin.json b/airflow-core/src/airflow/ui/public/i18n/locales/pl/admin.json
index 9bf2504ec9f41..009d178b16202 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/pl/admin.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pl/admin.json
@@ -19,11 +19,17 @@
       "host": "Host",
       "port": "Port"
     },
+    "connection_few": "Połączenia",
+    "connection_many": "Połączeń",
     "connection_one": "Połączenie",
     "connection_other": "Połączenia",
     "delete": {
+      "deleteConnection_few": "Usuń {{count}} połączenia",
+      "deleteConnection_many": "Usuń {{count}} połączeń",
       "deleteConnection_one": "Usuń 1 połączenie",
       "deleteConnection_other": "Usuń {{count}} połączenia",
+      "firstConfirmMessage_few": "Zamierzasz usunąć następujące połączenia:",
+      "firstConfirmMessage_many": "Zamierzasz usunąć następujące połączenia:",
       "firstConfirmMessage_one": "Zamierzasz usunąć następujące połączenie:",
       "firstConfirmMessage_other": "Zamierzasz usunąć następujące połączenia:",
       "title": "Usuń połączenie"
@@ -78,6 +84,8 @@
     "columns": {
       "source": "Źródło"
     },
+    "importError_few": "Błędy importu wtyczek",
+    "importError_many": "Błędów importu wtyczek",
     "importError_one": "Błąd importu wtyczki",
     "importError_other": "Błędy importu wtyczek",
     "searchPlaceholder": "Szukaj po pliku"
@@ -99,6 +107,8 @@
       "slots": "Miejsca"
     },
     "noPoolsFound": "Nie znaleziono pul",
+    "pool_few": "Pule",
+    "pool_many": "Puli",
     "pool_one": "Pula",
     "pool_other": "Pule",
     "searchPlaceholder": "Szukaj pul",
@@ -120,8 +130,12 @@
       "isEncrypted": "Zaszyfrowana"
     },
     "delete": {
+      "deleteVariable_few": "Usuń {{count}} zmienne",
+      "deleteVariable_many": "Usuń {{count}} zmiennych",
       "deleteVariable_one": "Usuń 1 zmienną",
       "deleteVariable_other": "Usuń {{count}} zmienne",
+      "firstConfirmMessage_few": "Zamierzasz usunąć następujące zmienne:",
+      "firstConfirmMessage_many": "Zamierzasz usunąć następujące zmienne:",
       "firstConfirmMessage_one": "Zamierzasz usunąć następującą zmienną:",
       "firstConfirmMessage_other": "Zamierzasz usunąć następujące zmienne:",
       "title": "Usuń zmienną",
@@ -160,6 +174,8 @@
     },
     "noRowsMessage": "Nie znaleziono zmiennych",
     "searchPlaceholder": "Szukaj kluczy",
+    "variable_few": "Zmienne",
+    "variable_many": "Zmiennych",
     "variable_one": "Zmienna",
     "variable_other": "Zmienne"
   }
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/pl/common.json b/airflow-core/src/airflow/ui/public/i18n/locales/pl/common.json
index 46eaf9e09b955..103192006f10d 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/pl/common.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pl/common.json
@@ -7,18 +7,29 @@
     "Providers": "Providery",
     "Variables": "Zmienne"
   },
+  "asset_few": "Zasoby",
+  "asset_many": "Zasobów",
   "asset_one": "Zasób",
   "asset_other": "Zasoby",
+  "assetEvent_few": "Zdarzenia zasobów",
+  "assetEvent_many": "Zdarzeń zasobów",
   "assetEvent_one": "Zdarzenie Zasobu",
   "assetEvent_other": "Zdarzenia Zasobów",
+  "backfill_few": "Wypełnienia wsteczne",
+  "backfill_many": "Wypełnień wstecznych",
   "backfill_one": "Wypełnienie wsteczne",
   "backfill_other": "Wypełnienia wsteczne",
   "browse": {
     "auditLog": "Log audytu",
     "xcoms": "XComy"
   },
+  "collapseDetailsPanel": "Zwiń panel szczegółów",
+  "createdAssetEvent_few": "Utworzone zdarzenia zasobów",
+  "createdAssetEvent_many": "Utworzonych zdarzeń zasobów",
   "createdAssetEvent_one": "Utworzone zdarzenie zasobu",
   "createdAssetEvent_other": "Utworzone zdarzenia zasobów",
+  "dag_few": "Dagi",
+  "dag_many": "Dagów",
   "dag_one": "Dag",
   "dag_other": "Dagi",
   "dagDetails": {
@@ -56,6 +67,8 @@
     "sourceAssetEvent": "Zdarzenie źródłowego zasobu",
     "triggeredBy": "Uruchomiony przez"
   },
+  "dagRun_few": "Wykonania Dagów",
+  "dagRun_many": "Wykonań Dagów",
   "dagRun_one": "Wykonanie Daga",
   "dagRun_other": "Wykonania Dagów",
   "dagWarnings": "Ostrzeżenia/Błędy Daga",
@@ -63,7 +76,7 @@
   "defaultToGridView": "Domyślnie widok siatki",
   "direction": "Kierunek",
   "docs": {
-    "documentation": "Documentacja",
+    "documentation": "Dokumentacja",
     "githubRepo": "Repozytorium GitHub",
     "restApiReference": "Dokuentacja REST API"
   },
@@ -115,6 +128,8 @@
   "pools": {
     "deferred": "Odłożone",
     "open": "Otwarte",
+    "pools_few": "Pule",
+    "pools_many": "Puli",
     "pools_one": "Pula",
     "pools_other": "Pule",
     "queued": "W kolejce",
@@ -128,6 +143,13 @@
     "manual": "Ręcznie",
     "scheduled": "Według harmonogramu"
   },
+  "scroll": {
+    "direction": {
+      "bottom": "dół",
+      "top": "góra"
+    },
+    "tooltip": "Naciśnij {{hotkey}}, aby przewinąć do {{direction}}"
+  },
   "seconds": "{{count}}s",
   "security": {
     "actions": "Akcje",
@@ -137,6 +159,9 @@
     "users": "Użytkownicy"
   },
   "selectLanguage": "Wybierz język",
+  "showDetailsPanel": "Pokaż panel szczegółów",
+  "sourceAssetEvent_few": "Zdarzenia źródłowych zasobów",
+  "sourceAssetEvent_many": "Zdarzeń źródłowych zasobów",
   "sourceAssetEvent_one": "Zdarzenie źródłowego zasobu",
   "sourceAssetEvent_other": "Zdarzenia źródłowych zasobów",
   "startDate": "Data rozpoczęcia",
@@ -164,6 +189,8 @@
     "createdAt": "Utworzono o",
     "filterByTag": "Filtruj Dagi według tagu",
     "filterColumns": "Filtruj kolumny tabeli",
+    "filterReset_few": "Resetuj filtry",
+    "filterReset_many": "Resetuj filtry",
     "filterReset_one": "Resetuj filtr",
     "filterReset_other": "Resetuj filtry",
     "from": "Od",
@@ -182,6 +209,8 @@
     "operator": "Operator",
     "triggerRule": "Reguła zależności"
   },
+  "task_few": "Zadania",
+  "task_many": "Zadań",
   "task_one": "Zadanie",
   "task_other": "Zadania",
   "taskId": "Identifikator Zadania",
@@ -208,6 +237,8 @@
     },
     "unixname": "Nazwa użytkownika systemu Unix"
   },
+  "taskInstance_few": "Instancje Zadań",
+  "taskInstance_many": "Instancji Zadań",
   "taskInstance_one": "Instancja Zadania",
   "taskInstance_other": "Instancje Zadań",
   "timeRange": {
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/pl/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/pl/components.json
index 533960245ab0e..dc412a3d19121 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/pl/components.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pl/components.json
@@ -1,5 +1,7 @@
 {
   "backfill": {
+    "affected_few": "{{count}} wykonania zostaną uruchomione.",
+    "affected_many": "{{count}} wykonań zostanie uruchomionych.",
     "affected_one": "Dotyczy 1 wykonania.",
     "affected_other": "Dotyczy {{count}} wykonań.",
     "affectedNone": "Brak wykonań spełniających wybrane kryteria.",
@@ -43,15 +45,24 @@
     "invalidJson": "Nieprawidłowy format JSON: {{errorMessage}}"
   },
   "dagWarnings": {
-    "error_one": "1 Błąd",
+    "error_few": "Błędy",
+    "error_many": "Błędów",
+    "error_one": "Błąd",
+    "error_other": "Błedy",
     "errorAndWarning": "1 Błąd i {{warningText}}",
+    "warning_few": "{{count}} Ostrzeżenia",
+    "warning_many": "{{count}} Ostrzeżeń",
     "warning_one": "1 Ostrzeżenie",
     "warning_other": "{{count}} Ostrzeżenia"
   },
   "durationChart": {
     "duration": "Czas trwania (sekundy)",
+    "lastDagRun_few": "Ostatnie {{count}} wykonania Daga",
+    "lastDagRun_many": "Ostatnich {{count}} wykonań Daga",
     "lastDagRun_one": "Ostatnie wykonanie Daga",
     "lastDagRun_other": "Ostatnie {{count}} wykonania Daga",
+    "lastTaskInstance_few": "Ostatnie {{count}} instancje zadania",
+    "lastTaskInstance_many": "Ostatnich {{count}} instancji zadania",
     "lastTaskInstance_one": "Ostatnia instancja zadania",
     "lastTaskInstance_other": "Ostatnie {{count}} instancje zadania",
     "queuedDuration": "Czas oczekiwania",
@@ -59,6 +70,9 @@
     "runDuration": "Czas trwania wykonania"
   },
   "fileUpload": {
+    "files_few": "{{count}} pliki",
+    "files_many": "{{count}} plików",
+    "files_one": "{{count}} plik",
     "files_other": "{{count}} plików"
   },
   "flexibleForm": {
@@ -80,6 +94,8 @@
     "downloadImageError": "Nie udało się pobrać obrazu grafu.",
     "downloadImageErrorTitle": "Pobieranie nieudane",
     "otherDagRuns": "+Inne wykonania Daga",
+    "taskCount_few": "{{count}} Zadania",
+    "taskCount_many": "{{count}} Zadań",
     "taskCount_one": "{{count}} Zadanie",
     "taskCount_other": "{{count}} Zadań",
     "taskGroup": "Grupa zadań"
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/pl/dag.json b/airflow-core/src/airflow/ui/public/i18n/locales/pl/dag.json
index fde6f90fd8824..8e271d983561b 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/pl/dag.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pl/dag.json
@@ -28,14 +28,22 @@
   },
   "overview": {
     "buttons": {
+      "failedRun_few": "Nieudane wykonania",
+      "failedRun_many": "Nieudanych wykonań",
       "failedRun_one": "Nieudane wykonanie",
       "failedRun_other": "Nieudane wykonania",
+      "failedTask_few": "Nieudane zadania",
+      "failedTask_many": "Nieudanych zadań",
       "failedTask_one": "Nieudane zadanie",
       "failedTask_other": "Nieudane zadania",
+      "failedTaskInstance_few": "Nieudane instancje zadań",
+      "failedTaskInstance_many": "Nieudanych instancji zadań",
       "failedTaskInstance_one": "Nieudana instancja zadania",
       "failedTaskInstance_other": "Nieudane instancje zadań"
     },
     "charts": {
+      "assetEvent_few": "Utworzone zdarzenia zasobów",
+      "assetEvent_many": "Utworzonych zdarzeń zasobów",
       "assetEvent_one": "Utworzone zdarzenie zasobu",
       "assetEvent_other": "Utworzone zdarzenia zasobów"
     },
@@ -86,6 +94,8 @@
     "code": "Kod",
     "details": "Szczegóły",
     "logs": "Logi",
+    "mappedTaskInstances_few": "Instancje zadań [{{count}}]",
+    "mappedTaskInstances_many": "Instancji zadań [{{count}}]",
     "mappedTaskInstances_one": "Instancja zadania [{{count}}]",
     "mappedTaskInstances_other": "Instancje zadań [{{count}}]",
     "overview": "Przegląd",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/pl/dashboard.json b/airflow-core/src/airflow/ui/public/i18n/locales/pl/dashboard.json
index 1291b73f193a5..72c58e1db72f8 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/pl/dashboard.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pl/dashboard.json
@@ -13,6 +13,8 @@
   },
   "history": "Historia",
   "importErrors": {
+    "dagImportError_few": "Błędy importu Dagów",
+    "dagImportError_many": "Błędów importu Dagów",
     "dagImportError_one": "Błąd importu Daga",
     "dagImportError_other": "Błędy importu Dagów",
     "searchByFile": "Szukaj według plików",

From ace332d99c6952f60166acb823fce96bb5bf0259 Mon Sep 17 00:00:00 2001
From: Kyungjun Lee <kyungjunlee.me@gmail.com>
Date: Sat, 28 Jun 2025 23:05:22 +0900
Subject: [PATCH 261/381] enhance error message for `breeze --backend none` to
 suggest setting a valid backend (#52318)

* CHG: option_backend in breeze

* CHG: when backend=none modify message in breeze

* CHG: Apply common_option change for backend validation (pre-commit)

* CHG: update sentence

Co-authored-by: Amogh Desai <amoghrajesh1999@gmail.com>

* CHG: Supported values msg and delete mssql

* CHG: fix(breeze): exit with error if START_AIRFLOW=true and --backend=none

* DEL: . in sentence

* CHG: reflect pre-commit output

* Update scripts/in_container/check_environment.sh

---------

Co-authored-by: Amogh Desai <amoghrajesh1999@gmail.com>
Co-authored-by: Jarek Potiuk <jarek@potiuk.com>
---
 dev/breeze/doc/images/output-commands.svg     | 128 ++++-----
 dev/breeze/doc/images/output_run.svg          |   6 +-
 dev/breeze/doc/images/output_run.txt          |   2 +-
 dev/breeze/doc/images/output_setup_config.svg |  38 +--
 dev/breeze/doc/images/output_setup_config.txt |   2 +-
 dev/breeze/doc/images/output_shell.svg        | 258 +++++++++---------
 dev/breeze/doc/images/output_shell.txt        |   2 +-
 .../doc/images/output_start-airflow.svg       | 212 +++++++-------
 .../doc/images/output_start-airflow.txt       |   2 +-
 .../output_testing_core-integration-tests.svg |   8 +-
 .../output_testing_core-integration-tests.txt |   2 +-
 .../doc/images/output_testing_core-tests.svg  |   8 +-
 .../doc/images/output_testing_core-tests.txt  |   2 +-
 ...ut_testing_providers-integration-tests.svg |   8 +-
 ...ut_testing_providers-integration-tests.txt |   2 +-
 .../images/output_testing_providers-tests.svg |   8 +-
 .../images/output_testing_providers-tests.txt |   2 +-
 ...output_testing_python-api-client-tests.svg |   8 +-
 ...output_testing_python-api-client-tests.txt |   2 +-
 .../images/output_testing_system-tests.svg    |   8 +-
 .../images/output_testing_system-tests.txt    |   2 +-
 .../airflow_breeze/commands/common_options.py |   7 +-
 scripts/in_container/check_environment.sh     |  12 +-
 23 files changed, 376 insertions(+), 353 deletions(-)

diff --git a/dev/breeze/doc/images/output-commands.svg b/dev/breeze/doc/images/output-commands.svg
index f3b92217dc0bd..1ba42bc55607f 100644
--- a/dev/breeze/doc/images/output-commands.svg
+++ b/dev/breeze/doc/images/output-commands.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 2197.2" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 2221.6" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-help-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="2146.2" />
+      <rect x="0" y="0" width="1463.0" height="2170.6" />
     </clipPath>
     <clipPath id="breeze-help-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -306,9 +306,12 @@
 <clipPath id="breeze-help-line-86">
     <rect x="0" y="2099.9" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-help-line-87">
+    <rect x="0" y="2124.3" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2195.2" rx="8"/><text class="breeze-help-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Breeze&#160;commands</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2219.6" rx="8"/><text class="breeze-help-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Breeze&#160;commands</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -347,65 +350,66 @@
 </text><text class="breeze-help-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-help-line-26)">│</text><text class="breeze-help-r7" x="244" y="654.4" textLength="1195.6" clip-path="url(#breeze-help-line-26)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-help-line-26)">│</text><text class="breeze-help-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-help-line-26)">
 </text><text class="breeze-help-r5" x="0" y="678.8" textLength="1464" clip-path="url(#breeze-help-line-27)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-help-line-27)">
 </text><text class="breeze-help-r5" x="0" y="703.2" textLength="24.4" clip-path="url(#breeze-help-line-28)">╭─</text><text class="breeze-help-r5" x="24.4" y="703.2" textLength="122" clip-path="url(#breeze-help-line-28)">&#160;Database&#160;</text><text class="breeze-help-r5" x="146.4" y="703.2" textLength="1293.2" clip-path="url(#breeze-help-line-28)">──────────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="703.2" textLength="24.4" clip-path="url(#breeze-help-line-28)">─╮</text><text class="breeze-help-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-help-line-28)">
-</text><text class="breeze-help-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-help-line-29)">│</text><text class="breeze-help-r4" x="24.4" y="727.6" textLength="109.8" clip-path="url(#breeze-help-line-29)">--backend</text><text class="breeze-help-r6" x="268.4" y="727.6" textLength="24.4" clip-path="url(#breeze-help-line-29)">-b</text><text class="breeze-help-r1" x="488" y="727.6" textLength="951.6" clip-path="url(#breeze-help-line-29)">Database&#160;backend&#160;to&#160;use.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;Breeze&#160;will&#160;start&#160;with&#160;an&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-help-line-29)">│</text><text class="breeze-help-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-help-line-29)">
-</text><text class="breeze-help-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-help-line-30)">│</text><text class="breeze-help-r1" x="488" y="752" textLength="951.6" clip-path="url(#breeze-help-line-30)">invalid&#160;database&#160;configuration,&#160;meaning&#160;there&#160;will&#160;be&#160;no&#160;database&#160;available,&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-help-line-30)">│</text><text class="breeze-help-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-help-line-30)">
-</text><text class="breeze-help-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-help-line-31)">│</text><text class="breeze-help-r1" x="488" y="776.4" textLength="951.6" clip-path="url(#breeze-help-line-31)">and&#160;any&#160;attempts&#160;to&#160;connect&#160;to&#160;the&#160;Airflow&#160;database&#160;will&#160;fail.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-help-line-31)">│</text><text class="breeze-help-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-help-line-31)">
-</text><text class="breeze-help-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-help-line-32)">│</text><text class="breeze-help-r7" x="488" y="800.8" textLength="951.6" clip-path="url(#breeze-help-line-32)">(&gt;sqlite&lt;&#160;|&#160;mysql&#160;|&#160;postgres&#160;|&#160;none)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-help-line-32)">│</text><text class="breeze-help-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-help-line-32)">
-</text><text class="breeze-help-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-help-line-33)">│</text><text class="breeze-help-r5" x="488" y="825.2" textLength="951.6" clip-path="url(#breeze-help-line-33)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-help-line-33)">│</text><text class="breeze-help-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-help-line-33)">
-</text><text class="breeze-help-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-help-line-34)">│</text><text class="breeze-help-r4" x="24.4" y="849.6" textLength="219.6" clip-path="url(#breeze-help-line-34)">--postgres-version</text><text class="breeze-help-r6" x="268.4" y="849.6" textLength="24.4" clip-path="url(#breeze-help-line-34)">-P</text><text class="breeze-help-r1" x="488" y="849.6" textLength="305" clip-path="url(#breeze-help-line-34)">Version&#160;of&#160;Postgres&#160;used.</text><text class="breeze-help-r7" x="805.2" y="849.6" textLength="317.2" clip-path="url(#breeze-help-line-34)">(&gt;13&lt;&#160;|&#160;14&#160;|&#160;15&#160;|&#160;16&#160;|&#160;17)</text><text class="breeze-help-r5" x="1134.6" y="849.6" textLength="158.6" clip-path="url(#breeze-help-line-34)">[default:&#160;13]</text><text class="breeze-help-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-help-line-34)">│</text><text class="breeze-help-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-help-line-34)">
-</text><text class="breeze-help-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-help-line-35)">│</text><text class="breeze-help-r4" x="24.4" y="874" textLength="183" clip-path="url(#breeze-help-line-35)">--mysql-version</text><text class="breeze-help-r6" x="268.4" y="874" textLength="24.4" clip-path="url(#breeze-help-line-35)">-M</text><text class="breeze-help-r1" x="488" y="874" textLength="268.4" clip-path="url(#breeze-help-line-35)">Version&#160;of&#160;MySQL&#160;used.</text><text class="breeze-help-r7" x="768.6" y="874" textLength="158.6" clip-path="url(#breeze-help-line-35)">(&gt;8.0&lt;&#160;|&#160;8.4)</text><text class="breeze-help-r5" x="939.4" y="874" textLength="170.8" clip-path="url(#breeze-help-line-35)">[default:&#160;8.0]</text><text class="breeze-help-r5" x="1451.8" y="874" textLength="12.2" clip-path="url(#breeze-help-line-35)">│</text><text class="breeze-help-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-help-line-35)">
-</text><text class="breeze-help-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-help-line-36)">│</text><text class="breeze-help-r4" x="24.4" y="898.4" textLength="122" clip-path="url(#breeze-help-line-36)">--db-reset</text><text class="breeze-help-r6" x="268.4" y="898.4" textLength="24.4" clip-path="url(#breeze-help-line-36)">-d</text><text class="breeze-help-r1" x="292.8" y="898.4" textLength="12.2" clip-path="url(#breeze-help-line-36)">/</text><text class="breeze-help-r4" x="305" y="898.4" textLength="158.6" clip-path="url(#breeze-help-line-36)">--no-db-reset</text><text class="breeze-help-r1" x="488" y="898.4" textLength="451.4" clip-path="url(#breeze-help-line-36)">Reset&#160;DB&#160;when&#160;entering&#160;the&#160;container.</text><text class="breeze-help-r5" x="951.6" y="898.4" textLength="268.4" clip-path="url(#breeze-help-line-36)">[default:&#160;no-db-reset]</text><text class="breeze-help-r5" x="1451.8" y="898.4" textLength="12.2" clip-path="url(#breeze-help-line-36)">│</text><text class="breeze-help-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-help-line-36)">
-</text><text class="breeze-help-r5" x="0" y="922.8" textLength="1464" clip-path="url(#breeze-help-line-37)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-help-line-37)">
-</text><text class="breeze-help-r5" x="0" y="947.2" textLength="24.4" clip-path="url(#breeze-help-line-38)">╭─</text><text class="breeze-help-r5" x="24.4" y="947.2" textLength="488" clip-path="url(#breeze-help-line-38)">&#160;Build&#160;CI&#160;image&#160;(before&#160;entering&#160;shell)&#160;</text><text class="breeze-help-r5" x="512.4" y="947.2" textLength="927.2" clip-path="url(#breeze-help-line-38)">────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="947.2" textLength="24.4" clip-path="url(#breeze-help-line-38)">─╮</text><text class="breeze-help-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-help-line-38)">
-</text><text class="breeze-help-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-help-line-39)">│</text><text class="breeze-help-r4" x="24.4" y="971.6" textLength="231.8" clip-path="url(#breeze-help-line-39)">--github-repository</text><text class="breeze-help-r6" x="292.8" y="971.6" textLength="24.4" clip-path="url(#breeze-help-line-39)">-g</text><text class="breeze-help-r1" x="341.6" y="971.6" textLength="585.6" clip-path="url(#breeze-help-line-39)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-help-r7" x="939.4" y="971.6" textLength="73.2" clip-path="url(#breeze-help-line-39)">(TEXT)</text><text class="breeze-help-r5" x="1024.8" y="971.6" textLength="305" clip-path="url(#breeze-help-line-39)">[default:&#160;apache/airflow]</text><text class="breeze-help-r5" x="1451.8" y="971.6" textLength="12.2" clip-path="url(#breeze-help-line-39)">│</text><text class="breeze-help-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-help-line-39)">
-</text><text class="breeze-help-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-help-line-40)">│</text><text class="breeze-help-r4" x="24.4" y="996" textLength="109.8" clip-path="url(#breeze-help-line-40)">--builder</text><text class="breeze-help-r1" x="341.6" y="996" textLength="756.4" clip-path="url(#breeze-help-line-40)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build`&#160;commands.</text><text class="breeze-help-r7" x="1110.2" y="996" textLength="73.2" clip-path="url(#breeze-help-line-40)">(TEXT)</text><text class="breeze-help-r5" x="1451.8" y="996" textLength="12.2" clip-path="url(#breeze-help-line-40)">│</text><text class="breeze-help-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-help-line-40)">
-</text><text class="breeze-help-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-help-line-41)">│</text><text class="breeze-help-r5" x="341.6" y="1020.4" textLength="756.4" clip-path="url(#breeze-help-line-41)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-help-line-41)">│</text><text class="breeze-help-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-help-line-41)">
-</text><text class="breeze-help-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-help-line-42)">│</text><text class="breeze-help-r4" x="24.4" y="1044.8" textLength="97.6" clip-path="url(#breeze-help-line-42)">--use-uv</text><text class="breeze-help-r1" x="122" y="1044.8" textLength="12.2" clip-path="url(#breeze-help-line-42)">/</text><text class="breeze-help-r4" x="134.2" y="1044.8" textLength="134.2" clip-path="url(#breeze-help-line-42)">--no-use-uv</text><text class="breeze-help-r1" x="341.6" y="1044.8" textLength="719.8" clip-path="url(#breeze-help-line-42)">Use&#160;uv&#160;instead&#160;of&#160;pip&#160;as&#160;packaging&#160;tool&#160;to&#160;build&#160;the&#160;image.</text><text class="breeze-help-r5" x="1073.6" y="1044.8" textLength="207.4" clip-path="url(#breeze-help-line-42)">[default:&#160;use-uv]</text><text class="breeze-help-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-help-line-42)">│</text><text class="breeze-help-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-help-line-42)">
-</text><text class="breeze-help-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-help-line-43)">│</text><text class="breeze-help-r4" x="24.4" y="1069.2" textLength="207.4" clip-path="url(#breeze-help-line-43)">--uv-http-timeout</text><text class="breeze-help-r1" x="341.6" y="1069.2" textLength="829.6" clip-path="url(#breeze-help-line-43)">Timeout&#160;for&#160;requests&#160;that&#160;UV&#160;makes&#160;(only&#160;used&#160;in&#160;case&#160;of&#160;UV&#160;builds).</text><text class="breeze-help-r7" x="1183.4" y="1069.2" textLength="183" clip-path="url(#breeze-help-line-43)">(INTEGER&#160;RANGE)</text><text class="breeze-help-r5" x="1451.8" y="1069.2" textLength="12.2" clip-path="url(#breeze-help-line-43)">│</text><text class="breeze-help-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-help-line-43)">
-</text><text class="breeze-help-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-help-line-44)">│</text><text class="breeze-help-r5" x="341.6" y="1093.6" textLength="829.6" clip-path="url(#breeze-help-line-44)">[default:&#160;300;&#160;x&gt;=1]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1093.6" textLength="12.2" clip-path="url(#breeze-help-line-44)">│</text><text class="breeze-help-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-help-line-44)">
-</text><text class="breeze-help-r5" x="0" y="1118" textLength="1464" clip-path="url(#breeze-help-line-45)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-help-line-45)">
-</text><text class="breeze-help-r5" x="0" y="1142.4" textLength="24.4" clip-path="url(#breeze-help-line-46)">╭─</text><text class="breeze-help-r5" x="24.4" y="1142.4" textLength="183" clip-path="url(#breeze-help-line-46)">&#160;Other&#160;options&#160;</text><text class="breeze-help-r5" x="207.4" y="1142.4" textLength="1232.2" clip-path="url(#breeze-help-line-46)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="1142.4" textLength="24.4" clip-path="url(#breeze-help-line-46)">─╮</text><text class="breeze-help-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#breeze-help-line-46)">
-</text><text class="breeze-help-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-help-line-47)">│</text><text class="breeze-help-r4" x="24.4" y="1166.8" textLength="256.2" clip-path="url(#breeze-help-line-47)">--forward-credentials</text><text class="breeze-help-r6" x="305" y="1166.8" textLength="24.4" clip-path="url(#breeze-help-line-47)">-f</text><text class="breeze-help-r1" x="353.8" y="1166.8" textLength="634.4" clip-path="url(#breeze-help-line-47)">Forward&#160;local&#160;credentials&#160;to&#160;container&#160;when&#160;running.</text><text class="breeze-help-r5" x="1451.8" y="1166.8" textLength="12.2" clip-path="url(#breeze-help-line-47)">│</text><text class="breeze-help-r1" x="1464" y="1166.8" textLength="12.2" clip-path="url(#breeze-help-line-47)">
-</text><text class="breeze-help-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-help-line-48)">│</text><text class="breeze-help-r4" x="24.4" y="1191.2" textLength="122" clip-path="url(#breeze-help-line-48)">--max-time</text><text class="breeze-help-r1" x="353.8" y="1191.2" textLength="1049.2" clip-path="url(#breeze-help-line-48)">Maximum&#160;time&#160;that&#160;the&#160;command&#160;should&#160;take&#160;-&#160;if&#160;it&#160;takes&#160;longer,&#160;the&#160;command&#160;will&#160;fail.</text><text class="breeze-help-r5" x="1451.8" y="1191.2" textLength="12.2" clip-path="url(#breeze-help-line-48)">│</text><text class="breeze-help-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#breeze-help-line-48)">
-</text><text class="breeze-help-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-help-line-49)">│</text><text class="breeze-help-r7" x="353.8" y="1215.6" textLength="1049.2" clip-path="url(#breeze-help-line-49)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1215.6" textLength="12.2" clip-path="url(#breeze-help-line-49)">│</text><text class="breeze-help-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-help-line-49)">
-</text><text class="breeze-help-r5" x="0" y="1240" textLength="1464" clip-path="url(#breeze-help-line-50)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-help-line-50)">
-</text><text class="breeze-help-r5" x="0" y="1264.4" textLength="24.4" clip-path="url(#breeze-help-line-51)">╭─</text><text class="breeze-help-r5" x="24.4" y="1264.4" textLength="195.2" clip-path="url(#breeze-help-line-51)">&#160;Common&#160;options&#160;</text><text class="breeze-help-r5" x="219.6" y="1264.4" textLength="1220" clip-path="url(#breeze-help-line-51)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="1264.4" textLength="24.4" clip-path="url(#breeze-help-line-51)">─╮</text><text class="breeze-help-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-help-line-51)">
-</text><text class="breeze-help-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-help-line-52)">│</text><text class="breeze-help-r4" x="24.4" y="1288.8" textLength="97.6" clip-path="url(#breeze-help-line-52)">--answer</text><text class="breeze-help-r6" x="158.6" y="1288.8" textLength="24.4" clip-path="url(#breeze-help-line-52)">-a</text><text class="breeze-help-r1" x="207.4" y="1288.8" textLength="317.2" clip-path="url(#breeze-help-line-52)">Force&#160;answer&#160;to&#160;questions.</text><text class="breeze-help-r7" x="536.8" y="1288.8" textLength="353.8" clip-path="url(#breeze-help-line-52)">(y&#160;|&#160;n&#160;|&#160;q&#160;|&#160;yes&#160;|&#160;no&#160;|&#160;quit)</text><text class="breeze-help-r5" x="1451.8" y="1288.8" textLength="12.2" clip-path="url(#breeze-help-line-52)">│</text><text class="breeze-help-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-help-line-52)">
-</text><text class="breeze-help-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-help-line-53)">│</text><text class="breeze-help-r4" x="24.4" y="1313.2" textLength="109.8" clip-path="url(#breeze-help-line-53)">--dry-run</text><text class="breeze-help-r6" x="158.6" y="1313.2" textLength="24.4" clip-path="url(#breeze-help-line-53)">-D</text><text class="breeze-help-r1" x="207.4" y="1313.2" textLength="719.8" clip-path="url(#breeze-help-line-53)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-help-r5" x="1451.8" y="1313.2" textLength="12.2" clip-path="url(#breeze-help-line-53)">│</text><text class="breeze-help-r1" x="1464" y="1313.2" textLength="12.2" clip-path="url(#breeze-help-line-53)">
-</text><text class="breeze-help-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-help-line-54)">│</text><text class="breeze-help-r4" x="24.4" y="1337.6" textLength="109.8" clip-path="url(#breeze-help-line-54)">--verbose</text><text class="breeze-help-r6" x="158.6" y="1337.6" textLength="24.4" clip-path="url(#breeze-help-line-54)">-v</text><text class="breeze-help-r1" x="207.4" y="1337.6" textLength="585.6" clip-path="url(#breeze-help-line-54)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-help-r5" x="1451.8" y="1337.6" textLength="12.2" clip-path="url(#breeze-help-line-54)">│</text><text class="breeze-help-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-help-line-54)">
-</text><text class="breeze-help-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-help-line-55)">│</text><text class="breeze-help-r4" x="24.4" y="1362" textLength="73.2" clip-path="url(#breeze-help-line-55)">--help</text><text class="breeze-help-r6" x="158.6" y="1362" textLength="24.4" clip-path="url(#breeze-help-line-55)">-h</text><text class="breeze-help-r1" x="207.4" y="1362" textLength="329.4" clip-path="url(#breeze-help-line-55)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-help-r5" x="1451.8" y="1362" textLength="12.2" clip-path="url(#breeze-help-line-55)">│</text><text class="breeze-help-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#breeze-help-line-55)">
-</text><text class="breeze-help-r5" x="0" y="1386.4" textLength="1464" clip-path="url(#breeze-help-line-56)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-help-line-56)">
-</text><text class="breeze-help-r5" x="0" y="1410.8" textLength="24.4" clip-path="url(#breeze-help-line-57)">╭─</text><text class="breeze-help-r5" x="24.4" y="1410.8" textLength="244" clip-path="url(#breeze-help-line-57)">&#160;Developer&#160;commands&#160;</text><text class="breeze-help-r5" x="268.4" y="1410.8" textLength="1171.2" clip-path="url(#breeze-help-line-57)">────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="1410.8" textLength="24.4" clip-path="url(#breeze-help-line-57)">─╮</text><text class="breeze-help-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-help-line-57)">
-</text><text class="breeze-help-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-help-line-58)">│</text><text class="breeze-help-r4" x="24.4" y="1435.2" textLength="280.6" clip-path="url(#breeze-help-line-58)">start-airflow&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1435.2" textLength="1110.2" clip-path="url(#breeze-help-line-58)">Enter&#160;breeze&#160;environment&#160;and&#160;starts&#160;all&#160;Airflow&#160;components&#160;in&#160;the&#160;tmux&#160;session.&#160;Compile&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1435.2" textLength="12.2" clip-path="url(#breeze-help-line-58)">│</text><text class="breeze-help-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-help-line-58)">
-</text><text class="breeze-help-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-help-line-59)">│</text><text class="breeze-help-r1" x="329.4" y="1459.6" textLength="1110.2" clip-path="url(#breeze-help-line-59)">assets&#160;if&#160;contents&#160;of&#160;www&#160;directory&#160;changed.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1459.6" textLength="12.2" clip-path="url(#breeze-help-line-59)">│</text><text class="breeze-help-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-help-line-59)">
-</text><text class="breeze-help-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-help-line-60)">│</text><text class="breeze-help-r4" x="24.4" y="1484" textLength="280.6" clip-path="url(#breeze-help-line-60)">static-checks&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1484" textLength="1110.2" clip-path="url(#breeze-help-line-60)">Run&#160;static&#160;checks.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1484" textLength="12.2" clip-path="url(#breeze-help-line-60)">│</text><text class="breeze-help-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-help-line-60)">
-</text><text class="breeze-help-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-help-line-61)">│</text><text class="breeze-help-r4" x="24.4" y="1508.4" textLength="280.6" clip-path="url(#breeze-help-line-61)">build-docs&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1508.4" textLength="1110.2" clip-path="url(#breeze-help-line-61)">Build&#160;documents.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1508.4" textLength="12.2" clip-path="url(#breeze-help-line-61)">│</text><text class="breeze-help-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-help-line-61)">
-</text><text class="breeze-help-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-help-line-62)">│</text><text class="breeze-help-r4" x="24.4" y="1532.8" textLength="280.6" clip-path="url(#breeze-help-line-62)">down&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1532.8" textLength="1110.2" clip-path="url(#breeze-help-line-62)">Stop&#160;running&#160;breeze&#160;environment.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1532.8" textLength="12.2" clip-path="url(#breeze-help-line-62)">│</text><text class="breeze-help-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-help-line-62)">
-</text><text class="breeze-help-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-help-line-63)">│</text><text class="breeze-help-r4" x="24.4" y="1557.2" textLength="280.6" clip-path="url(#breeze-help-line-63)">shell&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1557.2" textLength="1110.2" clip-path="url(#breeze-help-line-63)">Enter&#160;breeze&#160;environment.&#160;this&#160;is&#160;the&#160;default&#160;command&#160;use&#160;when&#160;no&#160;other&#160;is&#160;selected.&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1557.2" textLength="12.2" clip-path="url(#breeze-help-line-63)">│</text><text class="breeze-help-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-help-line-63)">
-</text><text class="breeze-help-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-help-line-64)">│</text><text class="breeze-help-r4" x="24.4" y="1581.6" textLength="280.6" clip-path="url(#breeze-help-line-64)">exec&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1581.6" textLength="1110.2" clip-path="url(#breeze-help-line-64)">Joins&#160;the&#160;interactive&#160;shell&#160;of&#160;running&#160;airflow&#160;container.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1581.6" textLength="12.2" clip-path="url(#breeze-help-line-64)">│</text><text class="breeze-help-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-help-line-64)">
-</text><text class="breeze-help-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-help-line-65)">│</text><text class="breeze-help-r4" x="24.4" y="1606" textLength="280.6" clip-path="url(#breeze-help-line-65)">run&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1606" textLength="1110.2" clip-path="url(#breeze-help-line-65)">Run&#160;a&#160;command&#160;in&#160;the&#160;Breeze&#160;environment&#160;without&#160;entering&#160;the&#160;interactive&#160;shell.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1606" textLength="12.2" clip-path="url(#breeze-help-line-65)">│</text><text class="breeze-help-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-help-line-65)">
-</text><text class="breeze-help-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-help-line-66)">│</text><text class="breeze-help-r4" x="24.4" y="1630.4" textLength="280.6" clip-path="url(#breeze-help-line-66)">compile-ui-assets&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1630.4" textLength="1110.2" clip-path="url(#breeze-help-line-66)">Compiles&#160;ui&#160;assets.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1630.4" textLength="12.2" clip-path="url(#breeze-help-line-66)">│</text><text class="breeze-help-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-help-line-66)">
-</text><text class="breeze-help-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-help-line-67)">│</text><text class="breeze-help-r4" x="24.4" y="1654.8" textLength="280.6" clip-path="url(#breeze-help-line-67)">cleanup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1654.8" textLength="1110.2" clip-path="url(#breeze-help-line-67)">Cleans&#160;the&#160;cache&#160;of&#160;parameters,&#160;docker&#160;cache&#160;and&#160;optionally&#160;built&#160;CI/PROD&#160;images.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1654.8" textLength="12.2" clip-path="url(#breeze-help-line-67)">│</text><text class="breeze-help-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-help-line-67)">
-</text><text class="breeze-help-r5" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-help-line-68)">│</text><text class="breeze-help-r4" x="24.4" y="1679.2" textLength="280.6" clip-path="url(#breeze-help-line-68)">generate-migration-file</text><text class="breeze-help-r1" x="329.4" y="1679.2" textLength="1110.2" clip-path="url(#breeze-help-line-68)">Autogenerate&#160;the&#160;alembic&#160;migration&#160;file&#160;for&#160;the&#160;ORM&#160;changes.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1679.2" textLength="12.2" clip-path="url(#breeze-help-line-68)">│</text><text class="breeze-help-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-help-line-68)">
-</text><text class="breeze-help-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-help-line-69)">│</text><text class="breeze-help-r4" x="24.4" y="1703.6" textLength="280.6" clip-path="url(#breeze-help-line-69)">doctor&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1703.6" textLength="1110.2" clip-path="url(#breeze-help-line-69)">Auto-healing&#160;of&#160;breeze&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1703.6" textLength="12.2" clip-path="url(#breeze-help-line-69)">│</text><text class="breeze-help-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-help-line-69)">
-</text><text class="breeze-help-r5" x="0" y="1728" textLength="1464" clip-path="url(#breeze-help-line-70)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-help-line-70)">
-</text><text class="breeze-help-r5" x="0" y="1752.4" textLength="24.4" clip-path="url(#breeze-help-line-71)">╭─</text><text class="breeze-help-r5" x="24.4" y="1752.4" textLength="219.6" clip-path="url(#breeze-help-line-71)">&#160;Testing&#160;commands&#160;</text><text class="breeze-help-r5" x="244" y="1752.4" textLength="1195.6" clip-path="url(#breeze-help-line-71)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="1752.4" textLength="24.4" clip-path="url(#breeze-help-line-71)">─╮</text><text class="breeze-help-r1" x="1464" y="1752.4" textLength="12.2" clip-path="url(#breeze-help-line-71)">
-</text><text class="breeze-help-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-help-line-72)">│</text><text class="breeze-help-r4" x="24.4" y="1776.8" textLength="183" clip-path="url(#breeze-help-line-72)">testing&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="231.8" y="1776.8" textLength="1207.8" clip-path="url(#breeze-help-line-72)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;run&#160;tests&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1776.8" textLength="12.2" clip-path="url(#breeze-help-line-72)">│</text><text class="breeze-help-r1" x="1464" y="1776.8" textLength="12.2" clip-path="url(#breeze-help-line-72)">
-</text><text class="breeze-help-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-help-line-73)">│</text><text class="breeze-help-r4" x="24.4" y="1801.2" textLength="183" clip-path="url(#breeze-help-line-73)">k8s&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="231.8" y="1801.2" textLength="1207.8" clip-path="url(#breeze-help-line-73)">Tools&#160;that&#160;developers&#160;use&#160;to&#160;run&#160;Kubernetes&#160;tests&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1801.2" textLength="12.2" clip-path="url(#breeze-help-line-73)">│</text><text class="breeze-help-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-help-line-73)">
-</text><text class="breeze-help-r5" x="0" y="1825.6" textLength="1464" clip-path="url(#breeze-help-line-74)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-help-line-74)">
-</text><text class="breeze-help-r5" x="0" y="1850" textLength="24.4" clip-path="url(#breeze-help-line-75)">╭─</text><text class="breeze-help-r5" x="24.4" y="1850" textLength="195.2" clip-path="url(#breeze-help-line-75)">&#160;Image&#160;commands&#160;</text><text class="breeze-help-r5" x="219.6" y="1850" textLength="1220" clip-path="url(#breeze-help-line-75)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="1850" textLength="24.4" clip-path="url(#breeze-help-line-75)">─╮</text><text class="breeze-help-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-help-line-75)">
-</text><text class="breeze-help-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-help-line-76)">│</text><text class="breeze-help-r4" x="24.4" y="1874.4" textLength="207.4" clip-path="url(#breeze-help-line-76)">ci-image&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="256.2" y="1874.4" textLength="1183.4" clip-path="url(#breeze-help-line-76)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;manually&#160;manage&#160;CI&#160;images&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1874.4" textLength="12.2" clip-path="url(#breeze-help-line-76)">│</text><text class="breeze-help-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-help-line-76)">
-</text><text class="breeze-help-r5" x="0" y="1898.8" textLength="12.2" clip-path="url(#breeze-help-line-77)">│</text><text class="breeze-help-r4" x="24.4" y="1898.8" textLength="207.4" clip-path="url(#breeze-help-line-77)">prod-image&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="256.2" y="1898.8" textLength="1183.4" clip-path="url(#breeze-help-line-77)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;manually&#160;manage&#160;PROD&#160;images&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1898.8" textLength="12.2" clip-path="url(#breeze-help-line-77)">│</text><text class="breeze-help-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-help-line-77)">
-</text><text class="breeze-help-r5" x="0" y="1923.2" textLength="1464" clip-path="url(#breeze-help-line-78)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-help-line-78)">
-</text><text class="breeze-help-r5" x="0" y="1947.6" textLength="24.4" clip-path="url(#breeze-help-line-79)">╭─</text><text class="breeze-help-r5" x="24.4" y="1947.6" textLength="353.8" clip-path="url(#breeze-help-line-79)">&#160;Release&#160;management&#160;commands&#160;</text><text class="breeze-help-r5" x="378.2" y="1947.6" textLength="1061.4" clip-path="url(#breeze-help-line-79)">───────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="1947.6" textLength="24.4" clip-path="url(#breeze-help-line-79)">─╮</text><text class="breeze-help-r1" x="1464" y="1947.6" textLength="12.2" clip-path="url(#breeze-help-line-79)">
-</text><text class="breeze-help-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-help-line-80)">│</text><text class="breeze-help-r4" x="24.4" y="1972" textLength="280.6" clip-path="url(#breeze-help-line-80)">release-management&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1972" textLength="1110.2" clip-path="url(#breeze-help-line-80)">Tools&#160;that&#160;release&#160;managers&#160;can&#160;use&#160;to&#160;prepare&#160;and&#160;manage&#160;Airflow&#160;releases&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1972" textLength="12.2" clip-path="url(#breeze-help-line-80)">│</text><text class="breeze-help-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-help-line-80)">
-</text><text class="breeze-help-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-help-line-81)">│</text><text class="breeze-help-r4" x="24.4" y="1996.4" textLength="280.6" clip-path="url(#breeze-help-line-81)">sbom&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1996.4" textLength="1110.2" clip-path="url(#breeze-help-line-81)">Tools&#160;that&#160;release&#160;managers&#160;can&#160;use&#160;to&#160;prepare&#160;sbom&#160;information&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1996.4" textLength="12.2" clip-path="url(#breeze-help-line-81)">│</text><text class="breeze-help-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-help-line-81)">
-</text><text class="breeze-help-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-help-line-82)">│</text><text class="breeze-help-r4" x="24.4" y="2020.8" textLength="280.6" clip-path="url(#breeze-help-line-82)">workflow-run&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="2020.8" textLength="1110.2" clip-path="url(#breeze-help-line-82)">Tools&#160;to&#160;manage&#160;Airflow&#160;repository&#160;workflows&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="2020.8" textLength="12.2" clip-path="url(#breeze-help-line-82)">│</text><text class="breeze-help-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-help-line-82)">
-</text><text class="breeze-help-r5" x="0" y="2045.2" textLength="1464" clip-path="url(#breeze-help-line-83)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-help-line-83)">
-</text><text class="breeze-help-r5" x="0" y="2069.6" textLength="24.4" clip-path="url(#breeze-help-line-84)">╭─</text><text class="breeze-help-r5" x="24.4" y="2069.6" textLength="195.2" clip-path="url(#breeze-help-line-84)">&#160;Other&#160;commands&#160;</text><text class="breeze-help-r5" x="219.6" y="2069.6" textLength="1220" clip-path="url(#breeze-help-line-84)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="2069.6" textLength="24.4" clip-path="url(#breeze-help-line-84)">─╮</text><text class="breeze-help-r1" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-help-line-84)">
-</text><text class="breeze-help-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-help-line-85)">│</text><text class="breeze-help-r4" x="24.4" y="2094" textLength="122" clip-path="url(#breeze-help-line-85)">setup&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="170.8" y="2094" textLength="1268.8" clip-path="url(#breeze-help-line-85)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;configure&#160;Breeze&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="2094" textLength="12.2" clip-path="url(#breeze-help-line-85)">│</text><text class="breeze-help-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-help-line-85)">
-</text><text class="breeze-help-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-help-line-86)">│</text><text class="breeze-help-r4" x="24.4" y="2118.4" textLength="122" clip-path="url(#breeze-help-line-86)">ci&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="170.8" y="2118.4" textLength="1268.8" clip-path="url(#breeze-help-line-86)">Tools&#160;that&#160;CI&#160;workflows&#160;use&#160;to&#160;cleanup/manage&#160;CI&#160;environment&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="2118.4" textLength="12.2" clip-path="url(#breeze-help-line-86)">│</text><text class="breeze-help-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-help-line-86)">
-</text><text class="breeze-help-r5" x="0" y="2142.8" textLength="1464" clip-path="url(#breeze-help-line-87)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-help-line-87)">
+</text><text class="breeze-help-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-help-line-29)">│</text><text class="breeze-help-r4" x="24.4" y="727.6" textLength="109.8" clip-path="url(#breeze-help-line-29)">--backend</text><text class="breeze-help-r6" x="268.4" y="727.6" textLength="24.4" clip-path="url(#breeze-help-line-29)">-b</text><text class="breeze-help-r1" x="488" y="727.6" textLength="951.6" clip-path="url(#breeze-help-line-29)">Database&#160;backend&#160;to&#160;use.&#160;Default&#160;is&#160;&#x27;sqlite&#x27;.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;Breeze&#160;will</text><text class="breeze-help-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-help-line-29)">│</text><text class="breeze-help-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-help-line-29)">
+</text><text class="breeze-help-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-help-line-30)">│</text><text class="breeze-help-r1" x="488" y="752" textLength="951.6" clip-path="url(#breeze-help-line-30)">start&#160;with&#160;an&#160;invalid&#160;database&#160;configuration&#160;—&#160;no&#160;database&#160;will&#160;be&#160;available,&#160;</text><text class="breeze-help-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-help-line-30)">│</text><text class="breeze-help-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-help-line-30)">
+</text><text class="breeze-help-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-help-line-31)">│</text><text class="breeze-help-r1" x="488" y="776.4" textLength="951.6" clip-path="url(#breeze-help-line-31)">and&#160;any&#160;attempt&#160;to&#160;run&#160;Airflow&#160;will&#160;fail.&#160;Use&#160;&#x27;none&#x27;&#160;only&#160;for&#160;specific&#160;non-DB&#160;</text><text class="breeze-help-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-help-line-31)">│</text><text class="breeze-help-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-help-line-31)">
+</text><text class="breeze-help-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-help-line-32)">│</text><text class="breeze-help-r1" x="488" y="800.8" textLength="951.6" clip-path="url(#breeze-help-line-32)">test&#160;cases.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-help-line-32)">│</text><text class="breeze-help-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-help-line-32)">
+</text><text class="breeze-help-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-help-line-33)">│</text><text class="breeze-help-r7" x="488" y="825.2" textLength="951.6" clip-path="url(#breeze-help-line-33)">(&gt;sqlite&lt;&#160;|&#160;mysql&#160;|&#160;postgres&#160;|&#160;none)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-help-line-33)">│</text><text class="breeze-help-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-help-line-33)">
+</text><text class="breeze-help-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-help-line-34)">│</text><text class="breeze-help-r5" x="488" y="849.6" textLength="951.6" clip-path="url(#breeze-help-line-34)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-help-line-34)">│</text><text class="breeze-help-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-help-line-34)">
+</text><text class="breeze-help-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-help-line-35)">│</text><text class="breeze-help-r4" x="24.4" y="874" textLength="219.6" clip-path="url(#breeze-help-line-35)">--postgres-version</text><text class="breeze-help-r6" x="268.4" y="874" textLength="24.4" clip-path="url(#breeze-help-line-35)">-P</text><text class="breeze-help-r1" x="488" y="874" textLength="305" clip-path="url(#breeze-help-line-35)">Version&#160;of&#160;Postgres&#160;used.</text><text class="breeze-help-r7" x="805.2" y="874" textLength="317.2" clip-path="url(#breeze-help-line-35)">(&gt;13&lt;&#160;|&#160;14&#160;|&#160;15&#160;|&#160;16&#160;|&#160;17)</text><text class="breeze-help-r5" x="1134.6" y="874" textLength="158.6" clip-path="url(#breeze-help-line-35)">[default:&#160;13]</text><text class="breeze-help-r5" x="1451.8" y="874" textLength="12.2" clip-path="url(#breeze-help-line-35)">│</text><text class="breeze-help-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-help-line-35)">
+</text><text class="breeze-help-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-help-line-36)">│</text><text class="breeze-help-r4" x="24.4" y="898.4" textLength="183" clip-path="url(#breeze-help-line-36)">--mysql-version</text><text class="breeze-help-r6" x="268.4" y="898.4" textLength="24.4" clip-path="url(#breeze-help-line-36)">-M</text><text class="breeze-help-r1" x="488" y="898.4" textLength="268.4" clip-path="url(#breeze-help-line-36)">Version&#160;of&#160;MySQL&#160;used.</text><text class="breeze-help-r7" x="768.6" y="898.4" textLength="158.6" clip-path="url(#breeze-help-line-36)">(&gt;8.0&lt;&#160;|&#160;8.4)</text><text class="breeze-help-r5" x="939.4" y="898.4" textLength="170.8" clip-path="url(#breeze-help-line-36)">[default:&#160;8.0]</text><text class="breeze-help-r5" x="1451.8" y="898.4" textLength="12.2" clip-path="url(#breeze-help-line-36)">│</text><text class="breeze-help-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-help-line-36)">
+</text><text class="breeze-help-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-help-line-37)">│</text><text class="breeze-help-r4" x="24.4" y="922.8" textLength="122" clip-path="url(#breeze-help-line-37)">--db-reset</text><text class="breeze-help-r6" x="268.4" y="922.8" textLength="24.4" clip-path="url(#breeze-help-line-37)">-d</text><text class="breeze-help-r1" x="292.8" y="922.8" textLength="12.2" clip-path="url(#breeze-help-line-37)">/</text><text class="breeze-help-r4" x="305" y="922.8" textLength="158.6" clip-path="url(#breeze-help-line-37)">--no-db-reset</text><text class="breeze-help-r1" x="488" y="922.8" textLength="451.4" clip-path="url(#breeze-help-line-37)">Reset&#160;DB&#160;when&#160;entering&#160;the&#160;container.</text><text class="breeze-help-r5" x="951.6" y="922.8" textLength="268.4" clip-path="url(#breeze-help-line-37)">[default:&#160;no-db-reset]</text><text class="breeze-help-r5" x="1451.8" y="922.8" textLength="12.2" clip-path="url(#breeze-help-line-37)">│</text><text class="breeze-help-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-help-line-37)">
+</text><text class="breeze-help-r5" x="0" y="947.2" textLength="1464" clip-path="url(#breeze-help-line-38)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-help-line-38)">
+</text><text class="breeze-help-r5" x="0" y="971.6" textLength="24.4" clip-path="url(#breeze-help-line-39)">╭─</text><text class="breeze-help-r5" x="24.4" y="971.6" textLength="488" clip-path="url(#breeze-help-line-39)">&#160;Build&#160;CI&#160;image&#160;(before&#160;entering&#160;shell)&#160;</text><text class="breeze-help-r5" x="512.4" y="971.6" textLength="927.2" clip-path="url(#breeze-help-line-39)">────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="971.6" textLength="24.4" clip-path="url(#breeze-help-line-39)">─╮</text><text class="breeze-help-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-help-line-39)">
+</text><text class="breeze-help-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-help-line-40)">│</text><text class="breeze-help-r4" x="24.4" y="996" textLength="231.8" clip-path="url(#breeze-help-line-40)">--github-repository</text><text class="breeze-help-r6" x="292.8" y="996" textLength="24.4" clip-path="url(#breeze-help-line-40)">-g</text><text class="breeze-help-r1" x="341.6" y="996" textLength="585.6" clip-path="url(#breeze-help-line-40)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-help-r7" x="939.4" y="996" textLength="73.2" clip-path="url(#breeze-help-line-40)">(TEXT)</text><text class="breeze-help-r5" x="1024.8" y="996" textLength="305" clip-path="url(#breeze-help-line-40)">[default:&#160;apache/airflow]</text><text class="breeze-help-r5" x="1451.8" y="996" textLength="12.2" clip-path="url(#breeze-help-line-40)">│</text><text class="breeze-help-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-help-line-40)">
+</text><text class="breeze-help-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-help-line-41)">│</text><text class="breeze-help-r4" x="24.4" y="1020.4" textLength="109.8" clip-path="url(#breeze-help-line-41)">--builder</text><text class="breeze-help-r1" x="341.6" y="1020.4" textLength="756.4" clip-path="url(#breeze-help-line-41)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build`&#160;commands.</text><text class="breeze-help-r7" x="1110.2" y="1020.4" textLength="73.2" clip-path="url(#breeze-help-line-41)">(TEXT)</text><text class="breeze-help-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-help-line-41)">│</text><text class="breeze-help-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-help-line-41)">
+</text><text class="breeze-help-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-help-line-42)">│</text><text class="breeze-help-r5" x="341.6" y="1044.8" textLength="756.4" clip-path="url(#breeze-help-line-42)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-help-line-42)">│</text><text class="breeze-help-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-help-line-42)">
+</text><text class="breeze-help-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-help-line-43)">│</text><text class="breeze-help-r4" x="24.4" y="1069.2" textLength="97.6" clip-path="url(#breeze-help-line-43)">--use-uv</text><text class="breeze-help-r1" x="122" y="1069.2" textLength="12.2" clip-path="url(#breeze-help-line-43)">/</text><text class="breeze-help-r4" x="134.2" y="1069.2" textLength="134.2" clip-path="url(#breeze-help-line-43)">--no-use-uv</text><text class="breeze-help-r1" x="341.6" y="1069.2" textLength="719.8" clip-path="url(#breeze-help-line-43)">Use&#160;uv&#160;instead&#160;of&#160;pip&#160;as&#160;packaging&#160;tool&#160;to&#160;build&#160;the&#160;image.</text><text class="breeze-help-r5" x="1073.6" y="1069.2" textLength="207.4" clip-path="url(#breeze-help-line-43)">[default:&#160;use-uv]</text><text class="breeze-help-r5" x="1451.8" y="1069.2" textLength="12.2" clip-path="url(#breeze-help-line-43)">│</text><text class="breeze-help-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-help-line-43)">
+</text><text class="breeze-help-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-help-line-44)">│</text><text class="breeze-help-r4" x="24.4" y="1093.6" textLength="207.4" clip-path="url(#breeze-help-line-44)">--uv-http-timeout</text><text class="breeze-help-r1" x="341.6" y="1093.6" textLength="829.6" clip-path="url(#breeze-help-line-44)">Timeout&#160;for&#160;requests&#160;that&#160;UV&#160;makes&#160;(only&#160;used&#160;in&#160;case&#160;of&#160;UV&#160;builds).</text><text class="breeze-help-r7" x="1183.4" y="1093.6" textLength="183" clip-path="url(#breeze-help-line-44)">(INTEGER&#160;RANGE)</text><text class="breeze-help-r5" x="1451.8" y="1093.6" textLength="12.2" clip-path="url(#breeze-help-line-44)">│</text><text class="breeze-help-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-help-line-44)">
+</text><text class="breeze-help-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-help-line-45)">│</text><text class="breeze-help-r5" x="341.6" y="1118" textLength="829.6" clip-path="url(#breeze-help-line-45)">[default:&#160;300;&#160;x&gt;=1]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1118" textLength="12.2" clip-path="url(#breeze-help-line-45)">│</text><text class="breeze-help-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-help-line-45)">
+</text><text class="breeze-help-r5" x="0" y="1142.4" textLength="1464" clip-path="url(#breeze-help-line-46)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#breeze-help-line-46)">
+</text><text class="breeze-help-r5" x="0" y="1166.8" textLength="24.4" clip-path="url(#breeze-help-line-47)">╭─</text><text class="breeze-help-r5" x="24.4" y="1166.8" textLength="183" clip-path="url(#breeze-help-line-47)">&#160;Other&#160;options&#160;</text><text class="breeze-help-r5" x="207.4" y="1166.8" textLength="1232.2" clip-path="url(#breeze-help-line-47)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="1166.8" textLength="24.4" clip-path="url(#breeze-help-line-47)">─╮</text><text class="breeze-help-r1" x="1464" y="1166.8" textLength="12.2" clip-path="url(#breeze-help-line-47)">
+</text><text class="breeze-help-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-help-line-48)">│</text><text class="breeze-help-r4" x="24.4" y="1191.2" textLength="256.2" clip-path="url(#breeze-help-line-48)">--forward-credentials</text><text class="breeze-help-r6" x="305" y="1191.2" textLength="24.4" clip-path="url(#breeze-help-line-48)">-f</text><text class="breeze-help-r1" x="353.8" y="1191.2" textLength="634.4" clip-path="url(#breeze-help-line-48)">Forward&#160;local&#160;credentials&#160;to&#160;container&#160;when&#160;running.</text><text class="breeze-help-r5" x="1451.8" y="1191.2" textLength="12.2" clip-path="url(#breeze-help-line-48)">│</text><text class="breeze-help-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#breeze-help-line-48)">
+</text><text class="breeze-help-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-help-line-49)">│</text><text class="breeze-help-r4" x="24.4" y="1215.6" textLength="122" clip-path="url(#breeze-help-line-49)">--max-time</text><text class="breeze-help-r1" x="353.8" y="1215.6" textLength="1049.2" clip-path="url(#breeze-help-line-49)">Maximum&#160;time&#160;that&#160;the&#160;command&#160;should&#160;take&#160;-&#160;if&#160;it&#160;takes&#160;longer,&#160;the&#160;command&#160;will&#160;fail.</text><text class="breeze-help-r5" x="1451.8" y="1215.6" textLength="12.2" clip-path="url(#breeze-help-line-49)">│</text><text class="breeze-help-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-help-line-49)">
+</text><text class="breeze-help-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-help-line-50)">│</text><text class="breeze-help-r7" x="353.8" y="1240" textLength="1049.2" clip-path="url(#breeze-help-line-50)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1240" textLength="12.2" clip-path="url(#breeze-help-line-50)">│</text><text class="breeze-help-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-help-line-50)">
+</text><text class="breeze-help-r5" x="0" y="1264.4" textLength="1464" clip-path="url(#breeze-help-line-51)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-help-line-51)">
+</text><text class="breeze-help-r5" x="0" y="1288.8" textLength="24.4" clip-path="url(#breeze-help-line-52)">╭─</text><text class="breeze-help-r5" x="24.4" y="1288.8" textLength="195.2" clip-path="url(#breeze-help-line-52)">&#160;Common&#160;options&#160;</text><text class="breeze-help-r5" x="219.6" y="1288.8" textLength="1220" clip-path="url(#breeze-help-line-52)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="1288.8" textLength="24.4" clip-path="url(#breeze-help-line-52)">─╮</text><text class="breeze-help-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-help-line-52)">
+</text><text class="breeze-help-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-help-line-53)">│</text><text class="breeze-help-r4" x="24.4" y="1313.2" textLength="97.6" clip-path="url(#breeze-help-line-53)">--answer</text><text class="breeze-help-r6" x="158.6" y="1313.2" textLength="24.4" clip-path="url(#breeze-help-line-53)">-a</text><text class="breeze-help-r1" x="207.4" y="1313.2" textLength="317.2" clip-path="url(#breeze-help-line-53)">Force&#160;answer&#160;to&#160;questions.</text><text class="breeze-help-r7" x="536.8" y="1313.2" textLength="353.8" clip-path="url(#breeze-help-line-53)">(y&#160;|&#160;n&#160;|&#160;q&#160;|&#160;yes&#160;|&#160;no&#160;|&#160;quit)</text><text class="breeze-help-r5" x="1451.8" y="1313.2" textLength="12.2" clip-path="url(#breeze-help-line-53)">│</text><text class="breeze-help-r1" x="1464" y="1313.2" textLength="12.2" clip-path="url(#breeze-help-line-53)">
+</text><text class="breeze-help-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-help-line-54)">│</text><text class="breeze-help-r4" x="24.4" y="1337.6" textLength="109.8" clip-path="url(#breeze-help-line-54)">--dry-run</text><text class="breeze-help-r6" x="158.6" y="1337.6" textLength="24.4" clip-path="url(#breeze-help-line-54)">-D</text><text class="breeze-help-r1" x="207.4" y="1337.6" textLength="719.8" clip-path="url(#breeze-help-line-54)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-help-r5" x="1451.8" y="1337.6" textLength="12.2" clip-path="url(#breeze-help-line-54)">│</text><text class="breeze-help-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-help-line-54)">
+</text><text class="breeze-help-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-help-line-55)">│</text><text class="breeze-help-r4" x="24.4" y="1362" textLength="109.8" clip-path="url(#breeze-help-line-55)">--verbose</text><text class="breeze-help-r6" x="158.6" y="1362" textLength="24.4" clip-path="url(#breeze-help-line-55)">-v</text><text class="breeze-help-r1" x="207.4" y="1362" textLength="585.6" clip-path="url(#breeze-help-line-55)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-help-r5" x="1451.8" y="1362" textLength="12.2" clip-path="url(#breeze-help-line-55)">│</text><text class="breeze-help-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#breeze-help-line-55)">
+</text><text class="breeze-help-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-help-line-56)">│</text><text class="breeze-help-r4" x="24.4" y="1386.4" textLength="73.2" clip-path="url(#breeze-help-line-56)">--help</text><text class="breeze-help-r6" x="158.6" y="1386.4" textLength="24.4" clip-path="url(#breeze-help-line-56)">-h</text><text class="breeze-help-r1" x="207.4" y="1386.4" textLength="329.4" clip-path="url(#breeze-help-line-56)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-help-r5" x="1451.8" y="1386.4" textLength="12.2" clip-path="url(#breeze-help-line-56)">│</text><text class="breeze-help-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-help-line-56)">
+</text><text class="breeze-help-r5" x="0" y="1410.8" textLength="1464" clip-path="url(#breeze-help-line-57)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-help-line-57)">
+</text><text class="breeze-help-r5" x="0" y="1435.2" textLength="24.4" clip-path="url(#breeze-help-line-58)">╭─</text><text class="breeze-help-r5" x="24.4" y="1435.2" textLength="244" clip-path="url(#breeze-help-line-58)">&#160;Developer&#160;commands&#160;</text><text class="breeze-help-r5" x="268.4" y="1435.2" textLength="1171.2" clip-path="url(#breeze-help-line-58)">────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="1435.2" textLength="24.4" clip-path="url(#breeze-help-line-58)">─╮</text><text class="breeze-help-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-help-line-58)">
+</text><text class="breeze-help-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-help-line-59)">│</text><text class="breeze-help-r4" x="24.4" y="1459.6" textLength="280.6" clip-path="url(#breeze-help-line-59)">start-airflow&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1459.6" textLength="1110.2" clip-path="url(#breeze-help-line-59)">Enter&#160;breeze&#160;environment&#160;and&#160;starts&#160;all&#160;Airflow&#160;components&#160;in&#160;the&#160;tmux&#160;session.&#160;Compile&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1459.6" textLength="12.2" clip-path="url(#breeze-help-line-59)">│</text><text class="breeze-help-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-help-line-59)">
+</text><text class="breeze-help-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-help-line-60)">│</text><text class="breeze-help-r1" x="329.4" y="1484" textLength="1110.2" clip-path="url(#breeze-help-line-60)">assets&#160;if&#160;contents&#160;of&#160;www&#160;directory&#160;changed.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1484" textLength="12.2" clip-path="url(#breeze-help-line-60)">│</text><text class="breeze-help-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-help-line-60)">
+</text><text class="breeze-help-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-help-line-61)">│</text><text class="breeze-help-r4" x="24.4" y="1508.4" textLength="280.6" clip-path="url(#breeze-help-line-61)">static-checks&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1508.4" textLength="1110.2" clip-path="url(#breeze-help-line-61)">Run&#160;static&#160;checks.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1508.4" textLength="12.2" clip-path="url(#breeze-help-line-61)">│</text><text class="breeze-help-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-help-line-61)">
+</text><text class="breeze-help-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-help-line-62)">│</text><text class="breeze-help-r4" x="24.4" y="1532.8" textLength="280.6" clip-path="url(#breeze-help-line-62)">build-docs&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1532.8" textLength="1110.2" clip-path="url(#breeze-help-line-62)">Build&#160;documents.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1532.8" textLength="12.2" clip-path="url(#breeze-help-line-62)">│</text><text class="breeze-help-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-help-line-62)">
+</text><text class="breeze-help-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-help-line-63)">│</text><text class="breeze-help-r4" x="24.4" y="1557.2" textLength="280.6" clip-path="url(#breeze-help-line-63)">down&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1557.2" textLength="1110.2" clip-path="url(#breeze-help-line-63)">Stop&#160;running&#160;breeze&#160;environment.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1557.2" textLength="12.2" clip-path="url(#breeze-help-line-63)">│</text><text class="breeze-help-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-help-line-63)">
+</text><text class="breeze-help-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-help-line-64)">│</text><text class="breeze-help-r4" x="24.4" y="1581.6" textLength="280.6" clip-path="url(#breeze-help-line-64)">shell&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1581.6" textLength="1110.2" clip-path="url(#breeze-help-line-64)">Enter&#160;breeze&#160;environment.&#160;this&#160;is&#160;the&#160;default&#160;command&#160;use&#160;when&#160;no&#160;other&#160;is&#160;selected.&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1581.6" textLength="12.2" clip-path="url(#breeze-help-line-64)">│</text><text class="breeze-help-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-help-line-64)">
+</text><text class="breeze-help-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-help-line-65)">│</text><text class="breeze-help-r4" x="24.4" y="1606" textLength="280.6" clip-path="url(#breeze-help-line-65)">exec&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1606" textLength="1110.2" clip-path="url(#breeze-help-line-65)">Joins&#160;the&#160;interactive&#160;shell&#160;of&#160;running&#160;airflow&#160;container.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1606" textLength="12.2" clip-path="url(#breeze-help-line-65)">│</text><text class="breeze-help-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-help-line-65)">
+</text><text class="breeze-help-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-help-line-66)">│</text><text class="breeze-help-r4" x="24.4" y="1630.4" textLength="280.6" clip-path="url(#breeze-help-line-66)">run&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1630.4" textLength="1110.2" clip-path="url(#breeze-help-line-66)">Run&#160;a&#160;command&#160;in&#160;the&#160;Breeze&#160;environment&#160;without&#160;entering&#160;the&#160;interactive&#160;shell.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1630.4" textLength="12.2" clip-path="url(#breeze-help-line-66)">│</text><text class="breeze-help-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-help-line-66)">
+</text><text class="breeze-help-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-help-line-67)">│</text><text class="breeze-help-r4" x="24.4" y="1654.8" textLength="280.6" clip-path="url(#breeze-help-line-67)">compile-ui-assets&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1654.8" textLength="1110.2" clip-path="url(#breeze-help-line-67)">Compiles&#160;ui&#160;assets.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1654.8" textLength="12.2" clip-path="url(#breeze-help-line-67)">│</text><text class="breeze-help-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-help-line-67)">
+</text><text class="breeze-help-r5" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-help-line-68)">│</text><text class="breeze-help-r4" x="24.4" y="1679.2" textLength="280.6" clip-path="url(#breeze-help-line-68)">cleanup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1679.2" textLength="1110.2" clip-path="url(#breeze-help-line-68)">Cleans&#160;the&#160;cache&#160;of&#160;parameters,&#160;docker&#160;cache&#160;and&#160;optionally&#160;built&#160;CI/PROD&#160;images.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1679.2" textLength="12.2" clip-path="url(#breeze-help-line-68)">│</text><text class="breeze-help-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-help-line-68)">
+</text><text class="breeze-help-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-help-line-69)">│</text><text class="breeze-help-r4" x="24.4" y="1703.6" textLength="280.6" clip-path="url(#breeze-help-line-69)">generate-migration-file</text><text class="breeze-help-r1" x="329.4" y="1703.6" textLength="1110.2" clip-path="url(#breeze-help-line-69)">Autogenerate&#160;the&#160;alembic&#160;migration&#160;file&#160;for&#160;the&#160;ORM&#160;changes.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1703.6" textLength="12.2" clip-path="url(#breeze-help-line-69)">│</text><text class="breeze-help-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-help-line-69)">
+</text><text class="breeze-help-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-help-line-70)">│</text><text class="breeze-help-r4" x="24.4" y="1728" textLength="280.6" clip-path="url(#breeze-help-line-70)">doctor&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1728" textLength="1110.2" clip-path="url(#breeze-help-line-70)">Auto-healing&#160;of&#160;breeze&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1728" textLength="12.2" clip-path="url(#breeze-help-line-70)">│</text><text class="breeze-help-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-help-line-70)">
+</text><text class="breeze-help-r5" x="0" y="1752.4" textLength="1464" clip-path="url(#breeze-help-line-71)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1752.4" textLength="12.2" clip-path="url(#breeze-help-line-71)">
+</text><text class="breeze-help-r5" x="0" y="1776.8" textLength="24.4" clip-path="url(#breeze-help-line-72)">╭─</text><text class="breeze-help-r5" x="24.4" y="1776.8" textLength="219.6" clip-path="url(#breeze-help-line-72)">&#160;Testing&#160;commands&#160;</text><text class="breeze-help-r5" x="244" y="1776.8" textLength="1195.6" clip-path="url(#breeze-help-line-72)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="1776.8" textLength="24.4" clip-path="url(#breeze-help-line-72)">─╮</text><text class="breeze-help-r1" x="1464" y="1776.8" textLength="12.2" clip-path="url(#breeze-help-line-72)">
+</text><text class="breeze-help-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-help-line-73)">│</text><text class="breeze-help-r4" x="24.4" y="1801.2" textLength="183" clip-path="url(#breeze-help-line-73)">testing&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="231.8" y="1801.2" textLength="1207.8" clip-path="url(#breeze-help-line-73)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;run&#160;tests&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1801.2" textLength="12.2" clip-path="url(#breeze-help-line-73)">│</text><text class="breeze-help-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-help-line-73)">
+</text><text class="breeze-help-r5" x="0" y="1825.6" textLength="12.2" clip-path="url(#breeze-help-line-74)">│</text><text class="breeze-help-r4" x="24.4" y="1825.6" textLength="183" clip-path="url(#breeze-help-line-74)">k8s&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="231.8" y="1825.6" textLength="1207.8" clip-path="url(#breeze-help-line-74)">Tools&#160;that&#160;developers&#160;use&#160;to&#160;run&#160;Kubernetes&#160;tests&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1825.6" textLength="12.2" clip-path="url(#breeze-help-line-74)">│</text><text class="breeze-help-r1" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-help-line-74)">
+</text><text class="breeze-help-r5" x="0" y="1850" textLength="1464" clip-path="url(#breeze-help-line-75)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-help-line-75)">
+</text><text class="breeze-help-r5" x="0" y="1874.4" textLength="24.4" clip-path="url(#breeze-help-line-76)">╭─</text><text class="breeze-help-r5" x="24.4" y="1874.4" textLength="195.2" clip-path="url(#breeze-help-line-76)">&#160;Image&#160;commands&#160;</text><text class="breeze-help-r5" x="219.6" y="1874.4" textLength="1220" clip-path="url(#breeze-help-line-76)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="1874.4" textLength="24.4" clip-path="url(#breeze-help-line-76)">─╮</text><text class="breeze-help-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-help-line-76)">
+</text><text class="breeze-help-r5" x="0" y="1898.8" textLength="12.2" clip-path="url(#breeze-help-line-77)">│</text><text class="breeze-help-r4" x="24.4" y="1898.8" textLength="207.4" clip-path="url(#breeze-help-line-77)">ci-image&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="256.2" y="1898.8" textLength="1183.4" clip-path="url(#breeze-help-line-77)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;manually&#160;manage&#160;CI&#160;images&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1898.8" textLength="12.2" clip-path="url(#breeze-help-line-77)">│</text><text class="breeze-help-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-help-line-77)">
+</text><text class="breeze-help-r5" x="0" y="1923.2" textLength="12.2" clip-path="url(#breeze-help-line-78)">│</text><text class="breeze-help-r4" x="24.4" y="1923.2" textLength="207.4" clip-path="url(#breeze-help-line-78)">prod-image&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="256.2" y="1923.2" textLength="1183.4" clip-path="url(#breeze-help-line-78)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;manually&#160;manage&#160;PROD&#160;images&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1923.2" textLength="12.2" clip-path="url(#breeze-help-line-78)">│</text><text class="breeze-help-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-help-line-78)">
+</text><text class="breeze-help-r5" x="0" y="1947.6" textLength="1464" clip-path="url(#breeze-help-line-79)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1947.6" textLength="12.2" clip-path="url(#breeze-help-line-79)">
+</text><text class="breeze-help-r5" x="0" y="1972" textLength="24.4" clip-path="url(#breeze-help-line-80)">╭─</text><text class="breeze-help-r5" x="24.4" y="1972" textLength="353.8" clip-path="url(#breeze-help-line-80)">&#160;Release&#160;management&#160;commands&#160;</text><text class="breeze-help-r5" x="378.2" y="1972" textLength="1061.4" clip-path="url(#breeze-help-line-80)">───────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="1972" textLength="24.4" clip-path="url(#breeze-help-line-80)">─╮</text><text class="breeze-help-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-help-line-80)">
+</text><text class="breeze-help-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-help-line-81)">│</text><text class="breeze-help-r4" x="24.4" y="1996.4" textLength="280.6" clip-path="url(#breeze-help-line-81)">release-management&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1996.4" textLength="1110.2" clip-path="url(#breeze-help-line-81)">Tools&#160;that&#160;release&#160;managers&#160;can&#160;use&#160;to&#160;prepare&#160;and&#160;manage&#160;Airflow&#160;releases&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="1996.4" textLength="12.2" clip-path="url(#breeze-help-line-81)">│</text><text class="breeze-help-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-help-line-81)">
+</text><text class="breeze-help-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-help-line-82)">│</text><text class="breeze-help-r4" x="24.4" y="2020.8" textLength="280.6" clip-path="url(#breeze-help-line-82)">sbom&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="2020.8" textLength="1110.2" clip-path="url(#breeze-help-line-82)">Tools&#160;that&#160;release&#160;managers&#160;can&#160;use&#160;to&#160;prepare&#160;sbom&#160;information&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="2020.8" textLength="12.2" clip-path="url(#breeze-help-line-82)">│</text><text class="breeze-help-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-help-line-82)">
+</text><text class="breeze-help-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-help-line-83)">│</text><text class="breeze-help-r4" x="24.4" y="2045.2" textLength="280.6" clip-path="url(#breeze-help-line-83)">workflow-run&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="2045.2" textLength="1110.2" clip-path="url(#breeze-help-line-83)">Tools&#160;to&#160;manage&#160;Airflow&#160;repository&#160;workflows&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="2045.2" textLength="12.2" clip-path="url(#breeze-help-line-83)">│</text><text class="breeze-help-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-help-line-83)">
+</text><text class="breeze-help-r5" x="0" y="2069.6" textLength="1464" clip-path="url(#breeze-help-line-84)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-help-line-84)">
+</text><text class="breeze-help-r5" x="0" y="2094" textLength="24.4" clip-path="url(#breeze-help-line-85)">╭─</text><text class="breeze-help-r5" x="24.4" y="2094" textLength="195.2" clip-path="url(#breeze-help-line-85)">&#160;Other&#160;commands&#160;</text><text class="breeze-help-r5" x="219.6" y="2094" textLength="1220" clip-path="url(#breeze-help-line-85)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r5" x="1439.6" y="2094" textLength="24.4" clip-path="url(#breeze-help-line-85)">─╮</text><text class="breeze-help-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-help-line-85)">
+</text><text class="breeze-help-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-help-line-86)">│</text><text class="breeze-help-r4" x="24.4" y="2118.4" textLength="122" clip-path="url(#breeze-help-line-86)">setup&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="170.8" y="2118.4" textLength="1268.8" clip-path="url(#breeze-help-line-86)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;configure&#160;Breeze&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="2118.4" textLength="12.2" clip-path="url(#breeze-help-line-86)">│</text><text class="breeze-help-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-help-line-86)">
+</text><text class="breeze-help-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-help-line-87)">│</text><text class="breeze-help-r4" x="24.4" y="2142.8" textLength="122" clip-path="url(#breeze-help-line-87)">ci&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="170.8" y="2142.8" textLength="1268.8" clip-path="url(#breeze-help-line-87)">Tools&#160;that&#160;CI&#160;workflows&#160;use&#160;to&#160;cleanup/manage&#160;CI&#160;environment&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="2142.8" textLength="12.2" clip-path="url(#breeze-help-line-87)">│</text><text class="breeze-help-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-help-line-87)">
+</text><text class="breeze-help-r5" x="0" y="2167.2" textLength="1464" clip-path="url(#breeze-help-line-88)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-help-line-88)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_run.svg b/dev/breeze/doc/images/output_run.svg
index b672a174b29e0..1d3a5b1917c59 100644
--- a/dev/breeze/doc/images/output_run.svg
+++ b/dev/breeze/doc/images/output_run.svg
@@ -197,9 +197,9 @@
 </text><text class="breeze-run-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-run-line-5)">╭─</text><text class="breeze-run-r5" x="24.4" y="142" textLength="231.8" clip-path="url(#breeze-run-line-5)">&#160;Command&#160;execution&#160;</text><text class="breeze-run-r5" x="256.2" y="142" textLength="1183.4" clip-path="url(#breeze-run-line-5)">─────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-run-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-run-line-5)">─╮</text><text class="breeze-run-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-run-line-5)">
 </text><text class="breeze-run-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-run-line-6)">│</text><text class="breeze-run-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-run-line-6)">--python</text><text class="breeze-run-r6" x="268.4" y="166.4" textLength="24.4" clip-path="url(#breeze-run-line-6)">-p</text><text class="breeze-run-r1" x="317.2" y="166.4" textLength="732" clip-path="url(#breeze-run-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-run-r7" x="1061.4" y="166.4" textLength="268.4" clip-path="url(#breeze-run-line-6)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)</text><text class="breeze-run-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-run-line-6)">│</text><text class="breeze-run-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-run-line-6)">
 </text><text class="breeze-run-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-run-line-7)">│</text><text class="breeze-run-r5" x="317.2" y="190.8" textLength="732" clip-path="url(#breeze-run-line-7)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-run-line-7)">│</text><text class="breeze-run-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-run-line-7)">
-</text><text class="breeze-run-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-run-line-8)">│</text><text class="breeze-run-r4" x="24.4" y="215.2" textLength="109.8" clip-path="url(#breeze-run-line-8)">--backend</text><text class="breeze-run-r6" x="268.4" y="215.2" textLength="24.4" clip-path="url(#breeze-run-line-8)">-b</text><text class="breeze-run-r1" x="317.2" y="215.2" textLength="1122.4" clip-path="url(#breeze-run-line-8)">Database&#160;backend&#160;to&#160;use.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;Breeze&#160;will&#160;start&#160;with&#160;an&#160;invalid&#160;database&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-run-line-8)">│</text><text class="breeze-run-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-run-line-8)">
-</text><text class="breeze-run-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-run-line-9)">│</text><text class="breeze-run-r1" x="317.2" y="239.6" textLength="1122.4" clip-path="url(#breeze-run-line-9)">configuration,&#160;meaning&#160;there&#160;will&#160;be&#160;no&#160;database&#160;available,&#160;and&#160;any&#160;attempts&#160;to&#160;connect&#160;to&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-run-line-9)">│</text><text class="breeze-run-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-run-line-9)">
-</text><text class="breeze-run-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-run-line-10)">│</text><text class="breeze-run-r1" x="317.2" y="264" textLength="1122.4" clip-path="url(#breeze-run-line-10)">the&#160;Airflow&#160;database&#160;will&#160;fail.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-run-line-10)">│</text><text class="breeze-run-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-run-line-10)">
+</text><text class="breeze-run-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-run-line-8)">│</text><text class="breeze-run-r4" x="24.4" y="215.2" textLength="109.8" clip-path="url(#breeze-run-line-8)">--backend</text><text class="breeze-run-r6" x="268.4" y="215.2" textLength="24.4" clip-path="url(#breeze-run-line-8)">-b</text><text class="breeze-run-r1" x="317.2" y="215.2" textLength="1122.4" clip-path="url(#breeze-run-line-8)">Database&#160;backend&#160;to&#160;use.&#160;Default&#160;is&#160;&#x27;sqlite&#x27;.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;Breeze&#160;will&#160;start&#160;with&#160;an</text><text class="breeze-run-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-run-line-8)">│</text><text class="breeze-run-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-run-line-8)">
+</text><text class="breeze-run-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-run-line-9)">│</text><text class="breeze-run-r1" x="317.2" y="239.6" textLength="1122.4" clip-path="url(#breeze-run-line-9)">invalid&#160;database&#160;configuration&#160;—&#160;no&#160;database&#160;will&#160;be&#160;available,&#160;and&#160;any&#160;attempt&#160;to&#160;run&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-run-line-9)">│</text><text class="breeze-run-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-run-line-9)">
+</text><text class="breeze-run-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-run-line-10)">│</text><text class="breeze-run-r1" x="317.2" y="264" textLength="1122.4" clip-path="url(#breeze-run-line-10)">Airflow&#160;will&#160;fail.&#160;Use&#160;&#x27;none&#x27;&#160;only&#160;for&#160;specific&#160;non-DB&#160;test&#160;cases.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-run-line-10)">│</text><text class="breeze-run-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-run-line-10)">
 </text><text class="breeze-run-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-run-line-11)">│</text><text class="breeze-run-r7" x="317.2" y="288.4" textLength="1122.4" clip-path="url(#breeze-run-line-11)">(&gt;sqlite&lt;&#160;|&#160;mysql&#160;|&#160;postgres&#160;|&#160;none)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-run-line-11)">│</text><text class="breeze-run-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-run-line-11)">
 </text><text class="breeze-run-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-run-line-12)">│</text><text class="breeze-run-r5" x="317.2" y="312.8" textLength="1122.4" clip-path="url(#breeze-run-line-12)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-run-line-12)">│</text><text class="breeze-run-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-run-line-12)">
 </text><text class="breeze-run-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-run-line-13)">│</text><text class="breeze-run-r4" x="24.4" y="337.2" textLength="219.6" clip-path="url(#breeze-run-line-13)">--postgres-version</text><text class="breeze-run-r6" x="268.4" y="337.2" textLength="24.4" clip-path="url(#breeze-run-line-13)">-P</text><text class="breeze-run-r1" x="317.2" y="337.2" textLength="305" clip-path="url(#breeze-run-line-13)">Version&#160;of&#160;Postgres&#160;used.</text><text class="breeze-run-r7" x="634.4" y="337.2" textLength="317.2" clip-path="url(#breeze-run-line-13)">(&gt;13&lt;&#160;|&#160;14&#160;|&#160;15&#160;|&#160;16&#160;|&#160;17)</text><text class="breeze-run-r5" x="963.8" y="337.2" textLength="158.6" clip-path="url(#breeze-run-line-13)">[default:&#160;13]</text><text class="breeze-run-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-run-line-13)">│</text><text class="breeze-run-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-run-line-13)">
diff --git a/dev/breeze/doc/images/output_run.txt b/dev/breeze/doc/images/output_run.txt
index 53c445f3e151b..20c4b1e101967 100644
--- a/dev/breeze/doc/images/output_run.txt
+++ b/dev/breeze/doc/images/output_run.txt
@@ -1 +1 @@
-820a829e6ae777a8625862d010f8e693
+a091135537dd5028ed149ca9660fdc1e
diff --git a/dev/breeze/doc/images/output_setup_config.svg b/dev/breeze/doc/images/output_setup_config.svg
index 4c99903272683..6522794abe14c 100644
--- a/dev/breeze/doc/images/output_setup_config.svg
+++ b/dev/breeze/doc/images/output_setup_config.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 611.1999999999999" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 635.5999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-setup-config-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="560.1999999999999" />
+      <rect x="0" y="0" width="1463.0" height="584.5999999999999" />
     </clipPath>
     <clipPath id="breeze-setup-config-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -111,9 +111,12 @@
 <clipPath id="breeze-setup-config-line-21">
     <rect x="0" y="513.9" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-setup-config-line-22">
+    <rect x="0" y="538.3" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="609.2" rx="8"/><text class="breeze-setup-config-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;setup&#160;config</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="633.6" rx="8"/><text class="breeze-setup-config-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;setup&#160;config</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -132,20 +135,21 @@
 </text><text class="breeze-setup-config-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-6)">│</text><text class="breeze-setup-config-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-setup-config-line-6)">--python</text><text class="breeze-setup-config-r6" x="390.4" y="166.4" textLength="24.4" clip-path="url(#breeze-setup-config-line-6)">-p</text><text class="breeze-setup-config-r1" x="475.8" y="166.4" textLength="732" clip-path="url(#breeze-setup-config-line-6)">Python&#160;major/minor&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;for&#160;images.</text><text class="breeze-setup-config-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-6)">│</text><text class="breeze-setup-config-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-6)">
 </text><text class="breeze-setup-config-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-7)">│</text><text class="breeze-setup-config-r7" x="475.8" y="190.8" textLength="732" clip-path="url(#breeze-setup-config-line-7)">(&gt;3.10&lt;&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-config-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-7)">│</text><text class="breeze-setup-config-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-7)">
 </text><text class="breeze-setup-config-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-8)">│</text><text class="breeze-setup-config-r5" x="475.8" y="215.2" textLength="732" clip-path="url(#breeze-setup-config-line-8)">[default:&#160;3.10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-config-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-8)">│</text><text class="breeze-setup-config-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-8)">
-</text><text class="breeze-setup-config-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-9)">│</text><text class="breeze-setup-config-r4" x="24.4" y="239.6" textLength="109.8" clip-path="url(#breeze-setup-config-line-9)">--backend</text><text class="breeze-setup-config-r6" x="390.4" y="239.6" textLength="24.4" clip-path="url(#breeze-setup-config-line-9)">-b</text><text class="breeze-setup-config-r1" x="475.8" y="239.6" textLength="963.8" clip-path="url(#breeze-setup-config-line-9)">Database&#160;backend&#160;to&#160;use.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;Breeze&#160;will&#160;start&#160;with&#160;an&#160;invalid</text><text class="breeze-setup-config-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-9)">│</text><text class="breeze-setup-config-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-9)">
-</text><text class="breeze-setup-config-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-setup-config-line-10)">│</text><text class="breeze-setup-config-r1" x="475.8" y="264" textLength="963.8" clip-path="url(#breeze-setup-config-line-10)">database&#160;configuration,&#160;meaning&#160;there&#160;will&#160;be&#160;no&#160;database&#160;available,&#160;and&#160;any&#160;&#160;&#160;</text><text class="breeze-setup-config-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-setup-config-line-10)">│</text><text class="breeze-setup-config-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-setup-config-line-10)">
-</text><text class="breeze-setup-config-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-11)">│</text><text class="breeze-setup-config-r1" x="475.8" y="288.4" textLength="963.8" clip-path="url(#breeze-setup-config-line-11)">attempts&#160;to&#160;connect&#160;to&#160;the&#160;Airflow&#160;database&#160;will&#160;fail.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-config-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-11)">│</text><text class="breeze-setup-config-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-11)">
-</text><text class="breeze-setup-config-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-12)">│</text><text class="breeze-setup-config-r7" x="475.8" y="312.8" textLength="963.8" clip-path="url(#breeze-setup-config-line-12)">(&gt;sqlite&lt;&#160;|&#160;mysql&#160;|&#160;postgres&#160;|&#160;none)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-config-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-12)">│</text><text class="breeze-setup-config-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-12)">
-</text><text class="breeze-setup-config-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-13)">│</text><text class="breeze-setup-config-r5" x="475.8" y="337.2" textLength="963.8" clip-path="url(#breeze-setup-config-line-13)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-config-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-13)">│</text><text class="breeze-setup-config-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-13)">
-</text><text class="breeze-setup-config-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-14)">│</text><text class="breeze-setup-config-r4" x="24.4" y="361.6" textLength="219.6" clip-path="url(#breeze-setup-config-line-14)">--postgres-version</text><text class="breeze-setup-config-r6" x="390.4" y="361.6" textLength="24.4" clip-path="url(#breeze-setup-config-line-14)">-P</text><text class="breeze-setup-config-r1" x="475.8" y="361.6" textLength="305" clip-path="url(#breeze-setup-config-line-14)">Version&#160;of&#160;Postgres&#160;used.</text><text class="breeze-setup-config-r7" x="793" y="361.6" textLength="317.2" clip-path="url(#breeze-setup-config-line-14)">(&gt;13&lt;&#160;|&#160;14&#160;|&#160;15&#160;|&#160;16&#160;|&#160;17)</text><text class="breeze-setup-config-r5" x="1122.4" y="361.6" textLength="158.6" clip-path="url(#breeze-setup-config-line-14)">[default:&#160;13]</text><text class="breeze-setup-config-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-14)">│</text><text class="breeze-setup-config-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-14)">
-</text><text class="breeze-setup-config-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-setup-config-line-15)">│</text><text class="breeze-setup-config-r4" x="24.4" y="386" textLength="183" clip-path="url(#breeze-setup-config-line-15)">--mysql-version</text><text class="breeze-setup-config-r6" x="390.4" y="386" textLength="24.4" clip-path="url(#breeze-setup-config-line-15)">-M</text><text class="breeze-setup-config-r1" x="475.8" y="386" textLength="268.4" clip-path="url(#breeze-setup-config-line-15)">Version&#160;of&#160;MySQL&#160;used.</text><text class="breeze-setup-config-r7" x="756.4" y="386" textLength="158.6" clip-path="url(#breeze-setup-config-line-15)">(&gt;8.0&lt;&#160;|&#160;8.4)</text><text class="breeze-setup-config-r5" x="927.2" y="386" textLength="170.8" clip-path="url(#breeze-setup-config-line-15)">[default:&#160;8.0]</text><text class="breeze-setup-config-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-setup-config-line-15)">│</text><text class="breeze-setup-config-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-setup-config-line-15)">
-</text><text class="breeze-setup-config-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-16)">│</text><text class="breeze-setup-config-r4" x="24.4" y="410.4" textLength="146.4" clip-path="url(#breeze-setup-config-line-16)">--cheatsheet</text><text class="breeze-setup-config-r1" x="170.8" y="410.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-16)">/</text><text class="breeze-setup-config-r4" x="183" y="410.4" textLength="183" clip-path="url(#breeze-setup-config-line-16)">--no-cheatsheet</text><text class="breeze-setup-config-r6" x="390.4" y="410.4" textLength="24.4" clip-path="url(#breeze-setup-config-line-16)">-C</text><text class="breeze-setup-config-r1" x="414.8" y="410.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-16)">/</text><text class="breeze-setup-config-r6" x="427" y="410.4" textLength="24.4" clip-path="url(#breeze-setup-config-line-16)">-c</text><text class="breeze-setup-config-r1" x="475.8" y="410.4" textLength="317.2" clip-path="url(#breeze-setup-config-line-16)">Enable/disable&#160;cheatsheet.</text><text class="breeze-setup-config-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-16)">│</text><text class="breeze-setup-config-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-16)">
-</text><text class="breeze-setup-config-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-17)">│</text><text class="breeze-setup-config-r4" x="24.4" y="434.8" textLength="122" clip-path="url(#breeze-setup-config-line-17)">--asciiart</text><text class="breeze-setup-config-r1" x="146.4" y="434.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-17)">/</text><text class="breeze-setup-config-r4" x="158.6" y="434.8" textLength="158.6" clip-path="url(#breeze-setup-config-line-17)">--no-asciiart</text><text class="breeze-setup-config-r6" x="390.4" y="434.8" textLength="24.4" clip-path="url(#breeze-setup-config-line-17)">-A</text><text class="breeze-setup-config-r1" x="414.8" y="434.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-17)">/</text><text class="breeze-setup-config-r6" x="427" y="434.8" textLength="24.4" clip-path="url(#breeze-setup-config-line-17)">-a</text><text class="breeze-setup-config-r1" x="475.8" y="434.8" textLength="292.8" clip-path="url(#breeze-setup-config-line-17)">Enable/disable&#160;ASCIIart.</text><text class="breeze-setup-config-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-17)">│</text><text class="breeze-setup-config-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-17)">
-</text><text class="breeze-setup-config-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-18)">│</text><text class="breeze-setup-config-r4" x="24.4" y="459.2" textLength="97.6" clip-path="url(#breeze-setup-config-line-18)">--colour</text><text class="breeze-setup-config-r1" x="122" y="459.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-18)">/</text><text class="breeze-setup-config-r4" x="134.2" y="459.2" textLength="134.2" clip-path="url(#breeze-setup-config-line-18)">--no-colour</text><text class="breeze-setup-config-r1" x="475.8" y="459.2" textLength="927.2" clip-path="url(#breeze-setup-config-line-18)">Enable/disable&#160;Colour&#160;mode&#160;(useful&#160;for&#160;colour&#160;blind-friendly&#160;communication).</text><text class="breeze-setup-config-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-18)">│</text><text class="breeze-setup-config-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-18)">
-</text><text class="breeze-setup-config-r5" x="0" y="483.6" textLength="1464" clip-path="url(#breeze-setup-config-line-19)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-config-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-19)">
-</text><text class="breeze-setup-config-r5" x="0" y="508" textLength="24.4" clip-path="url(#breeze-setup-config-line-20)">╭─</text><text class="breeze-setup-config-r5" x="24.4" y="508" textLength="195.2" clip-path="url(#breeze-setup-config-line-20)">&#160;Common&#160;options&#160;</text><text class="breeze-setup-config-r5" x="219.6" y="508" textLength="1220" clip-path="url(#breeze-setup-config-line-20)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-setup-config-r5" x="1439.6" y="508" textLength="24.4" clip-path="url(#breeze-setup-config-line-20)">─╮</text><text class="breeze-setup-config-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-setup-config-line-20)">
-</text><text class="breeze-setup-config-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-21)">│</text><text class="breeze-setup-config-r4" x="24.4" y="532.4" textLength="73.2" clip-path="url(#breeze-setup-config-line-21)">--help</text><text class="breeze-setup-config-r6" x="122" y="532.4" textLength="24.4" clip-path="url(#breeze-setup-config-line-21)">-h</text><text class="breeze-setup-config-r1" x="170.8" y="532.4" textLength="329.4" clip-path="url(#breeze-setup-config-line-21)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-setup-config-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-21)">│</text><text class="breeze-setup-config-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-21)">
-</text><text class="breeze-setup-config-r5" x="0" y="556.8" textLength="1464" clip-path="url(#breeze-setup-config-line-22)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-config-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-22)">
+</text><text class="breeze-setup-config-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-9)">│</text><text class="breeze-setup-config-r4" x="24.4" y="239.6" textLength="109.8" clip-path="url(#breeze-setup-config-line-9)">--backend</text><text class="breeze-setup-config-r6" x="390.4" y="239.6" textLength="24.4" clip-path="url(#breeze-setup-config-line-9)">-b</text><text class="breeze-setup-config-r1" x="475.8" y="239.6" textLength="963.8" clip-path="url(#breeze-setup-config-line-9)">Database&#160;backend&#160;to&#160;use.&#160;Default&#160;is&#160;&#x27;sqlite&#x27;.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;Breeze&#160;will&#160;</text><text class="breeze-setup-config-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-9)">│</text><text class="breeze-setup-config-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-9)">
+</text><text class="breeze-setup-config-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-setup-config-line-10)">│</text><text class="breeze-setup-config-r1" x="475.8" y="264" textLength="963.8" clip-path="url(#breeze-setup-config-line-10)">start&#160;with&#160;an&#160;invalid&#160;database&#160;configuration&#160;—&#160;no&#160;database&#160;will&#160;be&#160;available,&#160;&#160;</text><text class="breeze-setup-config-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-setup-config-line-10)">│</text><text class="breeze-setup-config-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-setup-config-line-10)">
+</text><text class="breeze-setup-config-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-11)">│</text><text class="breeze-setup-config-r1" x="475.8" y="288.4" textLength="963.8" clip-path="url(#breeze-setup-config-line-11)">and&#160;any&#160;attempt&#160;to&#160;run&#160;Airflow&#160;will&#160;fail.&#160;Use&#160;&#x27;none&#x27;&#160;only&#160;for&#160;specific&#160;non-DB&#160;&#160;</text><text class="breeze-setup-config-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-11)">│</text><text class="breeze-setup-config-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-11)">
+</text><text class="breeze-setup-config-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-12)">│</text><text class="breeze-setup-config-r1" x="475.8" y="312.8" textLength="963.8" clip-path="url(#breeze-setup-config-line-12)">test&#160;cases.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-config-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-12)">│</text><text class="breeze-setup-config-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-12)">
+</text><text class="breeze-setup-config-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-13)">│</text><text class="breeze-setup-config-r7" x="475.8" y="337.2" textLength="963.8" clip-path="url(#breeze-setup-config-line-13)">(&gt;sqlite&lt;&#160;|&#160;mysql&#160;|&#160;postgres&#160;|&#160;none)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-config-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-13)">│</text><text class="breeze-setup-config-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-13)">
+</text><text class="breeze-setup-config-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-14)">│</text><text class="breeze-setup-config-r5" x="475.8" y="361.6" textLength="963.8" clip-path="url(#breeze-setup-config-line-14)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-config-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-14)">│</text><text class="breeze-setup-config-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-14)">
+</text><text class="breeze-setup-config-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-setup-config-line-15)">│</text><text class="breeze-setup-config-r4" x="24.4" y="386" textLength="219.6" clip-path="url(#breeze-setup-config-line-15)">--postgres-version</text><text class="breeze-setup-config-r6" x="390.4" y="386" textLength="24.4" clip-path="url(#breeze-setup-config-line-15)">-P</text><text class="breeze-setup-config-r1" x="475.8" y="386" textLength="305" clip-path="url(#breeze-setup-config-line-15)">Version&#160;of&#160;Postgres&#160;used.</text><text class="breeze-setup-config-r7" x="793" y="386" textLength="317.2" clip-path="url(#breeze-setup-config-line-15)">(&gt;13&lt;&#160;|&#160;14&#160;|&#160;15&#160;|&#160;16&#160;|&#160;17)</text><text class="breeze-setup-config-r5" x="1122.4" y="386" textLength="158.6" clip-path="url(#breeze-setup-config-line-15)">[default:&#160;13]</text><text class="breeze-setup-config-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-setup-config-line-15)">│</text><text class="breeze-setup-config-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-setup-config-line-15)">
+</text><text class="breeze-setup-config-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-16)">│</text><text class="breeze-setup-config-r4" x="24.4" y="410.4" textLength="183" clip-path="url(#breeze-setup-config-line-16)">--mysql-version</text><text class="breeze-setup-config-r6" x="390.4" y="410.4" textLength="24.4" clip-path="url(#breeze-setup-config-line-16)">-M</text><text class="breeze-setup-config-r1" x="475.8" y="410.4" textLength="268.4" clip-path="url(#breeze-setup-config-line-16)">Version&#160;of&#160;MySQL&#160;used.</text><text class="breeze-setup-config-r7" x="756.4" y="410.4" textLength="158.6" clip-path="url(#breeze-setup-config-line-16)">(&gt;8.0&lt;&#160;|&#160;8.4)</text><text class="breeze-setup-config-r5" x="927.2" y="410.4" textLength="170.8" clip-path="url(#breeze-setup-config-line-16)">[default:&#160;8.0]</text><text class="breeze-setup-config-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-16)">│</text><text class="breeze-setup-config-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-16)">
+</text><text class="breeze-setup-config-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-17)">│</text><text class="breeze-setup-config-r4" x="24.4" y="434.8" textLength="146.4" clip-path="url(#breeze-setup-config-line-17)">--cheatsheet</text><text class="breeze-setup-config-r1" x="170.8" y="434.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-17)">/</text><text class="breeze-setup-config-r4" x="183" y="434.8" textLength="183" clip-path="url(#breeze-setup-config-line-17)">--no-cheatsheet</text><text class="breeze-setup-config-r6" x="390.4" y="434.8" textLength="24.4" clip-path="url(#breeze-setup-config-line-17)">-C</text><text class="breeze-setup-config-r1" x="414.8" y="434.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-17)">/</text><text class="breeze-setup-config-r6" x="427" y="434.8" textLength="24.4" clip-path="url(#breeze-setup-config-line-17)">-c</text><text class="breeze-setup-config-r1" x="475.8" y="434.8" textLength="317.2" clip-path="url(#breeze-setup-config-line-17)">Enable/disable&#160;cheatsheet.</text><text class="breeze-setup-config-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-17)">│</text><text class="breeze-setup-config-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-17)">
+</text><text class="breeze-setup-config-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-18)">│</text><text class="breeze-setup-config-r4" x="24.4" y="459.2" textLength="122" clip-path="url(#breeze-setup-config-line-18)">--asciiart</text><text class="breeze-setup-config-r1" x="146.4" y="459.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-18)">/</text><text class="breeze-setup-config-r4" x="158.6" y="459.2" textLength="158.6" clip-path="url(#breeze-setup-config-line-18)">--no-asciiart</text><text class="breeze-setup-config-r6" x="390.4" y="459.2" textLength="24.4" clip-path="url(#breeze-setup-config-line-18)">-A</text><text class="breeze-setup-config-r1" x="414.8" y="459.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-18)">/</text><text class="breeze-setup-config-r6" x="427" y="459.2" textLength="24.4" clip-path="url(#breeze-setup-config-line-18)">-a</text><text class="breeze-setup-config-r1" x="475.8" y="459.2" textLength="292.8" clip-path="url(#breeze-setup-config-line-18)">Enable/disable&#160;ASCIIart.</text><text class="breeze-setup-config-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-18)">│</text><text class="breeze-setup-config-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-18)">
+</text><text class="breeze-setup-config-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-19)">│</text><text class="breeze-setup-config-r4" x="24.4" y="483.6" textLength="97.6" clip-path="url(#breeze-setup-config-line-19)">--colour</text><text class="breeze-setup-config-r1" x="122" y="483.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-19)">/</text><text class="breeze-setup-config-r4" x="134.2" y="483.6" textLength="134.2" clip-path="url(#breeze-setup-config-line-19)">--no-colour</text><text class="breeze-setup-config-r1" x="475.8" y="483.6" textLength="927.2" clip-path="url(#breeze-setup-config-line-19)">Enable/disable&#160;Colour&#160;mode&#160;(useful&#160;for&#160;colour&#160;blind-friendly&#160;communication).</text><text class="breeze-setup-config-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-19)">│</text><text class="breeze-setup-config-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-19)">
+</text><text class="breeze-setup-config-r5" x="0" y="508" textLength="1464" clip-path="url(#breeze-setup-config-line-20)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-config-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-setup-config-line-20)">
+</text><text class="breeze-setup-config-r5" x="0" y="532.4" textLength="24.4" clip-path="url(#breeze-setup-config-line-21)">╭─</text><text class="breeze-setup-config-r5" x="24.4" y="532.4" textLength="195.2" clip-path="url(#breeze-setup-config-line-21)">&#160;Common&#160;options&#160;</text><text class="breeze-setup-config-r5" x="219.6" y="532.4" textLength="1220" clip-path="url(#breeze-setup-config-line-21)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-setup-config-r5" x="1439.6" y="532.4" textLength="24.4" clip-path="url(#breeze-setup-config-line-21)">─╮</text><text class="breeze-setup-config-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-21)">
+</text><text class="breeze-setup-config-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-22)">│</text><text class="breeze-setup-config-r4" x="24.4" y="556.8" textLength="73.2" clip-path="url(#breeze-setup-config-line-22)">--help</text><text class="breeze-setup-config-r6" x="122" y="556.8" textLength="24.4" clip-path="url(#breeze-setup-config-line-22)">-h</text><text class="breeze-setup-config-r1" x="170.8" y="556.8" textLength="329.4" clip-path="url(#breeze-setup-config-line-22)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-setup-config-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-22)">│</text><text class="breeze-setup-config-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-22)">
+</text><text class="breeze-setup-config-r5" x="0" y="581.2" textLength="1464" clip-path="url(#breeze-setup-config-line-23)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-config-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-23)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_setup_config.txt b/dev/breeze/doc/images/output_setup_config.txt
index 6a52e60b0b458..1d1979ee7b549 100644
--- a/dev/breeze/doc/images/output_setup_config.txt
+++ b/dev/breeze/doc/images/output_setup_config.txt
@@ -1 +1 @@
-ce0a944326c3418706b7aa90d730e186
+5c5c53e9979b00263afb8acde17460fc
diff --git a/dev/breeze/doc/images/output_shell.svg b/dev/breeze/doc/images/output_shell.svg
index 34bf0f927e061..6010232f0caee 100644
--- a/dev/breeze/doc/images/output_shell.svg
+++ b/dev/breeze/doc/images/output_shell.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 4246.8" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 4271.2" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-shell-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="4195.8" />
+      <rect x="0" y="0" width="1463.0" height="4220.2" />
     </clipPath>
     <clipPath id="breeze-shell-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -558,9 +558,12 @@
 <clipPath id="breeze-shell-line-170">
     <rect x="0" y="4149.5" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-shell-line-171">
+    <rect x="0" y="4173.9" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="4244.8" rx="8"/><text class="breeze-shell-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;shell</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="4269.2" rx="8"/><text class="breeze-shell-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;shell</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -618,130 +621,131 @@
 </text><text class="breeze-shell-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-shell-line-45)">│</text><text class="breeze-shell-r5" x="475.8" y="1118" textLength="963.8" clip-path="url(#breeze-shell-line-45)">[default:&#160;auto]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1118" textLength="12.2" clip-path="url(#breeze-shell-line-45)">│</text><text class="breeze-shell-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-shell-line-45)">
 </text><text class="breeze-shell-r5" x="0" y="1142.4" textLength="1464" clip-path="url(#breeze-shell-line-46)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#breeze-shell-line-46)">
 </text><text class="breeze-shell-r5" x="0" y="1166.8" textLength="24.4" clip-path="url(#breeze-shell-line-47)">╭─</text><text class="breeze-shell-r5" x="24.4" y="1166.8" textLength="122" clip-path="url(#breeze-shell-line-47)">&#160;Database&#160;</text><text class="breeze-shell-r5" x="146.4" y="1166.8" textLength="1293.2" clip-path="url(#breeze-shell-line-47)">──────────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="1166.8" textLength="24.4" clip-path="url(#breeze-shell-line-47)">─╮</text><text class="breeze-shell-r1" x="1464" y="1166.8" textLength="12.2" clip-path="url(#breeze-shell-line-47)">
-</text><text class="breeze-shell-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-shell-line-48)">│</text><text class="breeze-shell-r4" x="24.4" y="1191.2" textLength="109.8" clip-path="url(#breeze-shell-line-48)">--backend</text><text class="breeze-shell-r6" x="268.4" y="1191.2" textLength="24.4" clip-path="url(#breeze-shell-line-48)">-b</text><text class="breeze-shell-r1" x="488" y="1191.2" textLength="951.6" clip-path="url(#breeze-shell-line-48)">Database&#160;backend&#160;to&#160;use.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;Breeze&#160;will&#160;start&#160;with&#160;an&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1191.2" textLength="12.2" clip-path="url(#breeze-shell-line-48)">│</text><text class="breeze-shell-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#breeze-shell-line-48)">
-</text><text class="breeze-shell-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-shell-line-49)">│</text><text class="breeze-shell-r1" x="488" y="1215.6" textLength="951.6" clip-path="url(#breeze-shell-line-49)">invalid&#160;database&#160;configuration,&#160;meaning&#160;there&#160;will&#160;be&#160;no&#160;database&#160;available,&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1215.6" textLength="12.2" clip-path="url(#breeze-shell-line-49)">│</text><text class="breeze-shell-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-shell-line-49)">
-</text><text class="breeze-shell-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-shell-line-50)">│</text><text class="breeze-shell-r1" x="488" y="1240" textLength="951.6" clip-path="url(#breeze-shell-line-50)">and&#160;any&#160;attempts&#160;to&#160;connect&#160;to&#160;the&#160;Airflow&#160;database&#160;will&#160;fail.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1240" textLength="12.2" clip-path="url(#breeze-shell-line-50)">│</text><text class="breeze-shell-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-shell-line-50)">
-</text><text class="breeze-shell-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-shell-line-51)">│</text><text class="breeze-shell-r7" x="488" y="1264.4" textLength="951.6" clip-path="url(#breeze-shell-line-51)">(&gt;sqlite&lt;&#160;|&#160;mysql&#160;|&#160;postgres&#160;|&#160;none)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1264.4" textLength="12.2" clip-path="url(#breeze-shell-line-51)">│</text><text class="breeze-shell-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-shell-line-51)">
-</text><text class="breeze-shell-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-shell-line-52)">│</text><text class="breeze-shell-r5" x="488" y="1288.8" textLength="951.6" clip-path="url(#breeze-shell-line-52)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1288.8" textLength="12.2" clip-path="url(#breeze-shell-line-52)">│</text><text class="breeze-shell-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-shell-line-52)">
-</text><text class="breeze-shell-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-shell-line-53)">│</text><text class="breeze-shell-r4" x="24.4" y="1313.2" textLength="219.6" clip-path="url(#breeze-shell-line-53)">--postgres-version</text><text class="breeze-shell-r6" x="268.4" y="1313.2" textLength="24.4" clip-path="url(#breeze-shell-line-53)">-P</text><text class="breeze-shell-r1" x="488" y="1313.2" textLength="305" clip-path="url(#breeze-shell-line-53)">Version&#160;of&#160;Postgres&#160;used.</text><text class="breeze-shell-r7" x="805.2" y="1313.2" textLength="317.2" clip-path="url(#breeze-shell-line-53)">(&gt;13&lt;&#160;|&#160;14&#160;|&#160;15&#160;|&#160;16&#160;|&#160;17)</text><text class="breeze-shell-r5" x="1134.6" y="1313.2" textLength="158.6" clip-path="url(#breeze-shell-line-53)">[default:&#160;13]</text><text class="breeze-shell-r5" x="1451.8" y="1313.2" textLength="12.2" clip-path="url(#breeze-shell-line-53)">│</text><text class="breeze-shell-r1" x="1464" y="1313.2" textLength="12.2" clip-path="url(#breeze-shell-line-53)">
-</text><text class="breeze-shell-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-shell-line-54)">│</text><text class="breeze-shell-r4" x="24.4" y="1337.6" textLength="183" clip-path="url(#breeze-shell-line-54)">--mysql-version</text><text class="breeze-shell-r6" x="268.4" y="1337.6" textLength="24.4" clip-path="url(#breeze-shell-line-54)">-M</text><text class="breeze-shell-r1" x="488" y="1337.6" textLength="268.4" clip-path="url(#breeze-shell-line-54)">Version&#160;of&#160;MySQL&#160;used.</text><text class="breeze-shell-r7" x="768.6" y="1337.6" textLength="158.6" clip-path="url(#breeze-shell-line-54)">(&gt;8.0&lt;&#160;|&#160;8.4)</text><text class="breeze-shell-r5" x="939.4" y="1337.6" textLength="170.8" clip-path="url(#breeze-shell-line-54)">[default:&#160;8.0]</text><text class="breeze-shell-r5" x="1451.8" y="1337.6" textLength="12.2" clip-path="url(#breeze-shell-line-54)">│</text><text class="breeze-shell-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-shell-line-54)">
-</text><text class="breeze-shell-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-shell-line-55)">│</text><text class="breeze-shell-r4" x="24.4" y="1362" textLength="122" clip-path="url(#breeze-shell-line-55)">--db-reset</text><text class="breeze-shell-r6" x="268.4" y="1362" textLength="24.4" clip-path="url(#breeze-shell-line-55)">-d</text><text class="breeze-shell-r1" x="292.8" y="1362" textLength="12.2" clip-path="url(#breeze-shell-line-55)">/</text><text class="breeze-shell-r4" x="305" y="1362" textLength="158.6" clip-path="url(#breeze-shell-line-55)">--no-db-reset</text><text class="breeze-shell-r1" x="488" y="1362" textLength="451.4" clip-path="url(#breeze-shell-line-55)">Reset&#160;DB&#160;when&#160;entering&#160;the&#160;container.</text><text class="breeze-shell-r5" x="951.6" y="1362" textLength="268.4" clip-path="url(#breeze-shell-line-55)">[default:&#160;no-db-reset]</text><text class="breeze-shell-r5" x="1451.8" y="1362" textLength="12.2" clip-path="url(#breeze-shell-line-55)">│</text><text class="breeze-shell-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#breeze-shell-line-55)">
-</text><text class="breeze-shell-r5" x="0" y="1386.4" textLength="1464" clip-path="url(#breeze-shell-line-56)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-shell-line-56)">
-</text><text class="breeze-shell-r5" x="0" y="1410.8" textLength="24.4" clip-path="url(#breeze-shell-line-57)">╭─</text><text class="breeze-shell-r5" x="24.4" y="1410.8" textLength="207.4" clip-path="url(#breeze-shell-line-57)">&#160;Choose&#160;executor&#160;</text><text class="breeze-shell-r5" x="231.8" y="1410.8" textLength="1207.8" clip-path="url(#breeze-shell-line-57)">───────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="1410.8" textLength="24.4" clip-path="url(#breeze-shell-line-57)">─╮</text><text class="breeze-shell-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-shell-line-57)">
-</text><text class="breeze-shell-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-shell-line-58)">│</text><text class="breeze-shell-r4" x="24.4" y="1435.2" textLength="122" clip-path="url(#breeze-shell-line-58)">--executor</text><text class="breeze-shell-r1" x="256.2" y="1435.2" textLength="1061.4" clip-path="url(#breeze-shell-line-58)">Specify&#160;the&#160;executor&#160;to&#160;use&#160;with&#160;shell&#160;command.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1435.2" textLength="12.2" clip-path="url(#breeze-shell-line-58)">│</text><text class="breeze-shell-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-shell-line-58)">
-</text><text class="breeze-shell-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-shell-line-59)">│</text><text class="breeze-shell-r7" x="256.2" y="1459.6" textLength="1061.4" clip-path="url(#breeze-shell-line-59)">(LocalExecutor|KubernetesExecutor|CeleryExecutor|CeleryKubernetesExecutor|EdgeExecutor)</text><text class="breeze-shell-r5" x="1451.8" y="1459.6" textLength="12.2" clip-path="url(#breeze-shell-line-59)">│</text><text class="breeze-shell-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-shell-line-59)">
-</text><text class="breeze-shell-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-shell-line-60)">│</text><text class="breeze-shell-r5" x="256.2" y="1484" textLength="1061.4" clip-path="url(#breeze-shell-line-60)">[default:&#160;LocalExecutor]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1484" textLength="12.2" clip-path="url(#breeze-shell-line-60)">│</text><text class="breeze-shell-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-shell-line-60)">
-</text><text class="breeze-shell-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-shell-line-61)">│</text><text class="breeze-shell-r4" x="24.4" y="1508.4" textLength="183" clip-path="url(#breeze-shell-line-61)">--celery-broker</text><text class="breeze-shell-r1" x="256.2" y="1508.4" textLength="402.6" clip-path="url(#breeze-shell-line-61)">Specify&#160;the&#160;celery&#160;message&#160;broker</text><text class="breeze-shell-r7" x="671" y="1508.4" textLength="195.2" clip-path="url(#breeze-shell-line-61)">(rabbitmq|redis)</text><text class="breeze-shell-r5" x="878.4" y="1508.4" textLength="195.2" clip-path="url(#breeze-shell-line-61)">[default:&#160;redis]</text><text class="breeze-shell-r5" x="1451.8" y="1508.4" textLength="12.2" clip-path="url(#breeze-shell-line-61)">│</text><text class="breeze-shell-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-shell-line-61)">
-</text><text class="breeze-shell-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-shell-line-62)">│</text><text class="breeze-shell-r4" x="24.4" y="1532.8" textLength="183" clip-path="url(#breeze-shell-line-62)">--celery-flower</text><text class="breeze-shell-r1" x="256.2" y="1532.8" textLength="231.8" clip-path="url(#breeze-shell-line-62)">Start&#160;celery&#160;flower</text><text class="breeze-shell-r5" x="1451.8" y="1532.8" textLength="12.2" clip-path="url(#breeze-shell-line-62)">│</text><text class="breeze-shell-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-shell-line-62)">
-</text><text class="breeze-shell-r5" x="0" y="1557.2" textLength="1464" clip-path="url(#breeze-shell-line-63)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-shell-line-63)">
-</text><text class="breeze-shell-r5" x="0" y="1581.6" textLength="24.4" clip-path="url(#breeze-shell-line-64)">╭─</text><text class="breeze-shell-r5" x="24.4" y="1581.6" textLength="488" clip-path="url(#breeze-shell-line-64)">&#160;Build&#160;CI&#160;image&#160;(before&#160;entering&#160;shell)&#160;</text><text class="breeze-shell-r5" x="512.4" y="1581.6" textLength="927.2" clip-path="url(#breeze-shell-line-64)">────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="1581.6" textLength="24.4" clip-path="url(#breeze-shell-line-64)">─╮</text><text class="breeze-shell-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-shell-line-64)">
-</text><text class="breeze-shell-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-shell-line-65)">│</text><text class="breeze-shell-r4" x="24.4" y="1606" textLength="158.6" clip-path="url(#breeze-shell-line-65)">--force-build</text><text class="breeze-shell-r1" x="341.6" y="1606" textLength="707.6" clip-path="url(#breeze-shell-line-65)">Force&#160;image&#160;build&#160;no&#160;matter&#160;if&#160;it&#160;is&#160;determined&#160;as&#160;needed.</text><text class="breeze-shell-r5" x="1451.8" y="1606" textLength="12.2" clip-path="url(#breeze-shell-line-65)">│</text><text class="breeze-shell-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-shell-line-65)">
-</text><text class="breeze-shell-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-shell-line-66)">│</text><text class="breeze-shell-r4" x="24.4" y="1630.4" textLength="122" clip-path="url(#breeze-shell-line-66)">--platform</text><text class="breeze-shell-r1" x="341.6" y="1630.4" textLength="329.4" clip-path="url(#breeze-shell-line-66)">Platform&#160;for&#160;Airflow&#160;image.</text><text class="breeze-shell-r7" x="683.2" y="1630.4" textLength="707.6" clip-path="url(#breeze-shell-line-66)">(linux/amd64&#160;|&#160;linux/arm64&#160;|&#160;linux/x86_64&#160;|&#160;linux/aarch64)</text><text class="breeze-shell-r5" x="1451.8" y="1630.4" textLength="12.2" clip-path="url(#breeze-shell-line-66)">│</text><text class="breeze-shell-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-shell-line-66)">
-</text><text class="breeze-shell-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-shell-line-67)">│</text><text class="breeze-shell-r4" x="24.4" y="1654.8" textLength="231.8" clip-path="url(#breeze-shell-line-67)">--github-repository</text><text class="breeze-shell-r6" x="292.8" y="1654.8" textLength="24.4" clip-path="url(#breeze-shell-line-67)">-g</text><text class="breeze-shell-r1" x="341.6" y="1654.8" textLength="585.6" clip-path="url(#breeze-shell-line-67)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-shell-r7" x="939.4" y="1654.8" textLength="73.2" clip-path="url(#breeze-shell-line-67)">(TEXT)</text><text class="breeze-shell-r5" x="1024.8" y="1654.8" textLength="305" clip-path="url(#breeze-shell-line-67)">[default:&#160;apache/airflow]</text><text class="breeze-shell-r5" x="1451.8" y="1654.8" textLength="12.2" clip-path="url(#breeze-shell-line-67)">│</text><text class="breeze-shell-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-shell-line-67)">
-</text><text class="breeze-shell-r5" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-shell-line-68)">│</text><text class="breeze-shell-r4" x="24.4" y="1679.2" textLength="109.8" clip-path="url(#breeze-shell-line-68)">--builder</text><text class="breeze-shell-r1" x="341.6" y="1679.2" textLength="756.4" clip-path="url(#breeze-shell-line-68)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build`&#160;commands.</text><text class="breeze-shell-r7" x="1110.2" y="1679.2" textLength="73.2" clip-path="url(#breeze-shell-line-68)">(TEXT)</text><text class="breeze-shell-r5" x="1451.8" y="1679.2" textLength="12.2" clip-path="url(#breeze-shell-line-68)">│</text><text class="breeze-shell-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-shell-line-68)">
-</text><text class="breeze-shell-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-shell-line-69)">│</text><text class="breeze-shell-r5" x="341.6" y="1703.6" textLength="756.4" clip-path="url(#breeze-shell-line-69)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1703.6" textLength="12.2" clip-path="url(#breeze-shell-line-69)">│</text><text class="breeze-shell-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-shell-line-69)">
-</text><text class="breeze-shell-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-shell-line-70)">│</text><text class="breeze-shell-r4" x="24.4" y="1728" textLength="97.6" clip-path="url(#breeze-shell-line-70)">--use-uv</text><text class="breeze-shell-r1" x="122" y="1728" textLength="12.2" clip-path="url(#breeze-shell-line-70)">/</text><text class="breeze-shell-r4" x="134.2" y="1728" textLength="134.2" clip-path="url(#breeze-shell-line-70)">--no-use-uv</text><text class="breeze-shell-r1" x="341.6" y="1728" textLength="719.8" clip-path="url(#breeze-shell-line-70)">Use&#160;uv&#160;instead&#160;of&#160;pip&#160;as&#160;packaging&#160;tool&#160;to&#160;build&#160;the&#160;image.</text><text class="breeze-shell-r5" x="1073.6" y="1728" textLength="207.4" clip-path="url(#breeze-shell-line-70)">[default:&#160;use-uv]</text><text class="breeze-shell-r5" x="1451.8" y="1728" textLength="12.2" clip-path="url(#breeze-shell-line-70)">│</text><text class="breeze-shell-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-shell-line-70)">
-</text><text class="breeze-shell-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-shell-line-71)">│</text><text class="breeze-shell-r4" x="24.4" y="1752.4" textLength="207.4" clip-path="url(#breeze-shell-line-71)">--uv-http-timeout</text><text class="breeze-shell-r1" x="341.6" y="1752.4" textLength="829.6" clip-path="url(#breeze-shell-line-71)">Timeout&#160;for&#160;requests&#160;that&#160;UV&#160;makes&#160;(only&#160;used&#160;in&#160;case&#160;of&#160;UV&#160;builds).</text><text class="breeze-shell-r7" x="1183.4" y="1752.4" textLength="183" clip-path="url(#breeze-shell-line-71)">(INTEGER&#160;RANGE)</text><text class="breeze-shell-r5" x="1451.8" y="1752.4" textLength="12.2" clip-path="url(#breeze-shell-line-71)">│</text><text class="breeze-shell-r1" x="1464" y="1752.4" textLength="12.2" clip-path="url(#breeze-shell-line-71)">
-</text><text class="breeze-shell-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-shell-line-72)">│</text><text class="breeze-shell-r5" x="341.6" y="1776.8" textLength="829.6" clip-path="url(#breeze-shell-line-72)">[default:&#160;300;&#160;x&gt;=1]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1776.8" textLength="12.2" clip-path="url(#breeze-shell-line-72)">│</text><text class="breeze-shell-r1" x="1464" y="1776.8" textLength="12.2" clip-path="url(#breeze-shell-line-72)">
-</text><text class="breeze-shell-r5" x="0" y="1801.2" textLength="1464" clip-path="url(#breeze-shell-line-73)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-shell-line-73)">
-</text><text class="breeze-shell-r5" x="0" y="1825.6" textLength="24.4" clip-path="url(#breeze-shell-line-74)">╭─</text><text class="breeze-shell-r5" x="24.4" y="1825.6" textLength="414.8" clip-path="url(#breeze-shell-line-74)">&#160;Mounting&#160;the&#160;sources&#160;and&#160;volumes&#160;</text><text class="breeze-shell-r5" x="439.2" y="1825.6" textLength="1000.4" clip-path="url(#breeze-shell-line-74)">──────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="1825.6" textLength="24.4" clip-path="url(#breeze-shell-line-74)">─╮</text><text class="breeze-shell-r1" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-shell-line-74)">
-</text><text class="breeze-shell-r5" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-shell-line-75)">│</text><text class="breeze-shell-r4" x="24.4" y="1850" textLength="183" clip-path="url(#breeze-shell-line-75)">--mount-sources</text><text class="breeze-shell-r1" x="329.4" y="1850" textLength="1110.2" clip-path="url(#breeze-shell-line-75)">Choose&#160;scope&#160;of&#160;local&#160;sources&#160;that&#160;should&#160;be&#160;mounted,&#160;skipped,&#160;or&#160;removed&#160;(default&#160;=&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1850" textLength="12.2" clip-path="url(#breeze-shell-line-75)">│</text><text class="breeze-shell-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-shell-line-75)">
-</text><text class="breeze-shell-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-shell-line-76)">│</text><text class="breeze-shell-r1" x="329.4" y="1874.4" textLength="1110.2" clip-path="url(#breeze-shell-line-76)">selected).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1874.4" textLength="12.2" clip-path="url(#breeze-shell-line-76)">│</text><text class="breeze-shell-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-shell-line-76)">
-</text><text class="breeze-shell-r5" x="0" y="1898.8" textLength="12.2" clip-path="url(#breeze-shell-line-77)">│</text><text class="breeze-shell-r7" x="329.4" y="1898.8" textLength="1110.2" clip-path="url(#breeze-shell-line-77)">(selected&#160;|&#160;all&#160;|&#160;skip&#160;|&#160;remove&#160;|&#160;tests&#160;|&#160;providers-and-tests)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1898.8" textLength="12.2" clip-path="url(#breeze-shell-line-77)">│</text><text class="breeze-shell-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-shell-line-77)">
-</text><text class="breeze-shell-r5" x="0" y="1923.2" textLength="12.2" clip-path="url(#breeze-shell-line-78)">│</text><text class="breeze-shell-r5" x="329.4" y="1923.2" textLength="1110.2" clip-path="url(#breeze-shell-line-78)">[default:&#160;selected]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1923.2" textLength="12.2" clip-path="url(#breeze-shell-line-78)">│</text><text class="breeze-shell-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-shell-line-78)">
-</text><text class="breeze-shell-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-shell-line-79)">│</text><text class="breeze-shell-r4" x="24.4" y="1947.6" textLength="256.2" clip-path="url(#breeze-shell-line-79)">--include-mypy-volume</text><text class="breeze-shell-r1" x="329.4" y="1947.6" textLength="915" clip-path="url(#breeze-shell-line-79)">Whether&#160;to&#160;include&#160;mounting&#160;of&#160;the&#160;mypy&#160;volume&#160;(useful&#160;for&#160;debugging&#160;mypy).</text><text class="breeze-shell-r5" x="1451.8" y="1947.6" textLength="12.2" clip-path="url(#breeze-shell-line-79)">│</text><text class="breeze-shell-r1" x="1464" y="1947.6" textLength="12.2" clip-path="url(#breeze-shell-line-79)">
-</text><text class="breeze-shell-r5" x="0" y="1972" textLength="1464" clip-path="url(#breeze-shell-line-80)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-shell-line-80)">
-</text><text class="breeze-shell-r5" x="0" y="1996.4" textLength="24.4" clip-path="url(#breeze-shell-line-81)">╭─</text><text class="breeze-shell-r5" x="24.4" y="1996.4" textLength="512.4" clip-path="url(#breeze-shell-line-81)">&#160;Installing&#160;packages&#160;after&#160;entering&#160;shell&#160;</text><text class="breeze-shell-r5" x="536.8" y="1996.4" textLength="902.8" clip-path="url(#breeze-shell-line-81)">──────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="1996.4" textLength="24.4" clip-path="url(#breeze-shell-line-81)">─╮</text><text class="breeze-shell-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-shell-line-81)">
-</text><text class="breeze-shell-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-shell-line-82)">│</text><text class="breeze-shell-r4" x="24.4" y="2020.8" textLength="366" clip-path="url(#breeze-shell-line-82)">--airflow-constraints-location</text><text class="breeze-shell-r1" x="756.4" y="2020.8" textLength="683.2" clip-path="url(#breeze-shell-line-82)">Location&#160;of&#160;airflow&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2020.8" textLength="12.2" clip-path="url(#breeze-shell-line-82)">│</text><text class="breeze-shell-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-shell-line-82)">
-</text><text class="breeze-shell-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-shell-line-83)">│</text><text class="breeze-shell-r1" x="756.4" y="2045.2" textLength="683.2" clip-path="url(#breeze-shell-line-83)">local&#160;context&#160;file).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2045.2" textLength="12.2" clip-path="url(#breeze-shell-line-83)">│</text><text class="breeze-shell-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-shell-line-83)">
-</text><text class="breeze-shell-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-shell-line-84)">│</text><text class="breeze-shell-r7" x="756.4" y="2069.6" textLength="683.2" clip-path="url(#breeze-shell-line-84)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2069.6" textLength="12.2" clip-path="url(#breeze-shell-line-84)">│</text><text class="breeze-shell-r1" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-shell-line-84)">
-</text><text class="breeze-shell-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-shell-line-85)">│</text><text class="breeze-shell-r4" x="24.4" y="2094" textLength="317.2" clip-path="url(#breeze-shell-line-85)">--airflow-constraints-mode</text><text class="breeze-shell-r1" x="756.4" y="2094" textLength="683.2" clip-path="url(#breeze-shell-line-85)">Mode&#160;of&#160;constraints&#160;for&#160;Airflow&#160;for&#160;CI&#160;image&#160;building.&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2094" textLength="12.2" clip-path="url(#breeze-shell-line-85)">│</text><text class="breeze-shell-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-shell-line-85)">
-</text><text class="breeze-shell-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-shell-line-86)">│</text><text class="breeze-shell-r7" x="756.4" y="2118.4" textLength="683.2" clip-path="url(#breeze-shell-line-86)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2118.4" textLength="12.2" clip-path="url(#breeze-shell-line-86)">│</text><text class="breeze-shell-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-shell-line-86)">
-</text><text class="breeze-shell-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-shell-line-87)">│</text><text class="breeze-shell-r7" x="756.4" y="2142.8" textLength="683.2" clip-path="url(#breeze-shell-line-87)">constraints-no-providers)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2142.8" textLength="12.2" clip-path="url(#breeze-shell-line-87)">│</text><text class="breeze-shell-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-shell-line-87)">
-</text><text class="breeze-shell-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-shell-line-88)">│</text><text class="breeze-shell-r5" x="756.4" y="2167.2" textLength="683.2" clip-path="url(#breeze-shell-line-88)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2167.2" textLength="12.2" clip-path="url(#breeze-shell-line-88)">│</text><text class="breeze-shell-r1" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-shell-line-88)">
-</text><text class="breeze-shell-r5" x="0" y="2191.6" textLength="12.2" clip-path="url(#breeze-shell-line-89)">│</text><text class="breeze-shell-r4" x="24.4" y="2191.6" textLength="378.2" clip-path="url(#breeze-shell-line-89)">--airflow-constraints-reference</text><text class="breeze-shell-r1" x="756.4" y="2191.6" textLength="683.2" clip-path="url(#breeze-shell-line-89)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;airflow&#160;installation&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2191.6" textLength="12.2" clip-path="url(#breeze-shell-line-89)">│</text><text class="breeze-shell-r1" x="1464" y="2191.6" textLength="12.2" clip-path="url(#breeze-shell-line-89)">
-</text><text class="breeze-shell-r5" x="0" y="2216" textLength="12.2" clip-path="url(#breeze-shell-line-90)">│</text><text class="breeze-shell-r1" x="756.4" y="2216" textLength="683.2" clip-path="url(#breeze-shell-line-90)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2216" textLength="12.2" clip-path="url(#breeze-shell-line-90)">│</text><text class="breeze-shell-r1" x="1464" y="2216" textLength="12.2" clip-path="url(#breeze-shell-line-90)">
-</text><text class="breeze-shell-r5" x="0" y="2240.4" textLength="12.2" clip-path="url(#breeze-shell-line-91)">│</text><text class="breeze-shell-r7" x="756.4" y="2240.4" textLength="683.2" clip-path="url(#breeze-shell-line-91)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2240.4" textLength="12.2" clip-path="url(#breeze-shell-line-91)">│</text><text class="breeze-shell-r1" x="1464" y="2240.4" textLength="12.2" clip-path="url(#breeze-shell-line-91)">
-</text><text class="breeze-shell-r5" x="0" y="2264.8" textLength="12.2" clip-path="url(#breeze-shell-line-92)">│</text><text class="breeze-shell-r4" x="24.4" y="2264.8" textLength="195.2" clip-path="url(#breeze-shell-line-92)">--airflow-extras</text><text class="breeze-shell-r1" x="756.4" y="2264.8" textLength="378.2" clip-path="url(#breeze-shell-line-92)">Airflow&#160;extras&#160;to&#160;install&#160;when&#160;</text><text class="breeze-shell-r4" x="1134.6" y="2264.8" textLength="256.2" clip-path="url(#breeze-shell-line-92)">--use-airflow-version</text><text class="breeze-shell-r1" x="1390.8" y="2264.8" textLength="48.8" clip-path="url(#breeze-shell-line-92)">&#160;is&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2264.8" textLength="12.2" clip-path="url(#breeze-shell-line-92)">│</text><text class="breeze-shell-r1" x="1464" y="2264.8" textLength="12.2" clip-path="url(#breeze-shell-line-92)">
-</text><text class="breeze-shell-r5" x="0" y="2289.2" textLength="12.2" clip-path="url(#breeze-shell-line-93)">│</text><text class="breeze-shell-r1" x="756.4" y="2289.2" textLength="683.2" clip-path="url(#breeze-shell-line-93)">used&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2289.2" textLength="12.2" clip-path="url(#breeze-shell-line-93)">│</text><text class="breeze-shell-r1" x="1464" y="2289.2" textLength="12.2" clip-path="url(#breeze-shell-line-93)">
-</text><text class="breeze-shell-r5" x="0" y="2313.6" textLength="12.2" clip-path="url(#breeze-shell-line-94)">│</text><text class="breeze-shell-r7" x="756.4" y="2313.6" textLength="683.2" clip-path="url(#breeze-shell-line-94)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2313.6" textLength="12.2" clip-path="url(#breeze-shell-line-94)">│</text><text class="breeze-shell-r1" x="1464" y="2313.6" textLength="12.2" clip-path="url(#breeze-shell-line-94)">
-</text><text class="breeze-shell-r5" x="0" y="2338" textLength="12.2" clip-path="url(#breeze-shell-line-95)">│</text><text class="breeze-shell-r5" x="756.4" y="2338" textLength="683.2" clip-path="url(#breeze-shell-line-95)">[default:&#160;&quot;&quot;]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2338" textLength="12.2" clip-path="url(#breeze-shell-line-95)">│</text><text class="breeze-shell-r1" x="1464" y="2338" textLength="12.2" clip-path="url(#breeze-shell-line-95)">
-</text><text class="breeze-shell-r5" x="0" y="2362.4" textLength="12.2" clip-path="url(#breeze-shell-line-96)">│</text><text class="breeze-shell-r4" x="24.4" y="2362.4" textLength="341.6" clip-path="url(#breeze-shell-line-96)">--clean-airflow-installation</text><text class="breeze-shell-r1" x="756.4" y="2362.4" textLength="683.2" clip-path="url(#breeze-shell-line-96)">Clean&#160;the&#160;airflow&#160;installation&#160;before&#160;installing&#160;version</text><text class="breeze-shell-r5" x="1451.8" y="2362.4" textLength="12.2" clip-path="url(#breeze-shell-line-96)">│</text><text class="breeze-shell-r1" x="1464" y="2362.4" textLength="12.2" clip-path="url(#breeze-shell-line-96)">
-</text><text class="breeze-shell-r5" x="0" y="2386.8" textLength="12.2" clip-path="url(#breeze-shell-line-97)">│</text><text class="breeze-shell-r1" x="756.4" y="2386.8" textLength="158.6" clip-path="url(#breeze-shell-line-97)">specified&#160;by&#160;</text><text class="breeze-shell-r4" x="915" y="2386.8" textLength="256.2" clip-path="url(#breeze-shell-line-97)">--use-airflow-version</text><text class="breeze-shell-r1" x="1171.2" y="2386.8" textLength="268.4" clip-path="url(#breeze-shell-line-97)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2386.8" textLength="12.2" clip-path="url(#breeze-shell-line-97)">│</text><text class="breeze-shell-r1" x="1464" y="2386.8" textLength="12.2" clip-path="url(#breeze-shell-line-97)">
-</text><text class="breeze-shell-r5" x="0" y="2411.2" textLength="12.2" clip-path="url(#breeze-shell-line-98)">│</text><text class="breeze-shell-r4" x="24.4" y="2411.2" textLength="329.4" clip-path="url(#breeze-shell-line-98)">--force-lowest-dependencies</text><text class="breeze-shell-r1" x="756.4" y="2411.2" textLength="683.2" clip-path="url(#breeze-shell-line-98)">Run&#160;tests&#160;for&#160;the&#160;lowest&#160;direct&#160;dependencies&#160;of&#160;Airflow&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2411.2" textLength="12.2" clip-path="url(#breeze-shell-line-98)">│</text><text class="breeze-shell-r1" x="1464" y="2411.2" textLength="12.2" clip-path="url(#breeze-shell-line-98)">
-</text><text class="breeze-shell-r5" x="0" y="2435.6" textLength="12.2" clip-path="url(#breeze-shell-line-99)">│</text><text class="breeze-shell-r1" x="756.4" y="2435.6" textLength="683.2" clip-path="url(#breeze-shell-line-99)">or&#160;selected&#160;provider&#160;if&#160;`Provider[PROVIDER_ID]`&#160;is&#160;used&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2435.6" textLength="12.2" clip-path="url(#breeze-shell-line-99)">│</text><text class="breeze-shell-r1" x="1464" y="2435.6" textLength="12.2" clip-path="url(#breeze-shell-line-99)">
-</text><text class="breeze-shell-r5" x="0" y="2460" textLength="12.2" clip-path="url(#breeze-shell-line-100)">│</text><text class="breeze-shell-r1" x="756.4" y="2460" textLength="683.2" clip-path="url(#breeze-shell-line-100)">as&#160;test&#160;type.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2460" textLength="12.2" clip-path="url(#breeze-shell-line-100)">│</text><text class="breeze-shell-r1" x="1464" y="2460" textLength="12.2" clip-path="url(#breeze-shell-line-100)">
-</text><text class="breeze-shell-r5" x="0" y="2484.4" textLength="12.2" clip-path="url(#breeze-shell-line-101)">│</text><text class="breeze-shell-r4" x="24.4" y="2484.4" textLength="134.2" clip-path="url(#breeze-shell-line-101)">--test-type</text><text class="breeze-shell-r1" x="756.4" y="2484.4" textLength="683.2" clip-path="url(#breeze-shell-line-101)">Type&#160;for&#160;shell&#160;tests&#160;to&#160;run&#160;-&#160;used&#160;when&#160;forcing&#160;lowest&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2484.4" textLength="12.2" clip-path="url(#breeze-shell-line-101)">│</text><text class="breeze-shell-r1" x="1464" y="2484.4" textLength="12.2" clip-path="url(#breeze-shell-line-101)">
-</text><text class="breeze-shell-r5" x="0" y="2508.8" textLength="12.2" clip-path="url(#breeze-shell-line-102)">│</text><text class="breeze-shell-r1" x="756.4" y="2508.8" textLength="683.2" clip-path="url(#breeze-shell-line-102)">dependencies&#160;to&#160;determine&#160;which&#160;distribution&#160;to&#160;force&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2508.8" textLength="12.2" clip-path="url(#breeze-shell-line-102)">│</text><text class="breeze-shell-r1" x="1464" y="2508.8" textLength="12.2" clip-path="url(#breeze-shell-line-102)">
-</text><text class="breeze-shell-r5" x="0" y="2533.2" textLength="12.2" clip-path="url(#breeze-shell-line-103)">│</text><text class="breeze-shell-r1" x="756.4" y="2533.2" textLength="683.2" clip-path="url(#breeze-shell-line-103)">lowest&#160;dependencies&#160;for&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2533.2" textLength="12.2" clip-path="url(#breeze-shell-line-103)">│</text><text class="breeze-shell-r1" x="1464" y="2533.2" textLength="12.2" clip-path="url(#breeze-shell-line-103)">
-</text><text class="breeze-shell-r5" x="0" y="2557.6" textLength="12.2" clip-path="url(#breeze-shell-line-104)">│</text><text class="breeze-shell-r7" x="756.4" y="2557.6" textLength="683.2" clip-path="url(#breeze-shell-line-104)">(All&#160;|&#160;All-Long&#160;|&#160;All-Quarantined&#160;|&#160;All-Postgres&#160;|&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2557.6" textLength="12.2" clip-path="url(#breeze-shell-line-104)">│</text><text class="breeze-shell-r1" x="1464" y="2557.6" textLength="12.2" clip-path="url(#breeze-shell-line-104)">
-</text><text class="breeze-shell-r5" x="0" y="2582" textLength="12.2" clip-path="url(#breeze-shell-line-105)">│</text><text class="breeze-shell-r7" x="756.4" y="2582" textLength="683.2" clip-path="url(#breeze-shell-line-105)">All-MySQL&#160;|&#160;API&#160;|&#160;Always&#160;|&#160;CLI&#160;|&#160;Core&#160;|&#160;Other&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2582" textLength="12.2" clip-path="url(#breeze-shell-line-105)">│</text><text class="breeze-shell-r1" x="1464" y="2582" textLength="12.2" clip-path="url(#breeze-shell-line-105)">
-</text><text class="breeze-shell-r5" x="0" y="2606.4" textLength="12.2" clip-path="url(#breeze-shell-line-106)">│</text><text class="breeze-shell-r7" x="756.4" y="2606.4" textLength="683.2" clip-path="url(#breeze-shell-line-106)">Serialization)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2606.4" textLength="12.2" clip-path="url(#breeze-shell-line-106)">│</text><text class="breeze-shell-r1" x="1464" y="2606.4" textLength="12.2" clip-path="url(#breeze-shell-line-106)">
-</text><text class="breeze-shell-r5" x="0" y="2630.8" textLength="12.2" clip-path="url(#breeze-shell-line-107)">│</text><text class="breeze-shell-r5" x="756.4" y="2630.8" textLength="683.2" clip-path="url(#breeze-shell-line-107)">[default:&#160;All]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2630.8" textLength="12.2" clip-path="url(#breeze-shell-line-107)">│</text><text class="breeze-shell-r1" x="1464" y="2630.8" textLength="12.2" clip-path="url(#breeze-shell-line-107)">
-</text><text class="breeze-shell-r5" x="0" y="2655.2" textLength="12.2" clip-path="url(#breeze-shell-line-108)">│</text><text class="breeze-shell-r4" x="24.4" y="2655.2" textLength="244" clip-path="url(#breeze-shell-line-108)">--excluded-providers</text><text class="breeze-shell-r1" x="756.4" y="2655.2" textLength="683.2" clip-path="url(#breeze-shell-line-108)">JSON-string&#160;of&#160;dictionary&#160;containing&#160;excluded&#160;providers&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2655.2" textLength="12.2" clip-path="url(#breeze-shell-line-108)">│</text><text class="breeze-shell-r1" x="1464" y="2655.2" textLength="12.2" clip-path="url(#breeze-shell-line-108)">
-</text><text class="breeze-shell-r5" x="0" y="2679.6" textLength="12.2" clip-path="url(#breeze-shell-line-109)">│</text><text class="breeze-shell-r1" x="756.4" y="2679.6" textLength="683.2" clip-path="url(#breeze-shell-line-109)">per&#160;python&#160;version&#160;({&#x27;3.12&#x27;:&#160;[&#x27;provider&#x27;]})&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2679.6" textLength="12.2" clip-path="url(#breeze-shell-line-109)">│</text><text class="breeze-shell-r1" x="1464" y="2679.6" textLength="12.2" clip-path="url(#breeze-shell-line-109)">
-</text><text class="breeze-shell-r5" x="0" y="2704" textLength="12.2" clip-path="url(#breeze-shell-line-110)">│</text><text class="breeze-shell-r7" x="756.4" y="2704" textLength="683.2" clip-path="url(#breeze-shell-line-110)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2704" textLength="12.2" clip-path="url(#breeze-shell-line-110)">│</text><text class="breeze-shell-r1" x="1464" y="2704" textLength="12.2" clip-path="url(#breeze-shell-line-110)">
-</text><text class="breeze-shell-r5" x="0" y="2728.4" textLength="12.2" clip-path="url(#breeze-shell-line-111)">│</text><text class="breeze-shell-r4" x="24.4" y="2728.4" textLength="414.8" clip-path="url(#breeze-shell-line-111)">--install-airflow-with-constraints</text><text class="breeze-shell-r1" x="439.2" y="2728.4" textLength="12.2" clip-path="url(#breeze-shell-line-111)">/</text><text class="breeze-shell-r4" x="451.4" y="2728.4" textLength="256.2" clip-path="url(#breeze-shell-line-111)">--no-install-airflow-</text><text class="breeze-shell-r1" x="756.4" y="2728.4" textLength="683.2" clip-path="url(#breeze-shell-line-111)">Install&#160;airflow&#160;in&#160;a&#160;separate&#160;step,&#160;with&#160;constraints&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2728.4" textLength="12.2" clip-path="url(#breeze-shell-line-111)">│</text><text class="breeze-shell-r1" x="1464" y="2728.4" textLength="12.2" clip-path="url(#breeze-shell-line-111)">
-</text><text class="breeze-shell-r5" x="0" y="2752.8" textLength="12.2" clip-path="url(#breeze-shell-line-112)">│</text><text class="breeze-shell-r4" x="24.4" y="2752.8" textLength="195.2" clip-path="url(#breeze-shell-line-112)">with-constraints</text><text class="breeze-shell-r1" x="756.4" y="2752.8" textLength="683.2" clip-path="url(#breeze-shell-line-112)">determined&#160;from&#160;package&#160;or&#160;airflow&#160;version.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2752.8" textLength="12.2" clip-path="url(#breeze-shell-line-112)">│</text><text class="breeze-shell-r1" x="1464" y="2752.8" textLength="12.2" clip-path="url(#breeze-shell-line-112)">
-</text><text class="breeze-shell-r5" x="0" y="2777.2" textLength="12.2" clip-path="url(#breeze-shell-line-113)">│</text><text class="breeze-shell-r5" x="756.4" y="2777.2" textLength="683.2" clip-path="url(#breeze-shell-line-113)">[default:&#160;install-airflow-with-constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2777.2" textLength="12.2" clip-path="url(#breeze-shell-line-113)">│</text><text class="breeze-shell-r1" x="1464" y="2777.2" textLength="12.2" clip-path="url(#breeze-shell-line-113)">
-</text><text class="breeze-shell-r5" x="0" y="2801.6" textLength="12.2" clip-path="url(#breeze-shell-line-114)">│</text><text class="breeze-shell-r4" x="24.4" y="2801.6" textLength="341.6" clip-path="url(#breeze-shell-line-114)">--install-selected-providers</text><text class="breeze-shell-r1" x="756.4" y="2801.6" textLength="683.2" clip-path="url(#breeze-shell-line-114)">Comma-separated&#160;list&#160;of&#160;providers&#160;selected&#160;to&#160;be&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2801.6" textLength="12.2" clip-path="url(#breeze-shell-line-114)">│</text><text class="breeze-shell-r1" x="1464" y="2801.6" textLength="12.2" clip-path="url(#breeze-shell-line-114)">
-</text><text class="breeze-shell-r5" x="0" y="2826" textLength="12.2" clip-path="url(#breeze-shell-line-115)">│</text><text class="breeze-shell-r1" x="756.4" y="2826" textLength="231.8" clip-path="url(#breeze-shell-line-115)">installed&#160;(implies&#160;</text><text class="breeze-shell-r4" x="988.2" y="2826" textLength="353.8" clip-path="url(#breeze-shell-line-115)">--use-distributions-from-dist</text><text class="breeze-shell-r1" x="1342" y="2826" textLength="97.6" clip-path="url(#breeze-shell-line-115)">).&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2826" textLength="12.2" clip-path="url(#breeze-shell-line-115)">│</text><text class="breeze-shell-r1" x="1464" y="2826" textLength="12.2" clip-path="url(#breeze-shell-line-115)">
-</text><text class="breeze-shell-r5" x="0" y="2850.4" textLength="12.2" clip-path="url(#breeze-shell-line-116)">│</text><text class="breeze-shell-r7" x="756.4" y="2850.4" textLength="683.2" clip-path="url(#breeze-shell-line-116)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2850.4" textLength="12.2" clip-path="url(#breeze-shell-line-116)">│</text><text class="breeze-shell-r1" x="1464" y="2850.4" textLength="12.2" clip-path="url(#breeze-shell-line-116)">
-</text><text class="breeze-shell-r5" x="0" y="2874.8" textLength="12.2" clip-path="url(#breeze-shell-line-117)">│</text><text class="breeze-shell-r4" x="24.4" y="2874.8" textLength="256.2" clip-path="url(#breeze-shell-line-117)">--distribution-format</text><text class="breeze-shell-r1" x="756.4" y="2874.8" textLength="658.8" clip-path="url(#breeze-shell-line-117)">Format&#160;of&#160;packages&#160;that&#160;should&#160;be&#160;installed&#160;from&#160;dist.</text><text class="breeze-shell-r5" x="1451.8" y="2874.8" textLength="12.2" clip-path="url(#breeze-shell-line-117)">│</text><text class="breeze-shell-r1" x="1464" y="2874.8" textLength="12.2" clip-path="url(#breeze-shell-line-117)">
-</text><text class="breeze-shell-r5" x="0" y="2899.2" textLength="12.2" clip-path="url(#breeze-shell-line-118)">│</text><text class="breeze-shell-r7" x="756.4" y="2899.2" textLength="658.8" clip-path="url(#breeze-shell-line-118)">(wheel&#160;|&#160;sdist)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2899.2" textLength="12.2" clip-path="url(#breeze-shell-line-118)">│</text><text class="breeze-shell-r1" x="1464" y="2899.2" textLength="12.2" clip-path="url(#breeze-shell-line-118)">
-</text><text class="breeze-shell-r5" x="0" y="2923.6" textLength="12.2" clip-path="url(#breeze-shell-line-119)">│</text><text class="breeze-shell-r5" x="756.4" y="2923.6" textLength="658.8" clip-path="url(#breeze-shell-line-119)">[default:&#160;wheel]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2923.6" textLength="12.2" clip-path="url(#breeze-shell-line-119)">│</text><text class="breeze-shell-r1" x="1464" y="2923.6" textLength="12.2" clip-path="url(#breeze-shell-line-119)">
-</text><text class="breeze-shell-r5" x="0" y="2948" textLength="12.2" clip-path="url(#breeze-shell-line-120)">│</text><text class="breeze-shell-r4" x="24.4" y="2948" textLength="390.4" clip-path="url(#breeze-shell-line-120)">--providers-constraints-location</text><text class="breeze-shell-r1" x="756.4" y="2948" textLength="683.2" clip-path="url(#breeze-shell-line-120)">Location&#160;of&#160;providers&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2948" textLength="12.2" clip-path="url(#breeze-shell-line-120)">│</text><text class="breeze-shell-r1" x="1464" y="2948" textLength="12.2" clip-path="url(#breeze-shell-line-120)">
-</text><text class="breeze-shell-r5" x="0" y="2972.4" textLength="12.2" clip-path="url(#breeze-shell-line-121)">│</text><text class="breeze-shell-r1" x="756.4" y="2972.4" textLength="683.2" clip-path="url(#breeze-shell-line-121)">local&#160;context&#160;file).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2972.4" textLength="12.2" clip-path="url(#breeze-shell-line-121)">│</text><text class="breeze-shell-r1" x="1464" y="2972.4" textLength="12.2" clip-path="url(#breeze-shell-line-121)">
-</text><text class="breeze-shell-r5" x="0" y="2996.8" textLength="12.2" clip-path="url(#breeze-shell-line-122)">│</text><text class="breeze-shell-r7" x="756.4" y="2996.8" textLength="683.2" clip-path="url(#breeze-shell-line-122)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2996.8" textLength="12.2" clip-path="url(#breeze-shell-line-122)">│</text><text class="breeze-shell-r1" x="1464" y="2996.8" textLength="12.2" clip-path="url(#breeze-shell-line-122)">
-</text><text class="breeze-shell-r5" x="0" y="3021.2" textLength="12.2" clip-path="url(#breeze-shell-line-123)">│</text><text class="breeze-shell-r4" x="24.4" y="3021.2" textLength="341.6" clip-path="url(#breeze-shell-line-123)">--providers-constraints-mode</text><text class="breeze-shell-r1" x="756.4" y="3021.2" textLength="683.2" clip-path="url(#breeze-shell-line-123)">Mode&#160;of&#160;constraints&#160;for&#160;Providers&#160;for&#160;CI&#160;image&#160;building.</text><text class="breeze-shell-r5" x="1451.8" y="3021.2" textLength="12.2" clip-path="url(#breeze-shell-line-123)">│</text><text class="breeze-shell-r1" x="1464" y="3021.2" textLength="12.2" clip-path="url(#breeze-shell-line-123)">
-</text><text class="breeze-shell-r5" x="0" y="3045.6" textLength="12.2" clip-path="url(#breeze-shell-line-124)">│</text><text class="breeze-shell-r7" x="756.4" y="3045.6" textLength="683.2" clip-path="url(#breeze-shell-line-124)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3045.6" textLength="12.2" clip-path="url(#breeze-shell-line-124)">│</text><text class="breeze-shell-r1" x="1464" y="3045.6" textLength="12.2" clip-path="url(#breeze-shell-line-124)">
-</text><text class="breeze-shell-r5" x="0" y="3070" textLength="12.2" clip-path="url(#breeze-shell-line-125)">│</text><text class="breeze-shell-r7" x="756.4" y="3070" textLength="683.2" clip-path="url(#breeze-shell-line-125)">constraints-no-providers)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3070" textLength="12.2" clip-path="url(#breeze-shell-line-125)">│</text><text class="breeze-shell-r1" x="1464" y="3070" textLength="12.2" clip-path="url(#breeze-shell-line-125)">
-</text><text class="breeze-shell-r5" x="0" y="3094.4" textLength="12.2" clip-path="url(#breeze-shell-line-126)">│</text><text class="breeze-shell-r5" x="756.4" y="3094.4" textLength="683.2" clip-path="url(#breeze-shell-line-126)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3094.4" textLength="12.2" clip-path="url(#breeze-shell-line-126)">│</text><text class="breeze-shell-r1" x="1464" y="3094.4" textLength="12.2" clip-path="url(#breeze-shell-line-126)">
-</text><text class="breeze-shell-r5" x="0" y="3118.8" textLength="12.2" clip-path="url(#breeze-shell-line-127)">│</text><text class="breeze-shell-r4" x="24.4" y="3118.8" textLength="402.6" clip-path="url(#breeze-shell-line-127)">--providers-constraints-reference</text><text class="breeze-shell-r1" x="756.4" y="3118.8" textLength="683.2" clip-path="url(#breeze-shell-line-127)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;providers&#160;installation&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3118.8" textLength="12.2" clip-path="url(#breeze-shell-line-127)">│</text><text class="breeze-shell-r1" x="1464" y="3118.8" textLength="12.2" clip-path="url(#breeze-shell-line-127)">
-</text><text class="breeze-shell-r5" x="0" y="3143.2" textLength="12.2" clip-path="url(#breeze-shell-line-128)">│</text><text class="breeze-shell-r1" x="756.4" y="3143.2" textLength="683.2" clip-path="url(#breeze-shell-line-128)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;Can&#160;be&#160;&#x27;default&#x27;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3143.2" textLength="12.2" clip-path="url(#breeze-shell-line-128)">│</text><text class="breeze-shell-r1" x="1464" y="3143.2" textLength="12.2" clip-path="url(#breeze-shell-line-128)">
-</text><text class="breeze-shell-r5" x="0" y="3167.6" textLength="12.2" clip-path="url(#breeze-shell-line-129)">│</text><text class="breeze-shell-r1" x="756.4" y="3167.6" textLength="683.2" clip-path="url(#breeze-shell-line-129)">in&#160;which&#160;case&#160;the&#160;default&#160;constraints-reference&#160;is&#160;used.</text><text class="breeze-shell-r5" x="1451.8" y="3167.6" textLength="12.2" clip-path="url(#breeze-shell-line-129)">│</text><text class="breeze-shell-r1" x="1464" y="3167.6" textLength="12.2" clip-path="url(#breeze-shell-line-129)">
-</text><text class="breeze-shell-r5" x="0" y="3192" textLength="12.2" clip-path="url(#breeze-shell-line-130)">│</text><text class="breeze-shell-r7" x="756.4" y="3192" textLength="683.2" clip-path="url(#breeze-shell-line-130)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3192" textLength="12.2" clip-path="url(#breeze-shell-line-130)">│</text><text class="breeze-shell-r1" x="1464" y="3192" textLength="12.2" clip-path="url(#breeze-shell-line-130)">
-</text><text class="breeze-shell-r5" x="0" y="3216.4" textLength="12.2" clip-path="url(#breeze-shell-line-131)">│</text><text class="breeze-shell-r4" x="24.4" y="3216.4" textLength="341.6" clip-path="url(#breeze-shell-line-131)">--providers-skip-constraints</text><text class="breeze-shell-r1" x="756.4" y="3216.4" textLength="597.8" clip-path="url(#breeze-shell-line-131)">Do&#160;not&#160;use&#160;constraints&#160;when&#160;installing&#160;providers.</text><text class="breeze-shell-r5" x="1451.8" y="3216.4" textLength="12.2" clip-path="url(#breeze-shell-line-131)">│</text><text class="breeze-shell-r1" x="1464" y="3216.4" textLength="12.2" clip-path="url(#breeze-shell-line-131)">
-</text><text class="breeze-shell-r5" x="0" y="3240.8" textLength="12.2" clip-path="url(#breeze-shell-line-132)">│</text><text class="breeze-shell-r4" x="24.4" y="3240.8" textLength="256.2" clip-path="url(#breeze-shell-line-132)">--use-airflow-version</text><text class="breeze-shell-r1" x="756.4" y="3240.8" textLength="683.2" clip-path="url(#breeze-shell-line-132)">Use&#160;(reinstall&#160;at&#160;entry)&#160;Airflow&#160;version&#160;from&#160;PyPI.&#160;It&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3240.8" textLength="12.2" clip-path="url(#breeze-shell-line-132)">│</text><text class="breeze-shell-r1" x="1464" y="3240.8" textLength="12.2" clip-path="url(#breeze-shell-line-132)">
-</text><text class="breeze-shell-r5" x="0" y="3265.2" textLength="12.2" clip-path="url(#breeze-shell-line-133)">│</text><text class="breeze-shell-r1" x="756.4" y="3265.2" textLength="683.2" clip-path="url(#breeze-shell-line-133)">can&#160;also&#160;be&#160;version&#160;(to&#160;install&#160;from&#160;PyPI),&#160;`none`,&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3265.2" textLength="12.2" clip-path="url(#breeze-shell-line-133)">│</text><text class="breeze-shell-r1" x="1464" y="3265.2" textLength="12.2" clip-path="url(#breeze-shell-line-133)">
-</text><text class="breeze-shell-r5" x="0" y="3289.6" textLength="12.2" clip-path="url(#breeze-shell-line-134)">│</text><text class="breeze-shell-r1" x="756.4" y="3289.6" textLength="683.2" clip-path="url(#breeze-shell-line-134)">`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder,&#160;or&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3289.6" textLength="12.2" clip-path="url(#breeze-shell-line-134)">│</text><text class="breeze-shell-r1" x="1464" y="3289.6" textLength="12.2" clip-path="url(#breeze-shell-line-134)">
-</text><text class="breeze-shell-r5" x="0" y="3314" textLength="12.2" clip-path="url(#breeze-shell-line-135)">│</text><text class="breeze-shell-r1" x="756.4" y="3314" textLength="683.2" clip-path="url(#breeze-shell-line-135)">VCS&#160;URL&#160;to&#160;install&#160;from&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3314" textLength="12.2" clip-path="url(#breeze-shell-line-135)">│</text><text class="breeze-shell-r1" x="1464" y="3314" textLength="12.2" clip-path="url(#breeze-shell-line-135)">
-</text><text class="breeze-shell-r5" x="0" y="3338.4" textLength="12.2" clip-path="url(#breeze-shell-line-136)">│</text><text class="breeze-shell-r1" x="756.4" y="3338.4" textLength="683.2" clip-path="url(#breeze-shell-line-136)">(https://pip.pypa.io/en/stable/topics/vcs-support/).&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3338.4" textLength="12.2" clip-path="url(#breeze-shell-line-136)">│</text><text class="breeze-shell-r1" x="1464" y="3338.4" textLength="12.2" clip-path="url(#breeze-shell-line-136)">
-</text><text class="breeze-shell-r5" x="0" y="3362.8" textLength="12.2" clip-path="url(#breeze-shell-line-137)">│</text><text class="breeze-shell-r1" x="756.4" y="3362.8" textLength="97.6" clip-path="url(#breeze-shell-line-137)">Implies&#160;</text><text class="breeze-shell-r4" x="854" y="3362.8" textLength="183" clip-path="url(#breeze-shell-line-137)">--mount-sources</text><text class="breeze-shell-r1" x="1037" y="3362.8" textLength="402.6" clip-path="url(#breeze-shell-line-137)">&#160;`remove`.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3362.8" textLength="12.2" clip-path="url(#breeze-shell-line-137)">│</text><text class="breeze-shell-r1" x="1464" y="3362.8" textLength="12.2" clip-path="url(#breeze-shell-line-137)">
-</text><text class="breeze-shell-r5" x="0" y="3387.2" textLength="12.2" clip-path="url(#breeze-shell-line-138)">│</text><text class="breeze-shell-r7" x="756.4" y="3387.2" textLength="683.2" clip-path="url(#breeze-shell-line-138)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3387.2" textLength="12.2" clip-path="url(#breeze-shell-line-138)">│</text><text class="breeze-shell-r1" x="1464" y="3387.2" textLength="12.2" clip-path="url(#breeze-shell-line-138)">
-</text><text class="breeze-shell-r5" x="0" y="3411.6" textLength="12.2" clip-path="url(#breeze-shell-line-139)">│</text><text class="breeze-shell-r4" x="24.4" y="3411.6" textLength="244" clip-path="url(#breeze-shell-line-139)">--allow-pre-releases</text><text class="breeze-shell-r1" x="756.4" y="3411.6" textLength="683.2" clip-path="url(#breeze-shell-line-139)">Allow&#160;pre-releases&#160;of&#160;Airflow,&#160;task-sdk&#160;and&#160;providers&#160;to</text><text class="breeze-shell-r5" x="1451.8" y="3411.6" textLength="12.2" clip-path="url(#breeze-shell-line-139)">│</text><text class="breeze-shell-r1" x="1464" y="3411.6" textLength="12.2" clip-path="url(#breeze-shell-line-139)">
-</text><text class="breeze-shell-r5" x="0" y="3436" textLength="12.2" clip-path="url(#breeze-shell-line-140)">│</text><text class="breeze-shell-r1" x="756.4" y="3436" textLength="683.2" clip-path="url(#breeze-shell-line-140)">be&#160;installed.&#160;Set&#160;to&#160;true&#160;automatically&#160;for&#160;pre-release&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3436" textLength="12.2" clip-path="url(#breeze-shell-line-140)">│</text><text class="breeze-shell-r1" x="1464" y="3436" textLength="12.2" clip-path="url(#breeze-shell-line-140)">
-</text><text class="breeze-shell-r5" x="0" y="3460.4" textLength="12.2" clip-path="url(#breeze-shell-line-141)">│</text><text class="breeze-shell-r4" x="756.4" y="3460.4" textLength="256.2" clip-path="url(#breeze-shell-line-141)">--use-airflow-version</text><text class="breeze-shell-r1" x="1012.6" y="3460.4" textLength="427" clip-path="url(#breeze-shell-line-141)">)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3460.4" textLength="12.2" clip-path="url(#breeze-shell-line-141)">│</text><text class="breeze-shell-r1" x="1464" y="3460.4" textLength="12.2" clip-path="url(#breeze-shell-line-141)">
-</text><text class="breeze-shell-r5" x="0" y="3484.8" textLength="12.2" clip-path="url(#breeze-shell-line-142)">│</text><text class="breeze-shell-r4" x="24.4" y="3484.8" textLength="353.8" clip-path="url(#breeze-shell-line-142)">--use-distributions-from-dist</text><text class="breeze-shell-r1" x="756.4" y="3484.8" textLength="402.6" clip-path="url(#breeze-shell-line-142)">Install&#160;all&#160;found&#160;distributions&#160;(</text><text class="breeze-shell-r4" x="1159" y="3484.8" textLength="256.2" clip-path="url(#breeze-shell-line-142)">--distribution-format</text><text class="breeze-shell-r5" x="1451.8" y="3484.8" textLength="12.2" clip-path="url(#breeze-shell-line-142)">│</text><text class="breeze-shell-r1" x="1464" y="3484.8" textLength="12.2" clip-path="url(#breeze-shell-line-142)">
-</text><text class="breeze-shell-r5" x="0" y="3509.2" textLength="12.2" clip-path="url(#breeze-shell-line-143)">│</text><text class="breeze-shell-r1" x="756.4" y="3509.2" textLength="683.2" clip-path="url(#breeze-shell-line-143)">determines&#160;type)&#160;from&#160;&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3509.2" textLength="12.2" clip-path="url(#breeze-shell-line-143)">│</text><text class="breeze-shell-r1" x="1464" y="3509.2" textLength="12.2" clip-path="url(#breeze-shell-line-143)">
-</text><text class="breeze-shell-r5" x="0" y="3533.6" textLength="12.2" clip-path="url(#breeze-shell-line-144)">│</text><text class="breeze-shell-r1" x="756.4" y="3533.6" textLength="683.2" clip-path="url(#breeze-shell-line-144)">breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3533.6" textLength="12.2" clip-path="url(#breeze-shell-line-144)">│</text><text class="breeze-shell-r1" x="1464" y="3533.6" textLength="12.2" clip-path="url(#breeze-shell-line-144)">
-</text><text class="breeze-shell-r5" x="0" y="3558" textLength="12.2" clip-path="url(#breeze-shell-line-145)">│</text><text class="breeze-shell-r4" x="24.4" y="3558" textLength="378.2" clip-path="url(#breeze-shell-line-145)">--install-airflow-python-client</text><text class="breeze-shell-r1" x="756.4" y="3558" textLength="683.2" clip-path="url(#breeze-shell-line-145)">Install&#160;airflow&#160;python&#160;client&#160;packages&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3558" textLength="12.2" clip-path="url(#breeze-shell-line-145)">│</text><text class="breeze-shell-r1" x="1464" y="3558" textLength="12.2" clip-path="url(#breeze-shell-line-145)">
-</text><text class="breeze-shell-r5" x="0" y="3582.4" textLength="12.2" clip-path="url(#breeze-shell-line-146)">│</text><text class="breeze-shell-r1" x="756.4" y="3582.4" textLength="12.2" clip-path="url(#breeze-shell-line-146)">(</text><text class="breeze-shell-r4" x="768.6" y="3582.4" textLength="256.2" clip-path="url(#breeze-shell-line-146)">--distribution-format</text><text class="breeze-shell-r1" x="1024.8" y="3582.4" textLength="414.8" clip-path="url(#breeze-shell-line-146)">&#160;determines&#160;type)&#160;from&#160;&#x27;dist&#x27;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3582.4" textLength="12.2" clip-path="url(#breeze-shell-line-146)">│</text><text class="breeze-shell-r1" x="1464" y="3582.4" textLength="12.2" clip-path="url(#breeze-shell-line-146)">
-</text><text class="breeze-shell-r5" x="0" y="3606.8" textLength="12.2" clip-path="url(#breeze-shell-line-147)">│</text><text class="breeze-shell-r1" x="756.4" y="3606.8" textLength="683.2" clip-path="url(#breeze-shell-line-147)">folder&#160;when&#160;entering&#160;breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3606.8" textLength="12.2" clip-path="url(#breeze-shell-line-147)">│</text><text class="breeze-shell-r1" x="1464" y="3606.8" textLength="12.2" clip-path="url(#breeze-shell-line-147)">
-</text><text class="breeze-shell-r5" x="0" y="3631.2" textLength="1464" clip-path="url(#breeze-shell-line-148)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="3631.2" textLength="12.2" clip-path="url(#breeze-shell-line-148)">
-</text><text class="breeze-shell-r5" x="0" y="3655.6" textLength="24.4" clip-path="url(#breeze-shell-line-149)">╭─</text><text class="breeze-shell-r5" x="24.4" y="3655.6" textLength="610" clip-path="url(#breeze-shell-line-149)">&#160;Upgrading/downgrading/removing&#160;selected&#160;packages&#160;</text><text class="breeze-shell-r5" x="634.4" y="3655.6" textLength="805.2" clip-path="url(#breeze-shell-line-149)">──────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="3655.6" textLength="24.4" clip-path="url(#breeze-shell-line-149)">─╮</text><text class="breeze-shell-r1" x="1464" y="3655.6" textLength="12.2" clip-path="url(#breeze-shell-line-149)">
-</text><text class="breeze-shell-r5" x="0" y="3680" textLength="12.2" clip-path="url(#breeze-shell-line-150)">│</text><text class="breeze-shell-r4" x="24.4" y="3680" textLength="170.8" clip-path="url(#breeze-shell-line-150)">--upgrade-boto</text><text class="breeze-shell-r1" x="341.6" y="3680" textLength="866.2" clip-path="url(#breeze-shell-line-150)">Remove&#160;aiobotocore&#160;and&#160;upgrade&#160;botocore&#160;and&#160;boto&#160;to&#160;the&#160;latest&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y="3680" textLength="12.2" clip-path="url(#breeze-shell-line-150)">│</text><text class="breeze-shell-r1" x="1464" y="3680" textLength="12.2" clip-path="url(#breeze-shell-line-150)">
-</text><text class="breeze-shell-r5" x="0" y="3704.4" textLength="12.2" clip-path="url(#breeze-shell-line-151)">│</text><text class="breeze-shell-r4" x="24.4" y="3704.4" textLength="268.4" clip-path="url(#breeze-shell-line-151)">--downgrade-sqlalchemy</text><text class="breeze-shell-r1" x="341.6" y="3704.4" textLength="610" clip-path="url(#breeze-shell-line-151)">Downgrade&#160;SQLAlchemy&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y="3704.4" textLength="12.2" clip-path="url(#breeze-shell-line-151)">│</text><text class="breeze-shell-r1" x="1464" y="3704.4" textLength="12.2" clip-path="url(#breeze-shell-line-151)">
-</text><text class="breeze-shell-r5" x="0" y="3728.8" textLength="12.2" clip-path="url(#breeze-shell-line-152)">│</text><text class="breeze-shell-r4" x="24.4" y="3728.8" textLength="244" clip-path="url(#breeze-shell-line-152)">--downgrade-pendulum</text><text class="breeze-shell-r1" x="341.6" y="3728.8" textLength="585.6" clip-path="url(#breeze-shell-line-152)">Downgrade&#160;Pendulum&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y="3728.8" textLength="12.2" clip-path="url(#breeze-shell-line-152)">│</text><text class="breeze-shell-r1" x="1464" y="3728.8" textLength="12.2" clip-path="url(#breeze-shell-line-152)">
-</text><text class="breeze-shell-r5" x="0" y="3753.2" textLength="1464" clip-path="url(#breeze-shell-line-153)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="3753.2" textLength="12.2" clip-path="url(#breeze-shell-line-153)">
-</text><text class="breeze-shell-r5" x="0" y="3777.6" textLength="24.4" clip-path="url(#breeze-shell-line-154)">╭─</text><text class="breeze-shell-r5" x="24.4" y="3777.6" textLength="183" clip-path="url(#breeze-shell-line-154)">&#160;DB&#160;test&#160;flags&#160;</text><text class="breeze-shell-r5" x="207.4" y="3777.6" textLength="1232.2" clip-path="url(#breeze-shell-line-154)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="3777.6" textLength="24.4" clip-path="url(#breeze-shell-line-154)">─╮</text><text class="breeze-shell-r1" x="1464" y="3777.6" textLength="12.2" clip-path="url(#breeze-shell-line-154)">
-</text><text class="breeze-shell-r5" x="0" y="3802" textLength="12.2" clip-path="url(#breeze-shell-line-155)">│</text><text class="breeze-shell-r4" x="24.4" y="3802" textLength="231.8" clip-path="url(#breeze-shell-line-155)">--run-db-tests-only</text><text class="breeze-shell-r1" x="305" y="3802" textLength="475.8" clip-path="url(#breeze-shell-line-155)">Only&#160;runs&#160;tests&#160;that&#160;require&#160;a&#160;database</text><text class="breeze-shell-r5" x="1451.8" y="3802" textLength="12.2" clip-path="url(#breeze-shell-line-155)">│</text><text class="breeze-shell-r1" x="1464" y="3802" textLength="12.2" clip-path="url(#breeze-shell-line-155)">
-</text><text class="breeze-shell-r5" x="0" y="3826.4" textLength="12.2" clip-path="url(#breeze-shell-line-156)">│</text><text class="breeze-shell-r4" x="24.4" y="3826.4" textLength="183" clip-path="url(#breeze-shell-line-156)">--skip-db-tests</text><text class="breeze-shell-r1" x="305" y="3826.4" textLength="414.8" clip-path="url(#breeze-shell-line-156)">Skip&#160;tests&#160;that&#160;require&#160;a&#160;database</text><text class="breeze-shell-r5" x="1451.8" y="3826.4" textLength="12.2" clip-path="url(#breeze-shell-line-156)">│</text><text class="breeze-shell-r1" x="1464" y="3826.4" textLength="12.2" clip-path="url(#breeze-shell-line-156)">
-</text><text class="breeze-shell-r5" x="0" y="3850.8" textLength="1464" clip-path="url(#breeze-shell-line-157)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="3850.8" textLength="12.2" clip-path="url(#breeze-shell-line-157)">
-</text><text class="breeze-shell-r5" x="0" y="3875.2" textLength="24.4" clip-path="url(#breeze-shell-line-158)">╭─</text><text class="breeze-shell-r5" x="24.4" y="3875.2" textLength="183" clip-path="url(#breeze-shell-line-158)">&#160;Other&#160;options&#160;</text><text class="breeze-shell-r5" x="207.4" y="3875.2" textLength="1232.2" clip-path="url(#breeze-shell-line-158)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="3875.2" textLength="24.4" clip-path="url(#breeze-shell-line-158)">─╮</text><text class="breeze-shell-r1" x="1464" y="3875.2" textLength="12.2" clip-path="url(#breeze-shell-line-158)">
-</text><text class="breeze-shell-r5" x="0" y="3899.6" textLength="12.2" clip-path="url(#breeze-shell-line-159)">│</text><text class="breeze-shell-r4" x="24.4" y="3899.6" textLength="256.2" clip-path="url(#breeze-shell-line-159)">--forward-credentials</text><text class="breeze-shell-r6" x="305" y="3899.6" textLength="24.4" clip-path="url(#breeze-shell-line-159)">-f</text><text class="breeze-shell-r1" x="353.8" y="3899.6" textLength="634.4" clip-path="url(#breeze-shell-line-159)">Forward&#160;local&#160;credentials&#160;to&#160;container&#160;when&#160;running.</text><text class="breeze-shell-r5" x="1451.8" y="3899.6" textLength="12.2" clip-path="url(#breeze-shell-line-159)">│</text><text class="breeze-shell-r1" x="1464" y="3899.6" textLength="12.2" clip-path="url(#breeze-shell-line-159)">
-</text><text class="breeze-shell-r5" x="0" y="3924" textLength="12.2" clip-path="url(#breeze-shell-line-160)">│</text><text class="breeze-shell-r4" x="24.4" y="3924" textLength="122" clip-path="url(#breeze-shell-line-160)">--max-time</text><text class="breeze-shell-r1" x="353.8" y="3924" textLength="1049.2" clip-path="url(#breeze-shell-line-160)">Maximum&#160;time&#160;that&#160;the&#160;command&#160;should&#160;take&#160;-&#160;if&#160;it&#160;takes&#160;longer,&#160;the&#160;command&#160;will&#160;fail.</text><text class="breeze-shell-r5" x="1451.8" y="3924" textLength="12.2" clip-path="url(#breeze-shell-line-160)">│</text><text class="breeze-shell-r1" x="1464" y="3924" textLength="12.2" clip-path="url(#breeze-shell-line-160)">
-</text><text class="breeze-shell-r5" x="0" y="3948.4" textLength="12.2" clip-path="url(#breeze-shell-line-161)">│</text><text class="breeze-shell-r7" x="353.8" y="3948.4" textLength="1049.2" clip-path="url(#breeze-shell-line-161)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3948.4" textLength="12.2" clip-path="url(#breeze-shell-line-161)">│</text><text class="breeze-shell-r1" x="1464" y="3948.4" textLength="12.2" clip-path="url(#breeze-shell-line-161)">
-</text><text class="breeze-shell-r5" x="0" y="3972.8" textLength="12.2" clip-path="url(#breeze-shell-line-162)">│</text><text class="breeze-shell-r4" x="24.4" y="3972.8" textLength="219.6" clip-path="url(#breeze-shell-line-162)">--verbose-commands</text><text class="breeze-shell-r1" x="353.8" y="3972.8" textLength="414.8" clip-path="url(#breeze-shell-line-162)">Show&#160;details&#160;of&#160;commands&#160;executed.</text><text class="breeze-shell-r5" x="1451.8" y="3972.8" textLength="12.2" clip-path="url(#breeze-shell-line-162)">│</text><text class="breeze-shell-r1" x="1464" y="3972.8" textLength="12.2" clip-path="url(#breeze-shell-line-162)">
-</text><text class="breeze-shell-r5" x="0" y="3997.2" textLength="12.2" clip-path="url(#breeze-shell-line-163)">│</text><text class="breeze-shell-r4" x="24.4" y="3997.2" textLength="244" clip-path="url(#breeze-shell-line-163)">--keep-env-variables</text><text class="breeze-shell-r1" x="353.8" y="3997.2" textLength="1000.4" clip-path="url(#breeze-shell-line-163)">Do&#160;not&#160;clear&#160;environment&#160;variables&#160;that&#160;might&#160;have&#160;side&#160;effect&#160;while&#160;running&#160;tests</text><text class="breeze-shell-r5" x="1451.8" y="3997.2" textLength="12.2" clip-path="url(#breeze-shell-line-163)">│</text><text class="breeze-shell-r1" x="1464" y="3997.2" textLength="12.2" clip-path="url(#breeze-shell-line-163)">
-</text><text class="breeze-shell-r5" x="0" y="4021.6" textLength="12.2" clip-path="url(#breeze-shell-line-164)">│</text><text class="breeze-shell-r4" x="24.4" y="4021.6" textLength="183" clip-path="url(#breeze-shell-line-164)">--no-db-cleanup</text><text class="breeze-shell-r1" x="353.8" y="4021.6" textLength="597.8" clip-path="url(#breeze-shell-line-164)">Do&#160;not&#160;clear&#160;the&#160;database&#160;before&#160;each&#160;test&#160;module</text><text class="breeze-shell-r5" x="1451.8" y="4021.6" textLength="12.2" clip-path="url(#breeze-shell-line-164)">│</text><text class="breeze-shell-r1" x="1464" y="4021.6" textLength="12.2" clip-path="url(#breeze-shell-line-164)">
-</text><text class="breeze-shell-r5" x="0" y="4046" textLength="1464" clip-path="url(#breeze-shell-line-165)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="4046" textLength="12.2" clip-path="url(#breeze-shell-line-165)">
-</text><text class="breeze-shell-r5" x="0" y="4070.4" textLength="24.4" clip-path="url(#breeze-shell-line-166)">╭─</text><text class="breeze-shell-r5" x="24.4" y="4070.4" textLength="195.2" clip-path="url(#breeze-shell-line-166)">&#160;Common&#160;options&#160;</text><text class="breeze-shell-r5" x="219.6" y="4070.4" textLength="1220" clip-path="url(#breeze-shell-line-166)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="4070.4" textLength="24.4" clip-path="url(#breeze-shell-line-166)">─╮</text><text class="breeze-shell-r1" x="1464" y="4070.4" textLength="12.2" clip-path="url(#breeze-shell-line-166)">
-</text><text class="breeze-shell-r5" x="0" y="4094.8" textLength="12.2" clip-path="url(#breeze-shell-line-167)">│</text><text class="breeze-shell-r4" x="24.4" y="4094.8" textLength="97.6" clip-path="url(#breeze-shell-line-167)">--answer</text><text class="breeze-shell-r6" x="158.6" y="4094.8" textLength="24.4" clip-path="url(#breeze-shell-line-167)">-a</text><text class="breeze-shell-r1" x="207.4" y="4094.8" textLength="317.2" clip-path="url(#breeze-shell-line-167)">Force&#160;answer&#160;to&#160;questions.</text><text class="breeze-shell-r7" x="536.8" y="4094.8" textLength="353.8" clip-path="url(#breeze-shell-line-167)">(y&#160;|&#160;n&#160;|&#160;q&#160;|&#160;yes&#160;|&#160;no&#160;|&#160;quit)</text><text class="breeze-shell-r5" x="1451.8" y="4094.8" textLength="12.2" clip-path="url(#breeze-shell-line-167)">│</text><text class="breeze-shell-r1" x="1464" y="4094.8" textLength="12.2" clip-path="url(#breeze-shell-line-167)">
-</text><text class="breeze-shell-r5" x="0" y="4119.2" textLength="12.2" clip-path="url(#breeze-shell-line-168)">│</text><text class="breeze-shell-r4" x="24.4" y="4119.2" textLength="109.8" clip-path="url(#breeze-shell-line-168)">--dry-run</text><text class="breeze-shell-r6" x="158.6" y="4119.2" textLength="24.4" clip-path="url(#breeze-shell-line-168)">-D</text><text class="breeze-shell-r1" x="207.4" y="4119.2" textLength="719.8" clip-path="url(#breeze-shell-line-168)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-shell-r5" x="1451.8" y="4119.2" textLength="12.2" clip-path="url(#breeze-shell-line-168)">│</text><text class="breeze-shell-r1" x="1464" y="4119.2" textLength="12.2" clip-path="url(#breeze-shell-line-168)">
-</text><text class="breeze-shell-r5" x="0" y="4143.6" textLength="12.2" clip-path="url(#breeze-shell-line-169)">│</text><text class="breeze-shell-r4" x="24.4" y="4143.6" textLength="109.8" clip-path="url(#breeze-shell-line-169)">--verbose</text><text class="breeze-shell-r6" x="158.6" y="4143.6" textLength="24.4" clip-path="url(#breeze-shell-line-169)">-v</text><text class="breeze-shell-r1" x="207.4" y="4143.6" textLength="585.6" clip-path="url(#breeze-shell-line-169)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-shell-r5" x="1451.8" y="4143.6" textLength="12.2" clip-path="url(#breeze-shell-line-169)">│</text><text class="breeze-shell-r1" x="1464" y="4143.6" textLength="12.2" clip-path="url(#breeze-shell-line-169)">
-</text><text class="breeze-shell-r5" x="0" y="4168" textLength="12.2" clip-path="url(#breeze-shell-line-170)">│</text><text class="breeze-shell-r4" x="24.4" y="4168" textLength="73.2" clip-path="url(#breeze-shell-line-170)">--help</text><text class="breeze-shell-r6" x="158.6" y="4168" textLength="24.4" clip-path="url(#breeze-shell-line-170)">-h</text><text class="breeze-shell-r1" x="207.4" y="4168" textLength="329.4" clip-path="url(#breeze-shell-line-170)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-shell-r5" x="1451.8" y="4168" textLength="12.2" clip-path="url(#breeze-shell-line-170)">│</text><text class="breeze-shell-r1" x="1464" y="4168" textLength="12.2" clip-path="url(#breeze-shell-line-170)">
-</text><text class="breeze-shell-r5" x="0" y="4192.4" textLength="1464" clip-path="url(#breeze-shell-line-171)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="4192.4" textLength="12.2" clip-path="url(#breeze-shell-line-171)">
+</text><text class="breeze-shell-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-shell-line-48)">│</text><text class="breeze-shell-r4" x="24.4" y="1191.2" textLength="109.8" clip-path="url(#breeze-shell-line-48)">--backend</text><text class="breeze-shell-r6" x="268.4" y="1191.2" textLength="24.4" clip-path="url(#breeze-shell-line-48)">-b</text><text class="breeze-shell-r1" x="488" y="1191.2" textLength="951.6" clip-path="url(#breeze-shell-line-48)">Database&#160;backend&#160;to&#160;use.&#160;Default&#160;is&#160;&#x27;sqlite&#x27;.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;Breeze&#160;will</text><text class="breeze-shell-r5" x="1451.8" y="1191.2" textLength="12.2" clip-path="url(#breeze-shell-line-48)">│</text><text class="breeze-shell-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#breeze-shell-line-48)">
+</text><text class="breeze-shell-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-shell-line-49)">│</text><text class="breeze-shell-r1" x="488" y="1215.6" textLength="951.6" clip-path="url(#breeze-shell-line-49)">start&#160;with&#160;an&#160;invalid&#160;database&#160;configuration&#160;—&#160;no&#160;database&#160;will&#160;be&#160;available,&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1215.6" textLength="12.2" clip-path="url(#breeze-shell-line-49)">│</text><text class="breeze-shell-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-shell-line-49)">
+</text><text class="breeze-shell-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-shell-line-50)">│</text><text class="breeze-shell-r1" x="488" y="1240" textLength="951.6" clip-path="url(#breeze-shell-line-50)">and&#160;any&#160;attempt&#160;to&#160;run&#160;Airflow&#160;will&#160;fail.&#160;Use&#160;&#x27;none&#x27;&#160;only&#160;for&#160;specific&#160;non-DB&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1240" textLength="12.2" clip-path="url(#breeze-shell-line-50)">│</text><text class="breeze-shell-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-shell-line-50)">
+</text><text class="breeze-shell-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-shell-line-51)">│</text><text class="breeze-shell-r1" x="488" y="1264.4" textLength="951.6" clip-path="url(#breeze-shell-line-51)">test&#160;cases.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1264.4" textLength="12.2" clip-path="url(#breeze-shell-line-51)">│</text><text class="breeze-shell-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-shell-line-51)">
+</text><text class="breeze-shell-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-shell-line-52)">│</text><text class="breeze-shell-r7" x="488" y="1288.8" textLength="951.6" clip-path="url(#breeze-shell-line-52)">(&gt;sqlite&lt;&#160;|&#160;mysql&#160;|&#160;postgres&#160;|&#160;none)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1288.8" textLength="12.2" clip-path="url(#breeze-shell-line-52)">│</text><text class="breeze-shell-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-shell-line-52)">
+</text><text class="breeze-shell-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-shell-line-53)">│</text><text class="breeze-shell-r5" x="488" y="1313.2" textLength="951.6" clip-path="url(#breeze-shell-line-53)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1313.2" textLength="12.2" clip-path="url(#breeze-shell-line-53)">│</text><text class="breeze-shell-r1" x="1464" y="1313.2" textLength="12.2" clip-path="url(#breeze-shell-line-53)">
+</text><text class="breeze-shell-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-shell-line-54)">│</text><text class="breeze-shell-r4" x="24.4" y="1337.6" textLength="219.6" clip-path="url(#breeze-shell-line-54)">--postgres-version</text><text class="breeze-shell-r6" x="268.4" y="1337.6" textLength="24.4" clip-path="url(#breeze-shell-line-54)">-P</text><text class="breeze-shell-r1" x="488" y="1337.6" textLength="305" clip-path="url(#breeze-shell-line-54)">Version&#160;of&#160;Postgres&#160;used.</text><text class="breeze-shell-r7" x="805.2" y="1337.6" textLength="317.2" clip-path="url(#breeze-shell-line-54)">(&gt;13&lt;&#160;|&#160;14&#160;|&#160;15&#160;|&#160;16&#160;|&#160;17)</text><text class="breeze-shell-r5" x="1134.6" y="1337.6" textLength="158.6" clip-path="url(#breeze-shell-line-54)">[default:&#160;13]</text><text class="breeze-shell-r5" x="1451.8" y="1337.6" textLength="12.2" clip-path="url(#breeze-shell-line-54)">│</text><text class="breeze-shell-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-shell-line-54)">
+</text><text class="breeze-shell-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-shell-line-55)">│</text><text class="breeze-shell-r4" x="24.4" y="1362" textLength="183" clip-path="url(#breeze-shell-line-55)">--mysql-version</text><text class="breeze-shell-r6" x="268.4" y="1362" textLength="24.4" clip-path="url(#breeze-shell-line-55)">-M</text><text class="breeze-shell-r1" x="488" y="1362" textLength="268.4" clip-path="url(#breeze-shell-line-55)">Version&#160;of&#160;MySQL&#160;used.</text><text class="breeze-shell-r7" x="768.6" y="1362" textLength="158.6" clip-path="url(#breeze-shell-line-55)">(&gt;8.0&lt;&#160;|&#160;8.4)</text><text class="breeze-shell-r5" x="939.4" y="1362" textLength="170.8" clip-path="url(#breeze-shell-line-55)">[default:&#160;8.0]</text><text class="breeze-shell-r5" x="1451.8" y="1362" textLength="12.2" clip-path="url(#breeze-shell-line-55)">│</text><text class="breeze-shell-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#breeze-shell-line-55)">
+</text><text class="breeze-shell-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-shell-line-56)">│</text><text class="breeze-shell-r4" x="24.4" y="1386.4" textLength="122" clip-path="url(#breeze-shell-line-56)">--db-reset</text><text class="breeze-shell-r6" x="268.4" y="1386.4" textLength="24.4" clip-path="url(#breeze-shell-line-56)">-d</text><text class="breeze-shell-r1" x="292.8" y="1386.4" textLength="12.2" clip-path="url(#breeze-shell-line-56)">/</text><text class="breeze-shell-r4" x="305" y="1386.4" textLength="158.6" clip-path="url(#breeze-shell-line-56)">--no-db-reset</text><text class="breeze-shell-r1" x="488" y="1386.4" textLength="451.4" clip-path="url(#breeze-shell-line-56)">Reset&#160;DB&#160;when&#160;entering&#160;the&#160;container.</text><text class="breeze-shell-r5" x="951.6" y="1386.4" textLength="268.4" clip-path="url(#breeze-shell-line-56)">[default:&#160;no-db-reset]</text><text class="breeze-shell-r5" x="1451.8" y="1386.4" textLength="12.2" clip-path="url(#breeze-shell-line-56)">│</text><text class="breeze-shell-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-shell-line-56)">
+</text><text class="breeze-shell-r5" x="0" y="1410.8" textLength="1464" clip-path="url(#breeze-shell-line-57)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-shell-line-57)">
+</text><text class="breeze-shell-r5" x="0" y="1435.2" textLength="24.4" clip-path="url(#breeze-shell-line-58)">╭─</text><text class="breeze-shell-r5" x="24.4" y="1435.2" textLength="207.4" clip-path="url(#breeze-shell-line-58)">&#160;Choose&#160;executor&#160;</text><text class="breeze-shell-r5" x="231.8" y="1435.2" textLength="1207.8" clip-path="url(#breeze-shell-line-58)">───────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="1435.2" textLength="24.4" clip-path="url(#breeze-shell-line-58)">─╮</text><text class="breeze-shell-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-shell-line-58)">
+</text><text class="breeze-shell-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-shell-line-59)">│</text><text class="breeze-shell-r4" x="24.4" y="1459.6" textLength="122" clip-path="url(#breeze-shell-line-59)">--executor</text><text class="breeze-shell-r1" x="256.2" y="1459.6" textLength="1061.4" clip-path="url(#breeze-shell-line-59)">Specify&#160;the&#160;executor&#160;to&#160;use&#160;with&#160;shell&#160;command.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1459.6" textLength="12.2" clip-path="url(#breeze-shell-line-59)">│</text><text class="breeze-shell-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-shell-line-59)">
+</text><text class="breeze-shell-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-shell-line-60)">│</text><text class="breeze-shell-r7" x="256.2" y="1484" textLength="1061.4" clip-path="url(#breeze-shell-line-60)">(LocalExecutor|KubernetesExecutor|CeleryExecutor|CeleryKubernetesExecutor|EdgeExecutor)</text><text class="breeze-shell-r5" x="1451.8" y="1484" textLength="12.2" clip-path="url(#breeze-shell-line-60)">│</text><text class="breeze-shell-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-shell-line-60)">
+</text><text class="breeze-shell-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-shell-line-61)">│</text><text class="breeze-shell-r5" x="256.2" y="1508.4" textLength="1061.4" clip-path="url(#breeze-shell-line-61)">[default:&#160;LocalExecutor]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1508.4" textLength="12.2" clip-path="url(#breeze-shell-line-61)">│</text><text class="breeze-shell-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-shell-line-61)">
+</text><text class="breeze-shell-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-shell-line-62)">│</text><text class="breeze-shell-r4" x="24.4" y="1532.8" textLength="183" clip-path="url(#breeze-shell-line-62)">--celery-broker</text><text class="breeze-shell-r1" x="256.2" y="1532.8" textLength="402.6" clip-path="url(#breeze-shell-line-62)">Specify&#160;the&#160;celery&#160;message&#160;broker</text><text class="breeze-shell-r7" x="671" y="1532.8" textLength="195.2" clip-path="url(#breeze-shell-line-62)">(rabbitmq|redis)</text><text class="breeze-shell-r5" x="878.4" y="1532.8" textLength="195.2" clip-path="url(#breeze-shell-line-62)">[default:&#160;redis]</text><text class="breeze-shell-r5" x="1451.8" y="1532.8" textLength="12.2" clip-path="url(#breeze-shell-line-62)">│</text><text class="breeze-shell-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-shell-line-62)">
+</text><text class="breeze-shell-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-shell-line-63)">│</text><text class="breeze-shell-r4" x="24.4" y="1557.2" textLength="183" clip-path="url(#breeze-shell-line-63)">--celery-flower</text><text class="breeze-shell-r1" x="256.2" y="1557.2" textLength="231.8" clip-path="url(#breeze-shell-line-63)">Start&#160;celery&#160;flower</text><text class="breeze-shell-r5" x="1451.8" y="1557.2" textLength="12.2" clip-path="url(#breeze-shell-line-63)">│</text><text class="breeze-shell-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-shell-line-63)">
+</text><text class="breeze-shell-r5" x="0" y="1581.6" textLength="1464" clip-path="url(#breeze-shell-line-64)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-shell-line-64)">
+</text><text class="breeze-shell-r5" x="0" y="1606" textLength="24.4" clip-path="url(#breeze-shell-line-65)">╭─</text><text class="breeze-shell-r5" x="24.4" y="1606" textLength="488" clip-path="url(#breeze-shell-line-65)">&#160;Build&#160;CI&#160;image&#160;(before&#160;entering&#160;shell)&#160;</text><text class="breeze-shell-r5" x="512.4" y="1606" textLength="927.2" clip-path="url(#breeze-shell-line-65)">────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="1606" textLength="24.4" clip-path="url(#breeze-shell-line-65)">─╮</text><text class="breeze-shell-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-shell-line-65)">
+</text><text class="breeze-shell-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-shell-line-66)">│</text><text class="breeze-shell-r4" x="24.4" y="1630.4" textLength="158.6" clip-path="url(#breeze-shell-line-66)">--force-build</text><text class="breeze-shell-r1" x="341.6" y="1630.4" textLength="707.6" clip-path="url(#breeze-shell-line-66)">Force&#160;image&#160;build&#160;no&#160;matter&#160;if&#160;it&#160;is&#160;determined&#160;as&#160;needed.</text><text class="breeze-shell-r5" x="1451.8" y="1630.4" textLength="12.2" clip-path="url(#breeze-shell-line-66)">│</text><text class="breeze-shell-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-shell-line-66)">
+</text><text class="breeze-shell-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-shell-line-67)">│</text><text class="breeze-shell-r4" x="24.4" y="1654.8" textLength="122" clip-path="url(#breeze-shell-line-67)">--platform</text><text class="breeze-shell-r1" x="341.6" y="1654.8" textLength="329.4" clip-path="url(#breeze-shell-line-67)">Platform&#160;for&#160;Airflow&#160;image.</text><text class="breeze-shell-r7" x="683.2" y="1654.8" textLength="707.6" clip-path="url(#breeze-shell-line-67)">(linux/amd64&#160;|&#160;linux/arm64&#160;|&#160;linux/x86_64&#160;|&#160;linux/aarch64)</text><text class="breeze-shell-r5" x="1451.8" y="1654.8" textLength="12.2" clip-path="url(#breeze-shell-line-67)">│</text><text class="breeze-shell-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-shell-line-67)">
+</text><text class="breeze-shell-r5" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-shell-line-68)">│</text><text class="breeze-shell-r4" x="24.4" y="1679.2" textLength="231.8" clip-path="url(#breeze-shell-line-68)">--github-repository</text><text class="breeze-shell-r6" x="292.8" y="1679.2" textLength="24.4" clip-path="url(#breeze-shell-line-68)">-g</text><text class="breeze-shell-r1" x="341.6" y="1679.2" textLength="585.6" clip-path="url(#breeze-shell-line-68)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-shell-r7" x="939.4" y="1679.2" textLength="73.2" clip-path="url(#breeze-shell-line-68)">(TEXT)</text><text class="breeze-shell-r5" x="1024.8" y="1679.2" textLength="305" clip-path="url(#breeze-shell-line-68)">[default:&#160;apache/airflow]</text><text class="breeze-shell-r5" x="1451.8" y="1679.2" textLength="12.2" clip-path="url(#breeze-shell-line-68)">│</text><text class="breeze-shell-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-shell-line-68)">
+</text><text class="breeze-shell-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-shell-line-69)">│</text><text class="breeze-shell-r4" x="24.4" y="1703.6" textLength="109.8" clip-path="url(#breeze-shell-line-69)">--builder</text><text class="breeze-shell-r1" x="341.6" y="1703.6" textLength="756.4" clip-path="url(#breeze-shell-line-69)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build`&#160;commands.</text><text class="breeze-shell-r7" x="1110.2" y="1703.6" textLength="73.2" clip-path="url(#breeze-shell-line-69)">(TEXT)</text><text class="breeze-shell-r5" x="1451.8" y="1703.6" textLength="12.2" clip-path="url(#breeze-shell-line-69)">│</text><text class="breeze-shell-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-shell-line-69)">
+</text><text class="breeze-shell-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-shell-line-70)">│</text><text class="breeze-shell-r5" x="341.6" y="1728" textLength="756.4" clip-path="url(#breeze-shell-line-70)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1728" textLength="12.2" clip-path="url(#breeze-shell-line-70)">│</text><text class="breeze-shell-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-shell-line-70)">
+</text><text class="breeze-shell-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-shell-line-71)">│</text><text class="breeze-shell-r4" x="24.4" y="1752.4" textLength="97.6" clip-path="url(#breeze-shell-line-71)">--use-uv</text><text class="breeze-shell-r1" x="122" y="1752.4" textLength="12.2" clip-path="url(#breeze-shell-line-71)">/</text><text class="breeze-shell-r4" x="134.2" y="1752.4" textLength="134.2" clip-path="url(#breeze-shell-line-71)">--no-use-uv</text><text class="breeze-shell-r1" x="341.6" y="1752.4" textLength="719.8" clip-path="url(#breeze-shell-line-71)">Use&#160;uv&#160;instead&#160;of&#160;pip&#160;as&#160;packaging&#160;tool&#160;to&#160;build&#160;the&#160;image.</text><text class="breeze-shell-r5" x="1073.6" y="1752.4" textLength="207.4" clip-path="url(#breeze-shell-line-71)">[default:&#160;use-uv]</text><text class="breeze-shell-r5" x="1451.8" y="1752.4" textLength="12.2" clip-path="url(#breeze-shell-line-71)">│</text><text class="breeze-shell-r1" x="1464" y="1752.4" textLength="12.2" clip-path="url(#breeze-shell-line-71)">
+</text><text class="breeze-shell-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-shell-line-72)">│</text><text class="breeze-shell-r4" x="24.4" y="1776.8" textLength="207.4" clip-path="url(#breeze-shell-line-72)">--uv-http-timeout</text><text class="breeze-shell-r1" x="341.6" y="1776.8" textLength="829.6" clip-path="url(#breeze-shell-line-72)">Timeout&#160;for&#160;requests&#160;that&#160;UV&#160;makes&#160;(only&#160;used&#160;in&#160;case&#160;of&#160;UV&#160;builds).</text><text class="breeze-shell-r7" x="1183.4" y="1776.8" textLength="183" clip-path="url(#breeze-shell-line-72)">(INTEGER&#160;RANGE)</text><text class="breeze-shell-r5" x="1451.8" y="1776.8" textLength="12.2" clip-path="url(#breeze-shell-line-72)">│</text><text class="breeze-shell-r1" x="1464" y="1776.8" textLength="12.2" clip-path="url(#breeze-shell-line-72)">
+</text><text class="breeze-shell-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-shell-line-73)">│</text><text class="breeze-shell-r5" x="341.6" y="1801.2" textLength="829.6" clip-path="url(#breeze-shell-line-73)">[default:&#160;300;&#160;x&gt;=1]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1801.2" textLength="12.2" clip-path="url(#breeze-shell-line-73)">│</text><text class="breeze-shell-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-shell-line-73)">
+</text><text class="breeze-shell-r5" x="0" y="1825.6" textLength="1464" clip-path="url(#breeze-shell-line-74)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-shell-line-74)">
+</text><text class="breeze-shell-r5" x="0" y="1850" textLength="24.4" clip-path="url(#breeze-shell-line-75)">╭─</text><text class="breeze-shell-r5" x="24.4" y="1850" textLength="414.8" clip-path="url(#breeze-shell-line-75)">&#160;Mounting&#160;the&#160;sources&#160;and&#160;volumes&#160;</text><text class="breeze-shell-r5" x="439.2" y="1850" textLength="1000.4" clip-path="url(#breeze-shell-line-75)">──────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="1850" textLength="24.4" clip-path="url(#breeze-shell-line-75)">─╮</text><text class="breeze-shell-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-shell-line-75)">
+</text><text class="breeze-shell-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-shell-line-76)">│</text><text class="breeze-shell-r4" x="24.4" y="1874.4" textLength="183" clip-path="url(#breeze-shell-line-76)">--mount-sources</text><text class="breeze-shell-r1" x="329.4" y="1874.4" textLength="1110.2" clip-path="url(#breeze-shell-line-76)">Choose&#160;scope&#160;of&#160;local&#160;sources&#160;that&#160;should&#160;be&#160;mounted,&#160;skipped,&#160;or&#160;removed&#160;(default&#160;=&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1874.4" textLength="12.2" clip-path="url(#breeze-shell-line-76)">│</text><text class="breeze-shell-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-shell-line-76)">
+</text><text class="breeze-shell-r5" x="0" y="1898.8" textLength="12.2" clip-path="url(#breeze-shell-line-77)">│</text><text class="breeze-shell-r1" x="329.4" y="1898.8" textLength="1110.2" clip-path="url(#breeze-shell-line-77)">selected).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1898.8" textLength="12.2" clip-path="url(#breeze-shell-line-77)">│</text><text class="breeze-shell-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-shell-line-77)">
+</text><text class="breeze-shell-r5" x="0" y="1923.2" textLength="12.2" clip-path="url(#breeze-shell-line-78)">│</text><text class="breeze-shell-r7" x="329.4" y="1923.2" textLength="1110.2" clip-path="url(#breeze-shell-line-78)">(selected&#160;|&#160;all&#160;|&#160;skip&#160;|&#160;remove&#160;|&#160;tests&#160;|&#160;providers-and-tests)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1923.2" textLength="12.2" clip-path="url(#breeze-shell-line-78)">│</text><text class="breeze-shell-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-shell-line-78)">
+</text><text class="breeze-shell-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-shell-line-79)">│</text><text class="breeze-shell-r5" x="329.4" y="1947.6" textLength="1110.2" clip-path="url(#breeze-shell-line-79)">[default:&#160;selected]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="1947.6" textLength="12.2" clip-path="url(#breeze-shell-line-79)">│</text><text class="breeze-shell-r1" x="1464" y="1947.6" textLength="12.2" clip-path="url(#breeze-shell-line-79)">
+</text><text class="breeze-shell-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-shell-line-80)">│</text><text class="breeze-shell-r4" x="24.4" y="1972" textLength="256.2" clip-path="url(#breeze-shell-line-80)">--include-mypy-volume</text><text class="breeze-shell-r1" x="329.4" y="1972" textLength="915" clip-path="url(#breeze-shell-line-80)">Whether&#160;to&#160;include&#160;mounting&#160;of&#160;the&#160;mypy&#160;volume&#160;(useful&#160;for&#160;debugging&#160;mypy).</text><text class="breeze-shell-r5" x="1451.8" y="1972" textLength="12.2" clip-path="url(#breeze-shell-line-80)">│</text><text class="breeze-shell-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-shell-line-80)">
+</text><text class="breeze-shell-r5" x="0" y="1996.4" textLength="1464" clip-path="url(#breeze-shell-line-81)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-shell-line-81)">
+</text><text class="breeze-shell-r5" x="0" y="2020.8" textLength="24.4" clip-path="url(#breeze-shell-line-82)">╭─</text><text class="breeze-shell-r5" x="24.4" y="2020.8" textLength="512.4" clip-path="url(#breeze-shell-line-82)">&#160;Installing&#160;packages&#160;after&#160;entering&#160;shell&#160;</text><text class="breeze-shell-r5" x="536.8" y="2020.8" textLength="902.8" clip-path="url(#breeze-shell-line-82)">──────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="2020.8" textLength="24.4" clip-path="url(#breeze-shell-line-82)">─╮</text><text class="breeze-shell-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-shell-line-82)">
+</text><text class="breeze-shell-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-shell-line-83)">│</text><text class="breeze-shell-r4" x="24.4" y="2045.2" textLength="366" clip-path="url(#breeze-shell-line-83)">--airflow-constraints-location</text><text class="breeze-shell-r1" x="756.4" y="2045.2" textLength="683.2" clip-path="url(#breeze-shell-line-83)">Location&#160;of&#160;airflow&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2045.2" textLength="12.2" clip-path="url(#breeze-shell-line-83)">│</text><text class="breeze-shell-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-shell-line-83)">
+</text><text class="breeze-shell-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-shell-line-84)">│</text><text class="breeze-shell-r1" x="756.4" y="2069.6" textLength="683.2" clip-path="url(#breeze-shell-line-84)">local&#160;context&#160;file).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2069.6" textLength="12.2" clip-path="url(#breeze-shell-line-84)">│</text><text class="breeze-shell-r1" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-shell-line-84)">
+</text><text class="breeze-shell-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-shell-line-85)">│</text><text class="breeze-shell-r7" x="756.4" y="2094" textLength="683.2" clip-path="url(#breeze-shell-line-85)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2094" textLength="12.2" clip-path="url(#breeze-shell-line-85)">│</text><text class="breeze-shell-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-shell-line-85)">
+</text><text class="breeze-shell-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-shell-line-86)">│</text><text class="breeze-shell-r4" x="24.4" y="2118.4" textLength="317.2" clip-path="url(#breeze-shell-line-86)">--airflow-constraints-mode</text><text class="breeze-shell-r1" x="756.4" y="2118.4" textLength="683.2" clip-path="url(#breeze-shell-line-86)">Mode&#160;of&#160;constraints&#160;for&#160;Airflow&#160;for&#160;CI&#160;image&#160;building.&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2118.4" textLength="12.2" clip-path="url(#breeze-shell-line-86)">│</text><text class="breeze-shell-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-shell-line-86)">
+</text><text class="breeze-shell-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-shell-line-87)">│</text><text class="breeze-shell-r7" x="756.4" y="2142.8" textLength="683.2" clip-path="url(#breeze-shell-line-87)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2142.8" textLength="12.2" clip-path="url(#breeze-shell-line-87)">│</text><text class="breeze-shell-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-shell-line-87)">
+</text><text class="breeze-shell-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-shell-line-88)">│</text><text class="breeze-shell-r7" x="756.4" y="2167.2" textLength="683.2" clip-path="url(#breeze-shell-line-88)">constraints-no-providers)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2167.2" textLength="12.2" clip-path="url(#breeze-shell-line-88)">│</text><text class="breeze-shell-r1" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-shell-line-88)">
+</text><text class="breeze-shell-r5" x="0" y="2191.6" textLength="12.2" clip-path="url(#breeze-shell-line-89)">│</text><text class="breeze-shell-r5" x="756.4" y="2191.6" textLength="683.2" clip-path="url(#breeze-shell-line-89)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2191.6" textLength="12.2" clip-path="url(#breeze-shell-line-89)">│</text><text class="breeze-shell-r1" x="1464" y="2191.6" textLength="12.2" clip-path="url(#breeze-shell-line-89)">
+</text><text class="breeze-shell-r5" x="0" y="2216" textLength="12.2" clip-path="url(#breeze-shell-line-90)">│</text><text class="breeze-shell-r4" x="24.4" y="2216" textLength="378.2" clip-path="url(#breeze-shell-line-90)">--airflow-constraints-reference</text><text class="breeze-shell-r1" x="756.4" y="2216" textLength="683.2" clip-path="url(#breeze-shell-line-90)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;airflow&#160;installation&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2216" textLength="12.2" clip-path="url(#breeze-shell-line-90)">│</text><text class="breeze-shell-r1" x="1464" y="2216" textLength="12.2" clip-path="url(#breeze-shell-line-90)">
+</text><text class="breeze-shell-r5" x="0" y="2240.4" textLength="12.2" clip-path="url(#breeze-shell-line-91)">│</text><text class="breeze-shell-r1" x="756.4" y="2240.4" textLength="683.2" clip-path="url(#breeze-shell-line-91)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2240.4" textLength="12.2" clip-path="url(#breeze-shell-line-91)">│</text><text class="breeze-shell-r1" x="1464" y="2240.4" textLength="12.2" clip-path="url(#breeze-shell-line-91)">
+</text><text class="breeze-shell-r5" x="0" y="2264.8" textLength="12.2" clip-path="url(#breeze-shell-line-92)">│</text><text class="breeze-shell-r7" x="756.4" y="2264.8" textLength="683.2" clip-path="url(#breeze-shell-line-92)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2264.8" textLength="12.2" clip-path="url(#breeze-shell-line-92)">│</text><text class="breeze-shell-r1" x="1464" y="2264.8" textLength="12.2" clip-path="url(#breeze-shell-line-92)">
+</text><text class="breeze-shell-r5" x="0" y="2289.2" textLength="12.2" clip-path="url(#breeze-shell-line-93)">│</text><text class="breeze-shell-r4" x="24.4" y="2289.2" textLength="195.2" clip-path="url(#breeze-shell-line-93)">--airflow-extras</text><text class="breeze-shell-r1" x="756.4" y="2289.2" textLength="378.2" clip-path="url(#breeze-shell-line-93)">Airflow&#160;extras&#160;to&#160;install&#160;when&#160;</text><text class="breeze-shell-r4" x="1134.6" y="2289.2" textLength="256.2" clip-path="url(#breeze-shell-line-93)">--use-airflow-version</text><text class="breeze-shell-r1" x="1390.8" y="2289.2" textLength="48.8" clip-path="url(#breeze-shell-line-93)">&#160;is&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2289.2" textLength="12.2" clip-path="url(#breeze-shell-line-93)">│</text><text class="breeze-shell-r1" x="1464" y="2289.2" textLength="12.2" clip-path="url(#breeze-shell-line-93)">
+</text><text class="breeze-shell-r5" x="0" y="2313.6" textLength="12.2" clip-path="url(#breeze-shell-line-94)">│</text><text class="breeze-shell-r1" x="756.4" y="2313.6" textLength="683.2" clip-path="url(#breeze-shell-line-94)">used&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2313.6" textLength="12.2" clip-path="url(#breeze-shell-line-94)">│</text><text class="breeze-shell-r1" x="1464" y="2313.6" textLength="12.2" clip-path="url(#breeze-shell-line-94)">
+</text><text class="breeze-shell-r5" x="0" y="2338" textLength="12.2" clip-path="url(#breeze-shell-line-95)">│</text><text class="breeze-shell-r7" x="756.4" y="2338" textLength="683.2" clip-path="url(#breeze-shell-line-95)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2338" textLength="12.2" clip-path="url(#breeze-shell-line-95)">│</text><text class="breeze-shell-r1" x="1464" y="2338" textLength="12.2" clip-path="url(#breeze-shell-line-95)">
+</text><text class="breeze-shell-r5" x="0" y="2362.4" textLength="12.2" clip-path="url(#breeze-shell-line-96)">│</text><text class="breeze-shell-r5" x="756.4" y="2362.4" textLength="683.2" clip-path="url(#breeze-shell-line-96)">[default:&#160;&quot;&quot;]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2362.4" textLength="12.2" clip-path="url(#breeze-shell-line-96)">│</text><text class="breeze-shell-r1" x="1464" y="2362.4" textLength="12.2" clip-path="url(#breeze-shell-line-96)">
+</text><text class="breeze-shell-r5" x="0" y="2386.8" textLength="12.2" clip-path="url(#breeze-shell-line-97)">│</text><text class="breeze-shell-r4" x="24.4" y="2386.8" textLength="341.6" clip-path="url(#breeze-shell-line-97)">--clean-airflow-installation</text><text class="breeze-shell-r1" x="756.4" y="2386.8" textLength="683.2" clip-path="url(#breeze-shell-line-97)">Clean&#160;the&#160;airflow&#160;installation&#160;before&#160;installing&#160;version</text><text class="breeze-shell-r5" x="1451.8" y="2386.8" textLength="12.2" clip-path="url(#breeze-shell-line-97)">│</text><text class="breeze-shell-r1" x="1464" y="2386.8" textLength="12.2" clip-path="url(#breeze-shell-line-97)">
+</text><text class="breeze-shell-r5" x="0" y="2411.2" textLength="12.2" clip-path="url(#breeze-shell-line-98)">│</text><text class="breeze-shell-r1" x="756.4" y="2411.2" textLength="158.6" clip-path="url(#breeze-shell-line-98)">specified&#160;by&#160;</text><text class="breeze-shell-r4" x="915" y="2411.2" textLength="256.2" clip-path="url(#breeze-shell-line-98)">--use-airflow-version</text><text class="breeze-shell-r1" x="1171.2" y="2411.2" textLength="268.4" clip-path="url(#breeze-shell-line-98)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2411.2" textLength="12.2" clip-path="url(#breeze-shell-line-98)">│</text><text class="breeze-shell-r1" x="1464" y="2411.2" textLength="12.2" clip-path="url(#breeze-shell-line-98)">
+</text><text class="breeze-shell-r5" x="0" y="2435.6" textLength="12.2" clip-path="url(#breeze-shell-line-99)">│</text><text class="breeze-shell-r4" x="24.4" y="2435.6" textLength="329.4" clip-path="url(#breeze-shell-line-99)">--force-lowest-dependencies</text><text class="breeze-shell-r1" x="756.4" y="2435.6" textLength="683.2" clip-path="url(#breeze-shell-line-99)">Run&#160;tests&#160;for&#160;the&#160;lowest&#160;direct&#160;dependencies&#160;of&#160;Airflow&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2435.6" textLength="12.2" clip-path="url(#breeze-shell-line-99)">│</text><text class="breeze-shell-r1" x="1464" y="2435.6" textLength="12.2" clip-path="url(#breeze-shell-line-99)">
+</text><text class="breeze-shell-r5" x="0" y="2460" textLength="12.2" clip-path="url(#breeze-shell-line-100)">│</text><text class="breeze-shell-r1" x="756.4" y="2460" textLength="683.2" clip-path="url(#breeze-shell-line-100)">or&#160;selected&#160;provider&#160;if&#160;`Provider[PROVIDER_ID]`&#160;is&#160;used&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2460" textLength="12.2" clip-path="url(#breeze-shell-line-100)">│</text><text class="breeze-shell-r1" x="1464" y="2460" textLength="12.2" clip-path="url(#breeze-shell-line-100)">
+</text><text class="breeze-shell-r5" x="0" y="2484.4" textLength="12.2" clip-path="url(#breeze-shell-line-101)">│</text><text class="breeze-shell-r1" x="756.4" y="2484.4" textLength="683.2" clip-path="url(#breeze-shell-line-101)">as&#160;test&#160;type.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2484.4" textLength="12.2" clip-path="url(#breeze-shell-line-101)">│</text><text class="breeze-shell-r1" x="1464" y="2484.4" textLength="12.2" clip-path="url(#breeze-shell-line-101)">
+</text><text class="breeze-shell-r5" x="0" y="2508.8" textLength="12.2" clip-path="url(#breeze-shell-line-102)">│</text><text class="breeze-shell-r4" x="24.4" y="2508.8" textLength="134.2" clip-path="url(#breeze-shell-line-102)">--test-type</text><text class="breeze-shell-r1" x="756.4" y="2508.8" textLength="683.2" clip-path="url(#breeze-shell-line-102)">Type&#160;for&#160;shell&#160;tests&#160;to&#160;run&#160;-&#160;used&#160;when&#160;forcing&#160;lowest&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2508.8" textLength="12.2" clip-path="url(#breeze-shell-line-102)">│</text><text class="breeze-shell-r1" x="1464" y="2508.8" textLength="12.2" clip-path="url(#breeze-shell-line-102)">
+</text><text class="breeze-shell-r5" x="0" y="2533.2" textLength="12.2" clip-path="url(#breeze-shell-line-103)">│</text><text class="breeze-shell-r1" x="756.4" y="2533.2" textLength="683.2" clip-path="url(#breeze-shell-line-103)">dependencies&#160;to&#160;determine&#160;which&#160;distribution&#160;to&#160;force&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2533.2" textLength="12.2" clip-path="url(#breeze-shell-line-103)">│</text><text class="breeze-shell-r1" x="1464" y="2533.2" textLength="12.2" clip-path="url(#breeze-shell-line-103)">
+</text><text class="breeze-shell-r5" x="0" y="2557.6" textLength="12.2" clip-path="url(#breeze-shell-line-104)">│</text><text class="breeze-shell-r1" x="756.4" y="2557.6" textLength="683.2" clip-path="url(#breeze-shell-line-104)">lowest&#160;dependencies&#160;for&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2557.6" textLength="12.2" clip-path="url(#breeze-shell-line-104)">│</text><text class="breeze-shell-r1" x="1464" y="2557.6" textLength="12.2" clip-path="url(#breeze-shell-line-104)">
+</text><text class="breeze-shell-r5" x="0" y="2582" textLength="12.2" clip-path="url(#breeze-shell-line-105)">│</text><text class="breeze-shell-r7" x="756.4" y="2582" textLength="683.2" clip-path="url(#breeze-shell-line-105)">(All&#160;|&#160;All-Long&#160;|&#160;All-Quarantined&#160;|&#160;All-Postgres&#160;|&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2582" textLength="12.2" clip-path="url(#breeze-shell-line-105)">│</text><text class="breeze-shell-r1" x="1464" y="2582" textLength="12.2" clip-path="url(#breeze-shell-line-105)">
+</text><text class="breeze-shell-r5" x="0" y="2606.4" textLength="12.2" clip-path="url(#breeze-shell-line-106)">│</text><text class="breeze-shell-r7" x="756.4" y="2606.4" textLength="683.2" clip-path="url(#breeze-shell-line-106)">All-MySQL&#160;|&#160;API&#160;|&#160;Always&#160;|&#160;CLI&#160;|&#160;Core&#160;|&#160;Other&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2606.4" textLength="12.2" clip-path="url(#breeze-shell-line-106)">│</text><text class="breeze-shell-r1" x="1464" y="2606.4" textLength="12.2" clip-path="url(#breeze-shell-line-106)">
+</text><text class="breeze-shell-r5" x="0" y="2630.8" textLength="12.2" clip-path="url(#breeze-shell-line-107)">│</text><text class="breeze-shell-r7" x="756.4" y="2630.8" textLength="683.2" clip-path="url(#breeze-shell-line-107)">Serialization)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2630.8" textLength="12.2" clip-path="url(#breeze-shell-line-107)">│</text><text class="breeze-shell-r1" x="1464" y="2630.8" textLength="12.2" clip-path="url(#breeze-shell-line-107)">
+</text><text class="breeze-shell-r5" x="0" y="2655.2" textLength="12.2" clip-path="url(#breeze-shell-line-108)">│</text><text class="breeze-shell-r5" x="756.4" y="2655.2" textLength="683.2" clip-path="url(#breeze-shell-line-108)">[default:&#160;All]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2655.2" textLength="12.2" clip-path="url(#breeze-shell-line-108)">│</text><text class="breeze-shell-r1" x="1464" y="2655.2" textLength="12.2" clip-path="url(#breeze-shell-line-108)">
+</text><text class="breeze-shell-r5" x="0" y="2679.6" textLength="12.2" clip-path="url(#breeze-shell-line-109)">│</text><text class="breeze-shell-r4" x="24.4" y="2679.6" textLength="244" clip-path="url(#breeze-shell-line-109)">--excluded-providers</text><text class="breeze-shell-r1" x="756.4" y="2679.6" textLength="683.2" clip-path="url(#breeze-shell-line-109)">JSON-string&#160;of&#160;dictionary&#160;containing&#160;excluded&#160;providers&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2679.6" textLength="12.2" clip-path="url(#breeze-shell-line-109)">│</text><text class="breeze-shell-r1" x="1464" y="2679.6" textLength="12.2" clip-path="url(#breeze-shell-line-109)">
+</text><text class="breeze-shell-r5" x="0" y="2704" textLength="12.2" clip-path="url(#breeze-shell-line-110)">│</text><text class="breeze-shell-r1" x="756.4" y="2704" textLength="683.2" clip-path="url(#breeze-shell-line-110)">per&#160;python&#160;version&#160;({&#x27;3.12&#x27;:&#160;[&#x27;provider&#x27;]})&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2704" textLength="12.2" clip-path="url(#breeze-shell-line-110)">│</text><text class="breeze-shell-r1" x="1464" y="2704" textLength="12.2" clip-path="url(#breeze-shell-line-110)">
+</text><text class="breeze-shell-r5" x="0" y="2728.4" textLength="12.2" clip-path="url(#breeze-shell-line-111)">│</text><text class="breeze-shell-r7" x="756.4" y="2728.4" textLength="683.2" clip-path="url(#breeze-shell-line-111)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2728.4" textLength="12.2" clip-path="url(#breeze-shell-line-111)">│</text><text class="breeze-shell-r1" x="1464" y="2728.4" textLength="12.2" clip-path="url(#breeze-shell-line-111)">
+</text><text class="breeze-shell-r5" x="0" y="2752.8" textLength="12.2" clip-path="url(#breeze-shell-line-112)">│</text><text class="breeze-shell-r4" x="24.4" y="2752.8" textLength="414.8" clip-path="url(#breeze-shell-line-112)">--install-airflow-with-constraints</text><text class="breeze-shell-r1" x="439.2" y="2752.8" textLength="12.2" clip-path="url(#breeze-shell-line-112)">/</text><text class="breeze-shell-r4" x="451.4" y="2752.8" textLength="256.2" clip-path="url(#breeze-shell-line-112)">--no-install-airflow-</text><text class="breeze-shell-r1" x="756.4" y="2752.8" textLength="683.2" clip-path="url(#breeze-shell-line-112)">Install&#160;airflow&#160;in&#160;a&#160;separate&#160;step,&#160;with&#160;constraints&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2752.8" textLength="12.2" clip-path="url(#breeze-shell-line-112)">│</text><text class="breeze-shell-r1" x="1464" y="2752.8" textLength="12.2" clip-path="url(#breeze-shell-line-112)">
+</text><text class="breeze-shell-r5" x="0" y="2777.2" textLength="12.2" clip-path="url(#breeze-shell-line-113)">│</text><text class="breeze-shell-r4" x="24.4" y="2777.2" textLength="195.2" clip-path="url(#breeze-shell-line-113)">with-constraints</text><text class="breeze-shell-r1" x="756.4" y="2777.2" textLength="683.2" clip-path="url(#breeze-shell-line-113)">determined&#160;from&#160;package&#160;or&#160;airflow&#160;version.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2777.2" textLength="12.2" clip-path="url(#breeze-shell-line-113)">│</text><text class="breeze-shell-r1" x="1464" y="2777.2" textLength="12.2" clip-path="url(#breeze-shell-line-113)">
+</text><text class="breeze-shell-r5" x="0" y="2801.6" textLength="12.2" clip-path="url(#breeze-shell-line-114)">│</text><text class="breeze-shell-r5" x="756.4" y="2801.6" textLength="683.2" clip-path="url(#breeze-shell-line-114)">[default:&#160;install-airflow-with-constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2801.6" textLength="12.2" clip-path="url(#breeze-shell-line-114)">│</text><text class="breeze-shell-r1" x="1464" y="2801.6" textLength="12.2" clip-path="url(#breeze-shell-line-114)">
+</text><text class="breeze-shell-r5" x="0" y="2826" textLength="12.2" clip-path="url(#breeze-shell-line-115)">│</text><text class="breeze-shell-r4" x="24.4" y="2826" textLength="341.6" clip-path="url(#breeze-shell-line-115)">--install-selected-providers</text><text class="breeze-shell-r1" x="756.4" y="2826" textLength="683.2" clip-path="url(#breeze-shell-line-115)">Comma-separated&#160;list&#160;of&#160;providers&#160;selected&#160;to&#160;be&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2826" textLength="12.2" clip-path="url(#breeze-shell-line-115)">│</text><text class="breeze-shell-r1" x="1464" y="2826" textLength="12.2" clip-path="url(#breeze-shell-line-115)">
+</text><text class="breeze-shell-r5" x="0" y="2850.4" textLength="12.2" clip-path="url(#breeze-shell-line-116)">│</text><text class="breeze-shell-r1" x="756.4" y="2850.4" textLength="231.8" clip-path="url(#breeze-shell-line-116)">installed&#160;(implies&#160;</text><text class="breeze-shell-r4" x="988.2" y="2850.4" textLength="353.8" clip-path="url(#breeze-shell-line-116)">--use-distributions-from-dist</text><text class="breeze-shell-r1" x="1342" y="2850.4" textLength="97.6" clip-path="url(#breeze-shell-line-116)">).&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2850.4" textLength="12.2" clip-path="url(#breeze-shell-line-116)">│</text><text class="breeze-shell-r1" x="1464" y="2850.4" textLength="12.2" clip-path="url(#breeze-shell-line-116)">
+</text><text class="breeze-shell-r5" x="0" y="2874.8" textLength="12.2" clip-path="url(#breeze-shell-line-117)">│</text><text class="breeze-shell-r7" x="756.4" y="2874.8" textLength="683.2" clip-path="url(#breeze-shell-line-117)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2874.8" textLength="12.2" clip-path="url(#breeze-shell-line-117)">│</text><text class="breeze-shell-r1" x="1464" y="2874.8" textLength="12.2" clip-path="url(#breeze-shell-line-117)">
+</text><text class="breeze-shell-r5" x="0" y="2899.2" textLength="12.2" clip-path="url(#breeze-shell-line-118)">│</text><text class="breeze-shell-r4" x="24.4" y="2899.2" textLength="256.2" clip-path="url(#breeze-shell-line-118)">--distribution-format</text><text class="breeze-shell-r1" x="756.4" y="2899.2" textLength="658.8" clip-path="url(#breeze-shell-line-118)">Format&#160;of&#160;packages&#160;that&#160;should&#160;be&#160;installed&#160;from&#160;dist.</text><text class="breeze-shell-r5" x="1451.8" y="2899.2" textLength="12.2" clip-path="url(#breeze-shell-line-118)">│</text><text class="breeze-shell-r1" x="1464" y="2899.2" textLength="12.2" clip-path="url(#breeze-shell-line-118)">
+</text><text class="breeze-shell-r5" x="0" y="2923.6" textLength="12.2" clip-path="url(#breeze-shell-line-119)">│</text><text class="breeze-shell-r7" x="756.4" y="2923.6" textLength="658.8" clip-path="url(#breeze-shell-line-119)">(wheel&#160;|&#160;sdist)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2923.6" textLength="12.2" clip-path="url(#breeze-shell-line-119)">│</text><text class="breeze-shell-r1" x="1464" y="2923.6" textLength="12.2" clip-path="url(#breeze-shell-line-119)">
+</text><text class="breeze-shell-r5" x="0" y="2948" textLength="12.2" clip-path="url(#breeze-shell-line-120)">│</text><text class="breeze-shell-r5" x="756.4" y="2948" textLength="658.8" clip-path="url(#breeze-shell-line-120)">[default:&#160;wheel]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2948" textLength="12.2" clip-path="url(#breeze-shell-line-120)">│</text><text class="breeze-shell-r1" x="1464" y="2948" textLength="12.2" clip-path="url(#breeze-shell-line-120)">
+</text><text class="breeze-shell-r5" x="0" y="2972.4" textLength="12.2" clip-path="url(#breeze-shell-line-121)">│</text><text class="breeze-shell-r4" x="24.4" y="2972.4" textLength="390.4" clip-path="url(#breeze-shell-line-121)">--providers-constraints-location</text><text class="breeze-shell-r1" x="756.4" y="2972.4" textLength="683.2" clip-path="url(#breeze-shell-line-121)">Location&#160;of&#160;providers&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2972.4" textLength="12.2" clip-path="url(#breeze-shell-line-121)">│</text><text class="breeze-shell-r1" x="1464" y="2972.4" textLength="12.2" clip-path="url(#breeze-shell-line-121)">
+</text><text class="breeze-shell-r5" x="0" y="2996.8" textLength="12.2" clip-path="url(#breeze-shell-line-122)">│</text><text class="breeze-shell-r1" x="756.4" y="2996.8" textLength="683.2" clip-path="url(#breeze-shell-line-122)">local&#160;context&#160;file).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="2996.8" textLength="12.2" clip-path="url(#breeze-shell-line-122)">│</text><text class="breeze-shell-r1" x="1464" y="2996.8" textLength="12.2" clip-path="url(#breeze-shell-line-122)">
+</text><text class="breeze-shell-r5" x="0" y="3021.2" textLength="12.2" clip-path="url(#breeze-shell-line-123)">│</text><text class="breeze-shell-r7" x="756.4" y="3021.2" textLength="683.2" clip-path="url(#breeze-shell-line-123)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3021.2" textLength="12.2" clip-path="url(#breeze-shell-line-123)">│</text><text class="breeze-shell-r1" x="1464" y="3021.2" textLength="12.2" clip-path="url(#breeze-shell-line-123)">
+</text><text class="breeze-shell-r5" x="0" y="3045.6" textLength="12.2" clip-path="url(#breeze-shell-line-124)">│</text><text class="breeze-shell-r4" x="24.4" y="3045.6" textLength="341.6" clip-path="url(#breeze-shell-line-124)">--providers-constraints-mode</text><text class="breeze-shell-r1" x="756.4" y="3045.6" textLength="683.2" clip-path="url(#breeze-shell-line-124)">Mode&#160;of&#160;constraints&#160;for&#160;Providers&#160;for&#160;CI&#160;image&#160;building.</text><text class="breeze-shell-r5" x="1451.8" y="3045.6" textLength="12.2" clip-path="url(#breeze-shell-line-124)">│</text><text class="breeze-shell-r1" x="1464" y="3045.6" textLength="12.2" clip-path="url(#breeze-shell-line-124)">
+</text><text class="breeze-shell-r5" x="0" y="3070" textLength="12.2" clip-path="url(#breeze-shell-line-125)">│</text><text class="breeze-shell-r7" x="756.4" y="3070" textLength="683.2" clip-path="url(#breeze-shell-line-125)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3070" textLength="12.2" clip-path="url(#breeze-shell-line-125)">│</text><text class="breeze-shell-r1" x="1464" y="3070" textLength="12.2" clip-path="url(#breeze-shell-line-125)">
+</text><text class="breeze-shell-r5" x="0" y="3094.4" textLength="12.2" clip-path="url(#breeze-shell-line-126)">│</text><text class="breeze-shell-r7" x="756.4" y="3094.4" textLength="683.2" clip-path="url(#breeze-shell-line-126)">constraints-no-providers)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3094.4" textLength="12.2" clip-path="url(#breeze-shell-line-126)">│</text><text class="breeze-shell-r1" x="1464" y="3094.4" textLength="12.2" clip-path="url(#breeze-shell-line-126)">
+</text><text class="breeze-shell-r5" x="0" y="3118.8" textLength="12.2" clip-path="url(#breeze-shell-line-127)">│</text><text class="breeze-shell-r5" x="756.4" y="3118.8" textLength="683.2" clip-path="url(#breeze-shell-line-127)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3118.8" textLength="12.2" clip-path="url(#breeze-shell-line-127)">│</text><text class="breeze-shell-r1" x="1464" y="3118.8" textLength="12.2" clip-path="url(#breeze-shell-line-127)">
+</text><text class="breeze-shell-r5" x="0" y="3143.2" textLength="12.2" clip-path="url(#breeze-shell-line-128)">│</text><text class="breeze-shell-r4" x="24.4" y="3143.2" textLength="402.6" clip-path="url(#breeze-shell-line-128)">--providers-constraints-reference</text><text class="breeze-shell-r1" x="756.4" y="3143.2" textLength="683.2" clip-path="url(#breeze-shell-line-128)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;providers&#160;installation&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3143.2" textLength="12.2" clip-path="url(#breeze-shell-line-128)">│</text><text class="breeze-shell-r1" x="1464" y="3143.2" textLength="12.2" clip-path="url(#breeze-shell-line-128)">
+</text><text class="breeze-shell-r5" x="0" y="3167.6" textLength="12.2" clip-path="url(#breeze-shell-line-129)">│</text><text class="breeze-shell-r1" x="756.4" y="3167.6" textLength="683.2" clip-path="url(#breeze-shell-line-129)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;Can&#160;be&#160;&#x27;default&#x27;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3167.6" textLength="12.2" clip-path="url(#breeze-shell-line-129)">│</text><text class="breeze-shell-r1" x="1464" y="3167.6" textLength="12.2" clip-path="url(#breeze-shell-line-129)">
+</text><text class="breeze-shell-r5" x="0" y="3192" textLength="12.2" clip-path="url(#breeze-shell-line-130)">│</text><text class="breeze-shell-r1" x="756.4" y="3192" textLength="683.2" clip-path="url(#breeze-shell-line-130)">in&#160;which&#160;case&#160;the&#160;default&#160;constraints-reference&#160;is&#160;used.</text><text class="breeze-shell-r5" x="1451.8" y="3192" textLength="12.2" clip-path="url(#breeze-shell-line-130)">│</text><text class="breeze-shell-r1" x="1464" y="3192" textLength="12.2" clip-path="url(#breeze-shell-line-130)">
+</text><text class="breeze-shell-r5" x="0" y="3216.4" textLength="12.2" clip-path="url(#breeze-shell-line-131)">│</text><text class="breeze-shell-r7" x="756.4" y="3216.4" textLength="683.2" clip-path="url(#breeze-shell-line-131)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3216.4" textLength="12.2" clip-path="url(#breeze-shell-line-131)">│</text><text class="breeze-shell-r1" x="1464" y="3216.4" textLength="12.2" clip-path="url(#breeze-shell-line-131)">
+</text><text class="breeze-shell-r5" x="0" y="3240.8" textLength="12.2" clip-path="url(#breeze-shell-line-132)">│</text><text class="breeze-shell-r4" x="24.4" y="3240.8" textLength="341.6" clip-path="url(#breeze-shell-line-132)">--providers-skip-constraints</text><text class="breeze-shell-r1" x="756.4" y="3240.8" textLength="597.8" clip-path="url(#breeze-shell-line-132)">Do&#160;not&#160;use&#160;constraints&#160;when&#160;installing&#160;providers.</text><text class="breeze-shell-r5" x="1451.8" y="3240.8" textLength="12.2" clip-path="url(#breeze-shell-line-132)">│</text><text class="breeze-shell-r1" x="1464" y="3240.8" textLength="12.2" clip-path="url(#breeze-shell-line-132)">
+</text><text class="breeze-shell-r5" x="0" y="3265.2" textLength="12.2" clip-path="url(#breeze-shell-line-133)">│</text><text class="breeze-shell-r4" x="24.4" y="3265.2" textLength="256.2" clip-path="url(#breeze-shell-line-133)">--use-airflow-version</text><text class="breeze-shell-r1" x="756.4" y="3265.2" textLength="683.2" clip-path="url(#breeze-shell-line-133)">Use&#160;(reinstall&#160;at&#160;entry)&#160;Airflow&#160;version&#160;from&#160;PyPI.&#160;It&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3265.2" textLength="12.2" clip-path="url(#breeze-shell-line-133)">│</text><text class="breeze-shell-r1" x="1464" y="3265.2" textLength="12.2" clip-path="url(#breeze-shell-line-133)">
+</text><text class="breeze-shell-r5" x="0" y="3289.6" textLength="12.2" clip-path="url(#breeze-shell-line-134)">│</text><text class="breeze-shell-r1" x="756.4" y="3289.6" textLength="683.2" clip-path="url(#breeze-shell-line-134)">can&#160;also&#160;be&#160;version&#160;(to&#160;install&#160;from&#160;PyPI),&#160;`none`,&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3289.6" textLength="12.2" clip-path="url(#breeze-shell-line-134)">│</text><text class="breeze-shell-r1" x="1464" y="3289.6" textLength="12.2" clip-path="url(#breeze-shell-line-134)">
+</text><text class="breeze-shell-r5" x="0" y="3314" textLength="12.2" clip-path="url(#breeze-shell-line-135)">│</text><text class="breeze-shell-r1" x="756.4" y="3314" textLength="683.2" clip-path="url(#breeze-shell-line-135)">`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder,&#160;or&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3314" textLength="12.2" clip-path="url(#breeze-shell-line-135)">│</text><text class="breeze-shell-r1" x="1464" y="3314" textLength="12.2" clip-path="url(#breeze-shell-line-135)">
+</text><text class="breeze-shell-r5" x="0" y="3338.4" textLength="12.2" clip-path="url(#breeze-shell-line-136)">│</text><text class="breeze-shell-r1" x="756.4" y="3338.4" textLength="683.2" clip-path="url(#breeze-shell-line-136)">VCS&#160;URL&#160;to&#160;install&#160;from&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3338.4" textLength="12.2" clip-path="url(#breeze-shell-line-136)">│</text><text class="breeze-shell-r1" x="1464" y="3338.4" textLength="12.2" clip-path="url(#breeze-shell-line-136)">
+</text><text class="breeze-shell-r5" x="0" y="3362.8" textLength="12.2" clip-path="url(#breeze-shell-line-137)">│</text><text class="breeze-shell-r1" x="756.4" y="3362.8" textLength="683.2" clip-path="url(#breeze-shell-line-137)">(https://pip.pypa.io/en/stable/topics/vcs-support/).&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3362.8" textLength="12.2" clip-path="url(#breeze-shell-line-137)">│</text><text class="breeze-shell-r1" x="1464" y="3362.8" textLength="12.2" clip-path="url(#breeze-shell-line-137)">
+</text><text class="breeze-shell-r5" x="0" y="3387.2" textLength="12.2" clip-path="url(#breeze-shell-line-138)">│</text><text class="breeze-shell-r1" x="756.4" y="3387.2" textLength="97.6" clip-path="url(#breeze-shell-line-138)">Implies&#160;</text><text class="breeze-shell-r4" x="854" y="3387.2" textLength="183" clip-path="url(#breeze-shell-line-138)">--mount-sources</text><text class="breeze-shell-r1" x="1037" y="3387.2" textLength="402.6" clip-path="url(#breeze-shell-line-138)">&#160;`remove`.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3387.2" textLength="12.2" clip-path="url(#breeze-shell-line-138)">│</text><text class="breeze-shell-r1" x="1464" y="3387.2" textLength="12.2" clip-path="url(#breeze-shell-line-138)">
+</text><text class="breeze-shell-r5" x="0" y="3411.6" textLength="12.2" clip-path="url(#breeze-shell-line-139)">│</text><text class="breeze-shell-r7" x="756.4" y="3411.6" textLength="683.2" clip-path="url(#breeze-shell-line-139)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3411.6" textLength="12.2" clip-path="url(#breeze-shell-line-139)">│</text><text class="breeze-shell-r1" x="1464" y="3411.6" textLength="12.2" clip-path="url(#breeze-shell-line-139)">
+</text><text class="breeze-shell-r5" x="0" y="3436" textLength="12.2" clip-path="url(#breeze-shell-line-140)">│</text><text class="breeze-shell-r4" x="24.4" y="3436" textLength="244" clip-path="url(#breeze-shell-line-140)">--allow-pre-releases</text><text class="breeze-shell-r1" x="756.4" y="3436" textLength="683.2" clip-path="url(#breeze-shell-line-140)">Allow&#160;pre-releases&#160;of&#160;Airflow,&#160;task-sdk&#160;and&#160;providers&#160;to</text><text class="breeze-shell-r5" x="1451.8" y="3436" textLength="12.2" clip-path="url(#breeze-shell-line-140)">│</text><text class="breeze-shell-r1" x="1464" y="3436" textLength="12.2" clip-path="url(#breeze-shell-line-140)">
+</text><text class="breeze-shell-r5" x="0" y="3460.4" textLength="12.2" clip-path="url(#breeze-shell-line-141)">│</text><text class="breeze-shell-r1" x="756.4" y="3460.4" textLength="683.2" clip-path="url(#breeze-shell-line-141)">be&#160;installed.&#160;Set&#160;to&#160;true&#160;automatically&#160;for&#160;pre-release&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3460.4" textLength="12.2" clip-path="url(#breeze-shell-line-141)">│</text><text class="breeze-shell-r1" x="1464" y="3460.4" textLength="12.2" clip-path="url(#breeze-shell-line-141)">
+</text><text class="breeze-shell-r5" x="0" y="3484.8" textLength="12.2" clip-path="url(#breeze-shell-line-142)">│</text><text class="breeze-shell-r4" x="756.4" y="3484.8" textLength="256.2" clip-path="url(#breeze-shell-line-142)">--use-airflow-version</text><text class="breeze-shell-r1" x="1012.6" y="3484.8" textLength="427" clip-path="url(#breeze-shell-line-142)">)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3484.8" textLength="12.2" clip-path="url(#breeze-shell-line-142)">│</text><text class="breeze-shell-r1" x="1464" y="3484.8" textLength="12.2" clip-path="url(#breeze-shell-line-142)">
+</text><text class="breeze-shell-r5" x="0" y="3509.2" textLength="12.2" clip-path="url(#breeze-shell-line-143)">│</text><text class="breeze-shell-r4" x="24.4" y="3509.2" textLength="353.8" clip-path="url(#breeze-shell-line-143)">--use-distributions-from-dist</text><text class="breeze-shell-r1" x="756.4" y="3509.2" textLength="402.6" clip-path="url(#breeze-shell-line-143)">Install&#160;all&#160;found&#160;distributions&#160;(</text><text class="breeze-shell-r4" x="1159" y="3509.2" textLength="256.2" clip-path="url(#breeze-shell-line-143)">--distribution-format</text><text class="breeze-shell-r5" x="1451.8" y="3509.2" textLength="12.2" clip-path="url(#breeze-shell-line-143)">│</text><text class="breeze-shell-r1" x="1464" y="3509.2" textLength="12.2" clip-path="url(#breeze-shell-line-143)">
+</text><text class="breeze-shell-r5" x="0" y="3533.6" textLength="12.2" clip-path="url(#breeze-shell-line-144)">│</text><text class="breeze-shell-r1" x="756.4" y="3533.6" textLength="683.2" clip-path="url(#breeze-shell-line-144)">determines&#160;type)&#160;from&#160;&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3533.6" textLength="12.2" clip-path="url(#breeze-shell-line-144)">│</text><text class="breeze-shell-r1" x="1464" y="3533.6" textLength="12.2" clip-path="url(#breeze-shell-line-144)">
+</text><text class="breeze-shell-r5" x="0" y="3558" textLength="12.2" clip-path="url(#breeze-shell-line-145)">│</text><text class="breeze-shell-r1" x="756.4" y="3558" textLength="683.2" clip-path="url(#breeze-shell-line-145)">breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3558" textLength="12.2" clip-path="url(#breeze-shell-line-145)">│</text><text class="breeze-shell-r1" x="1464" y="3558" textLength="12.2" clip-path="url(#breeze-shell-line-145)">
+</text><text class="breeze-shell-r5" x="0" y="3582.4" textLength="12.2" clip-path="url(#breeze-shell-line-146)">│</text><text class="breeze-shell-r4" x="24.4" y="3582.4" textLength="378.2" clip-path="url(#breeze-shell-line-146)">--install-airflow-python-client</text><text class="breeze-shell-r1" x="756.4" y="3582.4" textLength="683.2" clip-path="url(#breeze-shell-line-146)">Install&#160;airflow&#160;python&#160;client&#160;packages&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3582.4" textLength="12.2" clip-path="url(#breeze-shell-line-146)">│</text><text class="breeze-shell-r1" x="1464" y="3582.4" textLength="12.2" clip-path="url(#breeze-shell-line-146)">
+</text><text class="breeze-shell-r5" x="0" y="3606.8" textLength="12.2" clip-path="url(#breeze-shell-line-147)">│</text><text class="breeze-shell-r1" x="756.4" y="3606.8" textLength="12.2" clip-path="url(#breeze-shell-line-147)">(</text><text class="breeze-shell-r4" x="768.6" y="3606.8" textLength="256.2" clip-path="url(#breeze-shell-line-147)">--distribution-format</text><text class="breeze-shell-r1" x="1024.8" y="3606.8" textLength="414.8" clip-path="url(#breeze-shell-line-147)">&#160;determines&#160;type)&#160;from&#160;&#x27;dist&#x27;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3606.8" textLength="12.2" clip-path="url(#breeze-shell-line-147)">│</text><text class="breeze-shell-r1" x="1464" y="3606.8" textLength="12.2" clip-path="url(#breeze-shell-line-147)">
+</text><text class="breeze-shell-r5" x="0" y="3631.2" textLength="12.2" clip-path="url(#breeze-shell-line-148)">│</text><text class="breeze-shell-r1" x="756.4" y="3631.2" textLength="683.2" clip-path="url(#breeze-shell-line-148)">folder&#160;when&#160;entering&#160;breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3631.2" textLength="12.2" clip-path="url(#breeze-shell-line-148)">│</text><text class="breeze-shell-r1" x="1464" y="3631.2" textLength="12.2" clip-path="url(#breeze-shell-line-148)">
+</text><text class="breeze-shell-r5" x="0" y="3655.6" textLength="1464" clip-path="url(#breeze-shell-line-149)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="3655.6" textLength="12.2" clip-path="url(#breeze-shell-line-149)">
+</text><text class="breeze-shell-r5" x="0" y="3680" textLength="24.4" clip-path="url(#breeze-shell-line-150)">╭─</text><text class="breeze-shell-r5" x="24.4" y="3680" textLength="610" clip-path="url(#breeze-shell-line-150)">&#160;Upgrading/downgrading/removing&#160;selected&#160;packages&#160;</text><text class="breeze-shell-r5" x="634.4" y="3680" textLength="805.2" clip-path="url(#breeze-shell-line-150)">──────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="3680" textLength="24.4" clip-path="url(#breeze-shell-line-150)">─╮</text><text class="breeze-shell-r1" x="1464" y="3680" textLength="12.2" clip-path="url(#breeze-shell-line-150)">
+</text><text class="breeze-shell-r5" x="0" y="3704.4" textLength="12.2" clip-path="url(#breeze-shell-line-151)">│</text><text class="breeze-shell-r4" x="24.4" y="3704.4" textLength="170.8" clip-path="url(#breeze-shell-line-151)">--upgrade-boto</text><text class="breeze-shell-r1" x="341.6" y="3704.4" textLength="866.2" clip-path="url(#breeze-shell-line-151)">Remove&#160;aiobotocore&#160;and&#160;upgrade&#160;botocore&#160;and&#160;boto&#160;to&#160;the&#160;latest&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y="3704.4" textLength="12.2" clip-path="url(#breeze-shell-line-151)">│</text><text class="breeze-shell-r1" x="1464" y="3704.4" textLength="12.2" clip-path="url(#breeze-shell-line-151)">
+</text><text class="breeze-shell-r5" x="0" y="3728.8" textLength="12.2" clip-path="url(#breeze-shell-line-152)">│</text><text class="breeze-shell-r4" x="24.4" y="3728.8" textLength="268.4" clip-path="url(#breeze-shell-line-152)">--downgrade-sqlalchemy</text><text class="breeze-shell-r1" x="341.6" y="3728.8" textLength="610" clip-path="url(#breeze-shell-line-152)">Downgrade&#160;SQLAlchemy&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y="3728.8" textLength="12.2" clip-path="url(#breeze-shell-line-152)">│</text><text class="breeze-shell-r1" x="1464" y="3728.8" textLength="12.2" clip-path="url(#breeze-shell-line-152)">
+</text><text class="breeze-shell-r5" x="0" y="3753.2" textLength="12.2" clip-path="url(#breeze-shell-line-153)">│</text><text class="breeze-shell-r4" x="24.4" y="3753.2" textLength="244" clip-path="url(#breeze-shell-line-153)">--downgrade-pendulum</text><text class="breeze-shell-r1" x="341.6" y="3753.2" textLength="585.6" clip-path="url(#breeze-shell-line-153)">Downgrade&#160;Pendulum&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y="3753.2" textLength="12.2" clip-path="url(#breeze-shell-line-153)">│</text><text class="breeze-shell-r1" x="1464" y="3753.2" textLength="12.2" clip-path="url(#breeze-shell-line-153)">
+</text><text class="breeze-shell-r5" x="0" y="3777.6" textLength="1464" clip-path="url(#breeze-shell-line-154)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="3777.6" textLength="12.2" clip-path="url(#breeze-shell-line-154)">
+</text><text class="breeze-shell-r5" x="0" y="3802" textLength="24.4" clip-path="url(#breeze-shell-line-155)">╭─</text><text class="breeze-shell-r5" x="24.4" y="3802" textLength="183" clip-path="url(#breeze-shell-line-155)">&#160;DB&#160;test&#160;flags&#160;</text><text class="breeze-shell-r5" x="207.4" y="3802" textLength="1232.2" clip-path="url(#breeze-shell-line-155)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="3802" textLength="24.4" clip-path="url(#breeze-shell-line-155)">─╮</text><text class="breeze-shell-r1" x="1464" y="3802" textLength="12.2" clip-path="url(#breeze-shell-line-155)">
+</text><text class="breeze-shell-r5" x="0" y="3826.4" textLength="12.2" clip-path="url(#breeze-shell-line-156)">│</text><text class="breeze-shell-r4" x="24.4" y="3826.4" textLength="231.8" clip-path="url(#breeze-shell-line-156)">--run-db-tests-only</text><text class="breeze-shell-r1" x="305" y="3826.4" textLength="475.8" clip-path="url(#breeze-shell-line-156)">Only&#160;runs&#160;tests&#160;that&#160;require&#160;a&#160;database</text><text class="breeze-shell-r5" x="1451.8" y="3826.4" textLength="12.2" clip-path="url(#breeze-shell-line-156)">│</text><text class="breeze-shell-r1" x="1464" y="3826.4" textLength="12.2" clip-path="url(#breeze-shell-line-156)">
+</text><text class="breeze-shell-r5" x="0" y="3850.8" textLength="12.2" clip-path="url(#breeze-shell-line-157)">│</text><text class="breeze-shell-r4" x="24.4" y="3850.8" textLength="183" clip-path="url(#breeze-shell-line-157)">--skip-db-tests</text><text class="breeze-shell-r1" x="305" y="3850.8" textLength="414.8" clip-path="url(#breeze-shell-line-157)">Skip&#160;tests&#160;that&#160;require&#160;a&#160;database</text><text class="breeze-shell-r5" x="1451.8" y="3850.8" textLength="12.2" clip-path="url(#breeze-shell-line-157)">│</text><text class="breeze-shell-r1" x="1464" y="3850.8" textLength="12.2" clip-path="url(#breeze-shell-line-157)">
+</text><text class="breeze-shell-r5" x="0" y="3875.2" textLength="1464" clip-path="url(#breeze-shell-line-158)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="3875.2" textLength="12.2" clip-path="url(#breeze-shell-line-158)">
+</text><text class="breeze-shell-r5" x="0" y="3899.6" textLength="24.4" clip-path="url(#breeze-shell-line-159)">╭─</text><text class="breeze-shell-r5" x="24.4" y="3899.6" textLength="183" clip-path="url(#breeze-shell-line-159)">&#160;Other&#160;options&#160;</text><text class="breeze-shell-r5" x="207.4" y="3899.6" textLength="1232.2" clip-path="url(#breeze-shell-line-159)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="3899.6" textLength="24.4" clip-path="url(#breeze-shell-line-159)">─╮</text><text class="breeze-shell-r1" x="1464" y="3899.6" textLength="12.2" clip-path="url(#breeze-shell-line-159)">
+</text><text class="breeze-shell-r5" x="0" y="3924" textLength="12.2" clip-path="url(#breeze-shell-line-160)">│</text><text class="breeze-shell-r4" x="24.4" y="3924" textLength="256.2" clip-path="url(#breeze-shell-line-160)">--forward-credentials</text><text class="breeze-shell-r6" x="305" y="3924" textLength="24.4" clip-path="url(#breeze-shell-line-160)">-f</text><text class="breeze-shell-r1" x="353.8" y="3924" textLength="634.4" clip-path="url(#breeze-shell-line-160)">Forward&#160;local&#160;credentials&#160;to&#160;container&#160;when&#160;running.</text><text class="breeze-shell-r5" x="1451.8" y="3924" textLength="12.2" clip-path="url(#breeze-shell-line-160)">│</text><text class="breeze-shell-r1" x="1464" y="3924" textLength="12.2" clip-path="url(#breeze-shell-line-160)">
+</text><text class="breeze-shell-r5" x="0" y="3948.4" textLength="12.2" clip-path="url(#breeze-shell-line-161)">│</text><text class="breeze-shell-r4" x="24.4" y="3948.4" textLength="122" clip-path="url(#breeze-shell-line-161)">--max-time</text><text class="breeze-shell-r1" x="353.8" y="3948.4" textLength="1049.2" clip-path="url(#breeze-shell-line-161)">Maximum&#160;time&#160;that&#160;the&#160;command&#160;should&#160;take&#160;-&#160;if&#160;it&#160;takes&#160;longer,&#160;the&#160;command&#160;will&#160;fail.</text><text class="breeze-shell-r5" x="1451.8" y="3948.4" textLength="12.2" clip-path="url(#breeze-shell-line-161)">│</text><text class="breeze-shell-r1" x="1464" y="3948.4" textLength="12.2" clip-path="url(#breeze-shell-line-161)">
+</text><text class="breeze-shell-r5" x="0" y="3972.8" textLength="12.2" clip-path="url(#breeze-shell-line-162)">│</text><text class="breeze-shell-r7" x="353.8" y="3972.8" textLength="1049.2" clip-path="url(#breeze-shell-line-162)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3972.8" textLength="12.2" clip-path="url(#breeze-shell-line-162)">│</text><text class="breeze-shell-r1" x="1464" y="3972.8" textLength="12.2" clip-path="url(#breeze-shell-line-162)">
+</text><text class="breeze-shell-r5" x="0" y="3997.2" textLength="12.2" clip-path="url(#breeze-shell-line-163)">│</text><text class="breeze-shell-r4" x="24.4" y="3997.2" textLength="219.6" clip-path="url(#breeze-shell-line-163)">--verbose-commands</text><text class="breeze-shell-r1" x="353.8" y="3997.2" textLength="414.8" clip-path="url(#breeze-shell-line-163)">Show&#160;details&#160;of&#160;commands&#160;executed.</text><text class="breeze-shell-r5" x="1451.8" y="3997.2" textLength="12.2" clip-path="url(#breeze-shell-line-163)">│</text><text class="breeze-shell-r1" x="1464" y="3997.2" textLength="12.2" clip-path="url(#breeze-shell-line-163)">
+</text><text class="breeze-shell-r5" x="0" y="4021.6" textLength="12.2" clip-path="url(#breeze-shell-line-164)">│</text><text class="breeze-shell-r4" x="24.4" y="4021.6" textLength="244" clip-path="url(#breeze-shell-line-164)">--keep-env-variables</text><text class="breeze-shell-r1" x="353.8" y="4021.6" textLength="1000.4" clip-path="url(#breeze-shell-line-164)">Do&#160;not&#160;clear&#160;environment&#160;variables&#160;that&#160;might&#160;have&#160;side&#160;effect&#160;while&#160;running&#160;tests</text><text class="breeze-shell-r5" x="1451.8" y="4021.6" textLength="12.2" clip-path="url(#breeze-shell-line-164)">│</text><text class="breeze-shell-r1" x="1464" y="4021.6" textLength="12.2" clip-path="url(#breeze-shell-line-164)">
+</text><text class="breeze-shell-r5" x="0" y="4046" textLength="12.2" clip-path="url(#breeze-shell-line-165)">│</text><text class="breeze-shell-r4" x="24.4" y="4046" textLength="183" clip-path="url(#breeze-shell-line-165)">--no-db-cleanup</text><text class="breeze-shell-r1" x="353.8" y="4046" textLength="597.8" clip-path="url(#breeze-shell-line-165)">Do&#160;not&#160;clear&#160;the&#160;database&#160;before&#160;each&#160;test&#160;module</text><text class="breeze-shell-r5" x="1451.8" y="4046" textLength="12.2" clip-path="url(#breeze-shell-line-165)">│</text><text class="breeze-shell-r1" x="1464" y="4046" textLength="12.2" clip-path="url(#breeze-shell-line-165)">
+</text><text class="breeze-shell-r5" x="0" y="4070.4" textLength="1464" clip-path="url(#breeze-shell-line-166)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="4070.4" textLength="12.2" clip-path="url(#breeze-shell-line-166)">
+</text><text class="breeze-shell-r5" x="0" y="4094.8" textLength="24.4" clip-path="url(#breeze-shell-line-167)">╭─</text><text class="breeze-shell-r5" x="24.4" y="4094.8" textLength="195.2" clip-path="url(#breeze-shell-line-167)">&#160;Common&#160;options&#160;</text><text class="breeze-shell-r5" x="219.6" y="4094.8" textLength="1220" clip-path="url(#breeze-shell-line-167)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="4094.8" textLength="24.4" clip-path="url(#breeze-shell-line-167)">─╮</text><text class="breeze-shell-r1" x="1464" y="4094.8" textLength="12.2" clip-path="url(#breeze-shell-line-167)">
+</text><text class="breeze-shell-r5" x="0" y="4119.2" textLength="12.2" clip-path="url(#breeze-shell-line-168)">│</text><text class="breeze-shell-r4" x="24.4" y="4119.2" textLength="97.6" clip-path="url(#breeze-shell-line-168)">--answer</text><text class="breeze-shell-r6" x="158.6" y="4119.2" textLength="24.4" clip-path="url(#breeze-shell-line-168)">-a</text><text class="breeze-shell-r1" x="207.4" y="4119.2" textLength="317.2" clip-path="url(#breeze-shell-line-168)">Force&#160;answer&#160;to&#160;questions.</text><text class="breeze-shell-r7" x="536.8" y="4119.2" textLength="353.8" clip-path="url(#breeze-shell-line-168)">(y&#160;|&#160;n&#160;|&#160;q&#160;|&#160;yes&#160;|&#160;no&#160;|&#160;quit)</text><text class="breeze-shell-r5" x="1451.8" y="4119.2" textLength="12.2" clip-path="url(#breeze-shell-line-168)">│</text><text class="breeze-shell-r1" x="1464" y="4119.2" textLength="12.2" clip-path="url(#breeze-shell-line-168)">
+</text><text class="breeze-shell-r5" x="0" y="4143.6" textLength="12.2" clip-path="url(#breeze-shell-line-169)">│</text><text class="breeze-shell-r4" x="24.4" y="4143.6" textLength="109.8" clip-path="url(#breeze-shell-line-169)">--dry-run</text><text class="breeze-shell-r6" x="158.6" y="4143.6" textLength="24.4" clip-path="url(#breeze-shell-line-169)">-D</text><text class="breeze-shell-r1" x="207.4" y="4143.6" textLength="719.8" clip-path="url(#breeze-shell-line-169)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-shell-r5" x="1451.8" y="4143.6" textLength="12.2" clip-path="url(#breeze-shell-line-169)">│</text><text class="breeze-shell-r1" x="1464" y="4143.6" textLength="12.2" clip-path="url(#breeze-shell-line-169)">
+</text><text class="breeze-shell-r5" x="0" y="4168" textLength="12.2" clip-path="url(#breeze-shell-line-170)">│</text><text class="breeze-shell-r4" x="24.4" y="4168" textLength="109.8" clip-path="url(#breeze-shell-line-170)">--verbose</text><text class="breeze-shell-r6" x="158.6" y="4168" textLength="24.4" clip-path="url(#breeze-shell-line-170)">-v</text><text class="breeze-shell-r1" x="207.4" y="4168" textLength="585.6" clip-path="url(#breeze-shell-line-170)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-shell-r5" x="1451.8" y="4168" textLength="12.2" clip-path="url(#breeze-shell-line-170)">│</text><text class="breeze-shell-r1" x="1464" y="4168" textLength="12.2" clip-path="url(#breeze-shell-line-170)">
+</text><text class="breeze-shell-r5" x="0" y="4192.4" textLength="12.2" clip-path="url(#breeze-shell-line-171)">│</text><text class="breeze-shell-r4" x="24.4" y="4192.4" textLength="73.2" clip-path="url(#breeze-shell-line-171)">--help</text><text class="breeze-shell-r6" x="158.6" y="4192.4" textLength="24.4" clip-path="url(#breeze-shell-line-171)">-h</text><text class="breeze-shell-r1" x="207.4" y="4192.4" textLength="329.4" clip-path="url(#breeze-shell-line-171)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-shell-r5" x="1451.8" y="4192.4" textLength="12.2" clip-path="url(#breeze-shell-line-171)">│</text><text class="breeze-shell-r1" x="1464" y="4192.4" textLength="12.2" clip-path="url(#breeze-shell-line-171)">
+</text><text class="breeze-shell-r5" x="0" y="4216.8" textLength="1464" clip-path="url(#breeze-shell-line-172)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="4216.8" textLength="12.2" clip-path="url(#breeze-shell-line-172)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_shell.txt b/dev/breeze/doc/images/output_shell.txt
index ab08dd10a1636..3c0d8fc50b9bf 100644
--- a/dev/breeze/doc/images/output_shell.txt
+++ b/dev/breeze/doc/images/output_shell.txt
@@ -1 +1 @@
-88a0320b81a12411637d9b2596394a3a
+7ce73872a6ef26151af64d2a850104f6
diff --git a/dev/breeze/doc/images/output_start-airflow.svg b/dev/breeze/doc/images/output_start-airflow.svg
index 24ef4793309b7..071838e1e0ca0 100644
--- a/dev/breeze/doc/images/output_start-airflow.svg
+++ b/dev/breeze/doc/images/output_start-airflow.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 3490.3999999999996" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 3514.7999999999997" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-start-airflow-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="3439.3999999999996" />
+      <rect x="0" y="0" width="1463.0" height="3463.7999999999997" />
     </clipPath>
     <clipPath id="breeze-start-airflow-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -465,9 +465,12 @@
 <clipPath id="breeze-start-airflow-line-139">
     <rect x="0" y="3393.1" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-start-airflow-line-140">
+    <rect x="0" y="3417.5" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="3488.4" rx="8"/><text class="breeze-start-airflow-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;start-airflow</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="3512.8" rx="8"/><text class="breeze-start-airflow-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;start-airflow</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -517,107 +520,108 @@
 </text><text class="breeze-start-airflow-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-37)">│</text><text class="breeze-start-airflow-r7" x="390.4" y="922.8" textLength="1049.2" clip-path="url(#breeze-start-airflow-line-37)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="922.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-37)">│</text><text class="breeze-start-airflow-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-37)">
 </text><text class="breeze-start-airflow-r5" x="0" y="947.2" textLength="1464" clip-path="url(#breeze-start-airflow-line-38)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-38)">
 </text><text class="breeze-start-airflow-r5" x="0" y="971.6" textLength="24.4" clip-path="url(#breeze-start-airflow-line-39)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="971.6" textLength="122" clip-path="url(#breeze-start-airflow-line-39)">&#160;Database&#160;</text><text class="breeze-start-airflow-r5" x="146.4" y="971.6" textLength="1293.2" clip-path="url(#breeze-start-airflow-line-39)">──────────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="971.6" textLength="24.4" clip-path="url(#breeze-start-airflow-line-39)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-39)">
-</text><text class="breeze-start-airflow-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-start-airflow-line-40)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="996" textLength="109.8" clip-path="url(#breeze-start-airflow-line-40)">--backend</text><text class="breeze-start-airflow-r6" x="268.4" y="996" textLength="24.4" clip-path="url(#breeze-start-airflow-line-40)">-b</text><text class="breeze-start-airflow-r1" x="488" y="996" textLength="951.6" clip-path="url(#breeze-start-airflow-line-40)">Database&#160;backend&#160;to&#160;use.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;Breeze&#160;will&#160;start&#160;with&#160;an&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="996" textLength="12.2" clip-path="url(#breeze-start-airflow-line-40)">│</text><text class="breeze-start-airflow-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-start-airflow-line-40)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-41)">│</text><text class="breeze-start-airflow-r1" x="488" y="1020.4" textLength="951.6" clip-path="url(#breeze-start-airflow-line-41)">invalid&#160;database&#160;configuration,&#160;meaning&#160;there&#160;will&#160;be&#160;no&#160;database&#160;available,&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-41)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-41)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-42)">│</text><text class="breeze-start-airflow-r1" x="488" y="1044.8" textLength="951.6" clip-path="url(#breeze-start-airflow-line-42)">and&#160;any&#160;attempts&#160;to&#160;connect&#160;to&#160;the&#160;Airflow&#160;database&#160;will&#160;fail.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-42)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-42)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-43)">│</text><text class="breeze-start-airflow-r7" x="488" y="1069.2" textLength="951.6" clip-path="url(#breeze-start-airflow-line-43)">(&gt;sqlite&lt;&#160;|&#160;mysql&#160;|&#160;postgres&#160;|&#160;none)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1069.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-43)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-43)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-44)">│</text><text class="breeze-start-airflow-r5" x="488" y="1093.6" textLength="951.6" clip-path="url(#breeze-start-airflow-line-44)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1093.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-44)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-44)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-start-airflow-line-45)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1118" textLength="219.6" clip-path="url(#breeze-start-airflow-line-45)">--postgres-version</text><text class="breeze-start-airflow-r6" x="268.4" y="1118" textLength="24.4" clip-path="url(#breeze-start-airflow-line-45)">-P</text><text class="breeze-start-airflow-r1" x="488" y="1118" textLength="305" clip-path="url(#breeze-start-airflow-line-45)">Version&#160;of&#160;Postgres&#160;used.</text><text class="breeze-start-airflow-r7" x="805.2" y="1118" textLength="317.2" clip-path="url(#breeze-start-airflow-line-45)">(&gt;13&lt;&#160;|&#160;14&#160;|&#160;15&#160;|&#160;16&#160;|&#160;17)</text><text class="breeze-start-airflow-r5" x="1134.6" y="1118" textLength="158.6" clip-path="url(#breeze-start-airflow-line-45)">[default:&#160;13]</text><text class="breeze-start-airflow-r5" x="1451.8" y="1118" textLength="12.2" clip-path="url(#breeze-start-airflow-line-45)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-start-airflow-line-45)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-46)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1142.4" textLength="183" clip-path="url(#breeze-start-airflow-line-46)">--mysql-version</text><text class="breeze-start-airflow-r6" x="268.4" y="1142.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-46)">-M</text><text class="breeze-start-airflow-r1" x="488" y="1142.4" textLength="268.4" clip-path="url(#breeze-start-airflow-line-46)">Version&#160;of&#160;MySQL&#160;used.</text><text class="breeze-start-airflow-r7" x="768.6" y="1142.4" textLength="158.6" clip-path="url(#breeze-start-airflow-line-46)">(&gt;8.0&lt;&#160;|&#160;8.4)</text><text class="breeze-start-airflow-r5" x="939.4" y="1142.4" textLength="170.8" clip-path="url(#breeze-start-airflow-line-46)">[default:&#160;8.0]</text><text class="breeze-start-airflow-r5" x="1451.8" y="1142.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-46)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-46)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-47)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1166.8" textLength="122" clip-path="url(#breeze-start-airflow-line-47)">--db-reset</text><text class="breeze-start-airflow-r6" x="268.4" y="1166.8" textLength="24.4" clip-path="url(#breeze-start-airflow-line-47)">-d</text><text class="breeze-start-airflow-r1" x="292.8" y="1166.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-47)">/</text><text class="breeze-start-airflow-r4" x="305" y="1166.8" textLength="158.6" clip-path="url(#breeze-start-airflow-line-47)">--no-db-reset</text><text class="breeze-start-airflow-r1" x="488" y="1166.8" textLength="451.4" clip-path="url(#breeze-start-airflow-line-47)">Reset&#160;DB&#160;when&#160;entering&#160;the&#160;container.</text><text class="breeze-start-airflow-r5" x="951.6" y="1166.8" textLength="268.4" clip-path="url(#breeze-start-airflow-line-47)">[default:&#160;no-db-reset]</text><text class="breeze-start-airflow-r5" x="1451.8" y="1166.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-47)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1166.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-47)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1191.2" textLength="1464" clip-path="url(#breeze-start-airflow-line-48)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-48)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1215.6" textLength="24.4" clip-path="url(#breeze-start-airflow-line-49)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="1215.6" textLength="231.8" clip-path="url(#breeze-start-airflow-line-49)">&#160;Choosing&#160;executor&#160;</text><text class="breeze-start-airflow-r5" x="256.2" y="1215.6" textLength="1183.4" clip-path="url(#breeze-start-airflow-line-49)">─────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="1215.6" textLength="24.4" clip-path="url(#breeze-start-airflow-line-49)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-49)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-start-airflow-line-50)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1240" textLength="122" clip-path="url(#breeze-start-airflow-line-50)">--executor</text><text class="breeze-start-airflow-r1" x="256.2" y="1240" textLength="1183.4" clip-path="url(#breeze-start-airflow-line-50)">Specify&#160;the&#160;executor&#160;to&#160;use&#160;with&#160;start-airflow&#160;(defaults&#160;to&#160;LocalExecutor&#160;or&#160;CeleryExecutor&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1240" textLength="12.2" clip-path="url(#breeze-start-airflow-line-50)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-start-airflow-line-50)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-51)">│</text><text class="breeze-start-airflow-r1" x="256.2" y="1264.4" textLength="1183.4" clip-path="url(#breeze-start-airflow-line-51)">depending&#160;on&#160;the&#160;integration&#160;used).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1264.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-51)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-51)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-52)">│</text><text class="breeze-start-airflow-r7" x="256.2" y="1288.8" textLength="1183.4" clip-path="url(#breeze-start-airflow-line-52)">(LocalExecutor|CeleryExecutor|EdgeExecutor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1288.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-52)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-52)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-53)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1313.2" textLength="183" clip-path="url(#breeze-start-airflow-line-53)">--celery-broker</text><text class="breeze-start-airflow-r1" x="256.2" y="1313.2" textLength="402.6" clip-path="url(#breeze-start-airflow-line-53)">Specify&#160;the&#160;celery&#160;message&#160;broker</text><text class="breeze-start-airflow-r7" x="671" y="1313.2" textLength="195.2" clip-path="url(#breeze-start-airflow-line-53)">(rabbitmq|redis)</text><text class="breeze-start-airflow-r5" x="878.4" y="1313.2" textLength="195.2" clip-path="url(#breeze-start-airflow-line-53)">[default:&#160;redis]</text><text class="breeze-start-airflow-r5" x="1451.8" y="1313.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-53)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1313.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-53)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-54)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1337.6" textLength="183" clip-path="url(#breeze-start-airflow-line-54)">--celery-flower</text><text class="breeze-start-airflow-r1" x="256.2" y="1337.6" textLength="231.8" clip-path="url(#breeze-start-airflow-line-54)">Start&#160;celery&#160;flower</text><text class="breeze-start-airflow-r5" x="1451.8" y="1337.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-54)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-54)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1362" textLength="1464" clip-path="url(#breeze-start-airflow-line-55)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#breeze-start-airflow-line-55)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1386.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-56)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="1386.4" textLength="170.8" clip-path="url(#breeze-start-airflow-line-56)">&#160;Auth&#160;manager&#160;</text><text class="breeze-start-airflow-r5" x="195.2" y="1386.4" textLength="1244.4" clip-path="url(#breeze-start-airflow-line-56)">──────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="1386.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-56)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-56)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-57)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1410.8" textLength="170.8" clip-path="url(#breeze-start-airflow-line-57)">--auth-manager</text><text class="breeze-start-airflow-r1" x="244" y="1410.8" textLength="610" clip-path="url(#breeze-start-airflow-line-57)">Specify&#160;the&#160;auth&#160;manager&#160;to&#160;use&#160;with&#160;start-airflow</text><text class="breeze-start-airflow-r7" x="866.2" y="1410.8" textLength="414.8" clip-path="url(#breeze-start-airflow-line-57)">(SimpleAuthManager|FabAuthManager)</text><text class="breeze-start-airflow-r5" x="1451.8" y="1410.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-57)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-57)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-58)">│</text><text class="breeze-start-airflow-r5" x="244" y="1435.2" textLength="610" clip-path="url(#breeze-start-airflow-line-58)">[default:&#160;SimpleAuthManager]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1435.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-58)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-58)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1459.6" textLength="1464" clip-path="url(#breeze-start-airflow-line-59)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-59)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1484" textLength="24.4" clip-path="url(#breeze-start-airflow-line-60)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="1484" textLength="329.4" clip-path="url(#breeze-start-airflow-line-60)">&#160;Asset&#160;compilation&#160;options&#160;</text><text class="breeze-start-airflow-r5" x="353.8" y="1484" textLength="1085.8" clip-path="url(#breeze-start-airflow-line-60)">─────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="1484" textLength="24.4" clip-path="url(#breeze-start-airflow-line-60)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-start-airflow-line-60)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-61)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1508.4" textLength="305" clip-path="url(#breeze-start-airflow-line-61)">--skip-assets-compilation</text><text class="breeze-start-airflow-r1" x="378.2" y="1508.4" textLength="1061.4" clip-path="url(#breeze-start-airflow-line-61)">Skips&#160;compilation&#160;of&#160;assets&#160;when&#160;starting&#160;airflow&#160;even&#160;if&#160;the&#160;content&#160;of&#160;www&#160;changed&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1508.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-61)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-61)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-62)">│</text><text class="breeze-start-airflow-r1" x="378.2" y="1532.8" textLength="305" clip-path="url(#breeze-start-airflow-line-62)">(mutually&#160;exclusive&#160;with&#160;</text><text class="breeze-start-airflow-r4" x="683.2" y="1532.8" textLength="122" clip-path="url(#breeze-start-airflow-line-62)">--dev-mode</text><text class="breeze-start-airflow-r1" x="805.2" y="1532.8" textLength="634.4" clip-path="url(#breeze-start-airflow-line-62)">).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1532.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-62)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-62)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-63)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1557.2" textLength="122" clip-path="url(#breeze-start-airflow-line-63)">--dev-mode</text><text class="breeze-start-airflow-r1" x="378.2" y="1557.2" textLength="1061.4" clip-path="url(#breeze-start-airflow-line-63)">Starts&#160;api-server&#160;in&#160;dev&#160;mode&#160;(assets&#160;are&#160;always&#160;recompiled&#160;in&#160;this&#160;case&#160;when&#160;starting)</text><text class="breeze-start-airflow-r5" x="1451.8" y="1557.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-63)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-63)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-64)">│</text><text class="breeze-start-airflow-r1" x="378.2" y="1581.6" textLength="305" clip-path="url(#breeze-start-airflow-line-64)">(mutually&#160;exclusive&#160;with&#160;</text><text class="breeze-start-airflow-r4" x="683.2" y="1581.6" textLength="305" clip-path="url(#breeze-start-airflow-line-64)">--skip-assets-compilation</text><text class="breeze-start-airflow-r1" x="988.2" y="1581.6" textLength="451.4" clip-path="url(#breeze-start-airflow-line-64)">).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1581.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-64)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-64)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1606" textLength="1464" clip-path="url(#breeze-start-airflow-line-65)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-start-airflow-line-65)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1630.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-66)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="1630.4" textLength="488" clip-path="url(#breeze-start-airflow-line-66)">&#160;Build&#160;CI&#160;image&#160;(before&#160;entering&#160;shell)&#160;</text><text class="breeze-start-airflow-r5" x="512.4" y="1630.4" textLength="927.2" clip-path="url(#breeze-start-airflow-line-66)">────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="1630.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-66)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-66)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-67)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1654.8" textLength="158.6" clip-path="url(#breeze-start-airflow-line-67)">--force-build</text><text class="breeze-start-airflow-r1" x="341.6" y="1654.8" textLength="707.6" clip-path="url(#breeze-start-airflow-line-67)">Force&#160;image&#160;build&#160;no&#160;matter&#160;if&#160;it&#160;is&#160;determined&#160;as&#160;needed.</text><text class="breeze-start-airflow-r5" x="1451.8" y="1654.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-67)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-67)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-68)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1679.2" textLength="231.8" clip-path="url(#breeze-start-airflow-line-68)">--github-repository</text><text class="breeze-start-airflow-r6" x="292.8" y="1679.2" textLength="24.4" clip-path="url(#breeze-start-airflow-line-68)">-g</text><text class="breeze-start-airflow-r1" x="341.6" y="1679.2" textLength="585.6" clip-path="url(#breeze-start-airflow-line-68)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-start-airflow-r7" x="939.4" y="1679.2" textLength="73.2" clip-path="url(#breeze-start-airflow-line-68)">(TEXT)</text><text class="breeze-start-airflow-r5" x="1024.8" y="1679.2" textLength="305" clip-path="url(#breeze-start-airflow-line-68)">[default:&#160;apache/airflow]</text><text class="breeze-start-airflow-r5" x="1451.8" y="1679.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-68)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-68)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-69)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1703.6" textLength="109.8" clip-path="url(#breeze-start-airflow-line-69)">--builder</text><text class="breeze-start-airflow-r1" x="341.6" y="1703.6" textLength="756.4" clip-path="url(#breeze-start-airflow-line-69)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build`&#160;commands.</text><text class="breeze-start-airflow-r7" x="1110.2" y="1703.6" textLength="73.2" clip-path="url(#breeze-start-airflow-line-69)">(TEXT)</text><text class="breeze-start-airflow-r5" x="1451.8" y="1703.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-69)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-69)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-start-airflow-line-70)">│</text><text class="breeze-start-airflow-r5" x="341.6" y="1728" textLength="756.4" clip-path="url(#breeze-start-airflow-line-70)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1728" textLength="12.2" clip-path="url(#breeze-start-airflow-line-70)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-start-airflow-line-70)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-71)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1752.4" textLength="97.6" clip-path="url(#breeze-start-airflow-line-71)">--use-uv</text><text class="breeze-start-airflow-r1" x="122" y="1752.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-71)">/</text><text class="breeze-start-airflow-r4" x="134.2" y="1752.4" textLength="134.2" clip-path="url(#breeze-start-airflow-line-71)">--no-use-uv</text><text class="breeze-start-airflow-r1" x="341.6" y="1752.4" textLength="719.8" clip-path="url(#breeze-start-airflow-line-71)">Use&#160;uv&#160;instead&#160;of&#160;pip&#160;as&#160;packaging&#160;tool&#160;to&#160;build&#160;the&#160;image.</text><text class="breeze-start-airflow-r5" x="1073.6" y="1752.4" textLength="207.4" clip-path="url(#breeze-start-airflow-line-71)">[default:&#160;use-uv]</text><text class="breeze-start-airflow-r5" x="1451.8" y="1752.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-71)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1752.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-71)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-72)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1776.8" textLength="207.4" clip-path="url(#breeze-start-airflow-line-72)">--uv-http-timeout</text><text class="breeze-start-airflow-r1" x="341.6" y="1776.8" textLength="829.6" clip-path="url(#breeze-start-airflow-line-72)">Timeout&#160;for&#160;requests&#160;that&#160;UV&#160;makes&#160;(only&#160;used&#160;in&#160;case&#160;of&#160;UV&#160;builds).</text><text class="breeze-start-airflow-r7" x="1183.4" y="1776.8" textLength="183" clip-path="url(#breeze-start-airflow-line-72)">(INTEGER&#160;RANGE)</text><text class="breeze-start-airflow-r5" x="1451.8" y="1776.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-72)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1776.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-72)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-73)">│</text><text class="breeze-start-airflow-r5" x="341.6" y="1801.2" textLength="829.6" clip-path="url(#breeze-start-airflow-line-73)">[default:&#160;300;&#160;x&gt;=1]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1801.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-73)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-73)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1825.6" textLength="1464" clip-path="url(#breeze-start-airflow-line-74)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-74)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1850" textLength="24.4" clip-path="url(#breeze-start-airflow-line-75)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="1850" textLength="414.8" clip-path="url(#breeze-start-airflow-line-75)">&#160;Mounting&#160;the&#160;sources&#160;and&#160;volumes&#160;</text><text class="breeze-start-airflow-r5" x="439.2" y="1850" textLength="1000.4" clip-path="url(#breeze-start-airflow-line-75)">──────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="1850" textLength="24.4" clip-path="url(#breeze-start-airflow-line-75)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-start-airflow-line-75)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-76)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1874.4" textLength="183" clip-path="url(#breeze-start-airflow-line-76)">--mount-sources</text><text class="breeze-start-airflow-r1" x="256.2" y="1874.4" textLength="1159" clip-path="url(#breeze-start-airflow-line-76)">Choose&#160;scope&#160;of&#160;local&#160;sources&#160;that&#160;should&#160;be&#160;mounted,&#160;skipped,&#160;or&#160;removed&#160;(default&#160;=&#160;selected).</text><text class="breeze-start-airflow-r5" x="1451.8" y="1874.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-76)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-76)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1898.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-77)">│</text><text class="breeze-start-airflow-r7" x="256.2" y="1898.8" textLength="1159" clip-path="url(#breeze-start-airflow-line-77)">(selected&#160;|&#160;all&#160;|&#160;skip&#160;|&#160;remove&#160;|&#160;tests&#160;|&#160;providers-and-tests)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1898.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-77)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-77)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1923.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-78)">│</text><text class="breeze-start-airflow-r5" x="256.2" y="1923.2" textLength="1159" clip-path="url(#breeze-start-airflow-line-78)">[default:&#160;selected]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1923.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-78)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-78)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1947.6" textLength="1464" clip-path="url(#breeze-start-airflow-line-79)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="1947.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-79)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1972" textLength="24.4" clip-path="url(#breeze-start-airflow-line-80)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="1972" textLength="512.4" clip-path="url(#breeze-start-airflow-line-80)">&#160;Installing&#160;packages&#160;after&#160;entering&#160;shell&#160;</text><text class="breeze-start-airflow-r5" x="536.8" y="1972" textLength="902.8" clip-path="url(#breeze-start-airflow-line-80)">──────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="1972" textLength="24.4" clip-path="url(#breeze-start-airflow-line-80)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-start-airflow-line-80)">
-</text><text class="breeze-start-airflow-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-81)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1996.4" textLength="366" clip-path="url(#breeze-start-airflow-line-81)">--airflow-constraints-location</text><text class="breeze-start-airflow-r1" x="756.4" y="1996.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-81)">Location&#160;of&#160;airflow&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1996.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-81)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-81)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-82)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2020.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-82)">local&#160;context&#160;file).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2020.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-82)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-82)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-83)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2045.2" textLength="683.2" clip-path="url(#breeze-start-airflow-line-83)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2045.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-83)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-83)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-84)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2069.6" textLength="317.2" clip-path="url(#breeze-start-airflow-line-84)">--airflow-constraints-mode</text><text class="breeze-start-airflow-r1" x="756.4" y="2069.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-84)">Mode&#160;of&#160;constraints&#160;for&#160;Airflow&#160;for&#160;CI&#160;image&#160;building.&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2069.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-84)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-84)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-start-airflow-line-85)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2094" textLength="683.2" clip-path="url(#breeze-start-airflow-line-85)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2094" textLength="12.2" clip-path="url(#breeze-start-airflow-line-85)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-start-airflow-line-85)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-86)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2118.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-86)">constraints-no-providers)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2118.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-86)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-86)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-87)">│</text><text class="breeze-start-airflow-r5" x="756.4" y="2142.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-87)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2142.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-87)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-87)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-88)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2167.2" textLength="378.2" clip-path="url(#breeze-start-airflow-line-88)">--airflow-constraints-reference</text><text class="breeze-start-airflow-r1" x="756.4" y="2167.2" textLength="683.2" clip-path="url(#breeze-start-airflow-line-88)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;airflow&#160;installation&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2167.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-88)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-88)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2191.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-89)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2191.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-89)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2191.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-89)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2191.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-89)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2216" textLength="12.2" clip-path="url(#breeze-start-airflow-line-90)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2216" textLength="683.2" clip-path="url(#breeze-start-airflow-line-90)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2216" textLength="12.2" clip-path="url(#breeze-start-airflow-line-90)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2216" textLength="12.2" clip-path="url(#breeze-start-airflow-line-90)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2240.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-91)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2240.4" textLength="195.2" clip-path="url(#breeze-start-airflow-line-91)">--airflow-extras</text><text class="breeze-start-airflow-r1" x="756.4" y="2240.4" textLength="378.2" clip-path="url(#breeze-start-airflow-line-91)">Airflow&#160;extras&#160;to&#160;install&#160;when&#160;</text><text class="breeze-start-airflow-r4" x="1134.6" y="2240.4" textLength="256.2" clip-path="url(#breeze-start-airflow-line-91)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="1390.8" y="2240.4" textLength="48.8" clip-path="url(#breeze-start-airflow-line-91)">&#160;is&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2240.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-91)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2240.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-91)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2264.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-92)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2264.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-92)">used&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2264.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-92)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2264.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-92)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2289.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-93)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2289.2" textLength="683.2" clip-path="url(#breeze-start-airflow-line-93)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2289.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-93)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2289.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-93)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2313.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-94)">│</text><text class="breeze-start-airflow-r5" x="756.4" y="2313.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-94)">[default:&#160;&quot;&quot;]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2313.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-94)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2313.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-94)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2338" textLength="12.2" clip-path="url(#breeze-start-airflow-line-95)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2338" textLength="341.6" clip-path="url(#breeze-start-airflow-line-95)">--clean-airflow-installation</text><text class="breeze-start-airflow-r1" x="756.4" y="2338" textLength="683.2" clip-path="url(#breeze-start-airflow-line-95)">Clean&#160;the&#160;airflow&#160;installation&#160;before&#160;installing&#160;version</text><text class="breeze-start-airflow-r5" x="1451.8" y="2338" textLength="12.2" clip-path="url(#breeze-start-airflow-line-95)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2338" textLength="12.2" clip-path="url(#breeze-start-airflow-line-95)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2362.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-96)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2362.4" textLength="158.6" clip-path="url(#breeze-start-airflow-line-96)">specified&#160;by&#160;</text><text class="breeze-start-airflow-r4" x="915" y="2362.4" textLength="256.2" clip-path="url(#breeze-start-airflow-line-96)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="1171.2" y="2362.4" textLength="268.4" clip-path="url(#breeze-start-airflow-line-96)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2362.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-96)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2362.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-96)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2386.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-97)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2386.8" textLength="414.8" clip-path="url(#breeze-start-airflow-line-97)">--install-airflow-with-constraints</text><text class="breeze-start-airflow-r1" x="439.2" y="2386.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-97)">/</text><text class="breeze-start-airflow-r4" x="451.4" y="2386.8" textLength="256.2" clip-path="url(#breeze-start-airflow-line-97)">--no-install-airflow-</text><text class="breeze-start-airflow-r1" x="756.4" y="2386.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-97)">Install&#160;airflow&#160;in&#160;a&#160;separate&#160;step,&#160;with&#160;constraints&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2386.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-97)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2386.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-97)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2411.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-98)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2411.2" textLength="195.2" clip-path="url(#breeze-start-airflow-line-98)">with-constraints</text><text class="breeze-start-airflow-r1" x="756.4" y="2411.2" textLength="683.2" clip-path="url(#breeze-start-airflow-line-98)">determined&#160;from&#160;package&#160;or&#160;airflow&#160;version.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2411.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-98)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2411.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-98)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2435.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-99)">│</text><text class="breeze-start-airflow-r5" x="756.4" y="2435.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-99)">[default:&#160;install-airflow-with-constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2435.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-99)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2435.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-99)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2460" textLength="12.2" clip-path="url(#breeze-start-airflow-line-100)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2460" textLength="341.6" clip-path="url(#breeze-start-airflow-line-100)">--install-selected-providers</text><text class="breeze-start-airflow-r1" x="756.4" y="2460" textLength="683.2" clip-path="url(#breeze-start-airflow-line-100)">Comma-separated&#160;list&#160;of&#160;providers&#160;selected&#160;to&#160;be&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2460" textLength="12.2" clip-path="url(#breeze-start-airflow-line-100)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2460" textLength="12.2" clip-path="url(#breeze-start-airflow-line-100)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2484.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-101)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2484.4" textLength="231.8" clip-path="url(#breeze-start-airflow-line-101)">installed&#160;(implies&#160;</text><text class="breeze-start-airflow-r4" x="988.2" y="2484.4" textLength="353.8" clip-path="url(#breeze-start-airflow-line-101)">--use-distributions-from-dist</text><text class="breeze-start-airflow-r1" x="1342" y="2484.4" textLength="97.6" clip-path="url(#breeze-start-airflow-line-101)">).&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2484.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-101)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2484.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-101)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2508.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-102)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2508.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-102)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2508.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-102)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2508.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-102)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2533.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-103)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2533.2" textLength="256.2" clip-path="url(#breeze-start-airflow-line-103)">--distribution-format</text><text class="breeze-start-airflow-r1" x="756.4" y="2533.2" textLength="658.8" clip-path="url(#breeze-start-airflow-line-103)">Format&#160;of&#160;packages&#160;that&#160;should&#160;be&#160;installed&#160;from&#160;dist.</text><text class="breeze-start-airflow-r5" x="1451.8" y="2533.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-103)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2533.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-103)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2557.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-104)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2557.6" textLength="658.8" clip-path="url(#breeze-start-airflow-line-104)">(wheel&#160;|&#160;sdist)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2557.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-104)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2557.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-104)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2582" textLength="12.2" clip-path="url(#breeze-start-airflow-line-105)">│</text><text class="breeze-start-airflow-r5" x="756.4" y="2582" textLength="658.8" clip-path="url(#breeze-start-airflow-line-105)">[default:&#160;wheel]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2582" textLength="12.2" clip-path="url(#breeze-start-airflow-line-105)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2582" textLength="12.2" clip-path="url(#breeze-start-airflow-line-105)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2606.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-106)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2606.4" textLength="390.4" clip-path="url(#breeze-start-airflow-line-106)">--providers-constraints-location</text><text class="breeze-start-airflow-r1" x="756.4" y="2606.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-106)">Location&#160;of&#160;providers&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2606.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-106)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2606.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-106)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2630.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-107)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2630.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-107)">local&#160;context&#160;file).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2630.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-107)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2630.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-107)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2655.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-108)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2655.2" textLength="683.2" clip-path="url(#breeze-start-airflow-line-108)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2655.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-108)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2655.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-108)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2679.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-109)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2679.6" textLength="341.6" clip-path="url(#breeze-start-airflow-line-109)">--providers-constraints-mode</text><text class="breeze-start-airflow-r1" x="756.4" y="2679.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-109)">Mode&#160;of&#160;constraints&#160;for&#160;Providers&#160;for&#160;CI&#160;image&#160;building.</text><text class="breeze-start-airflow-r5" x="1451.8" y="2679.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-109)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2679.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-109)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2704" textLength="12.2" clip-path="url(#breeze-start-airflow-line-110)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2704" textLength="683.2" clip-path="url(#breeze-start-airflow-line-110)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2704" textLength="12.2" clip-path="url(#breeze-start-airflow-line-110)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2704" textLength="12.2" clip-path="url(#breeze-start-airflow-line-110)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2728.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-111)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2728.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-111)">constraints-no-providers)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2728.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-111)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2728.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-111)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2752.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-112)">│</text><text class="breeze-start-airflow-r5" x="756.4" y="2752.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-112)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2752.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-112)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2752.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-112)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2777.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-113)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2777.2" textLength="402.6" clip-path="url(#breeze-start-airflow-line-113)">--providers-constraints-reference</text><text class="breeze-start-airflow-r1" x="756.4" y="2777.2" textLength="683.2" clip-path="url(#breeze-start-airflow-line-113)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;providers&#160;installation&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2777.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-113)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2777.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-113)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2801.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-114)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2801.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-114)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;Can&#160;be&#160;&#x27;default&#x27;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2801.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-114)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2801.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-114)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2826" textLength="12.2" clip-path="url(#breeze-start-airflow-line-115)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2826" textLength="683.2" clip-path="url(#breeze-start-airflow-line-115)">in&#160;which&#160;case&#160;the&#160;default&#160;constraints-reference&#160;is&#160;used.</text><text class="breeze-start-airflow-r5" x="1451.8" y="2826" textLength="12.2" clip-path="url(#breeze-start-airflow-line-115)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2826" textLength="12.2" clip-path="url(#breeze-start-airflow-line-115)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2850.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-116)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2850.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-116)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2850.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-116)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2850.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-116)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2874.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-117)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2874.8" textLength="341.6" clip-path="url(#breeze-start-airflow-line-117)">--providers-skip-constraints</text><text class="breeze-start-airflow-r1" x="756.4" y="2874.8" textLength="597.8" clip-path="url(#breeze-start-airflow-line-117)">Do&#160;not&#160;use&#160;constraints&#160;when&#160;installing&#160;providers.</text><text class="breeze-start-airflow-r5" x="1451.8" y="2874.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-117)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2874.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-117)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2899.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-118)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2899.2" textLength="256.2" clip-path="url(#breeze-start-airflow-line-118)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="756.4" y="2899.2" textLength="683.2" clip-path="url(#breeze-start-airflow-line-118)">Use&#160;(reinstall&#160;at&#160;entry)&#160;Airflow&#160;version&#160;from&#160;PyPI.&#160;It&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2899.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-118)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2899.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-118)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2923.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-119)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2923.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-119)">can&#160;also&#160;be&#160;version&#160;(to&#160;install&#160;from&#160;PyPI),&#160;`none`,&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2923.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-119)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2923.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-119)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2948" textLength="12.2" clip-path="url(#breeze-start-airflow-line-120)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2948" textLength="683.2" clip-path="url(#breeze-start-airflow-line-120)">`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder,&#160;or&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2948" textLength="12.2" clip-path="url(#breeze-start-airflow-line-120)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2948" textLength="12.2" clip-path="url(#breeze-start-airflow-line-120)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2972.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-121)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2972.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-121)">VCS&#160;URL&#160;to&#160;install&#160;from&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2972.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-121)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2972.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-121)">
-</text><text class="breeze-start-airflow-r5" x="0" y="2996.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-122)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2996.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-122)">(https://pip.pypa.io/en/stable/topics/vcs-support/).&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2996.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-122)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2996.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-122)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3021.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-123)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="3021.2" textLength="97.6" clip-path="url(#breeze-start-airflow-line-123)">Implies&#160;</text><text class="breeze-start-airflow-r4" x="854" y="3021.2" textLength="183" clip-path="url(#breeze-start-airflow-line-123)">--mount-sources</text><text class="breeze-start-airflow-r1" x="1037" y="3021.2" textLength="402.6" clip-path="url(#breeze-start-airflow-line-123)">&#160;`remove`.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3021.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-123)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3021.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-123)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3045.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-124)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="3045.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-124)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3045.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-124)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3045.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-124)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3070" textLength="12.2" clip-path="url(#breeze-start-airflow-line-125)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3070" textLength="244" clip-path="url(#breeze-start-airflow-line-125)">--allow-pre-releases</text><text class="breeze-start-airflow-r1" x="756.4" y="3070" textLength="683.2" clip-path="url(#breeze-start-airflow-line-125)">Allow&#160;pre-releases&#160;of&#160;Airflow,&#160;task-sdk&#160;and&#160;providers&#160;to</text><text class="breeze-start-airflow-r5" x="1451.8" y="3070" textLength="12.2" clip-path="url(#breeze-start-airflow-line-125)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3070" textLength="12.2" clip-path="url(#breeze-start-airflow-line-125)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3094.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-126)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="3094.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-126)">be&#160;installed.&#160;Set&#160;to&#160;true&#160;automatically&#160;for&#160;pre-release&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3094.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-126)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3094.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-126)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3118.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-127)">│</text><text class="breeze-start-airflow-r4" x="756.4" y="3118.8" textLength="256.2" clip-path="url(#breeze-start-airflow-line-127)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="1012.6" y="3118.8" textLength="427" clip-path="url(#breeze-start-airflow-line-127)">)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3118.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-127)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3118.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-127)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3143.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-128)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3143.2" textLength="353.8" clip-path="url(#breeze-start-airflow-line-128)">--use-distributions-from-dist</text><text class="breeze-start-airflow-r1" x="756.4" y="3143.2" textLength="402.6" clip-path="url(#breeze-start-airflow-line-128)">Install&#160;all&#160;found&#160;distributions&#160;(</text><text class="breeze-start-airflow-r4" x="1159" y="3143.2" textLength="256.2" clip-path="url(#breeze-start-airflow-line-128)">--distribution-format</text><text class="breeze-start-airflow-r5" x="1451.8" y="3143.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-128)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3143.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-128)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3167.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-129)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="3167.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-129)">determines&#160;type)&#160;from&#160;&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3167.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-129)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3167.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-129)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3192" textLength="12.2" clip-path="url(#breeze-start-airflow-line-130)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="3192" textLength="683.2" clip-path="url(#breeze-start-airflow-line-130)">breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3192" textLength="12.2" clip-path="url(#breeze-start-airflow-line-130)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3192" textLength="12.2" clip-path="url(#breeze-start-airflow-line-130)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3216.4" textLength="1464" clip-path="url(#breeze-start-airflow-line-131)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="3216.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-131)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3240.8" textLength="24.4" clip-path="url(#breeze-start-airflow-line-132)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="3240.8" textLength="183" clip-path="url(#breeze-start-airflow-line-132)">&#160;Other&#160;options&#160;</text><text class="breeze-start-airflow-r5" x="207.4" y="3240.8" textLength="1232.2" clip-path="url(#breeze-start-airflow-line-132)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="3240.8" textLength="24.4" clip-path="url(#breeze-start-airflow-line-132)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="3240.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-132)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3265.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-133)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3265.2" textLength="256.2" clip-path="url(#breeze-start-airflow-line-133)">--forward-credentials</text><text class="breeze-start-airflow-r6" x="305" y="3265.2" textLength="24.4" clip-path="url(#breeze-start-airflow-line-133)">-f</text><text class="breeze-start-airflow-r1" x="353.8" y="3265.2" textLength="634.4" clip-path="url(#breeze-start-airflow-line-133)">Forward&#160;local&#160;credentials&#160;to&#160;container&#160;when&#160;running.</text><text class="breeze-start-airflow-r5" x="1451.8" y="3265.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-133)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3265.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-133)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3289.6" textLength="1464" clip-path="url(#breeze-start-airflow-line-134)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="3289.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-134)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3314" textLength="24.4" clip-path="url(#breeze-start-airflow-line-135)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="3314" textLength="195.2" clip-path="url(#breeze-start-airflow-line-135)">&#160;Common&#160;options&#160;</text><text class="breeze-start-airflow-r5" x="219.6" y="3314" textLength="1220" clip-path="url(#breeze-start-airflow-line-135)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="3314" textLength="24.4" clip-path="url(#breeze-start-airflow-line-135)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="3314" textLength="12.2" clip-path="url(#breeze-start-airflow-line-135)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3338.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-136)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3338.4" textLength="97.6" clip-path="url(#breeze-start-airflow-line-136)">--answer</text><text class="breeze-start-airflow-r6" x="158.6" y="3338.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-136)">-a</text><text class="breeze-start-airflow-r1" x="207.4" y="3338.4" textLength="317.2" clip-path="url(#breeze-start-airflow-line-136)">Force&#160;answer&#160;to&#160;questions.</text><text class="breeze-start-airflow-r7" x="536.8" y="3338.4" textLength="353.8" clip-path="url(#breeze-start-airflow-line-136)">(y&#160;|&#160;n&#160;|&#160;q&#160;|&#160;yes&#160;|&#160;no&#160;|&#160;quit)</text><text class="breeze-start-airflow-r5" x="1451.8" y="3338.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-136)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3338.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-136)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3362.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-137)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3362.8" textLength="109.8" clip-path="url(#breeze-start-airflow-line-137)">--dry-run</text><text class="breeze-start-airflow-r6" x="158.6" y="3362.8" textLength="24.4" clip-path="url(#breeze-start-airflow-line-137)">-D</text><text class="breeze-start-airflow-r1" x="207.4" y="3362.8" textLength="719.8" clip-path="url(#breeze-start-airflow-line-137)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-start-airflow-r5" x="1451.8" y="3362.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-137)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3362.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-137)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3387.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-138)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3387.2" textLength="109.8" clip-path="url(#breeze-start-airflow-line-138)">--verbose</text><text class="breeze-start-airflow-r6" x="158.6" y="3387.2" textLength="24.4" clip-path="url(#breeze-start-airflow-line-138)">-v</text><text class="breeze-start-airflow-r1" x="207.4" y="3387.2" textLength="585.6" clip-path="url(#breeze-start-airflow-line-138)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-start-airflow-r5" x="1451.8" y="3387.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-138)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3387.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-138)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3411.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-139)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3411.6" textLength="73.2" clip-path="url(#breeze-start-airflow-line-139)">--help</text><text class="breeze-start-airflow-r6" x="158.6" y="3411.6" textLength="24.4" clip-path="url(#breeze-start-airflow-line-139)">-h</text><text class="breeze-start-airflow-r1" x="207.4" y="3411.6" textLength="329.4" clip-path="url(#breeze-start-airflow-line-139)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-start-airflow-r5" x="1451.8" y="3411.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-139)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3411.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-139)">
-</text><text class="breeze-start-airflow-r5" x="0" y="3436" textLength="1464" clip-path="url(#breeze-start-airflow-line-140)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="3436" textLength="12.2" clip-path="url(#breeze-start-airflow-line-140)">
+</text><text class="breeze-start-airflow-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-start-airflow-line-40)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="996" textLength="109.8" clip-path="url(#breeze-start-airflow-line-40)">--backend</text><text class="breeze-start-airflow-r6" x="268.4" y="996" textLength="24.4" clip-path="url(#breeze-start-airflow-line-40)">-b</text><text class="breeze-start-airflow-r1" x="488" y="996" textLength="951.6" clip-path="url(#breeze-start-airflow-line-40)">Database&#160;backend&#160;to&#160;use.&#160;Default&#160;is&#160;&#x27;sqlite&#x27;.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;Breeze&#160;will</text><text class="breeze-start-airflow-r5" x="1451.8" y="996" textLength="12.2" clip-path="url(#breeze-start-airflow-line-40)">│</text><text class="breeze-start-airflow-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-start-airflow-line-40)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-41)">│</text><text class="breeze-start-airflow-r1" x="488" y="1020.4" textLength="951.6" clip-path="url(#breeze-start-airflow-line-41)">start&#160;with&#160;an&#160;invalid&#160;database&#160;configuration&#160;—&#160;no&#160;database&#160;will&#160;be&#160;available,&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-41)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-41)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-42)">│</text><text class="breeze-start-airflow-r1" x="488" y="1044.8" textLength="951.6" clip-path="url(#breeze-start-airflow-line-42)">and&#160;any&#160;attempt&#160;to&#160;run&#160;Airflow&#160;will&#160;fail.&#160;Use&#160;&#x27;none&#x27;&#160;only&#160;for&#160;specific&#160;non-DB&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-42)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-42)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-43)">│</text><text class="breeze-start-airflow-r1" x="488" y="1069.2" textLength="951.6" clip-path="url(#breeze-start-airflow-line-43)">test&#160;cases.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1069.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-43)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-43)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-44)">│</text><text class="breeze-start-airflow-r7" x="488" y="1093.6" textLength="951.6" clip-path="url(#breeze-start-airflow-line-44)">(&gt;sqlite&lt;&#160;|&#160;mysql&#160;|&#160;postgres&#160;|&#160;none)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1093.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-44)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-44)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-start-airflow-line-45)">│</text><text class="breeze-start-airflow-r5" x="488" y="1118" textLength="951.6" clip-path="url(#breeze-start-airflow-line-45)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1118" textLength="12.2" clip-path="url(#breeze-start-airflow-line-45)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-start-airflow-line-45)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-46)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1142.4" textLength="219.6" clip-path="url(#breeze-start-airflow-line-46)">--postgres-version</text><text class="breeze-start-airflow-r6" x="268.4" y="1142.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-46)">-P</text><text class="breeze-start-airflow-r1" x="488" y="1142.4" textLength="305" clip-path="url(#breeze-start-airflow-line-46)">Version&#160;of&#160;Postgres&#160;used.</text><text class="breeze-start-airflow-r7" x="805.2" y="1142.4" textLength="317.2" clip-path="url(#breeze-start-airflow-line-46)">(&gt;13&lt;&#160;|&#160;14&#160;|&#160;15&#160;|&#160;16&#160;|&#160;17)</text><text class="breeze-start-airflow-r5" x="1134.6" y="1142.4" textLength="158.6" clip-path="url(#breeze-start-airflow-line-46)">[default:&#160;13]</text><text class="breeze-start-airflow-r5" x="1451.8" y="1142.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-46)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-46)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-47)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1166.8" textLength="183" clip-path="url(#breeze-start-airflow-line-47)">--mysql-version</text><text class="breeze-start-airflow-r6" x="268.4" y="1166.8" textLength="24.4" clip-path="url(#breeze-start-airflow-line-47)">-M</text><text class="breeze-start-airflow-r1" x="488" y="1166.8" textLength="268.4" clip-path="url(#breeze-start-airflow-line-47)">Version&#160;of&#160;MySQL&#160;used.</text><text class="breeze-start-airflow-r7" x="768.6" y="1166.8" textLength="158.6" clip-path="url(#breeze-start-airflow-line-47)">(&gt;8.0&lt;&#160;|&#160;8.4)</text><text class="breeze-start-airflow-r5" x="939.4" y="1166.8" textLength="170.8" clip-path="url(#breeze-start-airflow-line-47)">[default:&#160;8.0]</text><text class="breeze-start-airflow-r5" x="1451.8" y="1166.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-47)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1166.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-47)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-48)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1191.2" textLength="122" clip-path="url(#breeze-start-airflow-line-48)">--db-reset</text><text class="breeze-start-airflow-r6" x="268.4" y="1191.2" textLength="24.4" clip-path="url(#breeze-start-airflow-line-48)">-d</text><text class="breeze-start-airflow-r1" x="292.8" y="1191.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-48)">/</text><text class="breeze-start-airflow-r4" x="305" y="1191.2" textLength="158.6" clip-path="url(#breeze-start-airflow-line-48)">--no-db-reset</text><text class="breeze-start-airflow-r1" x="488" y="1191.2" textLength="451.4" clip-path="url(#breeze-start-airflow-line-48)">Reset&#160;DB&#160;when&#160;entering&#160;the&#160;container.</text><text class="breeze-start-airflow-r5" x="951.6" y="1191.2" textLength="268.4" clip-path="url(#breeze-start-airflow-line-48)">[default:&#160;no-db-reset]</text><text class="breeze-start-airflow-r5" x="1451.8" y="1191.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-48)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-48)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1215.6" textLength="1464" clip-path="url(#breeze-start-airflow-line-49)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-49)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1240" textLength="24.4" clip-path="url(#breeze-start-airflow-line-50)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="1240" textLength="231.8" clip-path="url(#breeze-start-airflow-line-50)">&#160;Choosing&#160;executor&#160;</text><text class="breeze-start-airflow-r5" x="256.2" y="1240" textLength="1183.4" clip-path="url(#breeze-start-airflow-line-50)">─────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="1240" textLength="24.4" clip-path="url(#breeze-start-airflow-line-50)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-start-airflow-line-50)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-51)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1264.4" textLength="122" clip-path="url(#breeze-start-airflow-line-51)">--executor</text><text class="breeze-start-airflow-r1" x="256.2" y="1264.4" textLength="1183.4" clip-path="url(#breeze-start-airflow-line-51)">Specify&#160;the&#160;executor&#160;to&#160;use&#160;with&#160;start-airflow&#160;(defaults&#160;to&#160;LocalExecutor&#160;or&#160;CeleryExecutor&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1264.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-51)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-51)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-52)">│</text><text class="breeze-start-airflow-r1" x="256.2" y="1288.8" textLength="1183.4" clip-path="url(#breeze-start-airflow-line-52)">depending&#160;on&#160;the&#160;integration&#160;used).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1288.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-52)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-52)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-53)">│</text><text class="breeze-start-airflow-r7" x="256.2" y="1313.2" textLength="1183.4" clip-path="url(#breeze-start-airflow-line-53)">(LocalExecutor|CeleryExecutor|EdgeExecutor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1313.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-53)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1313.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-53)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-54)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1337.6" textLength="183" clip-path="url(#breeze-start-airflow-line-54)">--celery-broker</text><text class="breeze-start-airflow-r1" x="256.2" y="1337.6" textLength="402.6" clip-path="url(#breeze-start-airflow-line-54)">Specify&#160;the&#160;celery&#160;message&#160;broker</text><text class="breeze-start-airflow-r7" x="671" y="1337.6" textLength="195.2" clip-path="url(#breeze-start-airflow-line-54)">(rabbitmq|redis)</text><text class="breeze-start-airflow-r5" x="878.4" y="1337.6" textLength="195.2" clip-path="url(#breeze-start-airflow-line-54)">[default:&#160;redis]</text><text class="breeze-start-airflow-r5" x="1451.8" y="1337.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-54)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-54)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-start-airflow-line-55)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1362" textLength="183" clip-path="url(#breeze-start-airflow-line-55)">--celery-flower</text><text class="breeze-start-airflow-r1" x="256.2" y="1362" textLength="231.8" clip-path="url(#breeze-start-airflow-line-55)">Start&#160;celery&#160;flower</text><text class="breeze-start-airflow-r5" x="1451.8" y="1362" textLength="12.2" clip-path="url(#breeze-start-airflow-line-55)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#breeze-start-airflow-line-55)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1386.4" textLength="1464" clip-path="url(#breeze-start-airflow-line-56)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-56)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1410.8" textLength="24.4" clip-path="url(#breeze-start-airflow-line-57)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="1410.8" textLength="170.8" clip-path="url(#breeze-start-airflow-line-57)">&#160;Auth&#160;manager&#160;</text><text class="breeze-start-airflow-r5" x="195.2" y="1410.8" textLength="1244.4" clip-path="url(#breeze-start-airflow-line-57)">──────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="1410.8" textLength="24.4" clip-path="url(#breeze-start-airflow-line-57)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-57)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-58)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1435.2" textLength="170.8" clip-path="url(#breeze-start-airflow-line-58)">--auth-manager</text><text class="breeze-start-airflow-r1" x="244" y="1435.2" textLength="610" clip-path="url(#breeze-start-airflow-line-58)">Specify&#160;the&#160;auth&#160;manager&#160;to&#160;use&#160;with&#160;start-airflow</text><text class="breeze-start-airflow-r7" x="866.2" y="1435.2" textLength="414.8" clip-path="url(#breeze-start-airflow-line-58)">(SimpleAuthManager|FabAuthManager)</text><text class="breeze-start-airflow-r5" x="1451.8" y="1435.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-58)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-58)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-59)">│</text><text class="breeze-start-airflow-r5" x="244" y="1459.6" textLength="610" clip-path="url(#breeze-start-airflow-line-59)">[default:&#160;SimpleAuthManager]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1459.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-59)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-59)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1484" textLength="1464" clip-path="url(#breeze-start-airflow-line-60)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-start-airflow-line-60)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1508.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-61)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="1508.4" textLength="329.4" clip-path="url(#breeze-start-airflow-line-61)">&#160;Asset&#160;compilation&#160;options&#160;</text><text class="breeze-start-airflow-r5" x="353.8" y="1508.4" textLength="1085.8" clip-path="url(#breeze-start-airflow-line-61)">─────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="1508.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-61)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-61)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-62)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1532.8" textLength="305" clip-path="url(#breeze-start-airflow-line-62)">--skip-assets-compilation</text><text class="breeze-start-airflow-r1" x="378.2" y="1532.8" textLength="1061.4" clip-path="url(#breeze-start-airflow-line-62)">Skips&#160;compilation&#160;of&#160;assets&#160;when&#160;starting&#160;airflow&#160;even&#160;if&#160;the&#160;content&#160;of&#160;www&#160;changed&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1532.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-62)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-62)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-63)">│</text><text class="breeze-start-airflow-r1" x="378.2" y="1557.2" textLength="305" clip-path="url(#breeze-start-airflow-line-63)">(mutually&#160;exclusive&#160;with&#160;</text><text class="breeze-start-airflow-r4" x="683.2" y="1557.2" textLength="122" clip-path="url(#breeze-start-airflow-line-63)">--dev-mode</text><text class="breeze-start-airflow-r1" x="805.2" y="1557.2" textLength="634.4" clip-path="url(#breeze-start-airflow-line-63)">).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1557.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-63)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-63)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-64)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1581.6" textLength="122" clip-path="url(#breeze-start-airflow-line-64)">--dev-mode</text><text class="breeze-start-airflow-r1" x="378.2" y="1581.6" textLength="1061.4" clip-path="url(#breeze-start-airflow-line-64)">Starts&#160;api-server&#160;in&#160;dev&#160;mode&#160;(assets&#160;are&#160;always&#160;recompiled&#160;in&#160;this&#160;case&#160;when&#160;starting)</text><text class="breeze-start-airflow-r5" x="1451.8" y="1581.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-64)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-64)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-start-airflow-line-65)">│</text><text class="breeze-start-airflow-r1" x="378.2" y="1606" textLength="305" clip-path="url(#breeze-start-airflow-line-65)">(mutually&#160;exclusive&#160;with&#160;</text><text class="breeze-start-airflow-r4" x="683.2" y="1606" textLength="305" clip-path="url(#breeze-start-airflow-line-65)">--skip-assets-compilation</text><text class="breeze-start-airflow-r1" x="988.2" y="1606" textLength="451.4" clip-path="url(#breeze-start-airflow-line-65)">).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1606" textLength="12.2" clip-path="url(#breeze-start-airflow-line-65)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-start-airflow-line-65)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1630.4" textLength="1464" clip-path="url(#breeze-start-airflow-line-66)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-66)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1654.8" textLength="24.4" clip-path="url(#breeze-start-airflow-line-67)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="1654.8" textLength="488" clip-path="url(#breeze-start-airflow-line-67)">&#160;Build&#160;CI&#160;image&#160;(before&#160;entering&#160;shell)&#160;</text><text class="breeze-start-airflow-r5" x="512.4" y="1654.8" textLength="927.2" clip-path="url(#breeze-start-airflow-line-67)">────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="1654.8" textLength="24.4" clip-path="url(#breeze-start-airflow-line-67)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-67)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-68)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1679.2" textLength="158.6" clip-path="url(#breeze-start-airflow-line-68)">--force-build</text><text class="breeze-start-airflow-r1" x="341.6" y="1679.2" textLength="707.6" clip-path="url(#breeze-start-airflow-line-68)">Force&#160;image&#160;build&#160;no&#160;matter&#160;if&#160;it&#160;is&#160;determined&#160;as&#160;needed.</text><text class="breeze-start-airflow-r5" x="1451.8" y="1679.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-68)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-68)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-69)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1703.6" textLength="231.8" clip-path="url(#breeze-start-airflow-line-69)">--github-repository</text><text class="breeze-start-airflow-r6" x="292.8" y="1703.6" textLength="24.4" clip-path="url(#breeze-start-airflow-line-69)">-g</text><text class="breeze-start-airflow-r1" x="341.6" y="1703.6" textLength="585.6" clip-path="url(#breeze-start-airflow-line-69)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-start-airflow-r7" x="939.4" y="1703.6" textLength="73.2" clip-path="url(#breeze-start-airflow-line-69)">(TEXT)</text><text class="breeze-start-airflow-r5" x="1024.8" y="1703.6" textLength="305" clip-path="url(#breeze-start-airflow-line-69)">[default:&#160;apache/airflow]</text><text class="breeze-start-airflow-r5" x="1451.8" y="1703.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-69)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-69)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-start-airflow-line-70)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1728" textLength="109.8" clip-path="url(#breeze-start-airflow-line-70)">--builder</text><text class="breeze-start-airflow-r1" x="341.6" y="1728" textLength="756.4" clip-path="url(#breeze-start-airflow-line-70)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build`&#160;commands.</text><text class="breeze-start-airflow-r7" x="1110.2" y="1728" textLength="73.2" clip-path="url(#breeze-start-airflow-line-70)">(TEXT)</text><text class="breeze-start-airflow-r5" x="1451.8" y="1728" textLength="12.2" clip-path="url(#breeze-start-airflow-line-70)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-start-airflow-line-70)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-71)">│</text><text class="breeze-start-airflow-r5" x="341.6" y="1752.4" textLength="756.4" clip-path="url(#breeze-start-airflow-line-71)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1752.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-71)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1752.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-71)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-72)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1776.8" textLength="97.6" clip-path="url(#breeze-start-airflow-line-72)">--use-uv</text><text class="breeze-start-airflow-r1" x="122" y="1776.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-72)">/</text><text class="breeze-start-airflow-r4" x="134.2" y="1776.8" textLength="134.2" clip-path="url(#breeze-start-airflow-line-72)">--no-use-uv</text><text class="breeze-start-airflow-r1" x="341.6" y="1776.8" textLength="719.8" clip-path="url(#breeze-start-airflow-line-72)">Use&#160;uv&#160;instead&#160;of&#160;pip&#160;as&#160;packaging&#160;tool&#160;to&#160;build&#160;the&#160;image.</text><text class="breeze-start-airflow-r5" x="1073.6" y="1776.8" textLength="207.4" clip-path="url(#breeze-start-airflow-line-72)">[default:&#160;use-uv]</text><text class="breeze-start-airflow-r5" x="1451.8" y="1776.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-72)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1776.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-72)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-73)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1801.2" textLength="207.4" clip-path="url(#breeze-start-airflow-line-73)">--uv-http-timeout</text><text class="breeze-start-airflow-r1" x="341.6" y="1801.2" textLength="829.6" clip-path="url(#breeze-start-airflow-line-73)">Timeout&#160;for&#160;requests&#160;that&#160;UV&#160;makes&#160;(only&#160;used&#160;in&#160;case&#160;of&#160;UV&#160;builds).</text><text class="breeze-start-airflow-r7" x="1183.4" y="1801.2" textLength="183" clip-path="url(#breeze-start-airflow-line-73)">(INTEGER&#160;RANGE)</text><text class="breeze-start-airflow-r5" x="1451.8" y="1801.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-73)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-73)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1825.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-74)">│</text><text class="breeze-start-airflow-r5" x="341.6" y="1825.6" textLength="829.6" clip-path="url(#breeze-start-airflow-line-74)">[default:&#160;300;&#160;x&gt;=1]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1825.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-74)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-74)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1850" textLength="1464" clip-path="url(#breeze-start-airflow-line-75)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-start-airflow-line-75)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1874.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-76)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="1874.4" textLength="414.8" clip-path="url(#breeze-start-airflow-line-76)">&#160;Mounting&#160;the&#160;sources&#160;and&#160;volumes&#160;</text><text class="breeze-start-airflow-r5" x="439.2" y="1874.4" textLength="1000.4" clip-path="url(#breeze-start-airflow-line-76)">──────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="1874.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-76)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-76)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1898.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-77)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="1898.8" textLength="183" clip-path="url(#breeze-start-airflow-line-77)">--mount-sources</text><text class="breeze-start-airflow-r1" x="256.2" y="1898.8" textLength="1159" clip-path="url(#breeze-start-airflow-line-77)">Choose&#160;scope&#160;of&#160;local&#160;sources&#160;that&#160;should&#160;be&#160;mounted,&#160;skipped,&#160;or&#160;removed&#160;(default&#160;=&#160;selected).</text><text class="breeze-start-airflow-r5" x="1451.8" y="1898.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-77)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-77)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1923.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-78)">│</text><text class="breeze-start-airflow-r7" x="256.2" y="1923.2" textLength="1159" clip-path="url(#breeze-start-airflow-line-78)">(selected&#160;|&#160;all&#160;|&#160;skip&#160;|&#160;remove&#160;|&#160;tests&#160;|&#160;providers-and-tests)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1923.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-78)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-78)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-79)">│</text><text class="breeze-start-airflow-r5" x="256.2" y="1947.6" textLength="1159" clip-path="url(#breeze-start-airflow-line-79)">[default:&#160;selected]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="1947.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-79)">│</text><text class="breeze-start-airflow-r1" x="1464" y="1947.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-79)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1972" textLength="1464" clip-path="url(#breeze-start-airflow-line-80)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-start-airflow-line-80)">
+</text><text class="breeze-start-airflow-r5" x="0" y="1996.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-81)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="1996.4" textLength="512.4" clip-path="url(#breeze-start-airflow-line-81)">&#160;Installing&#160;packages&#160;after&#160;entering&#160;shell&#160;</text><text class="breeze-start-airflow-r5" x="536.8" y="1996.4" textLength="902.8" clip-path="url(#breeze-start-airflow-line-81)">──────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="1996.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-81)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-81)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-82)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2020.8" textLength="366" clip-path="url(#breeze-start-airflow-line-82)">--airflow-constraints-location</text><text class="breeze-start-airflow-r1" x="756.4" y="2020.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-82)">Location&#160;of&#160;airflow&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2020.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-82)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-82)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-83)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2045.2" textLength="683.2" clip-path="url(#breeze-start-airflow-line-83)">local&#160;context&#160;file).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2045.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-83)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-83)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-84)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2069.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-84)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2069.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-84)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-84)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-start-airflow-line-85)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2094" textLength="317.2" clip-path="url(#breeze-start-airflow-line-85)">--airflow-constraints-mode</text><text class="breeze-start-airflow-r1" x="756.4" y="2094" textLength="683.2" clip-path="url(#breeze-start-airflow-line-85)">Mode&#160;of&#160;constraints&#160;for&#160;Airflow&#160;for&#160;CI&#160;image&#160;building.&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2094" textLength="12.2" clip-path="url(#breeze-start-airflow-line-85)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-start-airflow-line-85)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-86)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2118.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-86)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2118.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-86)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-86)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-87)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2142.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-87)">constraints-no-providers)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2142.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-87)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-87)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-88)">│</text><text class="breeze-start-airflow-r5" x="756.4" y="2167.2" textLength="683.2" clip-path="url(#breeze-start-airflow-line-88)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2167.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-88)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-88)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2191.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-89)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2191.6" textLength="378.2" clip-path="url(#breeze-start-airflow-line-89)">--airflow-constraints-reference</text><text class="breeze-start-airflow-r1" x="756.4" y="2191.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-89)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;airflow&#160;installation&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2191.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-89)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2191.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-89)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2216" textLength="12.2" clip-path="url(#breeze-start-airflow-line-90)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2216" textLength="683.2" clip-path="url(#breeze-start-airflow-line-90)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2216" textLength="12.2" clip-path="url(#breeze-start-airflow-line-90)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2216" textLength="12.2" clip-path="url(#breeze-start-airflow-line-90)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2240.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-91)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2240.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-91)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2240.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-91)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2240.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-91)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2264.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-92)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2264.8" textLength="195.2" clip-path="url(#breeze-start-airflow-line-92)">--airflow-extras</text><text class="breeze-start-airflow-r1" x="756.4" y="2264.8" textLength="378.2" clip-path="url(#breeze-start-airflow-line-92)">Airflow&#160;extras&#160;to&#160;install&#160;when&#160;</text><text class="breeze-start-airflow-r4" x="1134.6" y="2264.8" textLength="256.2" clip-path="url(#breeze-start-airflow-line-92)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="1390.8" y="2264.8" textLength="48.8" clip-path="url(#breeze-start-airflow-line-92)">&#160;is&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2264.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-92)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2264.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-92)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2289.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-93)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2289.2" textLength="683.2" clip-path="url(#breeze-start-airflow-line-93)">used&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2289.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-93)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2289.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-93)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2313.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-94)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2313.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-94)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2313.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-94)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2313.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-94)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2338" textLength="12.2" clip-path="url(#breeze-start-airflow-line-95)">│</text><text class="breeze-start-airflow-r5" x="756.4" y="2338" textLength="683.2" clip-path="url(#breeze-start-airflow-line-95)">[default:&#160;&quot;&quot;]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2338" textLength="12.2" clip-path="url(#breeze-start-airflow-line-95)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2338" textLength="12.2" clip-path="url(#breeze-start-airflow-line-95)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2362.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-96)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2362.4" textLength="341.6" clip-path="url(#breeze-start-airflow-line-96)">--clean-airflow-installation</text><text class="breeze-start-airflow-r1" x="756.4" y="2362.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-96)">Clean&#160;the&#160;airflow&#160;installation&#160;before&#160;installing&#160;version</text><text class="breeze-start-airflow-r5" x="1451.8" y="2362.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-96)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2362.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-96)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2386.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-97)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2386.8" textLength="158.6" clip-path="url(#breeze-start-airflow-line-97)">specified&#160;by&#160;</text><text class="breeze-start-airflow-r4" x="915" y="2386.8" textLength="256.2" clip-path="url(#breeze-start-airflow-line-97)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="1171.2" y="2386.8" textLength="268.4" clip-path="url(#breeze-start-airflow-line-97)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2386.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-97)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2386.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-97)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2411.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-98)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2411.2" textLength="414.8" clip-path="url(#breeze-start-airflow-line-98)">--install-airflow-with-constraints</text><text class="breeze-start-airflow-r1" x="439.2" y="2411.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-98)">/</text><text class="breeze-start-airflow-r4" x="451.4" y="2411.2" textLength="256.2" clip-path="url(#breeze-start-airflow-line-98)">--no-install-airflow-</text><text class="breeze-start-airflow-r1" x="756.4" y="2411.2" textLength="683.2" clip-path="url(#breeze-start-airflow-line-98)">Install&#160;airflow&#160;in&#160;a&#160;separate&#160;step,&#160;with&#160;constraints&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2411.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-98)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2411.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-98)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2435.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-99)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2435.6" textLength="195.2" clip-path="url(#breeze-start-airflow-line-99)">with-constraints</text><text class="breeze-start-airflow-r1" x="756.4" y="2435.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-99)">determined&#160;from&#160;package&#160;or&#160;airflow&#160;version.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2435.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-99)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2435.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-99)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2460" textLength="12.2" clip-path="url(#breeze-start-airflow-line-100)">│</text><text class="breeze-start-airflow-r5" x="756.4" y="2460" textLength="683.2" clip-path="url(#breeze-start-airflow-line-100)">[default:&#160;install-airflow-with-constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2460" textLength="12.2" clip-path="url(#breeze-start-airflow-line-100)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2460" textLength="12.2" clip-path="url(#breeze-start-airflow-line-100)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2484.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-101)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2484.4" textLength="341.6" clip-path="url(#breeze-start-airflow-line-101)">--install-selected-providers</text><text class="breeze-start-airflow-r1" x="756.4" y="2484.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-101)">Comma-separated&#160;list&#160;of&#160;providers&#160;selected&#160;to&#160;be&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2484.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-101)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2484.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-101)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2508.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-102)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2508.8" textLength="231.8" clip-path="url(#breeze-start-airflow-line-102)">installed&#160;(implies&#160;</text><text class="breeze-start-airflow-r4" x="988.2" y="2508.8" textLength="353.8" clip-path="url(#breeze-start-airflow-line-102)">--use-distributions-from-dist</text><text class="breeze-start-airflow-r1" x="1342" y="2508.8" textLength="97.6" clip-path="url(#breeze-start-airflow-line-102)">).&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2508.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-102)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2508.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-102)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2533.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-103)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2533.2" textLength="683.2" clip-path="url(#breeze-start-airflow-line-103)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2533.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-103)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2533.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-103)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2557.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-104)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2557.6" textLength="256.2" clip-path="url(#breeze-start-airflow-line-104)">--distribution-format</text><text class="breeze-start-airflow-r1" x="756.4" y="2557.6" textLength="658.8" clip-path="url(#breeze-start-airflow-line-104)">Format&#160;of&#160;packages&#160;that&#160;should&#160;be&#160;installed&#160;from&#160;dist.</text><text class="breeze-start-airflow-r5" x="1451.8" y="2557.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-104)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2557.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-104)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2582" textLength="12.2" clip-path="url(#breeze-start-airflow-line-105)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2582" textLength="658.8" clip-path="url(#breeze-start-airflow-line-105)">(wheel&#160;|&#160;sdist)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2582" textLength="12.2" clip-path="url(#breeze-start-airflow-line-105)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2582" textLength="12.2" clip-path="url(#breeze-start-airflow-line-105)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2606.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-106)">│</text><text class="breeze-start-airflow-r5" x="756.4" y="2606.4" textLength="658.8" clip-path="url(#breeze-start-airflow-line-106)">[default:&#160;wheel]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2606.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-106)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2606.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-106)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2630.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-107)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2630.8" textLength="390.4" clip-path="url(#breeze-start-airflow-line-107)">--providers-constraints-location</text><text class="breeze-start-airflow-r1" x="756.4" y="2630.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-107)">Location&#160;of&#160;providers&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2630.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-107)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2630.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-107)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2655.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-108)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2655.2" textLength="683.2" clip-path="url(#breeze-start-airflow-line-108)">local&#160;context&#160;file).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2655.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-108)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2655.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-108)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2679.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-109)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2679.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-109)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2679.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-109)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2679.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-109)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2704" textLength="12.2" clip-path="url(#breeze-start-airflow-line-110)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2704" textLength="341.6" clip-path="url(#breeze-start-airflow-line-110)">--providers-constraints-mode</text><text class="breeze-start-airflow-r1" x="756.4" y="2704" textLength="683.2" clip-path="url(#breeze-start-airflow-line-110)">Mode&#160;of&#160;constraints&#160;for&#160;Providers&#160;for&#160;CI&#160;image&#160;building.</text><text class="breeze-start-airflow-r5" x="1451.8" y="2704" textLength="12.2" clip-path="url(#breeze-start-airflow-line-110)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2704" textLength="12.2" clip-path="url(#breeze-start-airflow-line-110)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2728.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-111)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2728.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-111)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2728.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-111)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2728.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-111)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2752.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-112)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2752.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-112)">constraints-no-providers)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2752.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-112)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2752.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-112)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2777.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-113)">│</text><text class="breeze-start-airflow-r5" x="756.4" y="2777.2" textLength="683.2" clip-path="url(#breeze-start-airflow-line-113)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2777.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-113)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2777.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-113)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2801.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-114)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2801.6" textLength="402.6" clip-path="url(#breeze-start-airflow-line-114)">--providers-constraints-reference</text><text class="breeze-start-airflow-r1" x="756.4" y="2801.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-114)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;providers&#160;installation&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2801.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-114)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2801.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-114)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2826" textLength="12.2" clip-path="url(#breeze-start-airflow-line-115)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2826" textLength="683.2" clip-path="url(#breeze-start-airflow-line-115)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;Can&#160;be&#160;&#x27;default&#x27;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2826" textLength="12.2" clip-path="url(#breeze-start-airflow-line-115)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2826" textLength="12.2" clip-path="url(#breeze-start-airflow-line-115)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2850.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-116)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2850.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-116)">in&#160;which&#160;case&#160;the&#160;default&#160;constraints-reference&#160;is&#160;used.</text><text class="breeze-start-airflow-r5" x="1451.8" y="2850.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-116)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2850.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-116)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2874.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-117)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="2874.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-117)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2874.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-117)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2874.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-117)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2899.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-118)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2899.2" textLength="341.6" clip-path="url(#breeze-start-airflow-line-118)">--providers-skip-constraints</text><text class="breeze-start-airflow-r1" x="756.4" y="2899.2" textLength="597.8" clip-path="url(#breeze-start-airflow-line-118)">Do&#160;not&#160;use&#160;constraints&#160;when&#160;installing&#160;providers.</text><text class="breeze-start-airflow-r5" x="1451.8" y="2899.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-118)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2899.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-118)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2923.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-119)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="2923.6" textLength="256.2" clip-path="url(#breeze-start-airflow-line-119)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="756.4" y="2923.6" textLength="683.2" clip-path="url(#breeze-start-airflow-line-119)">Use&#160;(reinstall&#160;at&#160;entry)&#160;Airflow&#160;version&#160;from&#160;PyPI.&#160;It&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2923.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-119)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2923.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-119)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2948" textLength="12.2" clip-path="url(#breeze-start-airflow-line-120)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2948" textLength="683.2" clip-path="url(#breeze-start-airflow-line-120)">can&#160;also&#160;be&#160;version&#160;(to&#160;install&#160;from&#160;PyPI),&#160;`none`,&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2948" textLength="12.2" clip-path="url(#breeze-start-airflow-line-120)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2948" textLength="12.2" clip-path="url(#breeze-start-airflow-line-120)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2972.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-121)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2972.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-121)">`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder,&#160;or&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2972.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-121)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2972.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-121)">
+</text><text class="breeze-start-airflow-r5" x="0" y="2996.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-122)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="2996.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-122)">VCS&#160;URL&#160;to&#160;install&#160;from&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="2996.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-122)">│</text><text class="breeze-start-airflow-r1" x="1464" y="2996.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-122)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3021.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-123)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="3021.2" textLength="683.2" clip-path="url(#breeze-start-airflow-line-123)">(https://pip.pypa.io/en/stable/topics/vcs-support/).&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3021.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-123)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3021.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-123)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3045.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-124)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="3045.6" textLength="97.6" clip-path="url(#breeze-start-airflow-line-124)">Implies&#160;</text><text class="breeze-start-airflow-r4" x="854" y="3045.6" textLength="183" clip-path="url(#breeze-start-airflow-line-124)">--mount-sources</text><text class="breeze-start-airflow-r1" x="1037" y="3045.6" textLength="402.6" clip-path="url(#breeze-start-airflow-line-124)">&#160;`remove`.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3045.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-124)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3045.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-124)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3070" textLength="12.2" clip-path="url(#breeze-start-airflow-line-125)">│</text><text class="breeze-start-airflow-r7" x="756.4" y="3070" textLength="683.2" clip-path="url(#breeze-start-airflow-line-125)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3070" textLength="12.2" clip-path="url(#breeze-start-airflow-line-125)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3070" textLength="12.2" clip-path="url(#breeze-start-airflow-line-125)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3094.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-126)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3094.4" textLength="244" clip-path="url(#breeze-start-airflow-line-126)">--allow-pre-releases</text><text class="breeze-start-airflow-r1" x="756.4" y="3094.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-126)">Allow&#160;pre-releases&#160;of&#160;Airflow,&#160;task-sdk&#160;and&#160;providers&#160;to</text><text class="breeze-start-airflow-r5" x="1451.8" y="3094.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-126)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3094.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-126)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3118.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-127)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="3118.8" textLength="683.2" clip-path="url(#breeze-start-airflow-line-127)">be&#160;installed.&#160;Set&#160;to&#160;true&#160;automatically&#160;for&#160;pre-release&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3118.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-127)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3118.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-127)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3143.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-128)">│</text><text class="breeze-start-airflow-r4" x="756.4" y="3143.2" textLength="256.2" clip-path="url(#breeze-start-airflow-line-128)">--use-airflow-version</text><text class="breeze-start-airflow-r1" x="1012.6" y="3143.2" textLength="427" clip-path="url(#breeze-start-airflow-line-128)">)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3143.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-128)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3143.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-128)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3167.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-129)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3167.6" textLength="353.8" clip-path="url(#breeze-start-airflow-line-129)">--use-distributions-from-dist</text><text class="breeze-start-airflow-r1" x="756.4" y="3167.6" textLength="402.6" clip-path="url(#breeze-start-airflow-line-129)">Install&#160;all&#160;found&#160;distributions&#160;(</text><text class="breeze-start-airflow-r4" x="1159" y="3167.6" textLength="256.2" clip-path="url(#breeze-start-airflow-line-129)">--distribution-format</text><text class="breeze-start-airflow-r5" x="1451.8" y="3167.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-129)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3167.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-129)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3192" textLength="12.2" clip-path="url(#breeze-start-airflow-line-130)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="3192" textLength="683.2" clip-path="url(#breeze-start-airflow-line-130)">determines&#160;type)&#160;from&#160;&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3192" textLength="12.2" clip-path="url(#breeze-start-airflow-line-130)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3192" textLength="12.2" clip-path="url(#breeze-start-airflow-line-130)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3216.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-131)">│</text><text class="breeze-start-airflow-r1" x="756.4" y="3216.4" textLength="683.2" clip-path="url(#breeze-start-airflow-line-131)">breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="3216.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-131)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3216.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-131)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3240.8" textLength="1464" clip-path="url(#breeze-start-airflow-line-132)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="3240.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-132)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3265.2" textLength="24.4" clip-path="url(#breeze-start-airflow-line-133)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="3265.2" textLength="183" clip-path="url(#breeze-start-airflow-line-133)">&#160;Other&#160;options&#160;</text><text class="breeze-start-airflow-r5" x="207.4" y="3265.2" textLength="1232.2" clip-path="url(#breeze-start-airflow-line-133)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="3265.2" textLength="24.4" clip-path="url(#breeze-start-airflow-line-133)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="3265.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-133)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3289.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-134)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3289.6" textLength="256.2" clip-path="url(#breeze-start-airflow-line-134)">--forward-credentials</text><text class="breeze-start-airflow-r6" x="305" y="3289.6" textLength="24.4" clip-path="url(#breeze-start-airflow-line-134)">-f</text><text class="breeze-start-airflow-r1" x="353.8" y="3289.6" textLength="634.4" clip-path="url(#breeze-start-airflow-line-134)">Forward&#160;local&#160;credentials&#160;to&#160;container&#160;when&#160;running.</text><text class="breeze-start-airflow-r5" x="1451.8" y="3289.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-134)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3289.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-134)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3314" textLength="1464" clip-path="url(#breeze-start-airflow-line-135)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="3314" textLength="12.2" clip-path="url(#breeze-start-airflow-line-135)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3338.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-136)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="3338.4" textLength="195.2" clip-path="url(#breeze-start-airflow-line-136)">&#160;Common&#160;options&#160;</text><text class="breeze-start-airflow-r5" x="219.6" y="3338.4" textLength="1220" clip-path="url(#breeze-start-airflow-line-136)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-start-airflow-r5" x="1439.6" y="3338.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-136)">─╮</text><text class="breeze-start-airflow-r1" x="1464" y="3338.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-136)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3362.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-137)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3362.8" textLength="97.6" clip-path="url(#breeze-start-airflow-line-137)">--answer</text><text class="breeze-start-airflow-r6" x="158.6" y="3362.8" textLength="24.4" clip-path="url(#breeze-start-airflow-line-137)">-a</text><text class="breeze-start-airflow-r1" x="207.4" y="3362.8" textLength="317.2" clip-path="url(#breeze-start-airflow-line-137)">Force&#160;answer&#160;to&#160;questions.</text><text class="breeze-start-airflow-r7" x="536.8" y="3362.8" textLength="353.8" clip-path="url(#breeze-start-airflow-line-137)">(y&#160;|&#160;n&#160;|&#160;q&#160;|&#160;yes&#160;|&#160;no&#160;|&#160;quit)</text><text class="breeze-start-airflow-r5" x="1451.8" y="3362.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-137)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3362.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-137)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3387.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-138)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3387.2" textLength="109.8" clip-path="url(#breeze-start-airflow-line-138)">--dry-run</text><text class="breeze-start-airflow-r6" x="158.6" y="3387.2" textLength="24.4" clip-path="url(#breeze-start-airflow-line-138)">-D</text><text class="breeze-start-airflow-r1" x="207.4" y="3387.2" textLength="719.8" clip-path="url(#breeze-start-airflow-line-138)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-start-airflow-r5" x="1451.8" y="3387.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-138)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3387.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-138)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3411.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-139)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3411.6" textLength="109.8" clip-path="url(#breeze-start-airflow-line-139)">--verbose</text><text class="breeze-start-airflow-r6" x="158.6" y="3411.6" textLength="24.4" clip-path="url(#breeze-start-airflow-line-139)">-v</text><text class="breeze-start-airflow-r1" x="207.4" y="3411.6" textLength="585.6" clip-path="url(#breeze-start-airflow-line-139)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-start-airflow-r5" x="1451.8" y="3411.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-139)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3411.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-139)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3436" textLength="12.2" clip-path="url(#breeze-start-airflow-line-140)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="3436" textLength="73.2" clip-path="url(#breeze-start-airflow-line-140)">--help</text><text class="breeze-start-airflow-r6" x="158.6" y="3436" textLength="24.4" clip-path="url(#breeze-start-airflow-line-140)">-h</text><text class="breeze-start-airflow-r1" x="207.4" y="3436" textLength="329.4" clip-path="url(#breeze-start-airflow-line-140)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-start-airflow-r5" x="1451.8" y="3436" textLength="12.2" clip-path="url(#breeze-start-airflow-line-140)">│</text><text class="breeze-start-airflow-r1" x="1464" y="3436" textLength="12.2" clip-path="url(#breeze-start-airflow-line-140)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3460.4" textLength="1464" clip-path="url(#breeze-start-airflow-line-141)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="3460.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-141)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_start-airflow.txt b/dev/breeze/doc/images/output_start-airflow.txt
index a210aa26ef03c..34b052e06659a 100644
--- a/dev/breeze/doc/images/output_start-airflow.txt
+++ b/dev/breeze/doc/images/output_start-airflow.txt
@@ -1 +1 @@
-9610c4e7624dd08101801d61232762f6
+0ef2581aec890d0fa4cdd00b74c53049
diff --git a/dev/breeze/doc/images/output_testing_core-integration-tests.svg b/dev/breeze/doc/images/output_testing_core-integration-tests.svg
index 7be29c9cae0d4..7c97f186f87e2 100644
--- a/dev/breeze/doc/images/output_testing_core-integration-tests.svg
+++ b/dev/breeze/doc/images/output_testing_core-integration-tests.svg
@@ -216,10 +216,10 @@
 </text><text class="breeze-testing-core-integration-tests-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-12)">│</text><text class="breeze-testing-core-integration-tests-r4" x="24.4" y="312.8" textLength="122" clip-path="url(#breeze-testing-core-integration-tests-line-12)">--db-reset</text><text class="breeze-testing-core-integration-tests-r7" x="256.2" y="312.8" textLength="24.4" clip-path="url(#breeze-testing-core-integration-tests-line-12)">-d</text><text class="breeze-testing-core-integration-tests-r1" x="280.6" y="312.8" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-12)">/</text><text class="breeze-testing-core-integration-tests-r4" x="292.8" y="312.8" textLength="158.6" clip-path="url(#breeze-testing-core-integration-tests-line-12)">--no-db-reset</text><text class="breeze-testing-core-integration-tests-r1" x="475.8" y="312.8" textLength="451.4" clip-path="url(#breeze-testing-core-integration-tests-line-12)">Reset&#160;DB&#160;when&#160;entering&#160;the&#160;container.</text><text class="breeze-testing-core-integration-tests-r5" x="939.4" y="312.8" textLength="268.4" clip-path="url(#breeze-testing-core-integration-tests-line-12)">[default:&#160;no-db-reset]</text><text class="breeze-testing-core-integration-tests-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-12)">│</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-12)">
 </text><text class="breeze-testing-core-integration-tests-r5" x="0" y="337.2" textLength="1464" clip-path="url(#breeze-testing-core-integration-tests-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-13)">
 </text><text class="breeze-testing-core-integration-tests-r5" x="0" y="361.6" textLength="24.4" clip-path="url(#breeze-testing-core-integration-tests-line-14)">╭─</text><text class="breeze-testing-core-integration-tests-r5" x="24.4" y="361.6" textLength="219.6" clip-path="url(#breeze-testing-core-integration-tests-line-14)">&#160;Test&#160;environment&#160;</text><text class="breeze-testing-core-integration-tests-r5" x="244" y="361.6" textLength="1195.6" clip-path="url(#breeze-testing-core-integration-tests-line-14)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-testing-core-integration-tests-r5" x="1439.6" y="361.6" textLength="24.4" clip-path="url(#breeze-testing-core-integration-tests-line-14)">─╮</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-14)">
-</text><text class="breeze-testing-core-integration-tests-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-15)">│</text><text class="breeze-testing-core-integration-tests-r4" x="24.4" y="386" textLength="109.8" clip-path="url(#breeze-testing-core-integration-tests-line-15)">--backend</text><text class="breeze-testing-core-integration-tests-r7" x="561.2" y="386" textLength="24.4" clip-path="url(#breeze-testing-core-integration-tests-line-15)">-b</text><text class="breeze-testing-core-integration-tests-r1" x="610" y="386" textLength="829.6" clip-path="url(#breeze-testing-core-integration-tests-line-15)">Database&#160;backend&#160;to&#160;use.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;Breeze&#160;will&#160;start&#160;with</text><text class="breeze-testing-core-integration-tests-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-15)">│</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-15)">
-</text><text class="breeze-testing-core-integration-tests-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-16)">│</text><text class="breeze-testing-core-integration-tests-r1" x="610" y="410.4" textLength="829.6" clip-path="url(#breeze-testing-core-integration-tests-line-16)">an&#160;invalid&#160;database&#160;configuration,&#160;meaning&#160;there&#160;will&#160;be&#160;no&#160;database</text><text class="breeze-testing-core-integration-tests-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-16)">│</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-16)">
-</text><text class="breeze-testing-core-integration-tests-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-17)">│</text><text class="breeze-testing-core-integration-tests-r1" x="610" y="434.8" textLength="829.6" clip-path="url(#breeze-testing-core-integration-tests-line-17)">available,&#160;and&#160;any&#160;attempts&#160;to&#160;connect&#160;to&#160;the&#160;Airflow&#160;database&#160;will&#160;</text><text class="breeze-testing-core-integration-tests-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-17)">│</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-17)">
-</text><text class="breeze-testing-core-integration-tests-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-18)">│</text><text class="breeze-testing-core-integration-tests-r1" x="610" y="459.2" textLength="829.6" clip-path="url(#breeze-testing-core-integration-tests-line-18)">fail.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-integration-tests-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-18)">│</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-18)">
+</text><text class="breeze-testing-core-integration-tests-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-15)">│</text><text class="breeze-testing-core-integration-tests-r4" x="24.4" y="386" textLength="109.8" clip-path="url(#breeze-testing-core-integration-tests-line-15)">--backend</text><text class="breeze-testing-core-integration-tests-r7" x="561.2" y="386" textLength="24.4" clip-path="url(#breeze-testing-core-integration-tests-line-15)">-b</text><text class="breeze-testing-core-integration-tests-r1" x="610" y="386" textLength="829.6" clip-path="url(#breeze-testing-core-integration-tests-line-15)">Database&#160;backend&#160;to&#160;use.&#160;Default&#160;is&#160;&#x27;sqlite&#x27;.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;&#160;</text><text class="breeze-testing-core-integration-tests-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-15)">│</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-15)">
+</text><text class="breeze-testing-core-integration-tests-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-16)">│</text><text class="breeze-testing-core-integration-tests-r1" x="610" y="410.4" textLength="829.6" clip-path="url(#breeze-testing-core-integration-tests-line-16)">Breeze&#160;will&#160;start&#160;with&#160;an&#160;invalid&#160;database&#160;configuration&#160;—&#160;no&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-integration-tests-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-16)">│</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-16)">
+</text><text class="breeze-testing-core-integration-tests-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-17)">│</text><text class="breeze-testing-core-integration-tests-r1" x="610" y="434.8" textLength="829.6" clip-path="url(#breeze-testing-core-integration-tests-line-17)">database&#160;will&#160;be&#160;available,&#160;and&#160;any&#160;attempt&#160;to&#160;run&#160;Airflow&#160;will&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-integration-tests-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-17)">│</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-17)">
+</text><text class="breeze-testing-core-integration-tests-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-18)">│</text><text class="breeze-testing-core-integration-tests-r1" x="610" y="459.2" textLength="829.6" clip-path="url(#breeze-testing-core-integration-tests-line-18)">fail.&#160;Use&#160;&#x27;none&#x27;&#160;only&#160;for&#160;specific&#160;non-DB&#160;test&#160;cases.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-integration-tests-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-18)">│</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-18)">
 </text><text class="breeze-testing-core-integration-tests-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-19)">│</text><text class="breeze-testing-core-integration-tests-r6" x="610" y="483.6" textLength="829.6" clip-path="url(#breeze-testing-core-integration-tests-line-19)">(&gt;sqlite&lt;&#160;|&#160;mysql&#160;|&#160;postgres&#160;|&#160;none)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-integration-tests-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-19)">│</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-19)">
 </text><text class="breeze-testing-core-integration-tests-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-20)">│</text><text class="breeze-testing-core-integration-tests-r5" x="610" y="508" textLength="829.6" clip-path="url(#breeze-testing-core-integration-tests-line-20)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-integration-tests-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-20)">│</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-20)">
 </text><text class="breeze-testing-core-integration-tests-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-21)">│</text><text class="breeze-testing-core-integration-tests-r4" x="24.4" y="532.4" textLength="183" clip-path="url(#breeze-testing-core-integration-tests-line-21)">--no-db-cleanup</text><text class="breeze-testing-core-integration-tests-r1" x="610" y="532.4" textLength="597.8" clip-path="url(#breeze-testing-core-integration-tests-line-21)">Do&#160;not&#160;clear&#160;the&#160;database&#160;before&#160;each&#160;test&#160;module</text><text class="breeze-testing-core-integration-tests-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-21)">│</text><text class="breeze-testing-core-integration-tests-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-core-integration-tests-line-21)">
diff --git a/dev/breeze/doc/images/output_testing_core-integration-tests.txt b/dev/breeze/doc/images/output_testing_core-integration-tests.txt
index 6cc94ab76b850..3a1577f031a7a 100644
--- a/dev/breeze/doc/images/output_testing_core-integration-tests.txt
+++ b/dev/breeze/doc/images/output_testing_core-integration-tests.txt
@@ -1 +1 @@
-f9a72bab5c6f0a3d4eabddeb547818fe
+d74d392fc24fe79bf8174f3b598c9965
diff --git a/dev/breeze/doc/images/output_testing_core-tests.svg b/dev/breeze/doc/images/output_testing_core-tests.svg
index 145a15f6cae1e..a0fd2c02655c0 100644
--- a/dev/breeze/doc/images/output_testing_core-tests.svg
+++ b/dev/breeze/doc/images/output_testing_core-tests.svg
@@ -413,10 +413,10 @@
 </text><text class="breeze-testing-core-tests-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-29)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="727.6" textLength="183" clip-path="url(#breeze-testing-core-tests-line-29)">--skip-db-tests</text><text class="breeze-testing-core-tests-r1" x="305" y="727.6" textLength="414.8" clip-path="url(#breeze-testing-core-tests-line-29)">Skip&#160;tests&#160;that&#160;require&#160;a&#160;database</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-29)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-29)">
 </text><text class="breeze-testing-core-tests-r5" x="0" y="752" textLength="1464" clip-path="url(#breeze-testing-core-tests-line-30)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-core-tests-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-30)">
 </text><text class="breeze-testing-core-tests-r5" x="0" y="776.4" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-31)">╭─</text><text class="breeze-testing-core-tests-r5" x="24.4" y="776.4" textLength="219.6" clip-path="url(#breeze-testing-core-tests-line-31)">&#160;Test&#160;environment&#160;</text><text class="breeze-testing-core-tests-r5" x="244" y="776.4" textLength="1195.6" clip-path="url(#breeze-testing-core-tests-line-31)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-testing-core-tests-r5" x="1439.6" y="776.4" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-31)">─╮</text><text class="breeze-testing-core-tests-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-31)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-32)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="800.8" textLength="109.8" clip-path="url(#breeze-testing-core-tests-line-32)">--backend</text><text class="breeze-testing-core-tests-r7" x="561.2" y="800.8" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-32)">-b</text><text class="breeze-testing-core-tests-r1" x="610" y="800.8" textLength="829.6" clip-path="url(#breeze-testing-core-tests-line-32)">Database&#160;backend&#160;to&#160;use.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;Breeze&#160;will&#160;start&#160;with</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-32)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-32)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-33)">│</text><text class="breeze-testing-core-tests-r1" x="610" y="825.2" textLength="829.6" clip-path="url(#breeze-testing-core-tests-line-33)">an&#160;invalid&#160;database&#160;configuration,&#160;meaning&#160;there&#160;will&#160;be&#160;no&#160;database</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-33)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-33)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-34)">│</text><text class="breeze-testing-core-tests-r1" x="610" y="849.6" textLength="829.6" clip-path="url(#breeze-testing-core-tests-line-34)">available,&#160;and&#160;any&#160;attempts&#160;to&#160;connect&#160;to&#160;the&#160;Airflow&#160;database&#160;will&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-34)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-34)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-35)">│</text><text class="breeze-testing-core-tests-r1" x="610" y="874" textLength="829.6" clip-path="url(#breeze-testing-core-tests-line-35)">fail.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="874" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-35)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-35)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-32)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="800.8" textLength="109.8" clip-path="url(#breeze-testing-core-tests-line-32)">--backend</text><text class="breeze-testing-core-tests-r7" x="561.2" y="800.8" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-32)">-b</text><text class="breeze-testing-core-tests-r1" x="610" y="800.8" textLength="829.6" clip-path="url(#breeze-testing-core-tests-line-32)">Database&#160;backend&#160;to&#160;use.&#160;Default&#160;is&#160;&#x27;sqlite&#x27;.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-32)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-32)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-33)">│</text><text class="breeze-testing-core-tests-r1" x="610" y="825.2" textLength="829.6" clip-path="url(#breeze-testing-core-tests-line-33)">Breeze&#160;will&#160;start&#160;with&#160;an&#160;invalid&#160;database&#160;configuration&#160;—&#160;no&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-33)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-33)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-34)">│</text><text class="breeze-testing-core-tests-r1" x="610" y="849.6" textLength="829.6" clip-path="url(#breeze-testing-core-tests-line-34)">database&#160;will&#160;be&#160;available,&#160;and&#160;any&#160;attempt&#160;to&#160;run&#160;Airflow&#160;will&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-34)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-34)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-35)">│</text><text class="breeze-testing-core-tests-r1" x="610" y="874" textLength="829.6" clip-path="url(#breeze-testing-core-tests-line-35)">fail.&#160;Use&#160;&#x27;none&#x27;&#160;only&#160;for&#160;specific&#160;non-DB&#160;test&#160;cases.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="874" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-35)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-35)">
 </text><text class="breeze-testing-core-tests-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-36)">│</text><text class="breeze-testing-core-tests-r6" x="610" y="898.4" textLength="829.6" clip-path="url(#breeze-testing-core-tests-line-36)">(&gt;sqlite&lt;&#160;|&#160;mysql&#160;|&#160;postgres&#160;|&#160;none)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="898.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-36)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-36)">
 </text><text class="breeze-testing-core-tests-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-37)">│</text><text class="breeze-testing-core-tests-r5" x="610" y="922.8" textLength="829.6" clip-path="url(#breeze-testing-core-tests-line-37)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="922.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-37)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-37)">
 </text><text class="breeze-testing-core-tests-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-38)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="947.2" textLength="183" clip-path="url(#breeze-testing-core-tests-line-38)">--no-db-cleanup</text><text class="breeze-testing-core-tests-r1" x="610" y="947.2" textLength="597.8" clip-path="url(#breeze-testing-core-tests-line-38)">Do&#160;not&#160;clear&#160;the&#160;database&#160;before&#160;each&#160;test&#160;module</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="947.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-38)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-38)">
diff --git a/dev/breeze/doc/images/output_testing_core-tests.txt b/dev/breeze/doc/images/output_testing_core-tests.txt
index a5c89681ead52..b0457d281ad67 100644
--- a/dev/breeze/doc/images/output_testing_core-tests.txt
+++ b/dev/breeze/doc/images/output_testing_core-tests.txt
@@ -1 +1 @@
-ceb51359e3530c67379ae17cf219647d
+13a8da75e6aa2615690b1c23c98fd8b8
diff --git a/dev/breeze/doc/images/output_testing_providers-integration-tests.svg b/dev/breeze/doc/images/output_testing_providers-integration-tests.svg
index af73ffc750a72..b46e3ae7edd29 100644
--- a/dev/breeze/doc/images/output_testing_providers-integration-tests.svg
+++ b/dev/breeze/doc/images/output_testing_providers-integration-tests.svg
@@ -219,10 +219,10 @@
 </text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-12)">│</text><text class="breeze-testing-providers-integration-tests-r4" x="24.4" y="312.8" textLength="122" clip-path="url(#breeze-testing-providers-integration-tests-line-12)">--db-reset</text><text class="breeze-testing-providers-integration-tests-r7" x="256.2" y="312.8" textLength="24.4" clip-path="url(#breeze-testing-providers-integration-tests-line-12)">-d</text><text class="breeze-testing-providers-integration-tests-r1" x="280.6" y="312.8" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-12)">/</text><text class="breeze-testing-providers-integration-tests-r4" x="292.8" y="312.8" textLength="158.6" clip-path="url(#breeze-testing-providers-integration-tests-line-12)">--no-db-reset</text><text class="breeze-testing-providers-integration-tests-r1" x="475.8" y="312.8" textLength="451.4" clip-path="url(#breeze-testing-providers-integration-tests-line-12)">Reset&#160;DB&#160;when&#160;entering&#160;the&#160;container.</text><text class="breeze-testing-providers-integration-tests-r5" x="939.4" y="312.8" textLength="268.4" clip-path="url(#breeze-testing-providers-integration-tests-line-12)">[default:&#160;no-db-reset]</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-12)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-12)">
 </text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="337.2" textLength="1464" clip-path="url(#breeze-testing-providers-integration-tests-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-13)">
 </text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="361.6" textLength="24.4" clip-path="url(#breeze-testing-providers-integration-tests-line-14)">╭─</text><text class="breeze-testing-providers-integration-tests-r5" x="24.4" y="361.6" textLength="219.6" clip-path="url(#breeze-testing-providers-integration-tests-line-14)">&#160;Test&#160;environment&#160;</text><text class="breeze-testing-providers-integration-tests-r5" x="244" y="361.6" textLength="1195.6" clip-path="url(#breeze-testing-providers-integration-tests-line-14)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-testing-providers-integration-tests-r5" x="1439.6" y="361.6" textLength="24.4" clip-path="url(#breeze-testing-providers-integration-tests-line-14)">─╮</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-14)">
-</text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-15)">│</text><text class="breeze-testing-providers-integration-tests-r4" x="24.4" y="386" textLength="109.8" clip-path="url(#breeze-testing-providers-integration-tests-line-15)">--backend</text><text class="breeze-testing-providers-integration-tests-r7" x="561.2" y="386" textLength="24.4" clip-path="url(#breeze-testing-providers-integration-tests-line-15)">-b</text><text class="breeze-testing-providers-integration-tests-r1" x="610" y="386" textLength="829.6" clip-path="url(#breeze-testing-providers-integration-tests-line-15)">Database&#160;backend&#160;to&#160;use.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;Breeze&#160;will&#160;start&#160;with</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-15)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-15)">
-</text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-16)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="610" y="410.4" textLength="829.6" clip-path="url(#breeze-testing-providers-integration-tests-line-16)">an&#160;invalid&#160;database&#160;configuration,&#160;meaning&#160;there&#160;will&#160;be&#160;no&#160;database</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-16)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-16)">
-</text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-17)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="610" y="434.8" textLength="829.6" clip-path="url(#breeze-testing-providers-integration-tests-line-17)">available,&#160;and&#160;any&#160;attempts&#160;to&#160;connect&#160;to&#160;the&#160;Airflow&#160;database&#160;will&#160;</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-17)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-17)">
-</text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-18)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="610" y="459.2" textLength="829.6" clip-path="url(#breeze-testing-providers-integration-tests-line-18)">fail.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-18)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-18)">
+</text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-15)">│</text><text class="breeze-testing-providers-integration-tests-r4" x="24.4" y="386" textLength="109.8" clip-path="url(#breeze-testing-providers-integration-tests-line-15)">--backend</text><text class="breeze-testing-providers-integration-tests-r7" x="561.2" y="386" textLength="24.4" clip-path="url(#breeze-testing-providers-integration-tests-line-15)">-b</text><text class="breeze-testing-providers-integration-tests-r1" x="610" y="386" textLength="829.6" clip-path="url(#breeze-testing-providers-integration-tests-line-15)">Database&#160;backend&#160;to&#160;use.&#160;Default&#160;is&#160;&#x27;sqlite&#x27;.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;&#160;</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-15)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-15)">
+</text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-16)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="610" y="410.4" textLength="829.6" clip-path="url(#breeze-testing-providers-integration-tests-line-16)">Breeze&#160;will&#160;start&#160;with&#160;an&#160;invalid&#160;database&#160;configuration&#160;—&#160;no&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-16)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-16)">
+</text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-17)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="610" y="434.8" textLength="829.6" clip-path="url(#breeze-testing-providers-integration-tests-line-17)">database&#160;will&#160;be&#160;available,&#160;and&#160;any&#160;attempt&#160;to&#160;run&#160;Airflow&#160;will&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-17)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-17)">
+</text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-18)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="610" y="459.2" textLength="829.6" clip-path="url(#breeze-testing-providers-integration-tests-line-18)">fail.&#160;Use&#160;&#x27;none&#x27;&#160;only&#160;for&#160;specific&#160;non-DB&#160;test&#160;cases.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-18)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-18)">
 </text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-19)">│</text><text class="breeze-testing-providers-integration-tests-r6" x="610" y="483.6" textLength="829.6" clip-path="url(#breeze-testing-providers-integration-tests-line-19)">(&gt;sqlite&lt;&#160;|&#160;mysql&#160;|&#160;postgres&#160;|&#160;none)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-19)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-19)">
 </text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-20)">│</text><text class="breeze-testing-providers-integration-tests-r5" x="610" y="508" textLength="829.6" clip-path="url(#breeze-testing-providers-integration-tests-line-20)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-20)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-20)">
 </text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-21)">│</text><text class="breeze-testing-providers-integration-tests-r4" x="24.4" y="532.4" textLength="183" clip-path="url(#breeze-testing-providers-integration-tests-line-21)">--no-db-cleanup</text><text class="breeze-testing-providers-integration-tests-r1" x="610" y="532.4" textLength="597.8" clip-path="url(#breeze-testing-providers-integration-tests-line-21)">Do&#160;not&#160;clear&#160;the&#160;database&#160;before&#160;each&#160;test&#160;module</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-21)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-21)">
diff --git a/dev/breeze/doc/images/output_testing_providers-integration-tests.txt b/dev/breeze/doc/images/output_testing_providers-integration-tests.txt
index 6a4377016c653..601b2a047983e 100644
--- a/dev/breeze/doc/images/output_testing_providers-integration-tests.txt
+++ b/dev/breeze/doc/images/output_testing_providers-integration-tests.txt
@@ -1 +1 @@
-f8cae5908b307cdc14d48857da8e058d
+9f2c3376aabee8cc8f009519d3c4f878
diff --git a/dev/breeze/doc/images/output_testing_providers-tests.svg b/dev/breeze/doc/images/output_testing_providers-tests.svg
index cc0225e07660e..255b305aa81a3 100644
--- a/dev/breeze/doc/images/output_testing_providers-tests.svg
+++ b/dev/breeze/doc/images/output_testing_providers-tests.svg
@@ -444,10 +444,10 @@
 </text><text class="breeze-testing-providers-tests-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-30)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="752" textLength="183" clip-path="url(#breeze-testing-providers-tests-line-30)">--skip-db-tests</text><text class="breeze-testing-providers-tests-r1" x="305" y="752" textLength="414.8" clip-path="url(#breeze-testing-providers-tests-line-30)">Skip&#160;tests&#160;that&#160;require&#160;a&#160;database</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-30)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-30)">
 </text><text class="breeze-testing-providers-tests-r5" x="0" y="776.4" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-31)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-31)">
 </text><text class="breeze-testing-providers-tests-r5" x="0" y="800.8" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-32)">╭─</text><text class="breeze-testing-providers-tests-r5" x="24.4" y="800.8" textLength="219.6" clip-path="url(#breeze-testing-providers-tests-line-32)">&#160;Test&#160;environment&#160;</text><text class="breeze-testing-providers-tests-r5" x="244" y="800.8" textLength="1195.6" clip-path="url(#breeze-testing-providers-tests-line-32)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-testing-providers-tests-r5" x="1439.6" y="800.8" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-32)">─╮</text><text class="breeze-testing-providers-tests-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-32)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-33)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="825.2" textLength="109.8" clip-path="url(#breeze-testing-providers-tests-line-33)">--backend</text><text class="breeze-testing-providers-tests-r6" x="561.2" y="825.2" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-33)">-b</text><text class="breeze-testing-providers-tests-r1" x="610" y="825.2" textLength="829.6" clip-path="url(#breeze-testing-providers-tests-line-33)">Database&#160;backend&#160;to&#160;use.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;Breeze&#160;will&#160;start&#160;with</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-33)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-33)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-34)">│</text><text class="breeze-testing-providers-tests-r1" x="610" y="849.6" textLength="829.6" clip-path="url(#breeze-testing-providers-tests-line-34)">an&#160;invalid&#160;database&#160;configuration,&#160;meaning&#160;there&#160;will&#160;be&#160;no&#160;database</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-34)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-34)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-35)">│</text><text class="breeze-testing-providers-tests-r1" x="610" y="874" textLength="829.6" clip-path="url(#breeze-testing-providers-tests-line-35)">available,&#160;and&#160;any&#160;attempts&#160;to&#160;connect&#160;to&#160;the&#160;Airflow&#160;database&#160;will&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="874" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-35)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-35)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-36)">│</text><text class="breeze-testing-providers-tests-r1" x="610" y="898.4" textLength="829.6" clip-path="url(#breeze-testing-providers-tests-line-36)">fail.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="898.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-36)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-36)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-33)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="825.2" textLength="109.8" clip-path="url(#breeze-testing-providers-tests-line-33)">--backend</text><text class="breeze-testing-providers-tests-r6" x="561.2" y="825.2" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-33)">-b</text><text class="breeze-testing-providers-tests-r1" x="610" y="825.2" textLength="829.6" clip-path="url(#breeze-testing-providers-tests-line-33)">Database&#160;backend&#160;to&#160;use.&#160;Default&#160;is&#160;&#x27;sqlite&#x27;.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-33)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-33)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-34)">│</text><text class="breeze-testing-providers-tests-r1" x="610" y="849.6" textLength="829.6" clip-path="url(#breeze-testing-providers-tests-line-34)">Breeze&#160;will&#160;start&#160;with&#160;an&#160;invalid&#160;database&#160;configuration&#160;—&#160;no&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-34)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-34)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-35)">│</text><text class="breeze-testing-providers-tests-r1" x="610" y="874" textLength="829.6" clip-path="url(#breeze-testing-providers-tests-line-35)">database&#160;will&#160;be&#160;available,&#160;and&#160;any&#160;attempt&#160;to&#160;run&#160;Airflow&#160;will&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="874" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-35)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-35)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-36)">│</text><text class="breeze-testing-providers-tests-r1" x="610" y="898.4" textLength="829.6" clip-path="url(#breeze-testing-providers-tests-line-36)">fail.&#160;Use&#160;&#x27;none&#x27;&#160;only&#160;for&#160;specific&#160;non-DB&#160;test&#160;cases.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="898.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-36)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-36)">
 </text><text class="breeze-testing-providers-tests-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-37)">│</text><text class="breeze-testing-providers-tests-r7" x="610" y="922.8" textLength="829.6" clip-path="url(#breeze-testing-providers-tests-line-37)">(&gt;sqlite&lt;&#160;|&#160;mysql&#160;|&#160;postgres&#160;|&#160;none)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="922.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-37)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-37)">
 </text><text class="breeze-testing-providers-tests-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-38)">│</text><text class="breeze-testing-providers-tests-r5" x="610" y="947.2" textLength="829.6" clip-path="url(#breeze-testing-providers-tests-line-38)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="947.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-38)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-38)">
 </text><text class="breeze-testing-providers-tests-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-39)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="971.6" textLength="183" clip-path="url(#breeze-testing-providers-tests-line-39)">--no-db-cleanup</text><text class="breeze-testing-providers-tests-r1" x="610" y="971.6" textLength="597.8" clip-path="url(#breeze-testing-providers-tests-line-39)">Do&#160;not&#160;clear&#160;the&#160;database&#160;before&#160;each&#160;test&#160;module</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="971.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-39)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-39)">
diff --git a/dev/breeze/doc/images/output_testing_providers-tests.txt b/dev/breeze/doc/images/output_testing_providers-tests.txt
index 8c77d66e03ade..d0cfab2be5135 100644
--- a/dev/breeze/doc/images/output_testing_providers-tests.txt
+++ b/dev/breeze/doc/images/output_testing_providers-tests.txt
@@ -1 +1 @@
-40d4ee42e19c31200593c168157a2521
+7e1ef96b4f18b709f93d71e988cd2887
diff --git a/dev/breeze/doc/images/output_testing_python-api-client-tests.svg b/dev/breeze/doc/images/output_testing_python-api-client-tests.svg
index ee1f256149479..92c605a5b5647 100644
--- a/dev/breeze/doc/images/output_testing_python-api-client-tests.svg
+++ b/dev/breeze/doc/images/output_testing_python-api-client-tests.svg
@@ -197,10 +197,10 @@
 </text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-17)">│</text><text class="breeze-testing-python-api-client-tests-r4" x="24.4" y="434.8" textLength="122" clip-path="url(#breeze-testing-python-api-client-tests-line-17)">--db-reset</text><text class="breeze-testing-python-api-client-tests-r6" x="256.2" y="434.8" textLength="24.4" clip-path="url(#breeze-testing-python-api-client-tests-line-17)">-d</text><text class="breeze-testing-python-api-client-tests-r1" x="280.6" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-17)">/</text><text class="breeze-testing-python-api-client-tests-r4" x="292.8" y="434.8" textLength="158.6" clip-path="url(#breeze-testing-python-api-client-tests-line-17)">--no-db-reset</text><text class="breeze-testing-python-api-client-tests-r1" x="475.8" y="434.8" textLength="451.4" clip-path="url(#breeze-testing-python-api-client-tests-line-17)">Reset&#160;DB&#160;when&#160;entering&#160;the&#160;container.</text><text class="breeze-testing-python-api-client-tests-r5" x="939.4" y="434.8" textLength="268.4" clip-path="url(#breeze-testing-python-api-client-tests-line-17)">[default:&#160;no-db-reset]</text><text class="breeze-testing-python-api-client-tests-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-17)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-17)">
 </text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="459.2" textLength="1464" clip-path="url(#breeze-testing-python-api-client-tests-line-18)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-18)">
 </text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="483.6" textLength="24.4" clip-path="url(#breeze-testing-python-api-client-tests-line-19)">╭─</text><text class="breeze-testing-python-api-client-tests-r5" x="24.4" y="483.6" textLength="219.6" clip-path="url(#breeze-testing-python-api-client-tests-line-19)">&#160;Test&#160;environment&#160;</text><text class="breeze-testing-python-api-client-tests-r5" x="244" y="483.6" textLength="1195.6" clip-path="url(#breeze-testing-python-api-client-tests-line-19)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-testing-python-api-client-tests-r5" x="1439.6" y="483.6" textLength="24.4" clip-path="url(#breeze-testing-python-api-client-tests-line-19)">─╮</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-19)">
-</text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-20)">│</text><text class="breeze-testing-python-api-client-tests-r4" x="24.4" y="508" textLength="109.8" clip-path="url(#breeze-testing-python-api-client-tests-line-20)">--backend</text><text class="breeze-testing-python-api-client-tests-r6" x="561.2" y="508" textLength="24.4" clip-path="url(#breeze-testing-python-api-client-tests-line-20)">-b</text><text class="breeze-testing-python-api-client-tests-r1" x="610" y="508" textLength="829.6" clip-path="url(#breeze-testing-python-api-client-tests-line-20)">Database&#160;backend&#160;to&#160;use.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;Breeze&#160;will&#160;start&#160;with</text><text class="breeze-testing-python-api-client-tests-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-20)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-20)">
-</text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-21)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="610" y="532.4" textLength="829.6" clip-path="url(#breeze-testing-python-api-client-tests-line-21)">an&#160;invalid&#160;database&#160;configuration,&#160;meaning&#160;there&#160;will&#160;be&#160;no&#160;database</text><text class="breeze-testing-python-api-client-tests-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-21)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-21)">
-</text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-22)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="610" y="556.8" textLength="829.6" clip-path="url(#breeze-testing-python-api-client-tests-line-22)">available,&#160;and&#160;any&#160;attempts&#160;to&#160;connect&#160;to&#160;the&#160;Airflow&#160;database&#160;will&#160;</text><text class="breeze-testing-python-api-client-tests-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-22)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-22)">
-</text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-23)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="610" y="581.2" textLength="829.6" clip-path="url(#breeze-testing-python-api-client-tests-line-23)">fail.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-python-api-client-tests-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-23)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-23)">
+</text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-20)">│</text><text class="breeze-testing-python-api-client-tests-r4" x="24.4" y="508" textLength="109.8" clip-path="url(#breeze-testing-python-api-client-tests-line-20)">--backend</text><text class="breeze-testing-python-api-client-tests-r6" x="561.2" y="508" textLength="24.4" clip-path="url(#breeze-testing-python-api-client-tests-line-20)">-b</text><text class="breeze-testing-python-api-client-tests-r1" x="610" y="508" textLength="829.6" clip-path="url(#breeze-testing-python-api-client-tests-line-20)">Database&#160;backend&#160;to&#160;use.&#160;Default&#160;is&#160;&#x27;sqlite&#x27;.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;&#160;</text><text class="breeze-testing-python-api-client-tests-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-20)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-20)">
+</text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-21)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="610" y="532.4" textLength="829.6" clip-path="url(#breeze-testing-python-api-client-tests-line-21)">Breeze&#160;will&#160;start&#160;with&#160;an&#160;invalid&#160;database&#160;configuration&#160;—&#160;no&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-python-api-client-tests-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-21)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-21)">
+</text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-22)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="610" y="556.8" textLength="829.6" clip-path="url(#breeze-testing-python-api-client-tests-line-22)">database&#160;will&#160;be&#160;available,&#160;and&#160;any&#160;attempt&#160;to&#160;run&#160;Airflow&#160;will&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-python-api-client-tests-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-22)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-22)">
+</text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-23)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="610" y="581.2" textLength="829.6" clip-path="url(#breeze-testing-python-api-client-tests-line-23)">fail.&#160;Use&#160;&#x27;none&#x27;&#160;only&#160;for&#160;specific&#160;non-DB&#160;test&#160;cases.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-python-api-client-tests-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-23)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-23)">
 </text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-24)">│</text><text class="breeze-testing-python-api-client-tests-r7" x="610" y="605.6" textLength="829.6" clip-path="url(#breeze-testing-python-api-client-tests-line-24)">(&gt;sqlite&lt;&#160;|&#160;mysql&#160;|&#160;postgres&#160;|&#160;none)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-python-api-client-tests-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-24)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-24)">
 </text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-25)">│</text><text class="breeze-testing-python-api-client-tests-r5" x="610" y="630" textLength="829.6" clip-path="url(#breeze-testing-python-api-client-tests-line-25)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-python-api-client-tests-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-25)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-25)">
 </text><text class="breeze-testing-python-api-client-tests-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-26)">│</text><text class="breeze-testing-python-api-client-tests-r4" x="24.4" y="654.4" textLength="183" clip-path="url(#breeze-testing-python-api-client-tests-line-26)">--no-db-cleanup</text><text class="breeze-testing-python-api-client-tests-r1" x="610" y="654.4" textLength="597.8" clip-path="url(#breeze-testing-python-api-client-tests-line-26)">Do&#160;not&#160;clear&#160;the&#160;database&#160;before&#160;each&#160;test&#160;module</text><text class="breeze-testing-python-api-client-tests-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-26)">│</text><text class="breeze-testing-python-api-client-tests-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-testing-python-api-client-tests-line-26)">
diff --git a/dev/breeze/doc/images/output_testing_python-api-client-tests.txt b/dev/breeze/doc/images/output_testing_python-api-client-tests.txt
index feaff93e8dbfa..a593193e9e22f 100644
--- a/dev/breeze/doc/images/output_testing_python-api-client-tests.txt
+++ b/dev/breeze/doc/images/output_testing_python-api-client-tests.txt
@@ -1 +1 @@
-92211c9044658c3f7f3ca81af06f7c43
+afba919ff0cf87d7fbfd6727eb5a0977
diff --git a/dev/breeze/doc/images/output_testing_system-tests.svg b/dev/breeze/doc/images/output_testing_system-tests.svg
index 14594a21cdb73..68980e3bf6093 100644
--- a/dev/breeze/doc/images/output_testing_system-tests.svg
+++ b/dev/breeze/doc/images/output_testing_system-tests.svg
@@ -288,10 +288,10 @@
 </text><text class="breeze-testing-system-tests-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-12)">│</text><text class="breeze-testing-system-tests-r4" x="24.4" y="312.8" textLength="122" clip-path="url(#breeze-testing-system-tests-line-12)">--db-reset</text><text class="breeze-testing-system-tests-r7" x="256.2" y="312.8" textLength="24.4" clip-path="url(#breeze-testing-system-tests-line-12)">-d</text><text class="breeze-testing-system-tests-r1" x="280.6" y="312.8" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-12)">/</text><text class="breeze-testing-system-tests-r4" x="292.8" y="312.8" textLength="158.6" clip-path="url(#breeze-testing-system-tests-line-12)">--no-db-reset</text><text class="breeze-testing-system-tests-r1" x="475.8" y="312.8" textLength="451.4" clip-path="url(#breeze-testing-system-tests-line-12)">Reset&#160;DB&#160;when&#160;entering&#160;the&#160;container.</text><text class="breeze-testing-system-tests-r5" x="939.4" y="312.8" textLength="268.4" clip-path="url(#breeze-testing-system-tests-line-12)">[default:&#160;no-db-reset]</text><text class="breeze-testing-system-tests-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-12)">│</text><text class="breeze-testing-system-tests-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-12)">
 </text><text class="breeze-testing-system-tests-r5" x="0" y="337.2" textLength="1464" clip-path="url(#breeze-testing-system-tests-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-system-tests-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-13)">
 </text><text class="breeze-testing-system-tests-r5" x="0" y="361.6" textLength="24.4" clip-path="url(#breeze-testing-system-tests-line-14)">╭─</text><text class="breeze-testing-system-tests-r5" x="24.4" y="361.6" textLength="219.6" clip-path="url(#breeze-testing-system-tests-line-14)">&#160;Test&#160;environment&#160;</text><text class="breeze-testing-system-tests-r5" x="244" y="361.6" textLength="1195.6" clip-path="url(#breeze-testing-system-tests-line-14)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-testing-system-tests-r5" x="1439.6" y="361.6" textLength="24.4" clip-path="url(#breeze-testing-system-tests-line-14)">─╮</text><text class="breeze-testing-system-tests-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-14)">
-</text><text class="breeze-testing-system-tests-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-15)">│</text><text class="breeze-testing-system-tests-r4" x="24.4" y="386" textLength="109.8" clip-path="url(#breeze-testing-system-tests-line-15)">--backend</text><text class="breeze-testing-system-tests-r7" x="561.2" y="386" textLength="24.4" clip-path="url(#breeze-testing-system-tests-line-15)">-b</text><text class="breeze-testing-system-tests-r1" x="610" y="386" textLength="829.6" clip-path="url(#breeze-testing-system-tests-line-15)">Database&#160;backend&#160;to&#160;use.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;Breeze&#160;will&#160;start&#160;with</text><text class="breeze-testing-system-tests-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-15)">│</text><text class="breeze-testing-system-tests-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-15)">
-</text><text class="breeze-testing-system-tests-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-16)">│</text><text class="breeze-testing-system-tests-r1" x="610" y="410.4" textLength="829.6" clip-path="url(#breeze-testing-system-tests-line-16)">an&#160;invalid&#160;database&#160;configuration,&#160;meaning&#160;there&#160;will&#160;be&#160;no&#160;database</text><text class="breeze-testing-system-tests-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-16)">│</text><text class="breeze-testing-system-tests-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-16)">
-</text><text class="breeze-testing-system-tests-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-17)">│</text><text class="breeze-testing-system-tests-r1" x="610" y="434.8" textLength="829.6" clip-path="url(#breeze-testing-system-tests-line-17)">available,&#160;and&#160;any&#160;attempts&#160;to&#160;connect&#160;to&#160;the&#160;Airflow&#160;database&#160;will&#160;</text><text class="breeze-testing-system-tests-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-17)">│</text><text class="breeze-testing-system-tests-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-17)">
-</text><text class="breeze-testing-system-tests-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-18)">│</text><text class="breeze-testing-system-tests-r1" x="610" y="459.2" textLength="829.6" clip-path="url(#breeze-testing-system-tests-line-18)">fail.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-system-tests-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-18)">│</text><text class="breeze-testing-system-tests-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-18)">
+</text><text class="breeze-testing-system-tests-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-15)">│</text><text class="breeze-testing-system-tests-r4" x="24.4" y="386" textLength="109.8" clip-path="url(#breeze-testing-system-tests-line-15)">--backend</text><text class="breeze-testing-system-tests-r7" x="561.2" y="386" textLength="24.4" clip-path="url(#breeze-testing-system-tests-line-15)">-b</text><text class="breeze-testing-system-tests-r1" x="610" y="386" textLength="829.6" clip-path="url(#breeze-testing-system-tests-line-15)">Database&#160;backend&#160;to&#160;use.&#160;Default&#160;is&#160;&#x27;sqlite&#x27;.&#160;If&#160;&#x27;none&#x27;&#160;is&#160;chosen,&#160;&#160;</text><text class="breeze-testing-system-tests-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-15)">│</text><text class="breeze-testing-system-tests-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-15)">
+</text><text class="breeze-testing-system-tests-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-16)">│</text><text class="breeze-testing-system-tests-r1" x="610" y="410.4" textLength="829.6" clip-path="url(#breeze-testing-system-tests-line-16)">Breeze&#160;will&#160;start&#160;with&#160;an&#160;invalid&#160;database&#160;configuration&#160;—&#160;no&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-system-tests-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-16)">│</text><text class="breeze-testing-system-tests-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-16)">
+</text><text class="breeze-testing-system-tests-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-17)">│</text><text class="breeze-testing-system-tests-r1" x="610" y="434.8" textLength="829.6" clip-path="url(#breeze-testing-system-tests-line-17)">database&#160;will&#160;be&#160;available,&#160;and&#160;any&#160;attempt&#160;to&#160;run&#160;Airflow&#160;will&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-system-tests-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-17)">│</text><text class="breeze-testing-system-tests-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-17)">
+</text><text class="breeze-testing-system-tests-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-18)">│</text><text class="breeze-testing-system-tests-r1" x="610" y="459.2" textLength="829.6" clip-path="url(#breeze-testing-system-tests-line-18)">fail.&#160;Use&#160;&#x27;none&#x27;&#160;only&#160;for&#160;specific&#160;non-DB&#160;test&#160;cases.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-system-tests-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-18)">│</text><text class="breeze-testing-system-tests-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-18)">
 </text><text class="breeze-testing-system-tests-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-19)">│</text><text class="breeze-testing-system-tests-r6" x="610" y="483.6" textLength="829.6" clip-path="url(#breeze-testing-system-tests-line-19)">(&gt;sqlite&lt;&#160;|&#160;mysql&#160;|&#160;postgres&#160;|&#160;none)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-system-tests-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-19)">│</text><text class="breeze-testing-system-tests-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-19)">
 </text><text class="breeze-testing-system-tests-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-20)">│</text><text class="breeze-testing-system-tests-r5" x="610" y="508" textLength="829.6" clip-path="url(#breeze-testing-system-tests-line-20)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-system-tests-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-20)">│</text><text class="breeze-testing-system-tests-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-20)">
 </text><text class="breeze-testing-system-tests-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-21)">│</text><text class="breeze-testing-system-tests-r4" x="24.4" y="532.4" textLength="183" clip-path="url(#breeze-testing-system-tests-line-21)">--no-db-cleanup</text><text class="breeze-testing-system-tests-r1" x="610" y="532.4" textLength="597.8" clip-path="url(#breeze-testing-system-tests-line-21)">Do&#160;not&#160;clear&#160;the&#160;database&#160;before&#160;each&#160;test&#160;module</text><text class="breeze-testing-system-tests-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-21)">│</text><text class="breeze-testing-system-tests-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-system-tests-line-21)">
diff --git a/dev/breeze/doc/images/output_testing_system-tests.txt b/dev/breeze/doc/images/output_testing_system-tests.txt
index 68d7fffd36077..5391554fc3d99 100644
--- a/dev/breeze/doc/images/output_testing_system-tests.txt
+++ b/dev/breeze/doc/images/output_testing_system-tests.txt
@@ -1 +1 @@
-96c2e355b805d8d2a17d04978f4c6cdc
+be176ace01794194a02eb68eb4cb801a
diff --git a/dev/breeze/src/airflow_breeze/commands/common_options.py b/dev/breeze/src/airflow_breeze/commands/common_options.py
index a0ebdd694f6d3..0363cd9eeced6 100644
--- a/dev/breeze/src/airflow_breeze/commands/common_options.py
+++ b/dev/breeze/src/airflow_breeze/commands/common_options.py
@@ -109,9 +109,10 @@ def _set_default_from_parent(ctx: click.core.Context, option: click.core.Option,
     type=CacheableChoice(ALLOWED_BACKENDS),
     default=CacheableDefault(value=ALLOWED_BACKENDS[0]),
     show_default=True,
-    help="Database backend to use. If 'none' is chosen, "
-    "Breeze will start with an invalid database configuration, meaning there will be no database "
-    "available, and any attempts to connect to the Airflow database will fail.",
+    help="Database backend to use. Default is 'sqlite'. "
+    "If 'none' is chosen, Breeze will start with an invalid database configuration — "
+    "no database will be available, and any attempt to run Airflow will fail. "
+    "Use 'none' only for specific non-DB test cases.",
     envvar="BACKEND",
 )
 option_builder = click.option(
diff --git a/scripts/in_container/check_environment.sh b/scripts/in_container/check_environment.sh
index 57ae94c1058ce..0cf7b85c4b9b2 100755
--- a/scripts/in_container/check_environment.sh
+++ b/scripts/in_container/check_environment.sh
@@ -61,10 +61,16 @@ function check_db_backend {
     elif [[ ${BACKEND} == "sqlite" ]]; then
         return
     elif [[ ${BACKEND} == "none" ]]; then
-        echo "${COLOR_YELLOW}WARNING: Using no database backend!${COLOR_RESET}"
-        return
+        echo "${COLOR_YELLOW}WARNING: Using no database backend${COLOR_RESET}"
+
+        if [[ ${START_AIRFLOW=} == "true" ]]; then
+            echo "${COLOR_RED}ERROR: 'start-airflow' cannot be used with --backend=none${COLOR_RESET}"
+            echo "${COLOR_RED}Supported values are: [postgres,mysql,sqlite]${COLOR_RESET}"
+            echo "${COLOR_RED}Please specify one using '--backend'${COLOR_RESET}"
+            exit 1
+        fi
     else
-        echo "Unknown backend. Supported values: [postgres,mysql,mssql,sqlite]. Current value: [${BACKEND}]"
+        echo "${COLOR_RED}ERROR: Unknown backend. Supported values: [postgres,mysql,sqlite]. Current value: [${BACKEND}]${COLOR_RESET}"
         exit 1
     fi
 }

From bbe711e7345578455292c7d6d41b6221f76abaa8 Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Sat, 28 Jun 2025 19:51:14 +0530
Subject: [PATCH 262/381] Adding some intelligence to classifying provider
 commits (#52407)

---
 .../provider_documentation.py                 | 87 +++++++++++--------
 .../tests/test_provider_documentation.py      | 52 +++++++++++
 2 files changed, 104 insertions(+), 35 deletions(-)

diff --git a/dev/breeze/src/airflow_breeze/prepare_providers/provider_documentation.py b/dev/breeze/src/airflow_breeze/prepare_providers/provider_documentation.py
index 1eded07332772..c330047b7cd97 100644
--- a/dev/breeze/src/airflow_breeze/prepare_providers/provider_documentation.py
+++ b/dev/breeze/src/airflow_breeze/prepare_providers/provider_documentation.py
@@ -195,6 +195,49 @@ class PrepareReleaseDocsUserQuitException(Exception):
 }
 
 
+def classification_result(changed_files):
+    if not changed_files:
+        return "other"
+
+    has_docs = any(re.match(r"^providers/[^/]+/docs/", f) and f.endswith(".rst") for f in changed_files)
+
+    has_test_or_example_only = all(
+        re.match(r"^providers/[^/]+/tests/", f)
+        or re.match(r"^providers/[^/]+/src/airflow/providers/[^/]+/example_dags/", f)
+        for f in changed_files
+    )
+
+    if has_docs:
+        return "documentation"
+    if has_test_or_example_only:
+        return "test_or_example_only"
+    return "other"
+
+
+def classify_provider_pr_files(commit_hash: str) -> str:
+    """
+    Classify a provider commit based on changed files.
+
+    - Returns 'documentation' if any provider doc files are present.
+    - Returns 'test_or_example_only' if only test/example DAGs changed.
+    - Returns 'other' otherwise.
+    """
+    try:
+        result = run_command(
+            ["git", "diff", "--name-only", f"{commit_hash}^", commit_hash],
+            cwd=AIRFLOW_ROOT_PATH,
+            capture_output=True,
+            text=True,
+            check=True,
+        )
+        changed_files = result.stdout.strip().splitlines()
+    except subprocess.CalledProcessError:
+        # safe to return other here
+        return "other"
+
+    return classification_result(changed_files)
+
+
 def _get_git_log_command(
     folder_paths: list[Path] | None = None, from_commit: str | None = None, to_commit: str | None = None
 ) -> list[str]:
@@ -715,39 +758,6 @@ def _update_commits_rst(
     )
 
 
-def _is_test_or_example_dag_only_changes(commit_hash: str) -> bool:
-    """
-    Check if a commit contains only test-related or example DAG changes
-    by using the git diff command.
-
-    Considers files in airflow/providers/{provider}/tests/
-    and airflow/providers/{provider}/src/airflow/providers/{provider}/example_dags/
-    as test/example-only files.
-
-    :param commit_hash: The full commit hash to check
-    :return: True if changes are only in test/example files, False otherwise
-    """
-    try:
-        result = run_command(
-            ["git", "diff", "--name-only", f"{commit_hash}^", commit_hash],
-            cwd=AIRFLOW_ROOT_PATH,
-            capture_output=True,
-            text=True,
-            check=True,
-        )
-        changed_files = result.stdout.strip().splitlines()
-
-        for file_path in changed_files:
-            if not (
-                re.match(r"providers/[^/]+/tests/", file_path)
-                or re.match(r"providers/[^/]+/src/airflow/providers/[^/]+/example_dags/", file_path)
-            ):
-                return False
-        return True
-    except subprocess.CalledProcessError:
-        return False
-
-
 def update_release_notes(
     provider_id: str,
     reapply_templates_only: bool,
@@ -817,9 +827,16 @@ def update_release_notes(
                 )
                 change = list_of_list_of_changes[0][table_iter]
 
-                if change.pr and _is_test_or_example_dag_only_changes(change.full_hash):
+                classification = classify_provider_pr_files(change.full_hash)
+                if classification == "documentation":
+                    get_console().print(
+                        f"[green]Automatically classifying change as DOCUMENTATION since it contains only doc changes:[/]\n"
+                        f"[blue]{formatted_message}[/]"
+                    )
+                    type_of_change = TypeOfChange.DOCUMENTATION
+                elif classification == "test_or_example_only":
                     get_console().print(
-                        f"[green]Automatically classifying change as SKIPPED since it only contains test changes:[/]\n"
+                        f"[green]Automatically classifying change as SKIPPED since it only contains test/example changes:[/]\n"
                         f"[blue]{formatted_message}[/]"
                     )
                     type_of_change = TypeOfChange.SKIP
diff --git a/dev/breeze/tests/test_provider_documentation.py b/dev/breeze/tests/test_provider_documentation.py
index 43a058c998112..b55088987c632 100644
--- a/dev/breeze/tests/test_provider_documentation.py
+++ b/dev/breeze/tests/test_provider_documentation.py
@@ -33,6 +33,7 @@
     _get_change_from_line,
     _get_changes_classified,
     _get_git_log_command,
+    classification_result,
     get_most_impactful_change,
     get_version_tag,
 )
@@ -391,3 +392,54 @@ def test_version_bump_for_provider_documentation(initial_version, bump_index, ex
 )
 def test_get_most_impactful_change(changes, expected):
     assert get_most_impactful_change(changes) == expected
+
+
+@pytest.mark.parametrize(
+    "changed_files, expected",
+    [
+        pytest.param(["providers/slack/docs/slack.rst"], "documentation", id="only_docs"),
+        pytest.param(["providers/slack/tests/test_slack.py"], "test_or_example_only", id="only_tests"),
+        pytest.param(
+            ["providers/slack/src/airflow/providers/slack/example_dags/example_notify.py"],
+            "test_or_example_only",
+            id="only_example_dags",
+        ),
+        pytest.param(
+            [
+                "providers/slack/tests/test_slack.py",
+                "providers/slack/src/airflow/providers/slack/example_dags/example_notify.py",
+            ],
+            "test_or_example_only",
+            id="tests_and_example_dags",
+        ),
+        pytest.param(
+            [
+                "providers/slack/tests/test_slack.py",
+                "providers/slack/docs/slack.rst",
+            ],
+            "documentation",
+            id="docs_and_tests",
+        ),
+        pytest.param(
+            [
+                "providers/slack/src/airflow/providers/slack/hooks/slack.py",
+                "providers/slack/docs/slack.rst",
+            ],
+            "documentation",
+            id="docs_and_real_code",
+        ),
+        pytest.param(
+            [
+                "providers/slack/src/airflow/providers/slack/hooks/slack.py",
+                "providers/slack/tests/test_slack.py",
+            ],
+            "other",
+            id="real_code_and_tests",
+        ),
+        pytest.param(["airflow/utils/db.py"], "other", id="non_provider_file"),
+        pytest.param([], "other", id="empty_commit"),
+    ],
+)
+def test_classify_provider_pr_files_logic(changed_files, expected):
+    result = classification_result(changed_files)
+    assert result == expected

From b90e5151ca8141da7ccc17a156040eb692421456 Mon Sep 17 00:00:00 2001
From: "Zhen-Lun (Kevin) Hong" <zhenlun.hong01@gmail.com>
Date: Sun, 29 Jun 2025 01:29:08 +0800
Subject: [PATCH 263/381] Provider Migration: Update github provider for
 Airflow 3.0 compatibility (#52415)

* Provider Migration: Update github provider for Airflow 3.0 compatibility

* refactor: move context if-else conditions into version_compat
---
 .../providers/github/operators/github.py      |  8 ++-----
 .../providers/github/sensors/github.py        | 13 ++----------
 .../providers/github/version_compat.py        | 16 ++++++++++++++
 .../unit/github/operators/test_github.py      | 21 +++++++++----------
 4 files changed, 30 insertions(+), 28 deletions(-)

diff --git a/providers/github/src/airflow/providers/github/operators/github.py b/providers/github/src/airflow/providers/github/operators/github.py
index fb368b9280e32..c7420e0680882 100644
--- a/providers/github/src/airflow/providers/github/operators/github.py
+++ b/providers/github/src/airflow/providers/github/operators/github.py
@@ -23,15 +23,11 @@
 from github import GithubException
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.github.hooks.github import GithubHook
+from airflow.providers.github.version_compat import BaseOperator
 
 if TYPE_CHECKING:
-    try:
-        from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+    from airflow.providers.github.version_compat import Context
 
 
 class GithubOperator(BaseOperator):
diff --git a/providers/github/src/airflow/providers/github/sensors/github.py b/providers/github/src/airflow/providers/github/sensors/github.py
index b234168494836..446b66a792b95 100644
--- a/providers/github/src/airflow/providers/github/sensors/github.py
+++ b/providers/github/src/airflow/providers/github/sensors/github.py
@@ -24,19 +24,10 @@
 
 from airflow.exceptions import AirflowException
 from airflow.providers.github.hooks.github import GithubHook
-from airflow.providers.github.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+from airflow.providers.github.version_compat import BaseSensorOperator
 
 if TYPE_CHECKING:
-    try:
-        from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+    from airflow.providers.github.version_compat import Context
 
 
 class GithubSensor(BaseSensorOperator):
diff --git a/providers/github/src/airflow/providers/github/version_compat.py b/providers/github/src/airflow/providers/github/version_compat.py
index 48d122b669696..682d19a5f49be 100644
--- a/providers/github/src/airflow/providers/github/version_compat.py
+++ b/providers/github/src/airflow/providers/github/version_compat.py
@@ -33,3 +33,19 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator, BaseSensorOperator
+    from airflow.sdk.definitions.context import Context
+else:
+    from airflow.models import BaseOperator
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+    from airflow.utils.context import Context
+
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+    "BaseSensorOperator",
+    "Context",
+]
diff --git a/providers/github/tests/unit/github/operators/test_github.py b/providers/github/tests/unit/github/operators/test_github.py
index cdfc72177e5a2..b6c6cf681fbb4 100644
--- a/providers/github/tests/unit/github/operators/test_github.py
+++ b/providers/github/tests/unit/github/operators/test_github.py
@@ -61,7 +61,7 @@ def test_operator_init_with_optional_args(self):
     @patch(
         "airflow.providers.github.hooks.github.GithubClient", autospec=True, return_value=github_client_mock
     )
-    def test_find_repos(self, github_mock):
+    def test_find_repos(self, github_mock, dag_maker):
         class MockRepository:
             pass
 
@@ -69,16 +69,15 @@ class MockRepository:
         repo.full_name = "apache/airflow"
 
         github_mock.return_value.get_repo.return_value = repo
-
-        github_operator = GithubOperator(
-            task_id="github-test",
-            github_method="get_repo",
-            github_method_args={"full_name_or_id": "apache/airflow"},
-            result_processor=lambda r: r.full_name,
-            dag=self.dag,
-        )
-
-        github_operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
+        with dag_maker():
+            GithubOperator(
+                task_id="github-test",
+                github_method="get_repo",
+                github_method_args={"full_name_or_id": "apache/airflow"},
+                result_processor=lambda r: r.full_name,
+            )
+        dr = dag_maker.create_dagrun()
+        dag_maker.run_ti("github-test", dr)
 
         assert github_mock.called
         assert github_mock.return_value.get_repo.called

From 165d5d511781a029cf4ee51d57fd70b5912a181b Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sat, 28 Jun 2025 20:04:16 +0200
Subject: [PATCH 264/381] Bring back providers compatibility checks (#52398)

The compatibility checks were removed in #52072 accidentally. This
one brings them back:

* Python 3.10
* do not add cloudant (it was not working for Python 3.9)
---
 .../src/airflow_breeze/global_constants.py    | 21 ++++++++++++++++++-
 .../cloud/operators/test_bigquery_dts.py      | 12 ++---------
 .../cloud/operators/test_datacatalog.py       | 14 +++++++++++++
 .../google/cloud/operators/test_functions.py  |  4 ++++
 4 files changed, 40 insertions(+), 11 deletions(-)

diff --git a/dev/breeze/src/airflow_breeze/global_constants.py b/dev/breeze/src/airflow_breeze/global_constants.py
index 224a6d3be56e1..afa0f4dae3b6f 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -732,7 +732,26 @@ def generate_provider_dependencies_if_needed():
     # END OF EXTRAS LIST UPDATED BY PRE COMMIT
 ]
 
-PROVIDERS_COMPATIBILITY_TESTS_MATRIX: list[dict[str, str | list[str]]] = []
+PROVIDERS_COMPATIBILITY_TESTS_MATRIX: list[dict[str, str | list[str]]] = [
+    {
+        "python-version": "3.10",
+        "airflow-version": "2.10.5",
+        "remove-providers": "common.messaging fab git keycloak",
+        "run-tests": "true",
+    },
+    {
+        "python-version": "3.10",
+        "airflow-version": "2.11.0",
+        "remove-providers": "common.messaging fab git keycloak",
+        "run-tests": "true",
+    },
+    {
+        "python-version": "3.10",
+        "airflow-version": "3.0.2",
+        "remove-providers": "",
+        "run-tests": "true",
+    },
+]
 
 # Number of slices for low dep tests
 NUMBER_OF_LOW_DEP_SLICES = 5
diff --git a/providers/google/tests/unit/google/cloud/operators/test_bigquery_dts.py b/providers/google/tests/unit/google/cloud/operators/test_bigquery_dts.py
index a4df65dc3c416..9c5bca9376c0a 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_bigquery_dts.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_bigquery_dts.py
@@ -29,8 +29,6 @@
     BigQueryDeleteDataTransferConfigOperator,
 )
 
-from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
-
 PROJECT_ID = "id"
 
 TRANSFER_CONFIG = {
@@ -73,10 +71,7 @@ def test_execute(self, mock_hook):
             retry=DEFAULT,
             timeout=None,
         )
-        if AIRFLOW_V_3_0_PLUS:
-            ti.xcom_push.assert_called_with(key="transfer_config_id", value="1a2b3c")
-        else:
-            ti.xcom_push.assert_called_with(key="transfer_config_id", value="1a2b3c", execution_date=None)
+        ti.xcom_push.assert_called_with(key="transfer_config_id", value="1a2b3c")
 
         assert "secret_access_key" not in return_value.get("params", {})
         assert "access_key_id" not in return_value.get("params", {})
@@ -131,10 +126,7 @@ def test_execute(self, mock_hook):
             retry=DEFAULT,
             timeout=None,
         )
-        if AIRFLOW_V_3_0_PLUS:
-            ti.xcom_push.assert_called_with(key="run_id", value="123")
-        else:
-            ti.xcom_push.assert_called_with(key="run_id", value="123", execution_date=None)
+        ti.xcom_push.assert_called_with(key="run_id", value="123")
 
     @mock.patch(
         f"{OPERATOR_MODULE_PATH}.BiqQueryDataTransferServiceHook",
diff --git a/providers/google/tests/unit/google/cloud/operators/test_datacatalog.py b/providers/google/tests/unit/google/cloud/operators/test_datacatalog.py
index da5b420edb374..f4cf88a478d18 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_datacatalog.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_datacatalog.py
@@ -51,6 +51,8 @@
     CloudDataCatalogUpdateTagTemplateOperator,
 )
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+
 if TYPE_CHECKING:
     from google.api_core.gapic_v1.method import _MethodDefault
 
@@ -163,6 +165,8 @@ def test_assert_valid_hook_call(self, mock_hook) -> None:
             )
         mock_ti = mock.MagicMock()
         mock_context = {"ti": mock_ti}
+        if not AIRFLOW_V_3_0_PLUS:
+            mock_context["task"] = task  # type: ignore[assignment]
         result = task.execute(context=mock_context)  # type: ignore[arg-type]
         mock_hook.assert_called_once_with(
             gcp_conn_id=TEST_GCP_CONN_ID,
@@ -205,6 +209,8 @@ def test_assert_valid_hook_call_when_exists(self, mock_hook) -> None:
             )
         mock_ti = mock.MagicMock()
         mock_context = {"ti": mock_ti}
+        if not AIRFLOW_V_3_0_PLUS:
+            mock_context["task"] = task  # type: ignore[assignment]
         result = task.execute(context=mock_context)  # type: ignore[arg-type]
         mock_hook.assert_called_once_with(
             gcp_conn_id=TEST_GCP_CONN_ID,
@@ -257,6 +263,8 @@ def test_assert_valid_hook_call(self, mock_hook) -> None:
             )
         mock_ti = mock.MagicMock()
         mock_context = {"ti": mock_ti}
+        if not AIRFLOW_V_3_0_PLUS:
+            mock_context["task"] = task  # type: ignore[assignment]
         result = task.execute(context=mock_context)  # type: ignore[arg-type]
         mock_hook.assert_called_once_with(
             gcp_conn_id=TEST_GCP_CONN_ID,
@@ -301,6 +309,8 @@ def test_assert_valid_hook_call(self, mock_hook) -> None:
             )
         mock_ti = mock.MagicMock()
         mock_context = {"ti": mock_ti}
+        if not AIRFLOW_V_3_0_PLUS:
+            mock_context["task"] = task  # type: ignore[assignment]
         result = task.execute(context=mock_context)  # type: ignore[arg-type]
         mock_hook.assert_called_once_with(
             gcp_conn_id=TEST_GCP_CONN_ID,
@@ -345,6 +355,8 @@ def test_assert_valid_hook_call(self, mock_hook) -> None:
             )
         mock_ti = mock.MagicMock()
         mock_context = {"ti": mock_ti}
+        if not AIRFLOW_V_3_0_PLUS:
+            mock_context["task"] = task  # type: ignore[assignment]
         result = task.execute(context=mock_context)  # type: ignore[arg-type]
         mock_hook.assert_called_once_with(
             gcp_conn_id=TEST_GCP_CONN_ID,
@@ -388,6 +400,8 @@ def test_assert_valid_hook_call(self, mock_hook) -> None:
             )
         mock_ti = mock.MagicMock()
         mock_context = {"ti": mock_ti}
+        if not AIRFLOW_V_3_0_PLUS:
+            mock_context["task"] = task  # type: ignore[assignment]
         result = task.execute(context=mock_context)  # type: ignore[arg-type]
         mock_hook.assert_called_once_with(
             gcp_conn_id=TEST_GCP_CONN_ID,
diff --git a/providers/google/tests/unit/google/cloud/operators/test_functions.py b/providers/google/tests/unit/google/cloud/operators/test_functions.py
index 47b3e4ebde680..6d1b48ec2f410 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_functions.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_functions.py
@@ -32,6 +32,8 @@
 )
 from airflow.version import version
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+
 EMPTY_CONTENT = b""
 MOCK_RESP_404 = httplib2.Response({"status": 404})
 
@@ -716,6 +718,8 @@ def test_execute(self, mock_gcf_hook):
         )
         mock_ti = mock.MagicMock()
         mock_context = {"ti": mock_ti}
+        if not AIRFLOW_V_3_0_PLUS:
+            mock_context["task"] = op
         op.execute(mock_context)
 
         mock_gcf_hook.assert_called_once_with(

From e95cd988f9c7ba4799d8572cb1395653de41d160 Mon Sep 17 00:00:00 2001
From: Elad Kalif <45845474+eladkal@users.noreply.github.com>
Date: Sat, 28 Jun 2025 21:23:51 +0300
Subject: [PATCH 265/381] Change analytics-python to segment-analytics-python
 (#52401)

* Change analytics-python to segment-analytics-python

* fix import
---
 providers/segment/pyproject.toml                              | 4 +++-
 .../segment/src/airflow/providers/segment/hooks/segment.py    | 2 +-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/providers/segment/pyproject.toml b/providers/segment/pyproject.toml
index 091fd96c6a638..653700c8fa3bf 100644
--- a/providers/segment/pyproject.toml
+++ b/providers/segment/pyproject.toml
@@ -57,7 +57,9 @@ requires-python = "~=3.10"
 # After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
 dependencies = [
     "apache-airflow>=2.10.0",
-    "analytics-python>=1.2.9",
+    # segment-analytics-python is in mantaincnce mode.
+    # Review changing to https://github.com/segmentio/public-api-sdk-python when ready? (currently in beta)
+    "segment-analytics-python>=2.3.0",
 ]
 
 [dependency-groups]
diff --git a/providers/segment/src/airflow/providers/segment/hooks/segment.py b/providers/segment/src/airflow/providers/segment/hooks/segment.py
index 2c47eea995693..2c95c03a86e4e 100644
--- a/providers/segment/src/airflow/providers/segment/hooks/segment.py
+++ b/providers/segment/src/airflow/providers/segment/hooks/segment.py
@@ -24,7 +24,7 @@
 
 from __future__ import annotations
 
-import analytics
+import segment.analytics as analytics
 
 from airflow.exceptions import AirflowException
 from airflow.hooks.base import BaseHook

From 6d001bc49e6879a698a8190e4769f7fe2a90608b Mon Sep 17 00:00:00 2001
From: "Zhen-Lun (Kevin) Hong" <zhenlun.hong01@gmail.com>
Date: Sun, 29 Jun 2025 02:45:12 +0800
Subject: [PATCH 266/381] Provider Migration: Update airbyte provider for
 Airflow 3.0 compatibility (#52418)

---
 .../providers/airbyte/operators/airbyte.py        |  9 ++-------
 .../airflow/providers/airbyte/sensors/airbyte.py  |  9 ++-------
 .../airflow/providers/airbyte/version_compat.py   | 15 +++++++++++++++
 3 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/providers/airbyte/src/airflow/providers/airbyte/operators/airbyte.py b/providers/airbyte/src/airflow/providers/airbyte/operators/airbyte.py
index 596765c4a5c53..c2091d61cb1a0 100644
--- a/providers/airbyte/src/airflow/providers/airbyte/operators/airbyte.py
+++ b/providers/airbyte/src/airflow/providers/airbyte/operators/airbyte.py
@@ -27,15 +27,10 @@
 from airflow.exceptions import AirflowException
 from airflow.providers.airbyte.hooks.airbyte import AirbyteHook
 from airflow.providers.airbyte.triggers.airbyte import AirbyteSyncTrigger
-from airflow.providers.airbyte.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseOperator
-else:
-    from airflow.models import BaseOperator
+from airflow.providers.airbyte.version_compat import BaseOperator
 
 if TYPE_CHECKING:
-    from airflow.utils.context import Context
+    from airflow.providers.airbyte.version_compat import Context
 
 
 class AirbyteTriggerSyncOperator(BaseOperator):
diff --git a/providers/airbyte/src/airflow/providers/airbyte/sensors/airbyte.py b/providers/airbyte/src/airflow/providers/airbyte/sensors/airbyte.py
index be13a31e7de6e..e8a7d1e2e4bf8 100644
--- a/providers/airbyte/src/airflow/providers/airbyte/sensors/airbyte.py
+++ b/providers/airbyte/src/airflow/providers/airbyte/sensors/airbyte.py
@@ -29,15 +29,10 @@
 from airflow.exceptions import AirflowException
 from airflow.providers.airbyte.hooks.airbyte import AirbyteHook
 from airflow.providers.airbyte.triggers.airbyte import AirbyteSyncTrigger
-from airflow.providers.airbyte.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+from airflow.providers.airbyte.version_compat import BaseSensorOperator
 
 if TYPE_CHECKING:
-    from airflow.utils.context import Context
+    from airflow.providers.airbyte.version_compat import Context
 
 
 class AirbyteJobSensor(BaseSensorOperator):
diff --git a/providers/airbyte/src/airflow/providers/airbyte/version_compat.py b/providers/airbyte/src/airflow/providers/airbyte/version_compat.py
index 48d122b669696..5faab587ffcef 100644
--- a/providers/airbyte/src/airflow/providers/airbyte/version_compat.py
+++ b/providers/airbyte/src/airflow/providers/airbyte/version_compat.py
@@ -33,3 +33,18 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator, BaseSensorOperator
+    from airflow.sdk.definitions.context import Context
+else:
+    from airflow.models import BaseOperator
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+    from airflow.utils.context import Context
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+    "BaseSensorOperator",
+    "Context",
+]

From fb94109212b53fb71e40f0378df861dcd98e67b3 Mon Sep 17 00:00:00 2001
From: bu <69127692+SCH227@users.noreply.github.com>
Date: Sat, 28 Jun 2025 14:50:18 -0400
Subject: [PATCH 267/381] Sanitize Username (#52419)

Escape user.username in flash banners to prevent potential HTML injection
---
 .../fab/auth_manager/security_manager/override.py         | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/providers/fab/src/airflow/providers/fab/auth_manager/security_manager/override.py b/providers/fab/src/airflow/providers/fab/auth_manager/security_manager/override.py
index 2a74e680b9151..db260f7e9cfdd 100644
--- a/providers/fab/src/airflow/providers/fab/auth_manager/security_manager/override.py
+++ b/providers/fab/src/airflow/providers/fab/auth_manager/security_manager/override.py
@@ -62,7 +62,7 @@
 from flask_jwt_extended import JWTManager
 from flask_login import LoginManager
 from itsdangerous import want_bytes
-from markupsafe import Markup
+from markupsafe import Markup, escape
 from sqlalchemy import func, inspect, or_, select
 from sqlalchemy.exc import MultipleResultsFound
 from sqlalchemy.orm import joinedload
@@ -547,8 +547,9 @@ def reset_user_sessions(self, user: User) -> None:
             user_session_model = interface.sql_session_model
             num_sessions = session.query(user_session_model).count()
             if num_sessions > MAX_NUM_DATABASE_USER_SESSIONS:
+                safe_username = escape(user.username)
                 self._cli_safe_flash(
-                    f"The old sessions for user {user.username} have <b>NOT</b> been deleted!<br>"
+                    f"The old sessions for user {safe_username} have <b>NOT</b> been deleted!<br>"
                     f"You have a lot ({num_sessions}) of user sessions in the 'SESSIONS' table in "
                     f"your database.<br> "
                     "This indicates that this deployment might have an automated API calls that create "
@@ -565,9 +566,10 @@ def reset_user_sessions(self, user: User) -> None:
                         session.delete(s)
                 session.commit()
         else:
+            safe_username = escape(user.username)
             self._cli_safe_flash(
                 "Since you are using `securecookie` session backend mechanism, we cannot prevent "
-                f"some old sessions for user {user.username} to be reused.<br> If you want to make sure "
+                f"some old sessions for user {safe_username} to be reused.<br> If you want to make sure "
                 "that the user is logged out from all sessions, you should consider using "
                 "`database` session backend mechanism.<br> You can also change the 'secret_key` "
                 "webserver configuration for all your webserver instances and restart the webserver. "

From 148a1c3222dd443a8e03938970d8498031db9cfc Mon Sep 17 00:00:00 2001
From: Elad Kalif <45845474+eladkal@users.noreply.github.com>
Date: Sat, 28 Jun 2025 23:21:15 +0300
Subject: [PATCH 268/381] Add a script to report outdated versions in
 constraints (#52406)

---
 dev/constraints-updated-version-check.py | 322 +++++++++++++++++++++++
 1 file changed, 322 insertions(+)
 create mode 100644 dev/constraints-updated-version-check.py

diff --git a/dev/constraints-updated-version-check.py b/dev/constraints-updated-version-check.py
new file mode 100644
index 0000000000000..d46c4886e32a1
--- /dev/null
+++ b/dev/constraints-updated-version-check.py
@@ -0,0 +1,322 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import argparse
+import json
+import re
+import urllib.request
+from datetime import datetime
+from urllib.error import HTTPError, URLError
+
+from packaging import version
+
+
+def parse_constraints_generation_date(lines):
+    for line in lines[:5]:
+        if "automatically generated on" in line:
+            date_str = line.split("generated on")[-1].strip()
+            try:
+                return datetime.fromisoformat(date_str).replace(tzinfo=None)
+            except ValueError:
+                print(f"Warning: Could not parse constraints generation date from: {date_str}")
+                return None
+    return None
+
+
+def get_constraints_file(python_version):
+    url = f"https://raw.githubusercontent.com/apache/airflow/refs/heads/constraints-main/constraints-{python_version}.txt"
+    try:
+        response = urllib.request.urlopen(url)
+        return response.read().decode("utf-8").splitlines()
+    except HTTPError as e:
+        if e.code == 404:
+            print(f"Error: Constraints file for Python {python_version} not found.")
+            print(f"URL: {url}")
+            print("Please check if the Python version is correct and the file exists.")
+        else:
+            print(f"HTTP Error: {e.code} - {e.reason}")
+        exit(1)
+    except URLError as e:
+        print(f"Error connecting to GitHub: {e.reason}")
+        exit(1)
+    except Exception as e:
+        print(f"Unexpected error: {str(e)}")
+        exit(1)
+
+
+def count_versions_between(releases, current_version, latest_version):
+    try:
+        current = version.parse(current_version)
+        latest = version.parse(latest_version)
+
+        if current == latest:
+            return 0
+
+        valid_versions = [
+            v
+            for v in releases.keys()
+            if releases[v] and not version.parse(v).is_prerelease and current < version.parse(v) <= latest
+        ]
+
+        return max(len(valid_versions), 1) if current < latest else 0
+    except Exception:
+        return 0
+
+
+def get_status_emoji(constraint_date, latest_date, is_latest_version):
+    """Determine status emoji based on how outdated the package is"""
+    if is_latest_version:
+        return "✅ OK             "  # Package is up to date (15 chars padding)
+
+    try:
+        constraint_dt = datetime.strptime(constraint_date, "%Y-%m-%d")
+        latest_dt = datetime.strptime(latest_date, "%Y-%m-%d")
+        days_diff = (latest_dt - constraint_dt).days
+
+        if days_diff <= 5:
+            return "📢 <5d          "
+        if days_diff <= 30:
+            return "⚠ <30d          "
+        return f"🚨 >{days_diff}d".ljust(15)
+    except Exception:
+        return "📢 N/A           "
+
+
+def get_max_package_length(packages):
+    return max(len(pkg) for pkg, _ in packages)
+
+
+def should_show_package(releases, latest_version, constraints_date, mode, is_latest_version):
+    if mode == "full":
+        return True
+    if mode == "diff-all":
+        return not is_latest_version
+    # diff-constraints
+    if is_latest_version:
+        return False
+
+    if not constraints_date:
+        return True
+
+    for version_info in releases.values():
+        if not version_info:
+            continue
+        try:
+            release_date = datetime.fromisoformat(
+                version_info[0]["upload_time_iso_8601"].replace("Z", "+00:00")
+            ).replace(tzinfo=None)
+            if release_date > constraints_date:
+                return False
+        except (KeyError, IndexError, ValueError):
+            continue
+
+    return True
+
+
+def get_first_newer_release_date_str(releases, current_version):
+    current = version.parse(current_version)
+    newer_versions = [
+        version.parse(v)
+        for v in releases
+        if version.parse(v) > current and releases[v] and not version.parse(v).is_prerelease
+    ]
+    if not newer_versions:
+        return None
+
+    first_newer_version = min(newer_versions)
+    upload_time_str = releases[str(first_newer_version)][0]["upload_time_iso_8601"]
+    return datetime.fromisoformat(upload_time_str.replace("Z", "+00:00")).strftime("%Y-%m-%d")
+
+
+def main():
+    parser = argparse.ArgumentParser(
+        description="""
+Python Package Version Checker for Airflow Constraints
+
+This script checks Python package versions against the Airflow constraints file and reports:
+- Current constrained version vs latest available version
+- Release dates for both versions
+- Status indicator showing how outdated the package is
+- Number of versions between constrained and latest version
+- Direct PyPI link to the package
+
+Status Indicators:
+✅ OK          - Package is up to date
+📢 <5d         - Less than 5 days behind latest version
+⚠ <30d         - Between 5-30 days behind latest version
+🚨 >Xd         - More than X days behind latest version (X = actual days)
+        """,
+        formatter_class=argparse.RawDescriptionHelpFormatter,
+    )
+
+    parser.add_argument(
+        "--python-version", required=True, help="Python version to check constraints for (e.g., 3.12)"
+    )
+    parser.add_argument(
+        "--mode",
+        choices=["full", "diff-constraints", "diff-all"],
+        default="diff-constraints",
+        help="""
+Operation modes:
+  full            : Show all packages, including up-to-date ones
+  diff-constraints: (Default) Show only outdated packages with updates
+                   before constraints generation
+  diff-all       : Show all outdated packages regardless of update timing
+                       """,
+    )
+
+    args = parser.parse_args()
+
+    lines = get_constraints_file(args.python_version)
+
+    constraints_date = parse_constraints_generation_date(lines)
+    if constraints_date:
+        print(f"Constraints file generation date: {constraints_date.strftime('%Y-%m-%d %H:%M:%S')}")
+        print()
+
+    packages = []
+    for line in lines:
+        line = line.strip()
+        if line and not line.startswith("#") and "@" not in line:
+            match = re.match(r"^([a-zA-Z0-9_.\-]+)==([\w.\-]+)$", line)
+            if match:
+                packages.append((match.group(1), match.group(2)))
+
+    max_pkg_length = get_max_package_length(packages)
+
+    col_widths = {
+        "Library Name": max(35, max_pkg_length),
+        "Constraint Version": 18,
+        "Constraint Date": 12,
+        "Latest Version": 15,
+        "Latest Date": 12,
+        "Status": 15,
+        "# Versions Behind": 16,
+        "PyPI Link": 60,
+    }
+
+    format_str = (
+        f"{{:<{col_widths['Library Name']}}} | "
+        f"{{:<{col_widths['Constraint Version']}}} | "
+        f"{{:<{col_widths['Constraint Date']}}} | "
+        f"{{:<{col_widths['Latest Version']}}} | "
+        f"{{:<{col_widths['Latest Date']}}} | "
+        f"{{:<{col_widths['Status']}}} | "
+        f"{{:>15}} | "
+        f"{{:<{col_widths['PyPI Link']}}}"
+    )
+
+    headers = [
+        "Library Name",
+        "Constraint Version",
+        "Constraint Date",
+        "Latest Version",
+        "Latest Date",
+        "Status",
+        "# Versions Behind",
+        "PyPI Link",
+    ]
+
+    print(format_str.format(*headers))
+    total_width = sum(col_widths.values()) + (len(col_widths) - 1) * 3
+    print("=" * total_width)
+
+    outdated_count = 0
+    skipped_count = 0
+
+    for pkg, pinned_version in packages:
+        try:
+            pypi_url = f"https://pypi.org/pypi/{pkg}/json"
+            with urllib.request.urlopen(pypi_url) as resp:
+                data = json.loads(resp.read().decode("utf-8"))
+                latest_version = data["info"]["version"]
+                releases = data["releases"]
+
+                latest_release_date = "N/A"
+                constraint_release_date = "N/A"
+
+                if releases.get(latest_version):
+                    latest_release_date = (
+                        datetime.fromisoformat(
+                            releases[latest_version][0]["upload_time_iso_8601"].replace("Z", "+00:00")
+                        )
+                        .replace(tzinfo=None)
+                        .strftime("%Y-%m-%d")
+                    )
+
+                if releases.get(pinned_version):
+                    constraint_release_date = (
+                        datetime.fromisoformat(
+                            releases[pinned_version][0]["upload_time_iso_8601"].replace("Z", "+00:00")
+                        )
+                        .replace(tzinfo=None)
+                        .strftime("%Y-%m-%d")
+                    )
+
+                is_latest_version = pinned_version == latest_version
+                versions_behind = count_versions_between(releases, pinned_version, latest_version)
+                versions_behind_str = str(versions_behind) if versions_behind > 0 else ""
+
+                if should_show_package(
+                    releases, latest_version, constraints_date, args.mode, is_latest_version
+                ):
+                    # Use the first newer release date instead of latest version date
+                    first_newer_date_str = get_first_newer_release_date_str(releases, pinned_version)
+                    status = get_status_emoji(
+                        first_newer_date_str or constraint_release_date,
+                        datetime.utcnow().strftime("%Y-%m-%d"),  # noqa: TID251
+                        is_latest_version,
+                    )
+                    pypi_link = f"https://pypi.org/project/{pkg}/{latest_version}"
+
+                    print(
+                        format_str.format(
+                            pkg,
+                            pinned_version[: col_widths["Constraint Version"]],
+                            constraint_release_date[: col_widths["Constraint Date"]],
+                            latest_version[: col_widths["Latest Version"]],
+                            latest_release_date[: col_widths["Latest Date"]],
+                            status[: col_widths["Status"]],
+                            versions_behind_str,
+                            pypi_link,
+                        )
+                    )
+                    if not is_latest_version:
+                        outdated_count += 1
+                    else:
+                        skipped_count += 1
+
+        except HTTPError as e:
+            print(f"Error fetching {pkg} from PyPI: HTTP {e.code}")
+            continue
+        except URLError as e:
+            print(f"Error fetching {pkg} from PyPI: {e.reason}")
+            continue
+        except Exception as e:
+            print(f"Error processing {pkg}: {str(e)}")
+            continue
+
+    print("=" * total_width)
+    print(f"\nTotal packages checked: {len(packages)}")
+    print(f"Outdated packages found: {outdated_count}")
+    if args.mode == "diff-constraints":
+        print(f"Skipped packages (updated after constraints generation): {skipped_count}")
+
+
+if __name__ == "__main__":
+    main()

From 87fe7ec94cab8a4b18a329a3139060741e549d7c Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Sat, 28 Jun 2025 21:38:58 +0100
Subject: [PATCH 269/381] Skip check-airflow-providers-bug-report-template in
 non main branch (#52426)

---
 dev/breeze/src/airflow_breeze/utils/selective_checks.py | 1 +
 dev/breeze/tests/test_selective_checks.py               | 3 ++-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/dev/breeze/src/airflow_breeze/utils/selective_checks.py b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
index f6e302fbf4c93..02836fcf93891 100644
--- a/dev/breeze/src/airflow_breeze/utils/selective_checks.py
+++ b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
@@ -1230,6 +1230,7 @@ def skip_pre_commits(self) -> str:
                 (
                     "compile-fab-assets",
                     "generate-openapi-spec-fab",
+                    "check-airflow-providers-bug-report-template",
                     "check-airflow-provider-compatibility",
                     "check-extra-packages-references",
                     "check-provider-yaml-valid",
diff --git a/dev/breeze/tests/test_selective_checks.py b/dev/breeze/tests/test_selective_checks.py
index 1b052ce7ada62..4b16252ad0619 100644
--- a/dev/breeze/tests/test_selective_checks.py
+++ b/dev/breeze/tests/test_selective_checks.py
@@ -160,7 +160,8 @@
 
 
 All_SKIPPED_COMMITS_IF_NON_MAIN_BRANCH = (
-    "check-airflow-provider-compatibility,check-extra-packages-references,check-provider-yaml-valid,"
+    "check-airflow-provider-compatibility,check-airflow-providers-bug-report-template,"
+    "check-extra-packages-references,check-provider-yaml-valid,"
     "compile-fab-assets,generate-openapi-spec-fab,identity,"
     "lint-helm-chart,mypy-airflow-core,mypy-airflow-ctl,mypy-dev,"
     "mypy-devel-common,mypy-providers,mypy-task-sdk,validate-operators-init"

From f685ed2377b0b20cd1f4aa794fb2288e3f9d1014 Mon Sep 17 00:00:00 2001
From: Jens Scheffler <95105677+jscheffl@users.noreply.github.com>
Date: Sat, 28 Jun 2025 22:48:09 +0200
Subject: [PATCH 270/381] Clean some leftovers of Python 3.9 removal - Airflow
 core pieces (#52424)

---
 .../docs/installation/installing-from-pypi.rst     | 14 +++++++-------
 airflow-core/docs/installation/prerequisites.rst   |  2 +-
 airflow-core/docs/start.rst                        |  2 +-
 airflow-core/pyproject.toml                        |  3 +--
 .../api_fastapi/core_api/datamodels/connections.py |  2 +-
 .../api_fastapi/core_api/datamodels/variables.py   |  2 +-
 6 files changed, 12 insertions(+), 13 deletions(-)

diff --git a/airflow-core/docs/installation/installing-from-pypi.rst b/airflow-core/docs/installation/installing-from-pypi.rst
index b51b897b1344b..63bcee23e3244 100644
--- a/airflow-core/docs/installation/installing-from-pypi.rst
+++ b/airflow-core/docs/installation/installing-from-pypi.rst
@@ -105,7 +105,7 @@ You can create the URL to the file substituting the variables in the template be
 where:
 
 - ``AIRFLOW_VERSION`` - Airflow version (e.g. :subst-code:`|version|`) or ``main``, ``2-0``, for latest development version
-- ``PYTHON_VERSION`` Python version e.g. ``3.9``, ``3.10``
+- ``PYTHON_VERSION`` Python version e.g. ``3.10``, ``3.11``
 
 The examples below assume that you want to use install Airflow in a reproducible way with the ``celery`` extra,
 but you can pick your own set of extras and providers to install.
@@ -321,9 +321,9 @@ dependencies compatible with just Airflow core at the moment Airflow was release
 
     AIRFLOW_VERSION=|version|
     PYTHON_VERSION="$(python -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')"
-    # For example: 3.9
+    # For example: 3.10
     CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-no-providers-${PYTHON_VERSION}.txt"
-    # For example: https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-no-providers-3.9.txt
+    # For example: https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-no-providers-3.10.txt
     pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"
 
 Troubleshooting
@@ -347,7 +347,7 @@ Symbol not found: ``_Py_GetArgcArgv``
 =====================================
 
 If you see ``Symbol not found: _Py_GetArgcArgv`` while starting or importing ``airflow``, this may mean that you are using an incompatible version of Python.
-For a homebrew installed version of Python, this is generally caused by using Python in ``/usr/local/opt/bin`` rather than the Frameworks installation (e.g. for ``python 3.9``: ``/usr/local/opt/python@3.9/Frameworks/Python.framework/Versions/3.9``).
+For a homebrew installed version of Python, this is generally caused by using Python in ``/usr/local/opt/bin`` rather than the Frameworks installation (e.g. for ``python 3.10``: ``/usr/local/opt/python@3.10/Frameworks/Python.framework/Versions/3.10``).
 
 The crux of the issue is that a library Airflow depends on, ``setproctitle``, uses a non-public Python API
 which is not available from the standard installation ``/usr/local/opt/`` (which symlinks to a path under ``/usr/local/Cellar``).
@@ -356,9 +356,9 @@ An easy fix is just to ensure you use a version of Python that has a dylib of th
 
 .. code-block:: bash
 
-  # Note: these instructions are for python3.9 but can be loosely modified for other versions
-  brew install python@3.9
-  virtualenv -p /usr/local/opt/python@3.9/Frameworks/Python.framework/Versions/3.9/bin/python3 .toy-venv
+  # Note: these instructions are for python3.10 but can be loosely modified for other versions
+  brew install python@3.10
+  virtualenv -p /usr/local/opt/python@3.10/Frameworks/Python.framework/Versions/3.10/bin/python3 .toy-venv
   source .toy-venv/bin/activate
   pip install apache-airflow
   python
diff --git a/airflow-core/docs/installation/prerequisites.rst b/airflow-core/docs/installation/prerequisites.rst
index 323af74f8e515..6859918d9c65c 100644
--- a/airflow-core/docs/installation/prerequisites.rst
+++ b/airflow-core/docs/installation/prerequisites.rst
@@ -20,7 +20,7 @@ Prerequisites
 
 Airflow® is tested with:
 
-* Python: 3.9, 3.10, 3.11, 3.12
+* Python: 3.10, 3.11, 3.12
 
 * Databases:
 
diff --git a/airflow-core/docs/start.rst b/airflow-core/docs/start.rst
index 07af3ba73028f..e992e94ac8f95 100644
--- a/airflow-core/docs/start.rst
+++ b/airflow-core/docs/start.rst
@@ -24,7 +24,7 @@ This quick start guide will help you bootstrap an Airflow standalone instance on
 
 .. note::
 
-   Successful installation requires a Python 3 environment. Starting with Airflow 2.7.0, Airflow supports Python 3.9, 3.10, 3.11, and 3.12.
+   Successful installation requires a Python 3 environment. Starting with Airflow 3.1.0, Airflow supports Python 3.10, 3.11, and 3.12.
 
    Officially supported installation methods is with``pip`.
 
diff --git a/airflow-core/pyproject.toml b/airflow-core/pyproject.toml
index 36826c11661a2..d5d03e4021c02 100644
--- a/airflow-core/pyproject.toml
+++ b/airflow-core/pyproject.toml
@@ -35,7 +35,7 @@ name = "apache-airflow-core"
 description = "Core packages for Apache Airflow, schedule and API server"
 readme = { file = "README.md", content-type = "text/markdown" }
 license-files.globs = ["LICENSE", "3rd-party-licenses/*.txt", "NOTICE"]
-requires-python = "~=3.9,<3.13"
+requires-python = "~=3.10,<3.13"
 authors = [
     { name = "Apache Software Foundation", email = "dev@airflow.apache.org" },
 ]
@@ -51,7 +51,6 @@ classifiers = [
     "Intended Audience :: Developers",
     "Intended Audience :: System Administrators",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/connections.py b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/connections.py
index fee330e1fd1d6..2a6bd6bec8af2 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/connections.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/connections.py
@@ -47,7 +47,7 @@ class ConnectionResponse(BaseModel):
     def redact_password(cls, v: str | None, field_info: ValidationInfo) -> str | None:
         if v is None:
             return None
-        return redact(v, field_info.field_name)
+        return str(redact(v, field_info.field_name))
 
     @field_validator("extra", mode="before")
     @classmethod
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/variables.py b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/variables.py
index 2905e752650cd..d60f052f77705 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/variables.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/variables.py
@@ -46,7 +46,7 @@ def redact_val(self) -> Self:
             return self
         except json.JSONDecodeError:
             # value is not a serialized string representation of a dict.
-            self.val = redact(self.val, self.key)
+            self.val = str(redact(self.val, self.key))
             return self
 
 

From 7c2bd9ad77cee0393a4a64d4e6cdab03fdd0cd17 Mon Sep 17 00:00:00 2001
From: Jens Scheffler <95105677+jscheffl@users.noreply.github.com>
Date: Sat, 28 Jun 2025 22:48:21 +0200
Subject: [PATCH 271/381] Clean some leftovers of Python 3.9 removal - Github
 pieces (#52423)

---
 .github/actions/install-pre-commit/action.yml        | 2 +-
 .github/actions/prepare_all_ci_images/action.yml     | 1 +
 .github/workflows/publish-docs-to-s3.yml             | 4 ++--
 .github/workflows/release_dockerhub_image.yml        | 2 +-
 .github/workflows/release_single_dockerhub_image.yml | 2 +-
 5 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/.github/actions/install-pre-commit/action.yml b/.github/actions/install-pre-commit/action.yml
index 9f4b091fddcea..3d3196c31b5be 100644
--- a/.github/actions/install-pre-commit/action.yml
+++ b/.github/actions/install-pre-commit/action.yml
@@ -21,7 +21,7 @@ description: 'Installs pre-commit and related packages'
 inputs:
   python-version:
     description: 'Python version to use'
-    default: "3.9"
+    default: "3.10"
   uv-version:
     description: 'uv version to use'
     default: "0.7.16"  # Keep this comment to allow automatic replacement of uv version
diff --git a/.github/actions/prepare_all_ci_images/action.yml b/.github/actions/prepare_all_ci_images/action.yml
index 7b461f4e3e2db..f245d5081d5d8 100644
--- a/.github/actions/prepare_all_ci_images/action.yml
+++ b/.github/actions/prepare_all_ci_images/action.yml
@@ -36,6 +36,7 @@ runs:
     #       this should be implemented in stash action as list of keys to download.
     #       That includes 3.9 - 3.12 as we are backporting it to v3-0-test branch
     #       This is captured in https://github.com/apache/airflow/issues/45268
+    #       So we actually need 3.9 even if 3.9 support on main is dropped!
     - name: "Restore CI docker image ${{ inputs.platform }}:3.9"
       uses: ./.github/actions/prepare_single_ci_image
       with:
diff --git a/.github/workflows/publish-docs-to-s3.yml b/.github/workflows/publish-docs-to-s3.yml
index 6139d33182e50..7d93753146458 100644
--- a/.github/workflows/publish-docs-to-s3.yml
+++ b/.github/workflows/publish-docs-to-s3.yml
@@ -118,7 +118,7 @@ jobs:
       GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
       GITHUB_USERNAME: ${{ github.actor }}
       INCLUDE_SUCCESS_OUTPUTS: false
-      PYTHON_MAJOR_MINOR_VERSION: 3.9
+      PYTHON_MAJOR_MINOR_VERSION: 3.10
       VERBOSE: "true"
       EXTRA_BUILD_OPTIONS: ${{ needs.build-info.outputs.extra-build-options }}
     steps:
@@ -187,7 +187,7 @@ jobs:
       GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
       GITHUB_USERNAME: ${{ github.actor }}
       INCLUDE_SUCCESS_OUTPUTS: false
-      PYTHON_MAJOR_MINOR_VERSION: 3.9
+      PYTHON_MAJOR_MINOR_VERSION: 3.10
       VERBOSE: "true"
     steps:
       - name: "Cleanup repo"
diff --git a/.github/workflows/release_dockerhub_image.yml b/.github/workflows/release_dockerhub_image.yml
index 2499e521d74a3..1ec9ec8f91be4 100644
--- a/.github/workflows/release_dockerhub_image.yml
+++ b/.github/workflows/release_dockerhub_image.yml
@@ -29,7 +29,7 @@ on:  # yamllint disable-line rule:truthy
         default: false
       limitPythonVersions:
         type: string
-        description: 'Force python versions (e.g. "3.9 3.10")'
+        description: 'Force python versions (e.g. "3.10 3.11")'
         default: ''
 permissions:
   contents: read
diff --git a/.github/workflows/release_single_dockerhub_image.yml b/.github/workflows/release_single_dockerhub_image.yml
index fd572adbabab1..b308de93e72ee 100644
--- a/.github/workflows/release_single_dockerhub_image.yml
+++ b/.github/workflows/release_single_dockerhub_image.yml
@@ -29,7 +29,7 @@ on:  # yamllint disable-line rule:truthy
         type: string
         required: true
       pythonVersion:
-        description: 'Python version (e.g. 3.8, 3.9, 3.10, 3.11)'
+        description: 'Python version (e.g. 3.10, 3.11)'
         type: string
         required: true
       skipLatest:

From 8fdb7766709f0eb5650f368e83d7f3b757eb5c26 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sat, 28 Jun 2025 23:12:58 +0200
Subject: [PATCH 272/381] Add inline dependencies for uv run and colors to
 dependencies script (#52428)

---
 dev/constraints-updated-version-check.py | 168 +++++++++++------------
 1 file changed, 84 insertions(+), 84 deletions(-)

diff --git a/dev/constraints-updated-version-check.py b/dev/constraints-updated-version-check.py
index d46c4886e32a1..7b0b23c57704e 100644
--- a/dev/constraints-updated-version-check.py
+++ b/dev/constraints-updated-version-check.py
@@ -14,16 +14,27 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+# /// script
+# requires-python = ">=3.11"
+# dependencies = [
+#   "rich",
+#   "rich-click",
+#   "packaging",
+# ]
+# ///
 from __future__ import annotations
 
-import argparse
 import json
 import re
 import urllib.request
 from datetime import datetime
 from urllib.error import HTTPError, URLError
 
+import rich_click as click
 from packaging import version
+from rich.console import Console
+
+console = Console(width=400, color_system="standard")
 
 
 def parse_constraints_generation_date(lines):
@@ -33,7 +44,9 @@ def parse_constraints_generation_date(lines):
             try:
                 return datetime.fromisoformat(date_str).replace(tzinfo=None)
             except ValueError:
-                print(f"Warning: Could not parse constraints generation date from: {date_str}")
+                console.print(
+                    f"[yellow]Warning: Could not parse constraints generation date from: {date_str}[/]"
+                )
                 return None
     return None
 
@@ -45,17 +58,17 @@ def get_constraints_file(python_version):
         return response.read().decode("utf-8").splitlines()
     except HTTPError as e:
         if e.code == 404:
-            print(f"Error: Constraints file for Python {python_version} not found.")
-            print(f"URL: {url}")
-            print("Please check if the Python version is correct and the file exists.")
+            console.print(f"[bold red]Error: Constraints file for Python {python_version} not found.[/]")
+            console.print(f"[bold red]URL: {url}[/]")
+            console.print("[bold red]Please check if the Python version is correct and the file exists.[/]")
         else:
-            print(f"HTTP Error: {e.code} - {e.reason}")
+            console.print(f"[bold red]HTTP Error: {e.code} - {e.reason}[/]")
         exit(1)
     except URLError as e:
-        print(f"Error connecting to GitHub: {e.reason}")
+        console.print(f"[bold red]Error connecting to GitHub: {e.reason}[/]")
         exit(1)
     except Exception as e:
-        print(f"Unexpected error: {str(e)}")
+        console.print(f"[bold red]Unexpected error: {str(e)}[/]")
         exit(1)
 
 
@@ -143,51 +156,15 @@ def get_first_newer_release_date_str(releases, current_version):
     return datetime.fromisoformat(upload_time_str.replace("Z", "+00:00")).strftime("%Y-%m-%d")
 
 
-def main():
-    parser = argparse.ArgumentParser(
-        description="""
-Python Package Version Checker for Airflow Constraints
-
-This script checks Python package versions against the Airflow constraints file and reports:
-- Current constrained version vs latest available version
-- Release dates for both versions
-- Status indicator showing how outdated the package is
-- Number of versions between constrained and latest version
-- Direct PyPI link to the package
-
-Status Indicators:
-✅ OK          - Package is up to date
-📢 <5d         - Less than 5 days behind latest version
-⚠ <30d         - Between 5-30 days behind latest version
-🚨 >Xd         - More than X days behind latest version (X = actual days)
-        """,
-        formatter_class=argparse.RawDescriptionHelpFormatter,
-    )
-
-    parser.add_argument(
-        "--python-version", required=True, help="Python version to check constraints for (e.g., 3.12)"
-    )
-    parser.add_argument(
-        "--mode",
-        choices=["full", "diff-constraints", "diff-all"],
-        default="diff-constraints",
-        help="""
-Operation modes:
-  full            : Show all packages, including up-to-date ones
-  diff-constraints: (Default) Show only outdated packages with updates
-                   before constraints generation
-  diff-all       : Show all outdated packages regardless of update timing
-                       """,
-    )
-
-    args = parser.parse_args()
-
-    lines = get_constraints_file(args.python_version)
+def main(python_version, mode):
+    lines = get_constraints_file(python_version)
 
     constraints_date = parse_constraints_generation_date(lines)
     if constraints_date:
-        print(f"Constraints file generation date: {constraints_date.strftime('%Y-%m-%d %H:%M:%S')}")
-        print()
+        console.print(
+            f"[bold cyan]Constraints file generation date:[/] [white]{constraints_date.strftime('%Y-%m-%d %H:%M:%S')}[/]"
+        )
+        console.print()
 
     packages = []
     for line in lines:
@@ -202,11 +179,11 @@ def main():
     col_widths = {
         "Library Name": max(35, max_pkg_length),
         "Constraint Version": 18,
-        "Constraint Date": 12,
+        "Constraint Date": 15,
         "Latest Version": 15,
         "Latest Date": 12,
-        "Status": 15,
-        "# Versions Behind": 16,
+        "📢 Status": 17,
+        "# Versions Behind": 19,
         "PyPI Link": 60,
     }
 
@@ -216,8 +193,8 @@ def main():
         f"{{:<{col_widths['Constraint Date']}}} | "
         f"{{:<{col_widths['Latest Version']}}} | "
         f"{{:<{col_widths['Latest Date']}}} | "
-        f"{{:<{col_widths['Status']}}} | "
-        f"{{:>15}} | "
+        f"{{:<{col_widths['📢 Status']}}} | "
+        f"{{:<{col_widths['# Versions Behind']}}} | "
         f"{{:<{col_widths['PyPI Link']}}}"
     )
 
@@ -227,14 +204,14 @@ def main():
         "Constraint Date",
         "Latest Version",
         "Latest Date",
-        "Status",
+        "📢 Status",
         "# Versions Behind",
         "PyPI Link",
     ]
 
-    print(format_str.format(*headers))
+    console.print(f"[bold magenta]{format_str.format(*headers)}[/]")
     total_width = sum(col_widths.values()) + (len(col_widths) - 1) * 3
-    print("=" * total_width)
+    console.print(f"[magenta]{'=' * total_width}[/]")
 
     outdated_count = 0
     skipped_count = 0
@@ -272,51 +249,74 @@ def main():
                 versions_behind = count_versions_between(releases, pinned_version, latest_version)
                 versions_behind_str = str(versions_behind) if versions_behind > 0 else ""
 
-                if should_show_package(
-                    releases, latest_version, constraints_date, args.mode, is_latest_version
-                ):
+                if should_show_package(releases, latest_version, constraints_date, mode, is_latest_version):
                     # Use the first newer release date instead of latest version date
                     first_newer_date_str = get_first_newer_release_date_str(releases, pinned_version)
                     status = get_status_emoji(
                         first_newer_date_str or constraint_release_date,
-                        datetime.utcnow().strftime("%Y-%m-%d"),  # noqa: TID251
+                        datetime.now().strftime("%Y-%m-%d"),
                         is_latest_version,
                     )
                     pypi_link = f"https://pypi.org/project/{pkg}/{latest_version}"
 
-                    print(
-                        format_str.format(
-                            pkg,
-                            pinned_version[: col_widths["Constraint Version"]],
-                            constraint_release_date[: col_widths["Constraint Date"]],
-                            latest_version[: col_widths["Latest Version"]],
-                            latest_release_date[: col_widths["Latest Date"]],
-                            status[: col_widths["Status"]],
-                            versions_behind_str,
-                            pypi_link,
-                        )
+                    color = (
+                        "green"
+                        if is_latest_version
+                        else ("yellow" if status.startswith("📢") or status.startswith("⚠") else "red")
+                    )
+                    string_to_print = format_str.format(
+                        pkg,
+                        pinned_version[: col_widths["Constraint Version"]],
+                        constraint_release_date[: col_widths["Constraint Date"]],
+                        latest_version[: col_widths["Latest Version"]],
+                        latest_release_date[: col_widths["Latest Date"]],
+                        # The utf character takes 2 bytes so we need to subtract 1
+                        status[: col_widths["📢 Status"]],
+                        versions_behind_str,
+                        pypi_link,
                     )
+                    console.print(f"[{color}]{string_to_print}[/]")
                     if not is_latest_version:
                         outdated_count += 1
-                    else:
-                        skipped_count += 1
+                else:
+                    skipped_count += 1
 
         except HTTPError as e:
-            print(f"Error fetching {pkg} from PyPI: HTTP {e.code}")
+            console.print(f"[bold red]Error fetching {pkg} from PyPI: HTTP {e.code}[/]")
             continue
         except URLError as e:
-            print(f"Error fetching {pkg} from PyPI: {e.reason}")
+            console.print(f"[bold red]Error fetching {pkg} from PyPI: {e.reason}[/]")
             continue
         except Exception as e:
-            print(f"Error processing {pkg}: {str(e)}")
+            console.print(f"[bold red]Error processing {pkg}: {str(e)}[/]")
             continue
 
-    print("=" * total_width)
-    print(f"\nTotal packages checked: {len(packages)}")
-    print(f"Outdated packages found: {outdated_count}")
-    if args.mode == "diff-constraints":
-        print(f"Skipped packages (updated after constraints generation): {skipped_count}")
+    console.print(f"[magenta]{'=' * total_width}[/]")
+    console.print(f"[bold cyan]\nTotal packages checked:[/] [white]{len(packages)}[/]")
+    console.print(f"[bold yellow]Outdated packages found:[/] [white]{outdated_count}[/]")
+    if mode == "diff-constraints":
+        console.print(
+            f"[bold blue]Skipped packages (updated after constraints generation):[/] [white]{skipped_count}[/]"
+        )
+
+
+@click.command()
+@click.option(
+    "--python-version",
+    required=False,
+    default="3.10",
+    help="Python version to check constraints for (e.g., 3.12)",
+)
+@click.option(
+    "--mode",
+    type=click.Choice(["full", "diff-constraints", "diff-all"]),
+    default="diff-constraints",
+    show_default=True,
+    help="Operation mode: full, diff-constraints, or diff-all.",
+)
+def cli(python_version, mode):
+    main(python_version, mode)
 
 
 if __name__ == "__main__":
-    main()
+    cli()

From 85640d38893cc462f752ab8ff33fa60d9132c254 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sat, 28 Jun 2025 23:46:29 +0200
Subject: [PATCH 273/381] Make sure all test version imports come from
 test_common (#52425)

---
 .pre-commit-config.yaml                       |   7 +
 contributing-docs/08_static_code_checks.rst   |   2 +
 .../doc/images/output_static-checks.svg       | 172 +++++++++---------
 .../doc/images/output_static-checks.txt       |   2 +-
 .../src/airflow_breeze/pre_commit_ids.py      |   1 +
 .../system/amazon/aws/example_sagemaker.py    |   2 +-
 .../amazon/aws/tests/test_aws_auth_manager.py |   2 +-
 .../tests/system/amazon/aws/utils/__init__.py |   3 +-
 .../aws/auth_manager/cli/test_avp_commands.py |   2 +-
 .../aws/auth_manager/cli/test_definition.py   |   2 +-
 .../aws/auth_manager/routes/test_login.py     |   2 +-
 .../aws/auth_manager/test_aws_auth_manager.py |   2 +-
 .../unit/amazon/aws/links/test_athena.py      |   2 +-
 .../tests/unit/amazon/aws/links/test_batch.py |   2 +-
 .../unit/amazon/aws/links/test_comprehend.py  |   2 +-
 .../unit/amazon/aws/links/test_datasync.py    |   2 +-
 .../tests/unit/amazon/aws/links/test_ec2.py   |   2 +-
 .../tests/unit/amazon/aws/links/test_emr.py   |   2 +-
 .../tests/unit/amazon/aws/links/test_glue.py  |   2 +-
 .../tests/unit/amazon/aws/links/test_logs.py  |   2 +-
 .../unit/amazon/aws/links/test_sagemaker.py   |   2 +-
 .../links/test_sagemaker_unified_studio.py    |   2 +-
 .../amazon/aws/links/test_step_function.py    |   2 +-
 .../unit/apache/beam/operators/test_beam.py   |   3 +-
 .../kubernetes/cli/test_kubernetes_command.py |   2 +-
 .../kubernetes/decorators/test_kubernetes.py  |   2 +-
 .../decorators/test_kubernetes_cmd.py         |   3 +-
 .../decorators/test_kubernetes_commons.py     |   2 +-
 .../kubernetes/test_template_rendering.py     |   2 +-
 .../io/example_file_transfer_local_to_s3.py   |   3 +-
 .../tests/unit/common/io/xcom/test_backend.py |   2 +-
 .../plugins/test_databricks_workflow.py       |   2 +-
 .../unit/dbt/cloud/operators/test_dbt.py      |   3 +-
 .../unit/docker/decorators/test_docker.py     |   2 +-
 .../example_kubernetes_engine.py              |   2 +-
 .../example_kubernetes_engine_async.py        |   2 +-
 .../cloud/translate/example_translate.py      |   3 +-
 .../unit/google/cloud/links/test_base_link.py |   3 +-
 .../unit/google/cloud/links/test_cloud_run.py |   3 +-
 .../unit/google/cloud/links/test_dataplex.py  |   3 +-
 .../unit/google/cloud/links/test_translate.py |   2 +-
 .../google/cloud/operators/test_dataproc.py   |   2 +-
 .../common/auth_backend/test_google_openid.py |   2 +-
 .../microsoft/azure/operators/test_adx.py     |   3 +-
 .../microsoft/azure/operators/test_synapse.py |   3 +-
 .../unit/openlineage/extractors/test_base.py  |   2 +-
 .../unit/openlineage/plugins/test_listener.py |   3 +-
 .../utils/test_selective_enable.py            |   2 +-
 .../unit/openlineage/utils/test_utils.py      |   3 +-
 .../snowflake/decorators/test_snowpark.py     |   3 +-
 .../unit/standard/operators/test_python.py    |   3 +-
 .../sensors/test_external_task_sensor.py      |   3 +-
 .../unit/standard/sensors/test_time_delta.py  |   2 +-
 .../unit/standard/sensors/test_weekday.py     |   2 +-
 .../tests/unit/standard/triggers/test_file.py |   3 +-
 .../check_airflow_v_imports_in_tests.py       |  81 +++++++++
 56 files changed, 247 insertions(+), 135 deletions(-)
 create mode 100755 scripts/ci/pre_commit/check_airflow_v_imports_in_tests.py

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 265f52fd1c2ba..e8e0a5d525c4e 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -413,6 +413,13 @@ repos:
           ^airflow_breeze/templates/PROVIDER_README_TEMPLATE\.rst\.jinja2$
         additional_dependencies: ['rich>=12.4.4','requests>=2.31.0']
         require_serial: true
+      - id: check-airflow-v-imports-in-tests
+        name: Check AIRFLOW_V imports in tests
+        language: python
+        entry: ./scripts/ci/pre_commit/check_airflow_v_imports_in_tests.py
+        pass_filenames: true
+        files: ^providers/.*/tests/.+\.py$
+        additional_dependencies: ['rich>=12.4.4']
       - id: ruff
         name: Run 'ruff' for extremely fast Python linting
         description: "Run 'ruff' for extremely fast Python linting"
diff --git a/contributing-docs/08_static_code_checks.rst b/contributing-docs/08_static_code_checks.rst
index 70fd44db68d8f..9d6c1b764a030 100644
--- a/contributing-docs/08_static_code_checks.rst
+++ b/contributing-docs/08_static_code_checks.rst
@@ -129,6 +129,8 @@ require Breeze Docker image to be built locally.
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
 | check-airflow-providers-bug-report-template               | Sort airflow-bug-report provider list                  |         |
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
+| check-airflow-v-imports-in-tests                          | Check AIRFLOW_V imports in tests                       |         |
++-----------------------------------------------------------+--------------------------------------------------------+---------+
 | check-apache-license-rat                                  | Check if licenses are OK for Apache                    |         |
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
 | check-base-operator-partial-arguments                     | Check BaseOperator and partial() arguments             |         |
diff --git a/dev/breeze/doc/images/output_static-checks.svg b/dev/breeze/doc/images/output_static-checks.svg
index 0e6fb97574d95..5331a9867ce2c 100644
--- a/dev/breeze/doc/images/output_static-checks.svg
+++ b/dev/breeze/doc/images/output_static-checks.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 2246.0" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 2270.4" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-static-checks-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="2195.0" />
+      <rect x="0" y="0" width="1463.0" height="2219.4" />
     </clipPath>
     <clipPath id="breeze-static-checks-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -312,9 +312,12 @@
 <clipPath id="breeze-static-checks-line-88">
     <rect x="0" y="2148.7" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-static-checks-line-89">
+    <rect x="0" y="2173.1" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2244" rx="8"/><text class="breeze-static-checks-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;static-checks</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2268.4" rx="8"/><text class="breeze-static-checks-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;static-checks</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -333,87 +336,88 @@
 </text><text class="breeze-static-checks-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-6)">│</text><text class="breeze-static-checks-r4" x="24.4" y="166.4" textLength="73.2" clip-path="url(#breeze-static-checks-line-6)">--type</text><text class="breeze-static-checks-r6" x="402.6" y="166.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-6)">-t</text><text class="breeze-static-checks-r1" x="451.4" y="166.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-6)">Type(s)&#160;of&#160;the&#160;static&#160;checks&#160;to&#160;run.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-6)">│</text><text class="breeze-static-checks-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-6)">
 </text><text class="breeze-static-checks-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-7)">│</text><text class="breeze-static-checks-r7" x="451.4" y="190.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-7)">(all&#160;|&#160;bandit&#160;|&#160;blacken-docs&#160;|&#160;check-aiobotocore-optional&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-7)">│</text><text class="breeze-static-checks-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-7)">
 </text><text class="breeze-static-checks-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-8)">│</text><text class="breeze-static-checks-r7" x="451.4" y="215.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-8)">check-airflow-k8s-not-used&#160;|&#160;check-airflow-providers-bug-report-template&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-8)">│</text><text class="breeze-static-checks-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-8)">
-</text><text class="breeze-static-checks-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-9)">│</text><text class="breeze-static-checks-r7" x="451.4" y="239.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-9)">check-apache-license-rat&#160;|&#160;check-base-operator-partial-arguments&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-9)">│</text><text class="breeze-static-checks-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-9)">
-</text><text class="breeze-static-checks-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-static-checks-line-10)">│</text><text class="breeze-static-checks-r7" x="451.4" y="264" textLength="988.2" clip-path="url(#breeze-static-checks-line-10)">check-base-operator-usage&#160;|&#160;check-boring-cyborg-configuration&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-static-checks-line-10)">│</text><text class="breeze-static-checks-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-static-checks-line-10)">
-</text><text class="breeze-static-checks-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-11)">│</text><text class="breeze-static-checks-r7" x="451.4" y="288.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-11)">check-breeze-top-dependencies-limited&#160;|&#160;check-builtin-literals&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-11)">│</text><text class="breeze-static-checks-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-11)">
-</text><text class="breeze-static-checks-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-12)">│</text><text class="breeze-static-checks-r7" x="451.4" y="312.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-12)">check-changelog-format&#160;|&#160;check-changelog-has-no-duplicates&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-12)">│</text><text class="breeze-static-checks-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-12)">
-</text><text class="breeze-static-checks-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-13)">│</text><text class="breeze-static-checks-r7" x="451.4" y="337.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-13)">check-cncf-k8s-only-for-executors&#160;|&#160;check-code-deprecations&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-13)">│</text><text class="breeze-static-checks-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-13)">
-</text><text class="breeze-static-checks-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-14)">│</text><text class="breeze-static-checks-r7" x="451.4" y="361.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-14)">check-common-compat-used-for-openlineage&#160;|&#160;check-core-deprecation-classes&#160;|&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-14)">│</text><text class="breeze-static-checks-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-14)">
-</text><text class="breeze-static-checks-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-static-checks-line-15)">│</text><text class="breeze-static-checks-r7" x="451.4" y="386" textLength="988.2" clip-path="url(#breeze-static-checks-line-15)">check-decorated-operator-implements-custom-name&#160;|&#160;check-default-configuration&#160;|&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-static-checks-line-15)">│</text><text class="breeze-static-checks-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-static-checks-line-15)">
-</text><text class="breeze-static-checks-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-16)">│</text><text class="breeze-static-checks-r7" x="451.4" y="410.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-16)">check-deferrable-default&#160;|&#160;check-docstring-param-types&#160;|&#160;check-example-dags-urls&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-16)">│</text><text class="breeze-static-checks-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-16)">
-</text><text class="breeze-static-checks-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-17)">│</text><text class="breeze-static-checks-r7" x="451.4" y="434.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-17)">|&#160;check-executables-have-shebangs&#160;|&#160;check-extra-packages-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-17)">│</text><text class="breeze-static-checks-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-17)">
-</text><text class="breeze-static-checks-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-18)">│</text><text class="breeze-static-checks-r7" x="451.4" y="459.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-18)">check-extras-order&#160;|&#160;check-fab-migrations&#160;|&#160;check-for-inclusive-language&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-18)">│</text><text class="breeze-static-checks-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-18)">
-</text><text class="breeze-static-checks-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-19)">│</text><text class="breeze-static-checks-r7" x="451.4" y="483.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-19)">check-get-lineage-collector-providers&#160;|&#160;check-hooks-apply&#160;|&#160;check-i18n-json&#160;|&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-19)">│</text><text class="breeze-static-checks-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-19)">
-</text><text class="breeze-static-checks-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-static-checks-line-20)">│</text><text class="breeze-static-checks-r7" x="451.4" y="508" textLength="988.2" clip-path="url(#breeze-static-checks-line-20)">check-imports-in-providers&#160;|&#160;check-incorrect-use-of-LoggingMixin&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-static-checks-line-20)">│</text><text class="breeze-static-checks-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-static-checks-line-20)">
-</text><text class="breeze-static-checks-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-21)">│</text><text class="breeze-static-checks-r7" x="451.4" y="532.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-21)">check-init-decorator-arguments&#160;|&#160;check-integrations-list-consistent&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-21)">│</text><text class="breeze-static-checks-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-21)">
-</text><text class="breeze-static-checks-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-22)">│</text><text class="breeze-static-checks-r7" x="451.4" y="556.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-22)">check-lazy-logging&#160;|&#160;check-links-to-example-dags-do-not-use-hardcoded-versions&#160;|&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-22)">│</text><text class="breeze-static-checks-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-22)">
-</text><text class="breeze-static-checks-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-23)">│</text><text class="breeze-static-checks-r7" x="451.4" y="581.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-23)">check-merge-conflict&#160;|&#160;check-min-python-version&#160;|&#160;check-newsfragments-are-valid&#160;|</text><text class="breeze-static-checks-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-23)">│</text><text class="breeze-static-checks-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-23)">
-</text><text class="breeze-static-checks-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-24)">│</text><text class="breeze-static-checks-r7" x="451.4" y="605.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-24)">check-no-airflow-deprecation-in-providers&#160;|&#160;check-no-providers-in-core-examples&#160;|</text><text class="breeze-static-checks-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-24)">│</text><text class="breeze-static-checks-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-24)">
-</text><text class="breeze-static-checks-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-static-checks-line-25)">│</text><text class="breeze-static-checks-r7" x="451.4" y="630" textLength="988.2" clip-path="url(#breeze-static-checks-line-25)">check-only-new-session-with-provide-session&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-static-checks-line-25)">│</text><text class="breeze-static-checks-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-static-checks-line-25)">
-</text><text class="breeze-static-checks-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-26)">│</text><text class="breeze-static-checks-r7" x="451.4" y="654.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-26)">check-persist-credentials-disabled-in-github-workflows&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-26)">│</text><text class="breeze-static-checks-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-26)">
-</text><text class="breeze-static-checks-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-27)">│</text><text class="breeze-static-checks-r7" x="451.4" y="678.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-27)">check-pre-commit-information-consistent&#160;|&#160;check-provide-create-sessions-imports&#160;|</text><text class="breeze-static-checks-r5" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-27)">│</text><text class="breeze-static-checks-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-27)">
-</text><text class="breeze-static-checks-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-28)">│</text><text class="breeze-static-checks-r7" x="451.4" y="703.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-28)">check-provider-docs-valid&#160;|&#160;check-provider-yaml-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-28)">│</text><text class="breeze-static-checks-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-28)">
-</text><text class="breeze-static-checks-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-29)">│</text><text class="breeze-static-checks-r7" x="451.4" y="727.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-29)">check-providers-subpackages-init-file-exist&#160;|&#160;check-pydevd-left-in-code&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-29)">│</text><text class="breeze-static-checks-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-29)">
-</text><text class="breeze-static-checks-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-static-checks-line-30)">│</text><text class="breeze-static-checks-r7" x="451.4" y="752" textLength="988.2" clip-path="url(#breeze-static-checks-line-30)">check-pytest-mark-db-test-in-providers&#160;|&#160;check-revision-heads-map&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-static-checks-line-30)">│</text><text class="breeze-static-checks-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-static-checks-line-30)">
-</text><text class="breeze-static-checks-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-31)">│</text><text class="breeze-static-checks-r7" x="451.4" y="776.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-31)">check-safe-filter-usage-in-html&#160;|&#160;check-significant-newsfragments-are-valid&#160;|&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-31)">│</text><text class="breeze-static-checks-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-31)">
-</text><text class="breeze-static-checks-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-32)">│</text><text class="breeze-static-checks-r7" x="451.4" y="800.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-32)">check-sql-dependency-common-data-structure&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-32)">│</text><text class="breeze-static-checks-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-32)">
-</text><text class="breeze-static-checks-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-33)">│</text><text class="breeze-static-checks-r7" x="451.4" y="825.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-33)">check-start-date-not-used-in-defaults&#160;|&#160;check-system-tests-present&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-33)">│</text><text class="breeze-static-checks-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-33)">
-</text><text class="breeze-static-checks-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-34)">│</text><text class="breeze-static-checks-r7" x="451.4" y="849.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-34)">check-system-tests-tocs&#160;|&#160;check-taskinstance-tis-attrs&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-34)">│</text><text class="breeze-static-checks-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-34)">
-</text><text class="breeze-static-checks-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-static-checks-line-35)">│</text><text class="breeze-static-checks-r7" x="451.4" y="874" textLength="988.2" clip-path="url(#breeze-static-checks-line-35)">check-template-context-variable-in-sync&#160;|&#160;check-template-fields-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="874" textLength="12.2" clip-path="url(#breeze-static-checks-line-35)">│</text><text class="breeze-static-checks-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-static-checks-line-35)">
-</text><text class="breeze-static-checks-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-36)">│</text><text class="breeze-static-checks-r7" x="451.4" y="898.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-36)">check-tests-in-the-right-folders&#160;|&#160;check-tests-unittest-testcase&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="898.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-36)">│</text><text class="breeze-static-checks-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-36)">
-</text><text class="breeze-static-checks-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-37)">│</text><text class="breeze-static-checks-r7" x="451.4" y="922.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-37)">check-urlparse-usage-in-code&#160;|&#160;check-xml&#160;|&#160;check-zip-file-is-not-committed&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="922.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-37)">│</text><text class="breeze-static-checks-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-37)">
-</text><text class="breeze-static-checks-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-38)">│</text><text class="breeze-static-checks-r7" x="451.4" y="947.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-38)">codespell&#160;|&#160;compile-fab-assets&#160;|&#160;compile-ui-assets&#160;|&#160;compile-ui-assets-dev&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="947.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-38)">│</text><text class="breeze-static-checks-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-38)">
-</text><text class="breeze-static-checks-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-39)">│</text><text class="breeze-static-checks-r7" x="451.4" y="971.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-39)">create-missing-init-py-files-tests&#160;|&#160;debug-statements&#160;|&#160;detect-private-key&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="971.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-39)">│</text><text class="breeze-static-checks-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-39)">
-</text><text class="breeze-static-checks-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-static-checks-line-40)">│</text><text class="breeze-static-checks-r7" x="451.4" y="996" textLength="988.2" clip-path="url(#breeze-static-checks-line-40)">doctoc&#160;|&#160;end-of-file-fixer&#160;|&#160;fix-encoding-pragma&#160;|&#160;flynt&#160;|&#160;gci&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="996" textLength="12.2" clip-path="url(#breeze-static-checks-line-40)">│</text><text class="breeze-static-checks-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-static-checks-line-40)">
-</text><text class="breeze-static-checks-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-41)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1020.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-41)">generate-airflow-diagrams&#160;|&#160;generate-airflowctl-datamodels&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-41)">│</text><text class="breeze-static-checks-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-41)">
-</text><text class="breeze-static-checks-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1044.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-42)">generate-airflowctl-help-images&#160;|&#160;generate-openapi-spec&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">│</text><text class="breeze-static-checks-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">
-</text><text class="breeze-static-checks-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1069.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-43)">generate-openapi-spec-fab&#160;|&#160;generate-pypi-readme&#160;|&#160;generate-tasksdk-datamodels&#160;|&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1069.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">│</text><text class="breeze-static-checks-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">
-</text><text class="breeze-static-checks-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1093.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-44)">generate-volumes-for-sources&#160;|&#160;go-mockery&#160;|&#160;go-mod-tidy&#160;|&#160;gofmt&#160;|&#160;identity&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1093.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">│</text><text class="breeze-static-checks-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">
-</text><text class="breeze-static-checks-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-static-checks-line-45)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1118" textLength="988.2" clip-path="url(#breeze-static-checks-line-45)">insert-license&#160;|&#160;kubeconform&#160;|&#160;lint-chart-schema&#160;|&#160;lint-dockerfile&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1118" textLength="12.2" clip-path="url(#breeze-static-checks-line-45)">│</text><text class="breeze-static-checks-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-static-checks-line-45)">
-</text><text class="breeze-static-checks-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1142.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-46)">lint-helm-chart&#160;|&#160;lint-json-schema&#160;|&#160;lint-markdown&#160;|&#160;mixed-line-ending&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1142.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">│</text><text class="breeze-static-checks-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">
-</text><text class="breeze-static-checks-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1166.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-47)">mypy-airflow-core&#160;|&#160;mypy-airflow-ctl&#160;|&#160;mypy-dev&#160;|&#160;mypy-devel-common&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1166.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">│</text><text class="breeze-static-checks-r1" x="1464" y="1166.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">
-</text><text class="breeze-static-checks-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1191.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-48)">mypy-providers&#160;|&#160;mypy-task-sdk&#160;|&#160;pretty-format-json&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1191.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">│</text><text class="breeze-static-checks-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">
-</text><text class="breeze-static-checks-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1215.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-49)">prevent-deprecated-sqlalchemy-usage&#160;|&#160;pylint&#160;|&#160;python-no-log-warn&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1215.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">│</text><text class="breeze-static-checks-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">
-</text><text class="breeze-static-checks-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-static-checks-line-50)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1240" textLength="988.2" clip-path="url(#breeze-static-checks-line-50)">replace-bad-characters&#160;|&#160;rst-backticks&#160;|&#160;ruff&#160;|&#160;ruff-format&#160;|&#160;shellcheck&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1240" textLength="12.2" clip-path="url(#breeze-static-checks-line-50)">│</text><text class="breeze-static-checks-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-static-checks-line-50)">
-</text><text class="breeze-static-checks-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1264.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-51)">trailing-whitespace&#160;|&#160;ts-compile-lint-simple-auth-manager-ui&#160;|&#160;ts-compile-lint-ui</text><text class="breeze-static-checks-r5" x="1451.8" y="1264.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">│</text><text class="breeze-static-checks-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">
-</text><text class="breeze-static-checks-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1288.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-52)">|&#160;update-black-version&#160;|&#160;update-breeze-cmd-output&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1288.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">│</text><text class="breeze-static-checks-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">
-</text><text class="breeze-static-checks-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1313.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-53)">update-breeze-readme-config-hash&#160;|&#160;update-chart-dependencies&#160;|&#160;update-er-diagram&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1313.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">│</text><text class="breeze-static-checks-r1" x="1464" y="1313.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">
-</text><text class="breeze-static-checks-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1337.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-54)">|&#160;update-in-the-wild-to-be-sorted&#160;|&#160;update-inlined-dockerfile-scripts&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1337.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">│</text><text class="breeze-static-checks-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">
-</text><text class="breeze-static-checks-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-static-checks-line-55)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1362" textLength="988.2" clip-path="url(#breeze-static-checks-line-55)">update-installed-providers-to-be-sorted&#160;|&#160;update-installers-and-pre-commit&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1362" textLength="12.2" clip-path="url(#breeze-static-checks-line-55)">│</text><text class="breeze-static-checks-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#breeze-static-checks-line-55)">
-</text><text class="breeze-static-checks-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1386.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-56)">update-local-yml-file&#160;|&#160;update-migration-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1386.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">│</text><text class="breeze-static-checks-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">
-</text><text class="breeze-static-checks-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1410.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-57)">update-providers-build-files&#160;|&#160;update-providers-dependencies&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1410.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text class="breeze-static-checks-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">
-</text><text class="breeze-static-checks-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1435.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-58)">update-pyproject-toml&#160;|&#160;update-reproducible-source-date-epoch&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text class="breeze-static-checks-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">
-</text><text class="breeze-static-checks-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1459.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-59)">update-spelling-wordlist-to-be-sorted&#160;|&#160;update-supported-versions&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1459.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">│</text><text class="breeze-static-checks-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">
-</text><text class="breeze-static-checks-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1484" textLength="988.2" clip-path="url(#breeze-static-checks-line-60)">update-vendored-in-k8s-json-schema&#160;|&#160;update-version&#160;|&#160;validate-chart-annotations&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">│</text><text class="breeze-static-checks-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">
-</text><text class="breeze-static-checks-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1508.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-61)">|&#160;validate-operators-init&#160;|&#160;yamllint&#160;|&#160;zizmor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text class="breeze-static-checks-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">
-</text><text class="breeze-static-checks-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1532.8" textLength="268.4" clip-path="url(#breeze-static-checks-line-62)">--show-diff-on-failure</text><text class="breeze-static-checks-r6" x="402.6" y="1532.8" textLength="24.4" clip-path="url(#breeze-static-checks-line-62)">-s</text><text class="breeze-static-checks-r1" x="451.4" y="1532.8" textLength="524.6" clip-path="url(#breeze-static-checks-line-62)">Show&#160;diff&#160;for&#160;files&#160;modified&#160;by&#160;the&#160;checks.</text><text class="breeze-static-checks-r5" x="1451.8" y="1532.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">│</text><text class="breeze-static-checks-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">
-</text><text class="breeze-static-checks-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1557.2" textLength="292.8" clip-path="url(#breeze-static-checks-line-63)">--initialize-environment</text><text class="breeze-static-checks-r1" x="451.4" y="1557.2" textLength="549" clip-path="url(#breeze-static-checks-line-63)">Initialize&#160;environment&#160;before&#160;running&#160;checks.</text><text class="breeze-static-checks-r5" x="1451.8" y="1557.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">│</text><text class="breeze-static-checks-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">
-</text><text class="breeze-static-checks-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1581.6" textLength="353.8" clip-path="url(#breeze-static-checks-line-64)">--max-initialization-attempts</text><text class="breeze-static-checks-r1" x="451.4" y="1581.6" textLength="854" clip-path="url(#breeze-static-checks-line-64)">Maximum&#160;number&#160;of&#160;attempts&#160;to&#160;initialize&#160;environment&#160;before&#160;giving&#160;up.</text><text class="breeze-static-checks-r5" x="1451.8" y="1581.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">│</text><text class="breeze-static-checks-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">
-</text><text class="breeze-static-checks-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-static-checks-line-65)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1606" textLength="854" clip-path="url(#breeze-static-checks-line-65)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1606" textLength="12.2" clip-path="url(#breeze-static-checks-line-65)">│</text><text class="breeze-static-checks-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-static-checks-line-65)">
-</text><text class="breeze-static-checks-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">│</text><text class="breeze-static-checks-r5" x="451.4" y="1630.4" textLength="854" clip-path="url(#breeze-static-checks-line-66)">[default:&#160;3;&#160;1&lt;=x&lt;=10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1630.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">│</text><text class="breeze-static-checks-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">
-</text><text class="breeze-static-checks-r5" x="0" y="1654.8" textLength="1464" clip-path="url(#breeze-static-checks-line-67)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-67)">
-</text><text class="breeze-static-checks-r5" x="0" y="1679.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-68)">╭─</text><text class="breeze-static-checks-r5" x="24.4" y="1679.2" textLength="463.6" clip-path="url(#breeze-static-checks-line-68)">&#160;Selecting&#160;files&#160;to&#160;run&#160;the&#160;checks&#160;on&#160;</text><text class="breeze-static-checks-r5" x="488" y="1679.2" textLength="951.6" clip-path="url(#breeze-static-checks-line-68)">──────────────────────────────────────────────────────────────────────────────</text><text class="breeze-static-checks-r5" x="1439.6" y="1679.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-68)">─╮</text><text class="breeze-static-checks-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-68)">
-</text><text class="breeze-static-checks-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-69)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1703.6" textLength="73.2" clip-path="url(#breeze-static-checks-line-69)">--file</text><text class="breeze-static-checks-r6" x="256.2" y="1703.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-69)">-f</text><text class="breeze-static-checks-r1" x="305" y="1703.6" textLength="427" clip-path="url(#breeze-static-checks-line-69)">List&#160;of&#160;files&#160;to&#160;run&#160;the&#160;checks&#160;on.</text><text class="breeze-static-checks-r7" x="744.2" y="1703.6" textLength="73.2" clip-path="url(#breeze-static-checks-line-69)">(PATH)</text><text class="breeze-static-checks-r5" x="1451.8" y="1703.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-69)">│</text><text class="breeze-static-checks-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-69)">
-</text><text class="breeze-static-checks-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-static-checks-line-70)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1728" textLength="134.2" clip-path="url(#breeze-static-checks-line-70)">--all-files</text><text class="breeze-static-checks-r6" x="256.2" y="1728" textLength="24.4" clip-path="url(#breeze-static-checks-line-70)">-a</text><text class="breeze-static-checks-r1" x="305" y="1728" textLength="292.8" clip-path="url(#breeze-static-checks-line-70)">Run&#160;checks&#160;on&#160;all&#160;files.</text><text class="breeze-static-checks-r5" x="1451.8" y="1728" textLength="12.2" clip-path="url(#breeze-static-checks-line-70)">│</text><text class="breeze-static-checks-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-static-checks-line-70)">
-</text><text class="breeze-static-checks-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1752.4" textLength="146.4" clip-path="url(#breeze-static-checks-line-71)">--commit-ref</text><text class="breeze-static-checks-r6" x="256.2" y="1752.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-71)">-r</text><text class="breeze-static-checks-r1" x="305" y="1752.4" textLength="1134.6" clip-path="url(#breeze-static-checks-line-71)">Run&#160;checks&#160;for&#160;this&#160;commit&#160;reference&#160;only&#160;(can&#160;be&#160;any&#160;git&#160;commit-ish&#160;reference).&#160;Mutually&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1752.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">│</text><text class="breeze-static-checks-r1" x="1464" y="1752.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">
-</text><text class="breeze-static-checks-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">│</text><text class="breeze-static-checks-r1" x="305" y="1776.8" textLength="183" clip-path="url(#breeze-static-checks-line-72)">exclusive&#160;with&#160;</text><text class="breeze-static-checks-r4" x="488" y="1776.8" textLength="158.6" clip-path="url(#breeze-static-checks-line-72)">--last-commit</text><text class="breeze-static-checks-r1" x="646.6" y="1776.8" textLength="793" clip-path="url(#breeze-static-checks-line-72)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1776.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">│</text><text class="breeze-static-checks-r1" x="1464" y="1776.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">
-</text><text class="breeze-static-checks-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">│</text><text class="breeze-static-checks-r7" x="305" y="1801.2" textLength="1134.6" clip-path="url(#breeze-static-checks-line-73)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1801.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">│</text><text class="breeze-static-checks-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">
-</text><text class="breeze-static-checks-r5" x="0" y="1825.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1825.6" textLength="158.6" clip-path="url(#breeze-static-checks-line-74)">--last-commit</text><text class="breeze-static-checks-r6" x="256.2" y="1825.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-74)">-c</text><text class="breeze-static-checks-r1" x="305" y="1825.6" textLength="793" clip-path="url(#breeze-static-checks-line-74)">Run&#160;checks&#160;for&#160;all&#160;files&#160;in&#160;last&#160;commit.&#160;Mutually&#160;exclusive&#160;with&#160;</text><text class="breeze-static-checks-r4" x="1098" y="1825.6" textLength="146.4" clip-path="url(#breeze-static-checks-line-74)">--commit-ref</text><text class="breeze-static-checks-r1" x="1244.4" y="1825.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">.</text><text class="breeze-static-checks-r5" x="1451.8" y="1825.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">│</text><text class="breeze-static-checks-r1" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">
-</text><text class="breeze-static-checks-r5" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-static-checks-line-75)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1850" textLength="207.4" clip-path="url(#breeze-static-checks-line-75)">--only-my-changes</text><text class="breeze-static-checks-r6" x="256.2" y="1850" textLength="24.4" clip-path="url(#breeze-static-checks-line-75)">-m</text><text class="breeze-static-checks-r1" x="305" y="1850" textLength="1134.6" clip-path="url(#breeze-static-checks-line-75)">Run&#160;checks&#160;for&#160;commits&#160;belonging&#160;to&#160;my&#160;PR&#160;only:&#160;for&#160;all&#160;commits&#160;between&#160;merge&#160;base&#160;to&#160;`main`&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1850" textLength="12.2" clip-path="url(#breeze-static-checks-line-75)">│</text><text class="breeze-static-checks-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-static-checks-line-75)">
-</text><text class="breeze-static-checks-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">│</text><text class="breeze-static-checks-r1" x="305" y="1874.4" textLength="1134.6" clip-path="url(#breeze-static-checks-line-76)">branch&#160;and&#160;HEAD&#160;of&#160;your&#160;branch.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1874.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">│</text><text class="breeze-static-checks-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">
-</text><text class="breeze-static-checks-r5" x="0" y="1898.8" textLength="1464" clip-path="url(#breeze-static-checks-line-77)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-77)">
-</text><text class="breeze-static-checks-r5" x="0" y="1923.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-78)">╭─</text><text class="breeze-static-checks-r5" x="24.4" y="1923.2" textLength="463.6" clip-path="url(#breeze-static-checks-line-78)">&#160;Building&#160;image&#160;before&#160;running&#160;checks&#160;</text><text class="breeze-static-checks-r5" x="488" y="1923.2" textLength="951.6" clip-path="url(#breeze-static-checks-line-78)">──────────────────────────────────────────────────────────────────────────────</text><text class="breeze-static-checks-r5" x="1439.6" y="1923.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-78)">─╮</text><text class="breeze-static-checks-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-78)">
-</text><text class="breeze-static-checks-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-79)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1947.6" textLength="317.2" clip-path="url(#breeze-static-checks-line-79)">--skip-image-upgrade-check</text><text class="breeze-static-checks-r1" x="414.8" y="1947.6" textLength="536.8" clip-path="url(#breeze-static-checks-line-79)">Skip&#160;checking&#160;if&#160;the&#160;CI&#160;image&#160;is&#160;up&#160;to&#160;date.</text><text class="breeze-static-checks-r5" x="1451.8" y="1947.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-79)">│</text><text class="breeze-static-checks-r1" x="1464" y="1947.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-79)">
-</text><text class="breeze-static-checks-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-static-checks-line-80)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1972" textLength="158.6" clip-path="url(#breeze-static-checks-line-80)">--force-build</text><text class="breeze-static-checks-r1" x="414.8" y="1972" textLength="707.6" clip-path="url(#breeze-static-checks-line-80)">Force&#160;image&#160;build&#160;no&#160;matter&#160;if&#160;it&#160;is&#160;determined&#160;as&#160;needed.</text><text class="breeze-static-checks-r5" x="1451.8" y="1972" textLength="12.2" clip-path="url(#breeze-static-checks-line-80)">│</text><text class="breeze-static-checks-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-static-checks-line-80)">
-</text><text class="breeze-static-checks-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1996.4" textLength="231.8" clip-path="url(#breeze-static-checks-line-81)">--github-repository</text><text class="breeze-static-checks-r6" x="366" y="1996.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-81)">-g</text><text class="breeze-static-checks-r1" x="414.8" y="1996.4" textLength="585.6" clip-path="url(#breeze-static-checks-line-81)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-static-checks-r7" x="1012.6" y="1996.4" textLength="73.2" clip-path="url(#breeze-static-checks-line-81)">(TEXT)</text><text class="breeze-static-checks-r5" x="1098" y="1996.4" textLength="305" clip-path="url(#breeze-static-checks-line-81)">[default:&#160;apache/airflow]</text><text class="breeze-static-checks-r5" x="1451.8" y="1996.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">│</text><text class="breeze-static-checks-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">
-</text><text class="breeze-static-checks-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2020.8" textLength="109.8" clip-path="url(#breeze-static-checks-line-82)">--builder</text><text class="breeze-static-checks-r1" x="414.8" y="2020.8" textLength="756.4" clip-path="url(#breeze-static-checks-line-82)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build`&#160;commands.</text><text class="breeze-static-checks-r7" x="1183.4" y="2020.8" textLength="73.2" clip-path="url(#breeze-static-checks-line-82)">(TEXT)</text><text class="breeze-static-checks-r5" x="1451.8" y="2020.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">│</text><text class="breeze-static-checks-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">
-</text><text class="breeze-static-checks-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">│</text><text class="breeze-static-checks-r5" x="414.8" y="2045.2" textLength="756.4" clip-path="url(#breeze-static-checks-line-83)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="2045.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">│</text><text class="breeze-static-checks-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">
-</text><text class="breeze-static-checks-r5" x="0" y="2069.6" textLength="1464" clip-path="url(#breeze-static-checks-line-84)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-84)">
-</text><text class="breeze-static-checks-r5" x="0" y="2094" textLength="24.4" clip-path="url(#breeze-static-checks-line-85)">╭─</text><text class="breeze-static-checks-r5" x="24.4" y="2094" textLength="195.2" clip-path="url(#breeze-static-checks-line-85)">&#160;Common&#160;options&#160;</text><text class="breeze-static-checks-r5" x="219.6" y="2094" textLength="1220" clip-path="url(#breeze-static-checks-line-85)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-static-checks-r5" x="1439.6" y="2094" textLength="24.4" clip-path="url(#breeze-static-checks-line-85)">─╮</text><text class="breeze-static-checks-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-static-checks-line-85)">
-</text><text class="breeze-static-checks-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-86)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2118.4" textLength="109.8" clip-path="url(#breeze-static-checks-line-86)">--dry-run</text><text class="breeze-static-checks-r6" x="158.6" y="2118.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-86)">-D</text><text class="breeze-static-checks-r1" x="207.4" y="2118.4" textLength="719.8" clip-path="url(#breeze-static-checks-line-86)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-static-checks-r5" x="1451.8" y="2118.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-86)">│</text><text class="breeze-static-checks-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-86)">
-</text><text class="breeze-static-checks-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-87)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2142.8" textLength="109.8" clip-path="url(#breeze-static-checks-line-87)">--verbose</text><text class="breeze-static-checks-r6" x="158.6" y="2142.8" textLength="24.4" clip-path="url(#breeze-static-checks-line-87)">-v</text><text class="breeze-static-checks-r1" x="207.4" y="2142.8" textLength="585.6" clip-path="url(#breeze-static-checks-line-87)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-static-checks-r5" x="1451.8" y="2142.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-87)">│</text><text class="breeze-static-checks-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-87)">
-</text><text class="breeze-static-checks-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2167.2" textLength="73.2" clip-path="url(#breeze-static-checks-line-88)">--help</text><text class="breeze-static-checks-r6" x="158.6" y="2167.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-88)">-h</text><text class="breeze-static-checks-r1" x="207.4" y="2167.2" textLength="329.4" clip-path="url(#breeze-static-checks-line-88)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-static-checks-r5" x="1451.8" y="2167.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">│</text><text class="breeze-static-checks-r1" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">
-</text><text class="breeze-static-checks-r5" x="0" y="2191.6" textLength="1464" clip-path="url(#breeze-static-checks-line-89)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="2191.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-89)">
+</text><text class="breeze-static-checks-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-9)">│</text><text class="breeze-static-checks-r7" x="451.4" y="239.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-9)">check-airflow-v-imports-in-tests&#160;|&#160;check-apache-license-rat&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-9)">│</text><text class="breeze-static-checks-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-9)">
+</text><text class="breeze-static-checks-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-static-checks-line-10)">│</text><text class="breeze-static-checks-r7" x="451.4" y="264" textLength="988.2" clip-path="url(#breeze-static-checks-line-10)">check-base-operator-partial-arguments&#160;|&#160;check-base-operator-usage&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-static-checks-line-10)">│</text><text class="breeze-static-checks-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-static-checks-line-10)">
+</text><text class="breeze-static-checks-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-11)">│</text><text class="breeze-static-checks-r7" x="451.4" y="288.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-11)">check-boring-cyborg-configuration&#160;|&#160;check-breeze-top-dependencies-limited&#160;|&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-11)">│</text><text class="breeze-static-checks-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-11)">
+</text><text class="breeze-static-checks-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-12)">│</text><text class="breeze-static-checks-r7" x="451.4" y="312.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-12)">check-builtin-literals&#160;|&#160;check-changelog-format&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-12)">│</text><text class="breeze-static-checks-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-12)">
+</text><text class="breeze-static-checks-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-13)">│</text><text class="breeze-static-checks-r7" x="451.4" y="337.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-13)">check-changelog-has-no-duplicates&#160;|&#160;check-cncf-k8s-only-for-executors&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-13)">│</text><text class="breeze-static-checks-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-13)">
+</text><text class="breeze-static-checks-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-14)">│</text><text class="breeze-static-checks-r7" x="451.4" y="361.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-14)">check-code-deprecations&#160;|&#160;check-common-compat-used-for-openlineage&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-14)">│</text><text class="breeze-static-checks-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-14)">
+</text><text class="breeze-static-checks-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-static-checks-line-15)">│</text><text class="breeze-static-checks-r7" x="451.4" y="386" textLength="988.2" clip-path="url(#breeze-static-checks-line-15)">check-core-deprecation-classes&#160;|&#160;check-decorated-operator-implements-custom-name&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-static-checks-line-15)">│</text><text class="breeze-static-checks-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-static-checks-line-15)">
+</text><text class="breeze-static-checks-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-16)">│</text><text class="breeze-static-checks-r7" x="451.4" y="410.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-16)">|&#160;check-default-configuration&#160;|&#160;check-deferrable-default&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-16)">│</text><text class="breeze-static-checks-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-16)">
+</text><text class="breeze-static-checks-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-17)">│</text><text class="breeze-static-checks-r7" x="451.4" y="434.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-17)">check-docstring-param-types&#160;|&#160;check-example-dags-urls&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-17)">│</text><text class="breeze-static-checks-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-17)">
+</text><text class="breeze-static-checks-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-18)">│</text><text class="breeze-static-checks-r7" x="451.4" y="459.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-18)">check-executables-have-shebangs&#160;|&#160;check-extra-packages-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-18)">│</text><text class="breeze-static-checks-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-18)">
+</text><text class="breeze-static-checks-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-19)">│</text><text class="breeze-static-checks-r7" x="451.4" y="483.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-19)">check-extras-order&#160;|&#160;check-fab-migrations&#160;|&#160;check-for-inclusive-language&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-19)">│</text><text class="breeze-static-checks-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-19)">
+</text><text class="breeze-static-checks-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-static-checks-line-20)">│</text><text class="breeze-static-checks-r7" x="451.4" y="508" textLength="988.2" clip-path="url(#breeze-static-checks-line-20)">check-get-lineage-collector-providers&#160;|&#160;check-hooks-apply&#160;|&#160;check-i18n-json&#160;|&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-static-checks-line-20)">│</text><text class="breeze-static-checks-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-static-checks-line-20)">
+</text><text class="breeze-static-checks-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-21)">│</text><text class="breeze-static-checks-r7" x="451.4" y="532.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-21)">check-imports-in-providers&#160;|&#160;check-incorrect-use-of-LoggingMixin&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-21)">│</text><text class="breeze-static-checks-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-21)">
+</text><text class="breeze-static-checks-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-22)">│</text><text class="breeze-static-checks-r7" x="451.4" y="556.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-22)">check-init-decorator-arguments&#160;|&#160;check-integrations-list-consistent&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-22)">│</text><text class="breeze-static-checks-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-22)">
+</text><text class="breeze-static-checks-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-23)">│</text><text class="breeze-static-checks-r7" x="451.4" y="581.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-23)">check-lazy-logging&#160;|&#160;check-links-to-example-dags-do-not-use-hardcoded-versions&#160;|&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-23)">│</text><text class="breeze-static-checks-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-23)">
+</text><text class="breeze-static-checks-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-24)">│</text><text class="breeze-static-checks-r7" x="451.4" y="605.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-24)">check-merge-conflict&#160;|&#160;check-min-python-version&#160;|&#160;check-newsfragments-are-valid&#160;|</text><text class="breeze-static-checks-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-24)">│</text><text class="breeze-static-checks-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-24)">
+</text><text class="breeze-static-checks-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-static-checks-line-25)">│</text><text class="breeze-static-checks-r7" x="451.4" y="630" textLength="988.2" clip-path="url(#breeze-static-checks-line-25)">check-no-airflow-deprecation-in-providers&#160;|&#160;check-no-providers-in-core-examples&#160;|</text><text class="breeze-static-checks-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-static-checks-line-25)">│</text><text class="breeze-static-checks-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-static-checks-line-25)">
+</text><text class="breeze-static-checks-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-26)">│</text><text class="breeze-static-checks-r7" x="451.4" y="654.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-26)">check-only-new-session-with-provide-session&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-26)">│</text><text class="breeze-static-checks-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-26)">
+</text><text class="breeze-static-checks-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-27)">│</text><text class="breeze-static-checks-r7" x="451.4" y="678.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-27)">check-persist-credentials-disabled-in-github-workflows&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-27)">│</text><text class="breeze-static-checks-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-27)">
+</text><text class="breeze-static-checks-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-28)">│</text><text class="breeze-static-checks-r7" x="451.4" y="703.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-28)">check-pre-commit-information-consistent&#160;|&#160;check-provide-create-sessions-imports&#160;|</text><text class="breeze-static-checks-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-28)">│</text><text class="breeze-static-checks-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-28)">
+</text><text class="breeze-static-checks-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-29)">│</text><text class="breeze-static-checks-r7" x="451.4" y="727.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-29)">check-provider-docs-valid&#160;|&#160;check-provider-yaml-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-29)">│</text><text class="breeze-static-checks-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-29)">
+</text><text class="breeze-static-checks-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-static-checks-line-30)">│</text><text class="breeze-static-checks-r7" x="451.4" y="752" textLength="988.2" clip-path="url(#breeze-static-checks-line-30)">check-providers-subpackages-init-file-exist&#160;|&#160;check-pydevd-left-in-code&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-static-checks-line-30)">│</text><text class="breeze-static-checks-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-static-checks-line-30)">
+</text><text class="breeze-static-checks-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-31)">│</text><text class="breeze-static-checks-r7" x="451.4" y="776.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-31)">check-pytest-mark-db-test-in-providers&#160;|&#160;check-revision-heads-map&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-31)">│</text><text class="breeze-static-checks-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-31)">
+</text><text class="breeze-static-checks-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-32)">│</text><text class="breeze-static-checks-r7" x="451.4" y="800.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-32)">check-safe-filter-usage-in-html&#160;|&#160;check-significant-newsfragments-are-valid&#160;|&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-32)">│</text><text class="breeze-static-checks-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-32)">
+</text><text class="breeze-static-checks-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-33)">│</text><text class="breeze-static-checks-r7" x="451.4" y="825.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-33)">check-sql-dependency-common-data-structure&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-33)">│</text><text class="breeze-static-checks-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-33)">
+</text><text class="breeze-static-checks-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-34)">│</text><text class="breeze-static-checks-r7" x="451.4" y="849.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-34)">check-start-date-not-used-in-defaults&#160;|&#160;check-system-tests-present&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-34)">│</text><text class="breeze-static-checks-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-34)">
+</text><text class="breeze-static-checks-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-static-checks-line-35)">│</text><text class="breeze-static-checks-r7" x="451.4" y="874" textLength="988.2" clip-path="url(#breeze-static-checks-line-35)">check-system-tests-tocs&#160;|&#160;check-taskinstance-tis-attrs&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="874" textLength="12.2" clip-path="url(#breeze-static-checks-line-35)">│</text><text class="breeze-static-checks-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-static-checks-line-35)">
+</text><text class="breeze-static-checks-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-36)">│</text><text class="breeze-static-checks-r7" x="451.4" y="898.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-36)">check-template-context-variable-in-sync&#160;|&#160;check-template-fields-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="898.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-36)">│</text><text class="breeze-static-checks-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-36)">
+</text><text class="breeze-static-checks-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-37)">│</text><text class="breeze-static-checks-r7" x="451.4" y="922.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-37)">check-tests-in-the-right-folders&#160;|&#160;check-tests-unittest-testcase&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="922.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-37)">│</text><text class="breeze-static-checks-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-37)">
+</text><text class="breeze-static-checks-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-38)">│</text><text class="breeze-static-checks-r7" x="451.4" y="947.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-38)">check-urlparse-usage-in-code&#160;|&#160;check-xml&#160;|&#160;check-zip-file-is-not-committed&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="947.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-38)">│</text><text class="breeze-static-checks-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-38)">
+</text><text class="breeze-static-checks-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-39)">│</text><text class="breeze-static-checks-r7" x="451.4" y="971.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-39)">codespell&#160;|&#160;compile-fab-assets&#160;|&#160;compile-ui-assets&#160;|&#160;compile-ui-assets-dev&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="971.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-39)">│</text><text class="breeze-static-checks-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-39)">
+</text><text class="breeze-static-checks-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-static-checks-line-40)">│</text><text class="breeze-static-checks-r7" x="451.4" y="996" textLength="988.2" clip-path="url(#breeze-static-checks-line-40)">create-missing-init-py-files-tests&#160;|&#160;debug-statements&#160;|&#160;detect-private-key&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="996" textLength="12.2" clip-path="url(#breeze-static-checks-line-40)">│</text><text class="breeze-static-checks-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-static-checks-line-40)">
+</text><text class="breeze-static-checks-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-41)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1020.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-41)">doctoc&#160;|&#160;end-of-file-fixer&#160;|&#160;fix-encoding-pragma&#160;|&#160;flynt&#160;|&#160;gci&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-41)">│</text><text class="breeze-static-checks-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-41)">
+</text><text class="breeze-static-checks-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1044.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-42)">generate-airflow-diagrams&#160;|&#160;generate-airflowctl-datamodels&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">│</text><text class="breeze-static-checks-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">
+</text><text class="breeze-static-checks-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1069.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-43)">generate-airflowctl-help-images&#160;|&#160;generate-openapi-spec&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1069.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">│</text><text class="breeze-static-checks-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">
+</text><text class="breeze-static-checks-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1093.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-44)">generate-openapi-spec-fab&#160;|&#160;generate-pypi-readme&#160;|&#160;generate-tasksdk-datamodels&#160;|&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1093.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">│</text><text class="breeze-static-checks-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">
+</text><text class="breeze-static-checks-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-static-checks-line-45)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1118" textLength="988.2" clip-path="url(#breeze-static-checks-line-45)">generate-volumes-for-sources&#160;|&#160;go-mockery&#160;|&#160;go-mod-tidy&#160;|&#160;gofmt&#160;|&#160;identity&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1118" textLength="12.2" clip-path="url(#breeze-static-checks-line-45)">│</text><text class="breeze-static-checks-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-static-checks-line-45)">
+</text><text class="breeze-static-checks-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1142.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-46)">insert-license&#160;|&#160;kubeconform&#160;|&#160;lint-chart-schema&#160;|&#160;lint-dockerfile&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1142.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">│</text><text class="breeze-static-checks-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">
+</text><text class="breeze-static-checks-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1166.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-47)">lint-helm-chart&#160;|&#160;lint-json-schema&#160;|&#160;lint-markdown&#160;|&#160;mixed-line-ending&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1166.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">│</text><text class="breeze-static-checks-r1" x="1464" y="1166.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">
+</text><text class="breeze-static-checks-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1191.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-48)">mypy-airflow-core&#160;|&#160;mypy-airflow-ctl&#160;|&#160;mypy-dev&#160;|&#160;mypy-devel-common&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1191.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">│</text><text class="breeze-static-checks-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">
+</text><text class="breeze-static-checks-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1215.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-49)">mypy-providers&#160;|&#160;mypy-task-sdk&#160;|&#160;pretty-format-json&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1215.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">│</text><text class="breeze-static-checks-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">
+</text><text class="breeze-static-checks-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-static-checks-line-50)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1240" textLength="988.2" clip-path="url(#breeze-static-checks-line-50)">prevent-deprecated-sqlalchemy-usage&#160;|&#160;pylint&#160;|&#160;python-no-log-warn&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1240" textLength="12.2" clip-path="url(#breeze-static-checks-line-50)">│</text><text class="breeze-static-checks-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-static-checks-line-50)">
+</text><text class="breeze-static-checks-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1264.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-51)">replace-bad-characters&#160;|&#160;rst-backticks&#160;|&#160;ruff&#160;|&#160;ruff-format&#160;|&#160;shellcheck&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1264.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">│</text><text class="breeze-static-checks-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">
+</text><text class="breeze-static-checks-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1288.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-52)">trailing-whitespace&#160;|&#160;ts-compile-lint-simple-auth-manager-ui&#160;|&#160;ts-compile-lint-ui</text><text class="breeze-static-checks-r5" x="1451.8" y="1288.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">│</text><text class="breeze-static-checks-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">
+</text><text class="breeze-static-checks-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1313.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-53)">|&#160;update-black-version&#160;|&#160;update-breeze-cmd-output&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1313.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">│</text><text class="breeze-static-checks-r1" x="1464" y="1313.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">
+</text><text class="breeze-static-checks-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1337.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-54)">update-breeze-readme-config-hash&#160;|&#160;update-chart-dependencies&#160;|&#160;update-er-diagram&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1337.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">│</text><text class="breeze-static-checks-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">
+</text><text class="breeze-static-checks-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-static-checks-line-55)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1362" textLength="988.2" clip-path="url(#breeze-static-checks-line-55)">|&#160;update-in-the-wild-to-be-sorted&#160;|&#160;update-inlined-dockerfile-scripts&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1362" textLength="12.2" clip-path="url(#breeze-static-checks-line-55)">│</text><text class="breeze-static-checks-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#breeze-static-checks-line-55)">
+</text><text class="breeze-static-checks-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1386.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-56)">update-installed-providers-to-be-sorted&#160;|&#160;update-installers-and-pre-commit&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1386.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">│</text><text class="breeze-static-checks-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">
+</text><text class="breeze-static-checks-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1410.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-57)">update-local-yml-file&#160;|&#160;update-migration-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1410.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text class="breeze-static-checks-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">
+</text><text class="breeze-static-checks-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1435.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-58)">update-providers-build-files&#160;|&#160;update-providers-dependencies&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text class="breeze-static-checks-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">
+</text><text class="breeze-static-checks-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1459.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-59)">update-pyproject-toml&#160;|&#160;update-reproducible-source-date-epoch&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1459.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">│</text><text class="breeze-static-checks-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">
+</text><text class="breeze-static-checks-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1484" textLength="988.2" clip-path="url(#breeze-static-checks-line-60)">update-spelling-wordlist-to-be-sorted&#160;|&#160;update-supported-versions&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">│</text><text class="breeze-static-checks-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">
+</text><text class="breeze-static-checks-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1508.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-61)">update-vendored-in-k8s-json-schema&#160;|&#160;update-version&#160;|&#160;validate-chart-annotations&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text class="breeze-static-checks-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">
+</text><text class="breeze-static-checks-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1532.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-62)">|&#160;validate-operators-init&#160;|&#160;yamllint&#160;|&#160;zizmor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1532.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">│</text><text class="breeze-static-checks-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">
+</text><text class="breeze-static-checks-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1557.2" textLength="268.4" clip-path="url(#breeze-static-checks-line-63)">--show-diff-on-failure</text><text class="breeze-static-checks-r6" x="402.6" y="1557.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-63)">-s</text><text class="breeze-static-checks-r1" x="451.4" y="1557.2" textLength="524.6" clip-path="url(#breeze-static-checks-line-63)">Show&#160;diff&#160;for&#160;files&#160;modified&#160;by&#160;the&#160;checks.</text><text class="breeze-static-checks-r5" x="1451.8" y="1557.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">│</text><text class="breeze-static-checks-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">
+</text><text class="breeze-static-checks-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1581.6" textLength="292.8" clip-path="url(#breeze-static-checks-line-64)">--initialize-environment</text><text class="breeze-static-checks-r1" x="451.4" y="1581.6" textLength="549" clip-path="url(#breeze-static-checks-line-64)">Initialize&#160;environment&#160;before&#160;running&#160;checks.</text><text class="breeze-static-checks-r5" x="1451.8" y="1581.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">│</text><text class="breeze-static-checks-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">
+</text><text class="breeze-static-checks-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-static-checks-line-65)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1606" textLength="353.8" clip-path="url(#breeze-static-checks-line-65)">--max-initialization-attempts</text><text class="breeze-static-checks-r1" x="451.4" y="1606" textLength="854" clip-path="url(#breeze-static-checks-line-65)">Maximum&#160;number&#160;of&#160;attempts&#160;to&#160;initialize&#160;environment&#160;before&#160;giving&#160;up.</text><text class="breeze-static-checks-r5" x="1451.8" y="1606" textLength="12.2" clip-path="url(#breeze-static-checks-line-65)">│</text><text class="breeze-static-checks-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-static-checks-line-65)">
+</text><text class="breeze-static-checks-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1630.4" textLength="854" clip-path="url(#breeze-static-checks-line-66)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1630.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">│</text><text class="breeze-static-checks-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">
+</text><text class="breeze-static-checks-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-67)">│</text><text class="breeze-static-checks-r5" x="451.4" y="1654.8" textLength="854" clip-path="url(#breeze-static-checks-line-67)">[default:&#160;3;&#160;1&lt;=x&lt;=10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1654.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-67)">│</text><text class="breeze-static-checks-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-67)">
+</text><text class="breeze-static-checks-r5" x="0" y="1679.2" textLength="1464" clip-path="url(#breeze-static-checks-line-68)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-68)">
+</text><text class="breeze-static-checks-r5" x="0" y="1703.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-69)">╭─</text><text class="breeze-static-checks-r5" x="24.4" y="1703.6" textLength="463.6" clip-path="url(#breeze-static-checks-line-69)">&#160;Selecting&#160;files&#160;to&#160;run&#160;the&#160;checks&#160;on&#160;</text><text class="breeze-static-checks-r5" x="488" y="1703.6" textLength="951.6" clip-path="url(#breeze-static-checks-line-69)">──────────────────────────────────────────────────────────────────────────────</text><text class="breeze-static-checks-r5" x="1439.6" y="1703.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-69)">─╮</text><text class="breeze-static-checks-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-69)">
+</text><text class="breeze-static-checks-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-static-checks-line-70)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1728" textLength="73.2" clip-path="url(#breeze-static-checks-line-70)">--file</text><text class="breeze-static-checks-r6" x="256.2" y="1728" textLength="24.4" clip-path="url(#breeze-static-checks-line-70)">-f</text><text class="breeze-static-checks-r1" x="305" y="1728" textLength="427" clip-path="url(#breeze-static-checks-line-70)">List&#160;of&#160;files&#160;to&#160;run&#160;the&#160;checks&#160;on.</text><text class="breeze-static-checks-r7" x="744.2" y="1728" textLength="73.2" clip-path="url(#breeze-static-checks-line-70)">(PATH)</text><text class="breeze-static-checks-r5" x="1451.8" y="1728" textLength="12.2" clip-path="url(#breeze-static-checks-line-70)">│</text><text class="breeze-static-checks-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-static-checks-line-70)">
+</text><text class="breeze-static-checks-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1752.4" textLength="134.2" clip-path="url(#breeze-static-checks-line-71)">--all-files</text><text class="breeze-static-checks-r6" x="256.2" y="1752.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-71)">-a</text><text class="breeze-static-checks-r1" x="305" y="1752.4" textLength="292.8" clip-path="url(#breeze-static-checks-line-71)">Run&#160;checks&#160;on&#160;all&#160;files.</text><text class="breeze-static-checks-r5" x="1451.8" y="1752.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">│</text><text class="breeze-static-checks-r1" x="1464" y="1752.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">
+</text><text class="breeze-static-checks-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1776.8" textLength="146.4" clip-path="url(#breeze-static-checks-line-72)">--commit-ref</text><text class="breeze-static-checks-r6" x="256.2" y="1776.8" textLength="24.4" clip-path="url(#breeze-static-checks-line-72)">-r</text><text class="breeze-static-checks-r1" x="305" y="1776.8" textLength="1134.6" clip-path="url(#breeze-static-checks-line-72)">Run&#160;checks&#160;for&#160;this&#160;commit&#160;reference&#160;only&#160;(can&#160;be&#160;any&#160;git&#160;commit-ish&#160;reference).&#160;Mutually&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1776.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">│</text><text class="breeze-static-checks-r1" x="1464" y="1776.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">
+</text><text class="breeze-static-checks-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">│</text><text class="breeze-static-checks-r1" x="305" y="1801.2" textLength="183" clip-path="url(#breeze-static-checks-line-73)">exclusive&#160;with&#160;</text><text class="breeze-static-checks-r4" x="488" y="1801.2" textLength="158.6" clip-path="url(#breeze-static-checks-line-73)">--last-commit</text><text class="breeze-static-checks-r1" x="646.6" y="1801.2" textLength="793" clip-path="url(#breeze-static-checks-line-73)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1801.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">│</text><text class="breeze-static-checks-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">
+</text><text class="breeze-static-checks-r5" x="0" y="1825.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">│</text><text class="breeze-static-checks-r7" x="305" y="1825.6" textLength="1134.6" clip-path="url(#breeze-static-checks-line-74)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1825.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">│</text><text class="breeze-static-checks-r1" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">
+</text><text class="breeze-static-checks-r5" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-static-checks-line-75)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1850" textLength="158.6" clip-path="url(#breeze-static-checks-line-75)">--last-commit</text><text class="breeze-static-checks-r6" x="256.2" y="1850" textLength="24.4" clip-path="url(#breeze-static-checks-line-75)">-c</text><text class="breeze-static-checks-r1" x="305" y="1850" textLength="793" clip-path="url(#breeze-static-checks-line-75)">Run&#160;checks&#160;for&#160;all&#160;files&#160;in&#160;last&#160;commit.&#160;Mutually&#160;exclusive&#160;with&#160;</text><text class="breeze-static-checks-r4" x="1098" y="1850" textLength="146.4" clip-path="url(#breeze-static-checks-line-75)">--commit-ref</text><text class="breeze-static-checks-r1" x="1244.4" y="1850" textLength="12.2" clip-path="url(#breeze-static-checks-line-75)">.</text><text class="breeze-static-checks-r5" x="1451.8" y="1850" textLength="12.2" clip-path="url(#breeze-static-checks-line-75)">│</text><text class="breeze-static-checks-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-static-checks-line-75)">
+</text><text class="breeze-static-checks-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1874.4" textLength="207.4" clip-path="url(#breeze-static-checks-line-76)">--only-my-changes</text><text class="breeze-static-checks-r6" x="256.2" y="1874.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-76)">-m</text><text class="breeze-static-checks-r1" x="305" y="1874.4" textLength="1134.6" clip-path="url(#breeze-static-checks-line-76)">Run&#160;checks&#160;for&#160;commits&#160;belonging&#160;to&#160;my&#160;PR&#160;only:&#160;for&#160;all&#160;commits&#160;between&#160;merge&#160;base&#160;to&#160;`main`&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1874.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">│</text><text class="breeze-static-checks-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">
+</text><text class="breeze-static-checks-r5" x="0" y="1898.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-77)">│</text><text class="breeze-static-checks-r1" x="305" y="1898.8" textLength="1134.6" clip-path="url(#breeze-static-checks-line-77)">branch&#160;and&#160;HEAD&#160;of&#160;your&#160;branch.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1898.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-77)">│</text><text class="breeze-static-checks-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-77)">
+</text><text class="breeze-static-checks-r5" x="0" y="1923.2" textLength="1464" clip-path="url(#breeze-static-checks-line-78)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-78)">
+</text><text class="breeze-static-checks-r5" x="0" y="1947.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-79)">╭─</text><text class="breeze-static-checks-r5" x="24.4" y="1947.6" textLength="463.6" clip-path="url(#breeze-static-checks-line-79)">&#160;Building&#160;image&#160;before&#160;running&#160;checks&#160;</text><text class="breeze-static-checks-r5" x="488" y="1947.6" textLength="951.6" clip-path="url(#breeze-static-checks-line-79)">──────────────────────────────────────────────────────────────────────────────</text><text class="breeze-static-checks-r5" x="1439.6" y="1947.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-79)">─╮</text><text class="breeze-static-checks-r1" x="1464" y="1947.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-79)">
+</text><text class="breeze-static-checks-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-static-checks-line-80)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1972" textLength="317.2" clip-path="url(#breeze-static-checks-line-80)">--skip-image-upgrade-check</text><text class="breeze-static-checks-r1" x="414.8" y="1972" textLength="536.8" clip-path="url(#breeze-static-checks-line-80)">Skip&#160;checking&#160;if&#160;the&#160;CI&#160;image&#160;is&#160;up&#160;to&#160;date.</text><text class="breeze-static-checks-r5" x="1451.8" y="1972" textLength="12.2" clip-path="url(#breeze-static-checks-line-80)">│</text><text class="breeze-static-checks-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-static-checks-line-80)">
+</text><text class="breeze-static-checks-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1996.4" textLength="158.6" clip-path="url(#breeze-static-checks-line-81)">--force-build</text><text class="breeze-static-checks-r1" x="414.8" y="1996.4" textLength="707.6" clip-path="url(#breeze-static-checks-line-81)">Force&#160;image&#160;build&#160;no&#160;matter&#160;if&#160;it&#160;is&#160;determined&#160;as&#160;needed.</text><text class="breeze-static-checks-r5" x="1451.8" y="1996.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">│</text><text class="breeze-static-checks-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">
+</text><text class="breeze-static-checks-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2020.8" textLength="231.8" clip-path="url(#breeze-static-checks-line-82)">--github-repository</text><text class="breeze-static-checks-r6" x="366" y="2020.8" textLength="24.4" clip-path="url(#breeze-static-checks-line-82)">-g</text><text class="breeze-static-checks-r1" x="414.8" y="2020.8" textLength="585.6" clip-path="url(#breeze-static-checks-line-82)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-static-checks-r7" x="1012.6" y="2020.8" textLength="73.2" clip-path="url(#breeze-static-checks-line-82)">(TEXT)</text><text class="breeze-static-checks-r5" x="1098" y="2020.8" textLength="305" clip-path="url(#breeze-static-checks-line-82)">[default:&#160;apache/airflow]</text><text class="breeze-static-checks-r5" x="1451.8" y="2020.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">│</text><text class="breeze-static-checks-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">
+</text><text class="breeze-static-checks-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2045.2" textLength="109.8" clip-path="url(#breeze-static-checks-line-83)">--builder</text><text class="breeze-static-checks-r1" x="414.8" y="2045.2" textLength="756.4" clip-path="url(#breeze-static-checks-line-83)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build`&#160;commands.</text><text class="breeze-static-checks-r7" x="1183.4" y="2045.2" textLength="73.2" clip-path="url(#breeze-static-checks-line-83)">(TEXT)</text><text class="breeze-static-checks-r5" x="1451.8" y="2045.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">│</text><text class="breeze-static-checks-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">
+</text><text class="breeze-static-checks-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-84)">│</text><text class="breeze-static-checks-r5" x="414.8" y="2069.6" textLength="756.4" clip-path="url(#breeze-static-checks-line-84)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="2069.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-84)">│</text><text class="breeze-static-checks-r1" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-84)">
+</text><text class="breeze-static-checks-r5" x="0" y="2094" textLength="1464" clip-path="url(#breeze-static-checks-line-85)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-static-checks-line-85)">
+</text><text class="breeze-static-checks-r5" x="0" y="2118.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-86)">╭─</text><text class="breeze-static-checks-r5" x="24.4" y="2118.4" textLength="195.2" clip-path="url(#breeze-static-checks-line-86)">&#160;Common&#160;options&#160;</text><text class="breeze-static-checks-r5" x="219.6" y="2118.4" textLength="1220" clip-path="url(#breeze-static-checks-line-86)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-static-checks-r5" x="1439.6" y="2118.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-86)">─╮</text><text class="breeze-static-checks-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-86)">
+</text><text class="breeze-static-checks-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-87)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2142.8" textLength="109.8" clip-path="url(#breeze-static-checks-line-87)">--dry-run</text><text class="breeze-static-checks-r6" x="158.6" y="2142.8" textLength="24.4" clip-path="url(#breeze-static-checks-line-87)">-D</text><text class="breeze-static-checks-r1" x="207.4" y="2142.8" textLength="719.8" clip-path="url(#breeze-static-checks-line-87)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-static-checks-r5" x="1451.8" y="2142.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-87)">│</text><text class="breeze-static-checks-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-87)">
+</text><text class="breeze-static-checks-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2167.2" textLength="109.8" clip-path="url(#breeze-static-checks-line-88)">--verbose</text><text class="breeze-static-checks-r6" x="158.6" y="2167.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-88)">-v</text><text class="breeze-static-checks-r1" x="207.4" y="2167.2" textLength="585.6" clip-path="url(#breeze-static-checks-line-88)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-static-checks-r5" x="1451.8" y="2167.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">│</text><text class="breeze-static-checks-r1" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">
+</text><text class="breeze-static-checks-r5" x="0" y="2191.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-89)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2191.6" textLength="73.2" clip-path="url(#breeze-static-checks-line-89)">--help</text><text class="breeze-static-checks-r6" x="158.6" y="2191.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-89)">-h</text><text class="breeze-static-checks-r1" x="207.4" y="2191.6" textLength="329.4" clip-path="url(#breeze-static-checks-line-89)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-static-checks-r5" x="1451.8" y="2191.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-89)">│</text><text class="breeze-static-checks-r1" x="1464" y="2191.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-89)">
+</text><text class="breeze-static-checks-r5" x="0" y="2216" textLength="1464" clip-path="url(#breeze-static-checks-line-90)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="2216" textLength="12.2" clip-path="url(#breeze-static-checks-line-90)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_static-checks.txt b/dev/breeze/doc/images/output_static-checks.txt
index e8dbbc57b6271..fad063d8c98d7 100644
--- a/dev/breeze/doc/images/output_static-checks.txt
+++ b/dev/breeze/doc/images/output_static-checks.txt
@@ -1 +1 @@
-4d21a8da51102b0c61707aac83f31b3a
+bfb0d23efe62297165a4aacc0cddcfb1
diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids.py b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
index 9f1a79c15a4e2..e347b2af036b3 100644
--- a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
+++ b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
@@ -29,6 +29,7 @@
     "check-aiobotocore-optional",
     "check-airflow-k8s-not-used",
     "check-airflow-providers-bug-report-template",
+    "check-airflow-v-imports-in-tests",
     "check-apache-license-rat",
     "check-base-operator-partial-arguments",
     "check-base-operator-usage",
diff --git a/providers/amazon/tests/system/amazon/aws/example_sagemaker.py b/providers/amazon/tests/system/amazon/aws/example_sagemaker.py
index 82be47fc0ae40..b04360dcc12b8 100644
--- a/providers/amazon/tests/system/amazon/aws/example_sagemaker.py
+++ b/providers/amazon/tests/system/amazon/aws/example_sagemaker.py
@@ -419,7 +419,7 @@ def set_up(env_id, role_arn):
     _install_aws_cli_if_needed()
     _build_and_upload_docker_image(preprocess_script, ecr_repository_uri)
 
-    from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
+    from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
     if AIRFLOW_V_3_0_PLUS:
         from airflow.sdk import get_current_context
diff --git a/providers/amazon/tests/system/amazon/aws/tests/test_aws_auth_manager.py b/providers/amazon/tests/system/amazon/aws/tests/test_aws_auth_manager.py
index 2c60845e4b4ad..436d0b39cf86e 100644
--- a/providers/amazon/tests/system/amazon/aws/tests/test_aws_auth_manager.py
+++ b/providers/amazon/tests/system/amazon/aws/tests/test_aws_auth_manager.py
@@ -22,7 +22,7 @@
 import boto3
 import pytest
 
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if not AIRFLOW_V_3_0_PLUS:
     pytest.skip("AWS auth manager is only compatible with Airflow >= 3.0.0", allow_module_level=True)
diff --git a/providers/amazon/tests/system/amazon/aws/utils/__init__.py b/providers/amazon/tests/system/amazon/aws/utils/__init__.py
index f5e84bd5c43f8..5147d8309b7f7 100644
--- a/providers/amazon/tests/system/amazon/aws/utils/__init__.py
+++ b/providers/amazon/tests/system/amazon/aws/utils/__init__.py
@@ -31,10 +31,11 @@
 
 from airflow.decorators import task
 from airflow.providers.amazon.aws.hooks.ssm import SsmHook
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils.state import DagRunState, State
 from airflow.utils.trigger_rule import TriggerRule
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+
 if TYPE_CHECKING:
     from botocore.client import BaseClient
 
diff --git a/providers/amazon/tests/unit/amazon/aws/auth_manager/cli/test_avp_commands.py b/providers/amazon/tests/unit/amazon/aws/auth_manager/cli/test_avp_commands.py
index 3e831d1d6d455..95907b648f344 100644
--- a/providers/amazon/tests/unit/amazon/aws/auth_manager/cli/test_avp_commands.py
+++ b/providers/amazon/tests/unit/amazon/aws/auth_manager/cli/test_avp_commands.py
@@ -21,7 +21,7 @@
 
 import pytest
 
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if not AIRFLOW_V_3_0_PLUS:
     pytest.skip("AWS auth manager is only compatible with Airflow >= 3.0.0", allow_module_level=True)
diff --git a/providers/amazon/tests/unit/amazon/aws/auth_manager/cli/test_definition.py b/providers/amazon/tests/unit/amazon/aws/auth_manager/cli/test_definition.py
index df2805eacef6d..426a991958308 100644
--- a/providers/amazon/tests/unit/amazon/aws/auth_manager/cli/test_definition.py
+++ b/providers/amazon/tests/unit/amazon/aws/auth_manager/cli/test_definition.py
@@ -18,7 +18,7 @@
 
 import pytest
 
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if not AIRFLOW_V_3_0_PLUS:
     pytest.skip("AWS auth manager is only compatible with Airflow >= 3.0.0", allow_module_level=True)
diff --git a/providers/amazon/tests/unit/amazon/aws/auth_manager/routes/test_login.py b/providers/amazon/tests/unit/amazon/aws/auth_manager/routes/test_login.py
index 8734a5898fcb4..b24ec8b1bf7af 100644
--- a/providers/amazon/tests/unit/amazon/aws/auth_manager/routes/test_login.py
+++ b/providers/amazon/tests/unit/amazon/aws/auth_manager/routes/test_login.py
@@ -20,7 +20,7 @@
 
 import pytest
 
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if not AIRFLOW_V_3_0_PLUS:
     pytest.skip("AWS auth manager is only compatible with Airflow >= 3.0.0", allow_module_level=True)
diff --git a/providers/amazon/tests/unit/amazon/aws/auth_manager/test_aws_auth_manager.py b/providers/amazon/tests/unit/amazon/aws/auth_manager/test_aws_auth_manager.py
index f739313211a44..055e50ac9a064 100644
--- a/providers/amazon/tests/unit/amazon/aws/auth_manager/test_aws_auth_manager.py
+++ b/providers/amazon/tests/unit/amazon/aws/auth_manager/test_aws_auth_manager.py
@@ -21,7 +21,7 @@
 
 import pytest
 
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if not AIRFLOW_V_3_0_PLUS:
     pytest.skip("AWS auth manager is only compatible with Airflow >= 3.0.0", allow_module_level=True)
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_athena.py b/providers/amazon/tests/unit/amazon/aws/links/test_athena.py
index e1d9ba41b5f40..774ea4b05be4b 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_athena.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_athena.py
@@ -19,8 +19,8 @@
 import pytest
 
 from airflow.providers.amazon.aws.links.athena import AthenaQueryResultsLink
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
 if AIRFLOW_V_3_0_PLUS:
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_batch.py b/providers/amazon/tests/unit/amazon/aws/links/test_batch.py
index 38e6d573d1373..ea17e385e9be7 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_batch.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_batch.py
@@ -23,8 +23,8 @@
     BatchJobDetailsLink,
     BatchJobQueueLink,
 )
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
 if AIRFLOW_V_3_0_PLUS:
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_comprehend.py b/providers/amazon/tests/unit/amazon/aws/links/test_comprehend.py
index c945f672949cd..63849fa557f26 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_comprehend.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_comprehend.py
@@ -20,8 +20,8 @@
     ComprehendDocumentClassifierLink,
     ComprehendPiiEntitiesDetectionLink,
 )
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
 if AIRFLOW_V_3_0_PLUS:
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_datasync.py b/providers/amazon/tests/unit/amazon/aws/links/test_datasync.py
index 983de3b2299bd..df23c69fb2ef9 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_datasync.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_datasync.py
@@ -17,8 +17,8 @@
 from __future__ import annotations
 
 from airflow.providers.amazon.aws.links.datasync import DataSyncTaskExecutionLink, DataSyncTaskLink
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
 if AIRFLOW_V_3_0_PLUS:
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_ec2.py b/providers/amazon/tests/unit/amazon/aws/links/test_ec2.py
index 8d5c745230274..ff2f48e9be174 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_ec2.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_ec2.py
@@ -17,8 +17,8 @@
 from __future__ import annotations
 
 from airflow.providers.amazon.aws.links.ec2 import EC2InstanceDashboardLink, EC2InstanceLink
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
 if AIRFLOW_V_3_0_PLUS:
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_emr.py b/providers/amazon/tests/unit/amazon/aws/links/test_emr.py
index fc121d4fff062..28ddb4b0d1a40 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_emr.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_emr.py
@@ -32,8 +32,8 @@
     get_log_uri,
     get_serverless_dashboard_url,
 )
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
 pytestmark = pytest.mark.db_test
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_glue.py b/providers/amazon/tests/unit/amazon/aws/links/test_glue.py
index bf49f23ae122a..bb5508428146a 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_glue.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_glue.py
@@ -17,8 +17,8 @@
 from __future__ import annotations
 
 from airflow.providers.amazon.aws.links.glue import GlueJobRunDetailsLink
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
 if AIRFLOW_V_3_0_PLUS:
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_logs.py b/providers/amazon/tests/unit/amazon/aws/links/test_logs.py
index bb7a3277d3994..fbcd6b4af371c 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_logs.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_logs.py
@@ -17,8 +17,8 @@
 from __future__ import annotations
 
 from airflow.providers.amazon.aws.links.logs import CloudWatchEventsLink
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
 if AIRFLOW_V_3_0_PLUS:
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker.py b/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker.py
index 7d79d931206ce..b1b239d0b76b9 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker.py
@@ -18,8 +18,8 @@
 
 from airflow.providers.amazon.aws.links.base_aws import BaseAwsLink
 from airflow.providers.amazon.aws.links.sagemaker import SageMakerTransformJobLink
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
 if AIRFLOW_V_3_0_PLUS:
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker_unified_studio.py b/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker_unified_studio.py
index 487e116e0c795..166ea279175e3 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker_unified_studio.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker_unified_studio.py
@@ -17,8 +17,8 @@
 from __future__ import annotations
 
 from airflow.providers.amazon.aws.links.sagemaker_unified_studio import SageMakerUnifiedStudioLink
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
 if AIRFLOW_V_3_0_PLUS:
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_step_function.py b/providers/amazon/tests/unit/amazon/aws/links/test_step_function.py
index 6526a69011baf..b6affc28fc586 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_step_function.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_step_function.py
@@ -22,8 +22,8 @@
     StateMachineDetailsLink,
     StateMachineExecutionsDetailsLink,
 )
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
 if AIRFLOW_V_3_0_PLUS:
diff --git a/providers/apache/beam/tests/unit/apache/beam/operators/test_beam.py b/providers/apache/beam/tests/unit/apache/beam/operators/test_beam.py
index dffce7778ee8b..d03cde557767f 100644
--- a/providers/apache/beam/tests/unit/apache/beam/operators/test_beam.py
+++ b/providers/apache/beam/tests/unit/apache/beam/operators/test_beam.py
@@ -32,9 +32,10 @@
 )
 from airflow.providers.apache.beam.triggers.beam import BeamJavaPipelineTrigger, BeamPythonPipelineTrigger
 from airflow.providers.google.cloud.operators.dataflow import DataflowConfiguration
-from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.version import version
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+
 TASK_ID = "test-beam-operator"
 DEFAULT_RUNNER = "DirectRunner"
 JOB_ID = "test-dataflow-pipeline-id"
diff --git a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/cli/test_kubernetes_command.py b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/cli/test_kubernetes_command.py
index 571390204abeb..6ae8b81c50f3c 100644
--- a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/cli/test_kubernetes_command.py
+++ b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/cli/test_kubernetes_command.py
@@ -28,9 +28,9 @@
 from airflow.cli import cli_parser
 from airflow.executors import executor_loader
 from airflow.providers.cncf.kubernetes.cli import kubernetes_command
-from airflow.providers.cncf.kubernetes.version_compat import AIRFLOW_V_3_0_PLUS
 
 from tests_common.test_utils.config import conf_vars
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 pytestmark = pytest.mark.db_test
 
diff --git a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes.py b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes.py
index 8743444f089a8..adcad09e37425 100644
--- a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes.py
+++ b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes.py
@@ -21,7 +21,7 @@
 
 import pytest
 
-from airflow.providers.cncf.kubernetes.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import task
diff --git a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_cmd.py b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_cmd.py
index a18c11abc7f7e..93ac5807f7b02 100644
--- a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_cmd.py
+++ b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_cmd.py
@@ -21,7 +21,8 @@
 import pytest
 
 from airflow.exceptions import AirflowSkipException
-from airflow.providers.cncf.kubernetes.version_compat import AIRFLOW_V_3_0_PLUS
+
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import task
diff --git a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_commons.py b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_commons.py
index 860cf3294a9ea..94a71961accce 100644
--- a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_commons.py
+++ b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_commons.py
@@ -22,7 +22,7 @@
 
 import pytest
 
-from airflow.providers.cncf.kubernetes.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import setup, task, teardown
diff --git a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/test_template_rendering.py b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/test_template_rendering.py
index 1209058f10fd3..516ab8c4c137e 100644
--- a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/test_template_rendering.py
+++ b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/test_template_rendering.py
@@ -26,12 +26,12 @@
 
 from airflow.models.renderedtifields import RenderedTaskInstanceFields, RenderedTaskInstanceFields as RTIF
 from airflow.providers.cncf.kubernetes.template_rendering import get_rendered_k8s_spec, render_k8s_pod_yaml
-from airflow.providers.cncf.kubernetes.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils import timezone
 from airflow.utils.session import create_session
 from airflow.version import version
 
 from tests_common.test_utils.compat import BashOperator
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 pytestmark = pytest.mark.db_test
 
diff --git a/providers/common/io/tests/system/common/io/example_file_transfer_local_to_s3.py b/providers/common/io/tests/system/common/io/example_file_transfer_local_to_s3.py
index d5a522ac89cbc..dbeff0a57621e 100644
--- a/providers/common/io/tests/system/common/io/example_file_transfer_local_to_s3.py
+++ b/providers/common/io/tests/system/common/io/example_file_transfer_local_to_s3.py
@@ -24,9 +24,10 @@
 from airflow import DAG
 from airflow.decorators import task
 from airflow.providers.common.io.operators.file_transfer import FileTransferOperator
-from airflow.providers.common.io.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils.trigger_rule import TriggerRule
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import ObjectStoragePath
 else:
diff --git a/providers/common/io/tests/unit/common/io/xcom/test_backend.py b/providers/common/io/tests/unit/common/io/xcom/test_backend.py
index 50c71c99be938..08967ca32d2fd 100644
--- a/providers/common/io/tests/unit/common/io/xcom/test_backend.py
+++ b/providers/common/io/tests/unit/common/io/xcom/test_backend.py
@@ -22,7 +22,6 @@
 import pytest
 
 import airflow.models.xcom
-from airflow.providers.common.io.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.providers.common.io.xcom.backend import XComObjectStorageBackend
 from airflow.providers.standard.operators.empty import EmptyOperator
 from airflow.utils import timezone
@@ -30,6 +29,7 @@
 
 from tests_common.test_utils import db
 from tests_common.test_utils.config import conf_vars
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 pytestmark = [pytest.mark.db_test]
 
diff --git a/providers/databricks/tests/unit/databricks/plugins/test_databricks_workflow.py b/providers/databricks/tests/unit/databricks/plugins/test_databricks_workflow.py
index e9012742f23f3..504c9289caa10 100644
--- a/providers/databricks/tests/unit/databricks/plugins/test_databricks_workflow.py
+++ b/providers/databricks/tests/unit/databricks/plugins/test_databricks_workflow.py
@@ -37,9 +37,9 @@
     get_launch_task_id,
     store_databricks_job_run_link,
 )
-from airflow.providers.databricks.version_compat import AIRFLOW_V_3_0_PLUS
 
 from tests_common import RUNNING_TESTS_AGAINST_AIRFLOW_PACKAGES
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 DAG_ID = "test_dag"
 TASK_ID = "test_task"
diff --git a/providers/dbt/cloud/tests/unit/dbt/cloud/operators/test_dbt.py b/providers/dbt/cloud/tests/unit/dbt/cloud/operators/test_dbt.py
index a6b2a0d5ce867..271b67e3ba651 100644
--- a/providers/dbt/cloud/tests/unit/dbt/cloud/operators/test_dbt.py
+++ b/providers/dbt/cloud/tests/unit/dbt/cloud/operators/test_dbt.py
@@ -31,9 +31,10 @@
     DbtCloudRunJobOperator,
 )
 from airflow.providers.dbt.cloud.triggers.dbt import DbtCloudRunJobTrigger
-from airflow.providers.dbt.cloud.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils import timezone
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
 
diff --git a/providers/docker/tests/unit/docker/decorators/test_docker.py b/providers/docker/tests/unit/docker/decorators/test_docker.py
index 335fbac4cab69..588161c723463 100644
--- a/providers/docker/tests/unit/docker/decorators/test_docker.py
+++ b/providers/docker/tests/unit/docker/decorators/test_docker.py
@@ -22,7 +22,7 @@
 
 import pytest
 
-from airflow.providers.docker.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import setup, task, teardown
diff --git a/providers/google/tests/system/google/cloud/kubernetes_engine/example_kubernetes_engine.py b/providers/google/tests/system/google/cloud/kubernetes_engine/example_kubernetes_engine.py
index c214d95469f45..2485ea63ff9d6 100644
--- a/providers/google/tests/system/google/cloud/kubernetes_engine/example_kubernetes_engine.py
+++ b/providers/google/tests/system/google/cloud/kubernetes_engine/example_kubernetes_engine.py
@@ -25,7 +25,6 @@
 from datetime import datetime
 
 from airflow.models.dag import DAG
-from airflow.providers.common.compat.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.providers.google.cloud.operators.kubernetes_engine import (
     GKECreateClusterOperator,
     GKEDeleteClusterOperator,
@@ -35,6 +34,7 @@
 from airflow.utils.trigger_rule import TriggerRule
 
 from system.google import DEFAULT_GCP_SYSTEM_TEST_PROJECT_ID
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 ENV_ID = os.environ.get("SYSTEM_TESTS_ENV_ID", "default")
 DAG_ID = "kubernetes_engine"
diff --git a/providers/google/tests/system/google/cloud/kubernetes_engine/example_kubernetes_engine_async.py b/providers/google/tests/system/google/cloud/kubernetes_engine/example_kubernetes_engine_async.py
index 257d97da9c02d..120addf76e6e9 100644
--- a/providers/google/tests/system/google/cloud/kubernetes_engine/example_kubernetes_engine_async.py
+++ b/providers/google/tests/system/google/cloud/kubernetes_engine/example_kubernetes_engine_async.py
@@ -25,7 +25,6 @@
 from datetime import datetime
 
 from airflow.models.dag import DAG
-from airflow.providers.common.compat.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.providers.google.cloud.operators.kubernetes_engine import (
     GKECreateClusterOperator,
     GKEDeleteClusterOperator,
@@ -35,6 +34,7 @@
 from airflow.utils.trigger_rule import TriggerRule
 
 from system.google import DEFAULT_GCP_SYSTEM_TEST_PROJECT_ID
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 ENV_ID = os.environ.get("SYSTEM_TESTS_ENV_ID", "default")
 DAG_ID = "kubernetes_engine_async"
diff --git a/providers/google/tests/system/google/cloud/translate/example_translate.py b/providers/google/tests/system/google/cloud/translate/example_translate.py
index 641e9d640b89f..ec6f97db27f16 100644
--- a/providers/google/tests/system/google/cloud/translate/example_translate.py
+++ b/providers/google/tests/system/google/cloud/translate/example_translate.py
@@ -25,10 +25,11 @@
 from datetime import datetime
 
 from airflow.models.dag import DAG
-from airflow.providers.common.compat.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.providers.google.cloud.operators.translate import CloudTranslateTextOperator
 from airflow.providers.standard.operators.bash import BashOperator
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+
 DAG_ID = "gcp_translate"
 
 with DAG(
diff --git a/providers/google/tests/unit/google/cloud/links/test_base_link.py b/providers/google/tests/unit/google/cloud/links/test_base_link.py
index f0af84dc2ae2a..b74963d916ed3 100644
--- a/providers/google/tests/unit/google/cloud/links/test_base_link.py
+++ b/providers/google/tests/unit/google/cloud/links/test_base_link.py
@@ -24,7 +24,8 @@
 
 from airflow.providers.google.cloud.links.base import BaseGoogleLink
 from airflow.providers.google.cloud.operators.cloud_base import GoogleCloudBaseOperator
-from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
diff --git a/providers/google/tests/unit/google/cloud/links/test_cloud_run.py b/providers/google/tests/unit/google/cloud/links/test_cloud_run.py
index 5e156af8d8515..c2bd362efa378 100644
--- a/providers/google/tests/unit/google/cloud/links/test_cloud_run.py
+++ b/providers/google/tests/unit/google/cloud/links/test_cloud_run.py
@@ -23,7 +23,8 @@
 
 from airflow.providers.google.cloud.links.cloud_run import CloudRunJobLoggingLink
 from airflow.providers.google.cloud.operators.cloud_run import CloudRunExecuteJobOperator
-from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
diff --git a/providers/google/tests/unit/google/cloud/links/test_dataplex.py b/providers/google/tests/unit/google/cloud/links/test_dataplex.py
index 3b4f750dabb8d..7158257d6493c 100644
--- a/providers/google/tests/unit/google/cloud/links/test_dataplex.py
+++ b/providers/google/tests/unit/google/cloud/links/test_dataplex.py
@@ -43,7 +43,8 @@
     DataplexCreateTaskOperator,
     DataplexListTasksOperator,
 )
-from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
diff --git a/providers/google/tests/unit/google/cloud/links/test_translate.py b/providers/google/tests/unit/google/cloud/links/test_translate.py
index 2f127f9440dc9..0adc28e53e218 100644
--- a/providers/google/tests/unit/google/cloud/links/test_translate.py
+++ b/providers/google/tests/unit/google/cloud/links/test_translate.py
@@ -21,7 +21,7 @@
 
 import pytest
 
-from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 # For no Pydantic environment, we need to skip the tests
 pytest.importorskip("google.cloud.aiplatform_v1")
diff --git a/providers/google/tests/unit/google/cloud/operators/test_dataproc.py b/providers/google/tests/unit/google/cloud/operators/test_dataproc.py
index 91c2c0a351262..00923cb590a1f 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_dataproc.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_dataproc.py
@@ -69,11 +69,11 @@
     DataprocSubmitTrigger,
 )
 from airflow.providers.google.common.consts import GOOGLE_DEFAULT_DEFERRABLE_METHOD_NAME
-from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.serialization.serialized_objects import SerializedDAG
 from airflow.utils.timezone import datetime
 
 from tests_common.test_utils.db import clear_db_runs, clear_db_xcom
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
diff --git a/providers/google/tests/unit/google/common/auth_backend/test_google_openid.py b/providers/google/tests/unit/google/common/auth_backend/test_google_openid.py
index 3588b5e45a1c5..bf084a40fa3ce 100644
--- a/providers/google/tests/unit/google/common/auth_backend/test_google_openid.py
+++ b/providers/google/tests/unit/google/common/auth_backend/test_google_openid.py
@@ -22,7 +22,7 @@
 import pytest
 from google.auth.exceptions import GoogleAuthError
 
-from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if not AIRFLOW_V_3_0_PLUS:
     pytest.skip(
diff --git a/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_adx.py b/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_adx.py
index 0161338f86384..c31ae047cd8aa 100644
--- a/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_adx.py
+++ b/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_adx.py
@@ -24,9 +24,10 @@
 from airflow.models import DAG
 from airflow.providers.microsoft.azure.hooks.adx import AzureDataExplorerHook
 from airflow.providers.microsoft.azure.operators.adx import AzureDataExplorerQueryOperator
-from airflow.providers.microsoft.azure.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils.timezone import datetime
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+
 TEST_DAG_ID = "unit_tests"
 DEFAULT_DATE = datetime(2019, 1, 1)
 
diff --git a/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_synapse.py b/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_synapse.py
index 62a1021ead8a5..cda6b791e204c 100644
--- a/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_synapse.py
+++ b/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_synapse.py
@@ -33,9 +33,10 @@
     AzureSynapseRunPipelineOperator,
     AzureSynapseRunSparkBatchOperator,
 )
-from airflow.providers.microsoft.azure.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils import timezone
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
 
diff --git a/providers/openlineage/tests/unit/openlineage/extractors/test_base.py b/providers/openlineage/tests/unit/openlineage/extractors/test_base.py
index e2cf9e7e76301..cbd852d393881 100644
--- a/providers/openlineage/tests/unit/openlineage/extractors/test_base.py
+++ b/providers/openlineage/tests/unit/openlineage/extractors/test_base.py
@@ -24,7 +24,7 @@
 from openlineage.client.event_v2 import Dataset
 from openlineage.client.facet_v2 import BaseFacet, JobFacet, parent_run, sql_job
 
-from airflow.providers.openlineage.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import BaseOperator
diff --git a/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py b/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
index cd763bf6c48c8..ae95f69df8d44 100644
--- a/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
+++ b/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
@@ -33,7 +33,8 @@
 from uuid6 import uuid7
 
 from airflow.models import DAG, DagRun, TaskInstance
-from airflow.providers.openlineage.version_compat import AIRFLOW_V_3_0_PLUS
+
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import BaseOperator
diff --git a/providers/openlineage/tests/unit/openlineage/utils/test_selective_enable.py b/providers/openlineage/tests/unit/openlineage/utils/test_selective_enable.py
index 473833a48e6b0..b747418a6d5d9 100644
--- a/providers/openlineage/tests/unit/openlineage/utils/test_selective_enable.py
+++ b/providers/openlineage/tests/unit/openlineage/utils/test_selective_enable.py
@@ -19,7 +19,7 @@
 
 from pendulum import now
 
-from airflow.providers.openlineage.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import dag, task
diff --git a/providers/openlineage/tests/unit/openlineage/utils/test_utils.py b/providers/openlineage/tests/unit/openlineage/utils/test_utils.py
index 753c6b166590b..6357913e31665 100644
--- a/providers/openlineage/tests/unit/openlineage/utils/test_utils.py
+++ b/providers/openlineage/tests/unit/openlineage/utils/test_utils.py
@@ -26,9 +26,10 @@
 from uuid6 import uuid7
 
 from airflow import DAG
-from airflow.providers.openlineage.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils import timezone
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import BaseOperator, task
 else:
diff --git a/providers/snowflake/tests/unit/snowflake/decorators/test_snowpark.py b/providers/snowflake/tests/unit/snowflake/decorators/test_snowpark.py
index 1a3d39d0d1b3f..b150f81385b5a 100644
--- a/providers/snowflake/tests/unit/snowflake/decorators/test_snowpark.py
+++ b/providers/snowflake/tests/unit/snowflake/decorators/test_snowpark.py
@@ -24,9 +24,10 @@
 import pytest
 
 from airflow.decorators import task
-from airflow.providers.snowflake.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils import timezone
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+
 if TYPE_CHECKING:
     from snowflake.snowpark import Session
 
diff --git a/providers/standard/tests/unit/standard/operators/test_python.py b/providers/standard/tests/unit/standard/operators/test_python.py
index 184045f18a345..10e0bd986bf3b 100644
--- a/providers/standard/tests/unit/standard/operators/test_python.py
+++ b/providers/standard/tests/unit/standard/operators/test_python.py
@@ -47,7 +47,8 @@
     AirflowProviderDeprecationWarning,
     DeserializingResultError,
 )
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
+
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import BaseOperator
diff --git a/providers/standard/tests/unit/standard/sensors/test_external_task_sensor.py b/providers/standard/tests/unit/standard/sensors/test_external_task_sensor.py
index fc1f982c8e227..290f276091fb6 100644
--- a/providers/standard/tests/unit/standard/sensors/test_external_task_sensor.py
+++ b/providers/standard/tests/unit/standard/sensors/test_external_task_sensor.py
@@ -33,7 +33,8 @@
     TaskDeferred,
 )
 from airflow.models import DagBag, DagRun, TaskInstance
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
+
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import BaseOperator
diff --git a/providers/standard/tests/unit/standard/sensors/test_time_delta.py b/providers/standard/tests/unit/standard/sensors/test_time_delta.py
index a42c5ad72cdcf..2014e9b1275e2 100644
--- a/providers/standard/tests/unit/standard/sensors/test_time_delta.py
+++ b/providers/standard/tests/unit/standard/sensors/test_time_delta.py
@@ -34,12 +34,12 @@
     WaitSensor,
 )
 from airflow.providers.standard.triggers.temporal import DateTimeTrigger
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils import timezone
 from airflow.utils.timezone import datetime
 from airflow.utils.types import DagRunType
 
 from tests_common.test_utils import db
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 pytestmark = pytest.mark.db_test
 
diff --git a/providers/standard/tests/unit/standard/sensors/test_weekday.py b/providers/standard/tests/unit/standard/sensors/test_weekday.py
index 998e8fae5dceb..7bf3dd812c48a 100644
--- a/providers/standard/tests/unit/standard/sensors/test_weekday.py
+++ b/providers/standard/tests/unit/standard/sensors/test_weekday.py
@@ -26,11 +26,11 @@
 from airflow.models.dag import DAG
 from airflow.providers.standard.sensors.weekday import DayOfWeekSensor
 from airflow.providers.standard.utils.weekday import WeekDay
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils import timezone
 from airflow.utils.timezone import datetime
 
 from tests_common.test_utils import db
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 pytestmark = pytest.mark.db_test
 
diff --git a/providers/standard/tests/unit/standard/triggers/test_file.py b/providers/standard/tests/unit/standard/triggers/test_file.py
index b69b5857e2b9f..2ab66fa360d2f 100644
--- a/providers/standard/tests/unit/standard/triggers/test_file.py
+++ b/providers/standard/tests/unit/standard/triggers/test_file.py
@@ -21,7 +21,8 @@
 import pytest
 
 from airflow.providers.standard.triggers.file import FileDeleteTrigger, FileTrigger
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
+
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 
 class TestFileTrigger:
diff --git a/scripts/ci/pre_commit/check_airflow_v_imports_in_tests.py b/scripts/ci/pre_commit/check_airflow_v_imports_in_tests.py
new file mode 100755
index 0000000000000..f26e84286ac73
--- /dev/null
+++ b/scripts/ci/pre_commit/check_airflow_v_imports_in_tests.py
@@ -0,0 +1,81 @@
+#!/usr/bin/env python3
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+"""
+Check that AIRFLOW_V_X_Y_PLUS constants are only imported from test_utils in provider tests.
+"""
+
+from __future__ import annotations
+
+import ast
+import sys
+from pathlib import Path
+
+sys.path.insert(0, str(Path(__file__).parent.resolve()))  # make sure common_precommit_utils is imported
+from common_precommit_utils import console
+
+
+def check_airflow_v_imports_and_fix(test_file: Path) -> list[str]:
+    errors = []
+    with test_file.open("r", encoding="utf-8") as f:
+        source = f.read()
+        tree = ast.parse(source, filename=str(test_file))
+    new_lines = source.splitlines(keepends=True)
+    modified = False
+    for node in ast.walk(tree):
+        if isinstance(node, ast.ImportFrom):
+            if node.module and "AIRFLOW_V_" in " ".join([a.name for a in node.names]):
+                console.print("Found AIRFLOW_V_*_PLUS import in test file:", test_file)
+                if node.module != "tests_common.test_utils.version_compat":
+                    errors.append(
+                        f"{test_file}: AIRFLOW_V_*_PLUS should only be imported from tests.test_utils.version_compat, "
+                        f"but found import from '{node.module}'"
+                    )
+                    # Replace the import line
+                    lineno = node.lineno - 1
+                    import_names = ", ".join([a.name for a in node.names])
+                    new_lines[lineno] = f"from tests_common.test_utils.version_compat import {import_names}\n"
+                    console.print("[yellow]Replacing import in", test_file, "with correct one.")
+                    modified = True
+    if modified:
+        with test_file.open("w", encoding="utf-8") as f:
+            f.writelines(new_lines)
+        console.print(f"[yellow] {test_file} - replaced import with correct one.")
+    return errors
+
+
+def main():
+    if len(sys.argv) > 1:
+        test_files = [Path(f) for f in sys.argv[1:]]
+    else:
+        base = Path(__file__).parents[3] / "providers"
+        test_files = list(base.glob("**/tests/**/*.py"))
+        console.print(test_files)
+    all_errors = []
+    for test_file in test_files:
+        all_errors.extend(check_airflow_v_imports_and_fix(test_file))
+    if all_errors:
+        for err in all_errors:
+            console.print(f"[red]{err}")
+        console.print("\n[red]Some AIRFLOW_V_*_PLUS imports were incorrect![/]")
+        sys.exit(1)
+    console.print("[green]All AIRFLOW_V_*_PLUS imports in tests are from tests.test_utils.version_compat.")
+
+
+if __name__ == "__main__":
+    main()

From aa2342d36aa6b25bec6e1a0b07d9b15938421a00 Mon Sep 17 00:00:00 2001
From: Kevin Yang <85313829+sjyangkevin@users.noreply.github.com>
Date: Sat, 28 Jun 2025 18:02:03 -0400
Subject: [PATCH 274/381] Provider Migration: Update Oracle for Airflow 3.0
 compatibility (#52382)

* Update BaseOperator imports for Airflow 3.0 compatibility

* update based on latest instruction
---
 .../unit/always/test_project_structure.py     |  1 +
 .../providers/oracle/operators/oracle.py      |  8 +---
 .../oracle/transfers/oracle_to_oracle.py      |  8 +---
 .../providers/oracle/version_compat.py        | 43 +++++++++++++++++++
 .../unit/oracle/operators/test_oracle.py      |  3 +-
 5 files changed, 49 insertions(+), 14 deletions(-)
 create mode 100644 providers/oracle/src/airflow/providers/oracle/version_compat.py

diff --git a/airflow-core/tests/unit/always/test_project_structure.py b/airflow-core/tests/unit/always/test_project_structure.py
index 14d63b8b2116b..76a1aa41d1183 100644
--- a/airflow-core/tests/unit/always/test_project_structure.py
+++ b/airflow-core/tests/unit/always/test_project_structure.py
@@ -224,6 +224,7 @@ def test_providers_modules_should_have_tests(self):
             "providers/microsoft/azure/tests/unit/microsoft/azure/test_version_compat.py",
             "providers/openlineage/tests/unit/openlineage/test_version_compat.py",
             "providers/opensearch/tests/unit/opensearch/test_version_compat.py",
+            "providers/oracle/tests/unit/oracle/test_version_compat.py",
             "providers/presto/tests/unit/presto/test_version_compat.py",
             "providers/redis/tests/unit/redis/test_version_compat.py",
             "providers/sftp/tests/unit/sftp/test_version_compat.py",
diff --git a/providers/oracle/src/airflow/providers/oracle/operators/oracle.py b/providers/oracle/src/airflow/providers/oracle/operators/oracle.py
index 0eaf32ae6816f..0907752af142b 100644
--- a/providers/oracle/src/airflow/providers/oracle/operators/oracle.py
+++ b/providers/oracle/src/airflow/providers/oracle/operators/oracle.py
@@ -23,15 +23,11 @@
 
 import oracledb
 
-from airflow.models import BaseOperator
 from airflow.providers.oracle.hooks.oracle import OracleHook
+from airflow.providers.oracle.version_compat import BaseOperator
 
 if TYPE_CHECKING:
-    try:
-        from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+    from airflow.providers.oracle.version_compat import Context
 
 
 class OracleStoredProcedureOperator(BaseOperator):
diff --git a/providers/oracle/src/airflow/providers/oracle/transfers/oracle_to_oracle.py b/providers/oracle/src/airflow/providers/oracle/transfers/oracle_to_oracle.py
index 6e10383609acf..8d722e8658b6a 100644
--- a/providers/oracle/src/airflow/providers/oracle/transfers/oracle_to_oracle.py
+++ b/providers/oracle/src/airflow/providers/oracle/transfers/oracle_to_oracle.py
@@ -20,15 +20,11 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.oracle.hooks.oracle import OracleHook
+from airflow.providers.oracle.version_compat import BaseOperator
 
 if TYPE_CHECKING:
-    try:
-        from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+    from airflow.providers.oracle.version_compat import Context
 
 
 class OracleToOracleOperator(BaseOperator):
diff --git a/providers/oracle/src/airflow/providers/oracle/version_compat.py b/providers/oracle/src/airflow/providers/oracle/version_compat.py
new file mode 100644
index 0000000000000..c267288006129
--- /dev/null
+++ b/providers/oracle/src/airflow/providers/oracle/version_compat.py
@@ -0,0 +1,43 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+    from airflow.sdk.definitions.context import Context
+else:
+    from airflow.models import BaseOperator
+    from airflow.utils.context import Context
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+    "Context",
+]
diff --git a/providers/oracle/tests/unit/oracle/operators/test_oracle.py b/providers/oracle/tests/unit/oracle/operators/test_oracle.py
index 6fde023ff6639..37799cffcfdfa 100644
--- a/providers/oracle/tests/unit/oracle/operators/test_oracle.py
+++ b/providers/oracle/tests/unit/oracle/operators/test_oracle.py
@@ -26,8 +26,7 @@
 from airflow.models import TaskInstance
 from airflow.providers.oracle.hooks.oracle import OracleHook
 from airflow.providers.oracle.operators.oracle import OracleStoredProcedureOperator
-
-from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+from airflow.providers.oracle.version_compat import AIRFLOW_V_3_0_PLUS
 
 
 class TestOracleStoredProcedureOperator:

From 7937a9704a5b35c7a1f337856d52525c9acd35bf Mon Sep 17 00:00:00 2001
From: Kevin Yang <85313829+sjyangkevin@users.noreply.github.com>
Date: Sat, 28 Jun 2025 18:07:54 -0400
Subject: [PATCH 275/381] Provider Migration: Update Weaviate for Airflow 3.0
 compatibility (#52381)

* Update BaseOperator imports for Airflow 3.0 compatibility

* update according to latest instruction

* remove type ignore since it is not a mock context
---
 .../unit/always/test_project_structure.py     |  1 +
 .../providers/weaviate/operators/weaviate.py  |  8 +---
 .../providers/weaviate/version_compat.py      | 43 +++++++++++++++++++
 3 files changed, 46 insertions(+), 6 deletions(-)
 create mode 100644 providers/weaviate/src/airflow/providers/weaviate/version_compat.py

diff --git a/airflow-core/tests/unit/always/test_project_structure.py b/airflow-core/tests/unit/always/test_project_structure.py
index 76a1aa41d1183..31e6d64b6b3c6 100644
--- a/airflow-core/tests/unit/always/test_project_structure.py
+++ b/airflow-core/tests/unit/always/test_project_structure.py
@@ -240,6 +240,7 @@ def test_providers_modules_should_have_tests(self):
             "providers/standard/tests/unit/standard/utils/test_sensor_helper.py",
             "providers/tableau/tests/unit/tableau/test_version_compat.py",
             "providers/trino/tests/unit/trino/test_version_compat.py",
+            "providers/weaviate/tests/unit/weaviate/test_version_compat.py",
         ]
         modules_files: list[pathlib.Path] = list(
             AIRFLOW_PROVIDERS_ROOT_PATH.glob("**/src/airflow/providers/**/*.py")
diff --git a/providers/weaviate/src/airflow/providers/weaviate/operators/weaviate.py b/providers/weaviate/src/airflow/providers/weaviate/operators/weaviate.py
index 1facdf77beb0d..793f0a1d4ac91 100644
--- a/providers/weaviate/src/airflow/providers/weaviate/operators/weaviate.py
+++ b/providers/weaviate/src/airflow/providers/weaviate/operators/weaviate.py
@@ -21,18 +21,14 @@
 from functools import cached_property
 from typing import TYPE_CHECKING, Any
 
-from airflow.models import BaseOperator
 from airflow.providers.weaviate.hooks.weaviate import WeaviateHook
+from airflow.providers.weaviate.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     import pandas as pd
     from weaviate.types import UUID
 
-    try:
-        from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+    from airflow.providers.weaviate.version_compat import Context
 
 
 class WeaviateIngestOperator(BaseOperator):
diff --git a/providers/weaviate/src/airflow/providers/weaviate/version_compat.py b/providers/weaviate/src/airflow/providers/weaviate/version_compat.py
new file mode 100644
index 0000000000000..c267288006129
--- /dev/null
+++ b/providers/weaviate/src/airflow/providers/weaviate/version_compat.py
@@ -0,0 +1,43 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+    from airflow.sdk.definitions.context import Context
+else:
+    from airflow.models import BaseOperator
+    from airflow.utils.context import Context
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+    "Context",
+]

From e6ff18ca629d6033a7f15d93e4e8e31e297d4167 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sun, 29 Jun 2025 00:10:05 +0200
Subject: [PATCH 276/381] Add selected packages and explain why to the package
 scripts (#52433)

The script has now two more parameters:

* --selected-packages with comma separated list of packages
* --explain-why - explaining whhy the latest version of packages
  is not installed.
---
 dev/constraints-updated-version-check.py | 103 +++++++++++++++++++++--
 1 file changed, 96 insertions(+), 7 deletions(-)

diff --git a/dev/constraints-updated-version-check.py b/dev/constraints-updated-version-check.py
index 7b0b23c57704e..767df85743aa7 100644
--- a/dev/constraints-updated-version-check.py
+++ b/dev/constraints-updated-version-check.py
@@ -25,6 +25,7 @@
 from __future__ import annotations
 
 import json
+import os
 import re
 import urllib.request
 from datetime import datetime
@@ -156,7 +157,7 @@ def get_first_newer_release_date_str(releases, current_version):
     return datetime.fromisoformat(upload_time_str.replace("Z", "+00:00")).strftime("%Y-%m-%d")
 
 
-def main(python_version, mode):
+def main(python_version, mode, selected_packages=None, explain_why=False):
     lines = get_constraints_file(python_version)
 
     constraints_date = parse_constraints_generation_date(lines)
@@ -172,7 +173,9 @@ def main(python_version, mode):
         if line and not line.startswith("#") and "@" not in line:
             match = re.match(r"^([a-zA-Z0-9_.\-]+)==([\w.\-]+)$", line)
             if match:
-                packages.append((match.group(1), match.group(2)))
+                pkg_name = match.group(1)
+                if not selected_packages or (pkg_name in selected_packages):
+                    packages.append((pkg_name, match.group(2)))
 
     max_pkg_length = get_max_package_length(packages)
 
@@ -209,13 +212,84 @@ def main(python_version, mode):
         "PyPI Link",
     ]
 
-    console.print(f"[bold magenta]{format_str.format(*headers)}[/]")
-    total_width = sum(col_widths.values()) + (len(col_widths) - 1) * 3
-    console.print(f"[magenta]{'=' * total_width}[/]")
+    if not explain_why:
+        console.print(f"[bold magenta]{format_str.format(*headers)}[/]")
+        total_width = sum(col_widths.values()) + (len(col_widths) - 1) * 3
+        console.print(f"[magenta]{'=' * total_width}[/]")
+    else:
+        total_width = sum(col_widths.values()) + (len(col_widths) - 1) * 3
 
     outdated_count = 0
     skipped_count = 0
 
+    if explain_why and packages:
+        import shutil
+        import subprocess
+        from contextlib import contextmanager
+        from pathlib import Path
+
+        @contextmanager
+        def pyproject_backup_restore(pyproject_path):
+            backup_path = pyproject_path.with_suffix(pyproject_path.suffix + ".bak")
+            shutil.copyfile(pyproject_path, backup_path)
+            try:
+                yield
+            finally:
+                if backup_path.exists():
+                    shutil.copyfile(backup_path, pyproject_path)
+                    backup_path.unlink()
+
+        def run_uv_sync(cmd, cwd):
+            env = os.environ.copy()
+            env.pop("VIRTUAL_ENV", None)
+            result = subprocess.run(cmd, cwd=cwd, env=env, capture_output=True, text=True)
+            return result.stdout + result.stderr
+
+        airflow_pyproject = Path(__file__).parent.parent / "pyproject.toml"
+        airflow_pyproject = airflow_pyproject.resolve()
+        repo_root = airflow_pyproject.parent
+        with pyproject_backup_restore(airflow_pyproject):
+            for pkg, _ in packages:
+                console.print(f"[bold blue]\n--- Explaining for {pkg} ---[/]")
+                # 1. Run uv sync --all-packages
+                before_output = run_uv_sync(
+                    ["uv", "sync", "--all-packages", "--resolution", "highest"], cwd=repo_root
+                )
+                with open("/tmp/uv_sync_before.txt", "w") as f:
+                    f.write(before_output)
+                # 2. Get latest version from PyPI
+                pypi_url = f"https://pypi.org/pypi/{pkg}/json"
+                with urllib.request.urlopen(pypi_url) as resp:
+                    data = json.loads(resp.read().decode("utf-8"))
+                    latest_version = data["info"]["version"]
+                # 3. Update pyproject.toml (append dependency line)
+                lines = airflow_pyproject.read_text().splitlines()
+                new_lines = []
+                in_deps = False
+                dep_added = False
+                for line in lines:
+                    new_lines.append(line)
+                    if line.strip() == "dependencies = [":
+                        in_deps = True
+                    elif in_deps and line.strip().startswith("]") and not dep_added:
+                        # Add the new dependency just before closing bracket
+                        new_lines.insert(-1, f'    "{pkg}=={latest_version}",')
+                        dep_added = True
+                        in_deps = False
+                if not dep_added:
+                    # fallback: just append at the end
+                    new_lines.append(f'    "{pkg}=={latest_version}",')
+                airflow_pyproject.write_text("\n".join(new_lines) + "\n")
+                # 4. Run uv sync --all-packages and capture output
+                after_output = run_uv_sync(
+                    ["uv", "sync", "--all-packages", "--resolution", "highest"], cwd=repo_root
+                )
+                with open("/tmp/uv_sync_after.txt", "w") as f:
+                    f.write(after_output)
+                console.print(f"[yellow]uv sync output for {pkg}=={latest_version}:[/]")
+                console.print(after_output)
+        return
+
     for pkg, pinned_version in packages:
         try:
             pypi_url = f"https://pypi.org/pypi/{pkg}/json"
@@ -314,8 +388,23 @@ def main(python_version, mode):
     show_default=True,
     help="Operation mode: full, diff-constraints, or diff-all.",
 )
-def cli(python_version, mode):
-    main(python_version, mode)
+@click.option(
+    "--selected-packages",
+    required=False,
+    default=None,
+    help="Comma-separated list of package names to check (e.g., 'requests,flask'). If not set, all packages are checked.",
+)
+@click.option(
+    "--explain-why",
+    is_flag=True,
+    default=False,
+    help="For each selected package, attempts to upgrade to the latest version and explains why it cannot be upgraded.",
+)
+def cli(python_version, mode, selected_packages, explain_why):
+    selected_packages_set = None
+    if selected_packages:
+        selected_packages_set = set(pkg.strip() for pkg in selected_packages.split(",") if pkg.strip())
+    main(python_version, mode, selected_packages_set, explain_why)
 
 
 if __name__ == "__main__":

From 56c4701a15483990cd9ab1311269c9eb722b6699 Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Sun, 29 Jun 2025 11:06:24 +0530
Subject: [PATCH 277/381] Fix failing static check for Oracle provider (#52436)

---
 providers/oracle/tests/unit/oracle/operators/test_oracle.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/providers/oracle/tests/unit/oracle/operators/test_oracle.py b/providers/oracle/tests/unit/oracle/operators/test_oracle.py
index 37799cffcfdfa..6fde023ff6639 100644
--- a/providers/oracle/tests/unit/oracle/operators/test_oracle.py
+++ b/providers/oracle/tests/unit/oracle/operators/test_oracle.py
@@ -26,7 +26,8 @@
 from airflow.models import TaskInstance
 from airflow.providers.oracle.hooks.oracle import OracleHook
 from airflow.providers.oracle.operators.oracle import OracleStoredProcedureOperator
-from airflow.providers.oracle.version_compat import AIRFLOW_V_3_0_PLUS
+
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 
 class TestOracleStoredProcedureOperator:

From ebc06786c9aa86bcb40cd2ef939eee53b38d866e Mon Sep 17 00:00:00 2001
From: Jake Roach <116606359+jroachgolf84@users.noreply.github.com>
Date: Sun, 29 Jun 2025 03:16:27 -0400
Subject: [PATCH 278/381] Replace `models.BaseOperator` to Task SDK one for
 SFTP (#52435)

* Replace models.BaseOperator to Task SDK one for SFTP

* Resolve MC, adding PokeReturnValue to version_compat.py
---
 .../sftp/src/airflow/providers/sftp/operators/sftp.py     | 2 +-
 providers/sftp/src/airflow/providers/sftp/sensors/sftp.py | 7 +------
 .../sftp/src/airflow/providers/sftp/version_compat.py     | 8 ++++++++
 3 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/providers/sftp/src/airflow/providers/sftp/operators/sftp.py b/providers/sftp/src/airflow/providers/sftp/operators/sftp.py
index dfa7577c7281c..8e1e3c85592cf 100644
--- a/providers/sftp/src/airflow/providers/sftp/operators/sftp.py
+++ b/providers/sftp/src/airflow/providers/sftp/operators/sftp.py
@@ -28,8 +28,8 @@
 import paramiko
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.sftp.hooks.sftp import SFTPHook
+from airflow.providers.sftp.version_compat import BaseOperator
 
 
 class SFTPOperation:
diff --git a/providers/sftp/src/airflow/providers/sftp/sensors/sftp.py b/providers/sftp/src/airflow/providers/sftp/sensors/sftp.py
index dc7758e47f5a2..1d3349f696cbf 100644
--- a/providers/sftp/src/airflow/providers/sftp/sensors/sftp.py
+++ b/providers/sftp/src/airflow/providers/sftp/sensors/sftp.py
@@ -30,14 +30,9 @@
 from airflow.exceptions import AirflowException
 from airflow.providers.sftp.hooks.sftp import SFTPHook
 from airflow.providers.sftp.triggers.sftp import SFTPTrigger
-from airflow.providers.sftp.version_compat import AIRFLOW_V_3_0_PLUS
+from airflow.providers.sftp.version_compat import BaseSensorOperator, PokeReturnValue
 from airflow.utils.timezone import convert_to_utc, parse
 
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseSensorOperator, PokeReturnValue
-else:
-    from airflow.sensors.base import BaseSensorOperator, PokeReturnValue  # type: ignore[no-redef]
-
 if TYPE_CHECKING:
     try:
         from airflow.sdk.definitions.context import Context
diff --git a/providers/sftp/src/airflow/providers/sftp/version_compat.py b/providers/sftp/src/airflow/providers/sftp/version_compat.py
index 48d122b669696..cb0e95874b6be 100644
--- a/providers/sftp/src/airflow/providers/sftp/version_compat.py
+++ b/providers/sftp/src/airflow/providers/sftp/version_compat.py
@@ -33,3 +33,11 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator, BaseSensorOperator, PokeReturnValue
+else:
+    from airflow.models import BaseOperator
+    from airflow.sensors.base import BaseSensorOperator, PokeReturnValue  # type: ignore[no-redef]
+
+__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseOperator", "BaseSensorOperator", "PokeReturnValue"]

From 933a9e2b189c4ce16ddfa010f0b478a58ecb65e5 Mon Sep 17 00:00:00 2001
From: Jens Scheffler <95105677+jscheffl@users.noreply.github.com>
Date: Sun, 29 Jun 2025 09:18:24 +0200
Subject: [PATCH 279/381] Clean some leftovers of Python 3.9 removal - Task-SDK
 (#52434)

---
 task-sdk/pyproject.toml                       |   7 +-
 task-sdk/src/airflow/sdk/bases/decorator.py   |   6 +-
 task-sdk/src/airflow/sdk/bases/sensor.py      |  14 +--
 .../definitions/_internal/abstractoperator.py |   2 +-
 .../sdk/definitions/_internal/expandinput.py  |   6 +-
 .../airflow/sdk/definitions/_internal/node.py |   2 +-
 .../airflow/sdk/definitions/asset/__init__.py |   5 +-
 task-sdk/src/airflow/sdk/definitions/dag.py   |  17 +--
 .../src/airflow/sdk/definitions/deadline.py   |   3 +-
 .../sdk/definitions/decorators/__init__.py    |   2 +-
 .../sdk/definitions/decorators/__init__.pyi   |   4 +-
 .../sdk/definitions/decorators/condition.py   |   5 +-
 .../definitions/decorators/setup_teardown.py  |   3 +-
 .../sdk/definitions/decorators/task_group.py  |   6 +-
 task-sdk/src/airflow/sdk/definitions/edges.py |   2 +-
 .../airflow/sdk/definitions/mappedoperator.py |  20 ++--
 .../src/airflow/sdk/definitions/xcom_arg.py   |  12 +-
 .../sdk/execution_time/callback_runner.py     |   3 +-
 .../src/airflow/sdk/execution_time/comms.py   | 104 +++++++++---------
 .../src/airflow/sdk/execution_time/context.py |   2 +-
 .../sdk/execution_time/secrets_masker.py      |  26 ++---
 .../airflow/sdk/execution_time/supervisor.py  |   3 +-
 .../airflow/sdk/execution_time/task_runner.py |   6 +-
 task-sdk/src/airflow/sdk/log.py               |   3 +-
 task-sdk/src/airflow/sdk/types.py             |   4 +-
 task-sdk/tests/conftest.py                    |   2 +-
 .../tests/task_sdk/definitions/conftest.py    |   2 +-
 .../tests/task_sdk/definitions/test_asset.py  |   4 +-
 .../definitions/test_mappedoperator.py        |   3 +-
 .../task_sdk/definitions/test_xcom_arg.py     |   2 +-
 30 files changed, 131 insertions(+), 149 deletions(-)

diff --git a/task-sdk/pyproject.toml b/task-sdk/pyproject.toml
index 468a6308e6032..fb2c514349556 100644
--- a/task-sdk/pyproject.toml
+++ b/task-sdk/pyproject.toml
@@ -21,7 +21,7 @@ dynamic = ["version"]
 description = "Python Task SDK for Apache Airflow DAG Authors"
 readme = { file = "README.md", content-type = "text/markdown" }
 license-files.globs = ["LICENSE"]
-requires-python = ">=3.9, <3.13"
+requires-python = ">=3.10, <3.13"
 
 authors = [
     {name="Apache Software Foundation", email="dev@airflow.apache.org"},
@@ -38,7 +38,6 @@ classifiers = [
     "Intended Audience :: System Administrators",
     "Framework :: Apache Airflow",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
@@ -169,14 +168,14 @@ enum-field-as-literal='one' # When a single enum member, make it output a `Liter
 input-file-type='openapi'
 output-model-type='pydantic_v2.BaseModel'
 output-datetime-class='AwareDatetime'
-target-python-version='3.9'
+target-python-version='3.10'
 use-annotated=true
 use-default=true
 use-double-quotes=true
 use-schema-description=true  # Desc becomes class doc comment
 use-standard-collections=true # list[] not List[]
 use-subclass-enum=true # enum, not union of Literals
-use-union-operator=true # 3.9+annotations, not `Union[]`
+use-union-operator=true # annotations, not `Union[]`
 custom-formatters = ['datamodel_code_formatter']
 
 url = 'http://0.0.0.0:8080/execution/openapi.json'
diff --git a/task-sdk/src/airflow/sdk/bases/decorator.py b/task-sdk/src/airflow/sdk/bases/decorator.py
index c1063774220de..fb77b079a3386 100644
--- a/task-sdk/src/airflow/sdk/bases/decorator.py
+++ b/task-sdk/src/airflow/sdk/bases/decorator.py
@@ -21,9 +21,9 @@
 import re
 import textwrap
 import warnings
-from collections.abc import Collection, Iterator, Mapping, Sequence
+from collections.abc import Callable, Collection, Iterator, Mapping, Sequence
 from functools import cached_property, update_wrapper
-from typing import TYPE_CHECKING, Any, Callable, ClassVar, Generic, Protocol, TypeVar, cast, overload
+from typing import TYPE_CHECKING, Any, ClassVar, Generic, Protocol, TypeVar, cast, overload
 
 import attr
 import typing_extensions
@@ -424,7 +424,7 @@ def expand_kwargs(self, kwargs: OperatorExpandKwargsArgument, *, strict: bool =
             )
         if isinstance(kwargs, Sequence):
             for item in kwargs:
-                if not isinstance(item, (XComArg, Mapping)):
+                if not isinstance(item, XComArg | Mapping):
                     raise TypeError(f"expected XComArg or list[dict], not {type(kwargs).__name__}")
         elif not isinstance(kwargs, XComArg):
             raise TypeError(f"expected XComArg or list[dict], not {type(kwargs).__name__}")
diff --git a/task-sdk/src/airflow/sdk/bases/sensor.py b/task-sdk/src/airflow/sdk/bases/sensor.py
index ca2b80cb97eb6..a912476322c15 100644
--- a/task-sdk/src/airflow/sdk/bases/sensor.py
+++ b/task-sdk/src/airflow/sdk/bases/sensor.py
@@ -21,9 +21,9 @@
 import hashlib
 import time
 import traceback
-from collections.abc import Iterable
+from collections.abc import Callable, Iterable
 from datetime import timedelta
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
 
 from airflow.configuration import conf
 from airflow.exceptions import (
@@ -143,7 +143,7 @@ def __init__(
     def _coerce_poke_interval(poke_interval: float | timedelta) -> timedelta:
         if isinstance(poke_interval, timedelta):
             return poke_interval
-        if isinstance(poke_interval, (int, float)) and poke_interval >= 0:
+        if isinstance(poke_interval, int | float) and poke_interval >= 0:
             return timedelta(seconds=poke_interval)
         raise AirflowException(
             "Operator arg `poke_interval` must be timedelta object or a non-negative number"
@@ -153,7 +153,7 @@ def _coerce_poke_interval(poke_interval: float | timedelta) -> timedelta:
     def _coerce_timeout(timeout: float | timedelta) -> timedelta:
         if isinstance(timeout, timedelta):
             return timeout
-        if isinstance(timeout, (int, float)) and timeout >= 0:
+        if isinstance(timeout, int | float) and timeout >= 0:
             return timedelta(seconds=timeout)
         raise AirflowException("Operator arg `timeout` must be timedelta object or a non-negative number")
 
@@ -161,14 +161,14 @@ def _coerce_timeout(timeout: float | timedelta) -> timedelta:
     def _coerce_max_wait(max_wait: float | timedelta | None) -> timedelta | None:
         if max_wait is None or isinstance(max_wait, timedelta):
             return max_wait
-        if isinstance(max_wait, (int, float)) and max_wait >= 0:
+        if isinstance(max_wait, int | float) and max_wait >= 0:
             return timedelta(seconds=max_wait)
         raise AirflowException("Operator arg `max_wait` must be timedelta object or a non-negative number")
 
     def _validate_input_values(self) -> None:
-        if not isinstance(self.poke_interval, (int, float)) or self.poke_interval < 0:
+        if not isinstance(self.poke_interval, int | float) or self.poke_interval < 0:
             raise AirflowException("The poke_interval must be a non-negative number")
-        if not isinstance(self.timeout, (int, float)) or self.timeout < 0:
+        if not isinstance(self.timeout, int | float) or self.timeout < 0:
             raise AirflowException("The timeout must be a non-negative number")
         if self.mode not in self.valid_modes:
             raise AirflowException(
diff --git a/task-sdk/src/airflow/sdk/definitions/_internal/abstractoperator.py b/task-sdk/src/airflow/sdk/definitions/_internal/abstractoperator.py
index ec2fefa0a08b4..4180c4edaa4db 100644
--- a/task-sdk/src/airflow/sdk/definitions/_internal/abstractoperator.py
+++ b/task-sdk/src/airflow/sdk/definitions/_internal/abstractoperator.py
@@ -426,7 +426,7 @@ def _walk_group(group: TaskGroup) -> Iterable[tuple[str, DAGNode]]:
         for key, child in _walk_group(dag.task_group):
             if key == self.node_id:
                 continue
-            if not isinstance(child, (MappedOperator, MappedTaskGroup)):
+            if not isinstance(child, MappedOperator | MappedTaskGroup):
                 continue
             if self.node_id in child.upstream_task_ids:
                 yield child
diff --git a/task-sdk/src/airflow/sdk/definitions/_internal/expandinput.py b/task-sdk/src/airflow/sdk/definitions/_internal/expandinput.py
index b1c0c6ee5f979..00b12e24b399d 100644
--- a/task-sdk/src/airflow/sdk/definitions/_internal/expandinput.py
+++ b/task-sdk/src/airflow/sdk/definitions/_internal/expandinput.py
@@ -62,21 +62,21 @@ def __str__(self) -> str:
 def is_mappable(v: Any) -> TypeGuard[OperatorExpandArgument]:
     from airflow.sdk.definitions.xcom_arg import XComArg
 
-    return isinstance(v, (MappedArgument, XComArg, Mapping, Sequence)) and not isinstance(v, str)
+    return isinstance(v, MappedArgument | XComArg | Mapping | Sequence) and not isinstance(v, str)
 
 
 # To replace tedious isinstance() checks.
 def _is_parse_time_mappable(v: OperatorExpandArgument) -> TypeGuard[Mapping | Sequence]:
     from airflow.sdk.definitions.xcom_arg import XComArg
 
-    return not isinstance(v, (MappedArgument, XComArg))
+    return not isinstance(v, MappedArgument | XComArg)
 
 
 # To replace tedious isinstance() checks.
 def _needs_run_time_resolution(v: OperatorExpandArgument) -> TypeGuard[MappedArgument | XComArg]:
     from airflow.sdk.definitions.xcom_arg import XComArg
 
-    return isinstance(v, (MappedArgument, XComArg))
+    return isinstance(v, MappedArgument | XComArg)
 
 
 @attrs.define(kw_only=True)
diff --git a/task-sdk/src/airflow/sdk/definitions/_internal/node.py b/task-sdk/src/airflow/sdk/definitions/_internal/node.py
index 21fa4ede5b1c9..177111af541c0 100644
--- a/task-sdk/src/airflow/sdk/definitions/_internal/node.py
+++ b/task-sdk/src/airflow/sdk/definitions/_internal/node.py
@@ -168,7 +168,7 @@ def _set_relatives(
             task_object.update_relative(self, not upstream, edge_modifier=edge_modifier)
             relatives = task_object.leaves if upstream else task_object.roots
             for task in relatives:
-                if not isinstance(task, (BaseOperator, MappedOperator)):
+                if not isinstance(task, BaseOperator | MappedOperator):
                     raise TypeError(
                         f"Relationships can only be set between Operators; received {task.__class__.__name__}"
                     )
diff --git a/task-sdk/src/airflow/sdk/definitions/asset/__init__.py b/task-sdk/src/airflow/sdk/definitions/asset/__init__.py
index 9cb913807ee91..3fd9985521b74 100644
--- a/task-sdk/src/airflow/sdk/definitions/asset/__init__.py
+++ b/task-sdk/src/airflow/sdk/definitions/asset/__init__.py
@@ -23,7 +23,8 @@
 import os
 import urllib.parse
 import warnings
-from typing import TYPE_CHECKING, Any, Callable, ClassVar, Literal, Union, overload
+from collections.abc import Callable
+from typing import TYPE_CHECKING, Any, ClassVar, Literal, overload
 
 import attrs
 
@@ -117,7 +118,7 @@ def to_asset_alias(self) -> AssetAlias:
         return AssetAlias(name=self.name)
 
 
-BaseAssetUniqueKey = Union[AssetUniqueKey, AssetAliasUniqueKey]
+BaseAssetUniqueKey = AssetUniqueKey | AssetAliasUniqueKey
 
 
 def normalize_noop(parts: SplitResult) -> SplitResult:
diff --git a/task-sdk/src/airflow/sdk/definitions/dag.py b/task-sdk/src/airflow/sdk/definitions/dag.py
index c0a4230377449..5291a38651486 100644
--- a/task-sdk/src/airflow/sdk/definitions/dag.py
+++ b/task-sdk/src/airflow/sdk/definitions/dag.py
@@ -25,15 +25,13 @@
 import sys
 import weakref
 from collections import abc
-from collections.abc import Collection, Iterable, MutableSet
+from collections.abc import Callable, Collection, Iterable, MutableSet
 from datetime import datetime, timedelta
 from inspect import signature
 from typing import (
     TYPE_CHECKING,
     Any,
-    Callable,
     ClassVar,
-    Union,
     cast,
     overload,
 )
@@ -93,7 +91,7 @@
 DagStateChangeCallback = Callable[[Context], None]
 ScheduleInterval = None | str | timedelta | relativedelta
 
-ScheduleArg = Union[ScheduleInterval, Timetable, BaseAsset, Collection[BaseAsset]]
+ScheduleArg = ScheduleInterval | Timetable | BaseAsset | Collection[BaseAsset]
 
 
 _DAG_HASH_ATTRS = frozenset(
@@ -124,7 +122,7 @@ def _create_timetable(interval: ScheduleInterval, timezone: Timezone | FixedTime
         return OnceTimetable()
     if interval == "@continuous":
         return ContinuousTimetable()
-    if isinstance(interval, (timedelta, relativedelta)):
+    if isinstance(interval, timedelta | relativedelta):
         if airflow_conf.getboolean("scheduler", "create_cron_data_intervals"):
             return DeltaDataIntervalTimetable(interval)
         return DeltaTriggerTimetable(interval)
@@ -809,7 +807,7 @@ def partial_subset(
         direct_upstreams: list[Operator] = []
         if include_direct_upstream:
             for t in itertools.chain(matched_tasks, also_include):
-                upstream = (u for u in t.upstream_list if isinstance(u, (BaseOperator, MappedOperator)))
+                upstream = (u for u in t.upstream_list if isinstance(u, BaseOperator | MappedOperator))
                 direct_upstreams.extend(upstream)
 
         # Make sure to not recursively deepcopy the dag or task_group while copying the task.
@@ -1284,12 +1282,7 @@ def _run_inline_trigger(trigger):
     import asyncio
 
     async def _run_inline_trigger_main():
-        # We can replace it with `return await anext(trigger.run(), default=None)`
-        # when we drop support for Python 3.9
-        try:
-            return await trigger.run().__anext__()
-        except StopAsyncIteration:
-            return None
+        return await anext(trigger.run(), None)
 
     return asyncio.run(_run_inline_trigger_main())
 
diff --git a/task-sdk/src/airflow/sdk/definitions/deadline.py b/task-sdk/src/airflow/sdk/definitions/deadline.py
index 3c775b5064364..2b4a44af0adcf 100644
--- a/task-sdk/src/airflow/sdk/definitions/deadline.py
+++ b/task-sdk/src/airflow/sdk/definitions/deadline.py
@@ -17,8 +17,9 @@
 from __future__ import annotations
 
 import logging
+from collections.abc import Callable
 from datetime import datetime, timedelta
-from typing import TYPE_CHECKING, Callable
+from typing import TYPE_CHECKING
 
 from airflow.models.deadline import ReferenceModels
 from airflow.serialization.enums import DagAttributeTypes as DAT, Encoding
diff --git a/task-sdk/src/airflow/sdk/definitions/decorators/__init__.py b/task-sdk/src/airflow/sdk/definitions/decorators/__init__.py
index b6c3c879faf8c..41a7c2d0bf290 100644
--- a/task-sdk/src/airflow/sdk/definitions/decorators/__init__.py
+++ b/task-sdk/src/airflow/sdk/definitions/decorators/__init__.py
@@ -16,7 +16,7 @@
 # under the License.
 from __future__ import annotations
 
-from typing import Callable
+from collections.abc import Callable
 
 from airflow.providers_manager import ProvidersManager
 from airflow.sdk.bases.decorator import TaskDecorator
diff --git a/task-sdk/src/airflow/sdk/definitions/decorators/__init__.pyi b/task-sdk/src/airflow/sdk/definitions/decorators/__init__.pyi
index 30e921f2f4881..e60852a3f02d9 100644
--- a/task-sdk/src/airflow/sdk/definitions/decorators/__init__.pyi
+++ b/task-sdk/src/airflow/sdk/definitions/decorators/__init__.pyi
@@ -20,9 +20,9 @@
 # documentation for more details.
 from __future__ import annotations
 
-from collections.abc import Collection, Container, Iterable, Mapping
+from collections.abc import Callable, Collection, Container, Iterable, Mapping
 from datetime import timedelta
-from typing import Any, Callable, TypeVar, overload
+from typing import Any, TypeVar, overload
 
 from docker.types import Mount
 from kubernetes.client import models as k8s
diff --git a/task-sdk/src/airflow/sdk/definitions/decorators/condition.py b/task-sdk/src/airflow/sdk/definitions/decorators/condition.py
index 5ccf6b685d497..2808563ffcfd5 100644
--- a/task-sdk/src/airflow/sdk/definitions/decorators/condition.py
+++ b/task-sdk/src/airflow/sdk/definitions/decorators/condition.py
@@ -16,14 +16,15 @@
 # under the License.
 from __future__ import annotations
 
+from collections.abc import Callable
 from functools import wraps
-from typing import TYPE_CHECKING, Any, Callable, TypeVar
+from typing import TYPE_CHECKING, Any, TypeVar
 
 from airflow.exceptions import AirflowSkipException
 from airflow.sdk.bases.decorator import Task, _TaskDecorator
 
 if TYPE_CHECKING:
-    from typing_extensions import TypeAlias
+    from typing import TypeAlias
 
     from airflow.sdk.bases.operator import TaskPreExecuteHook
     from airflow.sdk.definitions.context import Context
diff --git a/task-sdk/src/airflow/sdk/definitions/decorators/setup_teardown.py b/task-sdk/src/airflow/sdk/definitions/decorators/setup_teardown.py
index c53a84ea71bc8..e5e2bf40ee991 100644
--- a/task-sdk/src/airflow/sdk/definitions/decorators/setup_teardown.py
+++ b/task-sdk/src/airflow/sdk/definitions/decorators/setup_teardown.py
@@ -17,7 +17,8 @@
 from __future__ import annotations
 
 import types
-from typing import TYPE_CHECKING, Callable
+from collections.abc import Callable
+from typing import TYPE_CHECKING
 
 from airflow.exceptions import AirflowException
 from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
diff --git a/task-sdk/src/airflow/sdk/definitions/decorators/task_group.py b/task-sdk/src/airflow/sdk/definitions/decorators/task_group.py
index bb718abdb2021..809f5889e003e 100644
--- a/task-sdk/src/airflow/sdk/definitions/decorators/task_group.py
+++ b/task-sdk/src/airflow/sdk/definitions/decorators/task_group.py
@@ -28,8 +28,8 @@
 import functools
 import inspect
 import warnings
-from collections.abc import Mapping, Sequence
-from typing import TYPE_CHECKING, Any, Callable, ClassVar, Generic, TypeVar, overload
+from collections.abc import Callable, Mapping, Sequence
+from typing import TYPE_CHECKING, Any, ClassVar, Generic, TypeVar, overload
 
 import attr
 
@@ -144,7 +144,7 @@ def expand(self, **kwargs: OperatorExpandArgument) -> DAGNode:
     def expand_kwargs(self, kwargs: OperatorExpandKwargsArgument) -> DAGNode:
         if isinstance(kwargs, Sequence):
             for item in kwargs:
-                if not isinstance(item, (XComArg, Mapping)):
+                if not isinstance(item, XComArg | Mapping):
                     raise TypeError(f"expected XComArg or list[dict], not {type(kwargs).__name__}")
         elif not isinstance(kwargs, XComArg):
             raise TypeError(f"expected XComArg or list[dict], not {type(kwargs).__name__}")
diff --git a/task-sdk/src/airflow/sdk/definitions/edges.py b/task-sdk/src/airflow/sdk/definitions/edges.py
index 39fafc4b932c8..4a52b9df32c4e 100644
--- a/task-sdk/src/airflow/sdk/definitions/edges.py
+++ b/task-sdk/src/airflow/sdk/definitions/edges.py
@@ -75,7 +75,7 @@ def _save_nodes(
         from airflow.sdk.definitions.xcom_arg import XComArg
 
         for node in self._make_list(nodes):
-            if isinstance(node, (TaskGroup, XComArg, DAGNode)):
+            if isinstance(node, TaskGroup | XComArg | DAGNode):
                 stream.append(node)
             else:
                 raise TypeError(
diff --git a/task-sdk/src/airflow/sdk/definitions/mappedoperator.py b/task-sdk/src/airflow/sdk/definitions/mappedoperator.py
index 58c03c31b87d7..9f2cc18604354 100644
--- a/task-sdk/src/airflow/sdk/definitions/mappedoperator.py
+++ b/task-sdk/src/airflow/sdk/definitions/mappedoperator.py
@@ -21,11 +21,12 @@
 import copy
 import warnings
 from collections.abc import Collection, Iterable, Iterator, Mapping, Sequence
-from typing import TYPE_CHECKING, Any, ClassVar, Union
+from typing import TYPE_CHECKING, Any, ClassVar
 
 import attrs
 import methodtools
 
+from airflow.models.abstractoperator import TaskStateChangeCallback
 from airflow.sdk.definitions._internal.abstractoperator import (
     DEFAULT_EXECUTOR,
     DEFAULT_IGNORE_FIRST_DEPENDS_ON_PAST,
@@ -60,9 +61,6 @@
     import jinja2  # Slow import.
     import pendulum
 
-    from airflow.models.abstractoperator import (
-        TaskStateChangeCallback,
-    )
     from airflow.models.expandinput import (
         OperatorExpandArgument,
         OperatorExpandKwargsArgument,
@@ -73,7 +71,6 @@
     from airflow.sdk.definitions.dag import DAG
     from airflow.sdk.definitions.param import ParamsDict
     from airflow.sdk.definitions.xcom_arg import XComArg
-    from airflow.sdk.types import Operator
     from airflow.ti_deps.deps.base_ti_dep import BaseTIDep
     from airflow.triggers.base import StartTriggerArgs
     from airflow.typing_compat import TypeGuard
@@ -82,9 +79,8 @@
     from airflow.utils.task_group import TaskGroup
     from airflow.utils.trigger_rule import TriggerRule
 
-    TaskStateChangeCallbackAttrType = Union[None, TaskStateChangeCallback, list[TaskStateChangeCallback]]
-
-ValidationSource = Union[Literal["expand"], Literal["partial"]]
+TaskStateChangeCallbackAttrType = TaskStateChangeCallback | list[TaskStateChangeCallback] | None
+ValidationSource = Literal["expand"] | Literal["partial"]
 
 
 def validate_mapping_kwargs(op: type[BaseOperator], func: ValidationSource, value: dict[str, Any]) -> None:
@@ -144,9 +140,9 @@ def is_mappable_value(value: Any) -> TypeGuard[Collection]:
 
     :meta private:
     """
-    if not isinstance(value, (Sequence, dict)):
+    if not isinstance(value, Sequence | dict):
         return False
-    if isinstance(value, (bytearray, bytes, str)):
+    if isinstance(value, bytearray | bytes | str):
         return False
     return True
 
@@ -196,7 +192,7 @@ def expand_kwargs(self, kwargs: OperatorExpandKwargsArgument, *, strict: bool =
 
         if isinstance(kwargs, Sequence):
             for item in kwargs:
-                if not isinstance(item, (XComArg, Mapping)):
+                if not isinstance(item, XComArg | Mapping):
                     raise TypeError(f"expected XComArg or list[dict], not {type(kwargs).__name__}")
         elif not isinstance(kwargs, XComArg):
             raise TypeError(f"expected XComArg or list[dict], not {type(kwargs).__name__}")
@@ -786,7 +782,7 @@ def prepare_for_execution(self) -> MappedOperator:
         # we don't need to create a copy of the MappedOperator here.
         return self
 
-    def iter_mapped_dependencies(self) -> Iterator[Operator]:
+    def iter_mapped_dependencies(self) -> Iterator[AbstractOperator]:
         """Upstream dependencies that provide XComs used by this task for task mapping."""
         from airflow.sdk.definitions.xcom_arg import XComArg
 
diff --git a/task-sdk/src/airflow/sdk/definitions/xcom_arg.py b/task-sdk/src/airflow/sdk/definitions/xcom_arg.py
index 2a93585304cb0..7a5ed0468e739 100644
--- a/task-sdk/src/airflow/sdk/definitions/xcom_arg.py
+++ b/task-sdk/src/airflow/sdk/definitions/xcom_arg.py
@@ -20,9 +20,9 @@
 import contextlib
 import inspect
 import itertools
-from collections.abc import Iterable, Iterator, Mapping, Sequence, Sized
+from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence, Sized
 from functools import singledispatch
-from typing import TYPE_CHECKING, Any, Callable, overload
+from typing import TYPE_CHECKING, Any, overload
 
 from airflow.exceptions import AirflowException, XComNotFound
 from airflow.sdk.definitions._internal.abstractoperator import AbstractOperator
@@ -104,7 +104,7 @@ def iter_xcom_references(arg: Any) -> Iterator[tuple[Operator, str]]:
         """
         if isinstance(arg, ResolveMixin):
             yield from arg.iter_references()
-        elif isinstance(arg, (tuple, set, list)):
+        elif isinstance(arg, tuple | set | list):
             for elem in arg:
                 yield from XComArg.iter_xcom_references(elem)
         elif isinstance(arg, dict):
@@ -429,7 +429,7 @@ def map(self, f: Callable[[Any], Any]) -> MapXComArg:
 
     def resolve(self, context: Mapping[str, Any]) -> Any:
         value = self.arg.resolve(context)
-        if not isinstance(value, (Sequence, dict)):
+        if not isinstance(value, Sequence | dict):
             raise ValueError(f"XCom map expects sequence or dict, not {type(value).__name__}")
         return _MapResult(value, self.callables)
 
@@ -494,7 +494,7 @@ def iter_references(self) -> Iterator[tuple[Operator, str]]:
     def resolve(self, context: Mapping[str, Any]) -> Any:
         values = [arg.resolve(context) for arg in self.args]
         for value in values:
-            if not isinstance(value, (Sequence, dict)):
+            if not isinstance(value, Sequence | dict):
                 raise ValueError(f"XCom zip expects sequence or dict, not {type(value).__name__}")
         return _ZipResult(values, fillvalue=self.fillvalue)
 
@@ -557,7 +557,7 @@ def concat(self, *others: XComArg) -> ConcatXComArg:
     def resolve(self, context: Mapping[str, Any]) -> Any:
         values = [arg.resolve(context) for arg in self.args]
         for value in values:
-            if not isinstance(value, (Sequence, dict)):
+            if not isinstance(value, Sequence | dict):
                 raise ValueError(f"XCom concat expects sequence or dict, not {type(value).__name__}")
         return _ConcatResult(values)
 
diff --git a/task-sdk/src/airflow/sdk/execution_time/callback_runner.py b/task-sdk/src/airflow/sdk/execution_time/callback_runner.py
index f35d76d058915..316c3d38e99b8 100644
--- a/task-sdk/src/airflow/sdk/execution_time/callback_runner.py
+++ b/task-sdk/src/airflow/sdk/execution_time/callback_runner.py
@@ -20,7 +20,8 @@
 
 import inspect
 import logging
-from typing import TYPE_CHECKING, Callable, Generic, Protocol, TypeVar, cast
+from collections.abc import Callable
+from typing import TYPE_CHECKING, Generic, Protocol, TypeVar, cast
 
 from typing_extensions import ParamSpec
 
diff --git a/task-sdk/src/airflow/sdk/execution_time/comms.py b/task-sdk/src/airflow/sdk/execution_time/comms.py
index 97ed1761ad8eb..338f5df23a3bb 100644
--- a/task-sdk/src/airflow/sdk/execution_time/comms.py
+++ b/task-sdk/src/airflow/sdk/execution_time/comms.py
@@ -54,7 +54,7 @@
 from functools import cached_property
 from pathlib import Path
 from socket import socket
-from typing import TYPE_CHECKING, Annotated, Any, ClassVar, Generic, Literal, TypeVar, Union, overload
+from typing import TYPE_CHECKING, Annotated, Any, ClassVar, Generic, Literal, TypeVar, overload
 from uuid import UUID
 
 import attrs
@@ -558,27 +558,25 @@ class SentFDs(BaseModel):
 
 
 ToTask = Annotated[
-    Union[
-        AssetResult,
-        AssetEventsResult,
-        ConnectionResult,
-        DagRunStateResult,
-        DRCount,
-        ErrorResponse,
-        PrevSuccessfulDagRunResult,
-        SentFDs,
-        StartupDetails,
-        TaskRescheduleStartDate,
-        TICount,
-        TaskStatesResult,
-        VariableResult,
-        XComCountResponse,
-        XComResult,
-        XComSequenceIndexResult,
-        XComSequenceSliceResult,
-        InactiveAssetsResult,
-        OKResponse,
-    ],
+    AssetResult
+    | AssetEventsResult
+    | ConnectionResult
+    | DagRunStateResult
+    | DRCount
+    | ErrorResponse
+    | PrevSuccessfulDagRunResult
+    | SentFDs
+    | StartupDetails
+    | TaskRescheduleStartDate
+    | TICount
+    | TaskStatesResult
+    | VariableResult
+    | XComCountResponse
+    | XComResult
+    | XComSequenceIndexResult
+    | XComSequenceSliceResult
+    | InactiveAssetsResult
+    | OKResponse,
     Field(discriminator="type"),
 ]
 
@@ -841,37 +839,35 @@ class GetDRCount(BaseModel):
 
 
 ToSupervisor = Annotated[
-    Union[
-        DeferTask,
-        DeleteXCom,
-        GetAssetByName,
-        GetAssetByUri,
-        GetAssetEventByAsset,
-        GetAssetEventByAssetAlias,
-        GetConnection,
-        GetDagRunState,
-        GetDRCount,
-        GetPrevSuccessfulDagRun,
-        GetTaskRescheduleStartDate,
-        GetTICount,
-        GetTaskStates,
-        GetVariable,
-        GetXCom,
-        GetXComCount,
-        GetXComSequenceItem,
-        GetXComSequenceSlice,
-        PutVariable,
-        RescheduleTask,
-        RetryTask,
-        SetRenderedFields,
-        SetXCom,
-        SkipDownstreamTasks,
-        SucceedTask,
-        ValidateInletsAndOutlets,
-        TaskState,
-        TriggerDagRun,
-        DeleteVariable,
-        ResendLoggingFD,
-    ],
+    DeferTask
+    | DeleteXCom
+    | GetAssetByName
+    | GetAssetByUri
+    | GetAssetEventByAsset
+    | GetAssetEventByAssetAlias
+    | GetConnection
+    | GetDagRunState
+    | GetDRCount
+    | GetPrevSuccessfulDagRun
+    | GetTaskRescheduleStartDate
+    | GetTICount
+    | GetTaskStates
+    | GetVariable
+    | GetXCom
+    | GetXComCount
+    | GetXComSequenceItem
+    | GetXComSequenceSlice
+    | PutVariable
+    | RescheduleTask
+    | RetryTask
+    | SetRenderedFields
+    | SetXCom
+    | SkipDownstreamTasks
+    | SucceedTask
+    | ValidateInletsAndOutlets
+    | TaskState
+    | TriggerDagRun
+    | DeleteVariable
+    | ResendLoggingFD,
     Field(discriminator="type"),
 ]
diff --git a/task-sdk/src/airflow/sdk/execution_time/context.py b/task-sdk/src/airflow/sdk/execution_time/context.py
index c76994995ebab..e95b9b173dc90 100644
--- a/task-sdk/src/airflow/sdk/execution_time/context.py
+++ b/task-sdk/src/airflow/sdk/execution_time/context.py
@@ -529,7 +529,7 @@ def __getitem__(self, key: int | Asset | AssetAlias | AssetRef) -> list[AssetEve
         msg: ToSupervisor
         if isinstance(key, int):  # Support index access; it's easier for trivial cases.
             obj = self._inlets[key]
-            if not isinstance(obj, (Asset, AssetAlias, AssetRef)):
+            if not isinstance(obj, Asset | AssetAlias | AssetRef):
                 raise IndexError(key)
         else:
             obj = key
diff --git a/task-sdk/src/airflow/sdk/execution_time/secrets_masker.py b/task-sdk/src/airflow/sdk/execution_time/secrets_masker.py
index cfc6214325dc4..560a493d3bc3f 100644
--- a/task-sdk/src/airflow/sdk/execution_time/secrets_masker.py
+++ b/task-sdk/src/airflow/sdk/execution_time/secrets_masker.py
@@ -23,28 +23,20 @@
 import logging
 import re
 import sys
-from collections.abc import Generator, Iterable, Iterator
+from collections.abc import Callable, Generator, Iterable, Iterator
 from enum import Enum
 from functools import cache, cached_property
 from re import Pattern
-from typing import (
-    TYPE_CHECKING,
-    Any,
-    Callable,
-    TextIO,
-    TypeVar,
-    Union,
-)
+from typing import TYPE_CHECKING, Any, TextIO, TypeAlias, TypeVar
 
 from airflow import settings
 
 if TYPE_CHECKING:
-    from kubernetes.client import V1EnvVar
-
     from airflow.typing_compat import TypeGuard
 
-Redactable = TypeVar("Redactable", str, "V1EnvVar", dict[Any, Any], tuple[Any, ...], list[Any])
-Redacted = Union[Redactable, str]
+V1EnvVar = TypeVar("V1EnvVar")
+Redactable: TypeAlias = str | V1EnvVar | dict[Any, Any] | tuple[Any, ...] | list[Any]
+Redacted: TypeAlias = Redactable | str
 
 log = logging.getLogger(__name__)
 
@@ -240,7 +232,7 @@ def _redact_all(self, item: Redactable, depth: int, max_depth: int = MAX_RECURSI
             return {
                 dict_key: self._redact_all(subval, depth + 1, max_depth) for dict_key, subval in item.items()
             }
-        if isinstance(item, (tuple, set)):
+        if isinstance(item, tuple | set):
             # Turn set in to tuple!
             return tuple(self._redact_all(subval, depth + 1, max_depth) for subval in item)
         if isinstance(item, list):
@@ -265,7 +257,7 @@ def _redact(self, item: Redactable, name: str | None, depth: int, max_depth: int
             if isinstance(item, Enum):
                 return self._redact(item=item.value, name=name, depth=depth, max_depth=max_depth)
             if _is_v1_env_var(item):
-                tmp: dict = item.to_dict()
+                tmp: dict = item.to_dict()  # type: ignore[attr-defined] # V1EnvVar has a to_dict method
                 if should_hide_value_for_key(tmp.get("name", "")) and "value" in tmp:
                     tmp["value"] = "***"
                 else:
@@ -278,7 +270,7 @@ def _redact(self, item: Redactable, name: str | None, depth: int, max_depth: int
                     # the structure.
                     return self.replacer.sub("***", str(item))
                 return item
-            if isinstance(item, (tuple, set)):
+            if isinstance(item, tuple | set):
                 # Turn set in to tuple!
                 return tuple(
                     self._redact(subval, name=None, depth=(depth + 1), max_depth=max_depth) for subval in item
@@ -462,7 +454,7 @@ def writable(self) -> bool:
         return self.target.writable()
 
     def write(self, s: str) -> int:
-        s = redact(s)
+        s = str(redact(s))
         return self.target.write(s)
 
     def writelines(self, lines) -> None:
diff --git a/task-sdk/src/airflow/sdk/execution_time/supervisor.py b/task-sdk/src/airflow/sdk/execution_time/supervisor.py
index 70b384a8c96b2..2bae008a0a6ff 100644
--- a/task-sdk/src/airflow/sdk/execution_time/supervisor.py
+++ b/task-sdk/src/airflow/sdk/execution_time/supervisor.py
@@ -29,7 +29,7 @@
 import time
 import weakref
 from collections import deque
-from collections.abc import Generator
+from collections.abc import Callable, Generator
 from contextlib import contextmanager, suppress
 from datetime import datetime, timezone
 from http import HTTPStatus
@@ -37,7 +37,6 @@
 from typing import (
     TYPE_CHECKING,
     BinaryIO,
-    Callable,
     ClassVar,
     NoReturn,
     TextIO,
diff --git a/task-sdk/src/airflow/sdk/execution_time/task_runner.py b/task-sdk/src/airflow/sdk/execution_time/task_runner.py
index 6c6e597f65e5c..24127d65a2763 100644
--- a/task-sdk/src/airflow/sdk/execution_time/task_runner.py
+++ b/task-sdk/src/airflow/sdk/execution_time/task_runner.py
@@ -340,8 +340,8 @@ def xcom_pull(
         if run_id is None:
             run_id = self.run_id
 
-        single_task_requested = isinstance(task_ids, (str, type(None)))
-        single_map_index_requested = isinstance(map_indexes, (int, type(None)))
+        single_task_requested = isinstance(task_ids, str | type(None))
+        single_map_index_requested = isinstance(map_indexes, int | type(None))
 
         if task_ids is None:
             # default to the current task if not provided
@@ -618,7 +618,7 @@ def parse(what: StartupDetails, log: Logger) -> RuntimeTaskInstance:
         )
         exit(1)
 
-    if not isinstance(task, (BaseOperator, MappedOperator)):
+    if not isinstance(task, BaseOperator | MappedOperator):
         raise TypeError(
             f"task is of the wrong type, got {type(task)}, wanted {BaseOperator} or {MappedOperator}"
         )
diff --git a/task-sdk/src/airflow/sdk/log.py b/task-sdk/src/airflow/sdk/log.py
index 554a96cd9e690..46efd6bf448ed 100644
--- a/task-sdk/src/airflow/sdk/log.py
+++ b/task-sdk/src/airflow/sdk/log.py
@@ -24,9 +24,10 @@
 import re
 import sys
 import warnings
+from collections.abc import Callable
 from functools import cache
 from pathlib import Path
-from typing import TYPE_CHECKING, Any, BinaryIO, Callable, Generic, TextIO, TypeVar, cast
+from typing import TYPE_CHECKING, Any, BinaryIO, Generic, TextIO, TypeVar, cast
 
 import msgspec
 import structlog
diff --git a/task-sdk/src/airflow/sdk/types.py b/task-sdk/src/airflow/sdk/types.py
index 8bd0ea0db8d4d..400ad23783325 100644
--- a/task-sdk/src/airflow/sdk/types.py
+++ b/task-sdk/src/airflow/sdk/types.py
@@ -19,7 +19,7 @@
 
 import uuid
 from collections.abc import Iterable
-from typing import TYPE_CHECKING, Any, Protocol, Union
+from typing import TYPE_CHECKING, Any, Protocol, TypeAlias
 
 from airflow.sdk.definitions._internal.types import NOTSET, ArgNotSet
 
@@ -33,7 +33,7 @@
     from airflow.sdk.definitions.context import Context
     from airflow.sdk.definitions.mappedoperator import MappedOperator
 
-    Operator = Union[BaseOperator, MappedOperator]
+    Operator: TypeAlias = BaseOperator | MappedOperator
 
 
 class DagRunProtocol(Protocol):
diff --git a/task-sdk/tests/conftest.py b/task-sdk/tests/conftest.py
index 80c71f41a8fe8..f2660faa2d206 100644
--- a/task-sdk/tests/conftest.py
+++ b/task-sdk/tests/conftest.py
@@ -119,7 +119,7 @@ def captured_logs(request):
         # We need to replace remove the last processor (the one that turns JSON into text, as we want the
         # event dict for tests)
         proc = processors.pop()
-        assert isinstance(proc, (structlog.dev.ConsoleRenderer, structlog.processors.JSONRenderer)), (
+        assert isinstance(proc, structlog.dev.ConsoleRenderer | structlog.processors.JSONRenderer), (
             "Pre-condition"
         )
     try:
diff --git a/task-sdk/tests/task_sdk/definitions/conftest.py b/task-sdk/tests/task_sdk/definitions/conftest.py
index 3f89f34b4d2da..7ad358487ba63 100644
--- a/task-sdk/tests/task_sdk/definitions/conftest.py
+++ b/task-sdk/tests/task_sdk/definitions/conftest.py
@@ -42,7 +42,7 @@ def run(dag: DAG, task_id: str, map_index: int):
 
         for call in mock_supervisor_comms.send.mock_calls:
             msg = call.kwargs.get("msg") or call.args[0]
-            if isinstance(msg, (TaskState, SucceedTask)):
+            if isinstance(msg, TaskState | SucceedTask):
                 return msg.state
         raise RuntimeError("Unable to find call to TaskState")
 
diff --git a/task-sdk/tests/task_sdk/definitions/test_asset.py b/task-sdk/tests/task_sdk/definitions/test_asset.py
index 2a25c0907c7dc..fd70882e96ada 100644
--- a/task-sdk/tests/task_sdk/definitions/test_asset.py
+++ b/task-sdk/tests/task_sdk/definitions/test_asset.py
@@ -19,7 +19,7 @@
 
 import json
 import os
-from typing import Callable
+from collections.abc import Callable
 from unittest import mock
 
 import pytest
@@ -244,7 +244,7 @@ def assets_equal(a1: BaseAsset, a2: BaseAsset) -> bool:
     if isinstance(a1, Asset) and isinstance(a2, Asset):
         return a1.uri == a2.uri
 
-    if isinstance(a1, (AssetAny, AssetAll)) and isinstance(a2, (AssetAny, AssetAll)):
+    if isinstance(a1, AssetAny | AssetAll) and isinstance(a2, AssetAny | AssetAll):
         if len(a1.objects) != len(a2.objects):
             return False
 
diff --git a/task-sdk/tests/task_sdk/definitions/test_mappedoperator.py b/task-sdk/tests/task_sdk/definitions/test_mappedoperator.py
index 5c81b64b605b3..6889d7d57c3b0 100644
--- a/task-sdk/tests/task_sdk/definitions/test_mappedoperator.py
+++ b/task-sdk/tests/task_sdk/definitions/test_mappedoperator.py
@@ -17,8 +17,9 @@
 # under the License.
 from __future__ import annotations
 
+from collections.abc import Callable
 from datetime import datetime, timedelta
-from typing import TYPE_CHECKING, Callable
+from typing import TYPE_CHECKING
 from unittest import mock
 
 import pendulum
diff --git a/task-sdk/tests/task_sdk/definitions/test_xcom_arg.py b/task-sdk/tests/task_sdk/definitions/test_xcom_arg.py
index 73468dcb9e12b..521fa99df811f 100644
--- a/task-sdk/tests/task_sdk/definitions/test_xcom_arg.py
+++ b/task-sdk/tests/task_sdk/definitions/test_xcom_arg.py
@@ -17,7 +17,7 @@
 # under the License.
 from __future__ import annotations
 
-from typing import Callable
+from collections.abc import Callable
 from unittest import mock
 
 import pytest

From 8c3a81b18bf3a99ac37e28d3f85a0d4b8fe6fbbb Mon Sep 17 00:00:00 2001
From: Jens Scheffler <95105677+jscheffl@users.noreply.github.com>
Date: Sun, 29 Jun 2025 09:19:13 +0200
Subject: [PATCH 280/381] Clean some leftovers of Python 3.9 removal - Airflow
 CTL pieces (#52430)

---
 airflow-ctl/README.md                         |  2 +-
 .../installation/installing-from-pypi.rst     |  2 +-
 airflow-ctl/pyproject.toml                    |  7 ++---
 airflow-ctl/src/airflowctl/api/client.py      |  4 +--
 airflow-ctl/src/airflowctl/ctl/cli_config.py  |  6 ++--
 airflow-ctl/src/airflowctl/typing_compat.py   | 29 -------------------
 airflow-ctl/src/airflowctl/utils/helpers.py   |  4 +--
 7 files changed, 12 insertions(+), 42 deletions(-)
 delete mode 100644 airflow-ctl/src/airflowctl/typing_compat.py

diff --git a/airflow-ctl/README.md b/airflow-ctl/README.md
index 8e543717d9bdc..28f1b47381224 100644
--- a/airflow-ctl/README.md
+++ b/airflow-ctl/README.md
@@ -31,7 +31,7 @@ A command-line tool for interacting with Apache Airflow instances through the Ai
 
 ## Requirements
 
-- Python 3.9 or later (compatible with Python >= 3.9 and < 3.13)
+- Python 3.10 or later (compatible with Python >= 3.10 and < 3.13)
 - Network access to an Apache Airflow instance with REST API enabled
 - Keyring backend installed in operating system for secure token storage
 
diff --git a/airflow-ctl/docs/installation/installing-from-pypi.rst b/airflow-ctl/docs/installation/installing-from-pypi.rst
index f498c163298a7..a02a6a8991733 100644
--- a/airflow-ctl/docs/installation/installing-from-pypi.rst
+++ b/airflow-ctl/docs/installation/installing-from-pypi.rst
@@ -97,7 +97,7 @@ You can create the URL to the file substituting the variables in the template be
 where:
 
 - ``AIRFLOW_CTL_VERSION`` - Airflow CTL version (e.g. :subst-code:`|version|`) or ``main``, ``2-0``, for latest development version
-- ``PYTHON_VERSION`` Python version e.g. ``3.9``, ``3.10``
+- ``PYTHON_VERSION`` Python version e.g. ``3.10``, ``3.11``
 
 
 Verifying installed dependencies
diff --git a/airflow-ctl/pyproject.toml b/airflow-ctl/pyproject.toml
index 6d2d96f0fa478..a8590364f6f40 100644
--- a/airflow-ctl/pyproject.toml
+++ b/airflow-ctl/pyproject.toml
@@ -20,7 +20,7 @@ name = "apache-airflow-ctl"
 dynamic = ["version"]
 description = "Apache Airflow command line tool for communicating with an Apache Airflow, using the API."
 readme = { file = "README.md", content-type = "text/markdown" }
-requires-python = ">=3.9, <3.13"
+requires-python = ">=3.10, <3.13"
 dependencies = [
     # TODO there could be still missing deps such as airflow-core
     "argcomplete>=1.10",
@@ -33,7 +33,6 @@ dependencies = [
     "rich-argparse>=1.0.0",
     "structlog>=25.2.0",
     "uuid6>=2024.7.10",
-    "eval-type-backport>=0.2.0; python_version == '3.9'",
 ]
 
 classifiers = [
@@ -130,14 +129,14 @@ enum-field-as-literal='one' # When a single enum member, make it output a `Liter
 input-file-type='openapi'
 output-model-type='pydantic_v2.BaseModel'
 output-datetime-class='datetime'
-target-python-version='3.9'
+target-python-version='3.10'
 use-annotated=true
 use-default=true
 use-double-quotes=true
 use-schema-description=true  # Desc becomes class doc comment
 use-standard-collections=true # list[] not List[]
 use-subclass-enum=true # enum, not union of Literals
-use-union-operator=true # 3.9+annotations, not `Union[]`
+use-union-operator=true # +annotations, not `Union[]`
 
 input = "../airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml"
 output = "src/airflowctl/api/datamodels/generated.py"
diff --git a/airflow-ctl/src/airflowctl/api/client.py b/airflow-ctl/src/airflowctl/api/client.py
index 162e21c9422dc..4f707b18c5f95 100644
--- a/airflow-ctl/src/airflowctl/api/client.py
+++ b/airflow-ctl/src/airflowctl/api/client.py
@@ -22,8 +22,9 @@
 import json
 import os
 import sys
+from collections.abc import Callable
 from functools import wraps
-from typing import TYPE_CHECKING, Any, Callable, Literal, TypeVar, cast
+from typing import TYPE_CHECKING, Any, Literal, ParamSpec, TypeVar, cast
 
 import httpx
 import keyring
@@ -53,7 +54,6 @@
     AirflowCtlException,
     AirflowCtlNotFoundException,
 )
-from airflowctl.typing_compat import ParamSpec
 
 if TYPE_CHECKING:
     # # methodtools doesn't have typestubs, so give a stub
diff --git a/airflow-ctl/src/airflowctl/ctl/cli_config.py b/airflow-ctl/src/airflowctl/ctl/cli_config.py
index 7da28d8b77481..71bff72125b6a 100644
--- a/airflow-ctl/src/airflowctl/ctl/cli_config.py
+++ b/airflow-ctl/src/airflowctl/ctl/cli_config.py
@@ -27,10 +27,10 @@
 import os
 import textwrap
 from argparse import Namespace
-from collections.abc import Iterable
+from collections.abc import Callable, Iterable
 from functools import partial
 from pathlib import Path
-from typing import Any, Callable, NamedTuple, Union
+from typing import Any, NamedTuple
 
 import rich
 
@@ -330,7 +330,7 @@ def from_group_command(cls, group_command: GroupCommand) -> GroupCommandParser:
         )
 
 
-CLICommand = Union[ActionCommand, GroupCommand, GroupCommandParser]
+CLICommand = ActionCommand | GroupCommand | GroupCommandParser
 
 
 class CommandFactory:
diff --git a/airflow-ctl/src/airflowctl/typing_compat.py b/airflow-ctl/src/airflowctl/typing_compat.py
deleted file mode 100644
index 625e9e37ca667..0000000000000
--- a/airflow-ctl/src/airflowctl/typing_compat.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-"""This module provides helper code to make type annotation within airflowctl codebase easier."""
-
-from __future__ import annotations
-
-__all__ = ["ParamSpec"]
-
-import sys
-
-if sys.version_info >= (3, 10):
-    from typing import ParamSpec
-else:
-    from typing_extensions import ParamSpec
diff --git a/airflow-ctl/src/airflowctl/utils/helpers.py b/airflow-ctl/src/airflowctl/utils/helpers.py
index 4d1c6a7d7a0f5..d73defb3c5f97 100644
--- a/airflow-ctl/src/airflowctl/utils/helpers.py
+++ b/airflow-ctl/src/airflowctl/utils/helpers.py
@@ -18,8 +18,8 @@
 from __future__ import annotations
 
 import itertools
-from collections.abc import Iterable
-from typing import Callable, TypeVar
+from collections.abc import Callable, Iterable
+from typing import TypeVar
 
 T = TypeVar("T")
 

From 508fac143c6bafadf845b90b46d1b60bf4e4f515 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sun, 29 Jun 2025 09:53:32 +0200
Subject: [PATCH 281/381] Add keycloak to providers removed when running
 Airflow 2 (#52442)

We we are using "--use-airflow-version" and use Airlfow 2 we uninstall
all providers that are Airflow 2 only mounted from sources, because
Provider's Manager (correctly) fails if Airflow 3 provider is
installed. Recently added keycloak was missing from the list.
---
 scripts/in_container/install_airflow_and_providers.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/scripts/in_container/install_airflow_and_providers.py b/scripts/in_container/install_airflow_and_providers.py
index 1896d1865c3de..1d7af59a24d88 100755
--- a/scripts/in_container/install_airflow_and_providers.py
+++ b/scripts/in_container/install_airflow_and_providers.py
@@ -675,6 +675,7 @@ def install_airflow_and_providers(
             # providers from the installed separate source packages
             console.print("[yellow]Uninstalling Airflow-3 only providers\n")
             providers_to_uninstall_for_airflow_2 = [
+                "apache-airflow-providers-keycloak",
                 "apache-airflow-providers-common-messaging",
                 "apache-airflow-providers-git",
             ]

From c371d9af862dc6cf727a6e437c4f978a48e17705 Mon Sep 17 00:00:00 2001
From: Yeonguk Choo <choo121600@gmail.com>
Date: Sun, 29 Jun 2025 17:05:01 +0900
Subject: [PATCH 282/381] i18n(Ko): Add missing translations in admin.json and
 common.json (#52417)

* i18n(Ko): Add missing translations in admin.json and common.json

* Fix some translations
---
 .../src/airflow/ui/public/i18n/locales/ko/admin.json     | 5 ++++-
 .../src/airflow/ui/public/i18n/locales/ko/common.json    | 9 +++++++++
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ko/admin.json b/airflow-core/src/airflow/ui/public/i18n/locales/ko/admin.json
index c1fd0f24c7381..da422c07f742a 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/ko/admin.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/ko/admin.json
@@ -40,7 +40,10 @@
       "standardFields": "기본 필드"
     },
     "nothingFound": {
-        "title": "연결을 찾을 수 없습니다."
+      "description": "환경 변수나 시크릿 매니저를 통해 정의된 연결은 여기에 표시되지 않습니다.",
+      "documentationLink": "자세한 내용은 Airflow 문서를 참고하세요.",
+      "learnMore": "이러한 커넥션은 런타임 시점에 해결되며 UI에는 표시되지 않습니다.",
+      "title": "연결을 찾을 수 없습니다."
     },
     "searchPlaceholder": "연결 검색",
     "test": "연결 테스트",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ko/common.json b/airflow-core/src/airflow/ui/public/i18n/locales/ko/common.json
index 9fabd0e1e4911..966f9cf53524a 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/ko/common.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/ko/common.json
@@ -17,6 +17,7 @@
     "auditLog": "감사 로그",
     "xcoms": "XComs"
   },
+  "collapseDetailsPanel": "세부 정보 패널 접기",
   "createdAssetEvent_one": "생성된 에셋 이벤트",
   "createdAssetEvent_other": "생성된 에셋 이벤트들",
   "dag_one": "Dag",
@@ -128,6 +129,13 @@
     "manual": "수동",
     "scheduled": "예정됨"
   },
+  "scroll": {
+    "direction": {
+      "bottom": "아래",
+      "top": "위"
+    },
+    "tooltip": "{{hotkey}}를 눌러 {{direction}}로 스크롤"
+  },
   "seconds": "{{count}}초",
   "security": {
     "actions": "작업",
@@ -137,6 +145,7 @@
     "users": "사용자"
   },
   "selectLanguage": "언어 선택",
+  "showDetailsPanel": "세부 정보 패널 펼치기",
   "sourceAssetEvent_one": "소스 에셋 이벤트",
   "sourceAssetEvent_other": "소스 에셋 이벤트",
   "startDate": "시작일",

From 8ef792dafef6e64faf5daa376bfa5238b1c14c87 Mon Sep 17 00:00:00 2001
From: Shubham Raj <48172486+shubhamraj-git@users.noreply.github.com>
Date: Sun, 29 Jun 2025 14:30:38 +0530
Subject: [PATCH 283/381] Fix editing connection with sensitive extra field
 (#52403)

* Handle unchanges json

* Remove the redact from connections

* Fix the static checks
---
 .../core_api/datamodels/connections.py        | 25 +-----
 .../src/pages/Connections/ConnectionForm.tsx  | 12 ++-
 .../ui/src/queries/useEditConnection.tsx      |  4 +-
 .../routes/public/test_connections.py         | 81 +++----------------
 4 files changed, 26 insertions(+), 96 deletions(-)

diff --git a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/connections.py b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/connections.py
index 2a6bd6bec8af2..f2ac1f7a9403a 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/connections.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/connections.py
@@ -17,15 +17,12 @@
 
 from __future__ import annotations
 
-import json
 from collections import abc
 from typing import Annotated
 
-from pydantic import Field, field_validator
-from pydantic_core.core_schema import ValidationInfo
+from pydantic import Field
 
 from airflow.api_fastapi.core_api.base import BaseModel, StrictBaseModel
-from airflow.sdk.execution_time.secrets_masker import redact
 
 
 # Response Models
@@ -42,26 +39,6 @@ class ConnectionResponse(BaseModel):
     password: str | None
     extra: str | None
 
-    @field_validator("password", mode="after")
-    @classmethod
-    def redact_password(cls, v: str | None, field_info: ValidationInfo) -> str | None:
-        if v is None:
-            return None
-        return str(redact(v, field_info.field_name))
-
-    @field_validator("extra", mode="before")
-    @classmethod
-    def redact_extra(cls, v: str | None) -> str | None:
-        if v is None:
-            return None
-        try:
-            extra_dict = json.loads(v)
-            redacted_dict = redact(extra_dict)
-            return json.dumps(redacted_dict)
-        except json.JSONDecodeError:
-            # we can't redact fields in an unstructured `extra`
-            return v
-
 
 class ConnectionCollectionResponse(BaseModel):
     """Connection Collection serializer for responses."""
diff --git a/airflow-core/src/airflow/ui/src/pages/Connections/ConnectionForm.tsx b/airflow-core/src/airflow/ui/src/pages/Connections/ConnectionForm.tsx
index bf921a1de3c99..9e4e38647eaf4 100644
--- a/airflow-core/src/airflow/ui/src/pages/Connections/ConnectionForm.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Connections/ConnectionForm.tsx
@@ -57,7 +57,7 @@ const ConnectionForm = ({
   const { conf: extra, setConf } = useParamStore();
   const {
     control,
-    formState: { isValid },
+    formState: { isDirty, isValid },
     handleSubmit,
     reset,
     watch,
@@ -94,6 +94,14 @@ const ConnectionForm = ({
     mutateConnection(data);
   };
 
+  const hasChanges = () => {
+    if (isDirty) {
+      return true;
+    }
+
+    return JSON.stringify(JSON.parse(extra)) !== JSON.stringify(JSON.parse(initialConnection.extra));
+  };
+
   const validateAndPrettifyJson = (value: string) => {
     try {
       const parsedJson = JSON.parse(value) as JSON;
@@ -234,7 +242,7 @@ const ConnectionForm = ({
           <Spacer />
           <Button
             colorPalette="blue"
-            disabled={Boolean(errors.conf) || formErrors || isPending || !isValid}
+            disabled={Boolean(errors.conf) || formErrors || isPending || !isValid || !hasChanges()}
             onClick={() => void handleSubmit(onSubmit)()}
           >
             <FiSave /> {translate("formActions.save")}
diff --git a/airflow-core/src/airflow/ui/src/queries/useEditConnection.tsx b/airflow-core/src/airflow/ui/src/queries/useEditConnection.tsx
index 60c813aa644dd..2392eda11d656 100644
--- a/airflow-core/src/airflow/ui/src/queries/useEditConnection.tsx
+++ b/airflow-core/src/airflow/ui/src/queries/useEditConnection.tsx
@@ -65,7 +65,9 @@ export const useEditConnection = (
   const editConnection = (requestBody: ConnectionBody) => {
     const updateMask: Array<string> = [];
 
-    if (requestBody.extra !== initialConnection.extra) {
+    if (
+      JSON.stringify(JSON.parse(requestBody.extra)) !== JSON.stringify(JSON.parse(initialConnection.extra))
+    ) {
       updateMask.push("extra");
     }
     if (requestBody.conn_type !== initialConnection.conn_type) {
diff --git a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_connections.py b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_connections.py
index 6c56232a68a92..eba9f6ddaf83e 100644
--- a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_connections.py
+++ b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_connections.py
@@ -159,35 +159,6 @@ def test_get_should_respond_200_with_extra(self, test_client, session):
         assert body["conn_type"] == TEST_CONN_TYPE
         assert body["extra"] == '{"extra_key": "extra_value"}'
 
-    @pytest.mark.enable_redact
-    def test_get_should_respond_200_with_extra_redacted(self, test_client, session):
-        self.create_connection()
-        connection = session.query(Connection).first()
-        connection.extra = '{"password": "test-password"}'
-        session.commit()
-        response = test_client.get(f"/connections/{TEST_CONN_ID}")
-        assert response.status_code == 200
-        body = response.json()
-        assert body["connection_id"] == TEST_CONN_ID
-        assert body["conn_type"] == TEST_CONN_TYPE
-        assert body["extra"] == '{"password": "***"}'
-
-    @pytest.mark.enable_redact
-    def test_get_should_not_overmask_short_password_value_in_extra(self, test_client, session):
-        connection = Connection(
-            conn_id=TEST_CONN_ID, conn_type="generic", login="a", password="a", extra='{"key": "value"}'
-        )
-        session.add(connection)
-        session.commit()
-
-        response = test_client.get(f"/connections/{TEST_CONN_ID}")
-        assert response.status_code == 200
-        body = response.json()
-        assert body["connection_id"] == TEST_CONN_ID
-        assert body["conn_type"] == "generic"
-        assert body["login"] == "a"
-        assert body["extra"] == '{"key": "value"}'
-
 
 class TestGetConnections(TestConnectionEndpoint):
     @pytest.mark.parametrize(
@@ -309,7 +280,6 @@ def test_post_should_respond_already_exist(self, test_client, body):
         assert "detail" in response_json
         assert list(response_json["detail"].keys()) == ["reason", "statement", "orig_error", "message"]
 
-    @pytest.mark.enable_redact
     @pytest.mark.parametrize(
         "body, expected_response",
         [
@@ -322,21 +292,7 @@ def test_post_should_respond_already_exist(self, test_client, body):
                     "extra": None,
                     "host": None,
                     "login": None,
-                    "password": "***",
-                    "port": None,
-                    "schema": None,
-                },
-            ),
-            (
-                {"connection_id": TEST_CONN_ID, "conn_type": TEST_CONN_TYPE, "password": "?>@#+!_%()#"},
-                {
-                    "connection_id": TEST_CONN_ID,
-                    "conn_type": TEST_CONN_TYPE,
-                    "description": None,
-                    "extra": None,
-                    "host": None,
-                    "login": None,
-                    "password": "***",
+                    "password": "test-password",
                     "port": None,
                     "schema": None,
                 },
@@ -352,21 +308,23 @@ def test_post_should_respond_already_exist(self, test_client, body):
                     "connection_id": TEST_CONN_ID,
                     "conn_type": TEST_CONN_TYPE,
                     "description": None,
-                    "extra": '{"password": "***"}',
+                    "extra": '{"password": "test-password"}',
                     "host": None,
                     "login": None,
-                    "password": "***",
+                    "password": "A!rF|0wi$aw3s0m3",
                     "port": None,
                     "schema": None,
                 },
             ),
         ],
     )
-    def test_post_should_response_201_redacted_password(self, test_client, body, expected_response, session):
+    def test_post_should_response_201_password_not_masked(
+        self, test_client, body, expected_response, session
+    ):
         response = test_client.post("/connections", json=body)
         assert response.status_code == 201
         assert response.json() == expected_response
-        _check_last_log(session, dag_id=None, event="post_connection", logical_date=None, check_masked=True)
+        _check_last_log(session, dag_id=None, event="post_connection", logical_date=None)
 
 
 class TestPatchConnection(TestConnectionEndpoint):
@@ -776,22 +734,7 @@ def test_patch_should_respond_404(self, test_client, body):
                     "extra": None,
                     "host": "some_host_a",
                     "login": "some_login",
-                    "password": "***",
-                    "port": 8080,
-                    "schema": None,
-                },
-                {"update_mask": ["password"]},
-            ),
-            (
-                {"connection_id": TEST_CONN_ID, "conn_type": TEST_CONN_TYPE, "password": "?>@#+!_%()#"},
-                {
-                    "connection_id": TEST_CONN_ID,
-                    "conn_type": TEST_CONN_TYPE,
-                    "description": "some_description_a",
-                    "extra": None,
-                    "host": "some_host_a",
-                    "login": "some_login",
-                    "password": "***",
+                    "password": "test-password",
                     "port": 8080,
                     "schema": None,
                 },
@@ -808,10 +751,10 @@ def test_patch_should_respond_404(self, test_client, body):
                     "connection_id": TEST_CONN_ID,
                     "conn_type": TEST_CONN_TYPE,
                     "description": "some_description_a",
-                    "extra": '{"password": "***"}',
+                    "extra": '{"password": "test-password"}',
                     "host": "some_host_a",
                     "login": "some_login",
-                    "password": "***",
+                    "password": "A!rF|0wi$aw3s0m3",
                     "port": 8080,
                     "schema": None,
                 },
@@ -819,14 +762,14 @@ def test_patch_should_respond_404(self, test_client, body):
             ),
         ],
     )
-    def test_patch_should_response_200_redacted_password(
+    def test_patch_should_response_200_password_not_masked(
         self, test_client, session, body, expected_response, update_mask
     ):
         self.create_connections()
         response = test_client.patch(f"/connections/{TEST_CONN_ID}", json=body, params=update_mask)
         assert response.status_code == 200
         assert response.json() == expected_response
-        _check_last_log(session, dag_id=None, event="patch_connection", logical_date=None, check_masked=True)
+        _check_last_log(session, dag_id=None, event="patch_connection", logical_date=None)
 
 
 class TestConnection(TestConnectionEndpoint):

From 50e69abdaa63b8ecb368fe319813fe9774a2e9b5 Mon Sep 17 00:00:00 2001
From: Farhan <52888929+ahmadtfarhan@users.noreply.github.com>
Date: Sun, 29 Jun 2025 10:33:19 +0100
Subject: [PATCH 284/381] Replace `models.BaseOperator` to Task SDK one for
 Apache TinkerPop (#52400)

Follow-up of #52292 for Apache TinkerPop
---
 .../unit/always/test_project_structure.py     |  1 +
 .../apache/tinkerpop/operators/gremlin.py     |  2 +-
 .../apache/tinkerpop/version_compat.py        | 37 +++++++++++++++++++
 3 files changed, 39 insertions(+), 1 deletion(-)
 create mode 100644 providers/apache/tinkerpop/src/airflow/providers/apache/tinkerpop/version_compat.py

diff --git a/airflow-core/tests/unit/always/test_project_structure.py b/airflow-core/tests/unit/always/test_project_structure.py
index 31e6d64b6b3c6..fbe8434730fd5 100644
--- a/airflow-core/tests/unit/always/test_project_structure.py
+++ b/airflow-core/tests/unit/always/test_project_structure.py
@@ -96,6 +96,7 @@ def test_providers_modules_should_have_tests(self):
             "providers/apache/livy/tests/unit/apache/livy/test_version_compat.py",
             "providers/apache/pig/tests/unit/apache/pig/test_version_compat.py",
             "providers/apache/spark/tests/unit/apache/spark/test_version_compat.py",
+            "providers/apache/tinkerpop/tests/unit/apache/tinkerpop/test_version_compat.py",
             "providers/arangodb/tests/unit/arangodb/test_version_compat.py",
             "providers/asana/tests/unit/asana/test_version_compat.py",
             "providers/atlassian/jira/tests/unit/atlassian/jira/test_version_compat.py",
diff --git a/providers/apache/tinkerpop/src/airflow/providers/apache/tinkerpop/operators/gremlin.py b/providers/apache/tinkerpop/src/airflow/providers/apache/tinkerpop/operators/gremlin.py
index f7064890d5d4b..7a38a220d979e 100644
--- a/providers/apache/tinkerpop/src/airflow/providers/apache/tinkerpop/operators/gremlin.py
+++ b/providers/apache/tinkerpop/src/airflow/providers/apache/tinkerpop/operators/gremlin.py
@@ -18,8 +18,8 @@
 
 from typing import TYPE_CHECKING, Any
 
-from airflow.models import BaseOperator
 from airflow.providers.apache.tinkerpop.hooks.gremlin import GremlinHook
+from airflow.providers.apache.tinkerpop.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/apache/tinkerpop/src/airflow/providers/apache/tinkerpop/version_compat.py b/providers/apache/tinkerpop/src/airflow/providers/apache/tinkerpop/version_compat.py
new file mode 100644
index 0000000000000..9e99cafacafa1
--- /dev/null
+++ b/providers/apache/tinkerpop/src/airflow/providers/apache/tinkerpop/version_compat.py
@@ -0,0 +1,37 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator
+
+__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseOperator"]

From d47f87c32ed174bd6da76d90d0767193612a3d5f Mon Sep 17 00:00:00 2001
From: Dov Benyomin Sohacheski <b@kloud.email>
Date: Sun, 29 Jun 2025 12:35:19 +0300
Subject: [PATCH 285/381] Force the definition of `execution_api_server_url`
 based on `api_url` (#52184)

* Force the definition of execution_api_server_url

* Add more tests
---
 .../providers/edge3/cli/edge_command.py       |  2 +-
 .../src/airflow/providers/edge3/cli/worker.py | 17 +++----
 .../edge3/tests/unit/edge3/cli/test_worker.py | 46 +++++++++++++++++++
 3 files changed, 56 insertions(+), 9 deletions(-)

diff --git a/providers/edge3/src/airflow/providers/edge3/cli/edge_command.py b/providers/edge3/src/airflow/providers/edge3/cli/edge_command.py
index d453862598743..19573d7a96a12 100644
--- a/providers/edge3/src/airflow/providers/edge3/cli/edge_command.py
+++ b/providers/edge3/src/airflow/providers/edge3/cli/edge_command.py
@@ -64,7 +64,7 @@
 @providers_configuration_loaded
 def force_use_internal_api_on_edge_worker():
     """
-    Ensure that the environment is configured for the internal API without needing to declare it outside.
+    Ensure the environment is configured for the internal API without explicit declaration.
 
     This is only required for an Edge worker and must to be done before the Click CLI wrapper is initiated.
     That is because the CLI wrapper will attempt to establish a DB connection, which will fail before the
diff --git a/providers/edge3/src/airflow/providers/edge3/cli/worker.py b/providers/edge3/src/airflow/providers/edge3/cli/worker.py
index b8674b5e53d3a..d33462c3b526d 100644
--- a/providers/edge3/src/airflow/providers/edge3/cli/worker.py
+++ b/providers/edge3/src/airflow/providers/edge3/cli/worker.py
@@ -26,6 +26,7 @@
 from subprocess import Popen
 from time import sleep
 from typing import TYPE_CHECKING
+from urllib.parse import urlparse
 
 from lockfile.pidlockfile import remove_existing_pidfile
 from requests import HTTPError
@@ -186,11 +187,13 @@ def _run_job_via_supervisor(
             setproctitle(f"airflow edge worker: {workload.ti.key}")
 
             try:
-                base_url = conf.get("api", "base_url", fallback="/")
-                # If it's a relative URL, use localhost:8080 as the default
-                if base_url.startswith("/"):
-                    base_url = f"http://localhost:8080{base_url}"
-                default_execution_api_server = f"{base_url.rstrip('/')}/execution/"
+                api_url = conf.get("edge", "api_url")
+                execution_api_server_url = conf.get("core", "execution_api_server_url", fallback=...)
+                if execution_api_server_url is ...:
+                    parsed = urlparse(api_url)
+                    execution_api_server_url = f"{parsed.scheme}://{parsed.netloc}/execution/"
+
+                logger.info("Worker starting up server=execution_api_server_url=%s", execution_api_server_url)
 
                 supervise(
                     # This is the "wrong" ti type, but it duck types the same. TODO: Create a protocol for this.
@@ -199,9 +202,7 @@ def _run_job_via_supervisor(
                     dag_rel_path=workload.dag_rel_path,
                     bundle_info=workload.bundle_info,
                     token=workload.token,
-                    server=conf.get(
-                        "core", "execution_api_server_url", fallback=default_execution_api_server
-                    ),
+                    server=execution_api_server_url,
                     log_path=workload.log_path,
                 )
                 return 0
diff --git a/providers/edge3/tests/unit/edge3/cli/test_worker.py b/providers/edge3/tests/unit/edge3/cli/test_worker.py
index 3561979a4b776..5133d92ed37b9 100644
--- a/providers/edge3/tests/unit/edge3/cli/test_worker.py
+++ b/providers/edge3/tests/unit/edge3/cli/test_worker.py
@@ -161,6 +161,52 @@ def test_launch_job(self, mock_popen, mock_logfile_path, mock_process, worker_wi
         assert len(EdgeWorker.jobs) == 1
         assert EdgeWorker.jobs[0].edge_job == edge_job
 
+    @pytest.mark.skipif(not AIRFLOW_V_3_0_PLUS, reason="Test requires Airflow 3+")
+    @pytest.mark.parametrize(
+        "configs, expected_url",
+        [
+            (
+                {("edge", "api_url"): "https://api-endpoint"},
+                "https://api-endpoint/execution/",
+            ),
+            (
+                {("edge", "api_url"): "https://api:1234/endpoint"},
+                "https://api:1234/execution/",
+            ),
+            (
+                {
+                    ("edge", "api_url"): "https://api-endpoint",
+                    ("core", "execution_api_server_url"): "https://other-endpoint",
+                },
+                "https://other-endpoint",
+            ),
+        ],
+    )
+    @patch("airflow.sdk.execution_time.supervisor.supervise")
+    @patch("airflow.providers.edge3.cli.worker.Process")
+    @patch("airflow.providers.edge3.cli.worker.Popen")
+    def test_use_execution_api_server_url(
+        self,
+        mock_popen,
+        mock_process,
+        mock_supervise,
+        configs,
+        expected_url,
+        worker_with_job: EdgeWorker,
+    ):
+        mock_popen.side_effect = [MagicMock()]
+        mock_process_instance = MagicMock()
+        mock_process.side_effect = [mock_process_instance]
+
+        edge_job = EdgeWorker.jobs.pop().edge_job
+        with conf_vars(configs):
+            worker_with_job._launch_job(edge_job)
+
+            mock_process_callback = mock_process.call_args.kwargs["target"]
+            mock_process_callback(workload=MagicMock())
+
+            assert mock_supervise.call_args.kwargs["server"] == expected_url
+
     @pytest.mark.parametrize(
         "reserve_result, fetch_result, expected_calls",
         [

From a05b4de58f188873dd5e9cd17da9375ff7469985 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sun, 29 Jun 2025 12:20:27 +0200
Subject: [PATCH 286/381] Improve constraints updated version check script
 (#52446)

This script is now much nicer, and more useful:

* it has been refactored and split into smaller methods
* --verbose flag is added to help with diagnostics
* the "regular" and "explain why" loops are now merged into a
  single loop
* table is always printed now - even in "--explain-why" mode, we
  print the table as list of packages is being traversed and then
  "explain why" summary is printed at the end.
* typing is added everywhere
---
 dev/constraints-updated-version-check.py | 415 +++++++++++++++--------
 1 file changed, 267 insertions(+), 148 deletions(-)

diff --git a/dev/constraints-updated-version-check.py b/dev/constraints-updated-version-check.py
index 767df85743aa7..1b128f18a50d7 100644
--- a/dev/constraints-updated-version-check.py
+++ b/dev/constraints-updated-version-check.py
@@ -28,14 +28,17 @@
 import os
 import re
 import urllib.request
+from contextlib import contextmanager
 from datetime import datetime
+from pathlib import Path
 from urllib.error import HTTPError, URLError
 
 import rich_click as click
 from packaging import version
 from rich.console import Console
+from rich.syntax import Syntax
 
-console = Console(width=400, color_system="standard")
+console = Console(color_system="standard")
 
 
 def parse_constraints_generation_date(lines):
@@ -157,9 +160,14 @@ def get_first_newer_release_date_str(releases, current_version):
     return datetime.fromisoformat(upload_time_str.replace("Z", "+00:00")).strftime("%Y-%m-%d")
 
 
-def main(python_version, mode, selected_packages=None, explain_why=False):
+def main(
+    python_version: str,
+    mode: str,
+    selected_packages: set[str] | None = None,
+    explain_why: bool = False,
+    verbose: bool = False,
+):
     lines = get_constraints_file(python_version)
-
     constraints_date = parse_constraints_generation_date(lines)
     if constraints_date:
         console.print(
@@ -167,6 +175,20 @@ def main(python_version, mode, selected_packages=None, explain_why=False):
         )
         console.print()
 
+    packages = parse_packages_from_lines(lines, selected_packages)
+    col_widths, format_str, headers, total_width = get_table_format(packages)
+    print_table_header(format_str, headers, total_width)
+
+    outdated_count, skipped_count, explanations = process_packages(
+        packages, constraints_date, mode, explain_why, verbose, col_widths, format_str
+    )
+
+    print_table_footer(total_width, len(packages), outdated_count, skipped_count, mode)
+    if explain_why and explanations:
+        print_explanations(explanations)
+
+
+def parse_packages_from_lines(lines: list[str], selected_packages: set[str] | None) -> list[tuple[str, str]]:
     packages = []
     for line in lines:
         line = line.strip()
@@ -176,9 +198,11 @@ def main(python_version, mode, selected_packages=None, explain_why=False):
                 pkg_name = match.group(1)
                 if not selected_packages or (pkg_name in selected_packages):
                     packages.append((pkg_name, match.group(2)))
+    return packages
 
-    max_pkg_length = get_max_package_length(packages)
 
+def get_table_format(packages: list[tuple[str, str]]):
+    max_pkg_length = get_max_package_length(packages)
     col_widths = {
         "Library Name": max(35, max_pkg_length),
         "Constraint Version": 18,
@@ -189,7 +213,6 @@ def main(python_version, mode, selected_packages=None, explain_why=False):
         "# Versions Behind": 19,
         "PyPI Link": 60,
     }
-
     format_str = (
         f"{{:<{col_widths['Library Name']}}} | "
         f"{{:<{col_widths['Constraint Version']}}} | "
@@ -200,7 +223,6 @@ def main(python_version, mode, selected_packages=None, explain_why=False):
         f"{{:<{col_widths['# Versions Behind']}}} | "
         f"{{:<{col_widths['PyPI Link']}}}"
     )
-
     headers = [
         "Library Name",
         "Constraint Version",
@@ -211,167 +233,252 @@ def main(python_version, mode, selected_packages=None, explain_why=False):
         "# Versions Behind",
         "PyPI Link",
     ]
+    total_width = sum(col_widths.values()) + (len(col_widths) - 1) * 3
+    return col_widths, format_str, headers, total_width
 
-    if not explain_why:
-        console.print(f"[bold magenta]{format_str.format(*headers)}[/]")
-        total_width = sum(col_widths.values()) + (len(col_widths) - 1) * 3
-        console.print(f"[magenta]{'=' * total_width}[/]")
-    else:
-        total_width = sum(col_widths.values()) + (len(col_widths) - 1) * 3
 
-    outdated_count = 0
-    skipped_count = 0
+def print_table_header(format_str: str, headers: list[str], total_width: int):
+    console.print(f"[bold magenta]{format_str.format(*headers)}[/]")
+    console.print(f"[magenta]{'=' * total_width}[/]")
 
-    if explain_why and packages:
-        import shutil
-        import subprocess
-        from contextlib import contextmanager
-        from pathlib import Path
 
-        @contextmanager
-        def pyproject_backup_restore(pyproject_path):
-            backup_path = pyproject_path.with_suffix(pyproject_path.suffix + ".bak")
-            shutil.copyfile(pyproject_path, backup_path)
-            try:
-                yield
-            finally:
-                if backup_path.exists():
-                    shutil.copyfile(backup_path, pyproject_path)
-                    backup_path.unlink()
-
-        def run_uv_sync(cmd, cwd):
-            env = os.environ.copy()
-            env.pop("VIRTUAL_ENV", None)
-            result = subprocess.run(cmd, cwd=cwd, env=env, capture_output=True, text=True)
-            return result.stdout + result.stderr
-
-        airflow_pyproject = Path(__file__).parent.parent / "pyproject.toml"
-        airflow_pyproject = airflow_pyproject.resolve()
-        repo_root = airflow_pyproject.parent
-        with pyproject_backup_restore(airflow_pyproject):
-            for pkg, _ in packages:
-                console.print(f"[bold blue]\n--- Explaining for {pkg} ---[/]")
-                # 1. Run uv sync --all-packages
-                before_output = run_uv_sync(
-                    ["uv", "sync", "--all-packages", "--resolution", "highest"], cwd=repo_root
-                )
-                with open("/tmp/uv_sync_before.txt", "w") as f:
-                    f.write(before_output)
-                # 2. Get latest version from PyPI
-                pypi_url = f"https://pypi.org/pypi/{pkg}/json"
-                with urllib.request.urlopen(pypi_url) as resp:
-                    data = json.loads(resp.read().decode("utf-8"))
-                    latest_version = data["info"]["version"]
-                # 3. Update pyproject.toml (append dependency line)
-                lines = airflow_pyproject.read_text().splitlines()
-                new_lines = []
-                in_deps = False
-                dep_added = False
-                for line in lines:
-                    new_lines.append(line)
-                    if line.strip() == "dependencies = [":
-                        in_deps = True
-                    elif in_deps and line.strip().startswith("]") and not dep_added:
-                        # Add the new dependency just before closing bracket
-                        new_lines.insert(-1, f'    "{pkg}=={latest_version}",')
-                        dep_added = True
-                        in_deps = False
-                if not dep_added:
-                    # fallback: just append at the end
-                    new_lines.append(f'    "{pkg}=={latest_version}",')
-                airflow_pyproject.write_text("\n".join(new_lines) + "\n")
-                # 4. Run uv sync --all-packages and capture output
-                after_output = run_uv_sync(
-                    ["uv", "sync", "--all-packages", "--resolution", "highest"], cwd=repo_root
-                )
-                with open("/tmp/uv_sync_after.txt", "w") as f:
-                    f.write(after_output)
-                console.print(f"[yellow]uv sync output for {pkg}=={latest_version}:[/]")
-                console.print(after_output)
-        return
+def print_table_footer(total_width: int, total_pkgs: int, outdated_count: int, skipped_count: int, mode: str):
+    console.print(f"[magenta]{'=' * total_width}[/]")
+    console.print(f"[bold cyan]\nTotal packages checked:[/] [white]{total_pkgs}[/]")
+    console.print(f"[bold yellow]Outdated packages found:[/] [white]{outdated_count}[/]")
+    if mode == "diff-constraints":
+        console.print(
+            f"[bold blue]Skipped packages (updated after constraints generation):[/] [white]{skipped_count}[/]"
+        )
 
-    for pkg, pinned_version in packages:
-        try:
-            pypi_url = f"https://pypi.org/pypi/{pkg}/json"
-            with urllib.request.urlopen(pypi_url) as resp:
-                data = json.loads(resp.read().decode("utf-8"))
-                latest_version = data["info"]["version"]
-                releases = data["releases"]
 
-                latest_release_date = "N/A"
-                constraint_release_date = "N/A"
+def print_explanations(explanations: list[str]):
+    console.print("\n[bold magenta]Upgrade Explanations:[/]")
+    for explanation in explanations:
+        console.print(explanation)
+
+
+def process_packages(
+    packages: list[tuple[str, str]],
+    constraints_date: datetime | None,
+    mode: str,
+    explain_why: bool,
+    verbose: bool,
+    col_widths: dict,
+    format_str: str,
+) -> tuple[int, int, list[str]]:
+    import subprocess
+    import tempfile
+    from contextlib import contextmanager
+    from pathlib import Path
+
+    @contextmanager
+    def preserve_pyproject_file(pyproject_path: Path):
+        original_content = pyproject_path.read_text()
+        try:
+            yield
+        finally:
+            pyproject_path.write_text(original_content)
+
+    def run_uv_sync(cmd: list[str], cwd: Path) -> subprocess.CompletedProcess:
+        env = os.environ.copy()
+        env.pop("VIRTUAL_ENV", None)
+        if verbose:
+            console.print(f"[cyan]Running command:[/] [white]{' '.join(cmd)}[/] [dim]in {cwd}[/]")
+        result = subprocess.run(cmd, cwd=cwd, env=env, capture_output=True, text=True)
+        return result
+
+    def fetch_pypi_data(pkg: str) -> dict:
+        pypi_url = f"https://pypi.org/pypi/{pkg}/json"
+        with urllib.request.urlopen(pypi_url) as resp:
+            return json.loads(resp.read().decode("utf-8"))
+
+    def get_release_dates(releases: dict, version: str) -> str:
+        if releases.get(version):
+            return (
+                datetime.fromisoformat(releases[version][0]["upload_time_iso_8601"].replace("Z", "+00:00"))
+                .replace(tzinfo=None)
+                .strftime("%Y-%m-%d")
+            )
+        return "N/A"
+
+    def update_pyproject_dependency(pyproject_path: Path, pkg: str, latest_version: str):
+        lines = pyproject_path.read_text().splitlines()
+        new_lines = []
+        in_deps = False
+        dep_added = False
+        for line in lines:
+            new_lines.append(line)
+            if line.strip() == "dependencies = [":
+                in_deps = True
+            elif in_deps and line.strip().startswith("]") and not dep_added:
+                new_lines.insert(-1, f'    "{pkg}=={latest_version}",')
+                dep_added = True
+                in_deps = False
+        if not dep_added:
+            new_lines.append(f'    "{pkg}=={latest_version}",')
+        pyproject_path.write_text("\n".join(new_lines) + "\n")
 
-                if releases.get(latest_version):
-                    latest_release_date = (
-                        datetime.fromisoformat(
-                            releases[latest_version][0]["upload_time_iso_8601"].replace("Z", "+00:00")
-                        )
-                        .replace(tzinfo=None)
-                        .strftime("%Y-%m-%d")
-                    )
+    airflow_pyproject = Path(__file__).parent.parent / "pyproject.toml"
+    airflow_pyproject = airflow_pyproject.resolve()
+    repo_root = airflow_pyproject.parent
 
-                if releases.get(pinned_version):
-                    constraint_release_date = (
-                        datetime.fromisoformat(
-                            releases[pinned_version][0]["upload_time_iso_8601"].replace("Z", "+00:00")
-                        )
-                        .replace(tzinfo=None)
-                        .strftime("%Y-%m-%d")
-                    )
+    outdated_count = 0
+    skipped_count = 0
+    explanations = []
 
+    with tempfile.TemporaryDirectory() as temp_dir:
+        temp_dir_path = Path(temp_dir)
+        for pkg, pinned_version in packages:
+            try:
+                data = fetch_pypi_data(pkg)
+                latest_version = data["info"]["version"]
+                releases = data["releases"]
+                latest_release_date = get_release_dates(releases, latest_version)
+                constraint_release_date = get_release_dates(releases, pinned_version)
                 is_latest_version = pinned_version == latest_version
                 versions_behind = count_versions_between(releases, pinned_version, latest_version)
                 versions_behind_str = str(versions_behind) if versions_behind > 0 else ""
-
                 if should_show_package(releases, latest_version, constraints_date, mode, is_latest_version):
-                    # Use the first newer release date instead of latest version date
-                    first_newer_date_str = get_first_newer_release_date_str(releases, pinned_version)
-                    status = get_status_emoji(
-                        first_newer_date_str or constraint_release_date,
-                        datetime.now().strftime("%Y-%m-%d"),
-                        is_latest_version,
-                    )
-                    pypi_link = f"https://pypi.org/project/{pkg}/{latest_version}"
-
-                    color = (
-                        "green"
-                        if is_latest_version
-                        else ("yellow" if status.startswith("📢") or status.startswith("⚠") else "red")
+                    print_package_table_row(
+                        pkg=pkg,
+                        pinned_version=pinned_version,
+                        constraint_release_date=constraint_release_date,
+                        latest_version=latest_version,
+                        latest_release_date=latest_release_date,
+                        releases=releases,
+                        col_widths=col_widths,
+                        format_str=format_str,
+                        is_latest_version=is_latest_version,
+                        versions_behind_str=versions_behind_str,
                     )
-                    string_to_print = format_str.format(
-                        pkg,
-                        pinned_version[: col_widths["Constraint Version"]],
-                        constraint_release_date[: col_widths["Constraint Date"]],
-                        latest_version[: col_widths["Latest Version"]],
-                        latest_release_date[: col_widths["Latest Date"]],
-                        # The utf character takes 2 bytes so we need to subtract 1
-                        status[: col_widths["📢 Status"]],
-                        versions_behind_str,
-                        pypi_link,
-                    )
-                    console.print(f"[{color}]{string_to_print}[/]")
                     if not is_latest_version:
                         outdated_count += 1
                 else:
                     skipped_count += 1
 
-        except HTTPError as e:
-            console.print(f"[bold red]Error fetching {pkg} from PyPI: HTTP {e.code}[/]")
-            continue
-        except URLError as e:
-            console.print(f"[bold red]Error fetching {pkg} from PyPI: {e.reason}[/]")
-            continue
-        except Exception as e:
-            console.print(f"[bold red]Error processing {pkg}: {str(e)}[/]")
-            continue
+                if explain_why and not is_latest_version:
+                    explanation = explain_package_upgrade(
+                        pkg,
+                        pinned_version,
+                        latest_version,
+                        airflow_pyproject,
+                        repo_root,
+                        temp_dir_path,
+                        run_uv_sync,
+                        update_pyproject_dependency,
+                        verbose,
+                    )
+                    explanations.append(explanation)
+            except HTTPError as e:
+                console.print(f"[bold red]Error fetching {pkg} from PyPI: HTTP {e.code}[/]")
+                continue
+            except URLError as e:
+                console.print(f"[bold red]Error fetching {pkg} from PyPI: {e.reason}[/]")
+                continue
+            except Exception as e:
+                console.print(f"[bold red]Error processing {pkg}: {str(e)}[/]")
+                continue
+    return outdated_count, skipped_count, explanations
+
+
+def print_package_table_row(
+    pkg: str,
+    pinned_version: str,
+    constraint_release_date: str,
+    latest_version: str,
+    latest_release_date: str,
+    releases: dict,
+    col_widths: dict,
+    format_str: str,
+    is_latest_version: bool,
+    versions_behind_str: str,
+):
+    first_newer_date_str = get_first_newer_release_date_str(releases, pinned_version)
+    status = get_status_emoji(
+        first_newer_date_str or constraint_release_date,
+        datetime.now().strftime("%Y-%m-%d"),
+        is_latest_version,
+    )
+    pypi_link = f"https://pypi.org/project/{pkg}/{latest_version}"
+    color = (
+        "green"
+        if is_latest_version
+        else ("yellow" if status.startswith("📢") or status.startswith("⚠") else "red")
+    )
+    string_to_print = format_str.format(
+        pkg,
+        pinned_version[: col_widths["Constraint Version"]],
+        constraint_release_date[: col_widths["Constraint Date"]],
+        latest_version[: col_widths["Latest Version"]],
+        latest_release_date[: col_widths["Latest Date"]],
+        status[: col_widths["📢 Status"]],
+        versions_behind_str,
+        pypi_link,
+    )
+    console.print(f"[{color}]{string_to_print}[/]")
+
+
+def explain_package_upgrade(
+    pkg: str,
+    pinned_version: str,
+    latest_version: str,
+    airflow_pyproject: Path,
+    repo_root: Path,
+    temp_dir_path: Path,
+    run_uv_sync,
+    update_pyproject_dependency,
+    verbose: bool,
+) -> str:
+    explanation = (
+        f"[bold blue]\n--- Explaining for {pkg} (current: {pinned_version}, latest: {latest_version}) ---[/]"
+    )
 
-    console.print(f"[magenta]{'=' * total_width}[/]")
-    console.print(f"[bold cyan]\nTotal packages checked:[/] [white]{len(packages)}[/]")
-    console.print(f"[bold yellow]Outdated packages found:[/] [white]{outdated_count}[/]")
-    if mode == "diff-constraints":
-        console.print(
-            f"[bold blue]Skipped packages (updated after constraints generation):[/] [white]{skipped_count}[/]"
+    @contextmanager
+    def preserve_pyproject_file(pyproject_path: Path):
+        original_content = pyproject_path.read_text()
+        try:
+            yield
+        finally:
+            pyproject_path.write_text(original_content)
+
+    with preserve_pyproject_file(airflow_pyproject):
+        before_result = run_uv_sync(
+            [
+                "uv",
+                "sync",
+                "--all-packages",
+                "--resolution",
+                "highest",
+                "--refresh",
+            ],
+            cwd=repo_root,
+        )
+        (temp_dir_path / "uv_sync_before.txt").write_text(before_result.stdout + before_result.stderr)
+        update_pyproject_dependency(airflow_pyproject, pkg, latest_version)
+        if verbose:
+            syntax = Syntax(
+                airflow_pyproject.read_text(), "toml", theme="monokai", line_numbers=True, word_wrap=False
+            )
+            explanation += "\n" + str(syntax)
+        after_result = run_uv_sync(
+            [
+                "uv",
+                "sync",
+                "--all-packages",
+                "--resolution",
+                "highest",
+                "--refresh",
+            ],
+            cwd=repo_root,
         )
+        (temp_dir_path / "uv_sync_after.txt").write_text(after_result.stdout + after_result.stderr)
+        if after_result.returncode == 0:
+            explanation += f"\n[bold yellow]Package {pkg} can be upgraded from {pinned_version} to {latest_version} without conflicts.[/]."
+        else:
+            explanation += f"\n[yellow]uv sync output for {pkg}=={latest_version}:[/]\n"
+            explanation += after_result.stdout + after_result.stderr
+    return explanation
 
 
 @click.command()
@@ -400,11 +507,23 @@ def run_uv_sync(cmd, cwd):
     default=False,
     help="For each selected package, attempts to upgrade to the latest version and explains why it cannot be upgraded.",
 )
-def cli(python_version, mode, selected_packages, explain_why):
+@click.option(
+    "--verbose",
+    is_flag=True,
+    default=False,
+    help="Print the temporary pyproject.toml file used for each package when running --explain-why.",
+)
+def cli(
+    python_version: str,
+    mode: str,
+    selected_packages: str | None,
+    explain_why: bool,
+    verbose: bool,
+):
     selected_packages_set = None
     if selected_packages:
         selected_packages_set = set(pkg.strip() for pkg in selected_packages.split(",") if pkg.strip())
-    main(python_version, mode, selected_packages_set, explain_why)
+    main(python_version, mode, selected_packages_set, explain_why, verbose)
 
 
 if __name__ == "__main__":

From 689068fb2e3aa074a1c933122755756a8f8431c9 Mon Sep 17 00:00:00 2001
From: Dov Benyomin Sohacheski <b@kloud.email>
Date: Sun, 29 Jun 2025 13:36:55 +0300
Subject: [PATCH 287/381] Update documentation for forcing core
 execution_api_server_url (#52447)

---
 providers/edge3/docs/deployment.rst | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/providers/edge3/docs/deployment.rst b/providers/edge3/docs/deployment.rst
index 922632a23eed4..b4fc9977c1f7f 100644
--- a/providers/edge3/docs/deployment.rst
+++ b/providers/edge3/docs/deployment.rst
@@ -50,9 +50,9 @@ Minimum Airflow configuration settings for the Edge Worker to make it running is
 
 - Section ``[core]``
 
-  - ``execution_api_server_url``: The url of the execution api server. Default is ``{BASE_URL}/execution/``
-    where {BASE_URL} is the base url of the API Server. If ``{BASE_URL}`` is not set, it will use
-    ``http://localhost:8080`` as the default base url.
+  - ``execution_api_server_url``: If not set, the base URL from ``edge.api_url`` will be used. For example,
+    when ``edge.api_url`` is set to ``https://your-hostname-and-port/edge_worker/v1/rpcapi``, it will
+    default to ``https://your-hostname-and-port/execution/``.
   - ``executor``: Executor must be set or added to be ``airflow.providers.edge3.executors.EdgeExecutor``
   - ``internal_api_secret_key``: An encryption key must be set on api-server and Edge Worker component as
     shared secret to authenticate traffic. It should be a random string like the fernet key

From d050c6b9c7ce4036360ecc514041891036a7af1b Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sun, 29 Jun 2025 13:54:17 +0200
Subject: [PATCH 288/381] Add colors to go tests output in CI (#52454)

---
 .github/workflows/ci-amd.yml | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/ci-amd.yml b/.github/workflows/ci-amd.yml
index 084cb63779c40..e8f5b4095bb2a 100644
--- a/.github/workflows/ci-amd.yml
+++ b/.github/workflows/ci-amd.yml
@@ -820,12 +820,19 @@ jobs:
           go-version: 1.24
           cache-dependency-path: go-sdk/go.sum
 
+      # keep this in sync with go.mod in go-sdk/
+      - name: Setup Gotestsum
+        shell: bash
+        run: |
+          go install gotest.tools/gotestsum@ddd0b05a6878e2e8257a2abe6e7df66cebc53d0e  # v1.12.3
+          gotestsum --version
+
       - name: "Cleanup dist files"
         run: rm -fv ./dist/*
 
       - name: Run Go tests
         working-directory: ./go-sdk
-        run: go test -v ./...
+        run: gotestsum --format testname ./...
 
   tests-airflow-ctl:
     name: "Airflow CTL tests"

From e53e99a85f50c6f2f57f7d4cfa0e4d4a51ca0220 Mon Sep 17 00:00:00 2001
From: Geonwoo Kim <78521993+kgw7401@users.noreply.github.com>
Date: Sun, 29 Jun 2025 21:09:13 +0900
Subject: [PATCH 289/381] add: version_compat (#52448)

---
 .../providers/apache/spark/operators/spark_sql.py      |  2 +-
 .../providers/apache/spark/operators/spark_submit.py   |  2 +-
 .../airflow/providers/apache/spark/version_compat.py   | 10 ++++++++++
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/providers/apache/spark/src/airflow/providers/apache/spark/operators/spark_sql.py b/providers/apache/spark/src/airflow/providers/apache/spark/operators/spark_sql.py
index b2de5d0cb237c..e4fc07e6ec4f5 100644
--- a/providers/apache/spark/src/airflow/providers/apache/spark/operators/spark_sql.py
+++ b/providers/apache/spark/src/airflow/providers/apache/spark/operators/spark_sql.py
@@ -20,8 +20,8 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING, Any
 
-from airflow.models import BaseOperator
 from airflow.providers.apache.spark.hooks.spark_sql import SparkSqlHook
+from airflow.providers.apache.spark.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/apache/spark/src/airflow/providers/apache/spark/operators/spark_submit.py b/providers/apache/spark/src/airflow/providers/apache/spark/operators/spark_submit.py
index 9c1b38e5eee40..44fd5f3f43bf7 100644
--- a/providers/apache/spark/src/airflow/providers/apache/spark/operators/spark_submit.py
+++ b/providers/apache/spark/src/airflow/providers/apache/spark/operators/spark_submit.py
@@ -21,8 +21,8 @@
 from typing import TYPE_CHECKING, Any
 
 from airflow.configuration import conf
-from airflow.models import BaseOperator
 from airflow.providers.apache.spark.hooks.spark_submit import SparkSubmitHook
+from airflow.providers.apache.spark.version_compat import BaseOperator
 from airflow.providers.common.compat.openlineage.utils.spark import (
     inject_parent_job_information_into_spark_properties,
     inject_transport_information_into_spark_properties,
diff --git a/providers/apache/spark/src/airflow/providers/apache/spark/version_compat.py b/providers/apache/spark/src/airflow/providers/apache/spark/version_compat.py
index 48d122b669696..e7a259afb357c 100644
--- a/providers/apache/spark/src/airflow/providers/apache/spark/version_compat.py
+++ b/providers/apache/spark/src/airflow/providers/apache/spark/version_compat.py
@@ -33,3 +33,13 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+]

From 3347e035795a1952efbe1d560048fbd8bbfcd159 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sun, 29 Jun 2025 14:23:17 +0200
Subject: [PATCH 290/381] Improve terminal handling for breeze commands
 (#52452)

Console width has been hard-coded in CI commands, which often limited
what was written in CI (Github action's CI does not have a terminal,
nor terminal width so we allocate pseudo-terminal there)
However when running breeze locally we should be
able to use all terminal width.

This PR:

* increases length of CI terminal as we tend to have longer
  paths now after we moved stuff to subdirectories
* only fixes terminal size on CI and leaves it None (auto) for
  local runs
* adds --tty (default auto) to `breeze run` command to allow to
  use it both locally and in CI.
---
 .github/workflows/basic-tests.yml             |  2 +-
 .github/workflows/ci-amd.yml                  |  1 -
 .github/workflows/ci-image-checks.yml         |  4 +--
 Dockerfile.ci                                 |  4 +++
 dev/breeze/doc/images/output_run.svg          | 28 +++++++++++++++----
 dev/breeze/doc/images/output_run.txt          |  2 +-
 .../airflow_breeze/commands/common_options.py | 10 +++++++
 .../commands/developer_commands.py            | 16 ++++-------
 .../commands/developer_commands_config.py     |  1 +
 .../src/airflow_breeze/utils/console.py       |  7 +++--
 scripts/docker/entrypoint_ci.sh               |  4 +++
 11 files changed, 55 insertions(+), 24 deletions(-)

diff --git a/.github/workflows/basic-tests.yml b/.github/workflows/basic-tests.yml
index 64c348501e0d5..f94626b34242f 100644
--- a/.github/workflows/basic-tests.yml
+++ b/.github/workflows/basic-tests.yml
@@ -223,7 +223,7 @@ jobs:
           VERBOSE: "false"
           SKIP_BREEZE_PRE_COMMITS: "true"
           SKIP: ${{ inputs.skip-pre-commits }}
-          COLUMNS: "250"
+          COLUMNS: "202"
 
   test-git-clone-on-windows:
     timeout-minutes: 5
diff --git a/.github/workflows/ci-amd.yml b/.github/workflows/ci-amd.yml
index e8f5b4095bb2a..5a55b9369b779 100644
--- a/.github/workflows/ci-amd.yml
+++ b/.github/workflows/ci-amd.yml
@@ -248,7 +248,6 @@ jobs:
       contents: read
       packages: write
       id-token: write
-    if: needs.build-info.outputs.canary-run == 'true'
     with:
       runners: ${{ needs.build-info.outputs.amd-runners }}
       platform: "linux/amd64"
diff --git a/.github/workflows/ci-image-checks.yml b/.github/workflows/ci-image-checks.yml
index ec47528297ec3..a3baab28f29bc 100644
--- a/.github/workflows/ci-image-checks.yml
+++ b/.github/workflows/ci-image-checks.yml
@@ -193,7 +193,7 @@ jobs:
         env:
           VERBOSE: "false"
           SKIP: ${{ inputs.skip-pre-commits }}
-          COLUMNS: "250"
+          COLUMNS: "202"
           SKIP_GROUP_OUTPUT: "true"
           DEFAULT_BRANCH: ${{ inputs.branch }}
           RUFF_FORMAT: "github"
@@ -235,7 +235,7 @@ jobs:
         run: pre-commit run --color always --verbose --hook-stage manual "$MYPY_CHECK" --all-files
         env:
           VERBOSE: "false"
-          COLUMNS: "250"
+          COLUMNS: "202"
           SKIP_GROUP_OUTPUT: "true"
           DEFAULT_BRANCH: ${{ inputs.branch }}
           RUFF_FORMAT: "github"
diff --git a/Dockerfile.ci b/Dockerfile.ci
index 766305fb0e6f9..743ff778a5f37 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -848,6 +848,10 @@ mkdir "${AIRFLOW_HOME}/sqlite" -p || true
 
 ASSET_COMPILATION_WAIT_MULTIPLIER=${ASSET_COMPILATION_WAIT_MULTIPLIER:=1}
 
+if [[ "${CI=}" == "true" ]]; then
+    export COLUMNS="202"
+fi
+
 . "${IN_CONTAINER_DIR}/check_connectivity.sh"
 
 function wait_for_asset_compilation() {
diff --git a/dev/breeze/doc/images/output_run.svg b/dev/breeze/doc/images/output_run.svg
index 1d3a5b1917c59..c4dfd81418db2 100644
--- a/dev/breeze/doc/images/output_run.svg
+++ b/dev/breeze/doc/images/output_run.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1148.0" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 1245.6" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-run-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="1097.0" />
+      <rect x="0" y="0" width="1463.0" height="1194.6" />
     </clipPath>
     <clipPath id="breeze-run-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -177,9 +177,21 @@
 <clipPath id="breeze-run-line-43">
     <rect x="0" y="1050.7" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-run-line-44">
+    <rect x="0" y="1075.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-45">
+    <rect x="0" y="1099.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-46">
+    <rect x="0" y="1123.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-run-line-47">
+    <rect x="0" y="1148.3" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1146" rx="8"/><text class="breeze-run-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;run</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1243.6" rx="8"/><text class="breeze-run-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;run</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -231,9 +243,13 @@
 </text><text class="breeze-run-r5" x="0" y="971.6" textLength="1464" clip-path="url(#breeze-run-line-39)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-run-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-run-line-39)">
 </text><text class="breeze-run-r5" x="0" y="996" textLength="24.4" clip-path="url(#breeze-run-line-40)">╭─</text><text class="breeze-run-r5" x="24.4" y="996" textLength="195.2" clip-path="url(#breeze-run-line-40)">&#160;Common&#160;options&#160;</text><text class="breeze-run-r5" x="219.6" y="996" textLength="1220" clip-path="url(#breeze-run-line-40)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-run-r5" x="1439.6" y="996" textLength="24.4" clip-path="url(#breeze-run-line-40)">─╮</text><text class="breeze-run-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-run-line-40)">
 </text><text class="breeze-run-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-run-line-41)">│</text><text class="breeze-run-r4" x="24.4" y="1020.4" textLength="109.8" clip-path="url(#breeze-run-line-41)">--dry-run</text><text class="breeze-run-r6" x="158.6" y="1020.4" textLength="24.4" clip-path="url(#breeze-run-line-41)">-D</text><text class="breeze-run-r1" x="207.4" y="1020.4" textLength="719.8" clip-path="url(#breeze-run-line-41)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-run-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-run-line-41)">│</text><text class="breeze-run-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-run-line-41)">
-</text><text class="breeze-run-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-run-line-42)">│</text><text class="breeze-run-r4" x="24.4" y="1044.8" textLength="109.8" clip-path="url(#breeze-run-line-42)">--verbose</text><text class="breeze-run-r6" x="158.6" y="1044.8" textLength="24.4" clip-path="url(#breeze-run-line-42)">-v</text><text class="breeze-run-r1" x="207.4" y="1044.8" textLength="585.6" clip-path="url(#breeze-run-line-42)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-run-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-run-line-42)">│</text><text class="breeze-run-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-run-line-42)">
-</text><text class="breeze-run-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-run-line-43)">│</text><text class="breeze-run-r4" x="24.4" y="1069.2" textLength="73.2" clip-path="url(#breeze-run-line-43)">--help</text><text class="breeze-run-r6" x="158.6" y="1069.2" textLength="24.4" clip-path="url(#breeze-run-line-43)">-h</text><text class="breeze-run-r1" x="207.4" y="1069.2" textLength="329.4" clip-path="url(#breeze-run-line-43)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-run-r5" x="1451.8" y="1069.2" textLength="12.2" clip-path="url(#breeze-run-line-43)">│</text><text class="breeze-run-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-run-line-43)">
-</text><text class="breeze-run-r5" x="0" y="1093.6" textLength="1464" clip-path="url(#breeze-run-line-44)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-run-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-run-line-44)">
+</text><text class="breeze-run-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-run-line-42)">│</text><text class="breeze-run-r4" x="24.4" y="1044.8" textLength="61" clip-path="url(#breeze-run-line-42)">--tty</text><text class="breeze-run-r1" x="207.4" y="1044.8" textLength="1232.2" clip-path="url(#breeze-run-line-42)">Whether&#160;to&#160;allocate&#160;pseudo-tty&#160;when&#160;running&#160;docker&#160;command&#160;(useful&#160;for&#160;pre-commit&#160;and&#160;CI&#160;to&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-run-line-42)">│</text><text class="breeze-run-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-run-line-42)">
+</text><text class="breeze-run-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-run-line-43)">│</text><text class="breeze-run-r1" x="207.4" y="1069.2" textLength="1232.2" clip-path="url(#breeze-run-line-43)">force-enable&#160;it).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="1069.2" textLength="12.2" clip-path="url(#breeze-run-line-43)">│</text><text class="breeze-run-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-run-line-43)">
+</text><text class="breeze-run-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-run-line-44)">│</text><text class="breeze-run-r7" x="207.4" y="1093.6" textLength="1232.2" clip-path="url(#breeze-run-line-44)">(auto&#160;|&#160;enabled&#160;|&#160;disabled)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="1093.6" textLength="12.2" clip-path="url(#breeze-run-line-44)">│</text><text class="breeze-run-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-run-line-44)">
+</text><text class="breeze-run-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-run-line-45)">│</text><text class="breeze-run-r5" x="207.4" y="1118" textLength="1232.2" clip-path="url(#breeze-run-line-45)">[default:&#160;auto]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-run-r5" x="1451.8" y="1118" textLength="12.2" clip-path="url(#breeze-run-line-45)">│</text><text class="breeze-run-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-run-line-45)">
+</text><text class="breeze-run-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-run-line-46)">│</text><text class="breeze-run-r4" x="24.4" y="1142.4" textLength="109.8" clip-path="url(#breeze-run-line-46)">--verbose</text><text class="breeze-run-r6" x="158.6" y="1142.4" textLength="24.4" clip-path="url(#breeze-run-line-46)">-v</text><text class="breeze-run-r1" x="207.4" y="1142.4" textLength="585.6" clip-path="url(#breeze-run-line-46)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-run-r5" x="1451.8" y="1142.4" textLength="12.2" clip-path="url(#breeze-run-line-46)">│</text><text class="breeze-run-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#breeze-run-line-46)">
+</text><text class="breeze-run-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-run-line-47)">│</text><text class="breeze-run-r4" x="24.4" y="1166.8" textLength="73.2" clip-path="url(#breeze-run-line-47)">--help</text><text class="breeze-run-r6" x="158.6" y="1166.8" textLength="24.4" clip-path="url(#breeze-run-line-47)">-h</text><text class="breeze-run-r1" x="207.4" y="1166.8" textLength="329.4" clip-path="url(#breeze-run-line-47)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-run-r5" x="1451.8" y="1166.8" textLength="12.2" clip-path="url(#breeze-run-line-47)">│</text><text class="breeze-run-r1" x="1464" y="1166.8" textLength="12.2" clip-path="url(#breeze-run-line-47)">
+</text><text class="breeze-run-r5" x="0" y="1191.2" textLength="1464" clip-path="url(#breeze-run-line-48)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-run-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#breeze-run-line-48)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_run.txt b/dev/breeze/doc/images/output_run.txt
index 20c4b1e101967..c14b7d586e7eb 100644
--- a/dev/breeze/doc/images/output_run.txt
+++ b/dev/breeze/doc/images/output_run.txt
@@ -1 +1 @@
-a091135537dd5028ed149ca9660fdc1e
+b0dbcbb353dc722c2004dddcdf574a2c
diff --git a/dev/breeze/src/airflow_breeze/commands/common_options.py b/dev/breeze/src/airflow_breeze/commands/common_options.py
index 0363cd9eeced6..ab52a567f3d29 100644
--- a/dev/breeze/src/airflow_breeze/commands/common_options.py
+++ b/dev/breeze/src/airflow_breeze/commands/common_options.py
@@ -30,6 +30,7 @@
     ALLOWED_MYSQL_VERSIONS,
     ALLOWED_POSTGRES_VERSIONS,
     ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS,
+    ALLOWED_TTY,
     ALLOWED_USE_AIRFLOW_VERSIONS,
     APACHE_AIRFLOW_GITHUB_REPOSITORY,
     AUTOCOMPLETE_ALL_INTEGRATIONS,
@@ -380,6 +381,15 @@ def _set_default_from_parent(ctx: click.core.Context, option: click.core.Option,
     help="Run standalone dag processor for start-airflow (required for Airflow 3).",
     envvar="STANDALONE_DAG_PROCESSOR",
 )
+option_tty = click.option(
+    "--tty",
+    envvar="TTY",
+    type=BetterChoice(ALLOWED_TTY),
+    default=ALLOWED_TTY[0],
+    show_default=True,
+    help="Whether to allocate pseudo-tty when running docker command"
+    " (useful for pre-commit and CI to force-enable it).",
+)
 option_upgrade_boto = click.option(
     "--upgrade-boto",
     help="Remove aiobotocore and upgrade botocore and boto to the latest version.",
diff --git a/dev/breeze/src/airflow_breeze/commands/developer_commands.py b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
index 0a6ad96790971..85e593e8cf0c2 100644
--- a/dev/breeze/src/airflow_breeze/commands/developer_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
@@ -65,6 +65,7 @@
     option_run_db_tests_only,
     option_skip_db_tests,
     option_standalone_dag_processor,
+    option_tty,
     option_upgrade_boto,
     option_use_airflow_version,
     option_use_uv,
@@ -89,7 +90,6 @@
     ALLOWED_CELERY_BROKERS,
     ALLOWED_CELERY_EXECUTORS,
     ALLOWED_EXECUTORS,
-    ALLOWED_TTY,
     DEFAULT_ALLOWED_EXECUTOR,
     DEFAULT_CELERY_BROKER,
     DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
@@ -255,15 +255,7 @@ def run(self):
 @main.command()
 @click.argument("extra-args", nargs=-1, type=click.UNPROCESSED)
 @click.option("--quiet", is_flag=True, envvar="QUIET", help="Suppress initialization output when starting.")
-@click.option(
-    "--tty",
-    envvar="TTY",
-    type=BetterChoice(ALLOWED_TTY),
-    default=ALLOWED_TTY[0],
-    show_default=True,
-    help="Whether to allocate pseudo-tty when running docker command"
-    " (useful for pre-commit and CI to force-enable it).",
-)
+@option_tty
 @click.option(
     "--verbose-commands",
     help="Show details of commands executed.",
@@ -1222,6 +1214,7 @@ def doctor(ctx):
 @option_project_name
 @option_python
 @option_skip_image_upgrade_check
+@option_tty
 @option_use_uv
 @option_uv_http_timeout
 @option_verbose
@@ -1240,6 +1233,7 @@ def run(
     project_name: str,
     python: str,
     skip_image_upgrade_check: bool,
+    tty: str,
     use_uv: bool,
     uv_http_timeout: int,
 ):
@@ -1307,7 +1301,7 @@ def run(
         # Optimizations for non-interactive execution
         quiet=True,
         skip_environment_initialization=True,
-        tty="disabled",
+        tty=tty,
         # Set extra_args to empty tuple since we'll pass the command directly
         extra_args=(),
     )
diff --git a/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py b/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py
index eae6e0cb862cc..445601d191bc6 100644
--- a/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py
@@ -304,6 +304,7 @@
                 "--backend",
                 "--postgres-version",
                 "--mysql-version",
+                "--tty",
             ],
         },
         {
diff --git a/dev/breeze/src/airflow_breeze/utils/console.py b/dev/breeze/src/airflow_breeze/utils/console.py
index 6e0b3e77dbfe7..54b7717825b9b 100644
--- a/dev/breeze/src/airflow_breeze/utils/console.py
+++ b/dev/breeze/src/airflow_breeze/utils/console.py
@@ -91,12 +91,15 @@ def escaped_title(self) -> str:
         return self.title.replace("[", "\\[")
 
 
+CONSOLE_WIDTH: int | None = int(os.environ.get("CI_WIDTH", "202")) if os.environ.get("CI") else None
+
+
 @clearable_cache
 def get_console(output: Output | None = None) -> Console:
     return Console(
         force_terminal=True,
         color_system="standard",
-        width=202 if not recording_width else int(recording_width),
+        width=CONSOLE_WIDTH if not recording_width else int(recording_width),
         file=output.file if output else None,
         theme=get_theme(),
         record=True if recording_file else False,
@@ -110,7 +113,7 @@ def get_stderr_console(output: Output | None = None) -> Console:
         color_system="standard",
         stderr=True,
         file=output.file if output else None,
-        width=202 if not recording_width else int(recording_width),
+        width=CONSOLE_WIDTH if not recording_width else int(recording_width),
         theme=get_theme(),
         record=True if recording_file else False,
     )
diff --git a/scripts/docker/entrypoint_ci.sh b/scripts/docker/entrypoint_ci.sh
index 9dcb3ee65837f..e62e0a58c8002 100755
--- a/scripts/docker/entrypoint_ci.sh
+++ b/scripts/docker/entrypoint_ci.sh
@@ -49,6 +49,10 @@ mkdir "${AIRFLOW_HOME}/sqlite" -p || true
 
 ASSET_COMPILATION_WAIT_MULTIPLIER=${ASSET_COMPILATION_WAIT_MULTIPLIER:=1}
 
+if [[ "${CI=}" == "true" ]]; then
+    export COLUMNS="202"
+fi
+
 # shellcheck disable=SC1091
 . "${IN_CONTAINER_DIR}/check_connectivity.sh"
 

From ae2d81f8c8904544ff091f74310439ea5ae9caae Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sun, 29 Jun 2025 16:24:54 +0200
Subject: [PATCH 291/381] Remove old, unused generate SVG airflowctl pre-commit
 and fix width (#52457)

The command was duplicated - an old version of it was also defined
using cli folder that does not exist any more. Also column width
is fixed when generating the help files which will make it
independent from where the generation is run.
---
 .pre-commit-config.yaml                       | 11 ++------
 airflow-ctl/docs/images/command_hashes.txt    | 28 +++++++++----------
 airflow-ctl/docs/images/output_assets.svg     |  4 +--
 airflow-ctl/docs/images/output_auth.svg       |  4 +--
 airflow-ctl/docs/images/output_auth_login.svg |  4 +--
 airflow-ctl/docs/images/output_backfills.svg  |  4 +--
 airflow-ctl/docs/images/output_config.svg     |  4 +--
 .../docs/images/output_connections.svg        |  4 +--
 airflow-ctl/docs/images/output_dag.svg        |  4 +--
 airflow-ctl/docs/images/output_dagrun.svg     |  4 +--
 airflow-ctl/docs/images/output_jobs.svg       |  4 +--
 airflow-ctl/docs/images/output_main.svg       |  4 +--
 airflow-ctl/docs/images/output_pools.svg      |  4 +--
 airflow-ctl/docs/images/output_providers.svg  |  4 +--
 airflow-ctl/docs/images/output_variables.svg  |  4 +--
 airflow-ctl/docs/images/output_version.svg    |  4 +--
 contributing-docs/08_static_code_checks.rst   |  3 +-
 .../run_capture_airflowctl_help.py            | 14 ++++++++--
 18 files changed, 57 insertions(+), 55 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index e8e0a5d525c4e..b2d110f6e1af3 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -289,7 +289,8 @@ repos:
           (?x)
           ^airflow-core/docs/img/.*\.dot$|
           ^dev/breeze/doc/images/output.*$|
-          ^.*/openapi-gen/.*$
+          ^.*/openapi-gen/.*$|
+          ^airflow-ctl/docs/images/.*\.svg$
       - id: fix-encoding-pragma
         name: Remove encoding header from Python files
         args:
@@ -1338,14 +1339,6 @@ repos:
         files: ^airflow-core/src/airflow/migrations/versions/.*\.py$
         exclude:
           airflow-core/src/airflow/migrations/versions/0028_3_0_0_drop_ab_user_id_foreign_key.py
-      - id: generate-airflowctl-help-images
-        name: Generate SVG from Airflow CTL Commands
-        entry: ./scripts/ci/pre_commit/capture_airflowctl_help.py
-        language: python
-        pass_filenames: false
-        files:
-          ^airflow-ctl/src/airflowctl/api/operations.py|airflow-ctl/src/airflowctl/cli/.*\.py$
-        additional_dependencies: ['rich>=12.4.4']
       - id: go-mockery
         name: Generate mocks for go
         entry: -w /src/go-sdk vektra/mockery:3
diff --git a/airflow-ctl/docs/images/command_hashes.txt b/airflow-ctl/docs/images/command_hashes.txt
index 73316282d987d..868e9a10fba18 100644
--- a/airflow-ctl/docs/images/command_hashes.txt
+++ b/airflow-ctl/docs/images/command_hashes.txt
@@ -1,14 +1,14 @@
-main:8c61e3718e03aca03d819dce9973d56d
-assets:6368874514661d8ef3d58e3b925e4ec1
-auth:caba04038826ae684922b9a7c42fc523
-backfills:10f1ac9cf1aa90d47006f23fc73cef38
-config:30215b244ab1e713df78813011449122
-connections:7f251b3b6005583c685218a264b47587
-dag:74332efb98c229cc90de9aeb1e87d58e
-dagrun:f4ca499bcfc98265c065d06bf685ce87
-jobs:3675ee646892500ea45b0a17bf52ca07
-pools:5b1694055cea03e20468258200a18212
-providers:beb417fce0c8a6cafcdab36e0e692579
-variables:0d276ede752bad613823821ec2a2d7cb
-version:dd32fbd1740003c2aaa30cd6a201dacd
-auth login:8bcfaaf886b64c3d2e81d7e1c767b4b2
+main:8d768c837899829dfd21d37253d2fb44
+assets:b3ae2b933e54528bf486ff28e887804d
+auth:f396d4bce90215599dde6ad0a8f30f29
+backfills:725109470cd2613de8cc8af022fb54bc
+config:cb175bedf29e8a2c2c6a2ebd13d770a7
+connections:3614621ec6ef503b46c69bf5aaf3018b
+dag:f4a1936ebf330773001d6d04f65c3249
+dagrun:8381fea6a9119b9ebba1b39261ac68a4
+jobs:7f8680afff230eb9940bc7fca727bd52
+pools:03fc7d948cbecf16ff8d640eb8f0ce43
+providers:1c0afb2dff31d93ab2934b032a2250ab
+variables:0b04188937b3c364204ef4cc9a541c62
+version:000176f03a175890b12181c8569e2d0f
+auth login:5277c653ff6dce51f37472dc0bda9775
diff --git a/airflow-ctl/docs/images/output_assets.svg b/airflow-ctl/docs/images/output_assets.svg
index a680d89a96005..d4c389c4a4a07 100644
--- a/airflow-ctl/docs/images/output_assets.svg
+++ b/airflow-ctl/docs/images/output_assets.svg
@@ -122,9 +122,9 @@
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
-
+        
     <g transform="translate(9, 41)" clip-path="url(#terminal-2173367894-clip-terminal)">
-
+    
     <g class="terminal-2173367894-matrix">
     <text class="terminal-2173367894-r1" x="0" y="20" textLength="500.2" clip-path="url(#terminal-2173367894-line-0)">Usage:&#160;airflowctl&#160;assets&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-2173367894-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2173367894-line-0)">
 </text><text class="terminal-2173367894-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2173367894-line-1)">
diff --git a/airflow-ctl/docs/images/output_auth.svg b/airflow-ctl/docs/images/output_auth.svg
index 87dda63d8376d..b47f972fef81e 100644
--- a/airflow-ctl/docs/images/output_auth.svg
+++ b/airflow-ctl/docs/images/output_auth.svg
@@ -80,9 +80,9 @@
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
-
+        
     <g transform="translate(9, 41)" clip-path="url(#terminal-3729182497-clip-terminal)">
-
+    
     <g class="terminal-3729182497-matrix">
     <text class="terminal-3729182497-r1" x="0" y="20" textLength="475.8" clip-path="url(#terminal-3729182497-line-0)">Usage:&#160;airflowctl&#160;auth&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-3729182497-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3729182497-line-0)">
 </text><text class="terminal-3729182497-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3729182497-line-1)">
diff --git a/airflow-ctl/docs/images/output_auth_login.svg b/airflow-ctl/docs/images/output_auth_login.svg
index d023348b4b544..3a0c13f77686b 100644
--- a/airflow-ctl/docs/images/output_auth_login.svg
+++ b/airflow-ctl/docs/images/output_auth_login.svg
@@ -89,9 +89,9 @@
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
-
+        
     <g transform="translate(9, 41)" clip-path="url(#terminal-452800165-clip-terminal)">
-
+    
     <g class="terminal-452800165-matrix">
     <text class="terminal-452800165-r1" x="0" y="20" textLength="939.4" clip-path="url(#terminal-452800165-line-0)">Usage:&#160;airflowctl&#160;auth&#160;login&#160;[-h]&#160;[--api-token&#160;API_TOKEN]&#160;[--api-url&#160;API_URL]</text><text class="terminal-452800165-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-452800165-line-0)">
 </text><text class="terminal-452800165-r1" x="0" y="44.4" textLength="744.2" clip-path="url(#terminal-452800165-line-1)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;[-e&#160;ENV]&#160;[--password&#160;[PASSWORD]]</text><text class="terminal-452800165-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-452800165-line-1)">
diff --git a/airflow-ctl/docs/images/output_backfills.svg b/airflow-ctl/docs/images/output_backfills.svg
index dd590f32527e5..f68bb5096b73f 100644
--- a/airflow-ctl/docs/images/output_backfills.svg
+++ b/airflow-ctl/docs/images/output_backfills.svg
@@ -95,9 +95,9 @@
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
-
+        
     <g transform="translate(9, 41)" clip-path="url(#terminal-3702003602-clip-terminal)">
-
+    
     <g class="terminal-3702003602-matrix">
     <text class="terminal-3702003602-r1" x="0" y="20" textLength="536.8" clip-path="url(#terminal-3702003602-line-0)">Usage:&#160;airflowctl&#160;backfills&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-3702003602-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3702003602-line-0)">
 </text><text class="terminal-3702003602-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3702003602-line-1)">
diff --git a/airflow-ctl/docs/images/output_config.svg b/airflow-ctl/docs/images/output_config.svg
index e993040457df5..53940323428cc 100644
--- a/airflow-ctl/docs/images/output_config.svg
+++ b/airflow-ctl/docs/images/output_config.svg
@@ -83,9 +83,9 @@
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
-
+        
     <g transform="translate(9, 41)" clip-path="url(#terminal-2512178088-clip-terminal)">
-
+    
     <g class="terminal-2512178088-matrix">
     <text class="terminal-2512178088-r1" x="0" y="20" textLength="500.2" clip-path="url(#terminal-2512178088-line-0)">Usage:&#160;airflowctl&#160;config&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-2512178088-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2512178088-line-0)">
 </text><text class="terminal-2512178088-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2512178088-line-1)">
diff --git a/airflow-ctl/docs/images/output_connections.svg b/airflow-ctl/docs/images/output_connections.svg
index 952b010c12e39..3d88d794cb1e1 100644
--- a/airflow-ctl/docs/images/output_connections.svg
+++ b/airflow-ctl/docs/images/output_connections.svg
@@ -95,9 +95,9 @@
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
-
+        
     <g transform="translate(9, 41)" clip-path="url(#terminal-560929528-clip-terminal)">
-
+    
     <g class="terminal-560929528-matrix">
     <text class="terminal-560929528-r1" x="0" y="20" textLength="561.2" clip-path="url(#terminal-560929528-line-0)">Usage:&#160;airflowctl&#160;connections&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-560929528-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-560929528-line-0)">
 </text><text class="terminal-560929528-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-560929528-line-1)">
diff --git a/airflow-ctl/docs/images/output_dag.svg b/airflow-ctl/docs/images/output_dag.svg
index 96a2c849ddec5..2f840734e4821 100644
--- a/airflow-ctl/docs/images/output_dag.svg
+++ b/airflow-ctl/docs/images/output_dag.svg
@@ -113,9 +113,9 @@
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
-
+        
     <g transform="translate(9, 41)" clip-path="url(#terminal-1884464113-clip-terminal)">
-
+    
     <g class="terminal-1884464113-matrix">
     <text class="terminal-1884464113-r1" x="0" y="20" textLength="463.6" clip-path="url(#terminal-1884464113-line-0)">Usage:&#160;airflowctl&#160;dag&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-1884464113-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1884464113-line-0)">
 </text><text class="terminal-1884464113-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1884464113-line-1)">
diff --git a/airflow-ctl/docs/images/output_dagrun.svg b/airflow-ctl/docs/images/output_dagrun.svg
index cd3bc15880d40..f095c0e32fcc7 100644
--- a/airflow-ctl/docs/images/output_dagrun.svg
+++ b/airflow-ctl/docs/images/output_dagrun.svg
@@ -80,9 +80,9 @@
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
-
+        
     <g transform="translate(9, 41)" clip-path="url(#terminal-1550757437-clip-terminal)">
-
+    
     <g class="terminal-1550757437-matrix">
     <text class="terminal-1550757437-r1" x="0" y="20" textLength="500.2" clip-path="url(#terminal-1550757437-line-0)">Usage:&#160;airflowctl&#160;dagrun&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-1550757437-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1550757437-line-0)">
 </text><text class="terminal-1550757437-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1550757437-line-1)">
diff --git a/airflow-ctl/docs/images/output_jobs.svg b/airflow-ctl/docs/images/output_jobs.svg
index 6d9504a90cbc4..16e1ebac52d46 100644
--- a/airflow-ctl/docs/images/output_jobs.svg
+++ b/airflow-ctl/docs/images/output_jobs.svg
@@ -74,9 +74,9 @@
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
-
+        
     <g transform="translate(9, 41)" clip-path="url(#terminal-2142602472-clip-terminal)">
-
+    
     <g class="terminal-2142602472-matrix">
     <text class="terminal-2142602472-r1" x="0" y="20" textLength="475.8" clip-path="url(#terminal-2142602472-line-0)">Usage:&#160;airflowctl&#160;jobs&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-2142602472-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2142602472-line-0)">
 </text><text class="terminal-2142602472-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2142602472-line-1)">
diff --git a/airflow-ctl/docs/images/output_main.svg b/airflow-ctl/docs/images/output_main.svg
index ede79c291896c..98bf85d2fd28f 100644
--- a/airflow-ctl/docs/images/output_main.svg
+++ b/airflow-ctl/docs/images/output_main.svg
@@ -119,9 +119,9 @@
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
-
+        
     <g transform="translate(9, 41)" clip-path="url(#terminal-101498644-clip-terminal)">
-
+    
     <g class="terminal-101498644-matrix">
     <text class="terminal-101498644-r1" x="0" y="20" textLength="524.6" clip-path="url(#terminal-101498644-line-0)">Usage:&#160;airflowctl&#160;[-h]&#160;GROUP_OR_COMMAND&#160;...</text><text class="terminal-101498644-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-101498644-line-0)">
 </text><text class="terminal-101498644-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-101498644-line-1)">
diff --git a/airflow-ctl/docs/images/output_pools.svg b/airflow-ctl/docs/images/output_pools.svg
index 0772aef116f5c..13b4332c2558c 100644
--- a/airflow-ctl/docs/images/output_pools.svg
+++ b/airflow-ctl/docs/images/output_pools.svg
@@ -92,9 +92,9 @@
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
-
+        
     <g transform="translate(9, 41)" clip-path="url(#terminal-3616077834-clip-terminal)">
-
+    
     <g class="terminal-3616077834-matrix">
     <text class="terminal-3616077834-r1" x="0" y="20" textLength="488" clip-path="url(#terminal-3616077834-line-0)">Usage:&#160;airflowctl&#160;pools&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-3616077834-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3616077834-line-0)">
 </text><text class="terminal-3616077834-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3616077834-line-1)">
diff --git a/airflow-ctl/docs/images/output_providers.svg b/airflow-ctl/docs/images/output_providers.svg
index a64c52f809250..099a7d35ee670 100644
--- a/airflow-ctl/docs/images/output_providers.svg
+++ b/airflow-ctl/docs/images/output_providers.svg
@@ -74,9 +74,9 @@
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
-
+        
     <g transform="translate(9, 41)" clip-path="url(#terminal-3934358392-clip-terminal)">
-
+    
     <g class="terminal-3934358392-matrix">
     <text class="terminal-3934358392-r1" x="0" y="20" textLength="536.8" clip-path="url(#terminal-3934358392-line-0)">Usage:&#160;airflowctl&#160;providers&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-3934358392-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3934358392-line-0)">
 </text><text class="terminal-3934358392-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3934358392-line-1)">
diff --git a/airflow-ctl/docs/images/output_variables.svg b/airflow-ctl/docs/images/output_variables.svg
index 864e7d63630e5..30881a1eb7e0f 100644
--- a/airflow-ctl/docs/images/output_variables.svg
+++ b/airflow-ctl/docs/images/output_variables.svg
@@ -92,9 +92,9 @@
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
-
+        
     <g transform="translate(9, 41)" clip-path="url(#terminal-1648295878-clip-terminal)">
-
+    
     <g class="terminal-1648295878-matrix">
     <text class="terminal-1648295878-r1" x="0" y="20" textLength="536.8" clip-path="url(#terminal-1648295878-line-0)">Usage:&#160;airflowctl&#160;variables&#160;[-h]&#160;COMMAND&#160;...</text><text class="terminal-1648295878-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1648295878-line-0)">
 </text><text class="terminal-1648295878-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1648295878-line-1)">
diff --git a/airflow-ctl/docs/images/output_version.svg b/airflow-ctl/docs/images/output_version.svg
index c4ac023c6a1f5..02c5e5a1bb677 100644
--- a/airflow-ctl/docs/images/output_version.svg
+++ b/airflow-ctl/docs/images/output_version.svg
@@ -62,9 +62,9 @@
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
-
+        
     <g transform="translate(9, 41)" clip-path="url(#terminal-2995541012-clip-terminal)">
-
+    
     <g class="terminal-2995541012-matrix">
     <text class="terminal-2995541012-r1" x="0" y="20" textLength="366" clip-path="url(#terminal-2995541012-line-0)">Usage:&#160;airflowctl&#160;version&#160;[-h]</text><text class="terminal-2995541012-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2995541012-line-0)">
 </text><text class="terminal-2995541012-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2995541012-line-1)">
diff --git a/contributing-docs/08_static_code_checks.rst b/contributing-docs/08_static_code_checks.rst
index 9d6c1b764a030..440339d5f0f10 100644
--- a/contributing-docs/08_static_code_checks.rst
+++ b/contributing-docs/08_static_code_checks.rst
@@ -281,8 +281,7 @@ require Breeze Docker image to be built locally.
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
 | generate-airflowctl-datamodels                            | Generate Datamodels for AirflowCTL                     | *       |
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
-| generate-airflowctl-help-images                           | * Generate SVG from Airflow CTL Commands               | *       |
-|                                                           | * Generate SVG from Airflow CTL Commands               |         |
+| generate-airflowctl-help-images                           | Generate SVG from Airflow CTL Commands                 | *       |
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
 | generate-openapi-spec                                     | Generate the FastAPI API spec                          | *       |
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
diff --git a/scripts/in_container/run_capture_airflowctl_help.py b/scripts/in_container/run_capture_airflowctl_help.py
index 45e60a2b629c5..9d3cf226fb1b5 100644
--- a/scripts/in_container/run_capture_airflowctl_help.py
+++ b/scripts/in_container/run_capture_airflowctl_help.py
@@ -20,6 +20,7 @@
 
 import hashlib
 import os
+import subprocess
 import sys
 from pathlib import Path
 
@@ -59,8 +60,17 @@
 # Get new hashes
 def get_airflowctl_command_hash_dict(commands):
     hash_dict = {}
+    env = os.environ.copy()
+    env["CI"] = "true"  # Set CI environment variable to ensure consistent behavior
+    env["COLUMNS"] = "80"
     for command in commands:
-        help_text = os.popen(f"python {AIRFLOW_CTL_SOURCES_PATH}/airflowctl/__main__.py {command} -h").read()
+        output = subprocess.check_output(
+            [f"python {AIRFLOW_CTL_SOURCES_PATH}/airflowctl/__main__.py {command} -h"],
+            shell=True,
+            text=True,
+            env=env,
+        )
+        help_text = output.strip()
         hash_dict[command if command != "" else "main"] = hashlib.md5(help_text.encode("utf-8")).hexdigest()
     return hash_dict
 
@@ -68,7 +78,7 @@ def get_airflowctl_command_hash_dict(commands):
 def regenerate_help_images_for_all_airflowctl_commands(commands: list[str]) -> int:
     hash_file = AIRFLOWCTL_IMAGES_PATH / "command_hashes.txt"
     os.makedirs(AIRFLOWCTL_IMAGES_PATH, exist_ok=True)
-    console = Console(color_system="standard", record=True)
+    console = Console(color_system="standard", record=True, width=80)
     env = os.environ.copy()
     env["TERM"] = "xterm-256color"
 

From c956455d5aaa05b21da070b0f0df97b40d99dd5b Mon Sep 17 00:00:00 2001
From: Wonseok Yang <deadline.yang@gmail.com>
Date: Mon, 30 Jun 2025 00:00:21 +0900
Subject: [PATCH 292/381] =?UTF-8?q?i18n(Ko):=20Replace=20=EC=97=B0?=
 =?UTF-8?q?=EA=B2=B0=20as=20=EC=BB=A4=EB=84=A5=EC=85=98=20(#52440)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* i18n(Ko): Replace 연결 as 커넥션

* Remove trailing comma in admin.json
---
 .../ui/public/i18n/locales/ko/admin.json      | 46 +++++++++----------
 .../ui/public/i18n/locales/ko/common.json     |  2 +-
 2 files changed, 24 insertions(+), 24 deletions(-)

diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ko/admin.json b/airflow-core/src/airflow/ui/public/i18n/locales/ko/admin.json
index da422c07f742a..f3d960db72002 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/ko/admin.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/ko/admin.json
@@ -12,44 +12,44 @@
     "title": "Airflow 구성"
   },
   "connections": {
-    "add": "연결 추가",
+    "add": "커넥션 추가",
     "columns": {
-      "connectionId": "연결 ID",
-      "connectionType": "연결 유형",
+      "connectionId": "커넥션 ID",
+      "connectionType": "커넥션 유형",
       "host": "호스트",
       "port": "포트"
     },
-    "connection_one": "연결",
-    "connection_other": "연결들",
+    "connection_one": "커넥션",
+    "connection_other": "커넥션들",
     "delete": {
-      "deleteConnection_one": "연결 1개 삭제",
-      "deleteConnection_other": "연결 {{count}}개 삭제",
-      "firstConfirmMessage_one": "다음 연결을 삭제하려고 합니다:",
-      "firstConfirmMessage_other": "다음 연결들을 삭제하려고 합니다:",
-      "title": "연결 삭제"
+      "deleteConnection_one": "커넥션 1개 삭제",
+      "deleteConnection_other": "커넥션 {{count}}개 삭제",
+      "firstConfirmMessage_one": "다음 커넥션을 삭제하려고 합니다:",
+      "firstConfirmMessage_other": "다음 커넥션들을 삭제하려고 합니다:",
+      "title": "커넥션 삭제"
     },
-    "edit": "연결 편집",
+    "edit": "커넥션 편집",
     "form": {
-      "connectionIdRequired": "연결 ID는 필수 항목입니다",
-      "connectionIdRequirement": "연결 ID는 공백만으로 구성될 수 없습니다",
-      "connectionTypeRequired": "연결 유형은 필수 항목입니다",
+      "connectionIdRequired": "커넥션 ID는 필수 항목입니다",
+      "connectionIdRequirement": "커넥션 ID는 공백만으로 구성될 수 없습니다",
+      "connectionTypeRequired": "커넥션 유형은 필수 항목입니다",
       "extraFields": "추가 필드",
       "extraFieldsJson": "추가 필드 JSON",
-      "helperText": "연결 유형이 보이지 않나요? 해당 Airflow Provider 패키지가 설치되어 있는지 확인하세요.",
-      "selectConnectionType": "연결 유형 선택",
+      "helperText": "커넥션 유형이 보이지 않나요? 해당 Airflow Provider 패키지가 설치되어 있는지 확인하세요.",
+      "selectConnectionType": "커넥션 유형 선택",
       "standardFields": "기본 필드"
     },
     "nothingFound": {
-      "description": "환경 변수나 시크릿 매니저를 통해 정의된 연결은 여기에 표시되지 않습니다.",
+      "description": "환경 변수나 시크릿 매니저를 통해 정의된 커넥션은 여기에 표시되지 않습니다.",
       "documentationLink": "자세한 내용은 Airflow 문서를 참고하세요.",
       "learnMore": "이러한 커넥션은 런타임 시점에 해결되며 UI에는 표시되지 않습니다.",
-      "title": "연결을 찾을 수 없습니다."
+      "title": "커넥션을 찾을 수 없습니다."
     },
-    "searchPlaceholder": "연결 검색",
-    "test": "연결 테스트",
-    "testDisabled": "연결 테스트 기능이 비활성화되어 있습니다. 관리자에게 활성화를 요청하세요.",
+    "searchPlaceholder": "커넥션 검색",
+    "test": "커넥션 테스트",
+    "testDisabled": "커넥션 테스트 기능이 비활성화되어 있습니다. 관리자에게 활성화를 요청하세요.",
     "typeMeta": {
-      "error": "연결 유형 메타 정보를 가져오지 못했습니다",
+      "error": "커넥션 유형 메타 정보를 가져오지 못했습니다",
       "standardFields": {
         "description": "설명",
         "host": "호스트",
@@ -68,7 +68,7 @@
       "thirdConfirmMessage": "정말로 계속하시겠습니까?"
     },
     "selected": "선택됨",
-    "tooltip": "선택된 연결들 삭제"
+    "tooltip": "선택된 커넥션들 삭제"
   },
   "formActions": {
     "reset": "초기화",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ko/common.json b/airflow-core/src/airflow/ui/public/i18n/locales/ko/common.json
index 966f9cf53524a..9e56b91799e09 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/ko/common.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/ko/common.json
@@ -1,7 +1,7 @@
 {
   "admin": {
     "Config": "설정",
-    "Connections": "연결들",
+    "Connections": "커넥션들",
     "Plugins": "플러그인들",
     "Pools": "풀들",
     "Providers": "제공자들",

From ba6a97105276b28401730d2937c02e8de4569868 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sun, 29 Jun 2025 17:22:25 +0200
Subject: [PATCH 293/381] Speed-up constraints generation (#52449)

Constraints generation was slow because we run them in a loop and
we tried to run them all on a single machine - trying to utilize
the fact that we only have to build airflow and provider packages
once. But those are pretty fast, comparing to constraint generation
and it's much better to parallelize the constraint jobs and run
them on separatae workers. This will speed up constraint generation
delays that will allow building PROD images and kubernetes checks
faster.
---
 .github/workflows/ci-amd.yml               |  2 +
 .github/workflows/ci-arm.yml               |  4 +-
 .github/workflows/finalize-tests.yml       |  2 +-
 .github/workflows/generate-constraints.yml | 82 +++++++++++-----------
 .github/workflows/prod-image-build.yml     |  2 +-
 5 files changed, 47 insertions(+), 45 deletions(-)

diff --git a/.github/workflows/ci-amd.yml b/.github/workflows/ci-amd.yml
index 5a55b9369b779..e7573035b1a68 100644
--- a/.github/workflows/ci-amd.yml
+++ b/.github/workflows/ci-amd.yml
@@ -274,6 +274,8 @@ jobs:
       runners: ${{ needs.build-info.outputs.amd-runners }}
       platform: "linux/amd64"
       python-versions-list-as-string: ${{ needs.build-info.outputs.python-versions-list-as-string }}
+      python-versions: ${{ needs.build-info.outputs.python-versions }}
+      generate-pypi-constraints: "true"
       # generate no providers constraints only in canary builds - they take quite some time to generate
       # they are not needed for regular builds, they are only needed to update constraints in canaries
       generate-no-providers-constraints: ${{ needs.build-info.outputs.canary-run }}
diff --git a/.github/workflows/ci-arm.yml b/.github/workflows/ci-arm.yml
index bf54881cd1592..21dd5d75205ec 100644
--- a/.github/workflows/ci-arm.yml
+++ b/.github/workflows/ci-arm.yml
@@ -210,7 +210,6 @@ jobs:
       contents: read
       packages: write
       id-token: write
-    if: needs.build-info.outputs.canary-run == 'true'
     with:
       runners: ${{ needs.build-info.outputs.arm-runners }}
       platform: "linux/arm64"
@@ -237,13 +236,14 @@ jobs:
       runners: ${{ needs.build-info.outputs.arm-runners }}
       platform: "linux/arm64"
       python-versions-list-as-string: ${{ needs.build-info.outputs.python-versions-list-as-string }}
+      python-versions: ${{ needs.build-info.outputs.python-versions }}
+      generate-pypi-constraints: "true"
       # generate no providers constraints only in canary builds - they take quite some time to generate
       # they are not needed for regular builds, they are only needed to update constraints in canaries
       generate-no-providers-constraints: ${{ needs.build-info.outputs.canary-run }}
       debug-resources: ${{ needs.build-info.outputs.debug-resources }}
       use-uv: ${{ needs.build-info.outputs.use-uv }}
 
-
   providers:
     name: "provider distributions tests"
     uses: ./.github/workflows/test-providers.yml
diff --git a/.github/workflows/finalize-tests.yml b/.github/workflows/finalize-tests.yml
index fb4b46d9d6256..819220b42a762 100644
--- a/.github/workflows/finalize-tests.yml
+++ b/.github/workflows/finalize-tests.yml
@@ -118,7 +118,7 @@ jobs:
       - name: "Download constraints from the constraints generated by build CI image"
         uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093  # v4.3.0
         with:
-          name: constraints
+          pattern: constraints-*
           path: ./files
       - name: "Diff in constraints for Python: ${{ inputs.python-versions-list-as-string }}"
         run: ./scripts/ci/constraints/ci_diff_constraints.sh
diff --git a/.github/workflows/generate-constraints.yml b/.github/workflows/generate-constraints.yml
index e6548f3240ed8..565700a66ea6a 100644
--- a/.github/workflows/generate-constraints.yml
+++ b/.github/workflows/generate-constraints.yml
@@ -32,10 +32,18 @@ on:  # yamllint disable-line rule:truthy
         description: "Stringified array of all Python versions to test - separated by spaces."
         required: true
         type: string
+      python-versions:
+        description: "JSON-formatted array of Python versions to generate constraints for"
+        required: true
+        type: string
       generate-no-providers-constraints:
         description: "Whether to generate constraints without providers (true/false)"
         required: true
         type: string
+      generate-pypi-constraints:
+        description: "Whether to generate PyPI constraints (true/false)"
+        required: true
+        type: string
       debug-resources:
         description: "Whether to run in debug mode (true/false)"
         required: true
@@ -45,19 +53,22 @@ on:  # yamllint disable-line rule:truthy
         required: true
         type: string
 jobs:
-  generate-constraints:
+  generate-constraints-matrix:
     permissions:
       contents: read
     timeout-minutes: 70
-    name: Generate constraints ${{ inputs.python-versions-list-as-string }}
+    name: Generate constraints for ${{ inputs.python-versions-list-as-string }}
     runs-on: ${{ fromJSON(inputs.runners) }}
+    strategy:
+      matrix:
+        python-version: ${{ fromJson(inputs.python-versions) }}
     env:
       DEBUG_RESOURCES: ${{ inputs.debug-resources }}
       GITHUB_REPOSITORY: ${{ github.repository }}
       GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
       GITHUB_USERNAME: ${{ github.actor }}
       INCLUDE_SUCCESS_OUTPUTS: "true"
-      PYTHON_VERSIONS: ${{ inputs.python-versions-list-as-string }}
+      PYTHON_VERSION: ${{ matrix.python-version }}
       VERBOSE: "true"
     steps:
       - name: "Cleanup repo"
@@ -67,72 +78,61 @@ jobs:
         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
-      - name: "Prepare and cleanup runner"
-        run: ./scripts/ci/prepare_and_cleanup_runner.sh
-        shell: bash
-      - name: "Install Breeze"
-        uses: ./.github/actions/breeze
-        with:
-          use-uv: ${{ inputs.use-uv }}
-        id: breeze
-      - name: "Prepare all CI images: ${{ inputs.python-versions-list-as-string}}"
-        uses: ./.github/actions/prepare_all_ci_images
+      - name: "Prepare breeze & CI image: ${{ matrix.python-version }}"
+        uses: ./.github/actions/prepare_breeze_and_image
         with:
           platform: ${{ inputs.platform }}
-          python-versions-list-as-string: ${{ inputs.python-versions-list-as-string }}
-          docker-volume-location: ""  # TODO(jscheffl): Understand why it fails here and fix it
-      - name: "Verify all CI images ${{ inputs.python-versions-list-as-string }}"
-        run: breeze ci-image verify --run-in-parallel
+          python: ${{ matrix.python-version }}
+          use-uv: ${{ inputs.use-uv }}
       - name: "Source constraints"
         shell: bash
         run: >
-          breeze release-management generate-constraints --run-in-parallel
+          breeze release-management generate-constraints
           --airflow-constraints-mode constraints-source-providers --answer yes
+          --python "${PYTHON_VERSION}"
       - name: "No providers constraints"
         shell: bash
         timeout-minutes: 25
         run: >
-          breeze release-management generate-constraints --run-in-parallel
-          --airflow-constraints-mode constraints-no-providers --answer yes --parallelism 3
-        # The no providers constraints are only needed when we want to update constraints (in canary builds)
-        # They slow down the start of PROD image builds so we want to only run them when needed.
+          breeze release-management generate-constraints
+          --airflow-constraints-mode constraints-no-providers --answer yes
+          --python "${PYTHON_VERSION}"
         if: inputs.generate-no-providers-constraints == 'true'
       - name: "Prepare updated provider distributions"
-        # In case of provider distributions which are not yet released, we build them from sources
         shell: bash
         run: >
-          breeze release-management prepare-provider-distributions --include-not-ready-providers
-          --distribution-format wheel
+          breeze release-management prepare-provider-distributions
+          --include-not-ready-providers --distribution-format wheel
+        if: inputs.generate-pypi-constraints == 'true'
       - name: "Prepare airflow distributions"
         shell: bash
         run: >
           breeze release-management prepare-airflow-distributions --distribution-format wheel
+        if: inputs.generate-pypi-constraints == 'true'
       - name: "Prepare task-sdk distribution"
         shell: bash
         run: >
           breeze release-management prepare-task-sdk-distributions --distribution-format wheel
+        if: inputs.generate-pypi-constraints == 'true'
       - name: "PyPI constraints"
         shell: bash
         timeout-minutes: 25
         run: |
-          for PYTHON in $PYTHON_VERSIONS; do
-            breeze release-management generate-constraints --airflow-constraints-mode constraints \
-            --answer yes --python "${PYTHON}"
-          done
-      - name: "Dependency upgrade summary"
-        shell: bash
-        env:
-          PYTHON_VERSIONS: ${{ env.PYTHON_VERSIONS }}
-        run: |
-          for PYTHON_VERSION in $PYTHON_VERSIONS; do
-            echo "Summarizing Python $PYTHON_VERSION"
-            cat "files/constraints-${PYTHON_VERSION}"/*.md >> $GITHUB_STEP_SUMMARY || true
-            df -H
-          done
+          breeze release-management generate-constraints --airflow-constraints-mode constraints \
+            --answer yes --python "${PYTHON_VERSION}"
+        if: inputs.generate-pypi-constraints == 'true'
       - name: "Upload constraint artifacts"
         uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02  # v4.6.2
         with:
-          name: constraints
-          path: ./files/constraints-*/constraints-*.txt
+          name: constraints-${{ matrix.python-version }}
+          path: ./files/constraints-${{ matrix.python-version }}/constraints-*.txt
           retention-days: 7
           if-no-files-found: error
+      - name: "Dependency upgrade summary"
+        shell: bash
+        env:
+          PYTHON_VERSION: ${{ matrix.python-version }}
+        run: |
+          echo "Summarizing Python $PYTHON_VERSION"
+          cat "files/constraints-${PYTHON_VERSION}"/*.md >> $GITHUB_STEP_SUMMARY || true
+          df -H
diff --git a/.github/workflows/prod-image-build.yml b/.github/workflows/prod-image-build.yml
index 2ba47bf8c4990..4819ee7be1470 100644
--- a/.github/workflows/prod-image-build.yml
+++ b/.github/workflows/prod-image-build.yml
@@ -233,7 +233,7 @@ jobs:
       - name: "Download constraints"
         uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093  # v4.3.0
         with:
-          name: constraints
+          pattern: constraints-*
           path: ./docker-context-files
       - name: "Show constraints"
         run: |

From bcfa26d4ce6a28d45e487c713dee1ef44155e73e Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sun, 29 Jun 2025 17:22:39 +0200
Subject: [PATCH 294/381] Wire-in dependency check script in CI "finalize" job
 (#52450)

After constraints are committed, we should generate and print
summary of dependencies that could be upgraded.
---
 .github/workflows/finalize-tests.yml | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/.github/workflows/finalize-tests.yml b/.github/workflows/finalize-tests.yml
index 819220b42a762..2e8f791b789bd 100644
--- a/.github/workflows/finalize-tests.yml
+++ b/.github/workflows/finalize-tests.yml
@@ -132,6 +132,32 @@ jobs:
         run:
           git push
 
+  dependency-upgrade-summary:
+    runs-on: ${{ fromJSON(inputs.runners) }}
+    needs: [update-constraints]
+    if: inputs.upgrade-to-newer-dependencies == 'true' && inputs.platform == 'linux/amd64'
+    name: "Dependency upgrade summary"
+    steps:
+      - name: "Cleanup repo"
+        shell: bash
+        run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
+      - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
+        with:
+          persist-credentials: false
+      - name: "Prepare breeze & CI image: ${{ matrix.python-version }}"
+        uses: ./.github/actions/prepare_breeze_and_image
+        with:
+          platform: ${{ inputs.platform }}
+          python: ${{ inputs.default-python-version }}
+          use-uv: ${{ inputs.use-uv }}
+      - name: "Dependency upgrade summary"
+        shell: bash
+        run: >
+          breeze run --tty enabled uv run /opt/airflow/dev/constraints-updated-version-check.py --explain-why
+        env:
+          PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
+
   push-buildx-cache-to-github-registry:
     name: Push Regular Image Cache ${{ inputs.platform }}
     needs: [update-constraints]

From ca264ba696bdf5caab8f4ceaf2377686b643bbeb Mon Sep 17 00:00:00 2001
From: Jens Scheffler <95105677+jscheffl@users.noreply.github.com>
Date: Sun, 29 Jun 2025 17:29:46 +0200
Subject: [PATCH 295/381] Clean some leftovers of Python 3.9 removal - All the
 rest (#52432)

* Clean some leftovers of Python 3.9 removal - All the rest

* Fix static checks
---
 Dockerfile.ci                                 |   2 +-
 chart/pyproject.toml                          |   1 -
 clients/python/pyproject.toml                 |   3 +-
 clients/python/test_python_client.py          |   2 +-
 constraints/README.md                         |   6 +-
 .../03_contributors_quick_start.rst           |  24 +--
 contributing-docs/05_pull_requests.rst        |   2 +-
 contributing-docs/07_local_virtualenv.rst     |  14 +-
 contributing-docs/08_static_code_checks.rst   |   2 +-
 .../testing/docker_compose_tests.rst          |   8 +-
 contributing-docs/testing/k8s_tests.rst       |  86 +++++------
 contributing-docs/testing/unit_tests.rst      |  10 +-
 dev/README_RELEASE_AIRFLOW.md                 |   6 +-
 dev/README_RELEASE_PROVIDERS.md               |   2 +-
 dev/breeze/README.md                          |   2 +-
 dev/breeze/doc/01_installation.rst            |   6 +-
 dev/breeze/doc/03_developer_tasks.rst         |  10 +-
 dev/breeze/doc/04_troubleshooting.rst         |   8 +-
 dev/breeze/doc/05_test_commands.rst           |   6 +-
 dev/breeze/doc/06_managing_docker_images.rst  |   8 +-
 dev/breeze/doc/10_advanced_breeze_topics.rst  |   2 +-
 ...002-implement-standalone-python-command.md |   2 +-
 dev/breeze/doc/ci/02_images.md                | 112 +++++++-------
 dev/breeze/doc/ci/04_selective_checks.md      | 146 +++++++++---------
 dev/breeze/doc/ci/07_running_ci_locally.md    |   4 +-
 dev/breeze/pyproject.toml                     |   3 +-
 .../commands/ci_image_commands.py             |  13 +-
 dev/check_files.py                            |   4 +-
 dev/provider_db_inventory.py                  |   2 +-
 dev/refresh_images.sh                         |   2 +-
 docker-stack-docs/build-arg-ref.rst           | 100 ++++++------
 docker-stack-docs/build.rst                   |  34 ++--
 .../customizing/add-build-essential-custom.sh |   2 +-
 .../customizing/custom-sources.sh             |   2 +-
 .../github-different-repository.sh            |   2 +-
 .../customizing/github-main.sh                |   2 +-
 .../customizing/github-v2-2-test.sh           |   2 +-
 .../customizing/pypi-dev-runtime-deps.sh      |   2 +-
 .../customizing/pypi-extras-and-deps.sh       |   2 +-
 .../customizing/pypi-selected-version.sh      |   2 +-
 .../restricted/restricted_environments.sh     |  10 +-
 docker-stack-docs/entrypoint.rst              |  14 +-
 docker-stack-docs/pyproject.toml              |   3 +-
 docker-tests/pyproject.toml                   |   2 +-
 docker-tests/tests/docker_tests/constants.py  |   2 +-
 .../tests/docker_tests/docker_utils.py        |   4 +-
 helm-tests/pyproject.toml                     |   2 +-
 kubernetes-tests/pyproject.toml               |   2 +-
 .../test_kubernetes_pod_operator.py           |   2 +-
 providers-summary-docs/pyproject.toml         |   3 +-
 providers/airbyte/README.rst                  |   2 +-
 providers/alibaba/README.rst                  |   2 +-
 providers/amazon/docs/executors/general.rst   |   6 +-
 providers/edge3/docs/install_on_windows.rst   |   2 +-
 scripts/ci/airflow_version_check.py           |   2 +-
 scripts/ci/docker-compose/devcontainer.env    |   4 +-
 scripts/ci/docker-compose/devcontainer.yml    |   2 +-
 .../ci/pre_commit/check_min_python_version.py |   2 +-
 .../update_providers_dependencies.py          |   2 +-
 scripts/docker/entrypoint_ci.sh               |   2 +-
 .../install_development_dependencies.py       |   2 +-
 .../in_container/run_generate_constraints.py  |   2 +-
 62 files changed, 354 insertions(+), 368 deletions(-)

diff --git a/Dockerfile.ci b/Dockerfile.ci
index 743ff778a5f37..7f4955df13e54 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -840,7 +840,7 @@ chmod 1777 /tmp
 
 AIRFLOW_SOURCES=$(cd "${IN_CONTAINER_DIR}/../.." || exit 1; pwd)
 
-PYTHON_MAJOR_MINOR_VERSION=${PYTHON_MAJOR_MINOR_VERSION:=3.9}
+PYTHON_MAJOR_MINOR_VERSION=${PYTHON_MAJOR_MINOR_VERSION:=3.10}
 
 export AIRFLOW_HOME=${AIRFLOW_HOME:=${HOME}}
 
diff --git a/chart/pyproject.toml b/chart/pyproject.toml
index 2c559d1997dc8..5daf4f3a7699b 100644
--- a/chart/pyproject.toml
+++ b/chart/pyproject.toml
@@ -40,7 +40,6 @@ classifiers = [
     "Intended Audience :: Developers",
     "Intended Audience :: System Administrators",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
diff --git a/clients/python/pyproject.toml b/clients/python/pyproject.toml
index 2cfdeeaad749a..b7f01bb004de6 100644
--- a/clients/python/pyproject.toml
+++ b/clients/python/pyproject.toml
@@ -42,7 +42,6 @@ classifiers = [
     "Intended Audience :: Developers",
     "Intended Audience :: System Administrators",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
@@ -73,7 +72,7 @@ run-coverage = "pytest test"
 run = "run-coverage --no-cov"
 
 [[tool.hatch.envs.test.matrix]]
-python = ["3.9", "3.10", "3.11"]
+python = ["3.10", "3.11"]
 
 [tool.hatch.version]
 path = "./version.txt"
diff --git a/clients/python/test_python_client.py b/clients/python/test_python_client.py
index bf04d68500ea6..4000686f88229 100644
--- a/clients/python/test_python_client.py
+++ b/clients/python/test_python_client.py
@@ -17,7 +17,7 @@
 #
 # PEP 723 compliant inline script metadata (not yet widely supported)
 # /// script
-# requires-python = ">=3.9"
+# requires-python = ">=3.10"
 # dependencies = [
 #   "apache-airflow-client",
 #   "rich",
diff --git a/constraints/README.md b/constraints/README.md
index 97c03dab0c400..758048a900690 100644
--- a/constraints/README.md
+++ b/constraints/README.md
@@ -29,12 +29,12 @@ This allows you to iterate on dependencies without having to run `--upgrade-to-n
 Typical workflow in this case is:
 
 * download and copy the constraint file to the folder (for example via
-[The GitHub Raw Link](https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-3.9.txt))
+[The GitHub Raw Link](https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-3.10.txt))
 * modify the constraint file in "constraints" folder
 * build the image using this command
 
 ```bash
-breeze ci-image build --python 3.9 --airflow-constraints-location constraints/constraints-3.9.txt
+breeze ci-image build --python 3.10 --airflow-constraints-location constraints/constraints-3.10.txt
 ```
 
 You can continue iterating and updating the constraint file (and rebuilding the image)
@@ -46,7 +46,7 @@ pip freeze | sort | \
     grep -v "apache_airflow" | \
     grep -v "apache-airflow==" | \
     grep -v "@" | \
-    grep -v "/opt/airflow" > /opt/airflow/constraints/constraints-3.9.txt
+    grep -v "/opt/airflow" > /opt/airflow/constraints/constraints-3.10.txt
 ```
 
 If you are working with others on updating the dependencies, you can also commit the constraint
diff --git a/contributing-docs/03_contributors_quick_start.rst b/contributing-docs/03_contributors_quick_start.rst
index c10d4d80ab63c..ccc9a3ecac8b1 100644
--- a/contributing-docs/03_contributors_quick_start.rst
+++ b/contributing-docs/03_contributors_quick_start.rst
@@ -255,8 +255,8 @@ To avoid burden on our CI infrastructure and to save time, Pre-commit hooks can
     We have recently started to recommend ``uv`` for our local development.
 
 .. note::
-    Remember to have global python set to Python >= 3.9 - Python 3.8 is end-of-life already and we've
-    started to use Python 3.9+ features in Airflow and accompanying scripts.
+    Remember to have global python set to Python >= 3.10 - Python 3.10 is end-of-life already and we've
+    started to use Python 3.10+ features in Airflow and accompanying scripts.
 
 Installing pre-commit is best done with ``uv`` (recommended) or ``pipx``.
 
@@ -433,7 +433,7 @@ see in CI in your local environment.
 
 .. code-block:: bash
 
-  breeze --python 3.9 --backend postgres
+  breeze --python 3.10 --backend postgres
 
 .. note::
    If you encounter an error like "docker.credentials.errors.InitializationError:
@@ -490,7 +490,7 @@ Using Breeze
 ------------
 
 1. Starting the Breeze environment using ``breeze start-airflow`` starts the Breeze environment with last configuration run(
-   In this case Python version and backend are picked up from last execution ``breeze --python 3.9 --backend postgres``)
+   In this case Python version and backend are picked up from last execution ``breeze --python 3.10 --backend postgres``)
    It also automatically starts the API server (FastAPI api and UI), triggerer, dag processor and scheduler. It drops you in tmux with triggerer to the right, and
    Scheduler, API server (FastAPI api and UI), DAG processor from left to right at the bottom. Use ``[Ctrl + B] and Arrow keys`` to navigate.
 
@@ -501,9 +501,9 @@ Using Breeze
       Use CI image.
 
    Branch name:            main
-   Docker image:           ghcr.io/apache/airflow/main/ci/python3.9:latest
+   Docker image:           ghcr.io/apache/airflow/main/ci/python3.10:latest
    Airflow source version: 2.4.0.dev0
-   Python version:         3.9
+   Python version:         3.10
    Backend:                mysql 5.7
 
    * Port forwarding:
@@ -540,7 +540,7 @@ Using Breeze
 
   .. code-block:: bash
 
-    breeze --python 3.9 --backend postgres
+    breeze --python 3.10 --backend postgres
 
   2. Open tmux
 
@@ -614,7 +614,7 @@ If ``breeze`` was started with ``breeze start-airflow``, this command will stop
   root@f3619b74c59a:/opt/airflow# stop_airflow
   breeze down
 
-If ``breeze`` was started with ``breeze --python 3.9 --backend postgres`` (or similar):
+If ``breeze`` was started with ``breeze --python 3.10 --backend postgres`` (or similar):
 
 .. code-block:: bash
 
@@ -674,7 +674,7 @@ All Tests are inside ./tests directory.
 
    root@63528318c8b1:/opt/airflow# pytest tests/utils/test_dates.py
    ============================================================= test session starts ==============================================================
-   platform linux -- Python 3.9.20, pytest-8.3.3, pluggy-1.5.0 -- /usr/local/bin/python
+   platform linux -- Python 3.10.20, pytest-8.3.3, pluggy-1.5.0 -- /usr/local/bin/python
    cachedir: .pytest_cache
    rootdir: /opt/airflow
    configfile: pyproject.toml
@@ -694,20 +694,20 @@ All Tests are inside ./tests directory.
 
 .. code-block:: bash
 
-   breeze --backend postgres --postgres-version 15 --python 3.9 --db-reset testing tests --test-type All
+   breeze --backend postgres --postgres-version 15 --python 3.10 --db-reset testing tests --test-type All
 
 - Running specific type of test
 
   .. code-block:: bash
 
-    breeze --backend postgres --postgres-version 15 --python 3.9 --db-reset testing tests --test-type Core
+    breeze --backend postgres --postgres-version 15 --python 3.10 --db-reset testing tests --test-type Core
 
 
 - Running Integration test for specific test type
 
   .. code-block:: bash
 
-   breeze --backend postgres --postgres-version 15 --python 3.9 --db-reset testing tests --test-type All --integration mongo
+   breeze --backend postgres --postgres-version 15 --python 3.10 --db-reset testing tests --test-type All --integration mongo
 
 - For more information on Testing visit |09_testing.rst|
 
diff --git a/contributing-docs/05_pull_requests.rst b/contributing-docs/05_pull_requests.rst
index d6e360721d275..5a7a4d96e13b4 100644
--- a/contributing-docs/05_pull_requests.rst
+++ b/contributing-docs/05_pull_requests.rst
@@ -92,7 +92,7 @@ these guidelines:
     you can push your code to PR and see results of the tests in the CI.
 
 -   You can use any supported python version to run the tests, but the best is to check
-    if it works for the oldest supported version (Python 3.9 currently). In rare cases
+    if it works for the oldest supported version (Python 3.10 currently). In rare cases
     tests might fail with the oldest version when you use features that are available in newer Python
     versions. For that purpose we have ``airflow.compat`` package where we keep back-ported
     useful features from newer versions.
diff --git a/contributing-docs/07_local_virtualenv.rst b/contributing-docs/07_local_virtualenv.rst
index 501e23ac9556d..adb97fe99fa9c 100644
--- a/contributing-docs/07_local_virtualenv.rst
+++ b/contributing-docs/07_local_virtualenv.rst
@@ -34,7 +34,7 @@ Required Software Packages
 Use system-level package managers like yum, apt-get for Linux, or
 Homebrew for macOS to install required software packages:
 
-* Python (One of: 3.9, 3.10, 3.11, 3.12)
+* Python (One of: 3.10, 3.11, 3.12)
 * MySQL 5.7+
 * libxml
 * helm (only for helm chart tests)
@@ -100,11 +100,11 @@ Installing Python versions
 
    This step can be skipped - ``uv`` will automatically install the Python version you need when you create a virtualenv.
 
-You can install Python versions using ``uv python install`` command. For example, to install Python 3.9.7, you can run:
+You can install Python versions using ``uv python install`` command. For example, to install Python 3.10.7, you can run:
 
 .. code:: bash
 
-    uv python install 3.9.7
+    uv python install 3.10.7
 
 This is optional step - ``uv`` will automatically install the Python version you need when you create a virtualenv.
 
@@ -124,7 +124,7 @@ with a specific Python version by running:
 
 .. code:: bash
 
-    uv venv --python 3.9.7
+    uv venv --python 3.10.7
 
 You can also create a venv with a different venv directory name by running:
 
@@ -275,12 +275,12 @@ to avoid "works-for-me" syndrome, where you use different version of dependencie
 that are used in main, CI tests and by other contributors.
 
 There are different constraint files for different python versions. For example this command will install
-all basic devel requirements and requirements of google provider as last successfully tested for Python 3.9:
+all basic devel requirements and requirements of google provider as last successfully tested for Python 3.10:
 
 .. code:: bash
 
     uv pip install -e ".[devel,google]" \
-      --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-source-providers-3.9.txt"
+      --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-source-providers-3.10.txt"
 
 
 In the future we will utilise ``uv.lock`` to manage dependencies and constraints, but for the moment we do not
@@ -305,7 +305,7 @@ and install to latest supported ones by pure Airflow core.
 .. code:: bash
 
     uv pip install -e ".[devel]" \
-      --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-no-providers-3.9.txt"
+      --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-no-providers-3.10.txt"
 
 These are examples of the development options available with the local virtualenv in your IDE:
 
diff --git a/contributing-docs/08_static_code_checks.rst b/contributing-docs/08_static_code_checks.rst
index 440339d5f0f10..7f0fb6bc1c90f 100644
--- a/contributing-docs/08_static_code_checks.rst
+++ b/contributing-docs/08_static_code_checks.rst
@@ -40,7 +40,7 @@ use. So, you can be sure your modifications will also work for CI if they pass
 pre-commit hooks.
 
 We have integrated the fantastic `pre-commit <https://pre-commit.com>`__ framework
-in our development workflow. To install and use it, you need at least Python 3.9 locally.
+in our development workflow. To install and use it, you need at least Python 3.10 locally.
 
 Installing pre-commit hooks
 ---------------------------
diff --git a/contributing-docs/testing/docker_compose_tests.rst b/contributing-docs/testing/docker_compose_tests.rst
index 603c4cccffc3d..0a8bc1e5a1f80 100644
--- a/contributing-docs/testing/docker_compose_tests.rst
+++ b/contributing-docs/testing/docker_compose_tests.rst
@@ -48,7 +48,7 @@ Running complete test with breeze:
 
 .. code-block:: bash
 
-    breeze prod-image build --python 3.9
+    breeze prod-image build --python 3.10
     breeze testing docker-compose-tests
 
 In case the test fails, it will dump the logs from the running containers to the console and it
@@ -65,8 +65,8 @@ to see the output of the test as it happens (it can be also set via
 The test can be also run manually with ``pytest docker_tests/test_docker_compose_quick_start.py``
 command, provided that you have a local Airflow venv with ``dev`` extra set and the
 ``DOCKER_IMAGE`` environment variable is set to the image you want to test. The variable defaults
-to ``ghcr.io/apache/airflow/main/prod/python3.9:latest`` which is built by default
-when you run ``breeze prod-image build --python 3.9``. also the switches ``--skip-docker-compose-deletion``
+to ``ghcr.io/apache/airflow/main/prod/python3.10:latest`` which is built by default
+when you run ``breeze prod-image build --python 3.10``. also the switches ``--skip-docker-compose-deletion``
 and ``--wait-for-containers-timeout`` can only be passed via environment variables.
 
 If you want to debug the deployment using ``docker compose`` commands after ``SKIP_DOCKER_COMPOSE_DELETION``
@@ -87,7 +87,7 @@ the prod image build command above.
 
 .. code-block:: bash
 
-    export AIRFLOW_IMAGE_NAME=ghcr.io/apache/airflow/main/prod/python3.9:latest
+    export AIRFLOW_IMAGE_NAME=ghcr.io/apache/airflow/main/prod/python3.10:latest
 
 and follow the instructions in the
 `Running Airflow in Docker <https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html>`_
diff --git a/contributing-docs/testing/k8s_tests.rst b/contributing-docs/testing/k8s_tests.rst
index 49fb8e83bd44d..3910532cf494c 100644
--- a/contributing-docs/testing/k8s_tests.rst
+++ b/contributing-docs/testing/k8s_tests.rst
@@ -47,7 +47,7 @@ per each combination of Python and Kubernetes version. This is used during CI wh
 tests against those different clusters - even in parallel.
 
 The cluster name follows the pattern ``airflow-python-X.Y-vA.B.C`` where X.Y is a major/minor Python version
-and A.B.C is Kubernetes version. Example cluster name:  ``airflow-python-3.9-v1.24.0``
+and A.B.C is Kubernetes version. Example cluster name:  ``airflow-python-3.10-v1.24.0``
 
 Most of the commands can be executed in parallel for multiple images/clusters by adding ``--run-in-parallel``
 to create clusters or deploy airflow. Similarly checking for status, dumping logs and deleting clusters
@@ -234,7 +234,7 @@ Should result in KinD creating the K8S cluster.
 
 .. code-block:: text
 
-    Config created in /Users/jarek/IdeaProjects/airflow/.build/.k8s-clusters/airflow-python-3.9-v1.24.2/.kindconfig.yaml:
+    Config created in /Users/jarek/IdeaProjects/airflow/.build/.k8s-clusters/airflow-python-3.10-v1.24.2/.kindconfig.yaml:
 
     kind: Cluster
     apiVersion: kind.x-k8s.io/v1alpha4
@@ -251,7 +251,7 @@ Should result in KinD creating the K8S cluster.
             listenAddress: "127.0.0.1"
             protocol: TCP
 
-    Creating cluster "airflow-python-3.9-v1.24.2" ...
+    Creating cluster "airflow-python-3.10-v1.24.2" ...
      ✓ Ensuring node image (kindest/node:v1.24.2) 🖼
      ✓ Preparing nodes 📦 📦
      ✓ Writing configuration 📜
@@ -259,10 +259,10 @@ Should result in KinD creating the K8S cluster.
      ✓ Installing CNI 🔌
      ✓ Installing StorageClass 💾
      ✓ Joining worker nodes 🚜
-    Set kubectl context to "kind-airflow-python-3.9-v1.24.2"
+    Set kubectl context to "kind-airflow-python-3.10-v1.24.2"
     You can now use your cluster with:
 
-    kubectl cluster-info --context kind-airflow-python-3.9-v1.24.2
+    kubectl cluster-info --context kind-airflow-python-3.10-v1.24.2
 
     Not sure what to do next? 😅  Check out https://kind.sigs.k8s.io/docs/user/quick-start/
 
@@ -270,9 +270,9 @@ Should result in KinD creating the K8S cluster.
     Connecting to localhost:18150. Num try: 1
     Error when connecting to localhost:18150 : ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
 
-    Airflow webserver is not available at port 18150. Run `breeze k8s deploy-airflow --python 3.9 --kubernetes-version v1.24.2` to (re)deploy airflow
+    Airflow webserver is not available at port 18150. Run `breeze k8s deploy-airflow --python 3.10 --kubernetes-version v1.24.2` to (re)deploy airflow
 
-    KinD cluster airflow-python-3.9-v1.24.2 created!
+    KinD cluster airflow-python-3.10-v1.24.2 created!
 
     NEXT STEP: You might now configure your cluster by:
 
@@ -287,20 +287,20 @@ Should result in KinD creating the K8S cluster.
 
 .. code-block:: text
 
-    Configuring airflow-python-3.9-v1.24.2 to be ready for Airflow deployment
-    Deleting K8S namespaces for kind-airflow-python-3.9-v1.24.2
+    Configuring airflow-python-3.10-v1.24.2 to be ready for Airflow deployment
+    Deleting K8S namespaces for kind-airflow-python-3.10-v1.24.2
     Error from server (NotFound): namespaces "airflow" not found
     Error from server (NotFound): namespaces "test-namespace" not found
     Creating namespaces
     namespace/airflow created
     namespace/test-namespace created
-    Created K8S namespaces for cluster kind-airflow-python-3.9-v1.24.2
+    Created K8S namespaces for cluster kind-airflow-python-3.10-v1.24.2
 
-    Deploying test resources for cluster kind-airflow-python-3.9-v1.24.2
+    Deploying test resources for cluster kind-airflow-python-3.10-v1.24.2
     persistentvolume/test-volume created
     persistentvolumeclaim/test-volume created
     service/airflow-webserver-node-port created
-    Deployed test resources for cluster kind-airflow-python-3.9-v1.24.2
+    Deployed test resources for cluster kind-airflow-python-3.10-v1.24.2
 
 
     NEXT STEP: You might now build your k8s image by:
@@ -318,45 +318,45 @@ Should show the status of current KinD cluster.
 .. code-block:: text
 
     ========================================================================================================================
-    Cluster: airflow-python-3.9-v1.24.2
+    Cluster: airflow-python-3.10-v1.24.2
 
-        * KUBECONFIG=/Users/jarek/IdeaProjects/airflow/.build/.k8s-clusters/airflow-python-3.9-v1.24.2/.kubeconfig
-        * KINDCONFIG=/Users/jarek/IdeaProjects/airflow/.build/.k8s-clusters/airflow-python-3.9-v1.24.2/.kindconfig.yaml
+        * KUBECONFIG=/Users/jarek/IdeaProjects/airflow/.build/.k8s-clusters/airflow-python-3.10-v1.24.2/.kubeconfig
+        * KINDCONFIG=/Users/jarek/IdeaProjects/airflow/.build/.k8s-clusters/airflow-python-3.10-v1.24.2/.kindconfig.yaml
 
-    Cluster info: airflow-python-3.9-v1.24.2
+    Cluster info: airflow-python-3.10-v1.24.2
 
     Kubernetes control plane is running at https://127.0.0.1:48366
     CoreDNS is running at https://127.0.0.1:48366/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
 
     To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
 
-    Storage class for airflow-python-3.9-v1.24.2
+    Storage class for airflow-python-3.10-v1.24.2
 
     NAME                 PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
     standard (default)   rancher.io/local-path   Delete          WaitForFirstConsumer   false                  83s
 
-    Running pods for airflow-python-3.9-v1.24.2
+    Running pods for airflow-python-3.10-v1.24.2
 
     NAME                                                               READY   STATUS    RESTARTS   AGE
     coredns-6d4b75cb6d-rwp9d                                           1/1     Running   0          71s
     coredns-6d4b75cb6d-vqnrc                                           1/1     Running   0          71s
-    etcd-airflow-python-3.9-v1.24.2-control-plane                      1/1     Running   0          84s
+    etcd-airflow-python-3.10-v1.24.2-control-plane                     1/1     Running   0          84s
     kindnet-ckc8l                                                      1/1     Running   0          69s
     kindnet-qqt8k                                                      1/1     Running   0          71s
-    kube-apiserver-airflow-python-3.9-v1.24.2-control-plane            1/1     Running   0          84s
-    kube-controller-manager-airflow-python-3.9-v1.24.2-control-plane   1/1     Running   0          84s
+    kube-apiserver-airflow-python-3.10-v1.24.2-control-plane           1/1     Running   0          84s
+    kube-controller-manager-airflow-python-3.10-v1.24.2-control-plane  1/1     Running   0          84s
     kube-proxy-6g7hn                                                   1/1     Running   0          69s
     kube-proxy-dwfvp                                                   1/1     Running   0          71s
-    kube-scheduler-airflow-python-3.9-v1.24.2-control-plane            1/1     Running   0          84s
+    kube-scheduler-airflow-python-3.10-v1.24.2-control-plane            1/1     Running   0          84s
 
     KinD Cluster API server URL: http://localhost:48366
     Connecting to localhost:18150. Num try: 1
     Error when connecting to localhost:18150 : ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
 
-    Airflow webserver is not available at port 18150. Run `breeze k8s deploy-airflow --python 3.9 --kubernetes-version v1.24.2` to (re)deploy airflow
+    Airflow webserver is not available at port 18150. Run `breeze k8s deploy-airflow --python 3.10 --kubernetes-version v1.24.2` to (re)deploy airflow
 
 
-    Cluster healthy: airflow-python-3.9-v1.24.2
+    Cluster healthy: airflow-python-3.10-v1.24.2
 
 5. Build the image base on PROD Airflow image. You need to build the PROD image first (the command will
    guide you if you did not) either by running the build separately or passing ``--rebuild-base-image``
@@ -374,15 +374,15 @@ Should show the status of current KinD cluster.
 
 .. code-block:: text
 
-    Building the K8S image for Python 3.9 using Airflow base image: ghcr.io/apache/airflow/main/prod/python3.9:latest
+    Building the K8S image for Python 3.10 using Airflow base image: ghcr.io/apache/airflow/main/prod/python3.10:latest
 
     [+] Building 0.1s (8/8) FINISHED
      => [internal] load build definition from Dockerfile                                                                                                                                                                                                                                           0.0s
      => => transferring dockerfile: 301B                                                                                                                                                                                                                                                           0.0s
      => [internal] load .dockerignore                                                                                                                                                                                                                                                              0.0s
      => => transferring context: 35B                                                                                                                                                                                                                                                               0.0s
-     => [internal] load metadata for ghcr.io/apache/airflow/main/prod/python3.9:latest                                                                                                                                                                                                             0.0s
-     => [1/3] FROM ghcr.io/apache/airflow/main/prod/python3.9:latest                                                                                                                                                                                                                               0.0s
+     => [internal] load metadata for ghcr.io/apache/airflow/main/prod/python3.10:latest                                                                                                                                                                                                             0.0s
+     => [1/3] FROM ghcr.io/apache/airflow/main/prod/python3.10:latest                                                                                                                                                                                                                               0.0s
      => [internal] load build context                                                                                                                                                                                                                                                              0.0s
      => => transferring context: 3.00kB                                                                                                                                                                                                                                                            0.0s
      => CACHED [2/3] COPY airflow/example_dags/ /opt/airflow/dags/                                                                                                                                                                                                                                 0.0s
@@ -390,7 +390,7 @@ Should show the status of current KinD cluster.
      => exporting to image                                                                                                                                                                                                                                                                         0.0s
      => => exporting layers                                                                                                                                                                                                                                                                        0.0s
      => => writing image sha256:c0bdd363c549c3b0731b8e8ce34153d081f239ee2b582355b7b3ffd5394c40bb                                                                                                                                                                                                   0.0s
-     => => naming to ghcr.io/apache/airflow/main/prod/python3.9-kubernetes:latest
+     => => naming to ghcr.io/apache/airflow/main/prod/python3.10-kubernetes:latest
 
     NEXT STEP: You might now upload your k8s image by:
 
@@ -410,9 +410,9 @@ Should show the status of current KinD cluster.
     Good version of kubectl installed: 1.25.0 in /Users/jarek/IdeaProjects/airflow/kubernetes-tests/.venv/bin
     Good version of helm installed: 3.9.2 in /Users/jarek/IdeaProjects/airflow/kubernetes-tests/.venv/bin
     Stable repo is already added
-    Uploading Airflow image ghcr.io/apache/airflow/main/prod/python3.9-kubernetes to cluster airflow-python-3.9-v1.24.2
-    Image: "ghcr.io/apache/airflow/main/prod/python3.9-kubernetes" with ID "sha256:fb6195f7c2c2ad97788a563a3fe9420bf3576c85575378d642cd7985aff97412" not yet present on node "airflow-python-3.9-v1.24.2-worker", loading...
-    Image: "ghcr.io/apache/airflow/main/prod/python3.9-kubernetes" with ID "sha256:fb6195f7c2c2ad97788a563a3fe9420bf3576c85575378d642cd7985aff97412" not yet present on node "airflow-python-3.9-v1.24.2-control-plane", loading...
+    Uploading Airflow image ghcr.io/apache/airflow/main/prod/python3.10-kubernetes to cluster airflow-python-3.10-v1.24.2
+    Image: "ghcr.io/apache/airflow/main/prod/python3.10-kubernetes" with ID "sha256:fb6195f7c2c2ad97788a563a3fe9420bf3576c85575378d642cd7985aff97412" not yet present on node "airflow-python-3.10-v1.24.2-worker", loading...
+    Image: "ghcr.io/apache/airflow/main/prod/python3.10-kubernetes" with ID "sha256:fb6195f7c2c2ad97788a563a3fe9420bf3576c85575378d642cd7985aff97412" not yet present on node "airflow-python-3.10-v1.24.2-control-plane", loading...
 
     NEXT STEP: You might now deploy Airflow by:
 
@@ -427,8 +427,8 @@ Should show the status of current KinD cluster.
 
 .. code-block:: text
 
-    Deploying Airflow for cluster airflow-python-3.9-v1.24.2
-    Deploying kind-airflow-python-3.9-v1.24.2 with Airflow Helm Chart.
+    Deploying Airflow for cluster airflow-python-3.10-v1.24.2
+    Deploying kind-airflow-python-3.10-v1.24.2 with Airflow Helm Chart.
     Copied chart sources to /private/var/folders/v3/gvj4_mw152q556w2rrh7m46w0000gn/T/chart_edu__kir/chart
     Deploying Airflow from /private/var/folders/v3/gvj4_mw152q556w2rrh7m46w0000gn/T/chart_edu__kir/chart
     NAME: airflow
@@ -470,12 +470,12 @@ Should show the status of current KinD cluster.
 
     Information on how to set a static webserver secret key can be found here:
     https://airflow.apache.org/docs/helm-chart/stable/production-guide.html#api-secret-key
-    Deployed kind-airflow-python-3.9-v1.24.2 with Airflow Helm Chart.
+    Deployed kind-airflow-python-3.10-v1.24.2 with Airflow Helm Chart.
 
-    Airflow for Python 3.9 and K8S version v1.24.2 has been successfully deployed.
+    Airflow for Python 3.10 and K8S version v1.24.2 has been successfully deployed.
 
-    The KinD cluster name: airflow-python-3.9-v1.24.2
-    The kubectl cluster name: kind-airflow-python-3.9-v1.24.2.
+    The KinD cluster name: airflow-python-3.10-v1.24.2
+    The kubectl cluster name: kind-airflow-python-3.10-v1.24.2.
 
 
     KinD Cluster API server URL: http://localhost:48366
@@ -519,7 +519,7 @@ The virtualenv required will be created automatically when the scripts are run.
     Good version of helm installed: 3.16.4 in /Users/jarek/IdeaProjects/airflow/kubernetes-tests/.venv/bin
     Stable repo is already added
 
-    Running tests with kind-airflow-python-3.9-v1.29.12 cluster.
+    Running tests with kind-airflow-python-3.10-v1.29.12 cluster.
      Command to run: uv run pytest kubernetes-tests/tests/
     Installed 74 packages in 179ms
     /Users/jarek/IdeaProjects/airflow/.venv/lib/python3.12/site-packages/pytest_asyncio/plugin.py:208: PytestDeprecationWarning: The configuration option "asyncio_default_fixture_loop_scope" is unset.
@@ -553,7 +553,7 @@ Once you enter the environment, you receive this information:
 
     Entering interactive k8s shell.
 
-    (kind-airflow-python-3.9-v1.24.2:KubernetesExecutor)>
+    (kind-airflow-python-3.10-v1.24.2:KubernetesExecutor)>
 
 In a separate terminal you can open the k9s CLI:
 
@@ -603,7 +603,7 @@ environment variable copying it from the result of "breeze k8s tests":
 
     echo ${KUBECONFIG}
 
-    /home/jarek/code/airflow/.build/.k8s-clusters/airflow-python-3.9-v1.28.13/.kube/config
+    /home/jarek/code/airflow/.build/.k8s-clusters/airflow-python-3.10-v1.28.13/.kube/config
 
 .. image:: images/kubeconfig-env.png
     :align: center
@@ -671,9 +671,9 @@ Kind has also useful commands to inspect your running cluster:
 
 .. code-block:: text
 
-    Deleting KinD cluster airflow-python-3.9-v1.24.2!
-    Deleting cluster "airflow-python-3.9-v1.24.2" ...
-    KinD cluster airflow-python-3.9-v1.24.2 deleted!
+    Deleting KinD cluster airflow-python-3.10-v1.24.2!
+    Deleting cluster "airflow-python-3.10-v1.24.2" ...
+    KinD cluster airflow-python-3.10-v1.24.2 deleted!
 
 
 Running complete k8s tests
diff --git a/contributing-docs/testing/unit_tests.rst b/contributing-docs/testing/unit_tests.rst
index 698096f702990..c15776a963214 100644
--- a/contributing-docs/testing/unit_tests.rst
+++ b/contributing-docs/testing/unit_tests.rst
@@ -185,7 +185,7 @@ rerun in Breeze as you will (``-n auto`` will parallelize tests using ``pytest-x
 
 .. code-block:: bash
 
-    breeze shell --backend none --python 3.9
+    breeze shell --backend none --python 3.10
     > pytest airflow-core/tests --skip-db-tests -n auto
 
 
@@ -227,7 +227,7 @@ You can also run DB tests with ``breeze`` dockerized environment. You can choose
 ``--backend`` flag. The default is ``sqlite`` but you can also use others such as ``postgres`` or ``mysql``.
 You can also select backend version and Python version to use. You can specify the ``test-type`` to run -
 breeze will list the test types you can run with ``--help`` and provide auto-complete for them. Example
-below runs the ``Core`` tests with ``postgres`` backend and ``3.9`` Python version
+below runs the ``Core`` tests with ``postgres`` backend and ``3.10`` Python version
 
 You can also run the commands via ``breeze testing core-tests`` or ``breeze testing providers-tests``
 - by adding the parallel flags manually:
@@ -249,7 +249,7 @@ either by package/module/test or by test type - whatever ``pytest`` supports.
 
 .. code-block:: bash
 
-    breeze shell --backend postgres --python 3.9
+    breeze shell --backend postgres --python 3.10
     > pytest airflow-core/tests --run-db-tests-only
 
 As explained before, you cannot run DB tests in parallel using ``pytest-xdist`` plugin, but ``breeze`` has
@@ -258,7 +258,7 @@ and you can run the tests using ``--run-in-parallel`` flag.
 
 .. code-block:: bash
 
-    breeze testing core-tests --run-db-tests-only --backend postgres --python 3.9 --run-in-parallel
+    breeze testing core-tests --run-db-tests-only --backend postgres --python 3.10 --run-in-parallel
 
 Examples of marking test as DB test
 ...................................
@@ -1168,7 +1168,7 @@ Herr id how to reproduce it.
 
 .. code-block:: bash
 
-   breeze ci-image build --python 3.9
+   breeze ci-image build --python 3.10
 
 2. Build providers from latest sources:
 
diff --git a/dev/README_RELEASE_AIRFLOW.md b/dev/README_RELEASE_AIRFLOW.md
index ba1066d02d12a..0fafbc345a7e9 100644
--- a/dev/README_RELEASE_AIRFLOW.md
+++ b/dev/README_RELEASE_AIRFLOW.md
@@ -789,7 +789,7 @@ Optionally it can be followed with constraints
 
 ```shell script
 pip install apache-airflow==<VERSION>rc<X> \
-  --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-<VERSION>/constraints-3.9.txt"
+  --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-<VERSION>/constraints-3.10.txt"
 ```
 
 Note that the constraints contain python version that you are installing it with.
@@ -801,7 +801,7 @@ There is also an easy way of installation with Breeze if you have the latest sou
 Running the following command will use tmux inside breeze, create `admin` user and run Webserver & Scheduler:
 
 ```shell script
-breeze start-airflow --use-airflow-version 2.7.0rc1 --python 3.9 --backend postgres
+breeze start-airflow --use-airflow-version 2.7.0rc1 --python 3.10 --backend postgres
 ```
 
 You can also choose different executors and extras to install when you are installing airflow this way. For
@@ -809,7 +809,7 @@ example in order to run Airflow with CeleryExecutor and install celery, google a
 Airflow 2.7.0, you need to have celery provider installed to run Airflow with CeleryExecutor) you can run:
 
 ```shell script
-breeze start-airflow --use-airflow-version 2.7.0rc1 --python 3.9 --backend postgres \
+breeze start-airflow --use-airflow-version 2.7.0rc1 --python 3.10 --backend postgres \
   --executor CeleryExecutor --airflow-extras "celery,google,amazon"
 ```
 
diff --git a/dev/README_RELEASE_PROVIDERS.md b/dev/README_RELEASE_PROVIDERS.md
index f0a45a560af28..089659c91751b 100644
--- a/dev/README_RELEASE_PROVIDERS.md
+++ b/dev/README_RELEASE_PROVIDERS.md
@@ -1002,7 +1002,7 @@ pip install apache-airflow-providers-<provider>==<VERSION>rc<X>
 ### Installing with Breeze
 
 ```shell
-breeze start-airflow --use-airflow-version 2.2.4 --python 3.9 --backend postgres \
+breeze start-airflow --use-airflow-version 2.2.4 --python 3.10 --backend postgres \
     --load-example-dags --load-default-connections
 ```
 
diff --git a/dev/breeze/README.md b/dev/breeze/README.md
index d1c689d1791c3..f89c5537f10c9 100644
--- a/dev/breeze/README.md
+++ b/dev/breeze/README.md
@@ -135,6 +135,6 @@ PLEASE DO NOT MODIFY THE HASH BELOW! IT IS AUTOMATICALLY UPDATED BY PRE-COMMIT.
 
 ---------------------------------------------------------------------------------------------------------
 
-Package config hash: 098162a9dca075feeada933f58455aa74f58811a34959f06bd3298aef9773a60f3800e9d5d00b9335d300572842a2838f06bd83f7a79a5ce5f529fb6202059af
+Package config hash: aff0246d8f21f59dc1299a6d8298e166ece38be97ee62f0fcb8641e59d991f7e8d649cfcd7d709b20c75d251761e1b3fd18dabe9d2ebc9f45ea58f7379fa125c
 
 ---------------------------------------------------------------------------------------------------------
diff --git a/dev/breeze/doc/01_installation.rst b/dev/breeze/doc/01_installation.rst
index 9b54ed17d7542..5f0acd5e080f8 100644
--- a/dev/breeze/doc/01_installation.rst
+++ b/dev/breeze/doc/01_installation.rst
@@ -332,7 +332,7 @@ that Breeze works on
 
 .. warning:: Upgrading from earlier Python version
 
-    If you used Breeze with Python 3.8 and when running it, it will complain that it needs Python 3.9. In this
+    If you used Breeze with Python 3.8 and when running it, it will complain that it needs Python 3.10. In this
     case you should force-reinstall Breeze with ``uv`` (or ``pipx``):
 
         .. code-block:: bash
@@ -373,13 +373,13 @@ that Breeze works on
 
         .. code-block:: bash
 
-            uv tool install  --python 3.9.16 ./dev/breeze --force
+            uv tool install  --python 3.10.16 ./dev/breeze --force
 
         or
 
         .. code-block:: bash
 
-            pipx install -e ./dev/breeze --python /Users/airflow/.pyenv/versions/3.9.16/bin/python --force
+            pipx install -e ./dev/breeze --python /Users/airflow/.pyenv/versions/3.10.16/bin/python --force
 
 
 Running Breeze for the first time
diff --git a/dev/breeze/doc/03_developer_tasks.rst b/dev/breeze/doc/03_developer_tasks.rst
index 3a425469283de..d269e98a0c840 100644
--- a/dev/breeze/doc/03_developer_tasks.rst
+++ b/dev/breeze/doc/03_developer_tasks.rst
@@ -34,12 +34,12 @@ You can use additional ``breeze`` flags to choose your environment. You can spec
 version to use, and backend (the meta-data database). Thanks to that, with Breeze, you can recreate the same
 environments as we have in matrix builds in the CI. See next chapter for backend selection.
 
-For example, you can choose to run Python 3.9 tests with MySQL as backend and with mysql version 8
+For example, you can choose to run Python 3.10 tests with MySQL as backend and with mysql version 8
 as follows:
 
 .. code-block:: bash
 
-    breeze --python 3.9 --backend mysql --mysql-version 8.0
+    breeze --python 3.10 --backend mysql --mysql-version 8.0
 
 .. note:: Note for Windows WSL2 users
 
@@ -55,7 +55,7 @@ Try adding ``--builder=default`` to your command. For example:
 
 .. code-block:: bash
 
-    breeze --builder=default --python 3.9 --backend mysql --mysql-version 8.0
+    breeze --builder=default --python 3.10 --backend mysql --mysql-version 8.0
 
 The choices you make are persisted in the ``./.build/`` cache directory so that next time when you use the
 ``breeze`` script, it could use the values that were used previously. This way you do not have to specify
@@ -363,7 +363,7 @@ When you are starting Airflow from local sources, www asset compilation is autom
 
 .. code-block:: bash
 
-    breeze --python 3.9 --backend mysql start-airflow
+    breeze --python 3.10 --backend mysql start-airflow
 
 You can also use it to start different executor.
 
@@ -376,7 +376,7 @@ You can also use it to start any released version of Airflow from ``PyPI`` with
 
 .. code-block:: bash
 
-    breeze start-airflow --python 3.9 --backend mysql --use-airflow-version 2.7.0
+    breeze start-airflow --python 3.10 --backend mysql --use-airflow-version 2.7.0
 
 When you are installing version from PyPI, it's also possible to specify extras that should be used
 when installing Airflow - you can provide several extras separated by coma - for example to install
diff --git a/dev/breeze/doc/04_troubleshooting.rst b/dev/breeze/doc/04_troubleshooting.rst
index f9828ef1b700e..9f7a409b01f95 100644
--- a/dev/breeze/doc/04_troubleshooting.rst
+++ b/dev/breeze/doc/04_troubleshooting.rst
@@ -83,7 +83,7 @@ describe your problem.
     stated in `This comment <https://github.com/moby/moby/issues/43361#issuecomment-1227617516>`_ and allows to
     run Breeze with no problems.
 
-Cannot import name 'cache' or Python >=3.9 required
+Cannot import name 'cache' or Python >=3.10 required
 ---------------------------------------------------
 
 When you see this error:
@@ -96,7 +96,7 @@ or
 
 .. code-block::
 
-    ERROR: Package 'blacken-docs' requires a different Python: 3.8.18 not in '>=3.9'
+    ERROR: Package 'blacken-docs' requires a different Python: 3.8.18 not in '>=3.10'
 
 
 It means that your pre-commit hook is installed with (already End-Of-Life) Python 3.8 and you should reinstall
@@ -107,7 +107,7 @@ This can be done with ``uv tool`` to install ``pre-commit``)
 .. code-block:: bash
 
     uv tool uninstall pre-commit
-    uv tool install pre-commit --python 3.9 --force --with pre-commit-uv
+    uv tool install pre-commit --python 3.10 --force --with pre-commit-uv
     pre-commit clean
     pre-commit install
 
@@ -116,7 +116,7 @@ You can also use ``pipx``
 .. code-block:: bash
 
     pipx uninstall pre-commit
-    pipx install pre-commit --python $(which python3.9) --force
+    pipx install pre-commit --python $(which python3.10) --force
     # This one allows pre-commit to use uv for venvs installed by pre-commit
     pipx inject pre-commit pre-commit-uv  # optionally if you want to use uv to install virtualenvs
     pre-commit clean
diff --git a/dev/breeze/doc/05_test_commands.rst b/dev/breeze/doc/05_test_commands.rst
index a51013e171a25..1253790707b49 100644
--- a/dev/breeze/doc/05_test_commands.rst
+++ b/dev/breeze/doc/05_test_commands.rst
@@ -570,7 +570,7 @@ as executor you use, similar to:
 
 .. code-block:: bash
 
-    (kind-airflow-python-3.9-v1.24.0:KubernetesExecutor)>
+    (kind-airflow-python-3.10-v1.24.0:KubernetesExecutor)>
 
 
 The shell automatically activates the virtual environment that has all appropriate dependencies
@@ -579,7 +579,7 @@ be created and Airflow deployed to it before running the tests):
 
 .. code-block:: bash
 
-    (kind-airflow-python-3.9-v1.24.0:KubernetesExecutor)> pytest test_kubernetes_executor.py
+    (kind-airflow-python-3.10-v1.24.0:KubernetesExecutor)> pytest test_kubernetes_executor.py
     ================================================= test session starts =================================================
     platform linux -- Python 3.10.6, pytest-6.2.5, py-1.11.0, pluggy-1.0.0 -- /home/jarek/code/airflow/kubernetes-tests/.venv/bin/python
     cachedir: .pytest_cache
@@ -598,7 +598,7 @@ be created and Airflow deployed to it before running the tests):
 
     -- Docs: https://docs.pytest.org/en/stable/warnings.html
     ============================================ 2 passed, 1 warning in 38.62s ============================================
-    (kind-airflow-python-3.9-v1.24.0:KubernetesExecutor)>
+    (kind-airflow-python-3.10-v1.24.0:KubernetesExecutor)>
 
 
 All parameters of the command are here:
diff --git a/dev/breeze/doc/06_managing_docker_images.rst b/dev/breeze/doc/06_managing_docker_images.rst
index d743a7ef7bc17..d30e73728c8b2 100644
--- a/dev/breeze/doc/06_managing_docker_images.rst
+++ b/dev/breeze/doc/06_managing_docker_images.rst
@@ -120,13 +120,13 @@ To load the image from specific PR, you can use the following command:
 
 .. code-block:: bash
 
-     breeze ci-image load --from-pr 12345 --python 3.9 --github-token <your_github_token>
+     breeze ci-image load --from-pr 12345 --python 3.10 --github-token <your_github_token>
 
 To load the image from specific job run (for example 12538475388), you can use the following command, find the run id from github action runs.
 
 .. code-block:: bash
 
-     breeze ci-image load --from-run 12538475388 --python 3.9 --github-token <your_github_token>
+     breeze ci-image load --from-run 12538475388 --python 3.10 --github-token <your_github_token>
 
 After you load the image, you can reproduce the very exact environment that was used in the CI run by
 entering breeze container without mounting your local sources:
@@ -220,10 +220,10 @@ suffix and they need to also be paired with corresponding runtime dependency add
 
 .. code-block:: bash
 
-     breeze prod-image build --python 3.9 --additional-dev-deps "libasound2-dev" \
+     breeze prod-image build --python 3.10 --additional-dev-deps "libasound2-dev" \
         --additional-runtime-apt-deps "libasound2"
 
-Same as above but uses python 3.9.
+Same as above but uses python 3.10.
 
 Building PROD image
 ...................
diff --git a/dev/breeze/doc/10_advanced_breeze_topics.rst b/dev/breeze/doc/10_advanced_breeze_topics.rst
index 3cd22855db2fe..d3f393c2b3963 100644
--- a/dev/breeze/doc/10_advanced_breeze_topics.rst
+++ b/dev/breeze/doc/10_advanced_breeze_topics.rst
@@ -49,7 +49,7 @@ make sure to follow these steps:
   this will bypass the check we run in Breeze to see if there are new requirements to install for it
 
 See example configuration for PyCharm which has run/debug configuration for
-``breeze sbom generate-providers-requirements --provider-id sqlite --python 3.9``
+``breeze sbom generate-providers-requirements --provider-id sqlite --python 3.10``
 
 .. raw:: html
 
diff --git a/dev/breeze/doc/adr/0002-implement-standalone-python-command.md b/dev/breeze/doc/adr/0002-implement-standalone-python-command.md
index 87bbe46a6486e..79401b85f95b5 100644
--- a/dev/breeze/doc/adr/0002-implement-standalone-python-command.md
+++ b/dev/breeze/doc/adr/0002-implement-standalone-python-command.md
@@ -138,7 +138,7 @@ There are a few properties of Breeze/CI scripts that should be maintained though
   run a command and get everything done with the least number of prerequisites
 
 * The prerequisites for Breeze and CI are:
-   * Python 3.9+ (Python 3.9 end of life is October 2025)
+   * Python 3.10+ (Python 3.10 end of life is October 2025)
    * Docker (23.0+)
    * Docker Compose (2.16.0+)
    * No other tools and CLI commands should be needed
diff --git a/dev/breeze/doc/ci/02_images.md b/dev/breeze/doc/ci/02_images.md
index 00007ded26e71..4dbfdb6e19637 100644
--- a/dev/breeze/doc/ci/02_images.md
+++ b/dev/breeze/doc/ci/02_images.md
@@ -129,17 +129,17 @@ The images are built with default extras - different extras for CI and
 production image and you can change the extras via the `--airflow-extras`
 parameters and add new ones with `--additional-airflow-extras`.
 
-For example if you want to build Python 3.9 version of production image
+For example if you want to build Python 3.10 version of production image
 with "all" extras installed you should run this command:
 
 ``` bash
-breeze prod-image build --python 3.9 --airflow-extras "all"
+breeze prod-image build --python 3.10 --airflow-extras "all"
 ```
 
 If you just want to add new extras you can add them like that:
 
 ``` bash
-breeze prod-image build --python 3.9 --additional-airflow-extras "all"
+breeze prod-image build --python 3.10 --additional-airflow-extras "all"
 ```
 
 The command that builds the CI image is optimized to minimize the time
@@ -160,7 +160,7 @@ You can also build production images from PIP packages via providing
 `--install-airflow-version` parameter to Breeze:
 
 ``` bash
-breeze prod-image build --python 3.9 --additional-airflow-extras=trino --install-airflow-version=2.0.0
+breeze prod-image build --python 3.10 --additional-airflow-extras=trino --install-airflow-version=2.0.0
 ```
 
 This will build the image using command similar to:
@@ -168,7 +168,7 @@ This will build the image using command similar to:
 ``` bash
 pip install \
   apache-airflow[async,amazon,celery,cncf.kubernetes,docker,elasticsearch,ftp,grpc,hashicorp,http,ldap,google,microsoft.azure,mysql,postgres,redis,sendgrid,sftp,slack,ssh,statsd,virtualenv]==2.0.0 \
-  --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.0.0/constraints-3.9.txt"
+  --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.0.0/constraints-3.10.txt"
 ```
 
 > [!NOTE]
@@ -199,7 +199,7 @@ HEAD of development for constraints):
 
 ``` bash
 pip install "https://github.com/apache/airflow/archive/<tag>.tar.gz#egg=apache-airflow" \
-  --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-3.9.txt"
+  --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-3.10.txt"
 ```
 
 You can also skip installing airflow and install it from locally
@@ -207,7 +207,7 @@ provided files by using `--install-distributions-from-context` parameter to
 Breeze:
 
 ``` bash
-breeze prod-image build --python 3.9 --additional-airflow-extras=trino --install-distributions-from-context
+breeze prod-image build --python 3.10 --additional-airflow-extras=trino --install-distributions-from-context
 ```
 
 In this case you airflow and all packages (.whl files) should be placed
@@ -243,20 +243,20 @@ flags: `registry` (default), `local`, or `disabled` flags when you run
 Breeze commands. For example:
 
 ``` bash
-breeze ci-image build --python 3.9 --docker-cache local
+breeze ci-image build --python 3.10 --docker-cache local
 ```
 
 Will build the CI image using local build cache (note that it will take
 quite a long time the first time you run it).
 
 ``` bash
-breeze prod-image build --python 3.9 --docker-cache registry
+breeze prod-image build --python 3.10 --docker-cache registry
 ```
 
 Will build the production image with cache used from registry.
 
 ``` bash
-breeze prod-image build --python 3.9 --docker-cache disabled
+breeze prod-image build --python 3.10 --docker-cache disabled
 ```
 
 Will build the production image from the scratch.
@@ -359,7 +359,7 @@ you can build the image in the
 Here just a few examples are presented which should give you general
 understanding of what you can customize.
 
-This builds the production image in version 3.9 with additional airflow
+This builds the production image in version 3.10 with additional airflow
 extras from 2.0.0 PyPI package and additional apt dev and runtime
 dependencies.
 
@@ -371,7 +371,7 @@ plugin installed.
 ``` bash
 DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
   --pull \
-  --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+  --build-arg PYTHON_BASE_IMAGE="python:3.10-slim-bookworm" \
   --build-arg ADDITIONAL_AIRFLOW_EXTRAS="jdbc" \
   --build-arg ADDITIONAL_PYTHON_DEPS="pandas" \
   --build-arg ADDITIONAL_DEV_APT_DEPS="gcc g++" \
@@ -382,7 +382,7 @@ the same image can be built using `breeze` (it supports auto-completion
 of the options):
 
 ``` bash
-breeze ci-image build --python 3.9 --additional-airflow-extras=jdbc --additional-python-deps="pandas" \
+breeze ci-image build --python 3.10 --additional-airflow-extras=jdbc --additional-python-deps="pandas" \
     --additional-dev-apt-deps="gcc g++"
 ```
 
@@ -396,7 +396,7 @@ comment](https://github.com/apache/airflow/issues/8605#issuecomment-690065621):
 ``` bash
 DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
   --pull \
-  --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+  --build-arg PYTHON_BASE_IMAGE="python:3.10-slim-bookworm" \
   --build-arg AIRFLOW_INSTALLATION_METHOD="apache-airflow" \
   --build-arg ADDITIONAL_AIRFLOW_EXTRAS="slack" \
   --build-arg ADDITIONAL_PYTHON_DEPS="apache-airflow-providers-odbc \
@@ -419,93 +419,93 @@ DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
 The following build arguments (`--build-arg` in docker build command)
 can be used for CI images:
 
-| Build argument                    | Default value              | Description                                                                                                       |
-|-----------------------------------|----------------------------|-------------------------------------------------------------------------------------------------------------------|
-| `PYTHON_BASE_IMAGE`               | `python:3.9-slim-bookworm` | Base Python image                                                                                                 |
-| `PYTHON_MAJOR_MINOR_VERSION`      | `3.9`                      | major/minor version of Python (should match base image)                                                           |
-| `DEPENDENCIES_EPOCH_NUMBER`       | `2`                        | increasing this number will reinstall all apt dependencies                                                        |
-| `ADDITIONAL_PIP_INSTALL_FLAGS`    |                            | additional `pip` flags passed to the installation commands (except when reinstalling `pip` itself)                |
-| `HOME`                            | `/root`                    | Home directory of the root user (CI image has root user as default)                                               |
-| `AIRFLOW_HOME`                    | `/root/airflow`            | Airflow's HOME (that's where logs and sqlite databases are stored)                                                |
-| `AIRFLOW_SOURCES`                 | `/opt/airflow`             | Mounted sources of Airflow                                                                                        |
-| `AIRFLOW_REPO`                    | `apache/airflow`           | the repository from which PIP dependencies are pre-installed                                                      |
-| `AIRFLOW_BRANCH`                  | `main`                     | the branch from which PIP dependencies are pre-installed                                                          |
-| `AIRFLOW_CI_BUILD_EPOCH`          | `1`                        | increasing this value will reinstall PIP dependencies from the repository from scratch                            |
-| `AIRFLOW_CONSTRAINTS_LOCATION`    |                            | If not empty, it will override the source of the constraints with the specified URL or file.                      |
-| `AIRFLOW_CONSTRAINTS_REFERENCE`   | `constraints-main`         | reference (branch or tag) from GitHub repository from which constraints are used.                                 |
-| `AIRFLOW_EXTRAS`                  | `all`                      | extras to install                                                                                                 |
-| `UPGRADE_RANDOM_INDICATOR_STRING` |                            | If set to any random value the dependencies are upgraded to newer versions. In CI it is set to build id.          |
-| `ADDITIONAL_AIRFLOW_EXTRAS`       |                            | additional extras to install                                                                                      |
-| `ADDITIONAL_PYTHON_DEPS`          |                            | additional Python dependencies to install                                                                         |
-| `DEV_APT_COMMAND`                 |                            | Dev apt command executed before dev deps are installed in the first part of image                                 |
-| `ADDITIONAL_DEV_APT_COMMAND`      |                            | Additional Dev apt command executed before dev dep are installed in the first part of the image                   |
-| `DEV_APT_DEPS`                    |                            | Dev APT dependencies installed in the first part of the image (default empty means default dependencies are used) |
-| `ADDITIONAL_DEV_APT_DEPS`         |                            | Additional apt dev dependencies installed in the first part of the image                                          |
-| `ADDITIONAL_DEV_APT_ENV`          |                            | Additional env variables defined when installing dev deps                                                         |
-| `AIRFLOW_PIP_VERSION`             | `25.1.1`                   | `pip` version used.                                                                                               |
-| `AIRFLOW_UV_VERSION`              | `0.7.16`                   | `uv` version used.                                                                                                |
-| `AIRFLOW_PRE_COMMIT_VERSION`      | `4.2.0`                    | `pre-commit` version used.                                                                                        |
-| `AIRFLOW_PRE_COMMIT_UV_VERSION`   | `4.1.4`                    | `pre-commit-uv` version used.                                                                                     |
-| `AIRFLOW_USE_UV`                  | `true`                     | Whether to use UV for installation.                                                                               |
-| `PIP_PROGRESS_BAR`                | `on`                       | Progress bar for PIP installation                                                                                 |
+| Build argument                    | Default value               | Description                                                                                                       |
+|-----------------------------------|-----------------------------|-------------------------------------------------------------------------------------------------------------------|
+| `PYTHON_BASE_IMAGE`               | `python:3.10-slim-bookworm` | Base Python image                                                                                                 |
+| `PYTHON_MAJOR_MINOR_VERSION`      | `3.10`                      | major/minor version of Python (should match base image)                                                           |
+| `DEPENDENCIES_EPOCH_NUMBER`       | `2`                         | increasing this number will reinstall all apt dependencies                                                        |
+| `ADDITIONAL_PIP_INSTALL_FLAGS`    |                             | additional `pip` flags passed to the installation commands (except when reinstalling `pip` itself)                |
+| `HOME`                            | `/root`                     | Home directory of the root user (CI image has root user as default)                                               |
+| `AIRFLOW_HOME`                    | `/root/airflow`             | Airflow's HOME (that's where logs and sqlite databases are stored)                                                |
+| `AIRFLOW_SOURCES`                 | `/opt/airflow`              | Mounted sources of Airflow                                                                                        |
+| `AIRFLOW_REPO`                    | `apache/airflow`            | the repository from which PIP dependencies are pre-installed                                                      |
+| `AIRFLOW_BRANCH`                  | `main`                      | the branch from which PIP dependencies are pre-installed                                                          |
+| `AIRFLOW_CI_BUILD_EPOCH`          | `1`                         | increasing this value will reinstall PIP dependencies from the repository from scratch                            |
+| `AIRFLOW_CONSTRAINTS_LOCATION`    |                             | If not empty, it will override the source of the constraints with the specified URL or file.                      |
+| `AIRFLOW_CONSTRAINTS_REFERENCE`   | `constraints-main`          | reference (branch or tag) from GitHub repository from which constraints are used.                                 |
+| `AIRFLOW_EXTRAS`                  | `all`                       | extras to install                                                                                                 |
+| `UPGRADE_RANDOM_INDICATOR_STRING` |                             | If set to any random value the dependencies are upgraded to newer versions. In CI it is set to build id.          |
+| `ADDITIONAL_AIRFLOW_EXTRAS`       |                             | additional extras to install                                                                                      |
+| `ADDITIONAL_PYTHON_DEPS`          |                             | additional Python dependencies to install                                                                         |
+| `DEV_APT_COMMAND`                 |                             | Dev apt command executed before dev deps are installed in the first part of image                                 |
+| `ADDITIONAL_DEV_APT_COMMAND`      |                             | Additional Dev apt command executed before dev dep are installed in the first part of the image                   |
+| `DEV_APT_DEPS`                    |                             | Dev APT dependencies installed in the first part of the image (default empty means default dependencies are used) |
+| `ADDITIONAL_DEV_APT_DEPS`         |                             | Additional apt dev dependencies installed in the first part of the image                                          |
+| `ADDITIONAL_DEV_APT_ENV`          |                             | Additional env variables defined when installing dev deps                                                         |
+| `AIRFLOW_PIP_VERSION`             | `25.1.1`                    | `pip` version used.                                                                                               |
+| `AIRFLOW_UV_VERSION`              | `0.7.16`                    | `uv` version used.                                                                                                |
+| `AIRFLOW_PRE_COMMIT_VERSION`      | `4.2.0`                     | `pre-commit` version used.                                                                                        |
+| `AIRFLOW_PRE_COMMIT_UV_VERSION`   | `4.1.4`                     | `pre-commit-uv` version used.                                                                                     |
+| `AIRFLOW_USE_UV`                  | `true`                      | Whether to use UV for installation.                                                                               |
+| `PIP_PROGRESS_BAR`                | `on`                        | Progress bar for PIP installation                                                                                 |
 
 
 Here are some examples of how CI images can built manually. CI is always
 built from local sources.
 
-This builds the CI image in version 3.9 with default extras ("all").
+This builds the CI image in version 3.10 with default extras ("all").
 
 ``` bash
 DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
    --pull \
-   --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" --tag my-image:0.0.1
+   --build-arg PYTHON_BASE_IMAGE="python:3.10-slim-bookworm" --tag my-image:0.0.1
 ```
 
-This builds the CI image in version 3.9 with "gcp" extra only.
+This builds the CI image in version 3.10 with "gcp" extra only.
 
 ``` bash
 DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
   --pull \
-  --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+  --build-arg PYTHON_BASE_IMAGE="python:3.10-slim-bookworm" \
   --build-arg AIRFLOW_EXTRAS=gcp --tag my-image:0.0.1
 ```
 
-This builds the CI image in version 3.9 with "apache-beam" extra added.
+This builds the CI image in version 3.10 with "apache-beam" extra added.
 
 ``` bash
 DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
   --pull \
-  --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+  --build-arg PYTHON_BASE_IMAGE="python:3.10-slim-bookworm" \
   --build-arg ADDITIONAL_AIRFLOW_EXTRAS="apache-beam" --tag my-image:0.0.1
 ```
 
-This builds the CI image in version 3.9 with "mssql" additional package
+This builds the CI image in version 3.10 with "mssql" additional package
 added.
 
 ``` bash
 DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
   --pull \
-  --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+  --build-arg PYTHON_BASE_IMAGE="python:3.10-slim-bookworm" \
   --build-arg ADDITIONAL_PYTHON_DEPS="mssql" --tag my-image:0.0.1
 ```
 
-This builds the CI image in version 3.9 with "gcc" and "g++" additional
+This builds the CI image in version 3.10 with "gcc" and "g++" additional
 apt dev dependencies added.
 
 ```
 DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
   --pull
-  --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+  --build-arg PYTHON_BASE_IMAGE="python:3.10-slim-bookworm" \
   --build-arg ADDITIONAL_DEV_APT_DEPS="gcc g++" --tag my-image:0.0.1
 ```
 
-This builds the CI image in version 3.9 with "jdbc" extra and
+This builds the CI image in version 3.10 with "jdbc" extra and
 "default-jre-headless" additional apt runtime dependencies added.
 
 ```
 DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
   --pull \
-  --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+  --build-arg PYTHON_BASE_IMAGE="python:3.10-slim-bookworm" \
   --build-arg AIRFLOW_EXTRAS=jdbc \
   --tag my-image:0.0.1
 ```
@@ -567,7 +567,7 @@ percent-encoded when you access them via UI (/ = %2F)
 | PROD image               | airflow/\<BRANCH\>/prod/python\<X.Y\>  | faster to build or pull. Production image optimized for size. |
 
 - \<BRANCH\> might be either "main" or "v2-\*-test"
-- \<X.Y\> - Python version (Major + Minor).Should be one of \["3.9", "3.10", "3.11", "3.12" \].
+- \<X.Y\> - Python version (Major + Minor).Should be one of \["3.10", "3.11", "3.12" \].
 
 
 ----
diff --git a/dev/breeze/doc/ci/04_selective_checks.md b/dev/breeze/doc/ci/04_selective_checks.md
index 615bee819b782..15a60d24670d0 100644
--- a/dev/breeze/doc/ci/04_selective_checks.md
+++ b/dev/breeze/doc/ci/04_selective_checks.md
@@ -164,79 +164,79 @@ separated by spaces. This is to accommodate for the wau how outputs of this kind
 GitHub Actions to pass the list of parameters to a command to execute
 
 
-| Output                                                  | Meaning of the output                                                                                  | Example value                           | List |
-|---------------------------------------------------------|--------------------------------------------------------------------------------------------------------|-----------------------------------------|------|
-| all-python-versions                                     | List of all python versions there are available in the form of JSON array                              | \['3.9', '3.10'\]                       |      |
-| all-python-versions-list-as-string                      | List of all python versions there are available in the form of space separated string                  | 3.9 3.10                                | *    |
-| all-versions                                            | If set to true, then all python, k8s, DB versions are used for tests.                                  | false                                   |      |
-| basic-checks-only                                       | Whether to run all static checks ("false") or only basic set of static checks ("true")                 | false                                   |      |
-| build_system_changed_in_pyproject_toml                  | When builds system dependencies changed in pyproject.toml changed in the PR.                           | false                                   |      |
-| ci-image-build                                          | Whether CI image build is needed                                                                       | true                                    |      |
-| core-test-types-list-as-strings-in-json                 | Which test types should be run for unit tests for core                                                 | API Always Providers                    | *    |
-| debug-resources                                         | Whether resources usage should be printed during parallel job execution ("true"/ "false")              | false                                   |      |
-| default-branch                                          | Which branch is default for the build ("main" for main branch, "v2-4-test" for 2.4 line etc.)          | main                                    |      |
-| default-constraints-branch                              | Which branch is default for the build ("constraints-main" for main branch, "constraints-2-4" etc.)     | constraints-main                        |      |
-| default-helm-version                                    | Which Helm version to use as default                                                                   | v3.9.4                                  |      |
-| default-kind-version                                    | Which Kind version to use as default                                                                   | v0.16.0                                 |      |
-| default-kubernetes-version                              | Which Kubernetes version to use as default                                                             | v1.25.2                                 |      |
-| default-mysql-version                                   | Which MySQL version to use as default                                                                  | 5.7                                     |      |
-| default-postgres-version                                | Which Postgres version to use as default                                                               | 10                                      |      |
-| default-python-version                                  | Which Python version to use as default                                                                 | 3.9                                     |      |
-| disable-airflow-repo-cache                              | Disables cache of the repo main cache in CI - aiflow will be installed without main installation cache | true                                    |      |
-| docker-cache                                            | Which cache should be used for images ("registry", "local" , "disabled")                               | registry                                |      |
-| docs-build                                              | Whether to build documentation ("true"/"false")                                                        | true                                    |      |
-| docs-list-as-string                                     | What filter to apply to docs building - based on which documentation packages should be built          | apache-airflow helm-chart google        | *    |
-| excluded-providers-as-string   c                        | List of providers that should be excluded from the build as space-separated string                     | amazon google                           | *    |
-| force-pip                                               | Whether pip should be forced in the image build instead of uv ("true"/"false")                         | false                                   |      |
-| full-tests-needed                                       | Whether this build runs complete set of tests or only subset (for faster PR builds) \[1\]              | false                                   |      |
-| generated-dependencies-changed                          | Whether generated dependencies have changed ("true"/"false")                                           | false                                   |      |
-| has-migrations                                          | Whether the PR has migrations ("true"/"false")                                                         | false                                   |      |
-| hatch-build-changed                                     | When hatch build.py changed in the PR.                                                                 | false                                   |      |
-| helm-test-packages-list-as-string                       | List of helm packages to test as JSON array                                                            | \["airflow_aux", "airflow_core"\]       | *    |
-| helm-version                                            | Which Helm version to use for tests                                                                    | v3.15.3                                 |      |
-| include-success-outputs                                 | Whether to include outputs of successful parallel tests ("true"/"false")                               | false                                   |      |
-| individual-providers-test-types-list-as-strings-in-json | Which test types should be run for unit tests for providers (individually listed)                      | Providers[\amazon\] Providers\[google\] | *    |
-| is-committer-build                                      | Whether the build is triggered by a committer                                                          | false                                   |      |
-| is-legacy-ui-api-labeled                                | Whether the PR is labeled as legacy UI/API                                                             | false                                   |      |
-| kind-version                                            | Which Kind version to use for tests                                                                    | v0.24.0                                 |      |
-| kubernetes-combos-list-as-string                        | All combinations of Python version and Kubernetes version to use for tests as space-separated string   | 3.9-v1.25.2 3.10-v1.28.13               | *    |
-| kubernetes-versions                                     | All Kubernetes versions to use for tests as JSON array                                                 | \['v1.25.2'\]                           |      |
-| kubernetes-versions-list-as-string                      | All Kubernetes versions to use for tests as space-separated string                                     | v1.25.2                                 | *    |
-| latest-versions-only                                    | If set, the number of Python, Kubernetes, DB versions will be limited to the latest ones.              | false                                   |      |
-| mypy-checks                                             | List of folders to be considered for mypy checks                                                       | \["airflow_aux", "airflow_core"\]       |      |
-| mysql-exclude                                           | Which versions of MySQL to exclude for tests as JSON array                                             | []                                      |      |
-| mysql-versions                                          | Which versions of MySQL to use for tests as JSON array                                                 | \['8.0'\]                               |      |
-| needs-api-codegen                                       | Whether "api-codegen" are needed to run ("true"/"false")                                               | true                                    |      |
-| needs-api-tests                                         | Whether "api-tests" are needed to run ("true"/"false")                                                 | true                                    |      |
-| needs-helm-tests                                        | Whether Helm tests are needed to run ("true"/"false")                                                  | true                                    |      |
-| needs-javascript-scans                                  | Whether javascript CodeQL scans should be run ("true"/"false")                                         | true                                    |      |
-| needs-mypy                                              | Whether mypy check is supposed to run in this build                                                    | true                                    |      |
-| needs-python-scans                                      | Whether Python CodeQL scans should be run ("true"/"false")                                             | true                                    |      |
-| only-new-ui-files                                       | Whether only new UI files are present in the PR ("true"/"false")                                       | false                                   |      |
-| postgres-exclude                                        | Which versions of Postgres to exclude for tests as JSON array                                          | []                                      |      |
-| postgres-versions                                       | Which versions of Postgres to use for tests as JSON array                                              | \['12'\]                                |      |
-| prod-image-build                                        | Whether PROD image build is needed                                                                     | true                                    |      |
-| providers-compatibility-tests-matrix                    | Matrix of providers compatibility tests: (python_version, airflow_version, removed_providers)          | \[{}\]                                  |      |
-| providers-test-types-list-as-strings-in-json            | Which test types should be run for unit tests for providers                                            | Providers Providers\[-google\]          | *    |
-| pyproject-toml-changed                                  | When pyproject.toml changed in the PR.                                                                 | false                                   |      |
-| python-versions                                         | List of python versions to use for that build                                                          | \['3.9'\]                               |      |
-| python-versions-list-as-string                          | Which versions of MySQL to use for tests as space-separated string                                     | 3.9                                     | *    |
-| run-amazon-tests                                        | Whether Amazon tests should be run ("true"/"false")                                                    | true                                    |      |
-| run-kubernetes-tests                                    | Whether Kubernetes tests should be run ("true"/"false")                                                | true                                    |      |
-| run-system-tests                                        | Whether system tests should be run ("true"/"false")                                                    | true                                    |      |
-| run-task-sdk-tests                                      | Whether Task SDK tests should be run ("true"/"false")                                                  | true                                    |      |
-| run-tests                                               | Whether unit tests should be run ("true"/"false")                                                      | true                                    |      |
-| run-ui-tests                                            | Whether UI tests should be run ("true"/"false")                                                        | true                                    |      |
-| run-www-tests                                           | Whether Legacy WWW tests should be run ("true"/"false")                                                | true                                    |      |
-| amd-runners                                             | List of labels assigned for runners for that build for public AMD runners                              | \["ubuntu-22.04"\]                      |      |
-| arm-runners                                             | List of labels assigned for runners for that build for public ARM runners                              | \["ubuntu-22.04-arm"\]                  |      |
-| selected-providers-list-as-string                       | List of providers affected when they are selectively affected.                                         | airbyte http                            | *    |
-| skip-pre-commits                                        | Which pre-commits should be skipped during the static-checks run                                       | flynt,identity                          |      |
-| skip-providers-tests                                    | When provider tests should be skipped (on non-main branch or when no provider changes detected)        | true                                    |      |
-| sqlite-exclude                                          | Which versions of Sqlite to exclude for tests as JSON array                                            | []                                      |      |
-| testable-core-integrations                              | List of core integrations that are testable in the build as JSON array                                 | \['celery', 'kerberos'\]                |      |
-| testable-providers-integrations                         | List of core integrations that are testable in the build as JSON array                                 | \['mongo', 'kafka'\]                    |      |
-| upgrade-to-newer-dependencies                           | Whether the image build should attempt to upgrade all dependencies (true/false or commit hash)         | false                                   |      |
+| Output                                                  | Meaning of the output                                                                                  | Example value                            | List |
+|---------------------------------------------------------|--------------------------------------------------------------------------------------------------------|------------------------------------------|------|
+| all-python-versions                                     | List of all python versions there are available in the form of JSON array                              | \['3.10', '3.11'\]                       |      |
+| all-python-versions-list-as-string                      | List of all python versions there are available in the form of space separated string                  | 3.10 3.11                                | *    |
+| all-versions                                            | If set to true, then all python, k8s, DB versions are used for tests.                                  | false                                    |      |
+| basic-checks-only                                       | Whether to run all static checks ("false") or only basic set of static checks ("true")                 | false                                    |      |
+| build_system_changed_in_pyproject_toml                  | When builds system dependencies changed in pyproject.toml changed in the PR.                           | false                                    |      |
+| ci-image-build                                          | Whether CI image build is needed                                                                       | true                                     |      |
+| core-test-types-list-as-strings-in-json                 | Which test types should be run for unit tests for core                                                 | API Always Providers                     | *    |
+| debug-resources                                         | Whether resources usage should be printed during parallel job execution ("true"/ "false")              | false                                    |      |
+| default-branch                                          | Which branch is default for the build ("main" for main branch, "v2-4-test" for 2.4 line etc.)          | main                                     |      |
+| default-constraints-branch                              | Which branch is default for the build ("constraints-main" for main branch, "constraints-2-4" etc.)     | constraints-main                         |      |
+| default-helm-version                                    | Which Helm version to use as default                                                                   | v3.9.4                                   |      |
+| default-kind-version                                    | Which Kind version to use as default                                                                   | v0.16.0                                  |      |
+| default-kubernetes-version                              | Which Kubernetes version to use as default                                                             | v1.25.2                                  |      |
+| default-mysql-version                                   | Which MySQL version to use as default                                                                  | 5.7                                      |      |
+| default-postgres-version                                | Which Postgres version to use as default                                                               | 10                                       |      |
+| default-python-version                                  | Which Python version to use as default                                                                 | 3.10                                     |      |
+| disable-airflow-repo-cache                              | Disables cache of the repo main cache in CI - aiflow will be installed without main installation cache | true                                     |      |
+| docker-cache                                            | Which cache should be used for images ("registry", "local" , "disabled")                               | registry                                 |      |
+| docs-build                                              | Whether to build documentation ("true"/"false")                                                        | true                                     |      |
+| docs-list-as-string                                     | What filter to apply to docs building - based on which documentation packages should be built          | apache-airflow helm-chart google         | *    |
+| excluded-providers-as-string   c                        | List of providers that should be excluded from the build as space-separated string                     | amazon google                            | *    |
+| force-pip                                               | Whether pip should be forced in the image build instead of uv ("true"/"false")                         | false                                    |      |
+| full-tests-needed                                       | Whether this build runs complete set of tests or only subset (for faster PR builds) \[1\]              | false                                    |      |
+| generated-dependencies-changed                          | Whether generated dependencies have changed ("true"/"false")                                           | false                                    |      |
+| has-migrations                                          | Whether the PR has migrations ("true"/"false")                                                         | false                                    |      |
+| hatch-build-changed                                     | When hatch build.py changed in the PR.                                                                 | false                                    |      |
+| helm-test-packages-list-as-string                       | List of helm packages to test as JSON array                                                            | \["airflow_aux", "airflow_core"\]        | *    |
+| helm-version                                            | Which Helm version to use for tests                                                                    | v3.15.3                                  |      |
+| include-success-outputs                                 | Whether to include outputs of successful parallel tests ("true"/"false")                               | false                                    |      |
+| individual-providers-test-types-list-as-strings-in-json | Which test types should be run for unit tests for providers (individually listed)                      | Providers[\amazon\] Providers\[google\]  | *    |
+| is-committer-build                                      | Whether the build is triggered by a committer                                                          | false                                    |      |
+| is-legacy-ui-api-labeled                                | Whether the PR is labeled as legacy UI/API                                                             | false                                    |      |
+| kind-version                                            | Which Kind version to use for tests                                                                    | v0.24.0                                  |      |
+| kubernetes-combos-list-as-string                        | All combinations of Python version and Kubernetes version to use for tests as space-separated string   | 3.10-v1.25.2 3.11-v1.28.13               | *    |
+| kubernetes-versions                                     | All Kubernetes versions to use for tests as JSON array                                                 | \['v1.25.2'\]                            |      |
+| kubernetes-versions-list-as-string                      | All Kubernetes versions to use for tests as space-separated string                                     | v1.25.2                                  | *    |
+| latest-versions-only                                    | If set, the number of Python, Kubernetes, DB versions will be limited to the latest ones.              | false                                    |      |
+| mypy-checks                                             | List of folders to be considered for mypy checks                                                       | \["airflow_aux", "airflow_core"\]        |      |
+| mysql-exclude                                           | Which versions of MySQL to exclude for tests as JSON array                                             | []                                       |      |
+| mysql-versions                                          | Which versions of MySQL to use for tests as JSON array                                                 | \['8.0'\]                                |      |
+| needs-api-codegen                                       | Whether "api-codegen" are needed to run ("true"/"false")                                               | true                                     |      |
+| needs-api-tests                                         | Whether "api-tests" are needed to run ("true"/"false")                                                 | true                                     |      |
+| needs-helm-tests                                        | Whether Helm tests are needed to run ("true"/"false")                                                  | true                                     |      |
+| needs-javascript-scans                                  | Whether javascript CodeQL scans should be run ("true"/"false")                                         | true                                     |      |
+| needs-mypy                                              | Whether mypy check is supposed to run in this build                                                    | true                                     |      |
+| needs-python-scans                                      | Whether Python CodeQL scans should be run ("true"/"false")                                             | true                                     |      |
+| only-new-ui-files                                       | Whether only new UI files are present in the PR ("true"/"false")                                       | false                                    |      |
+| postgres-exclude                                        | Which versions of Postgres to exclude for tests as JSON array                                          | []                                       |      |
+| postgres-versions                                       | Which versions of Postgres to use for tests as JSON array                                              | \['12'\]                                 |      |
+| prod-image-build                                        | Whether PROD image build is needed                                                                     | true                                     |      |
+| providers-compatibility-tests-matrix                    | Matrix of providers compatibility tests: (python_version, airflow_version, removed_providers)          | \[{}\]                                   |      |
+| providers-test-types-list-as-strings-in-json            | Which test types should be run for unit tests for providers                                            | Providers Providers\[-google\]           | *    |
+| pyproject-toml-changed                                  | When pyproject.toml changed in the PR.                                                                 | false                                    |      |
+| python-versions                                         | List of python versions to use for that build                                                          | \['3.10'\]                               |      |
+| python-versions-list-as-string                          | Which versions of MySQL to use for tests as space-separated string                                     | 3.10                                     | *    |
+| run-amazon-tests                                        | Whether Amazon tests should be run ("true"/"false")                                                    | true                                     |      |
+| run-kubernetes-tests                                    | Whether Kubernetes tests should be run ("true"/"false")                                                | true                                     |      |
+| run-system-tests                                        | Whether system tests should be run ("true"/"false")                                                    | true                                     |      |
+| run-task-sdk-tests                                      | Whether Task SDK tests should be run ("true"/"false")                                                  | true                                     |      |
+| run-tests                                               | Whether unit tests should be run ("true"/"false")                                                      | true                                     |      |
+| run-ui-tests                                            | Whether UI tests should be run ("true"/"false")                                                        | true                                     |      |
+| run-www-tests                                           | Whether Legacy WWW tests should be run ("true"/"false")                                                | true                                     |      |
+| amd-runners                                             | List of labels assigned for runners for that build for public AMD runners                              | \["ubuntu-22.04"\]                       |      |
+| arm-runners                                             | List of labels assigned for runners for that build for public ARM runners                              | \["ubuntu-22.04-arm"\]                   |      |
+| selected-providers-list-as-string                       | List of providers affected when they are selectively affected.                                         | airbyte http                             | *    |
+| skip-pre-commits                                        | Which pre-commits should be skipped during the static-checks run                                       | flynt,identity                           |      |
+| skip-providers-tests                                    | When provider tests should be skipped (on non-main branch or when no provider changes detected)        | true                                     |      |
+| sqlite-exclude                                          | Which versions of Sqlite to exclude for tests as JSON array                                            | []                                       |      |
+| testable-core-integrations                              | List of core integrations that are testable in the build as JSON array                                 | \['celery', 'kerberos'\]                 |      |
+| testable-providers-integrations                         | List of core integrations that are testable in the build as JSON array                                 | \['mongo', 'kafka'\]                     |      |
+| upgrade-to-newer-dependencies                           | Whether the image build should attempt to upgrade all dependencies (true/false or commit hash)         | false                                    |      |
 
 
 [1] Note for deciding if `full tests needed` mode is enabled and provider.yaml files.
diff --git a/dev/breeze/doc/ci/07_running_ci_locally.md b/dev/breeze/doc/ci/07_running_ci_locally.md
index 6724008b8cc99..d71cddac74adc 100644
--- a/dev/breeze/doc/ci/07_running_ci_locally.md
+++ b/dev/breeze/doc/ci/07_running_ci_locally.md
@@ -76,14 +76,14 @@ this will change soon.
 To load the image from specific PR, you can use the following command:
 
 ```bash
-breeze ci-image load --from-pr 12345 --python 3.9 --github-token <your_github_token>
+breeze ci-image load --from-pr 12345 --python 3.10 --github-token <your_github_token>
 ```
 
 To load the image from specific run (for example 12538475388),
 you can use the following command, find the run id from GitHub action runs.
 
 ```bash
-breeze ci-image load --from-run 12538475388 --python 3.9 --github-token <your_github_token>
+breeze ci-image load --from-run 12538475388 --python 3.10 --github-token <your_github_token>
 ```
 
 After you load the image, you can reproduce the very exact environment that was used in the CI run by
diff --git a/dev/breeze/pyproject.toml b/dev/breeze/pyproject.toml
index 722ed77772b44..4d22bbc4e4ef7 100644
--- a/dev/breeze/pyproject.toml
+++ b/dev/breeze/pyproject.toml
@@ -36,7 +36,6 @@ classifiers = [
     "Intended Audience :: Developers",
     "Framework :: Apache Airflow",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
@@ -88,7 +87,7 @@ name = "airflow_breeze"
 
 [tool.black]
 line-length = 110
-target-version = ['py39', 'py310', 'py311', 'py312']
+target-version = ['py310', 'py311', 'py312']
 
 [tool.pytest.ini_options]
 addopts = "-rasl --verbosity=2 -p no:flaky -p no:nose -p no:legacypath"
diff --git a/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py b/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py
index 64f652ff3cf0c..8fff8b0693a41 100644
--- a/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py
@@ -194,16 +194,7 @@ def kill_process_group(build_process_group_id: int):
 
 
 def get_exitcode(status: int) -> int:
-    # In Python 3.9+ we will be able to use
-    # os.waitstatus_to_exitcode(status) - see https://github.com/python/cpython/issues/84275
-    # but until then we need to do this ugly conversion
-    if os.WIFSIGNALED(status):
-        return -os.WTERMSIG(status)
-    if os.WIFEXITED(status):
-        return os.WEXITSTATUS(status)
-    if os.WIFSTOPPED(status):
-        return -os.WSTOPSIG(status)
-    return 1
+    return os.waitstatus_to_exitcode(status)
 
 
 option_upgrade_to_newer_dependencies = click.option(
@@ -1005,7 +996,7 @@ def import_mount_cache(
     make_sure_builder_configured(params=BuildCiParams(builder=builder))
     dockerfile = """
     # syntax=docker/dockerfile:1.4
-    FROM python:3.9-slim-bookworm
+    FROM python:3.10-slim-bookworm
     ARG TARGETARCH
     ARG DEPENDENCY_CACHE_EPOCH=<REPLACE_FROM_DOCKER_CI>
     COPY cache.tar.gz /root/.cache.tar.gz
diff --git a/dev/check_files.py b/dev/check_files.py
index 91861422d29e0..b651c06f3ad38 100644
--- a/dev/check_files.py
+++ b/dev/check_files.py
@@ -31,7 +31,7 @@
 from rich import print
 
 PROVIDERS_DOCKER = """\
-FROM ghcr.io/apache/airflow/main/ci/python3.9
+FROM ghcr.io/apache/airflow/main/ci/python3.10
 RUN cd airflow-core; uv sync --no-sources
 
 # Install providers
@@ -39,7 +39,7 @@
 """
 
 AIRFLOW_DOCKER = """\
-FROM python:3.9
+FROM python:3.10
 
 # Upgrade
 RUN pip install "apache-airflow=={}"
diff --git a/dev/provider_db_inventory.py b/dev/provider_db_inventory.py
index 296938891bf21..2464b45c433b3 100755
--- a/dev/provider_db_inventory.py
+++ b/dev/provider_db_inventory.py
@@ -18,7 +18,7 @@
 
 # PEP 723 compliant inline script metadata
 # /// script
-# requires-python = ">=3.9"
+# requires-python = ">=3.10"
 # dependencies = [
 #   "rich",
 #   "pyyaml",
diff --git a/dev/refresh_images.sh b/dev/refresh_images.sh
index 46700cd75ee4e..9f39a51a87f3f 100755
--- a/dev/refresh_images.sh
+++ b/dev/refresh_images.sh
@@ -47,7 +47,7 @@ done
 #
 #mv -v ./dist/*.whl ./docker-context-files && chmod a+r ./docker-context-files/*
 #
-#for PYTHON in 3.9 3.10 3.11 3.12
+#for PYTHON in 3.10 3.11 3.12
 #do
 #    breeze prod-image build \
 #         --builder airflow_cache \
diff --git a/docker-stack-docs/build-arg-ref.rst b/docker-stack-docs/build-arg-ref.rst
index 776d50d280dd3..0e7125d6504b4 100644
--- a/docker-stack-docs/build-arg-ref.rst
+++ b/docker-stack-docs/build-arg-ref.rst
@@ -27,56 +27,56 @@ Basic arguments
 
 Those are the most common arguments that you use when you want to build a custom image.
 
-+------------------------------------------+------------------------------------------+---------------------------------------------+
-| Build argument                           | Default value                            | Description                                 |
-+==========================================+==========================================+=============================================+
-| ``PYTHON_BASE_IMAGE``                    | ``python:3.9-slim-bookworm``             | Base python image.                          |
-+------------------------------------------+------------------------------------------+---------------------------------------------+
-| ``AIRFLOW_VERSION``                      | :subst-code:`|airflow-version|`          | version of Airflow.                         |
-+------------------------------------------+------------------------------------------+---------------------------------------------+
-| ``AIRFLOW_EXTRAS``                       | (see below the table)                    | Default extras with which Airflow is        |
-|                                          |                                          | installed.                                  |
-+------------------------------------------+------------------------------------------+---------------------------------------------+
-| ``ADDITIONAL_AIRFLOW_EXTRAS``            |                                          | Optional additional extras with which       |
-|                                          |                                          | Airflow is installed.                       |
-+------------------------------------------+------------------------------------------+---------------------------------------------+
-| ``AIRFLOW_HOME``                         | ``/opt/airflow``                         | Airflow's HOME (that's where logs and       |
-|                                          |                                          | SQLite databases are stored).               |
-+------------------------------------------+------------------------------------------+---------------------------------------------+
-| ``AIRFLOW_USER_HOME_DIR``                | ``/home/airflow``                        | Home directory of the Airflow user.         |
-+------------------------------------------+------------------------------------------+---------------------------------------------+
-| ``AIRFLOW_PIP_VERSION``                  | ``<LATEST_AVAILABLE_IN_PYPI>``           |  PIP version used.                          |
-+------------------------------------------+------------------------------------------+---------------------------------------------+
-| ``AIRFLOW_UV_VERSION``                   | ``<LATEST_AVAILABLE_IN_PYPI>``           |  UV version used.                           |
-+------------------------------------------+------------------------------------------+---------------------------------------------+
-| ``AIRFLOW_USE_UV``                       | ``false``                                |  Whether to use UV to build the image.      |
-|                                          |                                          |  This is an experimental feature.           |
-+------------------------------------------+------------------------------------------+---------------------------------------------+
-| ``UV_HTTP_TIMEOUT``                      | ``300``                                  |  Timeout in seconds for UV pull requests.   |
-+------------------------------------------+------------------------------------------+---------------------------------------------+
-| ``ADDITIONAL_PIP_INSTALL_FLAGS``         |                                          | additional ``pip`` flags passed to the      |
-|                                          |                                          | installation commands (except when          |
-|                                          |                                          | reinstalling ``pip`` itself)                |
-+------------------------------------------+------------------------------------------+---------------------------------------------+
-| ``PIP_PROGRESS_BAR``                     | ``on``                                   | Progress bar for PIP installation           |
-+------------------------------------------+------------------------------------------+---------------------------------------------+
-| ``AIRFLOW_UID``                          | ``50000``                                | Airflow user UID.                           |
-+------------------------------------------+------------------------------------------+---------------------------------------------+
-| ``AIRFLOW_CONSTRAINTS``                  | ``constraints``                          | Type of constraints to build the image.     |
-|                                          |                                          | This can be ``constraints`` for regular     |
-|                                          |                                          | images or ``constraints-no-providers`` for  |
-|                                          |                                          | slim images.                                |
-+------------------------------------------+------------------------------------------+---------------------------------------------+
-| ``AIRFLOW_CONSTRAINTS_REFERENCE``        |                                          | Reference (branch or tag) from GitHub       |
-|                                          |                                          | where constraints file is taken from        |
-|                                          |                                          | It can be ``constraints-main`` or           |
-|                                          |                                          | ``constraints-2-0`` for                     |
-|                                          |                                          | 2.0.* installation. In case of building     |
-|                                          |                                          | specific version you want to point it       |
-|                                          |                                          | to specific tag, for example                |
-|                                          |                                          | :subst-code:`constraints-|airflow-version|`.|
-|                                          |                                          | Auto-detected if empty.                     |
-+------------------------------------------+------------------------------------------+---------------------------------------------+
++------------------------------------------+-------------------------------------------+---------------------------------------------+
+| Build argument                           | Default value                             | Description                                 |
++==========================================+===========================================+=============================================+
+| ``PYTHON_BASE_IMAGE``                    | ``python:3.10-slim-bookworm``             | Base python image.                          |
++------------------------------------------+-------------------------------------------+---------------------------------------------+
+| ``AIRFLOW_VERSION``                      | :subst-code:`|airflow-version|`           | version of Airflow.                         |
++------------------------------------------+-------------------------------------------+---------------------------------------------+
+| ``AIRFLOW_EXTRAS``                       | (see below the table)                     | Default extras with which Airflow is        |
+|                                          |                                           | installed.                                  |
++------------------------------------------+-------------------------------------------+---------------------------------------------+
+| ``ADDITIONAL_AIRFLOW_EXTRAS``            |                                           | Optional additional extras with which       |
+|                                          |                                           | Airflow is installed.                       |
++------------------------------------------+-------------------------------------------+---------------------------------------------+
+| ``AIRFLOW_HOME``                         | ``/opt/airflow``                          | Airflow's HOME (that's where logs and       |
+|                                          |                                           | SQLite databases are stored).               |
++------------------------------------------+-------------------------------------------+---------------------------------------------+
+| ``AIRFLOW_USER_HOME_DIR``                | ``/home/airflow``                         | Home directory of the Airflow user.         |
++------------------------------------------+-------------------------------------------+---------------------------------------------+
+| ``AIRFLOW_PIP_VERSION``                  | ``<LATEST_AVAILABLE_IN_PYPI>``            |  PIP version used.                          |
++------------------------------------------+-------------------------------------------+---------------------------------------------+
+| ``AIRFLOW_UV_VERSION``                   | ``<LATEST_AVAILABLE_IN_PYPI>``            |  UV version used.                           |
++------------------------------------------+-------------------------------------------+---------------------------------------------+
+| ``AIRFLOW_USE_UV``                       | ``false``                                 |  Whether to use UV to build the image.      |
+|                                          |                                           |  This is an experimental feature.           |
++------------------------------------------+-------------------------------------------+---------------------------------------------+
+| ``UV_HTTP_TIMEOUT``                      | ``300``                                   |  Timeout in seconds for UV pull requests.   |
++------------------------------------------+-------------------------------------------+---------------------------------------------+
+| ``ADDITIONAL_PIP_INSTALL_FLAGS``         |                                           | additional ``pip`` flags passed to the      |
+|                                          |                                           | installation commands (except when          |
+|                                          |                                           | reinstalling ``pip`` itself)                |
++------------------------------------------+-------------------------------------------+---------------------------------------------+
+| ``PIP_PROGRESS_BAR``                     | ``on``                                    | Progress bar for PIP installation           |
++------------------------------------------+-------------------------------------------+---------------------------------------------+
+| ``AIRFLOW_UID``                          | ``50000``                                 | Airflow user UID.                           |
++------------------------------------------+-------------------------------------------+---------------------------------------------+
+| ``AIRFLOW_CONSTRAINTS``                  | ``constraints``                           | Type of constraints to build the image.     |
+|                                          |                                           | This can be ``constraints`` for regular     |
+|                                          |                                           | images or ``constraints-no-providers`` for  |
+|                                          |                                           | slim images.                                |
++------------------------------------------+-------------------------------------------+---------------------------------------------+
+| ``AIRFLOW_CONSTRAINTS_REFERENCE``        |                                           | Reference (branch or tag) from GitHub       |
+|                                          |                                           | where constraints file is taken from        |
+|                                          |                                           | It can be ``constraints-main`` or           |
+|                                          |                                           | ``constraints-2-0`` for                     |
+|                                          |                                           | 2.0.* installation. In case of building     |
+|                                          |                                           | specific version you want to point it       |
+|                                          |                                           | to specific tag, for example                |
+|                                          |                                           | :subst-code:`constraints-|airflow-version|`.|
+|                                          |                                           | Auto-detected if empty.                     |
++------------------------------------------+-------------------------------------------+---------------------------------------------+
 
 .. note::
 
diff --git a/docker-stack-docs/build.rst b/docker-stack-docs/build.rst
index 2876cbe319b85..620392b360e03 100644
--- a/docker-stack-docs/build.rst
+++ b/docker-stack-docs/build.rst
@@ -215,7 +215,7 @@ In the simplest case building your image consists of those steps:
 
 1) Create your own ``Dockerfile`` (name it ``Dockerfile``) where you add:
 
-* information what your image should be based on (for example ``FROM: apache/airflow:|airflow-version|-python3.9``
+* information what your image should be based on (for example ``FROM: apache/airflow:|airflow-version|-python3.10``
 
 * additional steps that should be executed in your image (typically in the form of ``RUN <command>``)
 
@@ -313,17 +313,17 @@ There are two types of images you can extend your image from:
 
 Naming conventions for the images:
 
-+----------------+-----------------------+---------------------------------+--------------------------------------+
-| Image          | Python                | Standard image                  | Slim image                           |
-+================+=======================+=================================+======================================+
-| Latest default | 3.12                  | apache/airflow:latest           | apache/airflow:slim-latest           |
-+----------------+-----------------------+---------------------------------+--------------------------------------+
-| Default        | 3.12                  | apache/airflow:X.Y.Z            | apache/airflow:slim-X.Y.Z            |
-+----------------+-----------------------+---------------------------------+--------------------------------------+
-| Latest         | 3.9,3.10,3.11,3.12    | apache/airflow:latest-pythonN.M | apache/airflow:slim-latest-pythonN.M |
-+----------------+-----------------------+---------------------------------+--------------------------------------+
-| Specific       | 3.9,3.10,3.11,3.12    | apache/airflow:X.Y.Z-pythonN.M  | apache/airflow:slim-X.Y.Z-pythonN.M  |
-+----------------+-----------------------+---------------------------------+--------------------------------------+
++----------------+-------------------+---------------------------------+--------------------------------------+
+| Image          | Python            | Standard image                  | Slim image                           |
++================+===================+=================================+======================================+
+| Latest default | 3.12              | apache/airflow:latest           | apache/airflow:slim-latest           |
++----------------+-------------------+---------------------------------+--------------------------------------+
+| Default        | 3.12              | apache/airflow:X.Y.Z            | apache/airflow:slim-X.Y.Z            |
++----------------+-------------------+---------------------------------+--------------------------------------+
+| Latest         | 3.10,3.11,3.12    | apache/airflow:latest-pythonN.M | apache/airflow:slim-latest-pythonN.M |
++----------------+-------------------+---------------------------------+--------------------------------------+
+| Specific       | 3.10,3.11,3.12    | apache/airflow:X.Y.Z-pythonN.M  | apache/airflow:slim-X.Y.Z-pythonN.M  |
++----------------+-------------------+---------------------------------+--------------------------------------+
 
 * The "latest" image is always the latest released stable version available.
 
@@ -714,7 +714,7 @@ Building from PyPI packages
 
 This is the basic way of building the custom images from sources.
 
-The following example builds the production image in version ``3.9`` with latest PyPI-released Airflow,
+The following example builds the production image in version ``3.10`` with latest PyPI-released Airflow,
 with default set of Airflow extras and dependencies. The latest PyPI-released Airflow constraints are used automatically.
 
 .. exampleinclude:: docker-examples/customizing/stable-airflow.sh
@@ -722,7 +722,7 @@ with default set of Airflow extras and dependencies. The latest PyPI-released Ai
     :start-after: [START build]
     :end-before: [END build]
 
-The following example builds the production image in version ``3.9`` with default extras from ``2.3.0`` Airflow
+The following example builds the production image in version ``3.10`` with default extras from ``2.3.0`` Airflow
 package. The ``2.3.0`` constraints are used automatically.
 
 .. exampleinclude:: docker-examples/customizing/pypi-selected-version.sh
@@ -730,7 +730,7 @@ package. The ``2.3.0`` constraints are used automatically.
     :start-after: [START build]
     :end-before: [END build]
 
-The following example builds the production image in version ``3.9`` with additional Airflow extras
+The following example builds the production image in version ``3.10`` with additional Airflow extras
 (``mssql,hdfs``) from ``2.3.0`` PyPI package, and additional dependency (``oauth2client``).
 
 .. exampleinclude:: docker-examples/customizing/pypi-extras-and-deps.sh
@@ -757,7 +757,7 @@ have more complex dependencies to build.
 Building optimized images
 .........................
 
-The following example builds the production image in version ``3.9`` with additional Airflow extras from
+The following example builds the production image in version ``3.10`` with additional Airflow extras from
 PyPI package but it includes additional apt dev and runtime dependencies.
 
 The dev dependencies are those that require ``build-essential`` and usually need to involve recompiling
@@ -815,7 +815,7 @@ a branch or tag in your repository and use the tag or branch in the URL that you
 In case of GitHub builds you need to pass the constraints reference manually in case you want to use
 specific constraints, otherwise the default ``constraints-main`` is used.
 
-The following example builds the production image in version ``3.9`` with default extras from the latest main version and
+The following example builds the production image in version ``3.10`` with default extras from the latest main version and
 constraints are taken from latest version of the constraints-main branch in GitHub.
 
 .. exampleinclude:: docker-examples/customizing/github-main.sh
diff --git a/docker-stack-docs/docker-examples/customizing/add-build-essential-custom.sh b/docker-stack-docs/docker-examples/customizing/add-build-essential-custom.sh
index 9426d8925045b..c19be12d4e5a3 100755
--- a/docker-stack-docs/docker-examples/customizing/add-build-essential-custom.sh
+++ b/docker-stack-docs/docker-examples/customizing/add-build-essential-custom.sh
@@ -31,7 +31,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.10-slim-bookworm" \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --build-arg ADDITIONAL_PYTHON_DEPS="mpi4py==3.1.6" \
     --build-arg ADDITIONAL_DEV_APT_DEPS="libopenmpi-dev" \
diff --git a/docker-stack-docs/docker-examples/customizing/custom-sources.sh b/docker-stack-docs/docker-examples/customizing/custom-sources.sh
index 311ba5c4d33ef..33d7bb7cff313 100755
--- a/docker-stack-docs/docker-examples/customizing/custom-sources.sh
+++ b/docker-stack-docs/docker-examples/customizing/custom-sources.sh
@@ -32,7 +32,7 @@ export DOCKER_BUILDKIT=1
 docker build . -f Dockerfile \
     --pull \
     --platform 'linux/amd64' \
-    --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.10-slim-bookworm" \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --build-arg ADDITIONAL_AIRFLOW_EXTRAS="slack,odbc" \
     --build-arg ADDITIONAL_PYTHON_DEPS=" \
diff --git a/docker-stack-docs/docker-examples/customizing/github-different-repository.sh b/docker-stack-docs/docker-examples/customizing/github-different-repository.sh
index 30d4c40ef808a..82a7e9870fd38 100755
--- a/docker-stack-docs/docker-examples/customizing/github-different-repository.sh
+++ b/docker-stack-docs/docker-examples/customizing/github-different-repository.sh
@@ -29,7 +29,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.10-slim-bookworm" \
     --build-arg AIRFLOW_INSTALLATION_METHOD="apache-airflow @ https://github.com/potiuk/airflow/archive/main.tar.gz" \
     --build-arg AIRFLOW_CONSTRAINTS_REFERENCE="constraints-main" \
     --build-arg CONSTRAINTS_GITHUB_REPOSITORY="potiuk/airflow" \
diff --git a/docker-stack-docs/docker-examples/customizing/github-main.sh b/docker-stack-docs/docker-examples/customizing/github-main.sh
index 19ed9e7955da8..8b4e55523fd81 100755
--- a/docker-stack-docs/docker-examples/customizing/github-main.sh
+++ b/docker-stack-docs/docker-examples/customizing/github-main.sh
@@ -30,7 +30,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.10-slim-bookworm" \
     --build-arg AIRFLOW_INSTALLATION_METHOD="apache-airflow @ https://github.com/apache/airflow/archive/main.tar.gz" \
     --build-arg AIRFLOW_CONSTRAINTS_REFERENCE="constraints-main" \
     --tag "my-github-main:0.0.1"
diff --git a/docker-stack-docs/docker-examples/customizing/github-v2-2-test.sh b/docker-stack-docs/docker-examples/customizing/github-v2-2-test.sh
index 14a0cb01c75ee..88e5bb7f55ec6 100755
--- a/docker-stack-docs/docker-examples/customizing/github-v2-2-test.sh
+++ b/docker-stack-docs/docker-examples/customizing/github-v2-2-test.sh
@@ -31,7 +31,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.10-slim-bookworm" \
     --build-arg AIRFLOW_INSTALLATION_METHOD="apache-airflow @ https://github.com/apache/airflow/archive/v2-2-test.tar.gz" \
     --build-arg AIRFLOW_CONSTRAINTS_REFERENCE="constraints-2-2" \
     --tag "my-github-v2-2:0.0.1"
diff --git a/docker-stack-docs/docker-examples/customizing/pypi-dev-runtime-deps.sh b/docker-stack-docs/docker-examples/customizing/pypi-dev-runtime-deps.sh
index 64be44ba6a217..aa9929d97216a 100755
--- a/docker-stack-docs/docker-examples/customizing/pypi-dev-runtime-deps.sh
+++ b/docker-stack-docs/docker-examples/customizing/pypi-dev-runtime-deps.sh
@@ -32,7 +32,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.10-slim-bookworm" \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --build-arg ADDITIONAL_AIRFLOW_EXTRAS="jdbc" \
     --build-arg ADDITIONAL_PYTHON_DEPS="pandas" \
diff --git a/docker-stack-docs/docker-examples/customizing/pypi-extras-and-deps.sh b/docker-stack-docs/docker-examples/customizing/pypi-extras-and-deps.sh
index 4d3baa7735cc1..c86b2385289d5 100755
--- a/docker-stack-docs/docker-examples/customizing/pypi-extras-and-deps.sh
+++ b/docker-stack-docs/docker-examples/customizing/pypi-extras-and-deps.sh
@@ -31,7 +31,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.10-slim-bookworm" \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --build-arg ADDITIONAL_AIRFLOW_EXTRAS="mssql,hdfs" \
     --build-arg ADDITIONAL_PYTHON_DEPS="oauth2client" \
diff --git a/docker-stack-docs/docker-examples/customizing/pypi-selected-version.sh b/docker-stack-docs/docker-examples/customizing/pypi-selected-version.sh
index 8b4b69a4db1f2..182b61f255e90 100755
--- a/docker-stack-docs/docker-examples/customizing/pypi-selected-version.sh
+++ b/docker-stack-docs/docker-examples/customizing/pypi-selected-version.sh
@@ -30,7 +30,7 @@ export AIRFLOW_VERSION=2.3.4
 export DOCKER_BUILDKIT=1
 
 docker build . \
-    --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.10-slim-bookworm" \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --tag "my-pypi-selected-version:0.0.1"
 # [END build]
diff --git a/docker-stack-docs/docker-examples/restricted/restricted_environments.sh b/docker-stack-docs/docker-examples/restricted/restricted_environments.sh
index a41ebacf77156..d4e76e4ea4168 100755
--- a/docker-stack-docs/docker-examples/restricted/restricted_environments.sh
+++ b/docker-stack-docs/docker-examples/restricted/restricted_environments.sh
@@ -29,8 +29,8 @@ mkdir -p docker-context-files
 export AIRFLOW_VERSION="2.5.3"
 rm docker-context-files/*.whl docker-context-files/*.tar.gz docker-context-files/*.txt || true
 
-curl -Lo "docker-context-files/constraints-3.9.txt" \
-    "https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-3.9.txt"
+curl -Lo "docker-context-files/constraints-3.10.txt" \
+    "https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-3.10.txt"
 
 echo
 echo "Make sure you use the right python version here (should be same as in constraints)!"
@@ -38,7 +38,7 @@ echo
 python --version
 
 pip download --dest docker-context-files \
-    --constraint docker-context-files/constraints-3.9.txt  \
+    --constraint docker-context-files/constraints-3.10.txt  \
     "apache-airflow[async,celery,elasticsearch,kubernetes,postgres,redis,ssh,statsd,virtualenv]==${AIRFLOW_VERSION}"
 # [END download]
 
@@ -47,7 +47,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.10-slim-bookworm" \
     --build-arg AIRFLOW_INSTALLATION_METHOD="apache-airflow" \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --build-arg INSTALL_MYSQL_CLIENT="false" \
@@ -55,7 +55,7 @@ docker build . \
     --build-arg INSTALL_POSTGRES_CLIENT="true" \
     --build-arg DOCKER_CONTEXT_FILES="docker-context-files" \
     --build-arg INSTALL_DISTRIBUTIONS_FROM_CONTEXT="true" \
-    --build-arg AIRFLOW_CONSTRAINTS_LOCATION="/docker-context-files/constraints-3.9.txt" \
+    --build-arg AIRFLOW_CONSTRAINTS_LOCATION="/docker-context-files/constraints-3.10.txt" \
     --tag airflow-my-restricted-environment:0.0.1
 # [END build]
 
diff --git a/docker-stack-docs/entrypoint.rst b/docker-stack-docs/entrypoint.rst
index 311ae098bb53e..3ddc7d479e6ba 100644
--- a/docker-stack-docs/entrypoint.rst
+++ b/docker-stack-docs/entrypoint.rst
@@ -132,7 +132,7 @@ if you specify extra arguments. For example:
 
 .. code-block:: bash
 
-  docker run -it apache/airflow:3.1.0-python3.9 bash -c "ls -la"
+  docker run -it apache/airflow:3.1.0-python3.10 bash -c "ls -la"
   total 16
   drwxr-xr-x 4 airflow root 4096 Jun  5 18:12 .
   drwxr-xr-x 1 root    root 4096 Jun  5 18:12 ..
@@ -144,7 +144,7 @@ you pass extra parameters. For example:
 
 .. code-block:: bash
 
-  > docker run -it apache/airflow:3.1.0-python3.9 python -c "print('test')"
+  > docker run -it apache/airflow:3.1.0-python3.10 python -c "print('test')"
   test
 
 If first argument equals to ``airflow`` - the rest of the arguments is treated as an Airflow command
@@ -152,13 +152,13 @@ to execute. Example:
 
 .. code-block:: bash
 
-   docker run -it apache/airflow:3.1.0-python3.9 airflow webserver
+   docker run -it apache/airflow:3.1.0-python3.10 airflow webserver
 
 If there are any other arguments - they are simply passed to the "airflow" command
 
 .. code-block:: bash
 
-  > docker run -it apache/airflow:3.1.0-python3.9 help
+  > docker run -it apache/airflow:3.1.0-python3.10 help
     usage: airflow [-h] GROUP_OR_COMMAND ...
 
     positional arguments:
@@ -363,7 +363,7 @@ database and creating an ``admin/admin`` Admin user with the following command:
     --env "_AIRFLOW_DB_MIGRATE=true" \
     --env "_AIRFLOW_WWW_USER_CREATE=true" \
     --env "_AIRFLOW_WWW_USER_PASSWORD=admin" \
-      apache/airflow:3.1.0-python3.9 webserver
+      apache/airflow:3.1.0-python3.10 webserver
 
 
 .. code-block:: bash
@@ -372,7 +372,7 @@ database and creating an ``admin/admin`` Admin user with the following command:
     --env "_AIRFLOW_DB_MIGRATE=true" \
     --env "_AIRFLOW_WWW_USER_CREATE=true" \
     --env "_AIRFLOW_WWW_USER_PASSWORD_CMD=echo admin" \
-      apache/airflow:3.1.0-python3.9 webserver
+      apache/airflow:3.1.0-python3.10 webserver
 
 The commands above perform initialization of the SQLite database, create admin user with admin password
 and Admin role. They also forward local port ``8080`` to the webserver port and finally start the webserver.
@@ -412,6 +412,6 @@ Example:
     --env "_AIRFLOW_DB_MIGRATE=true" \
     --env "_AIRFLOW_WWW_USER_CREATE=true" \
     --env "_AIRFLOW_WWW_USER_PASSWORD_CMD=echo admin" \
-      apache/airflow:3.1.0-python3.9 webserver
+      apache/airflow:3.1.0-python3.10 webserver
 
 This method is only available starting from Docker image of Airflow 2.1.1 and above.
diff --git a/docker-stack-docs/pyproject.toml b/docker-stack-docs/pyproject.toml
index 2258fa887542c..c59a56f8a08e2 100644
--- a/docker-stack-docs/pyproject.toml
+++ b/docker-stack-docs/pyproject.toml
@@ -24,7 +24,7 @@ build-backend = "hatchling.build"
 [project]
 name = "apache-airflow-docker-stack"
 description = "Programmatically author, schedule and monitor data pipelines"
-requires-python = "~=3.9,<3.13"
+requires-python = "~=3.10,<3.13"
 authors = [
     { name = "Apache Software Foundation", email = "dev@airflow.apache.org" },
 ]
@@ -40,7 +40,6 @@ classifiers = [
     "Intended Audience :: Developers",
     "Intended Audience :: System Administrators",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
diff --git a/docker-tests/pyproject.toml b/docker-tests/pyproject.toml
index c242dc53e2789..b0ab22e2123de 100644
--- a/docker-tests/pyproject.toml
+++ b/docker-tests/pyproject.toml
@@ -26,7 +26,7 @@ description = "Docker tests for Apache Airflow"
 classifiers = [
     "Private :: Do Not Upload",
 ]
-requires-python = "~=3.9,<3.13"
+requires-python = "~=3.10,<3.13"
 authors = [
     { name = "Apache Software Foundation", email = "dev@airflow.apache.org" },
 ]
diff --git a/docker-tests/tests/docker_tests/constants.py b/docker-tests/tests/docker_tests/constants.py
index 99ffb351c2dab..1ec467343d86d 100644
--- a/docker-tests/tests/docker_tests/constants.py
+++ b/docker-tests/tests/docker_tests/constants.py
@@ -21,6 +21,6 @@
 
 AIRFLOW_ROOT_PATH = Path(__file__).resolve().parents[3]
 
-DEFAULT_PYTHON_MAJOR_MINOR_VERSION = "3.9"
+DEFAULT_PYTHON_MAJOR_MINOR_VERSION = "3.10"
 DEFAULT_DOCKER_IMAGE = f"ghcr.io/apache/airflow/main/prod/python{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}:latest"
 DOCKER_IMAGE = os.environ.get("DOCKER_IMAGE") or DEFAULT_DOCKER_IMAGE
diff --git a/docker-tests/tests/docker_tests/docker_utils.py b/docker-tests/tests/docker_tests/docker_utils.py
index e8a67c425b163..e2c2a42165626 100644
--- a/docker-tests/tests/docker_tests/docker_utils.py
+++ b/docker-tests/tests/docker_tests/docker_utils.py
@@ -87,11 +87,11 @@ def display_dependency_conflict_message():
 
 CI image:
 
-     breeze ci-image build --upgrade-to-newer-dependencies --python 3.9
+     breeze ci-image build --upgrade-to-newer-dependencies --python 3.10
 
 Production image:
 
-     breeze ci-image build --production-image --upgrade-to-newer-dependencies --python 3.9
+     breeze ci-image build --production-image --upgrade-to-newer-dependencies --python 3.10
 
 ***** End of the instructions ****
 """
diff --git a/helm-tests/pyproject.toml b/helm-tests/pyproject.toml
index b370c400b61f2..1a718a5b95c87 100644
--- a/helm-tests/pyproject.toml
+++ b/helm-tests/pyproject.toml
@@ -26,7 +26,7 @@ description = "Helm tests for Apache Airflow"
 classifiers = [
     "Private :: Do Not Upload",
 ]
-requires-python = "~=3.9,<3.13"
+requires-python = "~=3.10,<3.13"
 authors = [
     { name = "Apache Software Foundation", email = "dev@airflow.apache.org" },
 ]
diff --git a/kubernetes-tests/pyproject.toml b/kubernetes-tests/pyproject.toml
index 0a161cceae980..7d912622d9346 100644
--- a/kubernetes-tests/pyproject.toml
+++ b/kubernetes-tests/pyproject.toml
@@ -24,7 +24,7 @@ description = "Kubernetes tests for Apache Airflow"
 classifiers = [
     "Private :: Do Not Upload",
 ]
-requires-python = "~=3.9,<3.13"
+requires-python = "~=3.10,<3.13"
 authors = [
     { name = "Apache Software Foundation", email = "dev@airflow.apache.org" },
 ]
diff --git a/kubernetes-tests/tests/kubernetes_tests/test_kubernetes_pod_operator.py b/kubernetes-tests/tests/kubernetes_tests/test_kubernetes_pod_operator.py
index 12a4ee5bb24fe..afbcf113932a6 100644
--- a/kubernetes-tests/tests/kubernetes_tests/test_kubernetes_pod_operator.py
+++ b/kubernetes-tests/tests/kubernetes_tests/test_kubernetes_pod_operator.py
@@ -1485,7 +1485,7 @@ def __getattr__(self, name):
     task = KubernetesPodOperator(
         task_id="dry_run_demo",
         name="hello-dry-run",
-        image="python:3.9-slim-buster",
+        image="python:3.10-slim-buster",
         cmds=["printenv"],
         env_vars=[
             V1EnvVar(name="password", value="{{ password }}"),
diff --git a/providers-summary-docs/pyproject.toml b/providers-summary-docs/pyproject.toml
index 4ec9fa33e71d2..b6ce35f9b4f1e 100644
--- a/providers-summary-docs/pyproject.toml
+++ b/providers-summary-docs/pyproject.toml
@@ -24,7 +24,7 @@ build-backend = "hatchling.build"
 [project]
 name = "apache-airflow-providers"
 description = "Programmatically author, schedule and monitor data pipelines"
-requires-python = "~=3.9,<3.13"
+requires-python = "~=3.10,<3.13"
 authors = [
     { name = "Apache Software Foundation", email = "dev@airflow.apache.org" },
 ]
@@ -40,7 +40,6 @@ classifiers = [
     "Intended Audience :: Developers",
     "Intended Audience :: System Administrators",
     "License :: OSI Approved :: Apache Software License",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
diff --git a/providers/airbyte/README.rst b/providers/airbyte/README.rst
index eb26b838ae4c1..3dcd839447130 100644
--- a/providers/airbyte/README.rst
+++ b/providers/airbyte/README.rst
@@ -45,7 +45,7 @@ You can install this package on top of an existing Airflow 2 installation (see `
 for the minimum Airflow version supported) via
 ``pip install apache-airflow-providers-airbyte``
 
-The package supports the following python versions: 3.9,3.10,3.11,3.12
+The package supports the following python versions: 3.10,3.11,3.12
 
 Requirements
 ------------
diff --git a/providers/alibaba/README.rst b/providers/alibaba/README.rst
index d8ca8bd2672f9..c1371f27cbe28 100644
--- a/providers/alibaba/README.rst
+++ b/providers/alibaba/README.rst
@@ -45,7 +45,7 @@ You can install this package on top of an existing Airflow 2 installation (see `
 for the minimum Airflow version supported) via
 ``pip install apache-airflow-providers-alibaba``
 
-The package supports the following python versions: 3.9,3.10,3.11,3.12
+The package supports the following python versions: 3.10,3.11,3.12
 
 Requirements
 ------------
diff --git a/providers/amazon/docs/executors/general.rst b/providers/amazon/docs/executors/general.rst
index 4928e2d8f7a26..9edcc7bd1aa60 100644
--- a/providers/amazon/docs/executors/general.rst
+++ b/providers/amazon/docs/executors/general.rst
@@ -142,9 +142,9 @@ which is running the Airflow scheduler process (and thus, the |executorName|
 executor.) Apache Airflow images with specific python versions can be
 downloaded from the Dockerhub registry, and filtering tags by the
 `python
-version <https://hub.docker.com/r/apache/airflow/tags?page=1&name=3.9>`__.
-For example, the tag ``latest-python3.9`` specifies that the image will
-have python 3.9 installed.
+version <https://hub.docker.com/r/apache/airflow/tags?page=1&name=3.10>`__.
+For example, the tag ``latest-python3.10`` specifies that the image will
+have python 3.10 installed.
 
 .. END BASE_IMAGE
 
diff --git a/providers/edge3/docs/install_on_windows.rst b/providers/edge3/docs/install_on_windows.rst
index 850de56ee7cdb..7144800e9b200 100644
--- a/providers/edge3/docs/install_on_windows.rst
+++ b/providers/edge3/docs/install_on_windows.rst
@@ -29,7 +29,7 @@ Install Edge Worker on Windows
 The setup was tested on Windows 10 with Python 3.12.8, 64-bit. Backend for tests was Airflow 2.10.5.
 To setup a instance of Edge Worker on Windows, you need to follow the steps below:
 
-1. Install Python 3.9 or higher.
+1. Install Python 3.10 or higher.
 2. Create an empty folder as base to start with. In our example it is ``C:\Airflow``.
 3. Start Shell/Command Line in ``C:\Airflow`` and create a new virtual environment via: ``python -m venv venv``
 4. Activate the virtual environment via: ``venv\Scripts\activate.bat``
diff --git a/scripts/ci/airflow_version_check.py b/scripts/ci/airflow_version_check.py
index 45354d298847f..467f71442ce09 100755
--- a/scripts/ci/airflow_version_check.py
+++ b/scripts/ci/airflow_version_check.py
@@ -17,7 +17,7 @@
 # under the License.
 
 # /// script
-# requires-python = ">=3.9"
+# requires-python = ">=3.10"
 # dependencies = [
 #   "packaging>=23.2",
 #   "requests>=2.28.1",
diff --git a/scripts/ci/docker-compose/devcontainer.env b/scripts/ci/docker-compose/devcontainer.env
index 8f7ae95aba554..f639e6882d814 100644
--- a/scripts/ci/docker-compose/devcontainer.env
+++ b/scripts/ci/docker-compose/devcontainer.env
@@ -15,10 +15,10 @@
 # specific language governing permissions and limitations
 # under the License.
 HOME=
-AIRFLOW_CI_IMAGE="ghcr.io/apache/airflow/main/ci/python3.9:latest"
+AIRFLOW_CI_IMAGE="ghcr.io/apache/airflow/main/ci/python3.10:latest"
 ANSWER=
 AIRFLOW_ENV="development"
-PYTHON_MAJOR_MINOR_VERSION="3.9"
+PYTHON_MAJOR_MINOR_VERSION="3.10"
 AIRFLOW_EXTRAS=
 BASE_BRANCH="main"
 BREEZE="true"
diff --git a/scripts/ci/docker-compose/devcontainer.yml b/scripts/ci/docker-compose/devcontainer.yml
index f3f77f253f57c..2d0d918ea8210 100644
--- a/scripts/ci/docker-compose/devcontainer.yml
+++ b/scripts/ci/docker-compose/devcontainer.yml
@@ -19,7 +19,7 @@ services:
   airflow:
     stdin_open: true  # docker run -i
     tty: true  # docker run -t
-    image: ghcr.io/apache/airflow/main/ci/python3.9
+    image: ghcr.io/apache/airflow/main/ci/python3.10
     env_file: devcontainer.env
     ports:
       - "22:22"
diff --git a/scripts/ci/pre_commit/check_min_python_version.py b/scripts/ci/pre_commit/check_min_python_version.py
index 825b899241816..a7b4fbbd6f19e 100755
--- a/scripts/ci/pre_commit/check_min_python_version.py
+++ b/scripts/ci/pre_commit/check_min_python_version.py
@@ -26,7 +26,7 @@
 from common_precommit_utils import console
 
 # update this version when we switch to a newer version of Python
-required_version = tuple(map(int, "3.9".split(".")))
+required_version = tuple(map(int, "3.10".split(".")))
 required_version_str = f"{required_version[0]}.{required_version[1]}"
 global_version = tuple(
     map(
diff --git a/scripts/ci/pre_commit/update_providers_dependencies.py b/scripts/ci/pre_commit/update_providers_dependencies.py
index 5397692c03669..5266bfc1d98ea 100755
--- a/scripts/ci/pre_commit/update_providers_dependencies.py
+++ b/scripts/ci/pre_commit/update_providers_dependencies.py
@@ -16,7 +16,7 @@
 # specific language governing permissions and limitations
 # under the License.
 # /// script
-# requires-python = ">=3.9"
+# requires-python = ">=3.10"
 # dependencies = [
 #   "rich>=12.4.4",
 #   "pyyaml>=6.0.2",
diff --git a/scripts/docker/entrypoint_ci.sh b/scripts/docker/entrypoint_ci.sh
index e62e0a58c8002..2588ab43e717f 100755
--- a/scripts/docker/entrypoint_ci.sh
+++ b/scripts/docker/entrypoint_ci.sh
@@ -39,7 +39,7 @@ chmod 1777 /tmp
 
 AIRFLOW_SOURCES=$(cd "${IN_CONTAINER_DIR}/../.." || exit 1; pwd)
 
-PYTHON_MAJOR_MINOR_VERSION=${PYTHON_MAJOR_MINOR_VERSION:=3.9}
+PYTHON_MAJOR_MINOR_VERSION=${PYTHON_MAJOR_MINOR_VERSION:=3.10}
 
 export AIRFLOW_HOME=${AIRFLOW_HOME:=${HOME}}
 
diff --git a/scripts/in_container/install_development_dependencies.py b/scripts/in_container/install_development_dependencies.py
index 1b887c3d4bcd7..7658472f5829b 100755
--- a/scripts/in_container/install_development_dependencies.py
+++ b/scripts/in_container/install_development_dependencies.py
@@ -17,7 +17,7 @@
 # specific language governing permissions and limitations
 # under the License.
 # /// script
-# requires-python = ">=3.9"
+# requires-python = ">=3.10"
 # dependencies = [
 #   "packaging>=23.2",
 #   "click>=8.1.8",
diff --git a/scripts/in_container/run_generate_constraints.py b/scripts/in_container/run_generate_constraints.py
index 58cf5cb6afc00..03caaabbde10d 100755
--- a/scripts/in_container/run_generate_constraints.py
+++ b/scripts/in_container/run_generate_constraints.py
@@ -83,7 +83,7 @@
 # commands that might change the installed version of apache-airflow should include "apache-airflow==X.Y.Z"
 # in the list of install targets to prevent Airflow accidental upgrade or downgrade.
 #
-# Typical installation process of airflow for Python 3.9 is (with random selection of extras and custom
+# Typical installation process of airflow for Python 3.10 is (with random selection of extras and custom
 # dependencies added), usually consists of two steps:
 #
 # 1. Reproducible installation of airflow with selected providers (note constraints are used):

From 33afdf97f5bda7b01ef051a55006a759f0bc9465 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sun, 29 Jun 2025 18:18:22 +0200
Subject: [PATCH 296/381] Fix generate-constraints run on different python than
 base (#52464)

It turns out that when we are installing Breeze we were using
the "Image" python version and not the 'default" python version
to install breeze, and Python 3.12 and 3.11 are not installed by
default when generate-constraints runs.

This change fixes this problem, also it changes the name of the
generate-constraints job to only show the python version used.
---
 .github/actions/breeze/action.yml          | 2 ++
 .github/workflows/generate-constraints.yml | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/.github/actions/breeze/action.yml b/.github/actions/breeze/action.yml
index 03908cd2e3cfc..3fef664b337fa 100644
--- a/.github/actions/breeze/action.yml
+++ b/.github/actions/breeze/action.yml
@@ -41,6 +41,8 @@ runs:
     - name: "Install Breeze"
       shell: bash
       run: ./scripts/ci/install_breeze.sh
+      env:
+        PYTHON_VERSION: "${{ inputs.python-version }}"
     - name: "Free space"
       shell: bash
       run: breeze ci free-space
diff --git a/.github/workflows/generate-constraints.yml b/.github/workflows/generate-constraints.yml
index 565700a66ea6a..d2d0db0685a58 100644
--- a/.github/workflows/generate-constraints.yml
+++ b/.github/workflows/generate-constraints.yml
@@ -57,7 +57,7 @@ jobs:
     permissions:
       contents: read
     timeout-minutes: 70
-    name: Generate constraints for ${{ inputs.python-versions-list-as-string }}
+    name: Generate constraints for ${{ matrix.python-version }} on ${{ inputs.platform }}
     runs-on: ${{ fromJSON(inputs.runners) }}
     strategy:
       matrix:

From bdf16bc0be5e20717b3181e5f8a36589c41c200b Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sun, 29 Jun 2025 19:16:27 +0200
Subject: [PATCH 297/381] Add GITHUB_TOKEN when preparing image for dependency
 summary (#52472)

We need GITHUB_TOKEN to load the image from artifact.
---
 .github/workflows/finalize-tests.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.github/workflows/finalize-tests.yml b/.github/workflows/finalize-tests.yml
index 2e8f791b789bd..e10f7018726c5 100644
--- a/.github/workflows/finalize-tests.yml
+++ b/.github/workflows/finalize-tests.yml
@@ -137,6 +137,8 @@ jobs:
     needs: [update-constraints]
     if: inputs.upgrade-to-newer-dependencies == 'true' && inputs.platform == 'linux/amd64'
     name: "Dependency upgrade summary"
+    env:
+      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
     steps:
       - name: "Cleanup repo"
         shell: bash

From 2d5ba639825f6977db0224d80ee45739338da3b6 Mon Sep 17 00:00:00 2001
From: Jens Scheffler <95105677+jscheffl@users.noreply.github.com>
Date: Sun, 29 Jun 2025 19:55:40 +0200
Subject: [PATCH 298/381] Clean some leftovers of Python 3.9 removal - Files in
 root (#52463)

---
 .pre-commit-config.yaml  | 4 +---
 .readthedocs.yml         | 2 +-
 AGENTS.md                | 2 +-
 INSTALL                  | 6 +++---
 README.md                | 6 +++---
 generated/PYPI_README.md | 4 ++--
 setup_idea.py            | 4 ++--
 7 files changed, 13 insertions(+), 15 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index b2d110f6e1af3..fefaecec8b4d2 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -237,8 +237,7 @@ repos:
         entry: ./scripts/ci/pre_commit/check_deferrable_default.py
         pass_filenames: false
         # libcst doesn't have source wheels for all PY except PY3.12, excluding it
-        # libcst 1.8.1 doesn't include typing-extensions which is needed for Python 3.9
-        additional_dependencies: ['libcst>=1.1.0,!=1.8.0,!=1.8.1']
+        additional_dependencies: ['libcst>=1.8.1']
         files: ^(providers/.*/)?airflow/.*/(sensors|operators)/.*\.py$
   - repo: https://github.com/asottile/blacken-docs
     rev: 1.19.1
@@ -247,7 +246,6 @@ repos:
         name: Run black on docs
         args:
           - --line-length=110
-          - --target-version=py39
           - --target-version=py310
           - --target-version=py311
           - --target-version=py312
diff --git a/.readthedocs.yml b/.readthedocs.yml
index c276d282294ca..ddc2ffd3681fe 100644
--- a/.readthedocs.yml
+++ b/.readthedocs.yml
@@ -20,7 +20,7 @@ formats: []
 sphinx:
     configuration: devel-common/src/docs/rtd-deprecation/conf.py
 python:
-    version: "3.9"
+    version: "3.10"
     install:
         - method: pip
           path: .
diff --git a/AGENTS.md b/AGENTS.md
index c49c534016767..724896d268710 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -34,7 +34,7 @@ how to set up the environment, run checks, build docs and follow the PR workflow
 
 ## Running tests
 
-- [`03_contributors_quick_start.rst`](contributing-docs/03_contributors_quick_start.rst) shows running tests inside Breeze. Use `pytest` inside the container for individual files or invoke `breeze testing` commands to run full suites, e.g. `breeze --backend postgres --python 3.9 testing tests --test-type All`.
+- [`03_contributors_quick_start.rst`](contributing-docs/03_contributors_quick_start.rst) shows running tests inside Breeze. Use `pytest` inside the container for individual files or invoke `breeze testing` commands to run full suites, e.g. `breeze --backend postgres --python 3.10 testing tests --test-type All`.
 
 ## Building documentation
 
diff --git a/INSTALL b/INSTALL
index b7a6a51602623..59e596ca79350 100644
--- a/INSTALL
+++ b/INSTALL
@@ -229,15 +229,15 @@ to avoid "works-for-me" syndrome, where you use different versions of dependenci
 that are used in main CI tests and by other contributors.
 
 There are different constraint files for different Python versions. For example, this command will install
-all basic devel requirements and requirements of Google provider as last successfully tested for Python 3.9:
+all basic devel requirements and requirements of Google provider as last successfully tested for Python 3.10:
 
    uv pip install -e ".[devel,google]"" \
-      --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-3.9.txt"
+      --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-3.10.txt"
 
 Using the 'constraints-no-providers' constraint files, you can upgrade Airflow without paying attention to the provider's dependencies. This allows you to keep installed provider dependencies and install the latest supported ones using pure Airflow core.
 
   uv pip install -e ".[devel]" \
-     --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-no-providers-3.9.txt"
+     --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-no-providers-3.10.txt"
 
 Note that you can also use `pip install` if you do not use `uv`.
 
diff --git a/README.md b/README.md
index 463b00efcabe2..84dc6c4f762dd 100644
--- a/README.md
+++ b/README.md
@@ -178,14 +178,14 @@ them to the appropriate format and workflow that your tool requires.
 
 ```bash
 pip install 'apache-airflow==3.0.2' \
- --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-3.0.2/constraints-3.9.txt"
+ --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-3.0.2/constraints-3.10.txt"
 ```
 
 2. Installing with extras (i.e., postgres, google)
 
 ```bash
 pip install 'apache-airflow[postgres,google]==3.0.2' \
- --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-3.0.2/constraints-3.9.txt"
+ --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-3.0.2/constraints-3.10.txt"
 ```
 
 For information on installing provider distributions, check
@@ -323,7 +323,7 @@ They are based on the official release schedule of Python and Kubernetes, nicely
 1. We drop support for Python and Kubernetes versions when they reach EOL. Except for Kubernetes, a
    version stays supported by Airflow if two major cloud providers still provide support for it. We drop
    support for those EOL versions in main right after EOL date, and it is effectively removed when we release
-   the first new MINOR (Or MAJOR if there is no new MINOR version) of Airflow. For example, for Python 3.9 it
+   the first new MINOR (Or MAJOR if there is no new MINOR version) of Airflow. For example, for Python 3.10 it
    means that we will drop support in main right after 27.06.2023, and the first MAJOR or MINOR version of
    Airflow released after will not have it.
 
diff --git a/generated/PYPI_README.md b/generated/PYPI_README.md
index def66279f2164..6306d1c0efe98 100644
--- a/generated/PYPI_README.md
+++ b/generated/PYPI_README.md
@@ -131,14 +131,14 @@ them to the appropriate format and workflow that your tool requires.
 
 ```bash
 pip install 'apache-airflow==3.0.2' \
- --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-3.0.2/constraints-3.9.txt"
+ --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-3.0.2/constraints-3.10.txt"
 ```
 
 2. Installing with extras (i.e., postgres, google)
 
 ```bash
 pip install 'apache-airflow[postgres,google]==3.0.2' \
- --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-3.0.2/constraints-3.9.txt"
+ --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-3.0.2/constraints-3.10.txt"
 ```
 
 For information on installing provider distributions, check
diff --git a/setup_idea.py b/setup_idea.py
index 14c6fe81de343..ec6b82d7e0f1f 100755
--- a/setup_idea.py
+++ b/setup_idea.py
@@ -16,7 +16,7 @@
 # specific language governing permissions and limitations
 # under the License.
 # /// script
-# requires-python = ">=3.9"
+# requires-python = ">=3.10"
 # dependencies = [
 #   "rich>=13.6.0",
 # ]
@@ -45,7 +45,7 @@
         <excludeFolder url="file://$MODULE_DIR$/generated/" />
         <excludeFolder url="file://$MODULE_DIR$/dev/breeze/.venv" />
     </content>
-    <orderEntry type="jdk" jdkName="Python 3.9 (airflow)" jdkType="Python SDK" />
+    <orderEntry type="jdk" jdkName="Python 3.10 (airflow)" jdkType="Python SDK" />
     <orderEntry type="sourceFolder" forTests="false" />
   </component>
   <component name="PyDocumentationSettings">

From c3f8a81ac0e98e3bcfce81a42aa583853fee390c Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sun, 29 Jun 2025 20:29:16 +0200
Subject: [PATCH 299/381] Rmeove --tty specification for running the dependency
 script (#52489)

Apparently default --tty auto should be eough.
---
 .github/workflows/finalize-tests.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/finalize-tests.yml b/.github/workflows/finalize-tests.yml
index e10f7018726c5..bdfd0bbe79e45 100644
--- a/.github/workflows/finalize-tests.yml
+++ b/.github/workflows/finalize-tests.yml
@@ -156,7 +156,7 @@ jobs:
       - name: "Dependency upgrade summary"
         shell: bash
         run: >
-          breeze run --tty enabled uv run /opt/airflow/dev/constraints-updated-version-check.py --explain-why
+          breeze run uv run /opt/airflow/dev/constraints-updated-version-check.py --explain-why
         env:
           PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
 

From 0c947b5300fb267cea8ada4648c7c42ce1d396cb Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Sun, 29 Jun 2025 19:32:03 +0100
Subject: [PATCH 300/381] Filter only provided integration paths for breeze
 integration testing (#52462)

* Filter only provided integration paths

* Fix tests

* Rename gremline integration name to tinkerpop

* Fix selective_checks test

* Update @integration pytest marker with tinkerpop
---
 contributing-docs/testing/integration_tests.rst  |  4 ++--
 dev/breeze/doc/images/output-commands.svg        |  4 ++--
 dev/breeze/doc/images/output_shell.svg           |  4 ++--
 dev/breeze/doc/images/output_shell.txt           |  2 +-
 dev/breeze/doc/images/output_start-airflow.svg   |  4 ++--
 dev/breeze/doc/images/output_start-airflow.txt   |  2 +-
 ...utput_testing_providers-integration-tests.svg |  4 ++--
 ...utput_testing_providers-integration-tests.txt |  2 +-
 .../airflow_breeze/commands/testing_commands.py  |  1 +
 .../src/airflow_breeze/global_constants.py       |  2 +-
 dev/breeze/src/airflow_breeze/utils/run_tests.py | 16 +++++++++++++++-
 dev/breeze/tests/test_selective_checks.py        |  2 +-
 .../apache/tinkerpop/hooks/test_gremlin.py       |  2 +-
 ...ion-gremlin.yml => integration-tinkerpop.yml} |  0
 14 files changed, 32 insertions(+), 17 deletions(-)
 rename scripts/ci/docker-compose/{integration-gremlin.yml => integration-tinkerpop.yml} (100%)

diff --git a/contributing-docs/testing/integration_tests.rst b/contributing-docs/testing/integration_tests.rst
index bc7e9c70f1d32..401b383ab3bc9 100644
--- a/contributing-docs/testing/integration_tests.rst
+++ b/contributing-docs/testing/integration_tests.rst
@@ -64,8 +64,6 @@ core or provider type of test.
 +--------------+-------------------------------------------------------+
 | drill        | Integration required for drill operator and hook.     |
 +--------------+-------------------------------------------------------+
-| gremlin      | Integration required for gremlin operator and hook.   |
-+--------------+-------------------------------------------------------+
 | kafka        | Integration required for Kafka hooks.                 |
 +--------------+-------------------------------------------------------+
 | kerberos     | Integration that provides Kerberos authentication.    |
@@ -88,6 +86,8 @@ core or provider type of test.
 +--------------+-------------------------------------------------------+
 | statsd       | Integration required for Statsd hooks.                |
 +--------------+-------------------------------------------------------+
+| tinkerpop    | Integration required for gremlin operator and hook.   |
++--------------+-------------------------------------------------------+
 | trino        | Integration required for Trino hooks.                 |
 +--------------+-------------------------------------------------------+
 | ydb          | Integration required for YDB tests.                   |
diff --git a/dev/breeze/doc/images/output-commands.svg b/dev/breeze/doc/images/output-commands.svg
index 1ba42bc55607f..df5d3aa538068 100644
--- a/dev/breeze/doc/images/output-commands.svg
+++ b/dev/breeze/doc/images/output-commands.svg
@@ -332,9 +332,9 @@
 </text><text class="breeze-help-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-help-line-8)">│</text><text class="breeze-help-r4" x="24.4" y="215.2" textLength="158.6" clip-path="url(#breeze-help-line-8)">--integration</text><text class="breeze-help-r1" x="768.6" y="215.2" textLength="671" clip-path="url(#breeze-help-line-8)">Core&#160;Integrations&#160;to&#160;enable&#160;when&#160;running&#160;(can&#160;be&#160;more&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-help-line-8)">│</text><text class="breeze-help-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-help-line-8)">
 </text><text class="breeze-help-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-help-line-9)">│</text><text class="breeze-help-r1" x="768.6" y="239.6" textLength="671" clip-path="url(#breeze-help-line-9)">than&#160;one).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-help-line-9)">│</text><text class="breeze-help-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-help-line-9)">
 </text><text class="breeze-help-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-help-line-10)">│</text><text class="breeze-help-r7" x="768.6" y="264" textLength="671" clip-path="url(#breeze-help-line-10)">(all&#160;|&#160;all-testable&#160;|&#160;cassandra&#160;|&#160;celery&#160;|&#160;drill&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-help-line-10)">│</text><text class="breeze-help-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-help-line-10)">
-</text><text class="breeze-help-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-help-line-11)">│</text><text class="breeze-help-r7" x="768.6" y="288.4" textLength="671" clip-path="url(#breeze-help-line-11)">gremlin&#160;|&#160;kafka&#160;|&#160;kerberos&#160;|&#160;keycloak&#160;|&#160;mongo&#160;|&#160;mssql&#160;|</text><text class="breeze-help-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-help-line-11)">│</text><text class="breeze-help-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-help-line-11)">
+</text><text class="breeze-help-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-help-line-11)">│</text><text class="breeze-help-r7" x="768.6" y="288.4" textLength="671" clip-path="url(#breeze-help-line-11)">kafka&#160;|&#160;kerberos&#160;|&#160;keycloak&#160;|&#160;mongo&#160;|&#160;mssql&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-help-line-11)">│</text><text class="breeze-help-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-help-line-11)">
 </text><text class="breeze-help-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-help-line-12)">│</text><text class="breeze-help-r7" x="768.6" y="312.8" textLength="671" clip-path="url(#breeze-help-line-12)">openlineage&#160;|&#160;otel&#160;|&#160;pinot&#160;|&#160;qdrant&#160;|&#160;redis&#160;|&#160;statsd&#160;|&#160;</text><text class="breeze-help-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-help-line-12)">│</text><text class="breeze-help-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-help-line-12)">
-</text><text class="breeze-help-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-help-line-13)">│</text><text class="breeze-help-r7" x="768.6" y="337.2" textLength="671" clip-path="url(#breeze-help-line-13)">trino&#160;|&#160;ydb)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-help-line-13)">│</text><text class="breeze-help-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-help-line-13)">
+</text><text class="breeze-help-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-help-line-13)">│</text><text class="breeze-help-r7" x="768.6" y="337.2" textLength="671" clip-path="url(#breeze-help-line-13)">tinkerpop&#160;|&#160;trino&#160;|&#160;ydb)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-help-line-13)">│</text><text class="breeze-help-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-help-line-13)">
 </text><text class="breeze-help-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-help-line-14)">│</text><text class="breeze-help-r4" x="24.4" y="361.6" textLength="317.2" clip-path="url(#breeze-help-line-14)">--standalone-dag-processor</text><text class="breeze-help-r1" x="341.6" y="361.6" textLength="12.2" clip-path="url(#breeze-help-line-14)">/</text><text class="breeze-help-r4" x="353.8" y="361.6" textLength="341.6" clip-path="url(#breeze-help-line-14)">--no-standalone-dag-processo</text><text class="breeze-help-r1" x="768.6" y="361.6" textLength="671" clip-path="url(#breeze-help-line-14)">Run&#160;standalone&#160;dag&#160;processor&#160;for&#160;start-airflow&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-help-line-14)">│</text><text class="breeze-help-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-help-line-14)">
 </text><text class="breeze-help-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-help-line-15)">│</text><text class="breeze-help-r4" x="24.4" y="386" textLength="12.2" clip-path="url(#breeze-help-line-15)">r</text><text class="breeze-help-r1" x="768.6" y="386" textLength="671" clip-path="url(#breeze-help-line-15)">(required&#160;for&#160;Airflow&#160;3).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-help-line-15)">│</text><text class="breeze-help-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-help-line-15)">
 </text><text class="breeze-help-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-help-line-16)">│</text><text class="breeze-help-r5" x="768.6" y="410.4" textLength="671" clip-path="url(#breeze-help-line-16)">[default:&#160;standalone-dag-processor]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-help-line-16)">│</text><text class="breeze-help-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-help-line-16)">
diff --git a/dev/breeze/doc/images/output_shell.svg b/dev/breeze/doc/images/output_shell.svg
index 6010232f0caee..bc3a6baecce93 100644
--- a/dev/breeze/doc/images/output_shell.svg
+++ b/dev/breeze/doc/images/output_shell.svg
@@ -586,9 +586,9 @@
 </text><text class="breeze-shell-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-shell-line-10)">│</text><text class="breeze-shell-r4" x="24.4" y="264" textLength="158.6" clip-path="url(#breeze-shell-line-10)">--integration</text><text class="breeze-shell-r1" x="768.6" y="264" textLength="671" clip-path="url(#breeze-shell-line-10)">Core&#160;Integrations&#160;to&#160;enable&#160;when&#160;running&#160;(can&#160;be&#160;more&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-shell-line-10)">│</text><text class="breeze-shell-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-shell-line-10)">
 </text><text class="breeze-shell-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-shell-line-11)">│</text><text class="breeze-shell-r1" x="768.6" y="288.4" textLength="671" clip-path="url(#breeze-shell-line-11)">than&#160;one).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-shell-line-11)">│</text><text class="breeze-shell-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-shell-line-11)">
 </text><text class="breeze-shell-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-shell-line-12)">│</text><text class="breeze-shell-r7" x="768.6" y="312.8" textLength="671" clip-path="url(#breeze-shell-line-12)">(all&#160;|&#160;all-testable&#160;|&#160;cassandra&#160;|&#160;celery&#160;|&#160;drill&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-shell-line-12)">│</text><text class="breeze-shell-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-shell-line-12)">
-</text><text class="breeze-shell-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-shell-line-13)">│</text><text class="breeze-shell-r7" x="768.6" y="337.2" textLength="671" clip-path="url(#breeze-shell-line-13)">gremlin&#160;|&#160;kafka&#160;|&#160;kerberos&#160;|&#160;keycloak&#160;|&#160;mongo&#160;|&#160;mssql&#160;|</text><text class="breeze-shell-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-shell-line-13)">│</text><text class="breeze-shell-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-shell-line-13)">
+</text><text class="breeze-shell-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-shell-line-13)">│</text><text class="breeze-shell-r7" x="768.6" y="337.2" textLength="671" clip-path="url(#breeze-shell-line-13)">kafka&#160;|&#160;kerberos&#160;|&#160;keycloak&#160;|&#160;mongo&#160;|&#160;mssql&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-shell-line-13)">│</text><text class="breeze-shell-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-shell-line-13)">
 </text><text class="breeze-shell-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-shell-line-14)">│</text><text class="breeze-shell-r7" x="768.6" y="361.6" textLength="671" clip-path="url(#breeze-shell-line-14)">openlineage&#160;|&#160;otel&#160;|&#160;pinot&#160;|&#160;qdrant&#160;|&#160;redis&#160;|&#160;statsd&#160;|&#160;</text><text class="breeze-shell-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-shell-line-14)">│</text><text class="breeze-shell-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-shell-line-14)">
-</text><text class="breeze-shell-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-shell-line-15)">│</text><text class="breeze-shell-r7" x="768.6" y="386" textLength="671" clip-path="url(#breeze-shell-line-15)">trino&#160;|&#160;ydb)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-shell-line-15)">│</text><text class="breeze-shell-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-shell-line-15)">
+</text><text class="breeze-shell-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-shell-line-15)">│</text><text class="breeze-shell-r7" x="768.6" y="386" textLength="671" clip-path="url(#breeze-shell-line-15)">tinkerpop&#160;|&#160;trino&#160;|&#160;ydb)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-shell-line-15)">│</text><text class="breeze-shell-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-shell-line-15)">
 </text><text class="breeze-shell-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-shell-line-16)">│</text><text class="breeze-shell-r4" x="24.4" y="410.4" textLength="231.8" clip-path="url(#breeze-shell-line-16)">--load-example-dags</text><text class="breeze-shell-r6" x="719.8" y="410.4" textLength="24.4" clip-path="url(#breeze-shell-line-16)">-e</text><text class="breeze-shell-r1" x="768.6" y="410.4" textLength="671" clip-path="url(#breeze-shell-line-16)">Enable&#160;configuration&#160;to&#160;load&#160;example&#160;DAGs&#160;when&#160;starting</text><text class="breeze-shell-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-shell-line-16)">│</text><text class="breeze-shell-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-shell-line-16)">
 </text><text class="breeze-shell-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-shell-line-17)">│</text><text class="breeze-shell-r1" x="768.6" y="434.8" textLength="671" clip-path="url(#breeze-shell-line-17)">Airflow.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-shell-line-17)">│</text><text class="breeze-shell-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-shell-line-17)">
 </text><text class="breeze-shell-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-shell-line-18)">│</text><text class="breeze-shell-r4" x="24.4" y="459.2" textLength="317.2" clip-path="url(#breeze-shell-line-18)">--load-default-connections</text><text class="breeze-shell-r6" x="719.8" y="459.2" textLength="24.4" clip-path="url(#breeze-shell-line-18)">-c</text><text class="breeze-shell-r1" x="768.6" y="459.2" textLength="671" clip-path="url(#breeze-shell-line-18)">Enable&#160;configuration&#160;to&#160;load&#160;default&#160;connections&#160;when&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-shell-line-18)">│</text><text class="breeze-shell-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-shell-line-18)">
diff --git a/dev/breeze/doc/images/output_shell.txt b/dev/breeze/doc/images/output_shell.txt
index 3c0d8fc50b9bf..50018caa69fa6 100644
--- a/dev/breeze/doc/images/output_shell.txt
+++ b/dev/breeze/doc/images/output_shell.txt
@@ -1 +1 @@
-7ce73872a6ef26151af64d2a850104f6
+74abdb31412e7ee706db5f3ece5beabc
diff --git a/dev/breeze/doc/images/output_start-airflow.svg b/dev/breeze/doc/images/output_start-airflow.svg
index 071838e1e0ca0..d7f9cf7b2c694 100644
--- a/dev/breeze/doc/images/output_start-airflow.svg
+++ b/dev/breeze/doc/images/output_start-airflow.svg
@@ -497,9 +497,9 @@
 </text><text class="breeze-start-airflow-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-14)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="361.6" textLength="158.6" clip-path="url(#breeze-start-airflow-line-14)">--integration</text><text class="breeze-start-airflow-r1" x="768.6" y="361.6" textLength="671" clip-path="url(#breeze-start-airflow-line-14)">Core&#160;Integrations&#160;to&#160;enable&#160;when&#160;running&#160;(can&#160;be&#160;more&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-14)">│</text><text class="breeze-start-airflow-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-14)">
 </text><text class="breeze-start-airflow-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-start-airflow-line-15)">│</text><text class="breeze-start-airflow-r1" x="768.6" y="386" textLength="671" clip-path="url(#breeze-start-airflow-line-15)">than&#160;one).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-start-airflow-line-15)">│</text><text class="breeze-start-airflow-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-start-airflow-line-15)">
 </text><text class="breeze-start-airflow-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-16)">│</text><text class="breeze-start-airflow-r7" x="768.6" y="410.4" textLength="671" clip-path="url(#breeze-start-airflow-line-16)">(all&#160;|&#160;all-testable&#160;|&#160;cassandra&#160;|&#160;celery&#160;|&#160;drill&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-16)">│</text><text class="breeze-start-airflow-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-16)">
-</text><text class="breeze-start-airflow-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-17)">│</text><text class="breeze-start-airflow-r7" x="768.6" y="434.8" textLength="671" clip-path="url(#breeze-start-airflow-line-17)">gremlin&#160;|&#160;kafka&#160;|&#160;kerberos&#160;|&#160;keycloak&#160;|&#160;mongo&#160;|&#160;mssql&#160;|</text><text class="breeze-start-airflow-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-17)">│</text><text class="breeze-start-airflow-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-17)">
+</text><text class="breeze-start-airflow-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-17)">│</text><text class="breeze-start-airflow-r7" x="768.6" y="434.8" textLength="671" clip-path="url(#breeze-start-airflow-line-17)">kafka&#160;|&#160;kerberos&#160;|&#160;keycloak&#160;|&#160;mongo&#160;|&#160;mssql&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-17)">│</text><text class="breeze-start-airflow-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-17)">
 </text><text class="breeze-start-airflow-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-18)">│</text><text class="breeze-start-airflow-r7" x="768.6" y="459.2" textLength="671" clip-path="url(#breeze-start-airflow-line-18)">openlineage&#160;|&#160;otel&#160;|&#160;pinot&#160;|&#160;qdrant&#160;|&#160;redis&#160;|&#160;statsd&#160;|&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-18)">│</text><text class="breeze-start-airflow-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-18)">
-</text><text class="breeze-start-airflow-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-19)">│</text><text class="breeze-start-airflow-r7" x="768.6" y="483.6" textLength="671" clip-path="url(#breeze-start-airflow-line-19)">trino&#160;|&#160;ydb)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-19)">│</text><text class="breeze-start-airflow-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-19)">
+</text><text class="breeze-start-airflow-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-19)">│</text><text class="breeze-start-airflow-r7" x="768.6" y="483.6" textLength="671" clip-path="url(#breeze-start-airflow-line-19)">tinkerpop&#160;|&#160;trino&#160;|&#160;ydb)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-19)">│</text><text class="breeze-start-airflow-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-19)">
 </text><text class="breeze-start-airflow-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-start-airflow-line-20)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="508" textLength="317.2" clip-path="url(#breeze-start-airflow-line-20)">--standalone-dag-processor</text><text class="breeze-start-airflow-r1" x="341.6" y="508" textLength="12.2" clip-path="url(#breeze-start-airflow-line-20)">/</text><text class="breeze-start-airflow-r4" x="353.8" y="508" textLength="341.6" clip-path="url(#breeze-start-airflow-line-20)">--no-standalone-dag-processo</text><text class="breeze-start-airflow-r1" x="768.6" y="508" textLength="671" clip-path="url(#breeze-start-airflow-line-20)">Run&#160;standalone&#160;dag&#160;processor&#160;for&#160;start-airflow&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-start-airflow-line-20)">│</text><text class="breeze-start-airflow-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-start-airflow-line-20)">
 </text><text class="breeze-start-airflow-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-21)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="532.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-21)">r</text><text class="breeze-start-airflow-r1" x="768.6" y="532.4" textLength="671" clip-path="url(#breeze-start-airflow-line-21)">(required&#160;for&#160;Airflow&#160;3).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-21)">│</text><text class="breeze-start-airflow-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-21)">
 </text><text class="breeze-start-airflow-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-22)">│</text><text class="breeze-start-airflow-r5" x="768.6" y="556.8" textLength="671" clip-path="url(#breeze-start-airflow-line-22)">[default:&#160;standalone-dag-processor]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-22)">│</text><text class="breeze-start-airflow-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-22)">
diff --git a/dev/breeze/doc/images/output_start-airflow.txt b/dev/breeze/doc/images/output_start-airflow.txt
index 34b052e06659a..6b0006dd201e9 100644
--- a/dev/breeze/doc/images/output_start-airflow.txt
+++ b/dev/breeze/doc/images/output_start-airflow.txt
@@ -1 +1 @@
-0ef2581aec890d0fa4cdd00b74c53049
+e5263cc1f97fc2bc3523f9d60d23dcc6
diff --git a/dev/breeze/doc/images/output_testing_providers-integration-tests.svg b/dev/breeze/doc/images/output_testing_providers-integration-tests.svg
index b46e3ae7edd29..335eeb609c09b 100644
--- a/dev/breeze/doc/images/output_testing_providers-integration-tests.svg
+++ b/dev/breeze/doc/images/output_testing_providers-integration-tests.svg
@@ -237,8 +237,8 @@
 </text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="752" textLength="1464" clip-path="url(#breeze-testing-providers-integration-tests-line-30)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-30)">
 </text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="776.4" textLength="24.4" clip-path="url(#breeze-testing-providers-integration-tests-line-31)">╭─</text><text class="breeze-testing-providers-integration-tests-r5" x="24.4" y="776.4" textLength="231.8" clip-path="url(#breeze-testing-providers-integration-tests-line-31)">&#160;Integration&#160;tests&#160;</text><text class="breeze-testing-providers-integration-tests-r5" x="256.2" y="776.4" textLength="1183.4" clip-path="url(#breeze-testing-providers-integration-tests-line-31)">─────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-testing-providers-integration-tests-r5" x="1439.6" y="776.4" textLength="24.4" clip-path="url(#breeze-testing-providers-integration-tests-line-31)">─╮</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-31)">
 </text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-32)">│</text><text class="breeze-testing-providers-integration-tests-r4" x="24.4" y="800.8" textLength="158.6" clip-path="url(#breeze-testing-providers-integration-tests-line-32)">--integration</text><text class="breeze-testing-providers-integration-tests-r1" x="231.8" y="800.8" textLength="1207.8" clip-path="url(#breeze-testing-providers-integration-tests-line-32)">Providers&#160;Integration(s)&#160;to&#160;enable&#160;when&#160;running&#160;(can&#160;be&#160;more&#160;than&#160;one).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-32)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-32)">
-</text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-33)">│</text><text class="breeze-testing-providers-integration-tests-r6" x="231.8" y="825.2" textLength="1207.8" clip-path="url(#breeze-testing-providers-integration-tests-line-33)">(all&#160;|&#160;all-testable&#160;|&#160;cassandra&#160;|&#160;celery&#160;|&#160;drill&#160;|&#160;gremlin&#160;|&#160;kafka&#160;|&#160;mongo&#160;|&#160;mssql&#160;|&#160;openlineage&#160;|&#160;</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-33)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-33)">
-</text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-34)">│</text><text class="breeze-testing-providers-integration-tests-r6" x="231.8" y="849.6" textLength="1207.8" clip-path="url(#breeze-testing-providers-integration-tests-line-34)">pinot&#160;|&#160;qdrant&#160;|&#160;redis&#160;|&#160;trino&#160;|&#160;ydb)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-34)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-34)">
+</text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-33)">│</text><text class="breeze-testing-providers-integration-tests-r6" x="231.8" y="825.2" textLength="1207.8" clip-path="url(#breeze-testing-providers-integration-tests-line-33)">(all&#160;|&#160;all-testable&#160;|&#160;cassandra&#160;|&#160;celery&#160;|&#160;drill&#160;|&#160;kafka&#160;|&#160;mongo&#160;|&#160;mssql&#160;|&#160;openlineage&#160;|&#160;pinot&#160;|&#160;&#160;&#160;</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-33)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-33)">
+</text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-34)">│</text><text class="breeze-testing-providers-integration-tests-r6" x="231.8" y="849.6" textLength="1207.8" clip-path="url(#breeze-testing-providers-integration-tests-line-34)">qdrant&#160;|&#160;redis&#160;|&#160;tinkerpop&#160;|&#160;trino&#160;|&#160;ydb)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-34)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-34)">
 </text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="874" textLength="1464" clip-path="url(#breeze-testing-providers-integration-tests-line-35)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-35)">
 </text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="898.4" textLength="24.4" clip-path="url(#breeze-testing-providers-integration-tests-line-36)">╭─</text><text class="breeze-testing-providers-integration-tests-r5" x="24.4" y="898.4" textLength="402.6" clip-path="url(#breeze-testing-providers-integration-tests-line-36)">&#160;Advanced&#160;flag&#160;for&#160;tests&#160;command&#160;</text><text class="breeze-testing-providers-integration-tests-r5" x="427" y="898.4" textLength="1012.6" clip-path="url(#breeze-testing-providers-integration-tests-line-36)">───────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-testing-providers-integration-tests-r5" x="1439.6" y="898.4" textLength="24.4" clip-path="url(#breeze-testing-providers-integration-tests-line-36)">─╮</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-36)">
 </text><text class="breeze-testing-providers-integration-tests-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-37)">│</text><text class="breeze-testing-providers-integration-tests-r4" x="24.4" y="922.8" textLength="231.8" clip-path="url(#breeze-testing-providers-integration-tests-line-37)">--github-repository</text><text class="breeze-testing-providers-integration-tests-r7" x="366" y="922.8" textLength="24.4" clip-path="url(#breeze-testing-providers-integration-tests-line-37)">-g</text><text class="breeze-testing-providers-integration-tests-r1" x="414.8" y="922.8" textLength="585.6" clip-path="url(#breeze-testing-providers-integration-tests-line-37)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-testing-providers-integration-tests-r6" x="1012.6" y="922.8" textLength="73.2" clip-path="url(#breeze-testing-providers-integration-tests-line-37)">(TEXT)</text><text class="breeze-testing-providers-integration-tests-r5" x="1098" y="922.8" textLength="305" clip-path="url(#breeze-testing-providers-integration-tests-line-37)">[default:&#160;apache/airflow]</text><text class="breeze-testing-providers-integration-tests-r5" x="1451.8" y="922.8" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-37)">│</text><text class="breeze-testing-providers-integration-tests-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-testing-providers-integration-tests-line-37)">
diff --git a/dev/breeze/doc/images/output_testing_providers-integration-tests.txt b/dev/breeze/doc/images/output_testing_providers-integration-tests.txt
index 601b2a047983e..7209f31d3a698 100644
--- a/dev/breeze/doc/images/output_testing_providers-integration-tests.txt
+++ b/dev/breeze/doc/images/output_testing_providers-integration-tests.txt
@@ -1 +1 @@
-9f2c3376aabee8cc8f009519d3c4f878
+cafc7c9fe7699b3b14f0d15b9d331fb1
diff --git a/dev/breeze/src/airflow_breeze/commands/testing_commands.py b/dev/breeze/src/airflow_breeze/commands/testing_commands.py
index 7f88b8bffaf44..3efcb54353b21 100644
--- a/dev/breeze/src/airflow_breeze/commands/testing_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/testing_commands.py
@@ -216,6 +216,7 @@ def _run_test(
         parallel_test_types_list=shell_params.parallel_test_types_list,
         keep_env_variables=shell_params.keep_env_variables,
         no_db_cleanup=shell_params.no_db_cleanup,
+        integration=shell_params.integration,
     )
     pytest_args.extend(extra_pytest_args)
     # Skip "FOLDER" in case "--ignore=FOLDER" is passed as an argument
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py b/dev/breeze/src/airflow_breeze/global_constants.py
index afa0f4dae3b6f..401387dbddb70 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -68,7 +68,7 @@
     "celery",
     "cassandra",
     "drill",
-    "gremlin",
+    "tinkerpop",
     "kafka",
     "mongo",
     "mssql",
diff --git a/dev/breeze/src/airflow_breeze/utils/run_tests.py b/dev/breeze/src/airflow_breeze/utils/run_tests.py
index 74cc0c6281975..62f9463257c43 100644
--- a/dev/breeze/src/airflow_breeze/utils/run_tests.py
+++ b/dev/breeze/src/airflow_breeze/utils/run_tests.py
@@ -245,14 +245,26 @@ def convert_test_type_to_pytest_args(
     *,
     test_group: GroupOfTests,
     test_type: str,
+    integration: tuple | None = None,
 ) -> list[str]:
     if test_type == "None":
         return []
     if test_type in ALL_TEST_SUITES:
-        return [
+        all_paths = [
             *TEST_GROUP_TO_TEST_FOLDERS[test_group],
             *ALL_TEST_SUITES[test_type],
         ]
+
+        if integration and test_group == GroupOfTests.INTEGRATION_PROVIDERS:
+            filtered_paths = [
+                path
+                for path in all_paths
+                if any(path.endswith(f"{value}/tests/integration") for value in integration)
+            ]
+
+            return filtered_paths
+        return all_paths
+
     if test_group == GroupOfTests.SYSTEM and test_type != NONE_TEST_TYPE:
         get_console().print(f"[error]Only {NONE_TEST_TYPE} should be allowed as test type[/]")
         sys.exit(1)
@@ -336,6 +348,7 @@ def generate_args_for_pytest(
     python_version: str,
     keep_env_variables: bool,
     no_db_cleanup: bool,
+    integration: tuple | None = None,
 ):
     result_log_file, warnings_file, coverage_file = test_paths(test_type, backend)
     if skip_db_tests and parallel_test_types_list:
@@ -347,6 +360,7 @@ def generate_args_for_pytest(
         args = convert_test_type_to_pytest_args(
             test_group=test_group,
             test_type=test_type,
+            integration=integration,
         )
     args.extend(
         [
diff --git a/dev/breeze/tests/test_selective_checks.py b/dev/breeze/tests/test_selective_checks.py
index 4b16252ad0619..f014eb662d21a 100644
--- a/dev/breeze/tests/test_selective_checks.py
+++ b/dev/breeze/tests/test_selective_checks.py
@@ -1145,7 +1145,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                     "core-test-types-list-as-strings-in-json": ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
                     "providers-test-types-list-as-strings-in-json": ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
                     "testable-core-integrations": "['kerberos']",
-                    "testable-providers-integrations": "['celery', 'cassandra', 'drill', 'gremlin', 'kafka', "
+                    "testable-providers-integrations": "['celery', 'cassandra', 'drill', 'tinkerpop', 'kafka', "
                     "'mongo', 'pinot', 'qdrant', 'redis', 'trino', 'ydb']",
                     "needs-mypy": "true",
                     "mypy-checks": ALL_MYPY_CHECKS,
diff --git a/providers/apache/tinkerpop/tests/integration/apache/tinkerpop/hooks/test_gremlin.py b/providers/apache/tinkerpop/tests/integration/apache/tinkerpop/hooks/test_gremlin.py
index 2a2ea25f95625..507de5663cea5 100644
--- a/providers/apache/tinkerpop/tests/integration/apache/tinkerpop/hooks/test_gremlin.py
+++ b/providers/apache/tinkerpop/tests/integration/apache/tinkerpop/hooks/test_gremlin.py
@@ -26,7 +26,7 @@
 AIRFLOW_CONN_GREMLIN_DEFAULT = "ws://mylogin:mysecret@gremlin:8182/gremlin"
 
 
-@pytest.mark.integration("gremlin")
+@pytest.mark.integration("tinkerpop")
 class TestGremlinHook:
     def setup_method(self):
         os.environ["AIRFLOW_CONN_GREMLIN_DEFAULT"] = AIRFLOW_CONN_GREMLIN_DEFAULT
diff --git a/scripts/ci/docker-compose/integration-gremlin.yml b/scripts/ci/docker-compose/integration-tinkerpop.yml
similarity index 100%
rename from scripts/ci/docker-compose/integration-gremlin.yml
rename to scripts/ci/docker-compose/integration-tinkerpop.yml

From acacfc41e715fb90b9f7cafe7f930dd725fc8909 Mon Sep 17 00:00:00 2001
From: Idris Adebisi <104902482+hardeybisey@users.noreply.github.com>
Date: Sun, 29 Jun 2025 19:39:02 +0100
Subject: [PATCH 301/381] Provider Migration: Update docker for Airflow 3.0
 compatibility (#52465)

---
 .../providers/docker/operators/docker.py      |  2 +-
 .../providers/docker/version_compat.py        |  8 +++++
 .../unit/docker/decorators/test_docker.py     | 30 +++++++++----------
 3 files changed, 23 insertions(+), 17 deletions(-)

diff --git a/providers/docker/src/airflow/providers/docker/operators/docker.py b/providers/docker/src/airflow/providers/docker/operators/docker.py
index 7c75bb926e9ec..546c8736b13bf 100644
--- a/providers/docker/src/airflow/providers/docker/operators/docker.py
+++ b/providers/docker/src/airflow/providers/docker/operators/docker.py
@@ -34,12 +34,12 @@
 from docker.types import LogConfig, Mount, Ulimit
 from dotenv import dotenv_values
 
-from airflow.models import BaseOperator
 from airflow.providers.docker.exceptions import (
     DockerContainerFailedException,
     DockerContainerFailedSkipException,
 )
 from airflow.providers.docker.hooks.docker import DockerHook
+from airflow.providers.docker.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from logging import Logger
diff --git a/providers/docker/src/airflow/providers/docker/version_compat.py b/providers/docker/src/airflow/providers/docker/version_compat.py
index 48d122b669696..f2ac9959a5222 100644
--- a/providers/docker/src/airflow/providers/docker/version_compat.py
+++ b/providers/docker/src/airflow/providers/docker/version_compat.py
@@ -33,3 +33,11 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator
+
+__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseOperator"]
diff --git a/providers/docker/tests/unit/docker/decorators/test_docker.py b/providers/docker/tests/unit/docker/decorators/test_docker.py
index 588161c723463..2009361d8832d 100644
--- a/providers/docker/tests/unit/docker/decorators/test_docker.py
+++ b/providers/docker/tests/unit/docker/decorators/test_docker.py
@@ -53,11 +53,11 @@ def f():
             return [random.random() for _ in range(100)]
 
         with dag_maker(session=session):
-            ret = f()
+            f()
         session.commit()
         dr = dag_maker.create_dagrun(session=session)
         session.expunge_all()
-        ret.operator.run(start_date=dr.logical_date, end_date=dr.logical_date, session=session)
+        dag_maker.run_ti("f", dr)
         ti = dr.get_task_instances(session=session)[0]
         assert len(ti.xcom_pull()) == 100
 
@@ -70,11 +70,11 @@ def f(num_results):
             return [random.random() for _ in range(num_results)]
 
         with dag_maker(session=session):
-            ret = f(50)
+            f(50)
 
         dr = dag_maker.create_dagrun(session=session)
         session.expunge_all()
-        ret.operator.run(start_date=dr.logical_date, end_date=dr.logical_date)
+        dag_maker.run_ti("f", dr)
         ti = dr.get_task_instances(session=session)[0]
         result = ti.xcom_pull(session=session)
         assert isinstance(result, list)
@@ -102,13 +102,11 @@ def return_dict(number: int):
 
         test_number = 10
         with dag_maker(session=session):
-            ret = return_dict(test_number)
+            return_dict(test_number)
 
         dr = dag_maker.create_dagrun(session=session)
         session.expunge_all()
-
-        ret.operator.run(start_date=dr.logical_date, end_date=dr.logical_date, session=session)
-
+        dag_maker.run_ti("return_dict", dr)
         ti = dr.get_task_instances(session=session)[0]
         assert ti.xcom_pull(key="number", session=session) == test_number + 1
         assert ti.xcom_pull(key="43", session=session) == 43
@@ -121,12 +119,11 @@ def f():
             pass
 
         with dag_maker(session=session):
-            ret = f()
+            f()
 
         dr = dag_maker.create_dagrun(session=session)
         session.expunge_all()
-
-        ret.operator.run(start_date=dr.logical_date, end_date=dr.logical_date, session=session)
+        dag_maker.run_ti("f", dr)
         ti = dr.get_task_instances(session=session)[0]
         assert ti.xcom_pull(session=session) is None
 
@@ -174,15 +171,16 @@ def f(exit_code):
             raise SystemExit(exit_code)
 
         with dag_maker(session=session):
-            ret = f(actual_exit_code)
+            f(actual_exit_code)
 
         dr = dag_maker.create_dagrun(session=session)
         session.expunge_all()
         if expected_state == TaskInstanceState.FAILED:
             with pytest.raises(AirflowException):
-                ret.operator.run(start_date=dr.logical_date, end_date=dr.logical_date, session=session)
+                dag_maker.run_ti("f", dr)
+
         else:
-            ret.operator.run(start_date=dr.logical_date, end_date=dr.logical_date, session=session)
+            dag_maker.run_ti("f", dr)
             ti = dr.get_task_instances(session=session)[0]
             assert ti.state == expected_state
 
@@ -343,13 +341,13 @@ def f():
         ch = logging.StreamHandler(log_capture_string)
         docker_operator_logger.addHandler(ch)
         with dag_maker(session=session):
-            ret = f()
+            f()
 
         dr = dag_maker.create_dagrun(session=session)
         session.expunge_all()
 
         with pytest.raises(AirflowException):
-            ret.operator.run(start_date=dr.logical_date, end_date=dr.logical_date, session=session)
+            dag_maker.run_ti("f", dr)
         ti = dr.get_task_instances(session=session)[0]
         assert ti.state == TaskInstanceState.FAILED
 

From 56840411f0511630c414b9e4e92baceec5162aff Mon Sep 17 00:00:00 2001
From: Dov Benyomin Sohacheski <b@kloud.email>
Date: Sun, 29 Jun 2025 21:41:35 +0300
Subject: [PATCH 302/381] Provider Migration: Replace `models.BaseOperator` to
 Task SDK for apache/impala (#52455)

* Replace models.BaseOperator to Task SDK for apache/impala

* Add test_version_compat ignore
---
 .../unit/always/test_project_structure.py     |  1 +
 .../providers/apache/impala/version_compat.py | 35 +++++++++++++++++++
 2 files changed, 36 insertions(+)
 create mode 100644 providers/apache/impala/src/airflow/providers/apache/impala/version_compat.py

diff --git a/airflow-core/tests/unit/always/test_project_structure.py b/airflow-core/tests/unit/always/test_project_structure.py
index fbe8434730fd5..3859f863f8151 100644
--- a/airflow-core/tests/unit/always/test_project_structure.py
+++ b/airflow-core/tests/unit/always/test_project_structure.py
@@ -93,6 +93,7 @@ def test_providers_modules_should_have_tests(self):
             "providers/apache/hdfs/tests/unit/apache/hdfs/sensors/test_hdfs.py",
             "providers/apache/hive/tests/unit/apache/hive/test_version_compat.py",
             "providers/apache/hive/tests/unit/apache/hive/plugins/test_hive.py",
+            "providers/apache/impala/tests/unit/apache/impala/test_version_compat.py",
             "providers/apache/livy/tests/unit/apache/livy/test_version_compat.py",
             "providers/apache/pig/tests/unit/apache/pig/test_version_compat.py",
             "providers/apache/spark/tests/unit/apache/spark/test_version_compat.py",
diff --git a/providers/apache/impala/src/airflow/providers/apache/impala/version_compat.py b/providers/apache/impala/src/airflow/providers/apache/impala/version_compat.py
new file mode 100644
index 0000000000000..48d122b669696
--- /dev/null
+++ b/providers/apache/impala/src/airflow/providers/apache/impala/version_compat.py
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)

From b8af9b5cb9d29c45996015a28c98f575e0cd6757 Mon Sep 17 00:00:00 2001
From: Dov Benyomin Sohacheski <b@kloud.email>
Date: Sun, 29 Jun 2025 21:45:21 +0300
Subject: [PATCH 303/381] Provider Migration: Replace `models.BaseOperator` to
 Task SDK for apache/hive (#52453)

* Replace models.BaseOperator to Task SDK one for Common Providers

* Fix static errors
---
 providers/apache/hive/pyproject.toml          |  1 -
 .../providers/apache/hive/hooks/hive.py       |  9 +--------
 .../providers/apache/hive/operators/hive.py   | 15 +++++---------
 .../apache/hive/operators/hive_stats.py       |  2 +-
 .../apache/hive/sensors/hive_partition.py     |  7 +------
 .../hive/sensors/named_hive_partition.py      |  7 +------
 .../apache/hive/transfers/hive_to_mysql.py    |  9 +--------
 .../apache/hive/transfers/hive_to_samba.py    |  8 +-------
 .../apache/hive/transfers/mssql_to_hive.py    |  2 +-
 .../apache/hive/transfers/mysql_to_hive.py    |  2 +-
 .../apache/hive/transfers/s3_to_hive.py       |  2 +-
 .../apache/hive/transfers/vertica_to_hive.py  |  2 +-
 .../providers/apache/hive/version_compat.py   | 20 +++++++++++++++++++
 13 files changed, 35 insertions(+), 51 deletions(-)

diff --git a/providers/apache/hive/pyproject.toml b/providers/apache/hive/pyproject.toml
index 03b114a09d803..3449fdcd5fb8c 100644
--- a/providers/apache/hive/pyproject.toml
+++ b/providers/apache/hive/pyproject.toml
@@ -95,7 +95,6 @@ dev = [
     "apache-airflow-task-sdk",
     "apache-airflow-devel-common",
     "apache-airflow-providers-amazon",
-    "apache-airflow-providers-common-compat",
     "apache-airflow-providers-common-sql",
     "apache-airflow-providers-microsoft-mssql",
     "apache-airflow-providers-mysql",
diff --git a/providers/apache/hive/src/airflow/providers/apache/hive/hooks/hive.py b/providers/apache/hive/src/airflow/providers/apache/hive/hooks/hive.py
index 2c682ca0d3812..a7d0f94aff151 100644
--- a/providers/apache/hive/src/airflow/providers/apache/hive/hooks/hive.py
+++ b/providers/apache/hive/src/airflow/providers/apache/hive/hooks/hive.py
@@ -39,18 +39,11 @@
 from airflow.configuration import conf
 from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning
 from airflow.hooks.base import BaseHook
-from airflow.providers.common.compat.version_compat import AIRFLOW_V_3_0_PLUS
+from airflow.providers.apache.hive.version_compat import AIRFLOW_VAR_NAME_FORMAT_MAPPING
 from airflow.providers.common.sql.hooks.sql import DbApiHook
 from airflow.security import utils
 from airflow.utils.helpers import as_flattened_list
 
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk.execution_time.context import AIRFLOW_VAR_NAME_FORMAT_MAPPING
-else:
-    from airflow.utils.operator_helpers import (  # type: ignore[no-redef, attr-defined]
-        AIRFLOW_VAR_NAME_FORMAT_MAPPING,
-    )
-
 HIVE_QUEUE_PRIORITIES = ["VERY_HIGH", "HIGH", "NORMAL", "LOW", "VERY_LOW"]
 
 
diff --git a/providers/apache/hive/src/airflow/providers/apache/hive/operators/hive.py b/providers/apache/hive/src/airflow/providers/apache/hive/operators/hive.py
index f702a17e781b6..75e562b2d4685 100644
--- a/providers/apache/hive/src/airflow/providers/apache/hive/operators/hive.py
+++ b/providers/apache/hive/src/airflow/providers/apache/hive/operators/hive.py
@@ -24,17 +24,12 @@
 from typing import TYPE_CHECKING, Any
 
 from airflow.configuration import conf
-from airflow.models import BaseOperator
 from airflow.providers.apache.hive.hooks.hive import HiveCliHook
-from airflow.providers.common.compat.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk.execution_time.context import AIRFLOW_VAR_NAME_FORMAT_MAPPING, context_to_airflow_vars
-else:
-    from airflow.utils.operator_helpers import (  # type: ignore[no-redef, attr-defined]
-        AIRFLOW_VAR_NAME_FORMAT_MAPPING,
-        context_to_airflow_vars,
-    )
+from airflow.providers.apache.hive.version_compat import (
+    AIRFLOW_VAR_NAME_FORMAT_MAPPING,
+    BaseOperator,
+    context_to_airflow_vars,
+)
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/apache/hive/src/airflow/providers/apache/hive/operators/hive_stats.py b/providers/apache/hive/src/airflow/providers/apache/hive/operators/hive_stats.py
index 1e117de38ede6..85a6d22ddda91 100644
--- a/providers/apache/hive/src/airflow/providers/apache/hive/operators/hive_stats.py
+++ b/providers/apache/hive/src/airflow/providers/apache/hive/operators/hive_stats.py
@@ -22,8 +22,8 @@
 from typing import TYPE_CHECKING, Any
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.apache.hive.hooks.hive import HiveMetastoreHook
+from airflow.providers.apache.hive.version_compat import BaseOperator
 from airflow.providers.mysql.hooks.mysql import MySqlHook
 from airflow.providers.presto.hooks.presto import PrestoHook
 
diff --git a/providers/apache/hive/src/airflow/providers/apache/hive/sensors/hive_partition.py b/providers/apache/hive/src/airflow/providers/apache/hive/sensors/hive_partition.py
index 1c3576e0c8dbf..b50dcfa1ff6a0 100644
--- a/providers/apache/hive/src/airflow/providers/apache/hive/sensors/hive_partition.py
+++ b/providers/apache/hive/src/airflow/providers/apache/hive/sensors/hive_partition.py
@@ -21,12 +21,7 @@
 from typing import TYPE_CHECKING, Any
 
 from airflow.providers.apache.hive.hooks.hive import HiveMetastoreHook
-from airflow.providers.apache.hive.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+from airflow.providers.apache.hive.version_compat import BaseSensorOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/apache/hive/src/airflow/providers/apache/hive/sensors/named_hive_partition.py b/providers/apache/hive/src/airflow/providers/apache/hive/sensors/named_hive_partition.py
index 1640167beef73..51d0fb86b4159 100644
--- a/providers/apache/hive/src/airflow/providers/apache/hive/sensors/named_hive_partition.py
+++ b/providers/apache/hive/src/airflow/providers/apache/hive/sensors/named_hive_partition.py
@@ -20,12 +20,7 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING, Any
 
-from airflow.providers.apache.hive.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+from airflow.providers.apache.hive.version_compat import BaseSensorOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/apache/hive/src/airflow/providers/apache/hive/transfers/hive_to_mysql.py b/providers/apache/hive/src/airflow/providers/apache/hive/transfers/hive_to_mysql.py
index 3ee6b03e2e39e..8764b74b694bd 100644
--- a/providers/apache/hive/src/airflow/providers/apache/hive/transfers/hive_to_mysql.py
+++ b/providers/apache/hive/src/airflow/providers/apache/hive/transfers/hive_to_mysql.py
@@ -23,17 +23,10 @@
 from tempfile import NamedTemporaryFile
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.apache.hive.hooks.hive import HiveServer2Hook
-from airflow.providers.common.compat.version_compat import AIRFLOW_V_3_0_PLUS
+from airflow.providers.apache.hive.version_compat import BaseOperator, context_to_airflow_vars
 from airflow.providers.mysql.hooks.mysql import MySqlHook
 
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk.execution_time.context import context_to_airflow_vars
-else:
-    from airflow.utils.operator_helpers import context_to_airflow_vars  # type: ignore[no-redef, attr-defined]
-
-
 if TYPE_CHECKING:
     from airflow.utils.context import Context
 
diff --git a/providers/apache/hive/src/airflow/providers/apache/hive/transfers/hive_to_samba.py b/providers/apache/hive/src/airflow/providers/apache/hive/transfers/hive_to_samba.py
index 91e17e16c0e01..a1b60a493dc4b 100644
--- a/providers/apache/hive/src/airflow/providers/apache/hive/transfers/hive_to_samba.py
+++ b/providers/apache/hive/src/airflow/providers/apache/hive/transfers/hive_to_samba.py
@@ -23,16 +23,10 @@
 from tempfile import NamedTemporaryFile
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.apache.hive.hooks.hive import HiveServer2Hook
-from airflow.providers.common.compat.version_compat import AIRFLOW_V_3_0_PLUS
+from airflow.providers.apache.hive.version_compat import BaseOperator, context_to_airflow_vars
 from airflow.providers.samba.hooks.samba import SambaHook
 
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk.execution_time.context import context_to_airflow_vars
-else:
-    from airflow.utils.operator_helpers import context_to_airflow_vars  # type: ignore[no-redef, attr-defined]
-
 if TYPE_CHECKING:
     from airflow.utils.context import Context
 
diff --git a/providers/apache/hive/src/airflow/providers/apache/hive/transfers/mssql_to_hive.py b/providers/apache/hive/src/airflow/providers/apache/hive/transfers/mssql_to_hive.py
index 88f000dc3eb45..c09bf1f5a639d 100644
--- a/providers/apache/hive/src/airflow/providers/apache/hive/transfers/mssql_to_hive.py
+++ b/providers/apache/hive/src/airflow/providers/apache/hive/transfers/mssql_to_hive.py
@@ -26,8 +26,8 @@
 
 import pymssql
 
-from airflow.models import BaseOperator
 from airflow.providers.apache.hive.hooks.hive import HiveCliHook
+from airflow.providers.apache.hive.version_compat import BaseOperator
 from airflow.providers.microsoft.mssql.hooks.mssql import MsSqlHook
 
 if TYPE_CHECKING:
diff --git a/providers/apache/hive/src/airflow/providers/apache/hive/transfers/mysql_to_hive.py b/providers/apache/hive/src/airflow/providers/apache/hive/transfers/mysql_to_hive.py
index 8a21dd8cc39de..919dc80efc670 100644
--- a/providers/apache/hive/src/airflow/providers/apache/hive/transfers/mysql_to_hive.py
+++ b/providers/apache/hive/src/airflow/providers/apache/hive/transfers/mysql_to_hive.py
@@ -36,8 +36,8 @@
     )
 
 
-from airflow.models import BaseOperator
 from airflow.providers.apache.hive.hooks.hive import HiveCliHook
+from airflow.providers.apache.hive.version_compat import BaseOperator
 from airflow.providers.mysql.hooks.mysql import MySqlHook
 
 if TYPE_CHECKING:
diff --git a/providers/apache/hive/src/airflow/providers/apache/hive/transfers/s3_to_hive.py b/providers/apache/hive/src/airflow/providers/apache/hive/transfers/s3_to_hive.py
index 86862cec19f07..636ffabd34f9d 100644
--- a/providers/apache/hive/src/airflow/providers/apache/hive/transfers/s3_to_hive.py
+++ b/providers/apache/hive/src/airflow/providers/apache/hive/transfers/s3_to_hive.py
@@ -29,9 +29,9 @@
 from typing import TYPE_CHECKING, Any
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.amazon.aws.hooks.s3 import S3Hook
 from airflow.providers.apache.hive.hooks.hive import HiveCliHook
+from airflow.providers.apache.hive.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/apache/hive/src/airflow/providers/apache/hive/transfers/vertica_to_hive.py b/providers/apache/hive/src/airflow/providers/apache/hive/transfers/vertica_to_hive.py
index 3a3fb63c2df54..1c2c76bd0ea4d 100644
--- a/providers/apache/hive/src/airflow/providers/apache/hive/transfers/vertica_to_hive.py
+++ b/providers/apache/hive/src/airflow/providers/apache/hive/transfers/vertica_to_hive.py
@@ -24,8 +24,8 @@
 from tempfile import NamedTemporaryFile
 from typing import TYPE_CHECKING, Any
 
-from airflow.models import BaseOperator
 from airflow.providers.apache.hive.hooks.hive import HiveCliHook
+from airflow.providers.apache.hive.version_compat import BaseOperator
 from airflow.providers.vertica.hooks.vertica import VerticaHook
 
 if TYPE_CHECKING:
diff --git a/providers/apache/hive/src/airflow/providers/apache/hive/version_compat.py b/providers/apache/hive/src/airflow/providers/apache/hive/version_compat.py
index 48d122b669696..88b3690d40b2b 100644
--- a/providers/apache/hive/src/airflow/providers/apache/hive/version_compat.py
+++ b/providers/apache/hive/src/airflow/providers/apache/hive/version_compat.py
@@ -33,3 +33,23 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator, BaseSensorOperator
+    from airflow.sdk.execution_time.context import AIRFLOW_VAR_NAME_FORMAT_MAPPING, context_to_airflow_vars
+else:
+    from airflow.models import BaseOperator
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+    from airflow.utils.operator_helpers import (  # type: ignore[no-redef, attr-defined]
+        AIRFLOW_VAR_NAME_FORMAT_MAPPING,
+        context_to_airflow_vars,
+    )
+
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+    "BaseSensorOperator",
+    "AIRFLOW_VAR_NAME_FORMAT_MAPPING",
+    "context_to_airflow_vars",
+]

From 5432c6e5c3cc2c2c7ecebaee9716999c6337843c Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Sun, 29 Jun 2025 19:58:55 +0100
Subject: [PATCH 304/381] Fix StopIteration in snowflake sql tests (#52394)

---
 .../tests/unit/snowflake/hooks/test_snowflake_sql_api.py    | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake_sql_api.py b/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake_sql_api.py
index 2cbf156a2c94e..7170eac36f413 100644
--- a/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake_sql_api.py
+++ b/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake_sql_api.py
@@ -1107,7 +1107,9 @@ def test_wait_for_query_timeout_error(self, sleep_mock, time_mock):
 
         # Simulate a query that keeps running and never finishes
         hook.get_sql_api_query_status = mock.MagicMock(return_value={"status": "running"})
-        time_mock.side_effect = list(range(5))
+
+        # More side effects to ensure we hit the timeout and avoid StopIteration error
+        time_mock.side_effect = list(range(10))
 
         qid = "qid-789"
         timeout = 3
@@ -1120,7 +1122,7 @@ def test_wait_for_query_timeout_error(self, sleep_mock, time_mock):
         sleep_mock.assert_has_calls([mock.call(1)] * 3)
         assert hook.get_sql_api_query_status.call_count == 4
         hook.get_sql_api_query_status.assert_has_calls([mock.call(query_id=qid)] * 4)
-        assert time_mock.call_count == 5
+        assert time_mock.call_count >= 3
 
     @mock.patch(f"{HOOK_PATH}._make_api_call_with_retries")
     @mock.patch(f"{HOOK_PATH}._process_response")

From 40116e30d7e6db74cf16328ea85940649f261183 Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Sun, 29 Jun 2025 20:26:04 +0100
Subject: [PATCH 305/381] Cleanup unused args example_pyspark.py (#52492)

* Cleanup unused args example_pyspark.py

* Cleanup unused args example_pyspark.py
---
 .../apache/spark/tests/system/apache/spark/example_pyspark.py  | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/providers/apache/spark/tests/system/apache/spark/example_pyspark.py b/providers/apache/spark/tests/system/apache/spark/example_pyspark.py
index d2d8ef6983f04..d8ed823d23c52 100644
--- a/providers/apache/spark/tests/system/apache/spark/example_pyspark.py
+++ b/providers/apache/spark/tests/system/apache/spark/example_pyspark.py
@@ -23,7 +23,6 @@
 
 if typing.TYPE_CHECKING:
     import pandas as pd
-    from pyspark import SparkContext
     from pyspark.sql import SparkSession
 
 from airflow.decorators import dag, task
@@ -43,7 +42,7 @@ def example_pyspark():
 
     # [START task_pyspark]
     @task.pyspark(conn_id="spark-local")
-    def spark_task(spark: SparkSession, sc: SparkContext) -> pd.DataFrame:
+    def spark_task(spark: SparkSession) -> pd.DataFrame:
         df = spark.createDataFrame(
             [
                 (1, "John Doe", 21),

From e455329ca352b31c866f859dfa3446110166153d Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Sun, 29 Jun 2025 22:04:19 +0200
Subject: [PATCH 306/381] Make the dependency script executable (#52493)

---
 dev/constraints-updated-version-check.py | 1 +
 1 file changed, 1 insertion(+)
 mode change 100644 => 100755 dev/constraints-updated-version-check.py

diff --git a/dev/constraints-updated-version-check.py b/dev/constraints-updated-version-check.py
old mode 100644
new mode 100755
index 1b128f18a50d7..bf68c9b067ac7
--- a/dev/constraints-updated-version-check.py
+++ b/dev/constraints-updated-version-check.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python3
 # Licensed to the Apache Software Foundation (ASF) under one
 # or more contributor license agreements.  See the NOTICE file
 # distributed with this work for additional information

From 733a562a925e16391d8ea9d19fb308d4e3802f42 Mon Sep 17 00:00:00 2001
From: Jens Scheffler <95105677+jscheffl@users.noreply.github.com>
Date: Sun, 29 Jun 2025 23:28:46 +0200
Subject: [PATCH 307/381] Close German language gap June 28th (#52459)

* Close German language gap June 28th

* Review feedback

Co-authored-by: Tamara Janina Fingerlin <90063506+TJaniF@users.noreply.github.com>

* Review feedback

---------

Co-authored-by: Tamara Janina Fingerlin <90063506+TJaniF@users.noreply.github.com>
---
 .../src/airflow/ui/public/i18n/locales/de/admin.json     | 5 ++++-
 .../src/airflow/ui/public/i18n/locales/de/common.json    | 9 +++++++++
 .../airflow/ui/public/i18n/locales/de/components.json    | 2 ++
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/de/admin.json b/airflow-core/src/airflow/ui/public/i18n/locales/de/admin.json
index 03fe6bcf6d7ad..d2d8cf7d0d8db 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/de/admin.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/de/admin.json
@@ -40,7 +40,10 @@
       "standardFields": "Standardfelder"
     },
     "nothingFound": {
-        "title": "Keine Verbindungen gefunden!"
+      "description": "Verbindungen, die durch Secret-Managers oder Umgebungsvariablen definiert sind werden hier nicht gelistet.",
+      "documentationLink": "Mehr Details sind in der Airflow-Dokumentation beschrieben.",
+      "learnMore": "Diese Verbindungen werden erst eingelesen, wenn ein Task, der sie verwendet ausgeführt wird und sie sind daher in dieser Ansicht nicht sichtbar.",
+      "title": "Keine Verbindungen gefunden!"
     },
     "searchPlaceholder": "Verbindungen suchen",
     "test": "Verbindung testen",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/de/common.json b/airflow-core/src/airflow/ui/public/i18n/locales/de/common.json
index da82650f85671..f657e7e5d6af2 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/de/common.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/de/common.json
@@ -17,6 +17,7 @@
     "auditLog": "Prüf-Log",
     "xcoms": "Task Kommunikation (XComs)"
   },
+  "collapseDetailsPanel": "Detailansicht ausblenden",
   "createdAssetEvent_one": "Erstelltes Ereignis zu Datenset (Asset)",
   "createdAssetEvent_other": "Erstellte Ereignisse zu Datensets (Assets)",
   "dag_one": "Dag",
@@ -128,6 +129,13 @@
     "manual": "Manuell",
     "scheduled": "Geplant"
   },
+  "scroll": {
+    "direction": {
+      "bottom": "unten",
+      "top": "oben"
+    },
+    "tooltip": "Tastenkombination {{hotkey}} zum scrollen nach {{direction}}"
+  },
   "seconds": "{{count}}s",
   "security": {
     "actions": "Aktionen",
@@ -137,6 +145,7 @@
     "users": "Benutzer"
   },
   "selectLanguage": "Sprache wählen",
+  "showDetailsPanel": "Detailansicht einblenden",
   "sourceAssetEvent_one": "Urspung des Datenset (Asset) Ereignisses",
   "sourceAssetEvent_other": "Urspung der Datenset (Asset) Ereignisse",
   "startDate": "Startdatum",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/de/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/de/components.json
index 3f4a1bf6e3bbe..765fb85ae73bd 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/de/components.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/de/components.json
@@ -44,6 +44,7 @@
   },
   "dagWarnings": {
     "error_one": "1 Fehler",
+    "error_other": "{{count}} Fehler",
     "errorAndWarning": "1 Fehler und {{warningText}}",
     "warning_one": "1 Warnung",
     "warning_other": "{{count}} Warnungen"
@@ -59,6 +60,7 @@
     "runDuration": "Laufzeit"
   },
   "fileUpload": {
+    "files_one": "1 Datei",
     "files_other": "{{count}} Dateien"
   },
   "flexibleForm": {

From 67613f0c38be5b98f7d12d88a6b751d6e27590a6 Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Mon, 30 Jun 2025 03:06:20 +0530
Subject: [PATCH 308/381] Replace models.BaseOperator to Task SDK one for
 Common Providers (#52443)

Part of https://github.com/apache/airflow/issues/52378
---
 .../common/compat/standard/operators.py       |  3 +-
 .../providers/common/compat/version_compat.py | 12 ++++
 .../common/io/operators/file_transfer.py      |  4 +-
 .../providers/common/io/version_compat.py     | 10 ++++
 .../common/sql/operators/generic_transfer.py  |  4 +-
 .../providers/common/sql/operators/sql.py     |  3 +-
 .../providers/common/sql/version_compat.py    | 12 ++++
 .../sql/operators/test_generic_transfer.py    | 59 +++++++++----------
 .../unit/common/sql/operators/test_sql.py     | 57 +++++++++++++-----
 .../snowflake/operators/test_snowflake.py     | 17 +++---
 10 files changed, 118 insertions(+), 63 deletions(-)

diff --git a/providers/common/compat/src/airflow/providers/common/compat/standard/operators.py b/providers/common/compat/src/airflow/providers/common/compat/standard/operators.py
index c8838fe3c2109..b3d35f1aa145f 100644
--- a/providers/common/compat/src/airflow/providers/common/compat/standard/operators.py
+++ b/providers/common/compat/src/airflow/providers/common/compat/standard/operators.py
@@ -46,5 +46,6 @@
     except (ImportError, ModuleNotFoundError):
         from airflow.providers.standard.operators.python import get_current_context
 
+from airflow.providers.common.compat.version_compat import BaseOperator
 
-__all__ = ["PythonOperator", "_SERIALIZERS", "ShortCircuitOperator", "get_current_context"]
+__all__ = ["BaseOperator", "PythonOperator", "_SERIALIZERS", "ShortCircuitOperator", "get_current_context"]
diff --git a/providers/common/compat/src/airflow/providers/common/compat/version_compat.py b/providers/common/compat/src/airflow/providers/common/compat/version_compat.py
index 48d122b669696..02d0f1ac162b0 100644
--- a/providers/common/compat/src/airflow/providers/common/compat/version_compat.py
+++ b/providers/common/compat/src/airflow/providers/common/compat/version_compat.py
@@ -33,3 +33,15 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+AIRFLOW_V_3_1_PLUS = get_base_airflow_version_tuple() >= (3, 1, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "AIRFLOW_V_3_1_PLUS",
+    "BaseOperator",
+]
diff --git a/providers/common/io/src/airflow/providers/common/io/operators/file_transfer.py b/providers/common/io/src/airflow/providers/common/io/operators/file_transfer.py
index 0faec858d1c75..00b23bde989f1 100644
--- a/providers/common/io/src/airflow/providers/common/io/operators/file_transfer.py
+++ b/providers/common/io/src/airflow/providers/common/io/operators/file_transfer.py
@@ -20,7 +20,7 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING
 
-from airflow.providers.common.io.version_compat import AIRFLOW_V_3_0_PLUS
+from airflow.providers.common.io.version_compat import AIRFLOW_V_3_0_PLUS, BaseOperator
 
 if TYPE_CHECKING:
     from airflow.providers.openlineage.extractors import OperatorLineage
@@ -28,10 +28,8 @@
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import ObjectStoragePath
-    from airflow.sdk.bases.operator import BaseOperator
 else:
     from airflow.io.path import ObjectStoragePath  # type: ignore[no-redef]
-    from airflow.models import BaseOperator  # type: ignore[no-redef]
 
 
 class FileTransferOperator(BaseOperator):
diff --git a/providers/common/io/src/airflow/providers/common/io/version_compat.py b/providers/common/io/src/airflow/providers/common/io/version_compat.py
index 48d122b669696..e7a259afb357c 100644
--- a/providers/common/io/src/airflow/providers/common/io/version_compat.py
+++ b/providers/common/io/src/airflow/providers/common/io/version_compat.py
@@ -33,3 +33,13 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+]
diff --git a/providers/common/sql/src/airflow/providers/common/sql/operators/generic_transfer.py b/providers/common/sql/src/airflow/providers/common/sql/operators/generic_transfer.py
index c7839b28aec02..4e3b0a87ce027 100644
--- a/providers/common/sql/src/airflow/providers/common/sql/operators/generic_transfer.py
+++ b/providers/common/sql/src/airflow/providers/common/sql/operators/generic_transfer.py
@@ -23,9 +23,9 @@
 
 from airflow.exceptions import AirflowException
 from airflow.hooks.base import BaseHook
-from airflow.models import BaseOperator
 from airflow.providers.common.sql.hooks.sql import DbApiHook
 from airflow.providers.common.sql.triggers.sql import SQLExecuteQueryTrigger
+from airflow.providers.common.sql.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     import jinja2
@@ -192,7 +192,7 @@ def execute_complete(
                 )
 
                 self.log.info("Offset increased to %d", offset)
-                self.xcom_push(context=context, key="offset", value=offset)
+                context["ti"].xcom_push(key="offset", value=offset)
 
                 self.log.info("Inserting %d rows into %s", len(results), self.destination_conn_id)
                 self.destination_hook.insert_rows(
diff --git a/providers/common/sql/src/airflow/providers/common/sql/operators/sql.py b/providers/common/sql/src/airflow/providers/common/sql/operators/sql.py
index af04349532a51..250a249d5af19 100644
--- a/providers/common/sql/src/airflow/providers/common/sql/operators/sql.py
+++ b/providers/common/sql/src/airflow/providers/common/sql/operators/sql.py
@@ -25,9 +25,10 @@
 
 from airflow.exceptions import AirflowException, AirflowFailException
 from airflow.hooks.base import BaseHook
-from airflow.models import BaseOperator, SkipMixin
+from airflow.models import SkipMixin
 from airflow.providers.common.sql.hooks.handlers import fetch_all_handler, return_single_query_results
 from airflow.providers.common.sql.hooks.sql import DbApiHook
+from airflow.providers.common.sql.version_compat import BaseOperator
 from airflow.utils.helpers import merge_dicts
 
 if TYPE_CHECKING:
diff --git a/providers/common/sql/src/airflow/providers/common/sql/version_compat.py b/providers/common/sql/src/airflow/providers/common/sql/version_compat.py
index 48d122b669696..b326387fea2a1 100644
--- a/providers/common/sql/src/airflow/providers/common/sql/version_compat.py
+++ b/providers/common/sql/src/airflow/providers/common/sql/version_compat.py
@@ -33,3 +33,15 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator, BaseSensorOperator
+else:
+    from airflow.models import BaseOperator
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+    "BaseSensorOperator",
+]
diff --git a/providers/common/sql/tests/unit/common/sql/operators/test_generic_transfer.py b/providers/common/sql/tests/unit/common/sql/operators/test_generic_transfer.py
index 92b118d703ae0..fe01d68d2f1b4 100644
--- a/providers/common/sql/tests/unit/common/sql/operators/test_generic_transfer.py
+++ b/providers/common/sql/tests/unit/common/sql/operators/test_generic_transfer.py
@@ -55,11 +55,6 @@
 
 @pytest.mark.backend("mysql")
 class TestMySql:
-    def setup_method(self):
-        args = {"owner": "airflow", "start_date": DEFAULT_DATE}
-        dag = DAG(TEST_DAG_ID, schedule=None, default_args=args)
-        self.dag = dag
-
     def teardown_method(self):
         from airflow.providers.mysql.hooks.mysql import MySqlHook
 
@@ -77,7 +72,7 @@ def teardown_method(self):
             "mysql-connector-python",
         ],
     )
-    def test_mysql_to_mysql(self, client):
+    def test_mysql_to_mysql(self, client, dag_maker):
         class MySqlContext:
             def __init__(self, client):
                 self.client = client
@@ -92,6 +87,25 @@ def __exit__(self, exc_type, exc_val, exc_tb):
 
         with MySqlContext(client):
             sql = "SELECT * FROM connection;"
+            with dag_maker(f"TEST_DAG_ID_{client}", start_date=DEFAULT_DATE):
+                op = GenericTransfer(
+                    task_id="test_m2m",
+                    preoperator=[
+                        "DROP TABLE IF EXISTS test_mysql_to_mysql",
+                        "CREATE TABLE IF NOT EXISTS test_mysql_to_mysql LIKE connection",
+                    ],
+                    source_conn_id="airflow_db",
+                    destination_conn_id="airflow_db",
+                    destination_table="test_mysql_to_mysql",
+                    sql=sql,
+                )
+
+            dag_maker.run_ti(op.task_id)
+
+    @mock.patch("airflow.providers.common.sql.hooks.sql.DbApiHook.insert_rows")
+    def test_mysql_to_mysql_replace(self, mock_insert, dag_maker):
+        sql = "SELECT * FROM connection LIMIT 10;"
+        with dag_maker("TEST_DAG_ID", start_date=DEFAULT_DATE):
             op = GenericTransfer(
                 task_id="test_m2m",
                 preoperator=[
@@ -102,27 +116,10 @@ def __exit__(self, exc_type, exc_val, exc_tb):
                 destination_conn_id="airflow_db",
                 destination_table="test_mysql_to_mysql",
                 sql=sql,
-                dag=self.dag,
+                insert_args={"replace": True},
             )
-            op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
 
-    @mock.patch("airflow.providers.common.sql.hooks.sql.DbApiHook.insert_rows")
-    def test_mysql_to_mysql_replace(self, mock_insert):
-        sql = "SELECT * FROM connection LIMIT 10;"
-        op = GenericTransfer(
-            task_id="test_m2m",
-            preoperator=[
-                "DROP TABLE IF EXISTS test_mysql_to_mysql",
-                "CREATE TABLE IF NOT EXISTS test_mysql_to_mysql LIKE connection",
-            ],
-            source_conn_id="airflow_db",
-            destination_conn_id="airflow_db",
-            destination_table="test_mysql_to_mysql",
-            sql=sql,
-            dag=self.dag,
-            insert_args={"replace": True},
-        )
-        op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
+        dag_maker.run_ti(op.task_id)
         assert mock_insert.called
         _, kwargs = mock_insert.call_args
         assert "replace" in kwargs
@@ -140,7 +137,7 @@ def teardown_method(self):
     def test_postgres_to_postgres(self, dag_maker):
         sql = "SELECT * FROM INFORMATION_SCHEMA.TABLES LIMIT 100;"
         with dag_maker(default_args={"owner": "airflow", "start_date": DEFAULT_DATE}, serialized=True):
-            op = GenericTransfer(
+            _ = GenericTransfer(
                 task_id="test_p2p",
                 preoperator=[
                     "DROP TABLE IF EXISTS test_postgres_to_postgres",
@@ -151,14 +148,14 @@ def test_postgres_to_postgres(self, dag_maker):
                 destination_table="test_postgres_to_postgres",
                 sql=sql,
             )
-        dag_maker.create_dagrun()
-        op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
+        dr = dag_maker.create_dagrun()
+        dag_maker.run_ti("test_p2p", dr)
 
     @mock.patch("airflow.providers.common.sql.hooks.sql.DbApiHook.insert_rows")
     def test_postgres_to_postgres_replace(self, mock_insert, dag_maker):
         sql = "SELECT id, conn_id, conn_type FROM connection LIMIT 10;"
         with dag_maker(default_args={"owner": "airflow", "start_date": DEFAULT_DATE}, serialized=True):
-            op = GenericTransfer(
+            _ = GenericTransfer(
                 task_id="test_p2p",
                 preoperator=[
                     "DROP TABLE IF EXISTS test_postgres_to_postgres",
@@ -174,8 +171,8 @@ def test_postgres_to_postgres_replace(self, mock_insert, dag_maker):
                     "replace_index": "id",
                 },
             )
-        dag_maker.create_dagrun()
-        op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
+        dr = dag_maker.create_dagrun()
+        dag_maker.run_ti("test_p2p", dr)
         assert mock_insert.called
         _, kwargs = mock_insert.call_args
         assert "replace" in kwargs
diff --git a/providers/common/sql/tests/unit/common/sql/operators/test_sql.py b/providers/common/sql/tests/unit/common/sql/operators/test_sql.py
index c576037630440..b3e02f8d7f8ce 100644
--- a/providers/common/sql/tests/unit/common/sql/operators/test_sql.py
+++ b/providers/common/sql/tests/unit/common/sql/operators/test_sql.py
@@ -1095,6 +1095,30 @@ def setup_method(self):
         self.branch_2 = EmptyOperator(task_id="branch_2", dag=self.dag)
         self.branch_3 = None
 
+    def get_ti(self, task_id, dr=None):
+        if dr is None:
+            if AIRFLOW_V_3_0_PLUS:
+                dagrun_kwargs = {
+                    "logical_date": DEFAULT_DATE,
+                    "run_after": DEFAULT_DATE,
+                    "triggered_by": DagRunTriggeredByType.TEST,
+                }
+            else:
+                dagrun_kwargs = {"execution_date": DEFAULT_DATE}
+            dr = self.dag.create_dagrun(
+                run_id=f"manual__{timezone.utcnow().isoformat()}",
+                run_type=DagRunType.MANUAL,
+                start_date=timezone.utcnow(),
+                state=State.RUNNING,
+                data_interval=(DEFAULT_DATE, DEFAULT_DATE),
+                **dagrun_kwargs,
+            )
+
+        ti = dr.get_task_instance(task_id)
+        ti.task = self.dag.get_task(ti.task_id)
+
+        return ti
+
     def teardown_method(self):
         with create_session() as session:
             session.query(DagRun).delete()
@@ -1124,7 +1148,7 @@ def test_unsupported_conn_type(self):
         )
 
         with pytest.raises(AirflowException):
-            op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
+            op.execute({})
 
     def test_invalid_conn(self):
         """Check if BranchSQLOperator throws an exception for invalid connection"""
@@ -1138,7 +1162,7 @@ def test_invalid_conn(self):
         )
 
         with pytest.raises(AirflowException):
-            op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
+            op.execute({})
 
     def test_invalid_follow_task_true(self):
         """Check if BranchSQLOperator throws an exception for invalid connection"""
@@ -1152,7 +1176,7 @@ def test_invalid_follow_task_true(self):
         )
 
         with pytest.raises(AirflowException):
-            op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
+            op.execute({})
 
     def test_invalid_follow_task_false(self):
         """Check if BranchSQLOperator throws an exception for invalid connection"""
@@ -1166,12 +1190,13 @@ def test_invalid_follow_task_false(self):
         )
 
         with pytest.raises(AirflowException):
-            op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
+            op.execute({})
 
     @pytest.mark.backend("mysql")
     def test_sql_branch_operator_mysql(self, branch_op):
         """Check if BranchSQLOperator works with backend"""
-        branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
+
+        branch_op.execute({"ti": mock.MagicMock(task=branch_op)})
 
     @pytest.mark.backend("postgres")
     def test_sql_branch_operator_postgres(self):
@@ -1184,7 +1209,7 @@ def test_sql_branch_operator_postgres(self):
             follow_task_ids_if_false=["branch_2"],
             dag=self.dag,
         )
-        branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
+        self.get_ti(branch_op.task_id).run()
 
     @mock.patch("airflow.providers.common.sql.operators.sql.BaseSQLOperator.get_db_hook")
     def test_branch_single_value_with_dag_run(self, mock_get_db_hook, branch_op):
@@ -1223,8 +1248,9 @@ def test_branch_single_value_with_dag_run(self, mock_get_db_hook, branch_op):
 
             assert exc_info.value.tasks == [("branch_2", -1)]
         else:
-            branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            self.get_ti(branch_op.task_id, dr).run()
             tis = dr.get_task_instances()
+
             for ti in tis:
                 if ti.task_id == "make_choice":
                     assert ti.state == State.SUCCESS
@@ -1267,11 +1293,11 @@ def test_branch_true_with_dag_run(self, mock_get_db_hook, true_value, branch_op)
             from airflow.exceptions import DownstreamTasksSkipped
 
             with pytest.raises(DownstreamTasksSkipped) as exc_info:
-                branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+                branch_op.execute({})
 
             assert exc_info.value.tasks == [("branch_2", -1)]
         else:
-            branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            self.get_ti(branch_op.task_id, dr).run()
             tis = dr.get_task_instances()
             for ti in tis:
                 if ti.task_id == "make_choice":
@@ -1315,11 +1341,12 @@ def test_branch_false_with_dag_run(self, mock_get_db_hook, false_value, branch_o
             from airflow.exceptions import DownstreamTasksSkipped
 
             with pytest.raises(DownstreamTasksSkipped) as exc_info:
-                branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+                branch_op.execute({})
             assert exc_info.value.tasks == [("branch_1", -1)]
         else:
-            branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            self.get_ti(branch_op.task_id, dr).run()
             tis = dr.get_task_instances()
+
             for ti in tis:
                 if ti.task_id == "make_choice":
                     assert ti.state == State.SUCCESS
@@ -1375,7 +1402,7 @@ def test_branch_list_with_dag_run(self, mock_get_db_hook):
                 branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
             assert exc_info.value.tasks == [("branch_3", -1)]
         else:
-            branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            self.get_ti(branch_op.task_id, dr).run()
             tis = dr.get_task_instances()
             for ti in tis:
                 if ti.task_id == "make_choice":
@@ -1416,7 +1443,7 @@ def test_invalid_query_result_with_dag_run(self, mock_get_db_hook, branch_op):
         mock_get_records.return_value = ["Invalid Value"]
 
         with pytest.raises(AirflowException):
-            branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            branch_op.execute({})
 
     @mock.patch("airflow.providers.common.sql.operators.sql.BaseSQLOperator.get_db_hook")
     def test_with_skip_in_branch_downstream_dependencies(self, mock_get_db_hook, branch_op):
@@ -1447,7 +1474,7 @@ def test_with_skip_in_branch_downstream_dependencies(self, mock_get_db_hook, bra
         for true_value in SUPPORTED_TRUE_VALUES:
             mock_get_records.return_value = [true_value]
 
-            branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            self.get_ti(branch_op.task_id, dr).run()
 
             tis = dr.get_task_instances()
             for ti in tis:
@@ -1493,7 +1520,7 @@ def test_with_skip_in_branch_downstream_dependencies2(self, mock_get_db_hook, fa
                 branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
             assert exc_info.value.tasks == [("branch_1", -1)]
         else:
-            branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            self.get_ti(branch_op.task_id, dr).run()
             tis = dr.get_task_instances()
             for ti in tis:
                 if ti.task_id == "make_choice":
diff --git a/providers/snowflake/tests/unit/snowflake/operators/test_snowflake.py b/providers/snowflake/tests/unit/snowflake/operators/test_snowflake.py
index b61b699774e78..9f52f80a4eb41 100644
--- a/providers/snowflake/tests/unit/snowflake/operators/test_snowflake.py
+++ b/providers/snowflake/tests/unit/snowflake/operators/test_snowflake.py
@@ -58,23 +58,20 @@
 
 @pytest.mark.db_test
 class TestSnowflakeOperator:
-    def setup_method(self):
-        args = {"owner": "airflow", "start_date": DEFAULT_DATE}
-        dag = DAG(TEST_DAG_ID, schedule=None, default_args=args)
-        self.dag = dag
-
     @mock.patch("airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator.get_db_hook")
-    def test_snowflake_operator(self, mock_get_db_hook):
+    def test_snowflake_operator(self, mock_get_db_hook, dag_maker):
         sql = """
         CREATE TABLE IF NOT EXISTS test_airflow (
             dummy VARCHAR(50)
         );
         """
-        operator = SQLExecuteQueryOperator(
-            task_id="basic_snowflake", sql=sql, dag=self.dag, do_xcom_push=False, conn_id="snowflake_default"
-        )
+
+        with dag_maker(TEST_DAG_ID):
+            operator = SQLExecuteQueryOperator(
+                task_id="basic_snowflake", sql=sql, do_xcom_push=False, conn_id="snowflake_default"
+            )
         # do_xcom_push=False because otherwise the XCom test will fail due to the mocking (it actually works)
-        operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
+        dag_maker.run_ti(operator.task_id)
 
 
 class TestSnowflakeOperatorForParams:

From d3a33da891f6a31cfe6b7e0c67fda142f13fcf5f Mon Sep 17 00:00:00 2001
From: Jens Scheffler <95105677+jscheffl@users.noreply.github.com>
Date: Sun, 29 Jun 2025 23:43:32 +0200
Subject: [PATCH 309/381] Generally do not force version_compat.py to have
 pytests (#52496)

---
 .../unit/always/test_project_structure.py     | 47 +------------------
 1 file changed, 2 insertions(+), 45 deletions(-)

diff --git a/airflow-core/tests/unit/always/test_project_structure.py b/airflow-core/tests/unit/always/test_project_structure.py
index 3859f863f8151..2a818c13ac4dd 100644
--- a/airflow-core/tests/unit/always/test_project_structure.py
+++ b/airflow-core/tests/unit/always/test_project_structure.py
@@ -61,8 +61,6 @@ def test_providers_modules_should_have_tests(self):
         # We should make sure that one goes to 0
         # TODO(potiuk) - check if that test actually tests something
         OVERLOOKED_TESTS = [
-            "providers/airbyte/tests/unit/airbyte/test_version_compat.py",
-            "providers/alibaba/tests/unit/alibaba/test_version_compat.py",
             "providers/amazon/tests/unit/amazon/aws/auth_manager/datamodels/test_login.py",
             "providers/amazon/tests/unit/amazon/aws/auth_manager/security_manager/test_aws_security_manager_override.py",
             "providers/amazon/tests/unit/amazon/aws/executors/batch/test_batch_executor_config.py",
@@ -84,26 +82,12 @@ def test_providers_modules_should_have_tests(self):
             "providers/amazon/tests/unit/amazon/aws/utils/test_rds.py",
             "providers/amazon/tests/unit/amazon/aws/utils/test_sagemaker.py",
             "providers/amazon/tests/unit/amazon/aws/waiters/test_base_waiter.py",
-            "providers/amazon/tests/unit/amazon/test_version_compat.py",
-            "providers/apache/cassandra/tests/unit/apache/cassandra/test_version_compat.py",
-            "providers/apache/flink/tests/unit/apache/flink/test_version_compat.py",
-            "providers/apache/hdfs/tests/unit/apache/hdfs/test_version_compat.py",
             "providers/apache/hdfs/tests/unit/apache/hdfs/hooks/test_hdfs.py",
             "providers/apache/hdfs/tests/unit/apache/hdfs/log/test_hdfs_task_handler.py",
             "providers/apache/hdfs/tests/unit/apache/hdfs/sensors/test_hdfs.py",
-            "providers/apache/hive/tests/unit/apache/hive/test_version_compat.py",
             "providers/apache/hive/tests/unit/apache/hive/plugins/test_hive.py",
-            "providers/apache/impala/tests/unit/apache/impala/test_version_compat.py",
-            "providers/apache/livy/tests/unit/apache/livy/test_version_compat.py",
-            "providers/apache/pig/tests/unit/apache/pig/test_version_compat.py",
-            "providers/apache/spark/tests/unit/apache/spark/test_version_compat.py",
-            "providers/apache/tinkerpop/tests/unit/apache/tinkerpop/test_version_compat.py",
-            "providers/arangodb/tests/unit/arangodb/test_version_compat.py",
-            "providers/asana/tests/unit/asana/test_version_compat.py",
-            "providers/atlassian/jira/tests/unit/atlassian/jira/test_version_compat.py",
             "providers/celery/tests/unit/celery/executors/test_celery_executor_utils.py",
             "providers/celery/tests/unit/celery/executors/test_default_celery.py",
-            "providers/celery/tests/unit/celery/test_version_compat.py",
             "providers/cloudant/tests/unit/cloudant/test_cloudant_fake.py",
             "providers/cncf/kubernetes/tests/unit/cncf/kubernetes/executors/test_kubernetes_executor_types.py",
             "providers/cncf/kubernetes/tests/unit/cncf/kubernetes/executors/test_kubernetes_executor_utils.py",
@@ -114,35 +98,25 @@ def test_providers_modules_should_have_tests(self):
             "providers/cncf/kubernetes/tests/unit/cncf/kubernetes/test_kube_config.py",
             "providers/cncf/kubernetes/tests/unit/cncf/kubernetes/test_python_kubernetes_script.py",
             "providers/cncf/kubernetes/tests/unit/cncf/kubernetes/test_secret.py",
-            "providers/cncf/kubernetes/tests/unit/cncf/kubernetes/test_version_compat.py",
             "providers/cncf/kubernetes/tests/unit/cncf/kubernetes/triggers/test_kubernetes_pod.py",
             "providers/cncf/kubernetes/tests/unit/cncf/kubernetes/utils/test_delete_from.py",
             "providers/cncf/kubernetes/tests/unit/cncf/kubernetes/utils/test_k8s_hashlib_wrapper.py",
             "providers/cncf/kubernetes/tests/unit/cncf/kubernetes/utils/test_xcom_sidecar.py",
-            "providers/common/sql/tests/unit/common/sql/test_version_compat.py",
             "providers/common/compat/tests/unit/common/compat/lineage/test_entities.py",
             "providers/common/compat/tests/unit/common/compat/standard/test_operators.py",
             "providers/common/compat/tests/unit/common/compat/standard/test_triggers.py",
             "providers/common/compat/tests/unit/common/compat/standard/test_utils.py",
-            "providers/common/compat/tests/unit/common/compat/test_version_compat.py",
-            "providers/common/io/tests/unit/common/io/test_version_compat.py",
             "providers/common/messaging/tests/unit/common/messaging/providers/test_base_provider.py",
             "providers/common/messaging/tests/unit/common/messaging/providers/test_sqs.py",
-            "providers/datadog/tests/unit/datadog/test_version_compat.py",
-            "providers/databricks/tests/unit/databricks/test_version_compat.py",
-            "providers/dbt/cloud/tests/unit/dbt/cloud/test_version_compat.py",
-            "providers/docker/tests/unit/docker/test_version_compat.py",
             "providers/edge3/tests/unit/edge3/models/test_edge_job.py",
             "providers/edge3/tests/unit/edge3/models/test_edge_logs.py",
             "providers/edge3/tests/unit/edge3/models/test_edge_worker.py",
-            "providers/edge3/tests/unit/edge3/test_version_compat.py",
             "providers/edge3/tests/unit/edge3/worker_api/routes/test__v2_compat.py",
             "providers/edge3/tests/unit/edge3/worker_api/routes/test__v2_routes.py",
             "providers/edge3/tests/unit/edge3/worker_api/routes/test_jobs.py",
             "providers/edge3/tests/unit/edge3/worker_api/test_app.py",
             "providers/edge3/tests/unit/edge3/worker_api/test_auth.py",
             "providers/edge3/tests/unit/edge3/worker_api/test_datamodels.py",
-            "providers/elasticsearch/tests/unit/elasticsearch/test_version_compat.py",
             "providers/fab/tests/unit/fab/auth_manager/api_fastapi/datamodels/test_login.py",
             "providers/fab/tests/unit/fab/migrations/test_env.py",
             "providers/fab/tests/unit/fab/www/api_connexion/test_exceptions.py",
@@ -165,8 +139,6 @@ def test_providers_modules_should_have_tests(self):
             "providers/fab/tests/unit/fab/www/test_session.py",
             "providers/fab/tests/unit/fab/www/test_utils.py",
             "providers/fab/tests/unit/fab/www/test_views.py",
-            "providers/ftp/tests/unit/ftp/test_version_compat.py",
-            "providers/github/tests/unit/github/test_version_compat.py",
             "providers/google/tests/unit/google/cloud/fs/test_gcs.py",
             "providers/google/tests/unit/google/cloud/links/test_automl.py",
             "providers/google/tests/unit/google/cloud/links/test_base.py",
@@ -215,22 +187,9 @@ def test_providers_modules_should_have_tests(self):
             "providers/google/tests/unit/google/common/test_consts.py",
             "providers/google/tests/unit/google/common/hooks/test_operation_helpers.py",
             "providers/google/tests/unit/google/test_go_module_utils.py",
-            "providers/google/tests/unit/google/test_version_compat.py",
-            "providers/http/tests/unit/http/test_version_compat.py",
             "providers/http/tests/unit/http/test_exceptions.py",
-            "providers/imap/tests/unit/imap/test_version_compat.py",
-            "providers/jenkins/tests/unit/jenkins/test_version_compat.py",
             "providers/keycloak/tests/unit/keycloak/auth_manager/datamodels/test_token.py",
-            "providers/mongo/tests/unit/mongo/test_version_compat.py",
             "providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_adls.py",
-            "providers/microsoft/azure/tests/unit/microsoft/azure/test_version_compat.py",
-            "providers/openlineage/tests/unit/openlineage/test_version_compat.py",
-            "providers/opensearch/tests/unit/opensearch/test_version_compat.py",
-            "providers/oracle/tests/unit/oracle/test_version_compat.py",
-            "providers/presto/tests/unit/presto/test_version_compat.py",
-            "providers/redis/tests/unit/redis/test_version_compat.py",
-            "providers/sftp/tests/unit/sftp/test_version_compat.py",
-            "providers/snowflake/tests/unit/snowflake/test_version_compat.py",
             "providers/snowflake/tests/unit/snowflake/triggers/test_snowflake_trigger.py",
             "providers/standard/tests/unit/standard/operators/test_branch.py",
             "providers/standard/tests/unit/standard/operators/test_empty.py",
@@ -238,11 +197,7 @@ def test_providers_modules_should_have_tests(self):
             "providers/standard/tests/unit/standard/operators/test_trigger_dagrun.py",
             "providers/standard/tests/unit/standard/sensors/test_external_task.py",
             "providers/standard/tests/unit/standard/sensors/test_filesystem.py",
-            "providers/standard/tests/unit/standard/test_version_compat.py",
             "providers/standard/tests/unit/standard/utils/test_sensor_helper.py",
-            "providers/tableau/tests/unit/tableau/test_version_compat.py",
-            "providers/trino/tests/unit/trino/test_version_compat.py",
-            "providers/weaviate/tests/unit/weaviate/test_version_compat.py",
         ]
         modules_files: list[pathlib.Path] = list(
             AIRFLOW_PROVIDERS_ROOT_PATH.glob("**/src/airflow/providers/**/*.py")
@@ -274,6 +229,8 @@ def test_providers_modules_should_have_tests(self):
         current_test_files = set(f for f in current_test_files if not f.name == "__init__.py")
         # Exclude node_modules
         current_test_files = set(f for f in current_test_files if "node_modules" not in f.parts)
+        # Exclude version_compat.py
+        modules_files = filter(lambda f: f.name != "version_compat.py", modules_files)
 
         modules_files_set = set(modules_files)
         expected_test_files = set(

From 554ae58a4882439c775c287666c587e5479fb00d Mon Sep 17 00:00:00 2001
From: Kevin Yang <85313829+sjyangkevin@users.noreply.github.com>
Date: Mon, 30 Jun 2025 02:56:30 -0400
Subject: [PATCH 310/381] Provider Migration: Update Apache Druid for Airflow
 3.0 compatibility (#52498)

* Update BaseOperator imports for Airflow 3.0 compatibility

merge updates from master

* remove version_compat.py update as PR 52496
---
 .../providers/apache/druid/operators/druid.py |  4 +-
 .../apache/druid/transfers/hive_to_druid.py   |  4 +-
 .../providers/apache/druid/version_compat.py  | 48 +++++++++++++++++++
 3 files changed, 52 insertions(+), 4 deletions(-)
 create mode 100644 providers/apache/druid/src/airflow/providers/apache/druid/version_compat.py

diff --git a/providers/apache/druid/src/airflow/providers/apache/druid/operators/druid.py b/providers/apache/druid/src/airflow/providers/apache/druid/operators/druid.py
index 6867488028d29..cd9c70a06e06b 100644
--- a/providers/apache/druid/src/airflow/providers/apache/druid/operators/druid.py
+++ b/providers/apache/druid/src/airflow/providers/apache/druid/operators/druid.py
@@ -20,11 +20,11 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING, Any
 
-from airflow.models import BaseOperator
 from airflow.providers.apache.druid.hooks.druid import DruidHook, IngestionType
+from airflow.providers.apache.druid.version_compat import BaseOperator
 
 if TYPE_CHECKING:
-    from airflow.utils.context import Context
+    from airflow.providers.apache.druid.version_compat import Context
 
 
 class DruidOperator(BaseOperator):
diff --git a/providers/apache/druid/src/airflow/providers/apache/druid/transfers/hive_to_druid.py b/providers/apache/druid/src/airflow/providers/apache/druid/transfers/hive_to_druid.py
index 1e5280eedfe4c..5cd4db23c469e 100644
--- a/providers/apache/druid/src/airflow/providers/apache/druid/transfers/hive_to_druid.py
+++ b/providers/apache/druid/src/airflow/providers/apache/druid/transfers/hive_to_druid.py
@@ -22,12 +22,12 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING, Any
 
-from airflow.models import BaseOperator
 from airflow.providers.apache.druid.hooks.druid import DruidHook
+from airflow.providers.apache.druid.version_compat import BaseOperator
 from airflow.providers.apache.hive.hooks.hive import HiveCliHook, HiveMetastoreHook
 
 if TYPE_CHECKING:
-    from airflow.utils.context import Context
+    from airflow.providers.apache.druid.version_compat import Context
 
 LOAD_CHECK_INTERVAL = 5
 DEFAULT_TARGET_PARTITION_SIZE = 5000000
diff --git a/providers/apache/druid/src/airflow/providers/apache/druid/version_compat.py b/providers/apache/druid/src/airflow/providers/apache/druid/version_compat.py
new file mode 100644
index 0000000000000..3b1b09b65e281
--- /dev/null
+++ b/providers/apache/druid/src/airflow/providers/apache/druid/version_compat.py
@@ -0,0 +1,48 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+    from airflow.sdk.definitions.context import Context
+else:
+    from airflow.models import BaseOperator
+    from airflow.utils.context import Context
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+    "Context",
+]

From a9a7fcc5192946f0546f70053d6fd498de381f76 Mon Sep 17 00:00:00 2001
From: Dov Benyomin Sohacheski <b@kloud.email>
Date: Mon, 30 Jun 2025 09:57:37 +0300
Subject: [PATCH 311/381] Replace models.BaseOperator to Task SDK for http
 (#52506)

---
 .../http/src/airflow/providers/http/operators/http.py    | 2 +-
 .../http/src/airflow/providers/http/sensors/http.py      | 7 +------
 .../http/src/airflow/providers/http/version_compat.py    | 9 +++++++++
 3 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/providers/http/src/airflow/providers/http/operators/http.py b/providers/http/src/airflow/providers/http/operators/http.py
index ca36ac471c7fd..6e6c48ea94a90 100644
--- a/providers/http/src/airflow/providers/http/operators/http.py
+++ b/providers/http/src/airflow/providers/http/operators/http.py
@@ -28,8 +28,8 @@
 from airflow.configuration import conf
 from airflow.exceptions import AirflowException
 from airflow.hooks.base import BaseHook
-from airflow.models import BaseOperator
 from airflow.providers.http.triggers.http import HttpTrigger, serialize_auth_type
+from airflow.providers.http.version_compat import BaseOperator
 from airflow.utils.helpers import merge_dicts
 
 if TYPE_CHECKING:
diff --git a/providers/http/src/airflow/providers/http/sensors/http.py b/providers/http/src/airflow/providers/http/sensors/http.py
index a9d9274afd109..f395ab2bb8ca3 100644
--- a/providers/http/src/airflow/providers/http/sensors/http.py
+++ b/providers/http/src/airflow/providers/http/sensors/http.py
@@ -25,12 +25,7 @@
 from airflow.exceptions import AirflowException
 from airflow.providers.http.hooks.http import HttpHook
 from airflow.providers.http.triggers.http import HttpSensorTrigger
-from airflow.providers.http.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+from airflow.providers.http.version_compat import AIRFLOW_V_3_0_PLUS, BaseSensorOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/http/src/airflow/providers/http/version_compat.py b/providers/http/src/airflow/providers/http/version_compat.py
index 48d122b669696..a4c1cfadb6992 100644
--- a/providers/http/src/airflow/providers/http/version_compat.py
+++ b/providers/http/src/airflow/providers/http/version_compat.py
@@ -33,3 +33,12 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.models import BaseOperator
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+
+__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseOperator", "BaseSensorOperator"]

From 15313b08faf612d6ab960d67c235427fdc0f8980 Mon Sep 17 00:00:00 2001
From: Dov Benyomin Sohacheski <b@kloud.email>
Date: Mon, 30 Jun 2025 09:58:50 +0300
Subject: [PATCH 312/381] Replace models.BaseOperator to Task SDK for
 apache/livy (#52499)

---
 .../livy/src/airflow/providers/apache/livy/hooks/livy.py | 2 --
 .../src/airflow/providers/apache/livy/operators/livy.py  | 4 +---
 .../src/airflow/providers/apache/livy/sensors/livy.py    | 9 +--------
 .../src/airflow/providers/apache/livy/triggers/livy.py   | 3 ---
 .../src/airflow/providers/apache/livy/version_compat.py  | 8 ++++++++
 5 files changed, 10 insertions(+), 16 deletions(-)

diff --git a/providers/apache/livy/src/airflow/providers/apache/livy/hooks/livy.py b/providers/apache/livy/src/airflow/providers/apache/livy/hooks/livy.py
index 2cf8957b1120b..68912c30fe9d3 100644
--- a/providers/apache/livy/src/airflow/providers/apache/livy/hooks/livy.py
+++ b/providers/apache/livy/src/airflow/providers/apache/livy/hooks/livy.py
@@ -14,8 +14,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-"""This module contains the Apache Livy hook."""
-
 from __future__ import annotations
 
 import asyncio
diff --git a/providers/apache/livy/src/airflow/providers/apache/livy/operators/livy.py b/providers/apache/livy/src/airflow/providers/apache/livy/operators/livy.py
index 645d81542c6c2..57f90832bd27a 100644
--- a/providers/apache/livy/src/airflow/providers/apache/livy/operators/livy.py
+++ b/providers/apache/livy/src/airflow/providers/apache/livy/operators/livy.py
@@ -14,8 +14,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-"""This module contains the Apache Livy operator."""
-
 from __future__ import annotations
 
 import time
@@ -25,9 +23,9 @@
 
 from airflow.configuration import conf
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.apache.livy.hooks.livy import BatchState, LivyHook
 from airflow.providers.apache.livy.triggers.livy import LivyTrigger
+from airflow.providers.apache.livy.version_compat import BaseOperator
 from airflow.providers.common.compat.openlineage.utils.spark import (
     inject_parent_job_information_into_spark_properties,
     inject_transport_information_into_spark_properties,
diff --git a/providers/apache/livy/src/airflow/providers/apache/livy/sensors/livy.py b/providers/apache/livy/src/airflow/providers/apache/livy/sensors/livy.py
index cf2f4aa15f017..ca0b352d7ee1a 100644
--- a/providers/apache/livy/src/airflow/providers/apache/livy/sensors/livy.py
+++ b/providers/apache/livy/src/airflow/providers/apache/livy/sensors/livy.py
@@ -14,20 +14,13 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-"""This module contains the Apache Livy sensor."""
-
 from __future__ import annotations
 
 from collections.abc import Sequence
 from typing import TYPE_CHECKING, Any
 
 from airflow.providers.apache.livy.hooks.livy import LivyHook
-from airflow.providers.apache.livy.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+from airflow.providers.apache.livy.version_compat import BaseSensorOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/apache/livy/src/airflow/providers/apache/livy/triggers/livy.py b/providers/apache/livy/src/airflow/providers/apache/livy/triggers/livy.py
index 9c47706b73718..20a8e0382d7d9 100644
--- a/providers/apache/livy/src/airflow/providers/apache/livy/triggers/livy.py
+++ b/providers/apache/livy/src/airflow/providers/apache/livy/triggers/livy.py
@@ -14,9 +14,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-
-"""This module contains the Apache Livy Trigger."""
-
 from __future__ import annotations
 
 import asyncio
diff --git a/providers/apache/livy/src/airflow/providers/apache/livy/version_compat.py b/providers/apache/livy/src/airflow/providers/apache/livy/version_compat.py
index 48d122b669696..126f95c848abd 100644
--- a/providers/apache/livy/src/airflow/providers/apache/livy/version_compat.py
+++ b/providers/apache/livy/src/airflow/providers/apache/livy/version_compat.py
@@ -33,3 +33,11 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator, BaseSensorOperator
+else:
+    from airflow.models import BaseOperator
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+
+__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseOperator", "BaseSensorOperator"]

From 98fd2792c3ee5cee29c28362063a6089261776c2 Mon Sep 17 00:00:00 2001
From: Dov Benyomin Sohacheski <b@kloud.email>
Date: Mon, 30 Jun 2025 10:00:19 +0300
Subject: [PATCH 313/381] Replace models.BaseOperator to Task SDK for
 apache/hdfs (#52505)

---
 .../src/airflow/providers/apache/hdfs/hooks/webhdfs.py     | 2 --
 .../src/airflow/providers/apache/hdfs/sensors/web_hdfs.py  | 7 +------
 .../src/airflow/providers/apache/hdfs/version_compat.py    | 7 +++++++
 3 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/providers/apache/hdfs/src/airflow/providers/apache/hdfs/hooks/webhdfs.py b/providers/apache/hdfs/src/airflow/providers/apache/hdfs/hooks/webhdfs.py
index f84588df54fe5..e3b735228fd2f 100644
--- a/providers/apache/hdfs/src/airflow/providers/apache/hdfs/hooks/webhdfs.py
+++ b/providers/apache/hdfs/src/airflow/providers/apache/hdfs/hooks/webhdfs.py
@@ -15,8 +15,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-"""Hook for Web HDFS."""
-
 from __future__ import annotations
 
 import logging
diff --git a/providers/apache/hdfs/src/airflow/providers/apache/hdfs/sensors/web_hdfs.py b/providers/apache/hdfs/src/airflow/providers/apache/hdfs/sensors/web_hdfs.py
index cbd60378a5cfe..342cb5b526ba6 100644
--- a/providers/apache/hdfs/src/airflow/providers/apache/hdfs/sensors/web_hdfs.py
+++ b/providers/apache/hdfs/src/airflow/providers/apache/hdfs/sensors/web_hdfs.py
@@ -20,12 +20,7 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING, Any
 
-from airflow.providers.apache.hdfs.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+from airflow.providers.apache.hdfs.version_compat import BaseSensorOperator
 
 if TYPE_CHECKING:
     from hdfs import InsecureClient
diff --git a/providers/apache/hdfs/src/airflow/providers/apache/hdfs/version_compat.py b/providers/apache/hdfs/src/airflow/providers/apache/hdfs/version_compat.py
index 48d122b669696..319d86aca697c 100644
--- a/providers/apache/hdfs/src/airflow/providers/apache/hdfs/version_compat.py
+++ b/providers/apache/hdfs/src/airflow/providers/apache/hdfs/version_compat.py
@@ -33,3 +33,10 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+
+__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseSensorOperator"]

From 0edc4f486845ebf9e1402d983c2583a99c2959bf Mon Sep 17 00:00:00 2001
From: Kevin Yang <85313829+sjyangkevin@users.noreply.github.com>
Date: Mon, 30 Jun 2025 03:01:33 -0400
Subject: [PATCH 314/381] Update BaseOperator imports for Airflow 3.0
 compatibility (#52503)

---
 .../apache/kafka/operators/consume.py         |  2 +-
 .../apache/kafka/operators/produce.py         |  2 +-
 .../providers/apache/kafka/sensors/kafka.py   |  4 +-
 .../providers/apache/kafka/version_compat.py  | 45 +++++++++++++++++++
 4 files changed, 49 insertions(+), 4 deletions(-)
 create mode 100644 providers/apache/kafka/src/airflow/providers/apache/kafka/version_compat.py

diff --git a/providers/apache/kafka/src/airflow/providers/apache/kafka/operators/consume.py b/providers/apache/kafka/src/airflow/providers/apache/kafka/operators/consume.py
index 3dedbdca3f5c3..6abdb7ed8243d 100644
--- a/providers/apache/kafka/src/airflow/providers/apache/kafka/operators/consume.py
+++ b/providers/apache/kafka/src/airflow/providers/apache/kafka/operators/consume.py
@@ -21,8 +21,8 @@
 from typing import Any
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.apache.kafka.hooks.consume import KafkaConsumerHook
+from airflow.providers.apache.kafka.version_compat import BaseOperator
 from airflow.utils.module_loading import import_string
 
 VALID_COMMIT_CADENCE = {"never", "end_of_batch", "end_of_operator"}
diff --git a/providers/apache/kafka/src/airflow/providers/apache/kafka/operators/produce.py b/providers/apache/kafka/src/airflow/providers/apache/kafka/operators/produce.py
index 1dfc553f8a1e6..da460c3a87d2b 100644
--- a/providers/apache/kafka/src/airflow/providers/apache/kafka/operators/produce.py
+++ b/providers/apache/kafka/src/airflow/providers/apache/kafka/operators/produce.py
@@ -22,8 +22,8 @@
 from typing import Any
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.apache.kafka.hooks.produce import KafkaProducerHook
+from airflow.providers.apache.kafka.version_compat import BaseOperator
 from airflow.utils.module_loading import import_string
 
 local_logger = logging.getLogger("airflow")
diff --git a/providers/apache/kafka/src/airflow/providers/apache/kafka/sensors/kafka.py b/providers/apache/kafka/src/airflow/providers/apache/kafka/sensors/kafka.py
index afe196a29f064..7bf1886ea262c 100644
--- a/providers/apache/kafka/src/airflow/providers/apache/kafka/sensors/kafka.py
+++ b/providers/apache/kafka/src/airflow/providers/apache/kafka/sensors/kafka.py
@@ -19,8 +19,8 @@
 from collections.abc import Callable, Sequence
 from typing import Any
 
-from airflow.models import BaseOperator
 from airflow.providers.apache.kafka.triggers.await_message import AwaitMessageTrigger
+from airflow.providers.apache.kafka.version_compat import BaseOperator
 
 VALID_COMMIT_CADENCE = {"never", "end_of_batch", "end_of_operator"}
 
@@ -107,7 +107,7 @@ def execute(self, context) -> Any:
 
     def execute_complete(self, context, event=None):
         if self.xcom_push_key:
-            self.xcom_push(context, key=self.xcom_push_key, value=event)
+            context["task_instance"].xcom_push(key=self.xcom_push_key, value=event)
         return event
 
 
diff --git a/providers/apache/kafka/src/airflow/providers/apache/kafka/version_compat.py b/providers/apache/kafka/src/airflow/providers/apache/kafka/version_compat.py
new file mode 100644
index 0000000000000..e7a259afb357c
--- /dev/null
+++ b/providers/apache/kafka/src/airflow/providers/apache/kafka/version_compat.py
@@ -0,0 +1,45 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+]

From 49593e48c1927dcbd5cab50ee467fae30a76f642 Mon Sep 17 00:00:00 2001
From: Kevin Yang <85313829+sjyangkevin@users.noreply.github.com>
Date: Mon, 30 Jun 2025 03:02:25 -0400
Subject: [PATCH 315/381] Update BaseOperator imports for Airflow 3.0
 compatibility (#52504)

---
 .../apache/flink/operators/flink_kubernetes.py    |  4 ++--
 .../apache/flink/sensors/flink_kubernetes.py      |  9 ++-------
 .../providers/apache/flink/version_compat.py      | 15 +++++++++++++++
 3 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/providers/apache/flink/src/airflow/providers/apache/flink/operators/flink_kubernetes.py b/providers/apache/flink/src/airflow/providers/apache/flink/operators/flink_kubernetes.py
index ed05397ec98a2..2c90ce9cc0e42 100644
--- a/providers/apache/flink/src/airflow/providers/apache/flink/operators/flink_kubernetes.py
+++ b/providers/apache/flink/src/airflow/providers/apache/flink/operators/flink_kubernetes.py
@@ -21,13 +21,13 @@
 from functools import cached_property
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
+from airflow.providers.apache.flink.version_compat import BaseOperator
 from airflow.providers.cncf.kubernetes.hooks.kubernetes import KubernetesHook
 
 if TYPE_CHECKING:
     from kubernetes.client import CoreV1Api
 
-    from airflow.utils.context import Context
+    from airflow.providers.apache.flink.version_compat import Context
 
 
 class FlinkKubernetesOperator(BaseOperator):
diff --git a/providers/apache/flink/src/airflow/providers/apache/flink/sensors/flink_kubernetes.py b/providers/apache/flink/src/airflow/providers/apache/flink/sensors/flink_kubernetes.py
index 4a83956989f7c..ad0cc1cfa54fc 100644
--- a/providers/apache/flink/src/airflow/providers/apache/flink/sensors/flink_kubernetes.py
+++ b/providers/apache/flink/src/airflow/providers/apache/flink/sensors/flink_kubernetes.py
@@ -23,16 +23,11 @@
 from kubernetes import client
 
 from airflow.exceptions import AirflowException
-from airflow.providers.apache.flink.version_compat import AIRFLOW_V_3_0_PLUS
+from airflow.providers.apache.flink.version_compat import BaseSensorOperator
 from airflow.providers.cncf.kubernetes.hooks.kubernetes import KubernetesHook
 
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
-
 if TYPE_CHECKING:
-    from airflow.utils.context import Context
+    from airflow.providers.apache.flink.version_compat import Context
 
 
 class FlinkKubernetesSensor(BaseSensorOperator):
diff --git a/providers/apache/flink/src/airflow/providers/apache/flink/version_compat.py b/providers/apache/flink/src/airflow/providers/apache/flink/version_compat.py
index 48d122b669696..5faab587ffcef 100644
--- a/providers/apache/flink/src/airflow/providers/apache/flink/version_compat.py
+++ b/providers/apache/flink/src/airflow/providers/apache/flink/version_compat.py
@@ -33,3 +33,18 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator, BaseSensorOperator
+    from airflow.sdk.definitions.context import Context
+else:
+    from airflow.models import BaseOperator
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+    from airflow.utils.context import Context
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+    "BaseSensorOperator",
+    "Context",
+]

From af51d4fe622e35432a8b2eebd4b8e394bcf7c778 Mon Sep 17 00:00:00 2001
From: Elad Kalif <45845474+eladkal@users.noreply.github.com>
Date: Mon, 30 Jun 2025 10:57:02 +0300
Subject: [PATCH 316/381] Revert "Replace models.BaseOperator to Task SDK for
 http (#52506)" (#52515)

This reverts commit a9a7fcc5192946f0546f70053d6fd498de381f76.
---
 .../http/src/airflow/providers/http/operators/http.py    | 2 +-
 .../http/src/airflow/providers/http/sensors/http.py      | 7 ++++++-
 .../http/src/airflow/providers/http/version_compat.py    | 9 ---------
 3 files changed, 7 insertions(+), 11 deletions(-)

diff --git a/providers/http/src/airflow/providers/http/operators/http.py b/providers/http/src/airflow/providers/http/operators/http.py
index 6e6c48ea94a90..ca36ac471c7fd 100644
--- a/providers/http/src/airflow/providers/http/operators/http.py
+++ b/providers/http/src/airflow/providers/http/operators/http.py
@@ -28,8 +28,8 @@
 from airflow.configuration import conf
 from airflow.exceptions import AirflowException
 from airflow.hooks.base import BaseHook
+from airflow.models import BaseOperator
 from airflow.providers.http.triggers.http import HttpTrigger, serialize_auth_type
-from airflow.providers.http.version_compat import BaseOperator
 from airflow.utils.helpers import merge_dicts
 
 if TYPE_CHECKING:
diff --git a/providers/http/src/airflow/providers/http/sensors/http.py b/providers/http/src/airflow/providers/http/sensors/http.py
index f395ab2bb8ca3..a9d9274afd109 100644
--- a/providers/http/src/airflow/providers/http/sensors/http.py
+++ b/providers/http/src/airflow/providers/http/sensors/http.py
@@ -25,7 +25,12 @@
 from airflow.exceptions import AirflowException
 from airflow.providers.http.hooks.http import HttpHook
 from airflow.providers.http.triggers.http import HttpSensorTrigger
-from airflow.providers.http.version_compat import AIRFLOW_V_3_0_PLUS, BaseSensorOperator
+from airflow.providers.http.version_compat import AIRFLOW_V_3_0_PLUS
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/http/src/airflow/providers/http/version_compat.py b/providers/http/src/airflow/providers/http/version_compat.py
index a4c1cfadb6992..48d122b669696 100644
--- a/providers/http/src/airflow/providers/http/version_compat.py
+++ b/providers/http/src/airflow/providers/http/version_compat.py
@@ -33,12 +33,3 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseOperator
-    from airflow.sdk import BaseSensorOperator
-else:
-    from airflow.models import BaseOperator
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
-
-__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseOperator", "BaseSensorOperator"]

From e3428dd435e7af0bf5cb1ca3bd55d311abc41d81 Mon Sep 17 00:00:00 2001
From: Rahul Madan <34760210+rahul-madaan@users.noreply.github.com>
Date: Mon, 30 Jun 2025 13:52:47 +0530
Subject: [PATCH 317/381] [OpenLineage] Added operator_provider_version to task
 event (#52468)

* added another attribute containing the provider package version of the operator being used.

Signed-off-by: Rahul Madan <madan.rahul9@gmail.com>

* precommit run

Signed-off-by: Rahul Madan <madan.rahul9@gmail.com>

---------

Signed-off-by: Rahul Madan <madan.rahul9@gmail.com>
---
 .../providers/openlineage/utils/utils.py      | 27 ++++++
 .../unit/openlineage/utils/test_utils.py      | 85 +++++++++++++++++++
 2 files changed, 112 insertions(+)

diff --git a/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py b/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py
index afe41bcc31839..9ca1ba427ee60 100644
--- a/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py
+++ b/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py
@@ -128,6 +128,32 @@ def get_operator_class(task: BaseOperator) -> type:
     return task.__class__
 
 
+def get_operator_provider_version(operator: BaseOperator | MappedOperator) -> str | None:
+    """Get the provider package version for the given operator."""
+    try:
+        class_path = get_fully_qualified_class_name(operator)
+
+        if not class_path.startswith("airflow.providers."):
+            return None
+
+        from airflow.providers_manager import ProvidersManager
+
+        providers_manager = ProvidersManager()
+
+        for package_name, provider_info in providers_manager.providers.items():
+            if package_name.startswith("apache-airflow-providers-"):
+                provider_module_path = package_name.replace(
+                    "apache-airflow-providers-", "airflow.providers."
+                ).replace("-", ".")
+                if class_path.startswith(provider_module_path + "."):
+                    return provider_info.version
+
+        return None
+
+    except Exception:
+        return None
+
+
 def get_job_name(task: TaskInstance | RuntimeTaskInstance) -> str:
     return f"{task.dag_id}.{task.task_id}"
 
@@ -511,6 +537,7 @@ class TaskInfo(InfoJsonEncodable):
         ),
         "inlets": lambda task: [AssetInfo(i) for i in task.inlets if isinstance(i, Asset)],
         "outlets": lambda task: [AssetInfo(o) for o in task.outlets if isinstance(o, Asset)],
+        "operator_provider_version": lambda task: get_operator_provider_version(task),
     }
 
 
diff --git a/providers/openlineage/tests/unit/openlineage/utils/test_utils.py b/providers/openlineage/tests/unit/openlineage/utils/test_utils.py
index 6357913e31665..d3aea277e7904 100644
--- a/providers/openlineage/tests/unit/openlineage/utils/test_utils.py
+++ b/providers/openlineage/tests/unit/openlineage/utils/test_utils.py
@@ -54,6 +54,7 @@
     get_fully_qualified_class_name,
     get_job_name,
     get_operator_class,
+    get_operator_provider_version,
     get_user_provided_run_facets,
 )
 from airflow.providers.standard.operators.empty import EmptyOperator
@@ -1600,6 +1601,7 @@ def __init__(self, *args, **kwargs):
         "multiple_outputs": False,
         "operator_class": "CustomOperator",
         "operator_class_path": get_fully_qualified_class_name(task_10),
+        "operator_provider_version": None,  # Custom operator doesn't have provider version
         "outlets": "[{'uri': 'uri2', 'extra': {'b': 2}}, {'uri': 'uri3', 'extra': {'c': 3}}]",
         "owner": "airflow",
         "priority_weight": 1,
@@ -1677,6 +1679,7 @@ def __init__(self, *args, **kwargs):
         "multiple_outputs": False,
         "operator_class": "CustomOperator",
         "operator_class_path": get_fully_qualified_class_name(task_10),
+        "operator_provider_version": None,  # Custom operator doesn't have provider version
         "outlets": "[{'uri': 'uri2', 'extra': {'b': 2}}, {'uri': 'uri3', 'extra': {'c': 3}}]",
         "owner": "airflow",
         "priority_weight": 1,
@@ -1698,3 +1701,85 @@ def test_task_info_complete():
     task_0 = BashOperator(task_id="task_0", bash_command="exit 0;")
     result = TaskInfoComplete(task_0)
     assert "'bash_command': 'exit 0;'" in str(result)
+
+
+@patch("airflow.providers.openlineage.utils.utils.get_fully_qualified_class_name")
+def test_get_operator_provider_version_exception_handling(mock_class_name):
+    mock_class_name.side_effect = Exception("Test exception")
+    operator = MagicMock()
+    assert get_operator_provider_version(operator) is None
+
+
+def test_get_operator_provider_version_for_core_operator():
+    """Test that get_operator_provider_version returns None for core operators."""
+    operator = BaseOperator(task_id="test_task")
+    result = get_operator_provider_version(operator)
+    assert result is None
+
+
+@patch("airflow.providers_manager.ProvidersManager")
+def test_get_operator_provider_version_for_provider_operator(mock_providers_manager):
+    """Test that get_operator_provider_version returns version for provider operators."""
+    # Mock ProvidersManager
+    mock_manager_instance = MagicMock()
+    mock_providers_manager.return_value = mock_manager_instance
+
+    # Mock providers data
+    mock_manager_instance.providers = {
+        "apache-airflow-providers-standard": MagicMock(version="1.2.0"),
+        "apache-airflow-providers-amazon": MagicMock(version="8.12.0"),
+        "apache-airflow-providers-google": MagicMock(version="10.5.0"),
+    }
+
+    # Test with BashOperator (standard provider)
+    operator = BashOperator(task_id="test_task", bash_command="echo test")
+    result = get_operator_provider_version(operator)
+    assert result == "1.2.0"
+
+
+@patch("airflow.providers_manager.ProvidersManager")
+def test_get_operator_provider_version_provider_not_found(mock_providers_manager):
+    """Test that get_operator_provider_version returns None when provider is not found."""
+    # Mock ProvidersManager with no matching provider
+    mock_manager_instance = MagicMock()
+    mock_providers_manager.return_value = mock_manager_instance
+    mock_manager_instance.providers = {
+        "apache-airflow-providers-amazon": MagicMock(version="8.12.0"),
+        "apache-airflow-providers-google": MagicMock(version="10.5.0"),
+    }
+
+    operator = BashOperator(task_id="test_task", bash_command="echo test")
+    result = get_operator_provider_version(operator)
+    assert result is None
+
+
+def test_get_operator_provider_version_for_custom_operator():
+    """Test that get_operator_provider_version returns None for custom operators."""
+
+    # Create a custom operator that doesn't belong to any provider
+    class CustomOperator(BaseOperator):
+        def execute(self, context):
+            pass
+
+    operator = CustomOperator(task_id="test_task")
+    result = get_operator_provider_version(operator)
+    assert result is None
+
+
+@patch("airflow.providers_manager.ProvidersManager")
+def test_get_operator_provider_version_for_mapped_operator(mock_providers_manager):
+    """Test that get_operator_provider_version works with mapped operators."""
+    # Mock ProvidersManager
+    mock_manager_instance = MagicMock()
+    mock_providers_manager.return_value = mock_manager_instance
+
+    # Mock providers data
+    mock_manager_instance.providers = {
+        "apache-airflow-providers-standard": MagicMock(version="1.2.0"),
+        "apache-airflow-providers-amazon": MagicMock(version="8.12.0"),
+    }
+
+    # Test with mapped BashOperator (standard provider)
+    mapped_operator = BashOperator.partial(task_id="test_task").expand(bash_command=["echo 1", "echo 2"])
+    result = get_operator_provider_version(mapped_operator)
+    assert result == "1.2.0"

From d4540c830600d0a70f65d466d776524c80cefe52 Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung <uranusjr@gmail.com>
Date: Mon, 30 Jun 2025 16:52:28 +0800
Subject: [PATCH 318/381] Add a bunch of no-redef ignores so Mypy is happy
 (#52507)

---
 .../unit/openlineage/extractors/test_base.py    |  2 +-
 .../unit/openlineage/plugins/test_listener.py   |  2 +-
 .../tests/unit/openlineage/utils/test_utils.py  | 17 +++++++----------
 .../providers/standard/operators/bash.py        |  2 +-
 .../providers/standard/operators/branch.py      |  4 ++--
 .../providers/standard/operators/empty.py       |  2 +-
 .../providers/standard/operators/python.py      |  4 ++--
 .../providers/standard/operators/smooth.py      |  2 +-
 .../providers/standard/sensors/external_task.py |  4 ++--
 .../providers/standard/utils/skipmixin.py       |  4 ++--
 .../unit/standard/operators/test_python.py      | 12 +++++-------
 .../sensors/test_external_task_sensor.py        |  2 +-
 12 files changed, 26 insertions(+), 31 deletions(-)

diff --git a/providers/openlineage/tests/unit/openlineage/extractors/test_base.py b/providers/openlineage/tests/unit/openlineage/extractors/test_base.py
index cbd852d393881..0aa1c996406a0 100644
--- a/providers/openlineage/tests/unit/openlineage/extractors/test_base.py
+++ b/providers/openlineage/tests/unit/openlineage/extractors/test_base.py
@@ -29,7 +29,7 @@
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import BaseOperator
 else:
-    from airflow.models.baseoperator import BaseOperator
+    from airflow.models.baseoperator import BaseOperator  # type: ignore[no-redef]
 
 from airflow.models.taskinstance import TaskInstanceState
 from airflow.providers.openlineage.extractors.base import (
diff --git a/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py b/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
index ae95f69df8d44..13aa9a06b9e61 100644
--- a/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
+++ b/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
@@ -39,7 +39,7 @@
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import BaseOperator
 else:
-    from airflow.models.baseoperator import BaseOperator
+    from airflow.models.baseoperator import BaseOperator  # type: ignore[no-redef]
 
 from airflow.providers.openlineage.extractors.base import OperatorLineage
 from airflow.providers.openlineage.plugins.adapter import OpenLineageAdapter
diff --git a/providers/openlineage/tests/unit/openlineage/utils/test_utils.py b/providers/openlineage/tests/unit/openlineage/utils/test_utils.py
index d3aea277e7904..e13a78503208f 100644
--- a/providers/openlineage/tests/unit/openlineage/utils/test_utils.py
+++ b/providers/openlineage/tests/unit/openlineage/utils/test_utils.py
@@ -26,16 +26,6 @@
 from uuid6 import uuid7
 
 from airflow import DAG
-from airflow.utils import timezone
-
-from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseOperator, task
-else:
-    from airflow.decorators import task
-    from airflow.models.baseoperator import BaseOperator
-
 from airflow.models.dagrun import DagRun
 from airflow.models.taskinstance import TaskInstance, TaskInstanceState
 from airflow.providers.common.compat.assets import Asset
@@ -61,6 +51,7 @@
 from airflow.serialization.serialized_objects import SerializedBaseOperator
 from airflow.timetables.events import EventsTimetable
 from airflow.timetables.trigger import CronTriggerTimetable
+from airflow.utils import timezone
 from airflow.utils.state import DagRunState
 from airflow.utils.task_group import TaskGroup
 from airflow.utils.types import DagRunType
@@ -69,6 +60,12 @@
 from tests_common.test_utils.mock_operators import MockOperator
 from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS, AIRFLOW_V_3_1_PLUS
 
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator, task
+else:
+    from airflow.decorators import task  # type: ignore[no-redef]
+    from airflow.models.baseoperator import BaseOperator  # type: ignore[no-redef]
+
 BASH_OPERATOR_PATH = "airflow.providers.standard.operators.bash"
 PYTHON_OPERATOR_PATH = "airflow.providers.standard.operators.python"
 
diff --git a/providers/standard/src/airflow/providers/standard/operators/bash.py b/providers/standard/src/airflow/providers/standard/operators/bash.py
index afb1ad40a7eca..caee52072e10e 100644
--- a/providers/standard/src/airflow/providers/standard/operators/bash.py
+++ b/providers/standard/src/airflow/providers/standard/operators/bash.py
@@ -31,7 +31,7 @@
 if AIRFLOW_V_3_1_PLUS:
     from airflow.sdk import BaseOperator
 else:
-    from airflow.models.baseoperator import BaseOperator
+    from airflow.models.baseoperator import BaseOperator  # type: ignore[no-redef]
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.context import context_to_airflow_vars
diff --git a/providers/standard/src/airflow/providers/standard/operators/branch.py b/providers/standard/src/airflow/providers/standard/operators/branch.py
index 44c958c4f2eea..064bb52afe188 100644
--- a/providers/standard/src/airflow/providers/standard/operators/branch.py
+++ b/providers/standard/src/airflow/providers/standard/operators/branch.py
@@ -27,12 +27,12 @@
 if AIRFLOW_V_3_1_PLUS:
     from airflow.sdk import BaseOperator
 else:
-    from airflow.models.baseoperator import BaseOperator
+    from airflow.models.baseoperator import BaseOperator  # type: ignore[no-redef]
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.providers.standard.utils.skipmixin import SkipMixin
 else:
-    from airflow.models.skipmixin import SkipMixin
+    from airflow.models.skipmixin import SkipMixin  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.sdk.definitions.context import Context
diff --git a/providers/standard/src/airflow/providers/standard/operators/empty.py b/providers/standard/src/airflow/providers/standard/operators/empty.py
index 4cbd6254d4a9e..cdfebf3a4139c 100644
--- a/providers/standard/src/airflow/providers/standard/operators/empty.py
+++ b/providers/standard/src/airflow/providers/standard/operators/empty.py
@@ -23,7 +23,7 @@
 if AIRFLOW_V_3_1_PLUS:
     from airflow.sdk import BaseOperator
 else:
-    from airflow.models.baseoperator import BaseOperator
+    from airflow.models.baseoperator import BaseOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.sdk.definitions.context import Context
diff --git a/providers/standard/src/airflow/providers/standard/operators/python.py b/providers/standard/src/airflow/providers/standard/operators/python.py
index 40bb51ba9d863..92387d28cbffd 100644
--- a/providers/standard/src/airflow/providers/standard/operators/python.py
+++ b/providers/standard/src/airflow/providers/standard/operators/python.py
@@ -60,13 +60,13 @@
 if AIRFLOW_V_3_1_PLUS:
     from airflow.sdk import BaseOperator
 else:
-    from airflow.models.baseoperator import BaseOperator
+    from airflow.models.baseoperator import BaseOperator  # type: ignore[no-redef]
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.providers.standard.operators.branch import BaseBranchOperator
     from airflow.providers.standard.utils.skipmixin import SkipMixin
 else:
-    from airflow.models.skipmixin import SkipMixin
+    from airflow.models.skipmixin import SkipMixin  # type: ignore[no-redef]
     from airflow.operators.branch import BaseBranchOperator  # type: ignore[no-redef]
 
 
diff --git a/providers/standard/src/airflow/providers/standard/operators/smooth.py b/providers/standard/src/airflow/providers/standard/operators/smooth.py
index 33f089421f741..6799e07a5ef05 100644
--- a/providers/standard/src/airflow/providers/standard/operators/smooth.py
+++ b/providers/standard/src/airflow/providers/standard/operators/smooth.py
@@ -24,7 +24,7 @@
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import BaseOperator
 else:
-    from airflow.models.baseoperator import BaseOperator
+    from airflow.models.baseoperator import BaseOperator  # type: ignore[no-redef]
 
 if TYPE_CHECKING:
     from airflow.sdk.definitions.context import Context
diff --git a/providers/standard/src/airflow/providers/standard/sensors/external_task.py b/providers/standard/src/airflow/providers/standard/sensors/external_task.py
index 12b41e7acf55b..974608bf714f4 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/external_task.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/external_task.py
@@ -58,8 +58,8 @@
         from airflow.sdk import BaseOperator
         from airflow.sdk.definitions.context import Context
     else:
-        from airflow.models.baseoperator import BaseOperator
-        from airflow.utils.context import Context
+        from airflow.models.baseoperator import BaseOperator  # type: ignore[no-redef]
+        from airflow.utils.context import Context  # type: ignore[no-redef]
 
 
 if AIRFLOW_V_3_0_PLUS:
diff --git a/providers/standard/src/airflow/providers/standard/utils/skipmixin.py b/providers/standard/src/airflow/providers/standard/utils/skipmixin.py
index b7c8de2de2903..bd8e31bc72a34 100644
--- a/providers/standard/src/airflow/providers/standard/utils/skipmixin.py
+++ b/providers/standard/src/airflow/providers/standard/utils/skipmixin.py
@@ -49,8 +49,8 @@ def _ensure_tasks(nodes: Iterable[DAGNode]) -> Sequence[Operator]:
         from airflow.sdk import BaseOperator
         from airflow.sdk.definitions.mappedoperator import MappedOperator
     else:
-        from airflow.models.baseoperator import BaseOperator
-        from airflow.models.mappedoperator import MappedOperator
+        from airflow.models.baseoperator import BaseOperator  # type: ignore[no-redef]
+        from airflow.models.mappedoperator import MappedOperator  # type: ignore[no-redef]
 
     return [n for n in nodes if isinstance(n, BaseOperator | MappedOperator)]
 
diff --git a/providers/standard/tests/unit/standard/operators/test_python.py b/providers/standard/tests/unit/standard/operators/test_python.py
index 10e0bd986bf3b..e3ae3672718a2 100644
--- a/providers/standard/tests/unit/standard/operators/test_python.py
+++ b/providers/standard/tests/unit/standard/operators/test_python.py
@@ -47,13 +47,6 @@
     AirflowProviderDeprecationWarning,
     DeserializingResultError,
 )
-
-from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseOperator
-else:
-    from airflow.models.baseoperator import BaseOperator
 from airflow.models.taskinstance import TaskInstance, clear_task_instances, set_current_context
 from airflow.providers.standard.operators.empty import EmptyOperator
 from airflow.providers.standard.operators.python import (
@@ -78,6 +71,11 @@
 from tests_common.test_utils.db import clear_db_runs
 from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_1, AIRFLOW_V_3_0_PLUS
 
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models.baseoperator import BaseOperator  # type: ignore[no-redef]
+
 if TYPE_CHECKING:
     from airflow.models.dag import DAG
     from airflow.models.dagrun import DagRun
diff --git a/providers/standard/tests/unit/standard/sensors/test_external_task_sensor.py b/providers/standard/tests/unit/standard/sensors/test_external_task_sensor.py
index 290f276091fb6..abbccf97cd9be 100644
--- a/providers/standard/tests/unit/standard/sensors/test_external_task_sensor.py
+++ b/providers/standard/tests/unit/standard/sensors/test_external_task_sensor.py
@@ -39,7 +39,7 @@
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import BaseOperator
 else:
-    from airflow.models.baseoperator import BaseOperator
+    from airflow.models.baseoperator import BaseOperator  # type: ignore[no-redef]
 from airflow.models.dag import DAG
 from airflow.models.serialized_dag import SerializedDagModel
 from airflow.models.xcom_arg import XComArg

From 51ddece3d1a08bf99240bdbc74a1d00beacebdc7 Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Mon, 30 Jun 2025 10:43:41 +0100
Subject: [PATCH 319/381] Update Jenkins for Airflow 3.0 `BaseOperator`
 compatibility (#52510)

Part of https://github.com/apache/airflow/issues/52378
---
 .../jenkins/operators/jenkins_job_trigger.py      |  2 +-
 .../airflow/providers/jenkins/sensors/jenkins.py  | 13 ++-----------
 .../airflow/providers/jenkins/version_compat.py   | 15 +++++++++++++++
 3 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/providers/jenkins/src/airflow/providers/jenkins/operators/jenkins_job_trigger.py b/providers/jenkins/src/airflow/providers/jenkins/operators/jenkins_job_trigger.py
index 0b7d83372d433..3f9ccddc0ab40 100644
--- a/providers/jenkins/src/airflow/providers/jenkins/operators/jenkins_job_trigger.py
+++ b/providers/jenkins/src/airflow/providers/jenkins/operators/jenkins_job_trigger.py
@@ -30,8 +30,8 @@
 from requests import Request
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.jenkins.hooks.jenkins import JenkinsHook
+from airflow.providers.jenkins.version_compat import BaseOperator
 
 JenkinsRequest = Mapping[str, Any]
 ParamType = str | dict | list | None
diff --git a/providers/jenkins/src/airflow/providers/jenkins/sensors/jenkins.py b/providers/jenkins/src/airflow/providers/jenkins/sensors/jenkins.py
index ccaef5d3704a2..faceda77ff05c 100644
--- a/providers/jenkins/src/airflow/providers/jenkins/sensors/jenkins.py
+++ b/providers/jenkins/src/airflow/providers/jenkins/sensors/jenkins.py
@@ -22,19 +22,10 @@
 
 from airflow.exceptions import AirflowException
 from airflow.providers.jenkins.hooks.jenkins import JenkinsHook
-from airflow.providers.jenkins.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+from airflow.providers.jenkins.version_compat import BaseSensorOperator
 
 if TYPE_CHECKING:
-    try:
-        from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+    from airflow.providers.jenkins.version_compat import Context
 
 
 class JenkinsBuildSensor(BaseSensorOperator):
diff --git a/providers/jenkins/src/airflow/providers/jenkins/version_compat.py b/providers/jenkins/src/airflow/providers/jenkins/version_compat.py
index 48d122b669696..da54ff9f75652 100644
--- a/providers/jenkins/src/airflow/providers/jenkins/version_compat.py
+++ b/providers/jenkins/src/airflow/providers/jenkins/version_compat.py
@@ -33,3 +33,18 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator, BaseSensorOperator
+    from airflow.sdk.definitions.context import Context
+else:
+    from airflow.models import BaseOperator  # type: ignore[no-redef]
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+    from airflow.utils.context import Context  # type: ignore[no-redef]
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+    "BaseSensorOperator",
+    "Context",
+]

From d361df391ebbee7fcb49c53d036763a8a46be876 Mon Sep 17 00:00:00 2001
From: Geonwoo Kim <78521993+kgw7401@users.noreply.github.com>
Date: Mon, 30 Jun 2025 18:58:30 +0900
Subject: [PATCH 320/381] Provider Migration: Update mysql for Airflow 3.0
 compatibility (#52500)

Follow-up of #52292. Part of #52378
---
 .../mysql/transfers/presto_to_mysql.py        |  2 +-
 .../providers/mysql/transfers/s3_to_mysql.py  |  2 +-
 .../mysql/transfers/trino_to_mysql.py         |  2 +-
 .../mysql/transfers/vertica_to_mysql.py       |  2 +-
 .../airflow/providers/mysql/version_compat.py | 40 +++++++++++++++++++
 .../mysql/transfers/test_trino_to_mysql.py    | 31 ++++++++------
 6 files changed, 62 insertions(+), 17 deletions(-)
 create mode 100644 providers/mysql/src/airflow/providers/mysql/version_compat.py

diff --git a/providers/mysql/src/airflow/providers/mysql/transfers/presto_to_mysql.py b/providers/mysql/src/airflow/providers/mysql/transfers/presto_to_mysql.py
index 0563cf4a9bb65..98d25c3c0bf89 100644
--- a/providers/mysql/src/airflow/providers/mysql/transfers/presto_to_mysql.py
+++ b/providers/mysql/src/airflow/providers/mysql/transfers/presto_to_mysql.py
@@ -20,8 +20,8 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.mysql.hooks.mysql import MySqlHook
+from airflow.providers.mysql.version_compat import BaseOperator
 from airflow.providers.presto.hooks.presto import PrestoHook
 
 if TYPE_CHECKING:
diff --git a/providers/mysql/src/airflow/providers/mysql/transfers/s3_to_mysql.py b/providers/mysql/src/airflow/providers/mysql/transfers/s3_to_mysql.py
index eba18dec251e2..474433c2894d6 100644
--- a/providers/mysql/src/airflow/providers/mysql/transfers/s3_to_mysql.py
+++ b/providers/mysql/src/airflow/providers/mysql/transfers/s3_to_mysql.py
@@ -20,9 +20,9 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.amazon.aws.hooks.s3 import S3Hook
 from airflow.providers.mysql.hooks.mysql import MySqlHook
+from airflow.providers.mysql.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/mysql/src/airflow/providers/mysql/transfers/trino_to_mysql.py b/providers/mysql/src/airflow/providers/mysql/transfers/trino_to_mysql.py
index e36d28390c55e..439b2d1de30e7 100644
--- a/providers/mysql/src/airflow/providers/mysql/transfers/trino_to_mysql.py
+++ b/providers/mysql/src/airflow/providers/mysql/transfers/trino_to_mysql.py
@@ -20,8 +20,8 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.mysql.hooks.mysql import MySqlHook
+from airflow.providers.mysql.version_compat import BaseOperator
 from airflow.providers.trino.hooks.trino import TrinoHook
 
 if TYPE_CHECKING:
diff --git a/providers/mysql/src/airflow/providers/mysql/transfers/vertica_to_mysql.py b/providers/mysql/src/airflow/providers/mysql/transfers/vertica_to_mysql.py
index 7fbecc4f9ab1c..0dc911465983b 100644
--- a/providers/mysql/src/airflow/providers/mysql/transfers/vertica_to_mysql.py
+++ b/providers/mysql/src/airflow/providers/mysql/transfers/vertica_to_mysql.py
@@ -33,8 +33,8 @@
         "installed in case you see compilation error during installation."
     )
 
-from airflow.models import BaseOperator
 from airflow.providers.mysql.hooks.mysql import MySqlHook
+from airflow.providers.mysql.version_compat import BaseOperator
 from airflow.providers.vertica.hooks.vertica import VerticaHook
 
 if TYPE_CHECKING:
diff --git a/providers/mysql/src/airflow/providers/mysql/version_compat.py b/providers/mysql/src/airflow/providers/mysql/version_compat.py
new file mode 100644
index 0000000000000..78cd58dd016ab
--- /dev/null
+++ b/providers/mysql/src/airflow/providers/mysql/version_compat.py
@@ -0,0 +1,40 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+]
diff --git a/providers/mysql/tests/unit/mysql/transfers/test_trino_to_mysql.py b/providers/mysql/tests/unit/mysql/transfers/test_trino_to_mysql.py
index 612207c329f64..6a1bf9f8b539c 100644
--- a/providers/mysql/tests/unit/mysql/transfers/test_trino_to_mysql.py
+++ b/providers/mysql/tests/unit/mysql/transfers/test_trino_to_mysql.py
@@ -65,16 +65,21 @@ def test_execute_with_mysql_preoperator(self, mock_trino_hook, mock_mysql_hook):
     @pytest.mark.skipif(
         "AIRFLOW_RUNALL_TESTS" not in os.environ, reason="Skipped because AIRFLOW_RUNALL_TESTS is not set"
     )
-    def test_trino_to_mysql(self):
-        op = TrinoToMySqlOperator(
-            task_id="trino_to_mysql_check",
-            sql="""
-                SELECT name, count(*) as ccount
-                FROM airflow.static_babynames
-                GROUP BY name
-                """,
-            mysql_table="test_static_babynames",
-            mysql_preoperator="TRUNCATE TABLE test_static_babynames;",
-            dag=self.dag,
-        )
-        op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
+    def test_trino_to_mysql(self, dag_maker):
+        with dag_maker(
+            dag_id="test_trino_to_mysql_transfer",
+            schedule=None,
+            start_date=DEFAULT_DATE,
+        ):
+            TrinoToMySqlOperator(
+                task_id="trino_to_mysql_check",
+                sql="""
+                    SELECT name, count(*) as ccount
+                    FROM airflow.static_babynames
+                    GROUP BY name
+                    """,
+                mysql_table="test_static_babynames",
+                mysql_preoperator="TRUNCATE TABLE test_static_babynames;",
+            )
+        dr = dag_maker.create_dagrun()
+        dag_maker.run_ti("trino_to_mysql_check", dr)

From 9a14e66a64cdec8c366bc0722b63239bb4a84c39 Mon Sep 17 00:00:00 2001
From: Kacper Muda <mudakacper@gmail.com>
Date: Mon, 30 Jun 2025 11:59:35 +0200
Subject: [PATCH 321/381] feat: Add explicit support for DatabricksHook to Ol
 helper (#52253)

---
 .../databricks/hooks/databricks_sql.py        |  24 +-
 .../providers/databricks/utils/openlineage.py | 143 ++--
 .../databricks/hooks/test_databricks_sql.py   |  17 +-
 .../unit/databricks/utils/test_openlineage.py | 634 +++++++++++++++++-
 4 files changed, 732 insertions(+), 86 deletions(-)

diff --git a/providers/databricks/src/airflow/providers/databricks/hooks/databricks_sql.py b/providers/databricks/src/airflow/providers/databricks/hooks/databricks_sql.py
index 76aea1dde5434..0ace06abc998b 100644
--- a/providers/databricks/src/airflow/providers/databricks/hooks/databricks_sql.py
+++ b/providers/databricks/src/airflow/providers/databricks/hooks/databricks_sql.py
@@ -344,10 +344,9 @@ def get_openlineage_default_schema(self) -> str | None:
 
     def get_openlineage_database_specific_lineage(self, task_instance) -> OperatorLineage | None:
         """
-        Generate OpenLineage metadata for a Databricks task instance based on executed query IDs.
+        Emit separate OpenLineage events for each Databricks query, based on executed query IDs.
 
-        If a single query ID is present, attach an `ExternalQueryRunFacet` to the lineage metadata.
-        If multiple query IDs are present, emits separate OpenLineage events for each query instead.
+        If a single query ID is present, also add an `ExternalQueryRunFacet` to the returned lineage metadata.
 
         Note that `get_openlineage_database_specific_lineage` is usually called after task's execution,
         so if multiple query IDs are present, both START and COMPLETE event for each query will be emitted
@@ -368,13 +367,22 @@ def get_openlineage_database_specific_lineage(self, task_instance) -> OperatorLi
         from airflow.providers.openlineage.sqlparser import SQLParser
 
         if not self.query_ids:
-            self.log.debug("openlineage: no databricks query ids found.")
+            self.log.info("OpenLineage could not find databricks query ids.")
             return None
 
         self.log.debug("openlineage: getting connection to get database info")
         connection = self.get_connection(self.get_conn_id())
         namespace = SQLParser.create_namespace(self.get_openlineage_database_info(connection))
 
+        self.log.info("Separate OpenLineage events will be emitted for each Databricks query_id.")
+        emit_openlineage_events_for_databricks_queries(
+            task_instance=task_instance,
+            hook=self,
+            query_ids=self.query_ids,
+            query_for_extra_metadata=True,
+            query_source_namespace=namespace,
+        )
+
         if len(self.query_ids) == 1:
             self.log.debug("Attaching ExternalQueryRunFacet with single query_id to OpenLineage event.")
             return OperatorLineage(
@@ -385,12 +393,4 @@ def get_openlineage_database_specific_lineage(self, task_instance) -> OperatorLi
                 }
             )
 
-        self.log.info("Multiple query_ids found. Separate OpenLineage event will be emitted for each query.")
-        emit_openlineage_events_for_databricks_queries(
-            query_ids=self.query_ids,
-            query_source_namespace=namespace,
-            task_instance=task_instance,
-            hook=self,
-        )
-
         return None
diff --git a/providers/databricks/src/airflow/providers/databricks/utils/openlineage.py b/providers/databricks/src/airflow/providers/databricks/utils/openlineage.py
index 5d2fe3997039d..57c964d984258 100644
--- a/providers/databricks/src/airflow/providers/databricks/utils/openlineage.py
+++ b/providers/databricks/src/airflow/providers/databricks/utils/openlineage.py
@@ -31,6 +31,7 @@
     from openlineage.client.event_v2 import RunEvent
     from openlineage.client.facet_v2 import JobFacet
 
+    from airflow.providers.databricks.hooks.databricks import DatabricksHook
     from airflow.providers.databricks.hooks.databricks_sql import DatabricksSqlHook
 
 log = logging.getLogger(__name__)
@@ -121,20 +122,18 @@ def _get_parent_run_facet(task_instance):
     )
 
 
-def _run_api_call(hook: DatabricksSqlHook, query_ids: list[str]) -> list[dict]:
+def _run_api_call(hook: DatabricksSqlHook | DatabricksHook, query_ids: list[str]) -> list[dict]:
     """Retrieve execution details for specific queries from Databricks's query history API."""
-    if not hook._token:
-        # This has logic for token initialization
-        hook.get_conn()
-
-    # https://docs.databricks.com/api/azure/workspace/queryhistory/list
     try:
+        token = hook._get_token(raise_error=True)
+        # https://docs.databricks.com/api/azure/workspace/queryhistory/list
         response = requests.get(
             url=f"https://{hook.host}/api/2.0/sql/history/queries",
-            headers={"Authorization": f"Bearer {hook._token}"},
+            headers={"Authorization": f"Bearer {token}"},
             data=json.dumps({"filter_by": {"statement_ids": query_ids}}),
             timeout=2,
         )
+        response.raise_for_status()
     except Exception as e:
         log.warning(
             "OpenLineage could not retrieve Databricks queries details. Error received: `%s`.",
@@ -142,48 +141,42 @@ def _run_api_call(hook: DatabricksSqlHook, query_ids: list[str]) -> list[dict]:
         )
         return []
 
-    if response.status_code != 200:
-        log.warning(
-            "OpenLineage could not retrieve Databricks queries details. API error received: `%s`: `%s`",
-            response.status_code,
-            response.text,
-        )
-        return []
-
     return response.json()["res"]
 
 
+def _process_data_from_api(data: list[dict[str, Any]]) -> list[dict[str, Any]]:
+    """Convert timestamp fields to UTC datetime objects."""
+    for row in data:
+        for key in ("query_start_time_ms", "query_end_time_ms"):
+            row[key] = datetime.datetime.fromtimestamp(row[key] / 1000, tz=datetime.timezone.utc)
+
+    return data
+
+
 def _get_queries_details_from_databricks(
-    hook: DatabricksSqlHook, query_ids: list[str]
+    hook: DatabricksSqlHook | DatabricksHook, query_ids: list[str]
 ) -> dict[str, dict[str, Any]]:
     if not query_ids:
         return {}
 
-    queries_info_from_api = _run_api_call(hook=hook, query_ids=query_ids)
-
     query_details = {}
-    for query_info in queries_info_from_api:
-        if not query_info.get("query_id"):
-            log.debug("Databricks query ID not found in API response.")
-            continue
-
-        q_start_time = None
-        q_end_time = None
-        if query_info.get("query_start_time_ms") and query_info.get("query_end_time_ms"):
-            q_start_time = datetime.datetime.fromtimestamp(
-                query_info["query_start_time_ms"] / 1000, tz=datetime.timezone.utc
-            )
-            q_end_time = datetime.datetime.fromtimestamp(
-                query_info["query_end_time_ms"] / 1000, tz=datetime.timezone.utc
-            )
-
-        query_details[query_info["query_id"]] = {
-            "status": query_info.get("status"),
-            "start_time": q_start_time,
-            "end_time": q_end_time,
-            "query_text": query_info.get("query_text"),
-            "error_message": query_info.get("error_message"),
+    try:
+        queries_info_from_api = _run_api_call(hook=hook, query_ids=query_ids)
+        queries_info_from_api = _process_data_from_api(queries_info_from_api)
+
+        query_details = {
+            query_info["query_id"]: {
+                "status": query_info.get("status"),
+                "start_time": query_info.get("query_start_time_ms"),
+                "end_time": query_info.get("query_end_time_ms"),
+                "query_text": query_info.get("query_text"),
+                "error_message": query_info.get("error_message"),
+            }
+            for query_info in queries_info_from_api
+            if query_info["query_id"]
         }
+    except Exception as e:
+        log.warning("OpenLineage could not retrieve extra metadata from Databricks. Error encountered: %s", e)
 
     return query_details
 
@@ -221,17 +214,18 @@ def _create_ol_event_pair(
 
 @require_openlineage_version(provider_min_version="2.3.0")
 def emit_openlineage_events_for_databricks_queries(
-    query_ids: list[str],
-    query_source_namespace: str,
     task_instance,
-    hook: DatabricksSqlHook | None = None,
+    hook: DatabricksSqlHook | DatabricksHook | None = None,
+    query_ids: list[str] | None = None,
+    query_source_namespace: str | None = None,
+    query_for_extra_metadata: bool = False,
     additional_run_facets: dict | None = None,
     additional_job_facets: dict | None = None,
 ) -> None:
     """
     Emit OpenLineage events for executed Databricks queries.
 
-    Metadata retrieval from Databricks is attempted only if a `DatabricksSqlHook` is provided.
+    Metadata retrieval from Databricks is attempted only if `get_extra_metadata` is True and hook is provided.
     If metadata is available, execution details such as start time, end time, execution status,
     error messages, and SQL text are included in the events. If no metadata is found, the function
     defaults to using the Airflow task instance's state and the current timestamp.
@@ -241,10 +235,16 @@ def emit_openlineage_events_for_databricks_queries(
     will correspond to actual query execution times.
 
     Args:
-        query_ids: A list of Databricks query IDs to emit events for.
-        query_source_namespace: The namespace to be included in ExternalQueryRunFacet.
         task_instance: The Airflow task instance that run these queries.
-        hook: A hook instance used to retrieve query metadata if available.
+        hook: A supported Databricks hook instance used to retrieve query metadata if available.
+        If omitted, `query_ids` and `query_source_namespace` must be provided explicitly and
+        `query_for_extra_metadata` must be `False`.
+        query_ids: A list of Databricks query IDs to emit events for, can only be None if `hook` is provided
+        and `hook.query_ids` are present (DatabricksHook does not store query_ids).
+        query_source_namespace: The namespace to be included in ExternalQueryRunFacet,
+        can be `None` only if hook is provided.
+        query_for_extra_metadata: Whether to query Databricks for additional metadata about queries.
+        Must be `False` if `hook` is not provided.
         additional_run_facets: Additional run facets to include in OpenLineage events.
         additional_job_facets: Additional job facets to include in OpenLineage events.
     """
@@ -259,25 +259,52 @@ def emit_openlineage_events_for_databricks_queries(
     from airflow.providers.openlineage.conf import namespace
     from airflow.providers.openlineage.plugins.listener import get_openlineage_listener
 
-    if not query_ids:
-        log.debug("No Databricks query IDs provided; skipping OpenLineage event emission.")
-        return
-
-    query_ids = [q for q in query_ids]  # Make a copy to make sure it does not change
+    log.info("OpenLineage will emit events for Databricks queries.")
 
     if hook:
+        if not query_ids:
+            log.debug("No Databricks query IDs provided; Checking `hook.query_ids` property.")
+            query_ids = getattr(hook, "query_ids", [])
+            if not query_ids:
+                raise ValueError("No Databricks query IDs provided and `hook.query_ids` are not present.")
+
+        if not query_source_namespace:
+            log.debug("No Databricks query namespace provided; Creating one from scratch.")
+
+            if hasattr(hook, "get_openlineage_database_info") and hasattr(hook, "get_conn_id"):
+                from airflow.providers.openlineage.sqlparser import SQLParser
+
+                query_source_namespace = SQLParser.create_namespace(
+                    hook.get_openlineage_database_info(hook.get_connection(hook.get_conn_id()))
+                )
+            else:
+                query_source_namespace = f"databricks://{hook.host}" if hook.host else "databricks"
+    else:
+        if not query_ids:
+            raise ValueError("If 'hook' is not provided, 'query_ids' must be set.")
+        if not query_source_namespace:
+            raise ValueError("If 'hook' is not provided, 'query_source_namespace' must be set.")
+        if query_for_extra_metadata:
+            raise ValueError("If 'hook' is not provided, 'query_for_extra_metadata' must be False.")
+
+    query_ids = [q for q in query_ids]  # Make a copy to make sure we do not change hook's attribute
+
+    if query_for_extra_metadata and hook:
         log.debug("Retrieving metadata for %s queries from Databricks.", len(query_ids))
         databricks_metadata = _get_queries_details_from_databricks(hook, query_ids)
     else:
-        log.debug("DatabricksSqlHook not provided. No extra metadata fill be fetched from Databricks.")
+        log.debug("`query_for_extra_metadata` is False. No extra metadata fill be fetched from Databricks.")
         databricks_metadata = {}
 
     # If real metadata is unavailable, we send events with eventTime=now
     default_event_time = timezone.utcnow()
-    # If no query metadata is provided, we use task_instance's state when checking for success
+    # ti.state has no `value` attr (AF2) when task it's still running, in AF3 we get 'running', in that case
+    # assuming it's user call and query succeeded, so we replace it with success.
     # Adjust state for DBX logic, where "finished" means "success"
-    default_state = task_instance.state.value if hasattr(task_instance, "state") else ""
-    default_state = "finished" if default_state == "success" else default_state
+    default_state = (
+        getattr(task_instance.state, "value", "running") if hasattr(task_instance, "state") else ""
+    )
+    default_state = "finished" if default_state in ("running", "success") else default_state
 
     log.debug("Generating OpenLineage facets")
     common_run_facets = {"parent": _get_parent_run_facet(task_instance)}
@@ -318,10 +345,10 @@ def emit_openlineage_events_for_databricks_queries(
         event_batch = _create_ol_event_pair(
             job_namespace=namespace(),
             job_name=f"{task_instance.dag_id}.{task_instance.task_id}.query.{counter}",
-            start_time=query_metadata.get("start_time", default_event_time),  # type: ignore[arg-type]
-            end_time=query_metadata.get("end_time", default_event_time),  # type: ignore[arg-type]
+            start_time=query_metadata.get("start_time") or default_event_time,  # type: ignore[arg-type]
+            end_time=query_metadata.get("end_time") or default_event_time,  # type: ignore[arg-type]
             # Only finished status means it completed without failures
-            is_successful=query_metadata.get("status", default_state).lower() == "finished",
+            is_successful=(query_metadata.get("status") or default_state).lower() == "finished",
             run_facets={**query_specific_run_facets, **common_run_facets, **additional_run_facets},
             job_facets={**query_specific_job_facets, **common_job_facets, **additional_job_facets},
         )
diff --git a/providers/databricks/tests/unit/databricks/hooks/test_databricks_sql.py b/providers/databricks/tests/unit/databricks/hooks/test_databricks_sql.py
index 7449489c77d7b..20e2c081f740d 100644
--- a/providers/databricks/tests/unit/databricks/hooks/test_databricks_sql.py
+++ b/providers/databricks/tests/unit/databricks/hooks/test_databricks_sql.py
@@ -457,7 +457,8 @@ def test_get_openlineage_database_specific_lineage_with_no_query_id():
     assert result is None
 
 
-def test_get_openlineage_database_specific_lineage_with_single_query_id():
+@mock.patch("airflow.providers.databricks.utils.openlineage.emit_openlineage_events_for_databricks_queries")
+def test_get_openlineage_database_specific_lineage_with_single_query_id(mock_emit):
     from airflow.providers.common.compat.openlineage.facet import ExternalQueryRunFacet
     from airflow.providers.openlineage.extractors import OperatorLineage
 
@@ -466,7 +467,18 @@ def test_get_openlineage_database_specific_lineage_with_single_query_id():
     hook.get_connection = mock.MagicMock()
     hook.get_openlineage_database_info = lambda x: mock.MagicMock(authority="auth", scheme="scheme")
 
-    result = hook.get_openlineage_database_specific_lineage(None)
+    ti = mock.MagicMock()
+
+    result = hook.get_openlineage_database_specific_lineage(ti)
+    mock_emit.assert_called_once_with(
+        **{
+            "hook": hook,
+            "query_ids": ["query1"],
+            "query_source_namespace": "scheme://auth",
+            "task_instance": ti,
+            "query_for_extra_metadata": True,
+        }
+    )
     assert result == OperatorLineage(
         run_facets={"externalQuery": ExternalQueryRunFacet(externalQueryId="query1", source="scheme://auth")}
     )
@@ -488,6 +500,7 @@ def test_get_openlineage_database_specific_lineage_with_multiple_query_ids(mock_
             "query_ids": ["query1", "query2"],
             "query_source_namespace": "scheme://auth",
             "task_instance": ti,
+            "query_for_extra_metadata": True,
         }
     )
     assert result is None
diff --git a/providers/databricks/tests/unit/databricks/utils/test_openlineage.py b/providers/databricks/tests/unit/databricks/utils/test_openlineage.py
index 699e018785ee9..6d427e0ba7775 100644
--- a/providers/databricks/tests/unit/databricks/utils/test_openlineage.py
+++ b/providers/databricks/tests/unit/databricks/utils/test_openlineage.py
@@ -30,11 +30,14 @@
     ExternalQueryRunFacet,
     SQLJobFacet,
 )
+from airflow.providers.databricks.hooks.databricks import DatabricksHook
+from airflow.providers.databricks.hooks.databricks_sql import DatabricksSqlHook
 from airflow.providers.databricks.utils.openlineage import (
     _create_ol_event_pair,
     _get_ol_run_id,
     _get_parent_run_facet,
     _get_queries_details_from_databricks,
+    _process_data_from_api,
     _run_api_call,
     emit_openlineage_events_for_databricks_queries,
 )
@@ -96,7 +99,7 @@ def test_get_parent_run_facet():
 
 def test_run_api_call_success():
     mock_hook = mock.MagicMock()
-    mock_hook._token = "mock_token"
+    mock_hook._get_token.return_value = "mock_token"
     mock_hook.host = "mock_host"
 
     mock_response = mock.MagicMock()
@@ -109,14 +112,27 @@ def test_run_api_call_success():
     assert result == [{"query_id": "123", "status": "success"}]
 
 
-def test_run_api_call_error():
+def test_run_api_call_request_error():
     mock_hook = mock.MagicMock()
-    mock_hook._token = "mock_token"
+    mock_hook._get_token.return_value = "mock_token"
     mock_hook.host = "mock_host"
 
     mock_response = mock.MagicMock()
-    mock_response.status_code = 500
-    mock_response.text = "Internal Server Error"
+    mock_response.status_code = 200
+
+    with mock.patch("requests.get", side_effect=RuntimeError("request error")):
+        result = _run_api_call(mock_hook, ["123"])
+
+    assert result == []
+
+
+def test_run_api_call_token_error():
+    mock_hook = mock.MagicMock()
+    mock_hook._get_token.side_effect = RuntimeError("Token error")
+    mock_hook.host = "mock_host"
+
+    mock_response = mock.MagicMock()
+    mock_response.status_code = 200
 
     with mock.patch("requests.get", return_value=mock_response):
         result = _run_api_call(mock_hook, ["123"])
@@ -124,6 +140,55 @@ def test_run_api_call_error():
     assert result == []
 
 
+def test_process_data_from_api():
+    data = [
+        {
+            "query_id": "ABC",
+            "status": "FINISHED",
+            "query_start_time_ms": 1595357086200,
+            "query_end_time_ms": 1595357087200,
+            "query_text": "SELECT * FROM table1;",
+            "error_message": "Error occurred",
+        },
+        {
+            "query_id": "DEF",
+            "query_start_time_ms": 1595357086200,
+            "query_end_time_ms": 1595357087200,
+        },
+    ]
+    expected_details = [
+        {
+            "query_id": "ABC",
+            "status": "FINISHED",
+            "query_start_time_ms": datetime.datetime(
+                2020, 7, 21, 18, 44, 46, 200000, tzinfo=datetime.timezone.utc
+            ),
+            "query_end_time_ms": datetime.datetime(
+                2020, 7, 21, 18, 44, 47, 200000, tzinfo=datetime.timezone.utc
+            ),
+            "query_text": "SELECT * FROM table1;",
+            "error_message": "Error occurred",
+        },
+        {
+            "query_id": "DEF",
+            "query_start_time_ms": datetime.datetime(
+                2020, 7, 21, 18, 44, 46, 200000, tzinfo=datetime.timezone.utc
+            ),
+            "query_end_time_ms": datetime.datetime(
+                2020, 7, 21, 18, 44, 47, 200000, tzinfo=datetime.timezone.utc
+            ),
+        },
+    ]
+    result = _process_data_from_api(data=data)
+    assert len(result) == 2
+    assert result == expected_details
+
+
+def test_process_data_from_api_error():
+    with pytest.raises(KeyError):
+        _process_data_from_api(data=[{"query_start_time_ms": 1595357086200}])
+
+
 def test_get_queries_details_from_databricks_empty_query_ids():
     details = _get_queries_details_from_databricks(None, [])
     assert details == {}
@@ -131,7 +196,7 @@ def test_get_queries_details_from_databricks_empty_query_ids():
 
 @mock.patch("airflow.providers.databricks.utils.openlineage._run_api_call")
 def test_get_queries_details_from_databricks(mock_api_call):
-    hook = mock.MagicMock()
+    hook = DatabricksSqlHook()
     query_ids = ["ABC"]
     fake_result = [
         {
@@ -160,7 +225,7 @@ def test_get_queries_details_from_databricks(mock_api_call):
 
 @mock.patch("airflow.providers.databricks.utils.openlineage._run_api_call")
 def test_get_queries_details_from_databricks_no_data_found(mock_api_call):
-    hook = mock.MagicMock()
+    hook = DatabricksSqlHook()
     query_ids = ["ABC", "DEF"]
     mock_api_call.return_value = []
 
@@ -274,6 +339,7 @@ def test_emit_openlineage_events_for_databricks_queries(mock_now, mock_generate_
             query_source_namespace="databricks_ns",
             task_instance=mock_ti,
             hook=mock.MagicMock(),
+            query_for_extra_metadata=True,
             additional_run_facets=additional_run_facets,
             additional_job_facets=additional_job_facets,
         )
@@ -448,7 +514,7 @@ def test_emit_openlineage_events_for_databricks_queries(mock_now, mock_generate_
 @mock.patch("importlib.metadata.version", return_value="2.3.0")
 @mock.patch("openlineage.client.uuid.generate_new_uuid")
 @mock.patch("airflow.utils.timezone.utcnow")
-def test_emit_openlineage_events_for_databricks_queries_without_metadata_found(
+def test_emit_openlineage_events_for_databricks_queries_without_metadata(
     mock_now, mock_generate_uuid, mock_version
 ):
     fake_uuid = "01958e68-03a2-79e3-9ae9-26865cc40e2f"
@@ -489,7 +555,8 @@ def test_emit_openlineage_events_for_databricks_queries_without_metadata_found(
             query_ids=query_ids,
             query_source_namespace="databricks_ns",
             task_instance=mock_ti,
-            hook=None,  # None so metadata retrieval is not triggered
+            hook=mock.MagicMock(),
+            # query_for_extra_metadata=False,  # False by default
             additional_run_facets=additional_run_facets,
             additional_job_facets=additional_job_facets,
         )
@@ -564,9 +631,37 @@ def test_emit_openlineage_events_for_databricks_queries_without_metadata_found(
 
 
 @mock.patch("importlib.metadata.version", return_value="2.3.0")
-def test_emit_openlineage_events_for_databricks_queries_without_query_ids(mock_version):
-    query_ids = []
+@mock.patch("openlineage.client.uuid.generate_new_uuid")
+@mock.patch("airflow.utils.timezone.utcnow")
+def test_emit_openlineage_events_for_databricks_queries_without_explicit_query_ids(
+    mock_now, mock_generate_uuid, mock_version
+):
+    fake_uuid = "01958e68-03a2-79e3-9ae9-26865cc40e2f"
+    mock_generate_uuid.return_value = fake_uuid
+
+    default_event_time = timezone.datetime(2025, 1, 5, 0, 0, 0)
+    mock_now.return_value = default_event_time
+
+    query_ids = ["query1"]
+    hook = mock.MagicMock()
+    hook.query_ids = query_ids
     original_query_ids = copy.deepcopy(query_ids)
+    logical_date = timezone.datetime(2025, 1, 1)
+    mock_ti = mock.MagicMock(
+        dag_id="dag_id",
+        task_id="task_id",
+        map_index=1,
+        try_number=1,
+        logical_date=logical_date,
+        state=TaskInstanceState.RUNNING,  # This will be query default state if no metadata found
+        dag_run=mock.MagicMock(logical_date=logical_date, clear_number=0),
+    )
+    mock_ti.get_template_context.return_value = {
+        "dag_run": mock.MagicMock(logical_date=logical_date, clear_number=0)
+    }
+
+    additional_run_facets = {"custom_run": "value_run"}
+    additional_job_facets = {"custom_job": "value_job"}
 
     fake_adapter = mock.MagicMock()
     fake_adapter.emit = mock.MagicMock()
@@ -578,16 +673,527 @@ def test_emit_openlineage_events_for_databricks_queries_without_query_ids(mock_v
         return_value=fake_listener,
     ):
         emit_openlineage_events_for_databricks_queries(
-            query_ids=query_ids,
             query_source_namespace="databricks_ns",
-            task_instance=None,
+            task_instance=mock_ti,
+            hook=hook,
+            # query_for_extra_metadata=False,  # False by default
+            additional_run_facets=additional_run_facets,
+            additional_job_facets=additional_job_facets,
+        )
+
+        assert query_ids == original_query_ids  # Verify that the input query_ids list is unchanged.
+        assert fake_adapter.emit.call_count == 2  # Expect two events per query.
+
+        expected_common_job_facets = {
+            "jobType": job_type_job.JobTypeJobFacet(
+                jobType="QUERY",
+                processingType="BATCH",
+                integration="DATABRICKS",
+            ),
+            "custom_job": "value_job",
+        }
+        expected_common_run_facets = {
+            "parent": parent_run.ParentRunFacet(
+                run=parent_run.Run(runId="01941f29-7c00-7087-8906-40e512c257bd"),
+                job=parent_run.Job(namespace=namespace(), name="dag_id.task_id"),
+                root=parent_run.Root(
+                    run=parent_run.RootRun(runId="01941f29-7c00-743e-b109-28b18d0a19c5"),
+                    job=parent_run.RootJob(namespace=namespace(), name="dag_id"),
+                ),
+            ),
+            "custom_run": "value_run",
+        }
+
+        expected_calls = [
+            mock.call(  # Query1: START event (no metadata)
+                RunEvent(
+                    eventTime=default_event_time.isoformat(),
+                    eventType=RunState.START,
+                    run=Run(
+                        runId=fake_uuid,
+                        facets={
+                            "externalQuery": ExternalQueryRunFacet(
+                                externalQueryId="query1", source="databricks_ns"
+                            ),
+                            **expected_common_run_facets,
+                        },
+                    ),
+                    job=Job(
+                        namespace=namespace(),
+                        name="dag_id.task_id.query.1",
+                        facets=expected_common_job_facets,
+                    ),
+                )
+            ),
+            mock.call(  # Query1: COMPLETE event (no metadata)
+                RunEvent(
+                    eventTime=default_event_time.isoformat(),
+                    eventType=RunState.COMPLETE,
+                    run=Run(
+                        runId=fake_uuid,
+                        facets={
+                            "externalQuery": ExternalQueryRunFacet(
+                                externalQueryId="query1", source="databricks_ns"
+                            ),
+                            **expected_common_run_facets,
+                        },
+                    ),
+                    job=Job(
+                        namespace=namespace(),
+                        name="dag_id.task_id.query.1",
+                        facets=expected_common_job_facets,
+                    ),
+                )
+            ),
+        ]
+
+        assert fake_adapter.emit.call_args_list == expected_calls
+
+
+@mock.patch(
+    "airflow.providers.openlineage.sqlparser.SQLParser.create_namespace", return_value="databricks_ns"
+)
+@mock.patch("importlib.metadata.version", return_value="2.3.0")
+@mock.patch("openlineage.client.uuid.generate_new_uuid")
+@mock.patch("airflow.utils.timezone.utcnow")
+def test_emit_openlineage_events_for_databricks_queries_without_explicit_query_ids_and_namespace(
+    mock_now, mock_generate_uuid, mock_version, mock_parser
+):
+    fake_uuid = "01958e68-03a2-79e3-9ae9-26865cc40e2f"
+    mock_generate_uuid.return_value = fake_uuid
+
+    default_event_time = timezone.datetime(2025, 1, 5, 0, 0, 0)
+    mock_now.return_value = default_event_time
+
+    query_ids = ["query1"]
+    hook = mock.MagicMock()
+    hook.query_ids = query_ids
+    original_query_ids = copy.deepcopy(query_ids)
+    logical_date = timezone.datetime(2025, 1, 1)
+    mock_ti = mock.MagicMock(
+        dag_id="dag_id",
+        task_id="task_id",
+        map_index=1,
+        try_number=1,
+        logical_date=logical_date,
+        state=TaskInstanceState.RUNNING,  # This will be query default state if no metadata found
+        dag_run=mock.MagicMock(logical_date=logical_date, clear_number=0),
+    )
+    mock_ti.get_template_context.return_value = {
+        "dag_run": mock.MagicMock(logical_date=logical_date, clear_number=0)
+    }
+
+    additional_run_facets = {"custom_run": "value_run"}
+    additional_job_facets = {"custom_job": "value_job"}
+
+    fake_adapter = mock.MagicMock()
+    fake_adapter.emit = mock.MagicMock()
+    fake_listener = mock.MagicMock()
+    fake_listener.adapter = fake_adapter
+
+    with mock.patch(
+        "airflow.providers.openlineage.plugins.listener.get_openlineage_listener",
+        return_value=fake_listener,
+    ):
+        emit_openlineage_events_for_databricks_queries(
+            task_instance=mock_ti,
+            hook=hook,
+            # query_for_extra_metadata=False,  # False by default
+            additional_run_facets=additional_run_facets,
+            additional_job_facets=additional_job_facets,
         )
 
+        assert query_ids == original_query_ids  # Verify that the input query_ids list is unchanged.
+        assert fake_adapter.emit.call_count == 2  # Expect two events per query.
+
+        expected_common_job_facets = {
+            "jobType": job_type_job.JobTypeJobFacet(
+                jobType="QUERY",
+                processingType="BATCH",
+                integration="DATABRICKS",
+            ),
+            "custom_job": "value_job",
+        }
+        expected_common_run_facets = {
+            "parent": parent_run.ParentRunFacet(
+                run=parent_run.Run(runId="01941f29-7c00-7087-8906-40e512c257bd"),
+                job=parent_run.Job(namespace=namespace(), name="dag_id.task_id"),
+                root=parent_run.Root(
+                    run=parent_run.RootRun(runId="01941f29-7c00-743e-b109-28b18d0a19c5"),
+                    job=parent_run.RootJob(namespace=namespace(), name="dag_id"),
+                ),
+            ),
+            "custom_run": "value_run",
+        }
+
+        expected_calls = [
+            mock.call(  # Query1: START event (no metadata)
+                RunEvent(
+                    eventTime=default_event_time.isoformat(),
+                    eventType=RunState.START,
+                    run=Run(
+                        runId=fake_uuid,
+                        facets={
+                            "externalQuery": ExternalQueryRunFacet(
+                                externalQueryId="query1", source="databricks_ns"
+                            ),
+                            **expected_common_run_facets,
+                        },
+                    ),
+                    job=Job(
+                        namespace=namespace(),
+                        name="dag_id.task_id.query.1",
+                        facets=expected_common_job_facets,
+                    ),
+                )
+            ),
+            mock.call(  # Query1: COMPLETE event (no metadata)
+                RunEvent(
+                    eventTime=default_event_time.isoformat(),
+                    eventType=RunState.COMPLETE,
+                    run=Run(
+                        runId=fake_uuid,
+                        facets={
+                            "externalQuery": ExternalQueryRunFacet(
+                                externalQueryId="query1", source="databricks_ns"
+                            ),
+                            **expected_common_run_facets,
+                        },
+                    ),
+                    job=Job(
+                        namespace=namespace(),
+                        name="dag_id.task_id.query.1",
+                        facets=expected_common_job_facets,
+                    ),
+                )
+            ),
+        ]
+
+        assert fake_adapter.emit.call_args_list == expected_calls
+
+
+@mock.patch("importlib.metadata.version", return_value="2.3.0")
+@mock.patch("openlineage.client.uuid.generate_new_uuid")
+@mock.patch("airflow.utils.timezone.utcnow")
+def test_emit_openlineage_events_for_databricks_queries_without_explicit_query_ids_and_namespace_raw_ns(
+    mock_now, mock_generate_uuid, mock_version
+):
+    fake_uuid = "01958e68-03a2-79e3-9ae9-26865cc40e2f"
+    mock_generate_uuid.return_value = fake_uuid
+
+    default_event_time = timezone.datetime(2025, 1, 5, 0, 0, 0)
+    mock_now.return_value = default_event_time
+
+    query_ids = ["query1"]
+    hook = DatabricksHook()
+    hook.query_ids = query_ids
+    hook.host = "some_host"
+    original_query_ids = copy.deepcopy(query_ids)
+    logical_date = timezone.datetime(2025, 1, 1)
+    mock_ti = mock.MagicMock(
+        dag_id="dag_id",
+        task_id="task_id",
+        map_index=1,
+        try_number=1,
+        logical_date=logical_date,
+        state=TaskInstanceState.RUNNING,  # This will be query default state if no metadata found
+        dag_run=mock.MagicMock(logical_date=logical_date, clear_number=0),
+    )
+    mock_ti.get_template_context.return_value = {
+        "dag_run": mock.MagicMock(logical_date=logical_date, clear_number=0)
+    }
+
+    additional_run_facets = {"custom_run": "value_run"}
+    additional_job_facets = {"custom_job": "value_job"}
+
+    fake_adapter = mock.MagicMock()
+    fake_adapter.emit = mock.MagicMock()
+    fake_listener = mock.MagicMock()
+    fake_listener.adapter = fake_adapter
+
+    with mock.patch(
+        "airflow.providers.openlineage.plugins.listener.get_openlineage_listener",
+        return_value=fake_listener,
+    ):
+        emit_openlineage_events_for_databricks_queries(
+            task_instance=mock_ti,
+            hook=hook,
+            # query_for_extra_metadata=False,  # False by default
+            additional_run_facets=additional_run_facets,
+            additional_job_facets=additional_job_facets,
+        )
+
+        assert query_ids == original_query_ids  # Verify that the input query_ids list is unchanged.
+        assert fake_adapter.emit.call_count == 2  # Expect two events per query.
+
+        expected_common_job_facets = {
+            "jobType": job_type_job.JobTypeJobFacet(
+                jobType="QUERY",
+                processingType="BATCH",
+                integration="DATABRICKS",
+            ),
+            "custom_job": "value_job",
+        }
+        expected_common_run_facets = {
+            "parent": parent_run.ParentRunFacet(
+                run=parent_run.Run(runId="01941f29-7c00-7087-8906-40e512c257bd"),
+                job=parent_run.Job(namespace=namespace(), name="dag_id.task_id"),
+                root=parent_run.Root(
+                    run=parent_run.RootRun(runId="01941f29-7c00-743e-b109-28b18d0a19c5"),
+                    job=parent_run.RootJob(namespace=namespace(), name="dag_id"),
+                ),
+            ),
+            "custom_run": "value_run",
+        }
+
+        expected_calls = [
+            mock.call(  # Query1: START event (no metadata)
+                RunEvent(
+                    eventTime=default_event_time.isoformat(),
+                    eventType=RunState.START,
+                    run=Run(
+                        runId=fake_uuid,
+                        facets={
+                            "externalQuery": ExternalQueryRunFacet(
+                                externalQueryId="query1", source="databricks://some_host"
+                            ),
+                            **expected_common_run_facets,
+                        },
+                    ),
+                    job=Job(
+                        namespace=namespace(),
+                        name="dag_id.task_id.query.1",
+                        facets=expected_common_job_facets,
+                    ),
+                )
+            ),
+            mock.call(  # Query1: COMPLETE event (no metadata)
+                RunEvent(
+                    eventTime=default_event_time.isoformat(),
+                    eventType=RunState.COMPLETE,
+                    run=Run(
+                        runId=fake_uuid,
+                        facets={
+                            "externalQuery": ExternalQueryRunFacet(
+                                externalQueryId="query1", source="databricks://some_host"
+                            ),
+                            **expected_common_run_facets,
+                        },
+                    ),
+                    job=Job(
+                        namespace=namespace(),
+                        name="dag_id.task_id.query.1",
+                        facets=expected_common_job_facets,
+                    ),
+                )
+            ),
+        ]
+
+        assert fake_adapter.emit.call_args_list == expected_calls
+
+
+@mock.patch("importlib.metadata.version", return_value="2.3.0")
+@mock.patch("openlineage.client.uuid.generate_new_uuid")
+@mock.patch("airflow.utils.timezone.utcnow")
+def test_emit_openlineage_events_for_databricks_queries_ith_query_ids_and_hook_query_ids(
+    mock_now, mock_generate_uuid, mock_version
+):
+    fake_uuid = "01958e68-03a2-79e3-9ae9-26865cc40e2f"
+    mock_generate_uuid.return_value = fake_uuid
+
+    default_event_time = timezone.datetime(2025, 1, 5, 0, 0, 0)
+    mock_now.return_value = default_event_time
+
+    hook = DatabricksSqlHook()
+    hook.query_ids = ["query2", "query3"]
+    query_ids = ["query1"]
+    original_query_ids = copy.deepcopy(query_ids)
+    logical_date = timezone.datetime(2025, 1, 1)
+    mock_ti = mock.MagicMock(
+        dag_id="dag_id",
+        task_id="task_id",
+        map_index=1,
+        try_number=1,
+        logical_date=logical_date,
+        state=TaskInstanceState.SUCCESS,  # This will be query default state if no metadata found
+        dag_run=mock.MagicMock(logical_date=logical_date, clear_number=0),
+    )
+    mock_ti.get_template_context.return_value = {
+        "dag_run": mock.MagicMock(logical_date=logical_date, clear_number=0)
+    }
+
+    additional_run_facets = {"custom_run": "value_run"}
+    additional_job_facets = {"custom_job": "value_job"}
+
+    fake_adapter = mock.MagicMock()
+    fake_adapter.emit = mock.MagicMock()
+    fake_listener = mock.MagicMock()
+    fake_listener.adapter = fake_adapter
+
+    with mock.patch(
+        "airflow.providers.openlineage.plugins.listener.get_openlineage_listener",
+        return_value=fake_listener,
+    ):
+        emit_openlineage_events_for_databricks_queries(
+            query_ids=query_ids,
+            query_source_namespace="databricks_ns",
+            task_instance=mock_ti,
+            hook=hook,
+            # query_for_extra_metadata=False,  # False by default
+            additional_run_facets=additional_run_facets,
+            additional_job_facets=additional_job_facets,
+        )
+
+        assert query_ids == original_query_ids  # Verify that the input query_ids list is unchanged.
+        assert fake_adapter.emit.call_count == 2  # Expect two events per query.
+
+        expected_common_job_facets = {
+            "jobType": job_type_job.JobTypeJobFacet(
+                jobType="QUERY",
+                processingType="BATCH",
+                integration="DATABRICKS",
+            ),
+            "custom_job": "value_job",
+        }
+        expected_common_run_facets = {
+            "parent": parent_run.ParentRunFacet(
+                run=parent_run.Run(runId="01941f29-7c00-7087-8906-40e512c257bd"),
+                job=parent_run.Job(namespace=namespace(), name="dag_id.task_id"),
+                root=parent_run.Root(
+                    run=parent_run.RootRun(runId="01941f29-7c00-743e-b109-28b18d0a19c5"),
+                    job=parent_run.RootJob(namespace=namespace(), name="dag_id"),
+                ),
+            ),
+            "custom_run": "value_run",
+        }
+
+        expected_calls = [
+            mock.call(  # Query1: START event (no metadata)
+                RunEvent(
+                    eventTime=default_event_time.isoformat(),
+                    eventType=RunState.START,
+                    run=Run(
+                        runId=fake_uuid,
+                        facets={
+                            "externalQuery": ExternalQueryRunFacet(
+                                externalQueryId="query1", source="databricks_ns"
+                            ),
+                            **expected_common_run_facets,
+                        },
+                    ),
+                    job=Job(
+                        namespace=namespace(),
+                        name="dag_id.task_id.query.1",
+                        facets=expected_common_job_facets,
+                    ),
+                )
+            ),
+            mock.call(  # Query1: COMPLETE event (no metadata)
+                RunEvent(
+                    eventTime=default_event_time.isoformat(),
+                    eventType=RunState.COMPLETE,
+                    run=Run(
+                        runId=fake_uuid,
+                        facets={
+                            "externalQuery": ExternalQueryRunFacet(
+                                externalQueryId="query1", source="databricks_ns"
+                            ),
+                            **expected_common_run_facets,
+                        },
+                    ),
+                    job=Job(
+                        namespace=namespace(),
+                        name="dag_id.task_id.query.1",
+                        facets=expected_common_job_facets,
+                    ),
+                )
+            ),
+        ]
+
+        assert fake_adapter.emit.call_args_list == expected_calls
+
+
+@mock.patch("importlib.metadata.version", return_value="2.3.0")
+def test_emit_openlineage_events_for_databricks_queries_missing_query_ids_and_hook(mock_version):
+    query_ids = []
+    original_query_ids = copy.deepcopy(query_ids)
+
+    fake_adapter = mock.MagicMock()
+    fake_adapter.emit = mock.MagicMock()
+    fake_listener = mock.MagicMock()
+    fake_listener.adapter = fake_adapter
+
+    with mock.patch(
+        "airflow.providers.openlineage.plugins.listener.get_openlineage_listener",
+        return_value=fake_listener,
+    ):
+        with pytest.raises(ValueError, match="If 'hook' is not provided, 'query_ids' must be set."):
+            emit_openlineage_events_for_databricks_queries(
+                query_ids=query_ids,
+                query_source_namespace="databricks_ns",
+                task_instance=None,
+            )
+
+        assert query_ids == original_query_ids  # Verify that the input query_ids list is unchanged.
+        fake_adapter.emit.assert_not_called()  # No events should be emitted
+
+
+@mock.patch("importlib.metadata.version", return_value="2.3.0")
+def test_emit_openlineage_events_for_databricks_queries_missing_query_namespace_and_hook(mock_version):
+    query_ids = ["1", "2"]
+    original_query_ids = copy.deepcopy(query_ids)
+
+    fake_adapter = mock.MagicMock()
+    fake_adapter.emit = mock.MagicMock()
+    fake_listener = mock.MagicMock()
+    fake_listener.adapter = fake_adapter
+
+    with mock.patch(
+        "airflow.providers.openlineage.plugins.listener.get_openlineage_listener",
+        return_value=fake_listener,
+    ):
+        with pytest.raises(
+            ValueError, match="If 'hook' is not provided, 'query_source_namespace' must be set."
+        ):
+            emit_openlineage_events_for_databricks_queries(
+                query_ids=query_ids,
+                task_instance=None,
+            )
+
+        assert query_ids == original_query_ids  # Verify that the input query_ids list is unchanged.
+        fake_adapter.emit.assert_not_called()  # No events should be emitted
+
+
+@mock.patch("importlib.metadata.version", return_value="2.3.0")
+def test_emit_openlineage_events_for_databricks_queries_missing_hook_and_query_for_extra_metadata_true(
+    mock_version,
+):
+    query_ids = ["1", "2"]
+    original_query_ids = copy.deepcopy(query_ids)
+
+    fake_adapter = mock.MagicMock()
+    fake_adapter.emit = mock.MagicMock()
+    fake_listener = mock.MagicMock()
+    fake_listener.adapter = fake_adapter
+
+    with mock.patch(
+        "airflow.providers.openlineage.plugins.listener.get_openlineage_listener",
+        return_value=fake_listener,
+    ):
+        with pytest.raises(
+            ValueError, match="If 'hook' is not provided, 'query_for_extra_metadata' must be False."
+        ):
+            emit_openlineage_events_for_databricks_queries(
+                query_ids=query_ids,
+                query_source_namespace="databricks_ns",
+                task_instance=None,
+                query_for_extra_metadata=True,
+            )
+
         assert query_ids == original_query_ids  # Verify that the input query_ids list is unchanged.
         fake_adapter.emit.assert_not_called()  # No events should be emitted
 
 
-# emit_openlineage_events_for_databricks_queries requires OL provider 2.3.0
 @mock.patch("importlib.metadata.version", return_value="1.99.0")
 def test_emit_openlineage_events_with_old_openlineage_provider(mock_version):
     query_ids = ["q1", "q2"]

From 7494d0f8ac9e56b808025ec50657c05194fc5da6 Mon Sep 17 00:00:00 2001
From: Dev-iL <Gid.CTO+github@gmail.com>
Date: Mon, 30 Jun 2025 13:06:31 +0300
Subject: [PATCH 322/381] Fix various incompatibilities with SQLAlchemy 2.0
 (#52518)

* Workaround to allow using `Base` as a superclass in sqla 2.0

* Add SQLA-version-dependent dialect kwarg generator

* Fix test_connection.py

* Fix test_import_error.py

* Fix test_exceptions.py

* Fix dag_run.py

* Fix test_sqlalchemy_config.py

* Fix rotate_fernet_key_command.py

* Fix dag_version & test_scheduler_job

* Fix db isolation between tests in test_collection.py

* Update ERD diagram
---
 airflow-core/docs/img/airflow_erd.sha256      |   2 +-
 airflow-core/docs/img/airflow_erd.svg         | 318 +++++++++---------
 .../core_api/routes/public/import_error.py    |   8 +-
 .../cli/commands/rotate_fernet_key_command.py |  11 +-
 ...6_3_0_0_add_name_field_to_dataset_model.py |   4 +-
 .../versions/0038_3_0_0_add_asset_active.py   |   2 +-
 ..._0_tweak_assetaliasmodel_to_match_asset.py |   4 +-
 airflow-core/src/airflow/models/base.py       |   5 +
 .../src/airflow/models/dag_version.py         |   1 +
 airflow-core/src/airflow/models/dagrun.py     |  14 +-
 airflow-core/src/airflow/utils/sqlalchemy.py  |   7 +
 .../tests/unit/always/test_connection.py      |   8 +-
 .../api_fastapi/common/test_exceptions.py     |  19 +-
 .../tests/unit/core/test_sqlalchemy_config.py |  21 +-
 .../unit/dag_processing/test_collection.py    |   4 +
 .../tests/unit/jobs/test_scheduler_job.py     |  28 +-
 .../tests_common/test_utils/version_compat.py |  12 +
 17 files changed, 271 insertions(+), 197 deletions(-)

diff --git a/airflow-core/docs/img/airflow_erd.sha256 b/airflow-core/docs/img/airflow_erd.sha256
index 785d9c02a0e35..9f08be06aa704 100644
--- a/airflow-core/docs/img/airflow_erd.sha256
+++ b/airflow-core/docs/img/airflow_erd.sha256
@@ -1 +1 @@
-7e97c71ee6da77d758087a5d7129ac8d63b52dcc3bf4c46b7faf5977faa53ef4
\ No newline at end of file
+538840eb3b7cd14f3a9434c10c6b34442a7059ac59100c6f9d4680f7974a1b03
\ No newline at end of file
diff --git a/airflow-core/docs/img/airflow_erd.svg b/airflow-core/docs/img/airflow_erd.svg
index 8e9d1c7a21606..50975d8288180 100644
--- a/airflow-core/docs/img/airflow_erd.svg
+++ b/airflow-core/docs/img/airflow_erd.svg
@@ -692,24 +692,24 @@
 <!-- dagrun_asset_event -->
 <g id="node21" class="node">
 <title>dagrun_asset_event</title>
-<polygon fill="none" stroke="black" points="1797,-3666.5 1797,-3694.5 2042,-3694.5 2042,-3666.5 1797,-3666.5"/>
-<text text-anchor="start" x="1830" y="-3677.7" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="16.00">dagrun_asset_event</text>
-<polygon fill="none" stroke="black" points="1797,-3641.5 1797,-3666.5 2042,-3666.5 2042,-3641.5 1797,-3641.5"/>
-<text text-anchor="start" x="1802" y="-3651.3" font-family="Helvetica,sans-Serif" text-decoration="underline" font-size="14.00">dag_run_id</text>
-<text text-anchor="start" x="1879" y="-3651.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
-<text text-anchor="start" x="1884" y="-3651.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [INTEGER]</text>
-<text text-anchor="start" x="1961" y="-3651.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
-<polygon fill="none" stroke="black" points="1797,-3616.5 1797,-3641.5 2042,-3641.5 2042,-3616.5 1797,-3616.5"/>
-<text text-anchor="start" x="1802" y="-3626.3" font-family="Helvetica,sans-Serif" text-decoration="underline" font-size="14.00">event_id</text>
-<text text-anchor="start" x="1861" y="-3626.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
-<text text-anchor="start" x="1866" y="-3626.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [INTEGER]</text>
-<text text-anchor="start" x="1943" y="-3626.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
+<polygon fill="none" stroke="black" points="1797,-3682.5 1797,-3710.5 2042,-3710.5 2042,-3682.5 1797,-3682.5"/>
+<text text-anchor="start" x="1830" y="-3693.7" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="16.00">dagrun_asset_event</text>
+<polygon fill="none" stroke="black" points="1797,-3657.5 1797,-3682.5 2042,-3682.5 2042,-3657.5 1797,-3657.5"/>
+<text text-anchor="start" x="1802" y="-3667.3" font-family="Helvetica,sans-Serif" text-decoration="underline" font-size="14.00">dag_run_id</text>
+<text text-anchor="start" x="1879" y="-3667.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
+<text text-anchor="start" x="1884" y="-3667.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [INTEGER]</text>
+<text text-anchor="start" x="1961" y="-3667.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
+<polygon fill="none" stroke="black" points="1797,-3632.5 1797,-3657.5 2042,-3657.5 2042,-3632.5 1797,-3632.5"/>
+<text text-anchor="start" x="1802" y="-3642.3" font-family="Helvetica,sans-Serif" text-decoration="underline" font-size="14.00">event_id</text>
+<text text-anchor="start" x="1861" y="-3642.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
+<text text-anchor="start" x="1866" y="-3642.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [INTEGER]</text>
+<text text-anchor="start" x="1943" y="-3642.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
 </g>
 <!-- asset_event&#45;&#45;dagrun_asset_event -->
 <g id="edge13" class="edge">
 <title>asset_event&#45;&#45;dagrun_asset_event</title>
-<path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M758.22,-3859.62C803.48,-3874.91 854.37,-3890.26 902,-3900.5 980.86,-3917.45 1001.83,-3919.5 1082.5,-3919.5 1082.5,-3919.5 1082.5,-3919.5 1512,-3919.5 1672.17,-3919.5 1818.78,-3773.31 1883.32,-3698.5"/>
-<text text-anchor="start" x="1852.32" y="-3702.3" font-family="Times,serif" font-size="14.00">0..N</text>
+<path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M758.22,-3859.62C803.48,-3874.91 854.37,-3890.26 902,-3900.5 980.86,-3917.45 1001.83,-3919.5 1082.5,-3919.5 1082.5,-3919.5 1082.5,-3919.5 1512,-3919.5 1667.28,-3919.5 1813.45,-3785.75 1880.15,-3714.7"/>
+<text text-anchor="start" x="1849.15" y="-3718.5" font-family="Times,serif" font-size="14.00">0..N</text>
 <text text-anchor="start" x="758.22" y="-3848.42" font-family="Times,serif" font-size="14.00">1</text>
 </g>
 <!-- trigger -->
@@ -1358,30 +1358,30 @@
 <!-- task_instance&#45;&#45;rendered_task_instance_fields -->
 <g id="edge56" class="edge">
 <title>task_instance&#45;&#45;rendered_task_instance_fields</title>
-<path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M2026.75,-1889.69C2045.53,-1805.33 2064.36,-1718.38 2081,-1636.5 2117.68,-1455.98 2051.27,-1381.41 2154,-1228.5 2158.15,-1222.32 2162.82,-1216.44 2167.87,-1210.87"/>
-<text text-anchor="start" x="2136.87" y="-1199.67" font-family="Times,serif" font-size="14.00">0..N</text>
-<text text-anchor="start" x="2016.75" y="-1878.49" font-family="Times,serif" font-size="14.00">1</text>
+<path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M2037.63,-1889.63C2053.13,-1823.51 2068.1,-1756.41 2081,-1692.5 2122.32,-1487.87 2039.41,-1403 2154,-1228.5 2158.09,-1222.28 2162.7,-1216.36 2167.71,-1210.76"/>
+<text text-anchor="start" x="2136.71" y="-1199.56" font-family="Times,serif" font-size="14.00">0..N</text>
+<text text-anchor="start" x="2027.63" y="-1878.43" font-family="Times,serif" font-size="14.00">1</text>
 </g>
 <!-- task_instance&#45;&#45;rendered_task_instance_fields -->
 <g id="edge57" class="edge">
 <title>task_instance&#45;&#45;rendered_task_instance_fields</title>
-<path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M2030.68,-1889.77C2048.14,-1811.24 2065.52,-1730.68 2081,-1654.5 2117.68,-1473.98 2051.27,-1399.41 2154,-1246.5 2158.15,-1240.32 2162.82,-1234.44 2167.87,-1228.86"/>
-<text text-anchor="start" x="2136.87" y="-1217.66" font-family="Times,serif" font-size="14.00">0..N</text>
-<text text-anchor="start" x="2030.68" y="-1878.57" font-family="Times,serif" font-size="14.00">1</text>
+<path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M2041.77,-1889.75C2055.79,-1829.55 2069.25,-1768.7 2081,-1710.5 2122.32,-1505.87 2039.41,-1421 2154,-1246.5 2158.09,-1240.28 2162.7,-1234.36 2167.71,-1228.75"/>
+<text text-anchor="start" x="2136.71" y="-1217.55" font-family="Times,serif" font-size="14.00">0..N</text>
+<text text-anchor="start" x="2041.77" y="-1878.55" font-family="Times,serif" font-size="14.00">1</text>
 </g>
 <!-- task_instance&#45;&#45;rendered_task_instance_fields -->
 <g id="edge58" class="edge">
 <title>task_instance&#45;&#45;rendered_task_instance_fields</title>
-<path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M2034.6,-1889.89C2050.73,-1817.2 2066.68,-1742.97 2081,-1672.5 2117.68,-1491.98 2051.27,-1417.41 2154,-1264.5 2158.15,-1258.32 2162.82,-1252.44 2167.87,-1246.84"/>
-<text text-anchor="start" x="2136.87" y="-1235.64" font-family="Times,serif" font-size="14.00">0..N</text>
-<text text-anchor="start" x="2034.6" y="-1878.69" font-family="Times,serif" font-size="14.00">1</text>
+<path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M2045.87,-1889.93C2058.41,-1835.65 2070.4,-1781 2081,-1728.5 2122.32,-1523.87 2039.41,-1439 2154,-1264.5 2158.09,-1258.28 2162.7,-1252.36 2167.71,-1246.74"/>
+<text text-anchor="start" x="2136.71" y="-1235.54" font-family="Times,serif" font-size="14.00">0..N</text>
+<text text-anchor="start" x="2045.87" y="-1878.73" font-family="Times,serif" font-size="14.00">1</text>
 </g>
 <!-- task_instance&#45;&#45;rendered_task_instance_fields -->
 <g id="edge59" class="edge">
 <title>task_instance&#45;&#45;rendered_task_instance_fields</title>
-<path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M2038.62,-1889.57C2053.37,-1822.88 2067.87,-1755.11 2081,-1690.5 2117.68,-1509.98 2051.27,-1435.41 2154,-1282.5 2162.86,-1269.32 2174.05,-1257.49 2186.4,-1246.8"/>
-<text text-anchor="start" x="2186.4" y="-1250.6" font-family="Times,serif" font-size="14.00">0..N</text>
-<text text-anchor="start" x="2028.62" y="-1893.37" font-family="Times,serif" font-size="14.00">1</text>
+<path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M2050.04,-1889.7C2061.06,-1841.5 2071.58,-1793.15 2081,-1746.5 2122.32,-1541.87 2039.41,-1457 2154,-1282.5 2162.72,-1269.22 2173.83,-1257.34 2186.12,-1246.62"/>
+<text text-anchor="start" x="2186.12" y="-1250.42" font-family="Times,serif" font-size="14.00">0..N</text>
+<text text-anchor="start" x="2050.04" y="-1878.5" font-family="Times,serif" font-size="14.00">1</text>
 </g>
 <!-- dag_bundle -->
 <g id="node24" class="node">
@@ -1524,88 +1524,42 @@
 <text text-anchor="start" x="302.2" y="-1915.3" font-family="Times,serif" font-size="14.00">{0,1}</text>
 </g>
 <!-- dag&#45;&#45;dag_schedule_asset_alias_reference -->
-<g id="edge20" class="edge">
+<g id="edge19" class="edge">
 <title>dag&#45;&#45;dag_schedule_asset_alias_reference</title>
 <path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M772.44,-2257.14C793.91,-2312.52 813.8,-2370.02 829,-2425.5 891.25,-2652.71 758.89,-2763.37 902,-2950.5 904.38,-2953.61 906.91,-2956.6 909.57,-2959.47"/>
 <text text-anchor="start" x="878.57" y="-2948.27" font-family="Times,serif" font-size="14.00">0..N</text>
 <text text-anchor="start" x="762.44" y="-2260.94" font-family="Times,serif" font-size="14.00">1</text>
 </g>
 <!-- dag&#45;&#45;dag_schedule_asset_reference -->
-<g id="edge21" class="edge">
+<g id="edge20" class="edge">
 <title>dag&#45;&#45;dag_schedule_asset_reference</title>
 <path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M765.48,-2257.02C787.99,-2312.79 810.03,-2370.44 829,-2425.5 869.07,-2541.81 821.14,-2599.79 902,-2692.5 911.29,-2703.16 922.32,-2712.38 934.27,-2720.36"/>
 <text text-anchor="start" x="903.27" y="-2709.16" font-family="Times,serif" font-size="14.00">0..N</text>
 <text text-anchor="start" x="755.48" y="-2260.82" font-family="Times,serif" font-size="14.00">1</text>
 </g>
 <!-- dag&#45;&#45;task_outlet_asset_reference -->
-<g id="edge22" class="edge">
+<g id="edge21" class="edge">
 <title>dag&#45;&#45;task_outlet_asset_reference</title>
 <path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M756.45,-2257.39C806.35,-2367 860.64,-2471.72 902,-2513.5 913.92,-2525.54 927.8,-2536.22 942.48,-2545.61"/>
 <text text-anchor="start" x="911.48" y="-2534.41" font-family="Times,serif" font-size="14.00">0..N</text>
 <text text-anchor="start" x="746.45" y="-2261.19" font-family="Times,serif" font-size="14.00">1</text>
 </g>
 <!-- dag&#45;&#45;task_inlet_asset_reference -->
-<g id="edge23" class="edge">
+<g id="edge22" class="edge">
 <title>dag&#45;&#45;task_inlet_asset_reference</title>
 <path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M829.14,-2216.87C852.64,-2244.08 877.12,-2270.44 902,-2294.5 919.44,-2311.37 939.23,-2327.75 959.16,-2342.86"/>
 <text text-anchor="start" x="928.16" y="-2331.66" font-family="Times,serif" font-size="14.00">0..N</text>
 <text text-anchor="start" x="829.14" y="-2205.67" font-family="Times,serif" font-size="14.00">1</text>
 </g>
 <!-- dag&#45;&#45;asset_dag_run_queue -->
-<g id="edge24" class="edge">
+<g id="edge23" class="edge">
 <title>dag&#45;&#45;asset_dag_run_queue</title>
 <path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M829.18,-2117.36C852.91,-2134.84 877.42,-2151.28 902,-2165.5 908.49,-2169.25 915.23,-2172.85 922.13,-2176.28"/>
 <text text-anchor="start" x="891.13" y="-2165.08" font-family="Times,serif" font-size="14.00">0..N</text>
 <text text-anchor="start" x="829.18" y="-2106.16" font-family="Times,serif" font-size="14.00">1</text>
 </g>
-<!-- dag_version -->
-<g id="node26" class="node">
-<title>dag_version</title>
-<polygon fill="none" stroke="black" points="943.5,-2124.5 943.5,-2152.5 1224.5,-2152.5 1224.5,-2124.5 943.5,-2124.5"/>
-<text text-anchor="start" x="1029.5" y="-2135.7" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="16.00">dag_version</text>
-<polygon fill="none" stroke="black" points="943.5,-2099.5 943.5,-2124.5 1224.5,-2124.5 1224.5,-2099.5 943.5,-2099.5"/>
-<text text-anchor="start" x="948.5" y="-2109.3" font-family="Helvetica,sans-Serif" text-decoration="underline" font-size="14.00">id</text>
-<text text-anchor="start" x="961.5" y="-2109.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
-<text text-anchor="start" x="966.5" y="-2109.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [UUID]</text>
-<text text-anchor="start" x="1018.5" y="-2109.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
-<polygon fill="none" stroke="black" points="943.5,-2074.5 943.5,-2099.5 1224.5,-2099.5 1224.5,-2074.5 943.5,-2074.5"/>
-<text text-anchor="start" x="948.5" y="-2084.3" font-family="Helvetica,sans-Serif" font-size="14.00">bundle_name</text>
-<text text-anchor="start" x="1042.5" y="-2084.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
-<text text-anchor="start" x="1047.5" y="-2084.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [VARCHAR(250)]</text>
-<polygon fill="none" stroke="black" points="943.5,-2049.5 943.5,-2074.5 1224.5,-2074.5 1224.5,-2049.5 943.5,-2049.5"/>
-<text text-anchor="start" x="948.5" y="-2059.3" font-family="Helvetica,sans-Serif" font-size="14.00">bundle_version</text>
-<text text-anchor="start" x="1054.5" y="-2059.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
-<text text-anchor="start" x="1059.5" y="-2059.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [VARCHAR(250)]</text>
-<polygon fill="none" stroke="black" points="943.5,-2024.5 943.5,-2049.5 1224.5,-2049.5 1224.5,-2024.5 943.5,-2024.5"/>
-<text text-anchor="start" x="948.5" y="-2034.3" font-family="Helvetica,sans-Serif" font-size="14.00">created_at</text>
-<text text-anchor="start" x="1021.5" y="-2034.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
-<text text-anchor="start" x="1026.5" y="-2034.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [TIMESTAMP]</text>
-<text text-anchor="start" x="1122.5" y="-2034.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
-<polygon fill="none" stroke="black" points="943.5,-1999.5 943.5,-2024.5 1224.5,-2024.5 1224.5,-1999.5 943.5,-1999.5"/>
-<text text-anchor="start" x="948.5" y="-2009.3" font-family="Helvetica,sans-Serif" font-size="14.00">dag_id</text>
-<text text-anchor="start" x="994.5" y="-2009.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
-<text text-anchor="start" x="999.5" y="-2009.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [VARCHAR(250)]</text>
-<text text-anchor="start" x="1120.5" y="-2009.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
-<polygon fill="none" stroke="black" points="943.5,-1974.5 943.5,-1999.5 1224.5,-1999.5 1224.5,-1974.5 943.5,-1974.5"/>
-<text text-anchor="start" x="948.5" y="-1984.3" font-family="Helvetica,sans-Serif" font-size="14.00">last_updated</text>
-<text text-anchor="start" x="1038.5" y="-1984.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
-<text text-anchor="start" x="1043.5" y="-1984.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [TIMESTAMP]</text>
-<text text-anchor="start" x="1139.5" y="-1984.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
-<polygon fill="none" stroke="black" points="943.5,-1949.5 943.5,-1974.5 1224.5,-1974.5 1224.5,-1949.5 943.5,-1949.5"/>
-<text text-anchor="start" x="948.5" y="-1959.3" font-family="Helvetica,sans-Serif" font-size="14.00">version_number</text>
-<text text-anchor="start" x="1061.5" y="-1959.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
-<text text-anchor="start" x="1066.5" y="-1959.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [INTEGER]</text>
-<text text-anchor="start" x="1143.5" y="-1959.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
-</g>
-<!-- dag&#45;&#45;dag_version -->
-<g id="edge17" class="edge">
-<title>dag&#45;&#45;dag_version</title>
-<path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M829.26,-1983.06C864.9,-1992.69 901.24,-2002.51 934.86,-2011.6"/>
-<text text-anchor="start" x="903.86" y="-2000.4" font-family="Times,serif" font-size="14.00">0..N</text>
-<text text-anchor="start" x="829.26" y="-1971.86" font-family="Times,serif" font-size="14.00">1</text>
-</g>
 <!-- dag_schedule_asset_name_reference -->
-<g id="node27" class="node">
+<g id="node26" class="node">
 <title>dag_schedule_asset_name_reference</title>
 <polygon fill="none" stroke="black" points="914.5,-1339.5 914.5,-1367.5 1253.5,-1367.5 1253.5,-1339.5 914.5,-1339.5"/>
 <text text-anchor="start" x="919.5" y="-1350.7" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="16.00">dag_schedule_asset_name_reference</text>
@@ -1626,14 +1580,14 @@
 <text text-anchor="start" x="1093.5" y="-1274.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
 </g>
 <!-- dag&#45;&#45;dag_schedule_asset_name_reference -->
-<g id="edge18" class="edge">
+<g id="edge17" class="edge">
 <title>dag&#45;&#45;dag_schedule_asset_name_reference</title>
 <path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M718.04,-1595.78C753.92,-1518.73 801.8,-1442.85 865,-1386.5 877.21,-1375.61 891.14,-1366.41 905.91,-1358.65"/>
 <text text-anchor="start" x="874.91" y="-1347.45" font-family="Times,serif" font-size="14.00">0..N</text>
 <text text-anchor="start" x="708.04" y="-1584.58" font-family="Times,serif" font-size="14.00">1</text>
 </g>
 <!-- dag_schedule_asset_uri_reference -->
-<g id="node28" class="node">
+<g id="node27" class="node">
 <title>dag_schedule_asset_uri_reference</title>
 <polygon fill="none" stroke="black" points="926.5,-1895.5 926.5,-1923.5 1241.5,-1923.5 1241.5,-1895.5 926.5,-1895.5"/>
 <text text-anchor="start" x="931.5" y="-1906.7" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="16.00">dag_schedule_asset_uri_reference</text>
@@ -1654,12 +1608,58 @@
 <text text-anchor="start" x="1105.5" y="-1830.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
 </g>
 <!-- dag&#45;&#45;dag_schedule_asset_uri_reference -->
-<g id="edge19" class="edge">
+<g id="edge18" class="edge">
 <title>dag&#45;&#45;dag_schedule_asset_uri_reference</title>
 <path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M829.26,-1902.07C858.92,-1898.6 889.07,-1895.08 917.73,-1891.74"/>
 <text text-anchor="start" x="886.73" y="-1880.54" font-family="Times,serif" font-size="14.00">0..N</text>
 <text text-anchor="start" x="829.26" y="-1890.87" font-family="Times,serif" font-size="14.00">1</text>
 </g>
+<!-- dag_version -->
+<g id="node28" class="node">
+<title>dag_version</title>
+<polygon fill="none" stroke="black" points="943.5,-2124.5 943.5,-2152.5 1224.5,-2152.5 1224.5,-2124.5 943.5,-2124.5"/>
+<text text-anchor="start" x="1029.5" y="-2135.7" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="16.00">dag_version</text>
+<polygon fill="none" stroke="black" points="943.5,-2099.5 943.5,-2124.5 1224.5,-2124.5 1224.5,-2099.5 943.5,-2099.5"/>
+<text text-anchor="start" x="948.5" y="-2109.3" font-family="Helvetica,sans-Serif" text-decoration="underline" font-size="14.00">id</text>
+<text text-anchor="start" x="961.5" y="-2109.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
+<text text-anchor="start" x="966.5" y="-2109.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [UUID]</text>
+<text text-anchor="start" x="1018.5" y="-2109.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
+<polygon fill="none" stroke="black" points="943.5,-2074.5 943.5,-2099.5 1224.5,-2099.5 1224.5,-2074.5 943.5,-2074.5"/>
+<text text-anchor="start" x="948.5" y="-2084.3" font-family="Helvetica,sans-Serif" font-size="14.00">bundle_name</text>
+<text text-anchor="start" x="1042.5" y="-2084.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
+<text text-anchor="start" x="1047.5" y="-2084.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [VARCHAR(250)]</text>
+<polygon fill="none" stroke="black" points="943.5,-2049.5 943.5,-2074.5 1224.5,-2074.5 1224.5,-2049.5 943.5,-2049.5"/>
+<text text-anchor="start" x="948.5" y="-2059.3" font-family="Helvetica,sans-Serif" font-size="14.00">bundle_version</text>
+<text text-anchor="start" x="1054.5" y="-2059.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
+<text text-anchor="start" x="1059.5" y="-2059.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [VARCHAR(250)]</text>
+<polygon fill="none" stroke="black" points="943.5,-2024.5 943.5,-2049.5 1224.5,-2049.5 1224.5,-2024.5 943.5,-2024.5"/>
+<text text-anchor="start" x="948.5" y="-2034.3" font-family="Helvetica,sans-Serif" font-size="14.00">created_at</text>
+<text text-anchor="start" x="1021.5" y="-2034.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
+<text text-anchor="start" x="1026.5" y="-2034.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [TIMESTAMP]</text>
+<text text-anchor="start" x="1122.5" y="-2034.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
+<polygon fill="none" stroke="black" points="943.5,-1999.5 943.5,-2024.5 1224.5,-2024.5 1224.5,-1999.5 943.5,-1999.5"/>
+<text text-anchor="start" x="948.5" y="-2009.3" font-family="Helvetica,sans-Serif" font-size="14.00">dag_id</text>
+<text text-anchor="start" x="994.5" y="-2009.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
+<text text-anchor="start" x="999.5" y="-2009.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [VARCHAR(250)]</text>
+<text text-anchor="start" x="1120.5" y="-2009.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
+<polygon fill="none" stroke="black" points="943.5,-1974.5 943.5,-1999.5 1224.5,-1999.5 1224.5,-1974.5 943.5,-1974.5"/>
+<text text-anchor="start" x="948.5" y="-1984.3" font-family="Helvetica,sans-Serif" font-size="14.00">last_updated</text>
+<text text-anchor="start" x="1038.5" y="-1984.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
+<text text-anchor="start" x="1043.5" y="-1984.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [TIMESTAMP]</text>
+<text text-anchor="start" x="1139.5" y="-1984.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
+<polygon fill="none" stroke="black" points="943.5,-1949.5 943.5,-1974.5 1224.5,-1974.5 1224.5,-1949.5 943.5,-1949.5"/>
+<text text-anchor="start" x="948.5" y="-1959.3" font-family="Helvetica,sans-Serif" font-size="14.00">version_number</text>
+<text text-anchor="start" x="1061.5" y="-1959.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
+<text text-anchor="start" x="1066.5" y="-1959.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [INTEGER]</text>
+<text text-anchor="start" x="1143.5" y="-1959.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
+</g>
+<!-- dag&#45;&#45;dag_version -->
+<g id="edge24" class="edge">
+<title>dag&#45;&#45;dag_version</title>
+<path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M829.26,-1983.06C864.9,-1992.69 901.24,-2002.51 934.86,-2011.6"/>
+<text text-anchor="start" x="903.86" y="-2000.4" font-family="Times,serif" font-size="14.00">0..N</text>
+<text text-anchor="start" x="829.26" y="-1971.86" font-family="Times,serif" font-size="14.00">1</text>
+</g>
 <!-- dag_tag -->
 <g id="node29" class="node">
 <title>dag_tag</title>
@@ -1747,41 +1747,41 @@
 <!-- deadline -->
 <g id="node32" class="node">
 <title>deadline</title>
-<polygon fill="none" stroke="black" points="1777,-1622.5 1777,-1650.5 2061,-1650.5 2061,-1622.5 1777,-1622.5"/>
-<text text-anchor="start" x="1881" y="-1633.7" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="16.00">deadline</text>
-<polygon fill="none" stroke="black" points="1777,-1597.5 1777,-1622.5 2061,-1622.5 2061,-1597.5 1777,-1597.5"/>
-<text text-anchor="start" x="1782" y="-1607.3" font-family="Helvetica,sans-Serif" text-decoration="underline" font-size="14.00">id</text>
-<text text-anchor="start" x="1795" y="-1607.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
-<text text-anchor="start" x="1800" y="-1607.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [UUID]</text>
-<text text-anchor="start" x="1852" y="-1607.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
-<polygon fill="none" stroke="black" points="1777,-1572.5 1777,-1597.5 2061,-1597.5 2061,-1572.5 1777,-1572.5"/>
-<text text-anchor="start" x="1782" y="-1582.3" font-family="Helvetica,sans-Serif" font-size="14.00">callback</text>
-<text text-anchor="start" x="1839" y="-1582.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
-<text text-anchor="start" x="1844" y="-1582.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [VARCHAR(500)]</text>
-<text text-anchor="start" x="1965" y="-1582.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
-<polygon fill="none" stroke="black" points="1777,-1547.5 1777,-1572.5 2061,-1572.5 2061,-1547.5 1777,-1547.5"/>
-<text text-anchor="start" x="1782" y="-1557.3" font-family="Helvetica,sans-Serif" font-size="14.00">callback_kwargs</text>
-<text text-anchor="start" x="1895" y="-1557.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
-<text text-anchor="start" x="1900" y="-1557.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [JSON]</text>
-<polygon fill="none" stroke="black" points="1777,-1522.5 1777,-1547.5 2061,-1547.5 2061,-1522.5 1777,-1522.5"/>
-<text text-anchor="start" x="1782" y="-1532.3" font-family="Helvetica,sans-Serif" font-size="14.00">dag_id</text>
-<text text-anchor="start" x="1828" y="-1532.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
-<text text-anchor="start" x="1833" y="-1532.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [VARCHAR(250)]</text>
-<polygon fill="none" stroke="black" points="1777,-1497.5 1777,-1522.5 2061,-1522.5 2061,-1497.5 1777,-1497.5"/>
-<text text-anchor="start" x="1782" y="-1507.3" font-family="Helvetica,sans-Serif" font-size="14.00">dagrun_id</text>
-<text text-anchor="start" x="1852" y="-1507.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
-<text text-anchor="start" x="1857" y="-1507.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [INTEGER]</text>
-<polygon fill="none" stroke="black" points="1777,-1472.5 1777,-1497.5 2061,-1497.5 2061,-1472.5 1777,-1472.5"/>
-<text text-anchor="start" x="1782" y="-1482.3" font-family="Helvetica,sans-Serif" font-size="14.00">deadline_time</text>
-<text text-anchor="start" x="1879" y="-1482.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
-<text text-anchor="start" x="1884" y="-1482.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [TIMESTAMP]</text>
-<text text-anchor="start" x="1980" y="-1482.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
+<polygon fill="none" stroke="black" points="1777,-1678.5 1777,-1706.5 2061,-1706.5 2061,-1678.5 1777,-1678.5"/>
+<text text-anchor="start" x="1881" y="-1689.7" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="16.00">deadline</text>
+<polygon fill="none" stroke="black" points="1777,-1653.5 1777,-1678.5 2061,-1678.5 2061,-1653.5 1777,-1653.5"/>
+<text text-anchor="start" x="1782" y="-1663.3" font-family="Helvetica,sans-Serif" text-decoration="underline" font-size="14.00">id</text>
+<text text-anchor="start" x="1795" y="-1663.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
+<text text-anchor="start" x="1800" y="-1663.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [UUID]</text>
+<text text-anchor="start" x="1852" y="-1663.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
+<polygon fill="none" stroke="black" points="1777,-1628.5 1777,-1653.5 2061,-1653.5 2061,-1628.5 1777,-1628.5"/>
+<text text-anchor="start" x="1782" y="-1638.3" font-family="Helvetica,sans-Serif" font-size="14.00">callback</text>
+<text text-anchor="start" x="1839" y="-1638.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
+<text text-anchor="start" x="1844" y="-1638.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [VARCHAR(500)]</text>
+<text text-anchor="start" x="1965" y="-1638.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
+<polygon fill="none" stroke="black" points="1777,-1603.5 1777,-1628.5 2061,-1628.5 2061,-1603.5 1777,-1603.5"/>
+<text text-anchor="start" x="1782" y="-1613.3" font-family="Helvetica,sans-Serif" font-size="14.00">callback_kwargs</text>
+<text text-anchor="start" x="1895" y="-1613.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
+<text text-anchor="start" x="1900" y="-1613.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [JSON]</text>
+<polygon fill="none" stroke="black" points="1777,-1578.5 1777,-1603.5 2061,-1603.5 2061,-1578.5 1777,-1578.5"/>
+<text text-anchor="start" x="1782" y="-1588.3" font-family="Helvetica,sans-Serif" font-size="14.00">dag_id</text>
+<text text-anchor="start" x="1828" y="-1588.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
+<text text-anchor="start" x="1833" y="-1588.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [VARCHAR(250)]</text>
+<polygon fill="none" stroke="black" points="1777,-1553.5 1777,-1578.5 2061,-1578.5 2061,-1553.5 1777,-1553.5"/>
+<text text-anchor="start" x="1782" y="-1563.3" font-family="Helvetica,sans-Serif" font-size="14.00">dagrun_id</text>
+<text text-anchor="start" x="1852" y="-1563.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
+<text text-anchor="start" x="1857" y="-1563.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [INTEGER]</text>
+<polygon fill="none" stroke="black" points="1777,-1528.5 1777,-1553.5 2061,-1553.5 2061,-1528.5 1777,-1528.5"/>
+<text text-anchor="start" x="1782" y="-1538.3" font-family="Helvetica,sans-Serif" font-size="14.00">deadline_time</text>
+<text text-anchor="start" x="1879" y="-1538.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
+<text text-anchor="start" x="1884" y="-1538.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [TIMESTAMP]</text>
+<text text-anchor="start" x="1980" y="-1538.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
 </g>
 <!-- dag&#45;&#45;deadline -->
 <g id="edge28" class="edge">
 <title>dag&#45;&#45;deadline</title>
-<path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M743.78,-1595.83C784.18,-1527.42 836.15,-1463.03 902,-1419.5 969.29,-1375.02 1001.83,-1400.5 1082.5,-1400.5 1082.5,-1400.5 1082.5,-1400.5 1512,-1400.5 1601.29,-1400.5 1694.33,-1434.56 1768.79,-1471.35"/>
-<text text-anchor="start" x="1737.79" y="-1460.15" font-family="Times,serif" font-size="14.00">0..N</text>
+<path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M743.78,-1595.83C784.18,-1527.42 836.15,-1463.03 902,-1419.5 969.29,-1375.02 1001.83,-1400.5 1082.5,-1400.5 1082.5,-1400.5 1082.5,-1400.5 1512,-1400.5 1623.89,-1400.5 1734.82,-1465.4 1812.38,-1524.21"/>
+<text text-anchor="start" x="1781.38" y="-1513.01" font-family="Times,serif" font-size="14.00">0..N</text>
 <text text-anchor="start" x="743.78" y="-1584.63" font-family="Times,serif" font-size="14.00">{0,1}</text>
 </g>
 <!-- dag_version&#45;&#45;task_instance -->
@@ -2018,71 +2018,71 @@
 <!-- dag_run&#45;&#45;dagrun_asset_event -->
 <g id="edge34" class="edge">
 <title>dag_run&#45;&#45;dagrun_asset_event</title>
-<path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M1667.23,-3237.34C1751.4,-3377.7 1847.19,-3537.42 1892.14,-3612.37"/>
-<text text-anchor="start" x="1861.14" y="-3601.17" font-family="Times,serif" font-size="14.00">0..N</text>
-<text text-anchor="start" x="1667.23" y="-3226.14" font-family="Times,serif" font-size="14.00">1</text>
+<path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M1667.23,-3243.46C1751.74,-3387.7 1847.95,-3551.93 1892.67,-3628.27"/>
+<text text-anchor="start" x="1861.67" y="-3617.07" font-family="Times,serif" font-size="14.00">0..N</text>
+<text text-anchor="start" x="1667.23" y="-3232.26" font-family="Times,serif" font-size="14.00">1</text>
 </g>
 <!-- dag_run&#45;&#45;task_instance -->
-<g id="edge35" class="edge">
+<g id="edge36" class="edge">
 <title>dag_run&#45;&#45;task_instance</title>
 <path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M1667.23,-2739.46C1696.61,-2695.25 1727.41,-2649.11 1756.96,-2605.04"/>
 <text text-anchor="start" x="1725.96" y="-2593.84" font-family="Times,serif" font-size="14.00">0..N</text>
 <text text-anchor="start" x="1667.23" y="-2728.26" font-family="Times,serif" font-size="14.00">1</text>
 </g>
 <!-- dag_run&#45;&#45;task_instance -->
-<g id="edge36" class="edge">
+<g id="edge37" class="edge">
 <title>dag_run&#45;&#45;task_instance</title>
 <path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M1667.23,-2752.62C1696.61,-2708.83 1727.41,-2662.73 1756.96,-2618.28"/>
 <text text-anchor="start" x="1725.96" y="-2622.08" font-family="Times,serif" font-size="14.00">0..N</text>
 <text text-anchor="start" x="1667.23" y="-2756.42" font-family="Times,serif" font-size="14.00">1</text>
 </g>
 <!-- dag_run&#45;&#45;deadline -->
-<g id="edge39" class="edge">
+<g id="edge35" class="edge">
 <title>dag_run&#45;&#45;deadline</title>
-<path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M1583.73,-2647.69C1651.21,-2337.98 1743.83,-1917.32 1757,-1880.5 1785.25,-1801.5 1828.59,-1716.93 1863.19,-1654.73"/>
-<text text-anchor="start" x="1832.19" y="-1658.53" font-family="Times,serif" font-size="14.00">0..N</text>
-<text text-anchor="start" x="1542.73" y="-2636.49" font-family="Times,serif" font-size="14.00">{0,1}</text>
+<path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M1583.03,-2647.81C1650.02,-2337.88 1742.33,-1916.77 1757,-1880.5 1781.14,-1820.82 1818.13,-1759.18 1850.56,-1710.59"/>
+<text text-anchor="start" x="1819.56" y="-1714.39" font-family="Times,serif" font-size="14.00">0..N</text>
+<text text-anchor="start" x="1542.03" y="-2636.61" font-family="Times,serif" font-size="14.00">{0,1}</text>
 </g>
 <!-- backfill_dag_run -->
 <g id="node37" class="node">
 <title>backfill_dag_run</title>
-<polygon fill="none" stroke="black" points="1785,-3298.5 1785,-3326.5 2054,-3326.5 2054,-3298.5 1785,-3298.5"/>
-<text text-anchor="start" x="1847" y="-3309.7" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="16.00">backfill_dag_run</text>
-<polygon fill="none" stroke="black" points="1785,-3273.5 1785,-3298.5 2054,-3298.5 2054,-3273.5 1785,-3273.5"/>
-<text text-anchor="start" x="1790" y="-3283.3" font-family="Helvetica,sans-Serif" text-decoration="underline" font-size="14.00">id</text>
-<text text-anchor="start" x="1803" y="-3283.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
-<text text-anchor="start" x="1808" y="-3283.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [INTEGER]</text>
-<text text-anchor="start" x="1885" y="-3283.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
-<polygon fill="none" stroke="black" points="1785,-3248.5 1785,-3273.5 2054,-3273.5 2054,-3248.5 1785,-3248.5"/>
-<text text-anchor="start" x="1790" y="-3258.3" font-family="Helvetica,sans-Serif" font-size="14.00">backfill_id</text>
-<text text-anchor="start" x="1860" y="-3258.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
-<text text-anchor="start" x="1865" y="-3258.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [INTEGER]</text>
-<text text-anchor="start" x="1942" y="-3258.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
-<polygon fill="none" stroke="black" points="1785,-3223.5 1785,-3248.5 2054,-3248.5 2054,-3223.5 1785,-3223.5"/>
-<text text-anchor="start" x="1790" y="-3233.3" font-family="Helvetica,sans-Serif" font-size="14.00">dag_run_id</text>
-<text text-anchor="start" x="1867" y="-3233.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
-<text text-anchor="start" x="1872" y="-3233.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [INTEGER]</text>
-<polygon fill="none" stroke="black" points="1785,-3198.5 1785,-3223.5 2054,-3223.5 2054,-3198.5 1785,-3198.5"/>
-<text text-anchor="start" x="1790" y="-3208.3" font-family="Helvetica,sans-Serif" font-size="14.00">exception_reason</text>
-<text text-anchor="start" x="1911" y="-3208.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
-<text text-anchor="start" x="1916" y="-3208.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [VARCHAR(250)]</text>
-<polygon fill="none" stroke="black" points="1785,-3173.5 1785,-3198.5 2054,-3198.5 2054,-3173.5 1785,-3173.5"/>
-<text text-anchor="start" x="1790" y="-3183.3" font-family="Helvetica,sans-Serif" font-size="14.00">logical_date</text>
-<text text-anchor="start" x="1872" y="-3183.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
-<text text-anchor="start" x="1877" y="-3183.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [TIMESTAMP]</text>
-<text text-anchor="start" x="1973" y="-3183.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
-<polygon fill="none" stroke="black" points="1785,-3148.5 1785,-3173.5 2054,-3173.5 2054,-3148.5 1785,-3148.5"/>
-<text text-anchor="start" x="1790" y="-3158.3" font-family="Helvetica,sans-Serif" font-size="14.00">sort_ordinal</text>
-<text text-anchor="start" x="1872" y="-3158.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
-<text text-anchor="start" x="1877" y="-3158.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [INTEGER]</text>
-<text text-anchor="start" x="1954" y="-3158.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
+<polygon fill="none" stroke="black" points="1785,-3329.5 1785,-3357.5 2054,-3357.5 2054,-3329.5 1785,-3329.5"/>
+<text text-anchor="start" x="1847" y="-3340.7" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="16.00">backfill_dag_run</text>
+<polygon fill="none" stroke="black" points="1785,-3304.5 1785,-3329.5 2054,-3329.5 2054,-3304.5 1785,-3304.5"/>
+<text text-anchor="start" x="1790" y="-3314.3" font-family="Helvetica,sans-Serif" text-decoration="underline" font-size="14.00">id</text>
+<text text-anchor="start" x="1803" y="-3314.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
+<text text-anchor="start" x="1808" y="-3314.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [INTEGER]</text>
+<text text-anchor="start" x="1885" y="-3314.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
+<polygon fill="none" stroke="black" points="1785,-3279.5 1785,-3304.5 2054,-3304.5 2054,-3279.5 1785,-3279.5"/>
+<text text-anchor="start" x="1790" y="-3289.3" font-family="Helvetica,sans-Serif" font-size="14.00">backfill_id</text>
+<text text-anchor="start" x="1860" y="-3289.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
+<text text-anchor="start" x="1865" y="-3289.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [INTEGER]</text>
+<text text-anchor="start" x="1942" y="-3289.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
+<polygon fill="none" stroke="black" points="1785,-3254.5 1785,-3279.5 2054,-3279.5 2054,-3254.5 1785,-3254.5"/>
+<text text-anchor="start" x="1790" y="-3264.3" font-family="Helvetica,sans-Serif" font-size="14.00">dag_run_id</text>
+<text text-anchor="start" x="1867" y="-3264.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
+<text text-anchor="start" x="1872" y="-3264.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [INTEGER]</text>
+<polygon fill="none" stroke="black" points="1785,-3229.5 1785,-3254.5 2054,-3254.5 2054,-3229.5 1785,-3229.5"/>
+<text text-anchor="start" x="1790" y="-3239.3" font-family="Helvetica,sans-Serif" font-size="14.00">exception_reason</text>
+<text text-anchor="start" x="1911" y="-3239.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
+<text text-anchor="start" x="1916" y="-3239.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [VARCHAR(250)]</text>
+<polygon fill="none" stroke="black" points="1785,-3204.5 1785,-3229.5 2054,-3229.5 2054,-3204.5 1785,-3204.5"/>
+<text text-anchor="start" x="1790" y="-3214.3" font-family="Helvetica,sans-Serif" font-size="14.00">logical_date</text>
+<text text-anchor="start" x="1872" y="-3214.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
+<text text-anchor="start" x="1877" y="-3214.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [TIMESTAMP]</text>
+<text text-anchor="start" x="1973" y="-3214.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
+<polygon fill="none" stroke="black" points="1785,-3179.5 1785,-3204.5 2054,-3204.5 2054,-3179.5 1785,-3179.5"/>
+<text text-anchor="start" x="1790" y="-3189.3" font-family="Helvetica,sans-Serif" font-size="14.00">sort_ordinal</text>
+<text text-anchor="start" x="1872" y="-3189.3" font-family="Helvetica,sans-Serif" font-size="14.00"> </text>
+<text text-anchor="start" x="1877" y="-3189.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [INTEGER]</text>
+<text text-anchor="start" x="1954" y="-3189.3" font-family="Helvetica,sans-Serif" font-size="14.00"> NOT NULL</text>
 </g>
 <!-- dag_run&#45;&#45;backfill_dag_run -->
-<g id="edge37" class="edge">
+<g id="edge38" class="edge">
 <title>dag_run&#45;&#45;backfill_dag_run</title>
-<path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M1667.23,-3077.53C1703.05,-3100.37 1740.97,-3124.57 1776.18,-3147.03"/>
-<text text-anchor="start" x="1745.18" y="-3135.83" font-family="Times,serif" font-size="14.00">0..N</text>
-<text text-anchor="start" x="1667.23" y="-3066.33" font-family="Times,serif" font-size="14.00">{0,1}</text>
+<path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M1667.23,-3089.38C1706.96,-3117.76 1749.29,-3147.99 1787.63,-3175.38"/>
+<text text-anchor="start" x="1756.63" y="-3164.18" font-family="Times,serif" font-size="14.00">0..N</text>
+<text text-anchor="start" x="1667.23" y="-3078.18" font-family="Times,serif" font-size="14.00">{0,1}</text>
 </g>
 <!-- dag_run_note -->
 <g id="node38" class="node">
@@ -2114,7 +2114,7 @@
 <text text-anchor="start" x="1847" y="-2911.3" font-family="Helvetica,sans-Serif" font-size="14.00"> [VARCHAR(128)]</text>
 </g>
 <!-- dag_run&#45;&#45;dag_run_note -->
-<g id="edge38" class="edge">
+<g id="edge39" class="edge">
 <title>dag_run&#45;&#45;dag_run_note</title>
 <path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M1667.23,-2978.5C1703.61,-2978.5 1742.15,-2978.5 1777.83,-2978.5"/>
 <text text-anchor="start" x="1767.83" y="-2967.3" font-family="Times,serif" font-size="14.00">1</text>
@@ -2222,9 +2222,9 @@
 <!-- backfill&#45;&#45;backfill_dag_run -->
 <g id="edge41" class="edge">
 <title>backfill&#45;&#45;backfill_dag_run</title>
-<path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M1265.18,-3433.29C1384.68,-3403.14 1544.45,-3361.09 1684,-3318.5 1714.02,-3309.34 1745.94,-3298.82 1776.25,-3288.45"/>
-<text text-anchor="start" x="1745.25" y="-3277.25" font-family="Times,serif" font-size="14.00">0..N</text>
-<text text-anchor="start" x="1265.18" y="-3422.09" font-family="Times,serif" font-size="14.00">1</text>
+<path fill="none" stroke="#7f7f7f" stroke-dasharray="5,2" d="M1265.1,-3432.21C1418.41,-3393.77 1635.37,-3339.37 1776.38,-3304.01"/>
+<text text-anchor="start" x="1745.38" y="-3292.81" font-family="Times,serif" font-size="14.00">0..N</text>
+<text text-anchor="start" x="1265.1" y="-3421.01" font-family="Times,serif" font-size="14.00">1</text>
 </g>
 <!-- alembic_version -->
 <g id="node46" class="node">
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/routes/public/import_error.py b/airflow-core/src/airflow/api_fastapi/core_api/routes/public/import_error.py
index feb475c91c3b0..4f223993bf4ea 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/routes/public/import_error.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/routes/public/import_error.py
@@ -22,7 +22,7 @@
 from typing import Annotated
 
 from fastapi import Depends, HTTPException, status
-from sqlalchemy import select
+from sqlalchemy import and_, select
 
 from airflow.api_fastapi.app import get_auth_manager
 from airflow.api_fastapi.auth.managers.models.batch_apis import IsAuthorizedDagRequest
@@ -163,8 +163,10 @@ def get_import_errors(
         select(ParseImportError, visible_files_cte.c.dag_id)
         .join(
             visible_files_cte,
-            ParseImportError.filename == visible_files_cte.c.relative_fileloc,
-            ParseImportError.bundle_name == visible_files_cte.c.bundle_name,
+            and_(
+                ParseImportError.filename == visible_files_cte.c.relative_fileloc,
+                # ParseImportError.bundle_name == visible_files_cte.c.bundle_name,  # apparently not needed
+            ),
         )
         .order_by(ParseImportError.id)
     )
diff --git a/airflow-core/src/airflow/cli/commands/rotate_fernet_key_command.py b/airflow-core/src/airflow/cli/commands/rotate_fernet_key_command.py
index b95e8f3752cc1..0d80cee446f99 100644
--- a/airflow-core/src/airflow/cli/commands/rotate_fernet_key_command.py
+++ b/airflow-core/src/airflow/cli/commands/rotate_fernet_key_command.py
@@ -71,10 +71,13 @@ def rotate_items_in_batches_v2(session, model_class, filter_condition=None, batc
 
     This function is taking advantage of yield_per available in SQLAlchemy 2.x.
     """
-    while True:
-        query = select(model_class)
-        if filter_condition is not None:
-            query = query.where(filter_condition)
+    query = select(model_class)
+    if filter_condition is not None:
+        query = query.where(filter_condition)
+
+    with session.no_autoflush:  # Temporarily disable autoflush while iterating to prevent deadlocks.
         items = session.scalars(query).yield_per(batch_size)
         for item in items:
             item.rotate_fernet_key()
+
+    # The dirty items will be flushed later by the session's transaction management.
diff --git a/airflow-core/src/airflow/migrations/versions/0036_3_0_0_add_name_field_to_dataset_model.py b/airflow-core/src/airflow/migrations/versions/0036_3_0_0_add_name_field_to_dataset_model.py
index c7112f91b3c5e..b1f925dbffca2 100644
--- a/airflow-core/src/airflow/migrations/versions/0036_3_0_0_add_name_field_to_dataset_model.py
+++ b/airflow-core/src/airflow/migrations/versions/0036_3_0_0_add_name_field_to_dataset_model.py
@@ -48,7 +48,7 @@
 
 _STRING_COLUMN_TYPE = sa.String(length=1500).with_variant(
     sa.String(length=1500, collation="latin1_general_cs"),
-    dialect_name="mysql",
+    "mysql",
 )
 
 
@@ -128,7 +128,7 @@ def downgrade():
             "uri",
             type_=sa.String(length=3000).with_variant(
                 sa.String(length=3000, collation="latin1_general_cs"),
-                dialect_name="mysql",
+                "mysql",
             ),
             nullable=False,
         )
diff --git a/airflow-core/src/airflow/migrations/versions/0038_3_0_0_add_asset_active.py b/airflow-core/src/airflow/migrations/versions/0038_3_0_0_add_asset_active.py
index c924e0157bd5e..2a992cab4126e 100644
--- a/airflow-core/src/airflow/migrations/versions/0038_3_0_0_add_asset_active.py
+++ b/airflow-core/src/airflow/migrations/versions/0038_3_0_0_add_asset_active.py
@@ -39,7 +39,7 @@
 
 _STRING_COLUMN_TYPE = sa.String(length=1500).with_variant(
     sa.String(length=1500, collation="latin1_general_cs"),
-    dialect_name="mysql",
+    "mysql",
 )
 
 
diff --git a/airflow-core/src/airflow/migrations/versions/0039_3_0_0_tweak_assetaliasmodel_to_match_asset.py b/airflow-core/src/airflow/migrations/versions/0039_3_0_0_tweak_assetaliasmodel_to_match_asset.py
index 7cc2423590440..d0067f1288255 100644
--- a/airflow-core/src/airflow/migrations/versions/0039_3_0_0_tweak_assetaliasmodel_to_match_asset.py
+++ b/airflow-core/src/airflow/migrations/versions/0039_3_0_0_tweak_assetaliasmodel_to_match_asset.py
@@ -51,7 +51,7 @@
 
 _STRING_COLUMN_TYPE = sa.String(length=1500).with_variant(
     sa.String(length=1500, collation="latin1_general_cs"),
-    dialect_name="mysql",
+    "mysql",
 )
 
 
@@ -77,7 +77,7 @@ def downgrade():
             "name",
             type_=sa.String(length=3000).with_variant(
                 sa.String(length=3000, collation="latin1_general_cs"),
-                dialect_name="mysql",
+                "mysql",
             ),
             nullable=False,
         )
diff --git a/airflow-core/src/airflow/models/base.py b/airflow-core/src/airflow/models/base.py
index c146f4619efb3..0548e08a8f605 100644
--- a/airflow-core/src/airflow/models/base.py
+++ b/airflow-core/src/airflow/models/base.py
@@ -23,6 +23,7 @@
 from sqlalchemy.orm import registry
 
 from airflow.configuration import conf
+from airflow.utils.sqlalchemy import is_sqlalchemy_v1
 
 SQL_ALCHEMY_SCHEMA = conf.get("database", "SQL_ALCHEMY_SCHEMA")
 
@@ -52,6 +53,10 @@ def _get_schema():
     Base = Any
 else:
     Base = mapper_registry.generate_base()
+    # TEMPORARY workaround to allow using unmapped (v1.4) models in SQLAlchemy 2.0. It is intended only to
+    # unblock the development of SQLA2 support.
+    if not is_sqlalchemy_v1():
+        Base.__allow_unmapped__ = True
 
 ID_LEN = 250
 
diff --git a/airflow-core/src/airflow/models/dag_version.py b/airflow-core/src/airflow/models/dag_version.py
index a1fa9cd3235fe..5c1068d6a9614 100644
--- a/airflow-core/src/airflow/models/dag_version.py
+++ b/airflow-core/src/airflow/models/dag_version.py
@@ -108,6 +108,7 @@ def write_dag(
         )
         log.debug("Writing DagVersion %s to the DB", dag_version)
         session.add(dag_version)
+        session.commit()
         log.debug("DagVersion %s written to the DB", dag_version)
         return dag_version
 
diff --git a/airflow-core/src/airflow/models/dagrun.py b/airflow-core/src/airflow/models/dagrun.py
index 1d73055a08668..b6294aa3b0d17 100644
--- a/airflow-core/src/airflow/models/dagrun.py
+++ b/airflow-core/src/airflow/models/dagrun.py
@@ -387,16 +387,14 @@ def duration(cls, session: Session = NEW_SESSION) -> Case:
         dialect_name = session.bind.dialect.name
         if dialect_name == "mysql":
             return func.timestampdiff(text("SECOND"), cls.start_date, cls.end_date)
-        return case(
-            [
-                (
-                    (cls.end_date != None) & (cls.start_date != None),  # noqa: E711
-                    func.extract("epoch", cls.end_date - cls.start_date),
-                )
-            ],
-            else_=None,
+
+        when_condition = (
+            (cls.end_date != None) & (cls.start_date != None),  # noqa: E711
+            func.extract("epoch", cls.end_date - cls.start_date),
         )
 
+        return case(when_condition, else_=None)
+
     @provide_session
     def check_version_id_exists_in_dr(self, dag_version_id: UUIDType, session: Session = NEW_SESSION):
         select_stmt = (
diff --git a/airflow-core/src/airflow/utils/sqlalchemy.py b/airflow-core/src/airflow/utils/sqlalchemy.py
index 8311547e7e998..a75edafebb567 100644
--- a/airflow-core/src/airflow/utils/sqlalchemy.py
+++ b/airflow-core/src/airflow/utils/sqlalchemy.py
@@ -36,6 +36,8 @@
 from airflow.utils.timezone import make_naive, utc
 
 if TYPE_CHECKING:
+    from collections.abc import Iterable
+
     from kubernetes.client.models.v1_pod import V1Pod
     from sqlalchemy.exc import OperationalError
     from sqlalchemy.orm import Query, Session
@@ -448,3 +450,8 @@ def get_orm_mapper():
 
 def is_sqlalchemy_v1() -> bool:
     return version.parse(metadata.version("sqlalchemy")).major == 1
+
+
+def make_dialect_kwarg(dialect: str) -> dict[str, str | Iterable[str]]:
+    """Create an SQLAlchemy-version-aware dialect keyword argument."""
+    return {"dialect_name": dialect} if is_sqlalchemy_v1() else {"dialect_names": (dialect,)}
diff --git a/airflow-core/tests/unit/always/test_connection.py b/airflow-core/tests/unit/always/test_connection.py
index 1a329dfef5ce4..2df03cd94dc2b 100644
--- a/airflow-core/tests/unit/always/test_connection.py
+++ b/airflow-core/tests/unit/always/test_connection.py
@@ -32,6 +32,8 @@
 from airflow.hooks.base import BaseHook
 from airflow.models import Connection, crypto
 
+from tests_common.test_utils.version_compat import SQLALCHEMY_V_1_4
+
 sqlite = pytest.importorskip("airflow.providers.sqlite.hooks.sqlite")
 
 from tests_common.test_utils.config import conf_vars
@@ -683,8 +685,12 @@ def test_dbapi_get_sqlalchemy_engine(self):
         conn = BaseHook.get_connection(conn_id="test_uri")
         hook = conn.get_hook()
         engine = hook.get_sqlalchemy_engine()
+        expected = "postgresql://username:password@ec2.compute.com:5432/the_database"
         assert isinstance(engine, sqlalchemy.engine.Engine)
-        assert str(engine.url) == "postgresql://username:password@ec2.compute.com:5432/the_database"
+        if SQLALCHEMY_V_1_4:
+            assert str(engine.url) == expected
+        else:
+            assert engine.url.render_as_string(hide_password=False) == expected
 
     @mock.patch.dict(
         "os.environ",
diff --git a/airflow-core/tests/unit/api_fastapi/common/test_exceptions.py b/airflow-core/tests/unit/api_fastapi/common/test_exceptions.py
index b5136310611e0..18889737e3593 100644
--- a/airflow-core/tests/unit/api_fastapi/common/test_exceptions.py
+++ b/airflow-core/tests/unit/api_fastapi/common/test_exceptions.py
@@ -30,6 +30,7 @@
 
 from tests_common.test_utils.config import conf_vars
 from tests_common.test_utils.db import clear_db_connections, clear_db_dags, clear_db_pools, clear_db_runs
+from tests_common.test_utils.version_compat import SQLALCHEMY_V_1_4
 
 pytestmark = pytest.mark.db_test
 
@@ -182,11 +183,16 @@ def test_handle_single_column_unique_constraint_error(
         expected_exception,
     ) -> None:
         # Take Pool and Variable tables as test cases
+        # Note: SQLA2 uses a more optimized bulk insert strategy when multiple objects are added to the
+        #   session. Instead of individual INSERT statements, a single INSERT with the SELECT FROM VALUES
+        #   pattern is used.
         if table == "Pool":
             session.add(Pool(pool=TEST_POOL, slots=1, description="test pool", include_deferred=False))
+            session.flush()  # Avoid SQLA2.0 bulk insert optimization
             session.add(Pool(pool=TEST_POOL, slots=1, description="test pool", include_deferred=False))
         elif table == "Variable":
             session.add(Variable(key=TEST_VARIABLE_KEY, val="test_val"))
+            session.flush()
             session.add(Variable(key=TEST_VARIABLE_KEY, val="test_val"))
 
         with pytest.raises(IntegrityError) as exeinfo_integrity_error:
@@ -264,4 +270,15 @@ def test_handle_multiple_columns_unique_constraint_error(
             self.unique_constraint_error_handler.exception_handler(None, exeinfo_integrity_error.value)  # type: ignore
 
         assert exeinfo_response_error.value.status_code == expected_exception.status_code
-        assert exeinfo_response_error.value.detail == expected_exception.detail
+        if SQLALCHEMY_V_1_4:
+            assert exeinfo_response_error.value.detail == expected_exception.detail
+        else:
+            # The SQL statement is an implementation detail, so we match on the statement pattern (contains
+            # the table name and is an INSERT) instead of insisting on an exact match.
+            response_detail = exeinfo_response_error.value.detail
+            expected_detail = expected_exception.detail
+            actual_statement = response_detail.pop("statement", None)  # type: ignore[attr-defined]
+            expected_detail.pop("statement", None)
+
+            assert response_detail == expected_detail
+            assert "INSERT INTO dag_run" in actual_statement
diff --git a/airflow-core/tests/unit/core/test_sqlalchemy_config.py b/airflow-core/tests/unit/core/test_sqlalchemy_config.py
index b8cf45395e239..d5abedfbbd765 100644
--- a/airflow-core/tests/unit/core/test_sqlalchemy_config.py
+++ b/airflow-core/tests/unit/core/test_sqlalchemy_config.py
@@ -26,6 +26,7 @@
 from airflow.exceptions import AirflowConfigException
 
 from tests_common.test_utils.config import conf_vars
+from tests_common.test_utils.version_compat import SQLALCHEMY_V_1_4
 
 SQL_ALCHEMY_CONNECT_ARGS = {"test": 43503, "dict": {"is": 1, "supported": "too"}}
 
@@ -54,12 +55,10 @@ def test_configure_orm_with_default_values(
         self, mock_create_engine, mock_sessionmaker, mock_scoped_session, mock_setup_event_handlers
     ):
         settings.configure_orm()
-        mock_create_engine.assert_called_once_with(
-            settings.SQL_ALCHEMY_CONN,
+        expected_kwargs = dict(
             connect_args={}
             if not settings.SQL_ALCHEMY_CONN.startswith("sqlite")
             else {"check_same_thread": False},
-            encoding="utf-8",
             max_overflow=10,
             pool_pre_ping=True,
             pool_recycle=1800,
@@ -67,6 +66,12 @@ def test_configure_orm_with_default_values(
             isolation_level="READ COMMITTED",
             future=True,
         )
+        if SQLALCHEMY_V_1_4:
+            expected_kwargs["encoding"] = "utf-8"
+        mock_create_engine.assert_called_once_with(
+            settings.SQL_ALCHEMY_CONN,
+            **expected_kwargs,
+        )
 
     @patch("airflow.settings.setup_event_handlers")
     @patch("airflow.settings.scoped_session")
@@ -88,14 +93,18 @@ def test_sql_alchemy_connect_args(
             engine_args = {"arg": 1}
             if settings.SQL_ALCHEMY_CONN.startswith("mysql"):
                 engine_args["isolation_level"] = "READ COMMITTED"
-            mock_create_engine.assert_called_once_with(
-                settings.SQL_ALCHEMY_CONN,
+            expected_kwargs = dict(
                 connect_args=SQL_ALCHEMY_CONNECT_ARGS,
                 poolclass=NullPool,
-                encoding="utf-8",
                 future=True,
                 **engine_args,
             )
+            if SQLALCHEMY_V_1_4:
+                expected_kwargs["encoding"] = "utf-8"
+            mock_create_engine.assert_called_once_with(
+                settings.SQL_ALCHEMY_CONN,
+                **expected_kwargs,
+            )
 
     @patch("airflow.settings.setup_event_handlers")
     @patch("airflow.settings.scoped_session")
diff --git a/airflow-core/tests/unit/dag_processing/test_collection.py b/airflow-core/tests/unit/dag_processing/test_collection.py
index dfaa0b5ec26be..5254dfc6ec973 100644
--- a/airflow-core/tests/unit/dag_processing/test_collection.py
+++ b/airflow-core/tests/unit/dag_processing/test_collection.py
@@ -455,6 +455,7 @@ def test_serialized_dags_are_written_to_db_on_sync(self, testing_dag_bundle, ses
 
     @patch.object(ParseImportError, "full_file_path")
     @patch.object(SerializedDagModel, "write_dag")
+    @pytest.mark.usefixtures("clean_db")
     def test_serialized_dag_errors_are_import_errors(
         self, mock_serialize, mock_full_path, caplog, session, dag_import_error_listener, testing_dag_bundle
     ):
@@ -492,6 +493,7 @@ def test_serialized_dag_errors_are_import_errors(
         assert dag_import_error_listener.new["abc.py"] == import_error.stacktrace
 
     @patch.object(ParseImportError, "full_file_path")
+    @pytest.mark.usefixtures("clean_db")
     def test_new_import_error_replaces_old(
         self, mock_full_file_path, session, dag_import_error_listener, testing_dag_bundle
     ):
@@ -536,6 +538,7 @@ def test_new_import_error_replaces_old(
         assert len(dag_import_error_listener.existing) == 1
         assert dag_import_error_listener.existing["abc.py"] == prev_error.stacktrace
 
+    @pytest.mark.usefixtures("clean_db")
     def test_remove_error_clears_import_error(self, testing_dag_bundle, session):
         # Pre-condition: there is an import error for the dag file
         bundle_name = "testing"
@@ -577,6 +580,7 @@ def test_remove_error_clears_import_error(self, testing_dag_bundle, session):
 
         assert import_errors == {("def.py", bundle_name)}
 
+    @pytest.mark.usefixtures("clean_db")
     def test_remove_error_updates_loaded_dag_model(self, testing_dag_bundle, session):
         bundle_name = "testing"
         filename = "abc.py"
diff --git a/airflow-core/tests/unit/jobs/test_scheduler_job.py b/airflow-core/tests/unit/jobs/test_scheduler_job.py
index e79818a1ab049..2d11df5dfac2b 100644
--- a/airflow-core/tests/unit/jobs/test_scheduler_job.py
+++ b/airflow-core/tests/unit/jobs/test_scheduler_job.py
@@ -96,6 +96,7 @@
 )
 from tests_common.test_utils.mock_executor import MockExecutor
 from tests_common.test_utils.mock_operators import CustomOperator
+from tests_common.test_utils.version_compat import SQLALCHEMY_V_1_4, SQLALCHEMY_V_2_0
 from unit.listeners import dag_listener
 from unit.listeners.test_listeners import get_listener_manager
 from unit.models import TEST_DAGS_FOLDER
@@ -3354,7 +3355,7 @@ def test_verify_integrity_if_dag_changed(self, dag_maker):
 
         # Now let's say the DAG got updated (new task got added)
         BashOperator(task_id="bash_task_1", dag=dag, bash_command="echo hi")
-        SerializedDagModel.write_dag(dag=dag, bundle_name="testing")
+        SerializedDagModel.write_dag(dag=dag, bundle_name="testing", session=session)
 
         dag_version_2 = DagVersion.get_latest_version(dr.dag_id, session=session)
         assert dag_version_2 != dag_version_1
@@ -3368,15 +3369,24 @@ def test_verify_integrity_if_dag_changed(self, dag_maker):
         assert dr.dag_versions[-1].id == dag_version_2.id
         assert len(self.job_runner.scheduler_dag_bag.get_dag(dr, session).tasks) == 2
 
-        tis_count = (
-            session.query(func.count(TaskInstance.task_id))
-            .filter(
-                TaskInstance.dag_id == dr.dag_id,
-                TaskInstance.logical_date == dr.logical_date,
-                TaskInstance.state == State.SCHEDULED,
+        if SQLALCHEMY_V_1_4:
+            tis_count = (
+                session.query(func.count(TaskInstance.task_id))
+                .filter(
+                    TaskInstance.dag_id == dr.dag_id,
+                    TaskInstance.logical_date == dr.logical_date,
+                    TaskInstance.state == State.SCHEDULED,
+                )
+                .scalar()
+            )
+        if SQLALCHEMY_V_2_0:
+            tis_count = session.scalar(
+                select(func.count(TaskInstance.task_id)).where(
+                    TaskInstance.dag_id == dr.dag_id,
+                    TaskInstance.logical_date == dr.logical_date,
+                    TaskInstance.state == State.SCHEDULED,
+                )
             )
-            .scalar()
-        )
         assert tis_count == 2
 
         latest_dag_version = DagVersion.get_latest_version(dr.dag_id, session=session)
diff --git a/devel-common/src/tests_common/test_utils/version_compat.py b/devel-common/src/tests_common/test_utils/version_compat.py
index 7957dd9d80cfa..2be7fb788e0e7 100644
--- a/devel-common/src/tests_common/test_utils/version_compat.py
+++ b/devel-common/src/tests_common/test_utils/version_compat.py
@@ -35,3 +35,15 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 AIRFLOW_V_3_0_1 = get_base_airflow_version_tuple() == (3, 0, 1)
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
 AIRFLOW_V_3_1_PLUS = get_base_airflow_version_tuple() >= (3, 1, 0)
+
+
+def get_sqlalchemy_version_tuple() -> tuple[int, int, int]:
+    import sqlalchemy
+    from packaging.version import Version
+
+    sqlalchemy_version = Version(sqlalchemy.__version__)
+    return sqlalchemy_version.major, sqlalchemy_version.minor, sqlalchemy_version.micro
+
+
+SQLALCHEMY_V_1_4 = (1, 4, 0) <= get_sqlalchemy_version_tuple() < (2, 0, 0)
+SQLALCHEMY_V_2_0 = (2, 0, 0) <= get_sqlalchemy_version_tuple() < (2, 1, 0)

From ab347eda82d3c06e3629af1451f9be275de0b0d5 Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung <uranusjr@gmail.com>
Date: Mon, 30 Jun 2025 18:31:39 +0800
Subject: [PATCH 323/381] One more redef needing ignore (#52525)

---
 .../standard/tests/unit/standard/decorators/test_python.py      | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/providers/standard/tests/unit/standard/decorators/test_python.py b/providers/standard/tests/unit/standard/decorators/test_python.py
index 578817c5a2be8..6e74a4e16a3c6 100644
--- a/providers/standard/tests/unit/standard/decorators/test_python.py
+++ b/providers/standard/tests/unit/standard/decorators/test_python.py
@@ -41,7 +41,7 @@
 else:
     from airflow.decorators import setup, task as task_decorator, teardown
     from airflow.decorators.base import DecoratedMappedOperator  # type: ignore[no-redef]
-    from airflow.models.baseoperator import BaseOperator
+    from airflow.models.baseoperator import BaseOperator  # type: ignore[no-redef]
     from airflow.models.dag import DAG  # type: ignore[assignment]
     from airflow.models.expandinput import DictOfListsExpandInput
     from airflow.models.mappedoperator import MappedOperator

From 9553a36d1eeb7661246c511e9bfe42da67656982 Mon Sep 17 00:00:00 2001
From: Kevin Yang <85313829+sjyangkevin@users.noreply.github.com>
Date: Mon, 30 Jun 2025 06:52:46 -0400
Subject: [PATCH 324/381] Provider Migration: Update Cohere for Airflow 3.0
 compatibility (#52379)

---
 .../providers/cohere/operators/embedding.py   |  8 +---
 .../providers/cohere/version_compat.py        | 43 +++++++++++++++++++
 2 files changed, 45 insertions(+), 6 deletions(-)
 create mode 100644 providers/cohere/src/airflow/providers/cohere/version_compat.py

diff --git a/providers/cohere/src/airflow/providers/cohere/operators/embedding.py b/providers/cohere/src/airflow/providers/cohere/operators/embedding.py
index a196ca624f5a3..40895b48cbde3 100644
--- a/providers/cohere/src/airflow/providers/cohere/operators/embedding.py
+++ b/providers/cohere/src/airflow/providers/cohere/operators/embedding.py
@@ -21,17 +21,13 @@
 from functools import cached_property
 from typing import TYPE_CHECKING, Any
 
-from airflow.models import BaseOperator
 from airflow.providers.cohere.hooks.cohere import CohereHook
+from airflow.providers.cohere.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from cohere.core.request_options import RequestOptions
 
-    try:
-        from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+    from airflow.providers.cohere.version_compat import Context
 
 
 class CohereEmbeddingOperator(BaseOperator):
diff --git a/providers/cohere/src/airflow/providers/cohere/version_compat.py b/providers/cohere/src/airflow/providers/cohere/version_compat.py
new file mode 100644
index 0000000000000..c267288006129
--- /dev/null
+++ b/providers/cohere/src/airflow/providers/cohere/version_compat.py
@@ -0,0 +1,43 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+    from airflow.sdk.definitions.context import Context
+else:
+    from airflow.models import BaseOperator
+    from airflow.utils.context import Context
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+    "Context",
+]

From 43d3fb5ac09ce6b0726af3faf2be4e197d2c40ec Mon Sep 17 00:00:00 2001
From: Kacper Muda <mudakacper@gmail.com>
Date: Mon, 30 Jun 2025 13:17:55 +0200
Subject: [PATCH 325/381] feat: Add explicit support for SnowflakeSqlApiHook to
 Ol helper (#52161)

---
 .../providers/snowflake/hooks/snowflake.py    |  32 +-
 .../providers/snowflake/utils/openlineage.py  |  99 ++-
 .../unit/snowflake/hooks/test_snowflake.py    |  39 +-
 .../unit/snowflake/utils/test_openlineage.py  | 708 +++++++++++++++++-
 4 files changed, 810 insertions(+), 68 deletions(-)

diff --git a/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake.py b/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake.py
index e52fa4df0fc77..0c4719bef93e2 100644
--- a/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake.py
+++ b/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake.py
@@ -617,10 +617,9 @@ def _get_openlineage_authority(self, _) -> str | None:
 
     def get_openlineage_database_specific_lineage(self, task_instance) -> OperatorLineage | None:
         """
-        Generate OpenLineage metadata for a Snowflake task instance based on executed query IDs.
+        Emit separate OpenLineage events for each Snowflake query, based on executed query IDs.
 
-        If a single query ID is present, attach an `ExternalQueryRunFacet` to the lineage metadata.
-        If multiple query IDs are present, emits separate OpenLineage events for each query.
+        If a single query ID is present, also add an `ExternalQueryRunFacet` to the returned lineage metadata.
 
         Note that `get_openlineage_database_specific_lineage` is usually called after task's execution,
         so if multiple query IDs are present, both START and COMPLETE event for each query will be emitted
@@ -641,13 +640,22 @@ def get_openlineage_database_specific_lineage(self, task_instance) -> OperatorLi
         )
 
         if not self.query_ids:
-            self.log.debug("openlineage: no snowflake query ids found.")
+            self.log.info("OpenLineage could not find snowflake query ids.")
             return None
 
         self.log.debug("openlineage: getting connection to get database info")
         connection = self.get_connection(self.get_conn_id())
         namespace = SQLParser.create_namespace(self.get_openlineage_database_info(connection))
 
+        self.log.info("Separate OpenLineage events will be emitted for each query_id.")
+        emit_openlineage_events_for_snowflake_queries(
+            task_instance=task_instance,
+            hook=self,
+            query_ids=self.query_ids,
+            query_for_extra_metadata=True,
+            query_source_namespace=namespace,
+        )
+
         if len(self.query_ids) == 1:
             self.log.debug("Attaching ExternalQueryRunFacet with single query_id to OpenLineage event.")
             return OperatorLineage(
@@ -658,20 +666,4 @@ def get_openlineage_database_specific_lineage(self, task_instance) -> OperatorLi
                 }
             )
 
-        self.log.info("Multiple query_ids found. Separate OpenLineage event will be emitted for each query.")
-        try:
-            from airflow.providers.openlineage.utils.utils import should_use_external_connection
-
-            use_external_connection = should_use_external_connection(self)
-        except ImportError:
-            # OpenLineage provider release < 1.8.0 - we always use connection
-            use_external_connection = True
-
-        emit_openlineage_events_for_snowflake_queries(
-            query_ids=self.query_ids,
-            query_source_namespace=namespace,
-            task_instance=task_instance,
-            hook=self if use_external_connection else None,
-        )
-
         return None
diff --git a/providers/snowflake/src/airflow/providers/snowflake/utils/openlineage.py b/providers/snowflake/src/airflow/providers/snowflake/utils/openlineage.py
index 0e3acf5d2542a..aa954c0444eac 100644
--- a/providers/snowflake/src/airflow/providers/snowflake/utils/openlineage.py
+++ b/providers/snowflake/src/airflow/providers/snowflake/utils/openlineage.py
@@ -19,7 +19,7 @@
 import datetime
 import logging
 from contextlib import closing
-from typing import TYPE_CHECKING
+from typing import TYPE_CHECKING, Any
 from urllib.parse import quote, urlparse, urlunparse
 
 from airflow.providers.common.compat.openlineage.check import require_openlineage_version
@@ -31,6 +31,7 @@
     from openlineage.client.facet_v2 import JobFacet
 
     from airflow.providers.snowflake.hooks.snowflake import SnowflakeHook
+    from airflow.providers.snowflake.hooks.snowflake_sql_api import SnowflakeSqlApiHook
 
 
 log = logging.getLogger(__name__)
@@ -204,9 +205,29 @@ def _run_single_query_with_hook(hook: SnowflakeHook, sql: str) -> list[dict]:
     return result
 
 
+def _run_single_query_with_api_hook(hook: SnowflakeSqlApiHook, sql: str) -> list[dict[str, Any]]:
+    """Execute a query against Snowflake API without adding extra logging or instrumentation."""
+    # `hook.execute_query` resets the query_ids, so we need to save them and re-assign after we're done
+    query_ids_before_execution = list(hook.query_ids)
+    try:
+        _query_ids = hook.execute_query(sql=sql, statement_count=0)
+        hook.wait_for_query(query_id=_query_ids[0], raise_error=True, poll_interval=1, timeout=3)
+        return hook.get_result_from_successful_sql_api_query(query_id=_query_ids[0])
+    finally:
+        hook.query_ids = query_ids_before_execution
+
+
+def _process_data_from_api(data: list[dict[str, Any]]) -> list[dict[str, Any]]:
+    """Convert 'START_TIME' and 'END_TIME' fields to UTC datetime objects."""
+    for row in data:
+        for key in ("START_TIME", "END_TIME"):
+            row[key] = datetime.datetime.fromtimestamp(float(row[key]), timezone.utc)
+    return data
+
+
 def _get_queries_details_from_snowflake(
-    hook: SnowflakeHook, query_ids: list[str]
-) -> dict[str, dict[str, str]]:
+    hook: SnowflakeHook | SnowflakeSqlApiHook, query_ids: list[str]
+) -> dict[str, dict[str, Any]]:
     """Retrieve execution details for specific queries from Snowflake's query history."""
     if not query_ids:
         return {}
@@ -221,7 +242,16 @@ def _get_queries_details_from_snowflake(
         f";"
     )
 
-    result = _run_single_query_with_hook(hook=hook, sql=query)
+    try:
+        # Can't import the SnowflakeSqlApiHook class and do proper isinstance check - circular imports
+        if hook.__class__.__name__ == "SnowflakeSqlApiHook":
+            result = _run_single_query_with_api_hook(hook=hook, sql=query)  # type: ignore[arg-type]
+            result = _process_data_from_api(data=result)
+        else:
+            result = _run_single_query_with_hook(hook=hook, sql=query)
+    except Exception as e:
+        log.warning("OpenLineage could not retrieve extra metadata from Snowflake. Error encountered: %s", e)
+        result = []
 
     return {row["QUERY_ID"]: row for row in result} if result else {}
 
@@ -259,17 +289,18 @@ def _create_snowflake_event_pair(
 
 @require_openlineage_version(provider_min_version="2.3.0")
 def emit_openlineage_events_for_snowflake_queries(
-    query_ids: list[str],
-    query_source_namespace: str,
     task_instance,
-    hook: SnowflakeHook | None = None,
+    hook: SnowflakeHook | SnowflakeSqlApiHook | None = None,
+    query_ids: list[str] | None = None,
+    query_source_namespace: str | None = None,
+    query_for_extra_metadata: bool = False,
     additional_run_facets: dict | None = None,
     additional_job_facets: dict | None = None,
 ) -> None:
     """
     Emit OpenLineage events for executed Snowflake queries.
 
-    Metadata retrieval from Snowflake is attempted only if a `SnowflakeHook` is provided.
+    Metadata retrieval from Snowflake is attempted only if `get_extra_metadata` is True and hook is provided.
     If metadata is available, execution details such as start time, end time, execution status,
     error messages, and SQL text are included in the events. If no metadata is found, the function
     defaults to using the Airflow task instance's state and the current timestamp.
@@ -279,10 +310,16 @@ def emit_openlineage_events_for_snowflake_queries(
     will correspond to actual query execution times.
 
     Args:
-        query_ids: A list of Snowflake query IDs to emit events for.
-        query_source_namespace: The namespace to be included in ExternalQueryRunFacet.
         task_instance: The Airflow task instance that run these queries.
-        hook: A SnowflakeHook instance used to retrieve query metadata if available.
+        hook: A supported Snowflake hook instance used to retrieve query metadata if available.
+        If omitted, `query_ids` and `query_source_namespace` must be provided explicitly and
+        `query_for_extra_metadata` must be `False`.
+        query_ids: A list of Snowflake query IDs to emit events for, can only be None if `hook` is provided
+        and `hook.query_ids` are present.
+        query_source_namespace: The namespace to be included in ExternalQueryRunFacet,
+        can be `None` only if hook is provided.
+        query_for_extra_metadata: Whether to query Snowflake for additional metadata about queries.
+        Must be `False` if `hook` is not provided.
         additional_run_facets: Additional run facets to include in OpenLineage events.
         additional_job_facets: Additional job facets to include in OpenLineage events.
     """
@@ -297,23 +334,49 @@ def emit_openlineage_events_for_snowflake_queries(
     from airflow.providers.openlineage.conf import namespace
     from airflow.providers.openlineage.plugins.listener import get_openlineage_listener
 
-    if not query_ids:
-        log.debug("No Snowflake query IDs provided; skipping OpenLineage event emission.")
-        return
-
-    query_ids = [q for q in query_ids]  # Make a copy to make sure it does not change
+    log.info("OpenLineage will emit events for Snowflake queries.")
 
     if hook:
+        if not query_ids:
+            log.debug("No Snowflake query IDs provided; Checking `hook.query_ids` property.")
+            query_ids = getattr(hook, "query_ids", [])
+            if not query_ids:
+                raise ValueError("No Snowflake query IDs provided and `hook.query_ids` are not present.")
+
+        if not query_source_namespace:
+            log.debug("No Snowflake query namespace provided; Creating one from scratch.")
+            from airflow.providers.openlineage.sqlparser import SQLParser
+
+            connection = hook.get_connection(hook.get_conn_id())
+            query_source_namespace = SQLParser.create_namespace(
+                hook.get_openlineage_database_info(connection)
+            )
+    else:
+        if not query_ids:
+            raise ValueError("If 'hook' is not provided, 'query_ids' must be set.")
+        if not query_source_namespace:
+            raise ValueError("If 'hook' is not provided, 'query_source_namespace' must be set.")
+        if query_for_extra_metadata:
+            raise ValueError("If 'hook' is not provided, 'query_for_extra_metadata' must be False.")
+
+    query_ids = [q for q in query_ids]  # Make a copy to make sure we do not change hook's attribute
+
+    if query_for_extra_metadata and hook:
         log.debug("Retrieving metadata for %s queries from Snowflake.", len(query_ids))
         snowflake_metadata = _get_queries_details_from_snowflake(hook, query_ids)
     else:
-        log.debug("SnowflakeHook not provided. No extra metadata fill be fetched from Snowflake.")
+        log.debug("`query_for_extra_metadata` is False. No extra metadata fill be fetched from Snowflake.")
         snowflake_metadata = {}
 
     # If real metadata is unavailable, we send events with eventTime=now
     default_event_time = timezone.utcnow()
     # If no query metadata is provided, we use task_instance's state when checking for success
-    default_state = task_instance.state.value if hasattr(task_instance, "state") else ""
+    # ti.state has no `value` attr (AF2) when task it's still running, in AF3 we get 'running', in that case
+    # assuming it's user call and query succeeded, so we replace it with success.
+    default_state = (
+        getattr(task_instance.state, "value", "running") if hasattr(task_instance, "state") else ""
+    )
+    default_state = "success" if default_state == "running" else default_state
 
     common_run_facets = {"parent": _get_parent_run_facet(task_instance)}
     common_job_facets: dict[str, JobFacet] = {
diff --git a/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake.py b/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake.py
index e28d0bca28e7d..fe21b3cad0871 100644
--- a/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake.py
+++ b/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake.py
@@ -905,14 +905,17 @@ def test_get_openlineage_default_schema_with_schema_set(self, mock_get_first):
             assert hook_with_schema_param.get_openlineage_default_schema() == "my_schema"
             mock_get_first.assert_not_called()
 
-    def test_get_openlineage_database_specific_lineage_with_no_query_ids(self):
+    @mock.patch("airflow.providers.snowflake.utils.openlineage.emit_openlineage_events_for_snowflake_queries")
+    def test_get_openlineage_database_specific_lineage_with_no_query_ids(self, mock_emit):
         hook = SnowflakeHook(snowflake_conn_id="test_conn")
         assert hook.query_ids == []
 
         result = hook.get_openlineage_database_specific_lineage(None)
+        mock_emit.assert_not_called()
         assert result is None
 
-    def test_get_openlineage_database_specific_lineage_with_single_query_id(self):
+    @mock.patch("airflow.providers.snowflake.utils.openlineage.emit_openlineage_events_for_snowflake_queries")
+    def test_get_openlineage_database_specific_lineage_with_single_query_id(self, mock_emit):
         from airflow.providers.common.compat.openlineage.facet import ExternalQueryRunFacet
         from airflow.providers.openlineage.extractors import OperatorLineage
 
@@ -921,21 +924,26 @@ def test_get_openlineage_database_specific_lineage_with_single_query_id(self):
         hook.get_connection = mock.MagicMock()
         hook.get_openlineage_database_info = lambda x: mock.MagicMock(authority="auth", scheme="scheme")
 
-        result = hook.get_openlineage_database_specific_lineage(None)
+        ti = mock.MagicMock()
+
+        result = hook.get_openlineage_database_specific_lineage(ti)
+        mock_emit.assert_called_once_with(
+            **{
+                "hook": hook,
+                "query_ids": ["query1"],
+                "query_source_namespace": "scheme://auth",
+                "task_instance": ti,
+                "query_for_extra_metadata": True,
+            }
+        )
         assert result == OperatorLineage(
             run_facets={
                 "externalQuery": ExternalQueryRunFacet(externalQueryId="query1", source="scheme://auth")
             }
         )
 
-    @pytest.mark.parametrize("use_external_connection", [True, False])
-    @mock.patch("airflow.providers.openlineage.utils.utils.should_use_external_connection")
     @mock.patch("airflow.providers.snowflake.utils.openlineage.emit_openlineage_events_for_snowflake_queries")
-    def test_get_openlineage_database_specific_lineage_with_multiple_query_ids(
-        self, mock_emit, mock_use_conn, use_external_connection
-    ):
-        mock_use_conn.return_value = use_external_connection
-
+    def test_get_openlineage_database_specific_lineage_with_multiple_query_ids(self, mock_emit):
         hook = SnowflakeHook(snowflake_conn_id="test_conn")
         hook.query_ids = ["query1", "query2"]
         hook.get_connection = mock.MagicMock()
@@ -944,23 +952,19 @@ def test_get_openlineage_database_specific_lineage_with_multiple_query_ids(
         ti = mock.MagicMock()
 
         result = hook.get_openlineage_database_specific_lineage(ti)
-        mock_use_conn.assert_called_once()
         mock_emit.assert_called_once_with(
             **{
-                "hook": hook if use_external_connection else None,
+                "hook": hook,
                 "query_ids": ["query1", "query2"],
                 "query_source_namespace": "scheme://auth",
                 "task_instance": ti,
+                "query_for_extra_metadata": True,
             }
         )
         assert result is None
 
-    # emit_openlineage_events_for_snowflake_queries requires OL provider 2.0.0
     @mock.patch("importlib.metadata.version", return_value="1.99.0")
-    @mock.patch("airflow.providers.openlineage.utils.utils.should_use_external_connection")
-    def test_get_openlineage_database_specific_lineage_with_old_openlineage_provider(
-        self, mock_use_conn, mock_version
-    ):
+    def test_get_openlineage_database_specific_lineage_with_old_openlineage_provider(self, mock_version):
         hook = SnowflakeHook(snowflake_conn_id="test_conn")
         hook.query_ids = ["query1", "query2"]
         hook.get_connection = mock.MagicMock()
@@ -972,7 +976,6 @@ def test_get_openlineage_database_specific_lineage_with_old_openlineage_provider
         )
         with pytest.raises(AirflowOptionalProviderFeatureException, match=expected_err):
             hook.get_openlineage_database_specific_lineage(mock.MagicMock())
-        mock_use_conn.assert_called_once()
 
     @pytest.mark.skipif(sys.version_info >= (3, 12), reason="Snowpark Python doesn't support Python 3.12 yet")
     @mock.patch("snowflake.snowpark.Session.builder")
diff --git a/providers/snowflake/tests/unit/snowflake/utils/test_openlineage.py b/providers/snowflake/tests/unit/snowflake/utils/test_openlineage.py
index bba8d317032c2..ec83cabc4fbb5 100644
--- a/providers/snowflake/tests/unit/snowflake/utils/test_openlineage.py
+++ b/providers/snowflake/tests/unit/snowflake/utils/test_openlineage.py
@@ -17,6 +17,7 @@
 from __future__ import annotations
 
 import copy
+import datetime
 from unittest import mock
 
 import pytest
@@ -31,11 +32,14 @@
 )
 from airflow.providers.openlineage.conf import namespace
 from airflow.providers.snowflake.hooks.snowflake import SnowflakeHook
+from airflow.providers.snowflake.hooks.snowflake_sql_api import SnowflakeSqlApiHook
 from airflow.providers.snowflake.utils.openlineage import (
     _create_snowflake_event_pair,
     _get_ol_run_id,
     _get_parent_run_facet,
     _get_queries_details_from_snowflake,
+    _process_data_from_api,
+    _run_single_query_with_api_hook,
     _run_single_query_with_hook,
     emit_openlineage_events_for_snowflake_queries,
     fix_account_name,
@@ -164,6 +168,47 @@ def test_get_parent_run_facet():
     assert result.job.name == "dag_id.task_id"
 
 
+def test_process_data_from_api():
+    data = [
+        {
+            "QUERY_ID": "ABC",
+            "EXECUTION_STATUS": "SUCCESS",
+            "START_TIME": "1750245171.326000",
+            "END_TIME": 1750245171.387000,
+            "QUERY_TEXT": "SELECT * FROM test_table;",
+            "ERROR_CODE": None,
+            "ERROR_MESSAGE": None,
+        },
+        {
+            "START_TIME": 1750245171.326000,
+            "END_TIME": "1750245171.387000",
+        },
+    ]
+    expected_details = [
+        {
+            "QUERY_ID": "ABC",
+            "EXECUTION_STATUS": "SUCCESS",
+            "START_TIME": datetime.datetime(2025, 6, 18, 11, 12, 51, 326000, tzinfo=datetime.timezone.utc),
+            "END_TIME": datetime.datetime(2025, 6, 18, 11, 12, 51, 387000, tzinfo=datetime.timezone.utc),
+            "QUERY_TEXT": "SELECT * FROM test_table;",
+            "ERROR_CODE": None,
+            "ERROR_MESSAGE": None,
+        },
+        {
+            "START_TIME": datetime.datetime(2025, 6, 18, 11, 12, 51, 326000, tzinfo=datetime.timezone.utc),
+            "END_TIME": datetime.datetime(2025, 6, 18, 11, 12, 51, 387000, tzinfo=datetime.timezone.utc),
+        },
+    ]
+    result = _process_data_from_api(data=data)
+    assert len(result) == 2
+    assert result == expected_details
+
+
+def test_process_data_from_api_error():
+    with pytest.raises(KeyError):
+        _process_data_from_api(data=[{"START_TIME": "1750245171.326000"}])
+
+
 @mock.patch("airflow.providers.snowflake.hooks.snowflake.SnowflakeHook.get_conn")
 @mock.patch("airflow.providers.snowflake.hooks.snowflake.SnowflakeHook.set_autocommit")
 @mock.patch("airflow.providers.snowflake.hooks.snowflake.SnowflakeHook._get_cursor")
@@ -180,6 +225,58 @@ def test_run_single_query_with_hook(mock_get_cursor, mock_set_autocommit, mock_g
     assert result == [{"col1": "value1"}, {"col2": "value2"}]
 
 
+@mock.patch(
+    "airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook.get_result_from_successful_sql_api_query"
+)
+@mock.patch("airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook.wait_for_query")
+@mock.patch("airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook.execute_query")
+def test_run_single_query_with_api_hook_success(mock_execute, mock_wait, mock_get_result):
+    hook = SnowflakeSqlApiHook(snowflake_conn_id="test_conn")
+    hook.query_ids = ["old-id"]
+
+    # Simulate that execute_query overwrites hook.query_ids
+    def execute_query_side_effect(*args, **kwargs):
+        hook.query_ids = ["overwritten-id"]
+        return ["new-id"]
+
+    mock_execute.side_effect = execute_query_side_effect
+    mock_get_result.return_value = [{"col": "value"}]
+
+    result = _run_single_query_with_api_hook(hook, "SELECT 1")
+
+    assert result == [{"col": "value"}]
+    mock_execute.assert_called_once_with(sql="SELECT 1", statement_count=0)
+    mock_wait.assert_called_once_with(query_id="new-id", raise_error=True, poll_interval=1, timeout=3)
+    mock_get_result.assert_called_once_with(query_id="new-id")
+    assert hook.query_ids == ["old-id"]
+
+
+@mock.patch(
+    "airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook.get_result_from_successful_sql_api_query"
+)
+@mock.patch("airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook.wait_for_query")
+@mock.patch("airflow.providers.snowflake.hooks.snowflake_sql_api.SnowflakeSqlApiHook.execute_query")
+def test_run_single_query_exception_restores_query_ids(mock_execute, mock_wait, mock_get_result):
+    hook = SnowflakeSqlApiHook(snowflake_conn_id="test_conn")
+    hook.query_ids = ["persistent-id"]
+
+    # Simulate that execute_query overwrites hook.query_ids
+    def execute_query_side_effect(*args, **kwargs):
+        hook.query_ids = []
+        return ["new-id"]
+
+    mock_execute.side_effect = execute_query_side_effect
+    mock_wait.side_effect = RuntimeError("execution failed")
+
+    with pytest.raises(RuntimeError, match="execution failed"):
+        _run_single_query_with_api_hook(hook, "SELECT 1")
+
+    assert hook.query_ids == ["persistent-id"]
+    mock_execute.assert_called_once_with(sql="SELECT 1", statement_count=0)
+    mock_wait.assert_called_once_with(query_id="new-id", raise_error=True, poll_interval=1, timeout=3)
+    mock_get_result.assert_not_called()
+
+
 def test_get_queries_details_from_snowflake_empty_query_ids():
     details = _get_queries_details_from_snowflake(None, [])
     assert details == {}
@@ -187,7 +284,7 @@ def test_get_queries_details_from_snowflake_empty_query_ids():
 
 @mock.patch("airflow.providers.snowflake.utils.openlineage._run_single_query_with_hook")
 def test_get_queries_details_from_snowflake_single_query(mock_run_single_query):
-    hook = mock.MagicMock()
+    hook = SnowflakeHook(snowflake_conn_id="test_conn")
     query_ids = ["ABC"]
     fake_result = [
         {
@@ -212,9 +309,46 @@ def test_get_queries_details_from_snowflake_single_query(mock_run_single_query):
     assert details == {"ABC": fake_result[0]}
 
 
+@mock.patch("airflow.providers.snowflake.utils.openlineage._run_single_query_with_api_hook")
+def test_get_queries_details_from_snowflake_single_query_api_hook(mock_run_single_query_api):
+    hook = SnowflakeSqlApiHook(snowflake_conn_id="test_conn")
+    query_ids = ["ABC"]
+    fake_result = [
+        {
+            "QUERY_ID": "ABC",
+            "EXECUTION_STATUS": "SUCCESS",
+            "START_TIME": "1750245171.326000",
+            "END_TIME": "1750245171.387000",
+            "QUERY_TEXT": "SELECT * FROM test_table;",
+            "ERROR_CODE": None,
+            "ERROR_MESSAGE": None,
+        }
+    ]
+    mock_run_single_query_api.return_value = fake_result
+
+    details = _get_queries_details_from_snowflake(hook, query_ids)
+
+    expected_query = (
+        "SELECT QUERY_ID, EXECUTION_STATUS, START_TIME, END_TIME, QUERY_TEXT, ERROR_CODE, ERROR_MESSAGE "
+        "FROM table(information_schema.query_history()) "
+        "WHERE QUERY_ID = 'ABC';"
+    )
+    expected_details = {
+        "QUERY_ID": "ABC",
+        "EXECUTION_STATUS": "SUCCESS",
+        "START_TIME": datetime.datetime(2025, 6, 18, 11, 12, 51, 326000, tzinfo=datetime.timezone.utc),
+        "END_TIME": datetime.datetime(2025, 6, 18, 11, 12, 51, 387000, tzinfo=datetime.timezone.utc),
+        "QUERY_TEXT": "SELECT * FROM test_table;",
+        "ERROR_CODE": None,
+        "ERROR_MESSAGE": None,
+    }
+    mock_run_single_query_api.assert_called_once_with(hook=hook, sql=expected_query)
+    assert details == {"ABC": expected_details}
+
+
 @mock.patch("airflow.providers.snowflake.utils.openlineage._run_single_query_with_hook")
 def test_get_queries_details_from_snowflake_multiple_queries(mock_run_single_query):
-    hook = mock.MagicMock()
+    hook = SnowflakeHook(snowflake_conn_id="test_conn")
     query_ids = ["ABC", "DEF"]
     fake_result = [
         {
@@ -250,9 +384,67 @@ def test_get_queries_details_from_snowflake_multiple_queries(mock_run_single_que
     assert details == {row["QUERY_ID"]: row for row in fake_result}
 
 
+@mock.patch("airflow.providers.snowflake.utils.openlineage._run_single_query_with_api_hook")
+def test_get_queries_details_from_snowflake_multiple_queries_api_hook(mock_run_single_query_api):
+    hook = SnowflakeSqlApiHook(snowflake_conn_id="test_conn")
+    query_ids = ["ABC", "DEF"]
+    fake_result = [
+        {
+            "QUERY_ID": "ABC",
+            "EXECUTION_STATUS": "SUCCESS",
+            "START_TIME": "1750245171.326000",
+            "END_TIME": "1750245171.387000",
+            "QUERY_TEXT": "SELECT * FROM table1;",
+            "ERROR_CODE": None,
+            "ERROR_MESSAGE": None,
+        },
+        {
+            "QUERY_ID": "DEF",
+            "EXECUTION_STATUS": "FAILED",
+            "START_TIME": "1750245171.326000",
+            "END_TIME": "1750245171.387000",
+            "QUERY_TEXT": "SELECT * FROM table2;",
+            "ERROR_CODE": "123",
+            "ERROR_MESSAGE": "Some error",
+        },
+    ]
+    mock_run_single_query_api.return_value = fake_result
+
+    details = _get_queries_details_from_snowflake(hook, query_ids)
+
+    expected_query_condition = f"IN {tuple(query_ids)}"
+    expected_query = (
+        "SELECT QUERY_ID, EXECUTION_STATUS, START_TIME, END_TIME, QUERY_TEXT, ERROR_CODE, ERROR_MESSAGE "
+        "FROM table(information_schema.query_history()) "
+        f"WHERE QUERY_ID {expected_query_condition};"
+    )
+    expected_details = [
+        {
+            "QUERY_ID": "ABC",
+            "EXECUTION_STATUS": "SUCCESS",
+            "START_TIME": datetime.datetime(2025, 6, 18, 11, 12, 51, 326000, tzinfo=datetime.timezone.utc),
+            "END_TIME": datetime.datetime(2025, 6, 18, 11, 12, 51, 387000, tzinfo=datetime.timezone.utc),
+            "QUERY_TEXT": "SELECT * FROM table1;",
+            "ERROR_CODE": None,
+            "ERROR_MESSAGE": None,
+        },
+        {
+            "QUERY_ID": "DEF",
+            "EXECUTION_STATUS": "FAILED",
+            "START_TIME": datetime.datetime(2025, 6, 18, 11, 12, 51, 326000, tzinfo=datetime.timezone.utc),
+            "END_TIME": datetime.datetime(2025, 6, 18, 11, 12, 51, 387000, tzinfo=datetime.timezone.utc),
+            "QUERY_TEXT": "SELECT * FROM table2;",
+            "ERROR_CODE": "123",
+            "ERROR_MESSAGE": "Some error",
+        },
+    ]
+    mock_run_single_query_api.assert_called_once_with(hook=hook, sql=expected_query)
+    assert details == {row["QUERY_ID"]: row for row in expected_details}
+
+
 @mock.patch("airflow.providers.snowflake.utils.openlineage._run_single_query_with_hook")
 def test_get_queries_details_from_snowflake_no_data_found(mock_run_single_query):
-    hook = mock.MagicMock()
+    hook = SnowflakeHook(snowflake_conn_id="test_conn")
     query_ids = ["ABC", "DEF"]
     mock_run_single_query.return_value = []
 
@@ -268,6 +460,83 @@ def test_get_queries_details_from_snowflake_no_data_found(mock_run_single_query)
     assert details == {}
 
 
+@mock.patch("airflow.providers.snowflake.utils.openlineage._run_single_query_with_api_hook")
+def test_get_queries_details_from_snowflake_no_data_found_api_hook(mock_run_single_query_api):
+    hook = SnowflakeSqlApiHook(snowflake_conn_id="test_conn")
+    query_ids = ["ABC", "DEF"]
+    mock_run_single_query_api.return_value = []
+
+    details = _get_queries_details_from_snowflake(hook, query_ids)
+
+    expected_query_condition = f"IN {tuple(query_ids)}"
+    expected_query = (
+        "SELECT QUERY_ID, EXECUTION_STATUS, START_TIME, END_TIME, QUERY_TEXT, ERROR_CODE, ERROR_MESSAGE "
+        "FROM table(information_schema.query_history()) "
+        f"WHERE QUERY_ID {expected_query_condition};"
+    )
+    mock_run_single_query_api.assert_called_once_with(hook=hook, sql=expected_query)
+    assert details == {}
+
+
+@mock.patch("airflow.providers.snowflake.utils.openlineage._run_single_query_with_hook")
+def test_get_queries_details_from_snowflake_error(mock_run_single_query):
+    hook = SnowflakeHook(snowflake_conn_id="test_conn")
+    query_ids = ["ABC", "DEF"]
+    mock_run_single_query.side_effect = ValueError("Query failure")
+
+    details = _get_queries_details_from_snowflake(hook, query_ids)
+
+    expected_query_condition = f"IN {tuple(query_ids)}"
+    expected_query = (
+        "SELECT QUERY_ID, EXECUTION_STATUS, START_TIME, END_TIME, QUERY_TEXT, ERROR_CODE, ERROR_MESSAGE "
+        "FROM table(information_schema.query_history()) "
+        f"WHERE QUERY_ID {expected_query_condition};"
+    )
+    mock_run_single_query.assert_called_once_with(hook=hook, sql=expected_query)
+    assert details == {}
+
+
+@mock.patch("airflow.providers.snowflake.utils.openlineage._run_single_query_with_api_hook")
+def test_get_queries_details_from_snowflake_error_api_hook(mock_run_single_query_api):
+    hook = SnowflakeSqlApiHook(snowflake_conn_id="test_conn")
+    query_ids = ["ABC", "DEF"]
+    mock_run_single_query_api.side_effect = ValueError("Query failure")
+
+    details = _get_queries_details_from_snowflake(hook, query_ids)
+
+    expected_query_condition = f"IN {tuple(query_ids)}"
+    expected_query = (
+        "SELECT QUERY_ID, EXECUTION_STATUS, START_TIME, END_TIME, QUERY_TEXT, ERROR_CODE, ERROR_MESSAGE "
+        "FROM table(information_schema.query_history()) "
+        f"WHERE QUERY_ID {expected_query_condition};"
+    )
+    mock_run_single_query_api.assert_called_once_with(hook=hook, sql=expected_query)
+    assert details == {}
+
+
+@mock.patch("airflow.providers.snowflake.utils.openlineage._process_data_from_api")
+@mock.patch("airflow.providers.snowflake.utils.openlineage._run_single_query_with_api_hook")
+def test_get_queries_details_from_snowflake_error_api_hook_process_data(
+    mock_run_single_query_api, mock_process_data
+):
+    hook = SnowflakeSqlApiHook(snowflake_conn_id="test_conn")
+    query_ids = ["ABC", "DEF"]
+    mock_run_single_query_api.return_value = ["some_data"]
+    mock_process_data.side_effect = ValueError("Processing failure")
+
+    details = _get_queries_details_from_snowflake(hook, query_ids)
+
+    expected_query_condition = f"IN {tuple(query_ids)}"
+    expected_query = (
+        "SELECT QUERY_ID, EXECUTION_STATUS, START_TIME, END_TIME, QUERY_TEXT, ERROR_CODE, ERROR_MESSAGE "
+        "FROM table(information_schema.query_history()) "
+        f"WHERE QUERY_ID {expected_query_condition};"
+    )
+    mock_run_single_query_api.assert_called_once_with(hook=hook, sql=expected_query)
+    mock_process_data.assert_called_once_with(data=["some_data"])
+    assert details == {}
+
+
 @pytest.mark.parametrize("is_successful", [True, False])
 @mock.patch("openlineage.client.uuid.generate_new_uuid")
 def test_create_snowflake_event_pair_success(mock_generate_uuid, is_successful):
@@ -310,7 +579,9 @@ def test_create_snowflake_event_pair_success(mock_generate_uuid, is_successful):
 @mock.patch("importlib.metadata.version", return_value="2.3.0")
 @mock.patch("openlineage.client.uuid.generate_new_uuid")
 @mock.patch("airflow.utils.timezone.utcnow")
-def test_emit_openlineage_events_for_snowflake_queries_with_hook(mock_now, mock_generate_uuid, mock_version):
+def test_emit_openlineage_events_for_snowflake_queries_with_extra_metadata(
+    mock_now, mock_generate_uuid, mock_version
+):
     fake_uuid = "01958e68-03a2-79e3-9ae9-26865cc40e2f"
     mock_generate_uuid.return_value = fake_uuid
 
@@ -373,7 +644,8 @@ def test_emit_openlineage_events_for_snowflake_queries_with_hook(mock_now, mock_
             query_ids=query_ids,
             query_source_namespace="snowflake_ns",
             task_instance=mock_ti,
-            hook=mock.MagicMock(),  # any non-None hook to trigger metadata retrieval
+            hook=mock.MagicMock(),
+            query_for_extra_metadata=True,
             additional_run_facets=additional_run_facets,
             additional_job_facets=additional_job_facets,
         )
@@ -548,7 +820,7 @@ def test_emit_openlineage_events_for_snowflake_queries_with_hook(mock_now, mock_
 @mock.patch("importlib.metadata.version", return_value="2.3.0")
 @mock.patch("openlineage.client.uuid.generate_new_uuid")
 @mock.patch("airflow.utils.timezone.utcnow")
-def test_emit_openlineage_events_for_snowflake_queries_without_hook(
+def test_emit_openlineage_events_for_snowflake_queries_without_extra_metadata(
     mock_now, mock_generate_uuid, mock_version
 ):
     fake_uuid = "01958e68-03a2-79e3-9ae9-26865cc40e2f"
@@ -589,7 +861,8 @@ def test_emit_openlineage_events_for_snowflake_queries_without_hook(
             query_ids=query_ids,
             query_source_namespace="snowflake_ns",
             task_instance=mock_ti,
-            hook=None,  # None so metadata retrieval is not triggered
+            hook=mock.MagicMock(),
+            # query_for_extra_metadata=False,  # False by default
             additional_run_facets=additional_run_facets,
             additional_job_facets=additional_job_facets,
         )
@@ -664,9 +937,36 @@ def test_emit_openlineage_events_for_snowflake_queries_without_hook(
 
 
 @mock.patch("importlib.metadata.version", return_value="2.3.0")
-def test_emit_openlineage_events_for_snowflake_queries_without_query_ids(mock_version):
-    query_ids = []
-    original_query_ids = copy.deepcopy(query_ids)
+@mock.patch("openlineage.client.uuid.generate_new_uuid")
+@mock.patch("airflow.utils.timezone.utcnow")
+def test_emit_openlineage_events_for_snowflake_queries_without_query_ids(
+    mock_now, mock_generate_uuid, mock_version
+):
+    fake_uuid = "01958e68-03a2-79e3-9ae9-26865cc40e2f"
+    mock_generate_uuid.return_value = fake_uuid
+
+    default_event_time = timezone.datetime(2025, 1, 5, 0, 0, 0)
+    mock_now.return_value = default_event_time
+
+    hook = mock.MagicMock()
+    hook.query_ids = ["query1"]
+    original_query_ids = copy.deepcopy(hook.query_ids)
+    logical_date = timezone.datetime(2025, 1, 1)
+    mock_ti = mock.MagicMock(
+        dag_id="dag_id",
+        task_id="task_id",
+        map_index=1,
+        try_number=1,
+        logical_date=logical_date,
+        state=TaskInstanceState.RUNNING,  # Success will be query default state if no metadata found
+        dag_run=mock.MagicMock(logical_date=logical_date, clear_number=0),
+    )
+    mock_ti.get_template_context.return_value = {
+        "dag_run": mock.MagicMock(logical_date=logical_date, clear_number=0)
+    }
+
+    additional_run_facets = {"custom_run": "value_run"}
+    additional_job_facets = {"custom_job": "value_job"}
 
     fake_adapter = mock.MagicMock()
     fake_adapter.emit = mock.MagicMock()
@@ -678,11 +978,395 @@ def test_emit_openlineage_events_for_snowflake_queries_without_query_ids(mock_ve
         return_value=fake_listener,
     ):
         emit_openlineage_events_for_snowflake_queries(
-            query_ids=query_ids,
+            query_ids=[],
             query_source_namespace="snowflake_ns",
-            task_instance=None,
+            task_instance=mock_ti,
+            hook=hook,
+            # query_for_extra_metadata=False,  # False by default
+            additional_run_facets=additional_run_facets,
+            additional_job_facets=additional_job_facets,
         )
 
+        assert hook.query_ids == original_query_ids  # Verify that the input query_ids list is unchanged.
+        assert fake_adapter.emit.call_count == 2  # Expect two events per query.
+
+        expected_common_job_facets = {
+            "jobType": job_type_job.JobTypeJobFacet(
+                jobType="QUERY",
+                processingType="BATCH",
+                integration="SNOWFLAKE",
+            ),
+            "custom_job": "value_job",
+        }
+        expected_common_run_facets = {
+            "parent": parent_run.ParentRunFacet(
+                run=parent_run.Run(runId="01941f29-7c00-7087-8906-40e512c257bd"),
+                job=parent_run.Job(namespace=namespace(), name="dag_id.task_id"),
+                root=parent_run.Root(
+                    run=parent_run.RootRun(runId="01941f29-7c00-743e-b109-28b18d0a19c5"),
+                    job=parent_run.RootJob(namespace=namespace(), name="dag_id"),
+                ),
+            ),
+            "custom_run": "value_run",
+        }
+
+        expected_calls = [
+            mock.call(  # Query1: START event (no metadata)
+                RunEvent(
+                    eventTime=default_event_time.isoformat(),
+                    eventType=RunState.START,
+                    run=Run(
+                        runId=fake_uuid,
+                        facets={
+                            "externalQuery": ExternalQueryRunFacet(
+                                externalQueryId="query1", source="snowflake_ns"
+                            ),
+                            **expected_common_run_facets,
+                        },
+                    ),
+                    job=Job(
+                        namespace=namespace(),
+                        name="dag_id.task_id.query.1",
+                        facets=expected_common_job_facets,
+                    ),
+                )
+            ),
+            mock.call(  # Query1: COMPLETE event (no metadata)
+                RunEvent(
+                    eventTime=default_event_time.isoformat(),
+                    eventType=RunState.COMPLETE,
+                    run=Run(
+                        runId=fake_uuid,
+                        facets={
+                            "externalQuery": ExternalQueryRunFacet(
+                                externalQueryId="query1", source="snowflake_ns"
+                            ),
+                            **expected_common_run_facets,
+                        },
+                    ),
+                    job=Job(
+                        namespace=namespace(),
+                        name="dag_id.task_id.query.1",
+                        facets=expected_common_job_facets,
+                    ),
+                )
+            ),
+        ]
+
+        assert fake_adapter.emit.call_args_list == expected_calls
+
+
+@mock.patch("airflow.providers.openlineage.sqlparser.SQLParser.create_namespace", return_value="snowflake_ns")
+@mock.patch("importlib.metadata.version", return_value="2.3.0")
+@mock.patch("openlineage.client.uuid.generate_new_uuid")
+@mock.patch("airflow.utils.timezone.utcnow")
+def test_emit_openlineage_events_for_snowflake_queries_without_query_ids_and_namespace(
+    mock_now, mock_generate_uuid, mock_version, mock_parser
+):
+    fake_uuid = "01958e68-03a2-79e3-9ae9-26865cc40e2f"
+    mock_generate_uuid.return_value = fake_uuid
+
+    default_event_time = timezone.datetime(2025, 1, 5, 0, 0, 0)
+    mock_now.return_value = default_event_time
+
+    hook = mock.MagicMock()
+    hook.query_ids = ["query1"]
+    original_query_ids = copy.deepcopy(hook.query_ids)
+    logical_date = timezone.datetime(2025, 1, 1)
+    mock_ti = mock.MagicMock(
+        dag_id="dag_id",
+        task_id="task_id",
+        map_index=1,
+        try_number=1,
+        logical_date=logical_date,
+        state="running",  # Success will be query default state if no metadata found
+        dag_run=mock.MagicMock(logical_date=logical_date, clear_number=0),
+    )
+    mock_ti.get_template_context.return_value = {
+        "dag_run": mock.MagicMock(logical_date=logical_date, clear_number=0)
+    }
+
+    additional_run_facets = {"custom_run": "value_run"}
+    additional_job_facets = {"custom_job": "value_job"}
+
+    fake_adapter = mock.MagicMock()
+    fake_adapter.emit = mock.MagicMock()
+    fake_listener = mock.MagicMock()
+    fake_listener.adapter = fake_adapter
+
+    with mock.patch(
+        "airflow.providers.openlineage.plugins.listener.get_openlineage_listener",
+        return_value=fake_listener,
+    ):
+        emit_openlineage_events_for_snowflake_queries(
+            query_ids=[],
+            query_source_namespace=None,
+            task_instance=mock_ti,
+            hook=hook,
+            # query_for_extra_metadata=False,  # False by default
+            additional_run_facets=additional_run_facets,
+            additional_job_facets=additional_job_facets,
+        )
+
+        assert hook.query_ids == original_query_ids  # Verify that the input query_ids list is unchanged.
+        assert fake_adapter.emit.call_count == 2  # Expect two events per query.
+
+        expected_common_job_facets = {
+            "jobType": job_type_job.JobTypeJobFacet(
+                jobType="QUERY",
+                processingType="BATCH",
+                integration="SNOWFLAKE",
+            ),
+            "custom_job": "value_job",
+        }
+        expected_common_run_facets = {
+            "parent": parent_run.ParentRunFacet(
+                run=parent_run.Run(runId="01941f29-7c00-7087-8906-40e512c257bd"),
+                job=parent_run.Job(namespace=namespace(), name="dag_id.task_id"),
+                root=parent_run.Root(
+                    run=parent_run.RootRun(runId="01941f29-7c00-743e-b109-28b18d0a19c5"),
+                    job=parent_run.RootJob(namespace=namespace(), name="dag_id"),
+                ),
+            ),
+            "custom_run": "value_run",
+        }
+
+        expected_calls = [
+            mock.call(  # Query1: START event (no metadata)
+                RunEvent(
+                    eventTime=default_event_time.isoformat(),
+                    eventType=RunState.START,
+                    run=Run(
+                        runId=fake_uuid,
+                        facets={
+                            "externalQuery": ExternalQueryRunFacet(
+                                externalQueryId="query1", source="snowflake_ns"
+                            ),
+                            **expected_common_run_facets,
+                        },
+                    ),
+                    job=Job(
+                        namespace=namespace(),
+                        name="dag_id.task_id.query.1",
+                        facets=expected_common_job_facets,
+                    ),
+                )
+            ),
+            mock.call(  # Query1: COMPLETE event (no metadata)
+                RunEvent(
+                    eventTime=default_event_time.isoformat(),
+                    eventType=RunState.COMPLETE,
+                    run=Run(
+                        runId=fake_uuid,
+                        facets={
+                            "externalQuery": ExternalQueryRunFacet(
+                                externalQueryId="query1", source="snowflake_ns"
+                            ),
+                            **expected_common_run_facets,
+                        },
+                    ),
+                    job=Job(
+                        namespace=namespace(),
+                        name="dag_id.task_id.query.1",
+                        facets=expected_common_job_facets,
+                    ),
+                )
+            ),
+        ]
+
+        assert fake_adapter.emit.call_args_list == expected_calls
+
+
+@mock.patch("importlib.metadata.version", return_value="2.3.0")
+@mock.patch("openlineage.client.uuid.generate_new_uuid")
+@mock.patch("airflow.utils.timezone.utcnow")
+def test_emit_openlineage_events_for_snowflake_queries_with_query_ids_and_hook_query_ids(
+    mock_now, mock_generate_uuid, mock_version
+):
+    fake_uuid = "01958e68-03a2-79e3-9ae9-26865cc40e2f"
+    mock_generate_uuid.return_value = fake_uuid
+
+    default_event_time = timezone.datetime(2025, 1, 5, 0, 0, 0)
+    mock_now.return_value = default_event_time
+
+    hook = mock.MagicMock()
+    hook.query_ids = ["query1"]
+    original_query_ids = copy.deepcopy(hook.query_ids)
+    logical_date = timezone.datetime(2025, 1, 1)
+    mock_ti = mock.MagicMock(
+        dag_id="dag_id",
+        task_id="task_id",
+        map_index=1,
+        try_number=1,
+        logical_date=logical_date,
+        state="running",  # Success will be query default state if no metadata found
+        dag_run=mock.MagicMock(logical_date=logical_date, clear_number=0),
+    )
+    mock_ti.get_template_context.return_value = {
+        "dag_run": mock.MagicMock(logical_date=logical_date, clear_number=0)
+    }
+
+    additional_run_facets = {"custom_run": "value_run"}
+    additional_job_facets = {"custom_job": "value_job"}
+
+    fake_adapter = mock.MagicMock()
+    fake_adapter.emit = mock.MagicMock()
+    fake_listener = mock.MagicMock()
+    fake_listener.adapter = fake_adapter
+
+    with mock.patch(
+        "airflow.providers.openlineage.plugins.listener.get_openlineage_listener",
+        return_value=fake_listener,
+    ):
+        emit_openlineage_events_for_snowflake_queries(
+            query_ids=["query2"],
+            query_source_namespace="snowflake_ns",
+            task_instance=mock_ti,
+            hook=hook,
+            # query_for_extra_metadata=False,  # False by default
+            additional_run_facets=additional_run_facets,
+            additional_job_facets=additional_job_facets,
+        )
+
+        assert hook.query_ids == original_query_ids  # Verify that the input query_ids list is unchanged.
+        assert fake_adapter.emit.call_count == 2  # Expect two events per query.
+
+        expected_common_job_facets = {
+            "jobType": job_type_job.JobTypeJobFacet(
+                jobType="QUERY",
+                processingType="BATCH",
+                integration="SNOWFLAKE",
+            ),
+            "custom_job": "value_job",
+        }
+        expected_common_run_facets = {
+            "parent": parent_run.ParentRunFacet(
+                run=parent_run.Run(runId="01941f29-7c00-7087-8906-40e512c257bd"),
+                job=parent_run.Job(namespace=namespace(), name="dag_id.task_id"),
+                root=parent_run.Root(
+                    run=parent_run.RootRun(runId="01941f29-7c00-743e-b109-28b18d0a19c5"),
+                    job=parent_run.RootJob(namespace=namespace(), name="dag_id"),
+                ),
+            ),
+            "custom_run": "value_run",
+        }
+
+        expected_calls = [
+            mock.call(  # Query1: START event (no metadata)
+                RunEvent(
+                    eventTime=default_event_time.isoformat(),
+                    eventType=RunState.START,
+                    run=Run(
+                        runId=fake_uuid,
+                        facets={
+                            "externalQuery": ExternalQueryRunFacet(
+                                externalQueryId="query2", source="snowflake_ns"
+                            ),
+                            **expected_common_run_facets,
+                        },
+                    ),
+                    job=Job(
+                        namespace=namespace(),
+                        name="dag_id.task_id.query.1",
+                        facets=expected_common_job_facets,
+                    ),
+                )
+            ),
+            mock.call(  # Query1: COMPLETE event (no metadata)
+                RunEvent(
+                    eventTime=default_event_time.isoformat(),
+                    eventType=RunState.COMPLETE,
+                    run=Run(
+                        runId=fake_uuid,
+                        facets={
+                            "externalQuery": ExternalQueryRunFacet(
+                                externalQueryId="query2", source="snowflake_ns"
+                            ),
+                            **expected_common_run_facets,
+                        },
+                    ),
+                    job=Job(
+                        namespace=namespace(),
+                        name="dag_id.task_id.query.1",
+                        facets=expected_common_job_facets,
+                    ),
+                )
+            ),
+        ]
+
+        assert fake_adapter.emit.call_args_list == expected_calls
+
+
+@mock.patch("importlib.metadata.version", return_value="2.3.0")
+def test_emit_openlineage_events_for_snowflake_queries_missing_query_ids_and_hook(mock_version):
+    fake_adapter = mock.MagicMock()
+    fake_adapter.emit = mock.MagicMock()
+    fake_listener = mock.MagicMock()
+    fake_listener.adapter = fake_adapter
+
+    with mock.patch(
+        "airflow.providers.openlineage.plugins.listener.get_openlineage_listener",
+        return_value=fake_listener,
+    ):
+        with pytest.raises(ValueError, match="If 'hook' is not provided, 'query_ids' must be set."):
+            emit_openlineage_events_for_snowflake_queries(
+                task_instance=None, query_source_namespace="snowflake_ns", query_for_extra_metadata=False
+            )
+
+        fake_adapter.emit.assert_not_called()  # No events should be emitted
+
+
+@mock.patch("importlib.metadata.version", return_value="2.3.0")
+def test_emit_openlineage_events_for_snowflake_queries_missing_query_namespace_and_hook(mock_version):
+    query_ids = ["1", "2"]
+    original_query_ids = copy.deepcopy(query_ids)
+
+    fake_adapter = mock.MagicMock()
+    fake_adapter.emit = mock.MagicMock()
+    fake_listener = mock.MagicMock()
+    fake_listener.adapter = fake_adapter
+
+    with mock.patch(
+        "airflow.providers.openlineage.plugins.listener.get_openlineage_listener",
+        return_value=fake_listener,
+    ):
+        with pytest.raises(
+            ValueError, match="If 'hook' is not provided, 'query_source_namespace' must be set."
+        ):
+            emit_openlineage_events_for_snowflake_queries(
+                task_instance=None, query_ids=query_ids, query_for_extra_metadata=False
+            )
+
+        assert query_ids == original_query_ids  # Verify that the input query_ids list is unchanged.
+        fake_adapter.emit.assert_not_called()  # No events should be emitted
+
+
+@mock.patch("importlib.metadata.version", return_value="2.3.0")
+def test_emit_openlineage_events_for_snowflake_queries_missing_hook_and_query_for_extra_metadata_true(
+    mock_version,
+):
+    query_ids = ["1", "2"]
+    original_query_ids = copy.deepcopy(query_ids)
+
+    fake_adapter = mock.MagicMock()
+    fake_adapter.emit = mock.MagicMock()
+    fake_listener = mock.MagicMock()
+    fake_listener.adapter = fake_adapter
+
+    with mock.patch(
+        "airflow.providers.openlineage.plugins.listener.get_openlineage_listener",
+        return_value=fake_listener,
+    ):
+        with pytest.raises(
+            ValueError, match="If 'hook' is not provided, 'query_for_extra_metadata' must be False."
+        ):
+            emit_openlineage_events_for_snowflake_queries(
+                task_instance=None,
+                query_source_namespace="snowflake_ns",
+                query_ids=query_ids,
+                query_for_extra_metadata=True,
+            )
+
         assert query_ids == original_query_ids  # Verify that the input query_ids list is unchanged.
         fake_adapter.emit.assert_not_called()  # No events should be emitted
 

From 9bdc215e8f9fb282124427686e5d88a923cdb23b Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Mon, 30 Jun 2025 17:10:44 +0530
Subject: [PATCH 326/381] Provider Migration: Replace `BaseOperator` to Task
 SDK for `apache/http` (#52528)

Part of https://github.com/apache/airflow/issues/52378

Credits to @bdsoha for https://github.com/apache/airflow/pull/52506
---
 .../src/airflow/providers/http/operators/http.py  |  2 +-
 .../src/airflow/providers/http/sensors/http.py    |  7 +------
 .../src/airflow/providers/http/version_compat.py  |  8 ++++++++
 .../http/tests/unit/http/sensors/test_http.py     | 15 ++++-----------
 4 files changed, 14 insertions(+), 18 deletions(-)

diff --git a/providers/http/src/airflow/providers/http/operators/http.py b/providers/http/src/airflow/providers/http/operators/http.py
index ca36ac471c7fd..6e6c48ea94a90 100644
--- a/providers/http/src/airflow/providers/http/operators/http.py
+++ b/providers/http/src/airflow/providers/http/operators/http.py
@@ -28,8 +28,8 @@
 from airflow.configuration import conf
 from airflow.exceptions import AirflowException
 from airflow.hooks.base import BaseHook
-from airflow.models import BaseOperator
 from airflow.providers.http.triggers.http import HttpTrigger, serialize_auth_type
+from airflow.providers.http.version_compat import BaseOperator
 from airflow.utils.helpers import merge_dicts
 
 if TYPE_CHECKING:
diff --git a/providers/http/src/airflow/providers/http/sensors/http.py b/providers/http/src/airflow/providers/http/sensors/http.py
index a9d9274afd109..f395ab2bb8ca3 100644
--- a/providers/http/src/airflow/providers/http/sensors/http.py
+++ b/providers/http/src/airflow/providers/http/sensors/http.py
@@ -25,12 +25,7 @@
 from airflow.exceptions import AirflowException
 from airflow.providers.http.hooks.http import HttpHook
 from airflow.providers.http.triggers.http import HttpSensorTrigger
-from airflow.providers.http.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+from airflow.providers.http.version_compat import AIRFLOW_V_3_0_PLUS, BaseSensorOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/http/src/airflow/providers/http/version_compat.py b/providers/http/src/airflow/providers/http/version_compat.py
index 48d122b669696..fde11c60d3655 100644
--- a/providers/http/src/airflow/providers/http/version_compat.py
+++ b/providers/http/src/airflow/providers/http/version_compat.py
@@ -33,3 +33,11 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator, BaseSensorOperator
+else:
+    from airflow.models import BaseOperator  # type: ignore[no-redef]
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+
+__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseOperator", "BaseSensorOperator"]
diff --git a/providers/http/tests/unit/http/sensors/test_http.py b/providers/http/tests/unit/http/sensors/test_http.py
index b2b74c1dc5bfa..1f3c0a32609d7 100644
--- a/providers/http/tests/unit/http/sensors/test_http.py
+++ b/providers/http/tests/unit/http/sensors/test_http.py
@@ -286,11 +286,6 @@ def mount(self, prefix, adapter):
 
 
 class TestHttpOpSensor:
-    def setup_method(self):
-        args = {"owner": "airflow", "start_date": DEFAULT_DATE_ISO}
-        dag = DAG(TEST_DAG_ID, schedule=None, default_args=args)
-        self.dag = dag
-
     @mock.patch("airflow.providers.http.hooks.http.Session", FakeSession)
     def test_get(self):
         op = HttpOperator(
@@ -299,9 +294,8 @@ def test_get(self):
             endpoint="/search",
             data={"client": "ubuntu", "q": "airflow"},
             headers={},
-            dag=self.dag,
         )
-        op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
+        op.execute({})
 
     @mock.patch("airflow.providers.http.hooks.http.Session", FakeSession)
     def test_get_response_check(self):
@@ -312,9 +306,8 @@ def test_get_response_check(self):
             data={"client": "ubuntu", "q": "airflow"},
             response_check=lambda response: ("apache/airflow" in response.text),
             headers={},
-            dag=self.dag,
         )
-        op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
+        op.execute({})
 
     @pytest.mark.skipif(not AIRFLOW_V_3_0_PLUS, reason="Test only for Airflow 3.0+")
     @mock.patch("airflow.providers.http.hooks.http.Session", FakeSession)
@@ -328,13 +321,13 @@ def test_sensor(self, run_task):
             response_check=lambda response: f"apache/airflow/{DEFAULT_DATE:%Y-%m-%d}" in response.text,
             poke_interval=5,
             timeout=15,
-            dag=self.dag,
         )
         run_task(sensor)
 
     @pytest.mark.skipif(AIRFLOW_V_3_0_PLUS, reason="Test only for Airflow < 3.0")
     @mock.patch("airflow.providers.http.hooks.http.Session", FakeSession)
     def test_sensor_af2(self):
+        dag = DAG(TEST_DAG_ID, schedule=None)
         sensor = HttpSensor(
             task_id="http_sensor_check",
             http_conn_id="http_default",
@@ -344,7 +337,7 @@ def test_sensor_af2(self):
             response_check=lambda response: f"apache/airflow/{DEFAULT_DATE:%Y-%m-%d}" in response.text,
             poke_interval=5,
             timeout=15,
-            dag=self.dag,
+            dag=dag,
         )
         sensor.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
 

From 33164071691f66cd3cde336ed143f03b84b67c02 Mon Sep 17 00:00:00 2001
From: "Zhen-Lun (Kevin) Hong" <zhenlun.hong01@gmail.com>
Date: Mon, 30 Jun 2025 20:21:26 +0800
Subject: [PATCH 327/381] Provider Migration: Update yandex provider for
 Airflow 3.0 compatibility  (#52422)

Part of #52378
---
 providers/yandex/pyproject.toml               |  1 -
 .../src/airflow/providers/yandex/links/yq.py  | 23 ++-------
 .../providers/yandex/operators/dataproc.py    |  8 +---
 .../airflow/providers/yandex/operators/yq.py  | 10 ++--
 .../providers/yandex/version_compat.py        | 48 +++++++++++++++++++
 .../yandex/tests/unit/yandex/links/test_yq.py | 15 +++---
 .../tests/unit/yandex/operators/test_yq.py    | 32 +++++--------
 7 files changed, 76 insertions(+), 61 deletions(-)
 create mode 100644 providers/yandex/src/airflow/providers/yandex/version_compat.py

diff --git a/providers/yandex/pyproject.toml b/providers/yandex/pyproject.toml
index 1eb44bd7219b9..876f8add3151c 100644
--- a/providers/yandex/pyproject.toml
+++ b/providers/yandex/pyproject.toml
@@ -73,7 +73,6 @@ dev = [
     "apache-airflow",
     "apache-airflow-task-sdk",
     "apache-airflow-devel-common",
-    "apache-airflow-providers-common-compat",
     # Additional devel dependencies (do not remove this line and add extra development dependencies)
     "responses>=0.25.0",
 ]
diff --git a/providers/yandex/src/airflow/providers/yandex/links/yq.py b/providers/yandex/src/airflow/providers/yandex/links/yq.py
index 49a42473ca446..7bd416e889831 100644
--- a/providers/yandex/src/airflow/providers/yandex/links/yq.py
+++ b/providers/yandex/src/airflow/providers/yandex/links/yq.py
@@ -18,24 +18,11 @@
 
 from typing import TYPE_CHECKING
 
+from airflow.providers.yandex.version_compat import BaseOperatorLink, XCom
+
 if TYPE_CHECKING:
-    from airflow.models import BaseOperator
     from airflow.models.taskinstancekey import TaskInstanceKey
-
-    try:
-        from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
-
-from airflow.providers.common.compat.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseOperatorLink
-    from airflow.sdk.execution_time.xcom import XCom
-else:
-    from airflow.models import XCom  # type: ignore[no-redef]
-    from airflow.models.baseoperatorlink import BaseOperatorLink  # type: ignore[no-redef]
+    from airflow.providers.yandex.version_compat import BaseOperator, Context
 
 XCOM_WEBLINK_KEY = "web_link"
 
@@ -49,5 +36,5 @@ def get_link(self, operator: BaseOperator, *, ti_key: TaskInstanceKey):
         return XCom.get_value(key=XCOM_WEBLINK_KEY, ti_key=ti_key) or "https://yq.cloud.yandex.ru"
 
     @staticmethod
-    def persist(context: Context, task_instance: BaseOperator, web_link: str) -> None:
-        task_instance.xcom_push(context, key=XCOM_WEBLINK_KEY, value=web_link)
+    def persist(context: Context, web_link: str) -> None:
+        context["ti"].xcom_push(key=XCOM_WEBLINK_KEY, value=web_link)
diff --git a/providers/yandex/src/airflow/providers/yandex/operators/dataproc.py b/providers/yandex/src/airflow/providers/yandex/operators/dataproc.py
index e389f85abe583..a5418024541e8 100644
--- a/providers/yandex/src/airflow/providers/yandex/operators/dataproc.py
+++ b/providers/yandex/src/airflow/providers/yandex/operators/dataproc.py
@@ -20,15 +20,11 @@
 from dataclasses import dataclass
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.yandex.hooks.dataproc import DataprocHook
+from airflow.providers.yandex.version_compat import BaseOperator
 
 if TYPE_CHECKING:
-    try:
-        from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+    from airflow.providers.yandex.version_compat import Context
 
 
 @dataclass
diff --git a/providers/yandex/src/airflow/providers/yandex/operators/yq.py b/providers/yandex/src/airflow/providers/yandex/operators/yq.py
index da3890f4adfec..1c450174e1681 100644
--- a/providers/yandex/src/airflow/providers/yandex/operators/yq.py
+++ b/providers/yandex/src/airflow/providers/yandex/operators/yq.py
@@ -20,16 +20,12 @@
 from functools import cached_property
 from typing import TYPE_CHECKING, Any
 
-from airflow.models import BaseOperator
 from airflow.providers.yandex.hooks.yq import YQHook
 from airflow.providers.yandex.links.yq import YQLink
+from airflow.providers.yandex.version_compat import BaseOperator
 
 if TYPE_CHECKING:
-    try:
-        from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+    from airflow.providers.yandex.version_compat import Context
 
 
 class YQExecuteQueryOperator(BaseOperator):
@@ -84,7 +80,7 @@ def execute(self, context: Context) -> Any:
 
         # pass to YQLink
         web_link = self.hook.compose_query_web_link(self.query_id)
-        YQLink.persist(context, self, web_link)
+        YQLink.persist(context, web_link)
 
         results = self.hook.wait_results(self.query_id)
         # forget query to avoid 'stop_query' in on_kill
diff --git a/providers/yandex/src/airflow/providers/yandex/version_compat.py b/providers/yandex/src/airflow/providers/yandex/version_compat.py
new file mode 100644
index 0000000000000..a57abc71e5c35
--- /dev/null
+++ b/providers/yandex/src/airflow/providers/yandex/version_compat.py
@@ -0,0 +1,48 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator, BaseOperatorLink
+    from airflow.sdk.definitions.context import Context
+    from airflow.sdk.execution_time.xcom import XCom
+else:
+    from airflow.models import BaseOperator, XCom
+    from airflow.models.baseoperatorlink import BaseOperatorLink  # type: ignore[no-redef]
+    from airflow.utils.context import Context
+
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+    "BaseOperatorLink",
+    "Context",
+    "XCom",
+]
diff --git a/providers/yandex/tests/unit/yandex/links/test_yq.py b/providers/yandex/tests/unit/yandex/links/test_yq.py
index 9bfa0fbede6ff..bb6ef4bf3608d 100644
--- a/providers/yandex/tests/unit/yandex/links/test_yq.py
+++ b/providers/yandex/tests/unit/yandex/links/test_yq.py
@@ -35,18 +35,15 @@
 
 
 def test_persist():
-    mock_context = mock.MagicMock()
+    mock_ti = mock.MagicMock()
+    mock_context = {"ti": mock_ti}
+    if not AIRFLOW_V_3_0_PLUS:
+        mock_context["task_instance"] = mock_ti
 
-    YQLink.persist(context=mock_context, task_instance=MockOperator(task_id="test_task_id"), web_link="g.com")
+    YQLink.persist(context=mock_context, web_link="g.com")
 
     ti = mock_context["ti"]
-    if AIRFLOW_V_3_0_PLUS:
-        ti.xcom_push.assert_called_once_with(
-            key="web_link",
-            value="g.com",
-        )
-    else:
-        ti.xcom_push.assert_called_once_with(key="web_link", value="g.com", execution_date=None)
+    ti.xcom_push.assert_called_once_with(key="web_link", value="g.com")
 
 
 def test_default_link():
diff --git a/providers/yandex/tests/unit/yandex/operators/test_yq.py b/providers/yandex/tests/unit/yandex/operators/test_yq.py
index 127e4eb837972..be09ca243d3a8 100644
--- a/providers/yandex/tests/unit/yandex/operators/test_yq.py
+++ b/providers/yandex/tests/unit/yandex/operators/test_yq.py
@@ -54,7 +54,10 @@ def setup_method(self):
     def test_execute_query(self, mock_get_connection):
         mock_get_connection.return_value = Connection(extra={"oauth": OAUTH_TOKEN})
         operator = YQExecuteQueryOperator(task_id="simple_sql", sql="select 987", folder_id="my_folder_id")
-        context = {"ti": MagicMock()}
+        mock_ti = MagicMock()
+        context = {"ti": mock_ti}
+        if not AIRFLOW_V_3_0_PLUS:
+            context["task_instance"] = operator
 
         responses.post(
             "https://api.yandex-query.cloud.yandex.net/api/fq/v1/queries",
@@ -90,25 +93,14 @@ def test_execute_query(self, mock_get_connection):
         results = operator.execute(context)
         assert results == {"rows": [[777]], "columns": [{"name": "column0", "type": "Int32"}]}
 
-        if AIRFLOW_V_3_0_PLUS:
-            context["ti"].xcom_push.assert_has_calls(
-                [
-                    call(
-                        key="web_link",
-                        value=f"https://yq.cloud.yandex.ru/folders/{FOLDER_ID}/ide/queries/query1",
-                    ),
-                ]
-            )
-        else:
-            context["ti"].xcom_push.assert_has_calls(
-                [
-                    call(
-                        key="web_link",
-                        value=f"https://yq.cloud.yandex.ru/folders/{FOLDER_ID}/ide/queries/query1",
-                        execution_date=None,
-                    ),
-                ]
-            )
+        context["ti"].xcom_push.assert_has_calls(
+            [
+                call(
+                    key="web_link",
+                    value=f"https://yq.cloud.yandex.ru/folders/{FOLDER_ID}/ide/queries/query1",
+                ),
+            ]
+        )
 
         responses.get(
             "https://api.yandex-query.cloud.yandex.net/api/fq/v1/queries/query1/status",

From 60f780e77f443b6dfc30c444c6f44a46404dfa8c Mon Sep 17 00:00:00 2001
From: Jake Roach <116606359+jroachgolf84@users.noreply.github.com>
Date: Mon, 30 Jun 2025 08:59:37 -0400
Subject: [PATCH 328/381] Replace models.BaseOperator to Task SDK one for Mongo
 (#52566)

---
 .../mongo/src/airflow/providers/mongo/sensors/mongo.py     | 7 +------
 .../mongo/src/airflow/providers/mongo/version_compat.py    | 7 +++++++
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/providers/mongo/src/airflow/providers/mongo/sensors/mongo.py b/providers/mongo/src/airflow/providers/mongo/sensors/mongo.py
index 1d8a8a750ca02..56d6d60bc7b7e 100644
--- a/providers/mongo/src/airflow/providers/mongo/sensors/mongo.py
+++ b/providers/mongo/src/airflow/providers/mongo/sensors/mongo.py
@@ -21,12 +21,7 @@
 from typing import TYPE_CHECKING
 
 from airflow.providers.mongo.hooks.mongo import MongoHook
-from airflow.providers.mongo.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+from airflow.providers.mongo.version_compat import BaseSensorOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/mongo/src/airflow/providers/mongo/version_compat.py b/providers/mongo/src/airflow/providers/mongo/version_compat.py
index 48d122b669696..319d86aca697c 100644
--- a/providers/mongo/src/airflow/providers/mongo/version_compat.py
+++ b/providers/mongo/src/airflow/providers/mongo/version_compat.py
@@ -33,3 +33,10 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+
+__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseSensorOperator"]

From 4c7d43c4f30f6e09b4afd90e7c0a240cc32ea09b Mon Sep 17 00:00:00 2001
From: "Zhen-Lun (Kevin) Hong" <zhenlun.hong01@gmail.com>
Date: Mon, 30 Jun 2025 21:09:42 +0800
Subject: [PATCH 329/381] fix: enable iframe script execution (#52257)

* fix: enable iframe script execution

* fix: include vite env variables when transpiling typescripts

* fix: add explanations to sandbox settings

* fix: remove csp change
---
 airflow-core/src/airflow/ui/src/pages/Iframe.tsx   |  6 +++++-
 airflow-core/src/airflow/ui/src/pages/Security.tsx | 13 +++++++------
 scripts/ci/pre_commit/ts_compile_lint_ui.py        |  2 ++
 3 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/airflow-core/src/airflow/ui/src/pages/Iframe.tsx b/airflow-core/src/airflow/ui/src/pages/Iframe.tsx
index 9256a463b08b9..b6e3aa00cc911 100644
--- a/airflow-core/src/airflow/ui/src/pages/Iframe.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Iframe.tsx
@@ -44,10 +44,14 @@ export const Iframe = () => {
     return <ErrorPage />;
   }
 
+  // The following iframe sandbox setting is intentionally less restrictive.
+  // ONLY trusted contents can be framed within Iframe.
+  const sandbox = "allow-same-origin allow-forms";
+
   return (
     <Box flexGrow={1} m={-3}>
       <iframe
-        sandbox="allow-same-origin allow-forms"
+        sandbox={sandbox}
         src={iframeView.href}
         style={{ height: "100%", width: "100%" }}
         title={iframeView.name}
diff --git a/airflow-core/src/airflow/ui/src/pages/Security.tsx b/airflow-core/src/airflow/ui/src/pages/Security.tsx
index 3a6061478ebad..d984935ffdb31 100644
--- a/airflow-core/src/airflow/ui/src/pages/Security.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Security.tsx
@@ -43,14 +43,15 @@ export const Security = () => {
     return <ErrorPage />;
   }
 
+  // The following iframe sandbox setting is intentionally less restrictive.
+  // This is considered safe because the framed content originates from the Auth manager,
+  // which is part of the deployment of Airflow and trusted as per our security policy.
+  //    https://airflow.apache.org/docs/apache-airflow/stable/security/security_model.html
+  const sandbox = "allow-scripts allow-same-origin allow-forms";
+
   return (
     <Box flexGrow={1} m={-3}>
-      <iframe
-        sandbox="allow-same-origin allow-forms"
-        src={link.href}
-        style={{ height: "100%", width: "100%" }}
-        title={link.text}
-      />
+      <iframe sandbox={sandbox} src={link.href} style={{ height: "100%", width: "100%" }} title={link.text} />
     </Box>
   );
 };
diff --git a/scripts/ci/pre_commit/ts_compile_lint_ui.py b/scripts/ci/pre_commit/ts_compile_lint_ui.py
index 3e817285e2230..93fdcd149b75b 100755
--- a/scripts/ci/pre_commit/ts_compile_lint_ui.py
+++ b/scripts/ci/pre_commit/ts_compile_lint_ui.py
@@ -47,6 +47,8 @@
     all_non_yaml_files = [file for file in files if not file.endswith(".yaml")]
     print("All non-YAML files:", all_non_yaml_files)
     all_ts_files = [file for file in files if file.endswith(".ts") or file.endswith(".tsx")]
+    if all_ts_files:
+        all_ts_files.append("src/vite-env.d.ts")
     print("All TypeScript files:", all_ts_files)
 
     run_command(["pnpm", "config", "set", "store-dir", ".pnpm-store"], cwd=dir)

From 57dc55cfa885b15e5c213ce302b5d0facfdab8a5 Mon Sep 17 00:00:00 2001
From: Dev-iL <Gid.CTO+github@gmail.com>
Date: Mon, 30 Jun 2025 16:17:47 +0300
Subject: [PATCH 330/381] Add the `upgrade_sqlalchemy` breeze flag (#52559)

+ Fix some existing shellcheck violations
---
 Dockerfile.ci                                 |  20 ++-
 dev/breeze/doc/images/output_shell.svg        |  52 ++++----
 dev/breeze/doc/images/output_shell.txt        |   2 +-
 .../doc/images/output_testing_core-tests.svg  | 100 ++++++++-------
 .../doc/images/output_testing_core-tests.txt  |   2 +-
 .../images/output_testing_providers-tests.svg | 118 +++++++++---------
 .../images/output_testing_providers-tests.txt |   2 +-
 .../airflow_breeze/commands/common_options.py |   6 +
 .../commands/developer_commands.py            |   4 +
 .../commands/developer_commands_config.py     |   1 +
 .../commands/testing_commands.py              |   6 +
 .../commands/testing_commands_config.py       |   1 +
 .../src/airflow_breeze/params/shell_params.py |   2 +
 scripts/ci/docker-compose/devcontainer.env    |   1 +
 scripts/docker/entrypoint_ci.sh               |  21 +++-
 15 files changed, 200 insertions(+), 138 deletions(-)

diff --git a/Dockerfile.ci b/Dockerfile.ci
index 7f4955df13e54..70552cc35d754 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -995,13 +995,13 @@ function handle_mount_sources() {
         echo
         echo "${COLOR_BLUE}Mounted sources are removed, cleaning up mounted dist-info files${COLOR_RESET}"
         echo
-        rm -rf /usr/local/lib/python${PYTHON_MAJOR_MINOR_VERSION}/site-packages/apache_airflow*.dist-info/
+        rm -rf /usr/local/lib/python"${PYTHON_MAJOR_MINOR_VERSION}"/site-packages/apache_airflow*.dist-info/
     fi
 }
 
 function determine_airflow_to_use() {
     USE_AIRFLOW_VERSION="${USE_AIRFLOW_VERSION:=""}"
-    if [[ ${USE_AIRFLOW_VERSION} == "" && ${USE_DISTRIBUTIONS_FROM_DIST=} != "true" ]]; then
+    if [[ "${USE_AIRFLOW_VERSION}" == "" && "${USE_DISTRIBUTIONS_FROM_DIST}" != "true" ]]; then
         export PYTHONPATH=${AIRFLOW_SOURCES}
         echo
         echo "${COLOR_BLUE}Using airflow version from current sources${COLOR_RESET}"
@@ -1032,7 +1032,7 @@ function determine_airflow_to_use() {
         # for the use in parallel runs in docker containers--no-cache is needed - otherwise there is
         # possibility of overriding temporary environments by multiple parallel processes
         uv run --no-cache /opt/airflow/scripts/in_container/install_development_dependencies.py \
-           --constraint https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-${PYTHON_MAJOR_MINOR_VERSION}.txt
+           --constraint https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-"${PYTHON_MAJOR_MINOR_VERSION}".txt
         # Some packages might leave legacy typing module which causes test issues
         # shellcheck disable=SC2086
         ${PACKAGING_TOOL_CMD} uninstall ${EXTRA_UNINSTALL_FLAGS} typing || true
@@ -1067,6 +1067,19 @@ function check_boto_upgrade() {
     set +x
 }
 
+function check_upgrade_sqlalchemy() {
+    if [[ "${UPGRADE_SQLALCHEMY}" != "true" ]]; then
+        return
+    fi
+    echo
+    echo "${COLOR_BLUE}Upgrading sqlalchemy to the latest version to run tests with it${COLOR_RESET}"
+    echo
+    set -x
+    # shellcheck disable=SC2086
+    ${PACKAGING_TOOL_CMD} install ${EXTRA_INSTALL_FLAGS} --upgrade "sqlalchemy[asyncio]<2.1" "databricks-sqlalchemy>=2"
+    set +x
+}
+
 function check_downgrade_sqlalchemy() {
     if [[ ${DOWNGRADE_SQLALCHEMY=} != "true" ]]; then
         return
@@ -1200,6 +1213,7 @@ handle_mount_sources
 determine_airflow_to_use
 environment_initialization
 check_boto_upgrade
+check_upgrade_sqlalchemy
 check_downgrade_sqlalchemy
 check_downgrade_pendulum
 check_force_lowest_dependencies
diff --git a/dev/breeze/doc/images/output_shell.svg b/dev/breeze/doc/images/output_shell.svg
index bc3a6baecce93..8d11ddd644519 100644
--- a/dev/breeze/doc/images/output_shell.svg
+++ b/dev/breeze/doc/images/output_shell.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 4271.2" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 4295.599999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-shell-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="4220.2" />
+      <rect x="0" y="0" width="1463.0" height="4244.599999999999" />
     </clipPath>
     <clipPath id="breeze-shell-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -561,9 +561,12 @@
 <clipPath id="breeze-shell-line-171">
     <rect x="0" y="4173.9" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-shell-line-172">
+    <rect x="0" y="4198.3" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="4269.2" rx="8"/><text class="breeze-shell-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;shell</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="4293.6" rx="8"/><text class="breeze-shell-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;shell</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -725,27 +728,28 @@
 </text><text class="breeze-shell-r5" x="0" y="3655.6" textLength="1464" clip-path="url(#breeze-shell-line-149)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="3655.6" textLength="12.2" clip-path="url(#breeze-shell-line-149)">
 </text><text class="breeze-shell-r5" x="0" y="3680" textLength="24.4" clip-path="url(#breeze-shell-line-150)">╭─</text><text class="breeze-shell-r5" x="24.4" y="3680" textLength="610" clip-path="url(#breeze-shell-line-150)">&#160;Upgrading/downgrading/removing&#160;selected&#160;packages&#160;</text><text class="breeze-shell-r5" x="634.4" y="3680" textLength="805.2" clip-path="url(#breeze-shell-line-150)">──────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="3680" textLength="24.4" clip-path="url(#breeze-shell-line-150)">─╮</text><text class="breeze-shell-r1" x="1464" y="3680" textLength="12.2" clip-path="url(#breeze-shell-line-150)">
 </text><text class="breeze-shell-r5" x="0" y="3704.4" textLength="12.2" clip-path="url(#breeze-shell-line-151)">│</text><text class="breeze-shell-r4" x="24.4" y="3704.4" textLength="170.8" clip-path="url(#breeze-shell-line-151)">--upgrade-boto</text><text class="breeze-shell-r1" x="341.6" y="3704.4" textLength="866.2" clip-path="url(#breeze-shell-line-151)">Remove&#160;aiobotocore&#160;and&#160;upgrade&#160;botocore&#160;and&#160;boto&#160;to&#160;the&#160;latest&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y="3704.4" textLength="12.2" clip-path="url(#breeze-shell-line-151)">│</text><text class="breeze-shell-r1" x="1464" y="3704.4" textLength="12.2" clip-path="url(#breeze-shell-line-151)">
-</text><text class="breeze-shell-r5" x="0" y="3728.8" textLength="12.2" clip-path="url(#breeze-shell-line-152)">│</text><text class="breeze-shell-r4" x="24.4" y="3728.8" textLength="268.4" clip-path="url(#breeze-shell-line-152)">--downgrade-sqlalchemy</text><text class="breeze-shell-r1" x="341.6" y="3728.8" textLength="610" clip-path="url(#breeze-shell-line-152)">Downgrade&#160;SQLAlchemy&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y="3728.8" textLength="12.2" clip-path="url(#breeze-shell-line-152)">│</text><text class="breeze-shell-r1" x="1464" y="3728.8" textLength="12.2" clip-path="url(#breeze-shell-line-152)">
-</text><text class="breeze-shell-r5" x="0" y="3753.2" textLength="12.2" clip-path="url(#breeze-shell-line-153)">│</text><text class="breeze-shell-r4" x="24.4" y="3753.2" textLength="244" clip-path="url(#breeze-shell-line-153)">--downgrade-pendulum</text><text class="breeze-shell-r1" x="341.6" y="3753.2" textLength="585.6" clip-path="url(#breeze-shell-line-153)">Downgrade&#160;Pendulum&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y="3753.2" textLength="12.2" clip-path="url(#breeze-shell-line-153)">│</text><text class="breeze-shell-r1" x="1464" y="3753.2" textLength="12.2" clip-path="url(#breeze-shell-line-153)">
-</text><text class="breeze-shell-r5" x="0" y="3777.6" textLength="1464" clip-path="url(#breeze-shell-line-154)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="3777.6" textLength="12.2" clip-path="url(#breeze-shell-line-154)">
-</text><text class="breeze-shell-r5" x="0" y="3802" textLength="24.4" clip-path="url(#breeze-shell-line-155)">╭─</text><text class="breeze-shell-r5" x="24.4" y="3802" textLength="183" clip-path="url(#breeze-shell-line-155)">&#160;DB&#160;test&#160;flags&#160;</text><text class="breeze-shell-r5" x="207.4" y="3802" textLength="1232.2" clip-path="url(#breeze-shell-line-155)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="3802" textLength="24.4" clip-path="url(#breeze-shell-line-155)">─╮</text><text class="breeze-shell-r1" x="1464" y="3802" textLength="12.2" clip-path="url(#breeze-shell-line-155)">
-</text><text class="breeze-shell-r5" x="0" y="3826.4" textLength="12.2" clip-path="url(#breeze-shell-line-156)">│</text><text class="breeze-shell-r4" x="24.4" y="3826.4" textLength="231.8" clip-path="url(#breeze-shell-line-156)">--run-db-tests-only</text><text class="breeze-shell-r1" x="305" y="3826.4" textLength="475.8" clip-path="url(#breeze-shell-line-156)">Only&#160;runs&#160;tests&#160;that&#160;require&#160;a&#160;database</text><text class="breeze-shell-r5" x="1451.8" y="3826.4" textLength="12.2" clip-path="url(#breeze-shell-line-156)">│</text><text class="breeze-shell-r1" x="1464" y="3826.4" textLength="12.2" clip-path="url(#breeze-shell-line-156)">
-</text><text class="breeze-shell-r5" x="0" y="3850.8" textLength="12.2" clip-path="url(#breeze-shell-line-157)">│</text><text class="breeze-shell-r4" x="24.4" y="3850.8" textLength="183" clip-path="url(#breeze-shell-line-157)">--skip-db-tests</text><text class="breeze-shell-r1" x="305" y="3850.8" textLength="414.8" clip-path="url(#breeze-shell-line-157)">Skip&#160;tests&#160;that&#160;require&#160;a&#160;database</text><text class="breeze-shell-r5" x="1451.8" y="3850.8" textLength="12.2" clip-path="url(#breeze-shell-line-157)">│</text><text class="breeze-shell-r1" x="1464" y="3850.8" textLength="12.2" clip-path="url(#breeze-shell-line-157)">
-</text><text class="breeze-shell-r5" x="0" y="3875.2" textLength="1464" clip-path="url(#breeze-shell-line-158)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="3875.2" textLength="12.2" clip-path="url(#breeze-shell-line-158)">
-</text><text class="breeze-shell-r5" x="0" y="3899.6" textLength="24.4" clip-path="url(#breeze-shell-line-159)">╭─</text><text class="breeze-shell-r5" x="24.4" y="3899.6" textLength="183" clip-path="url(#breeze-shell-line-159)">&#160;Other&#160;options&#160;</text><text class="breeze-shell-r5" x="207.4" y="3899.6" textLength="1232.2" clip-path="url(#breeze-shell-line-159)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="3899.6" textLength="24.4" clip-path="url(#breeze-shell-line-159)">─╮</text><text class="breeze-shell-r1" x="1464" y="3899.6" textLength="12.2" clip-path="url(#breeze-shell-line-159)">
-</text><text class="breeze-shell-r5" x="0" y="3924" textLength="12.2" clip-path="url(#breeze-shell-line-160)">│</text><text class="breeze-shell-r4" x="24.4" y="3924" textLength="256.2" clip-path="url(#breeze-shell-line-160)">--forward-credentials</text><text class="breeze-shell-r6" x="305" y="3924" textLength="24.4" clip-path="url(#breeze-shell-line-160)">-f</text><text class="breeze-shell-r1" x="353.8" y="3924" textLength="634.4" clip-path="url(#breeze-shell-line-160)">Forward&#160;local&#160;credentials&#160;to&#160;container&#160;when&#160;running.</text><text class="breeze-shell-r5" x="1451.8" y="3924" textLength="12.2" clip-path="url(#breeze-shell-line-160)">│</text><text class="breeze-shell-r1" x="1464" y="3924" textLength="12.2" clip-path="url(#breeze-shell-line-160)">
-</text><text class="breeze-shell-r5" x="0" y="3948.4" textLength="12.2" clip-path="url(#breeze-shell-line-161)">│</text><text class="breeze-shell-r4" x="24.4" y="3948.4" textLength="122" clip-path="url(#breeze-shell-line-161)">--max-time</text><text class="breeze-shell-r1" x="353.8" y="3948.4" textLength="1049.2" clip-path="url(#breeze-shell-line-161)">Maximum&#160;time&#160;that&#160;the&#160;command&#160;should&#160;take&#160;-&#160;if&#160;it&#160;takes&#160;longer,&#160;the&#160;command&#160;will&#160;fail.</text><text class="breeze-shell-r5" x="1451.8" y="3948.4" textLength="12.2" clip-path="url(#breeze-shell-line-161)">│</text><text class="breeze-shell-r1" x="1464" y="3948.4" textLength="12.2" clip-path="url(#breeze-shell-line-161)">
-</text><text class="breeze-shell-r5" x="0" y="3972.8" textLength="12.2" clip-path="url(#breeze-shell-line-162)">│</text><text class="breeze-shell-r7" x="353.8" y="3972.8" textLength="1049.2" clip-path="url(#breeze-shell-line-162)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3972.8" textLength="12.2" clip-path="url(#breeze-shell-line-162)">│</text><text class="breeze-shell-r1" x="1464" y="3972.8" textLength="12.2" clip-path="url(#breeze-shell-line-162)">
-</text><text class="breeze-shell-r5" x="0" y="3997.2" textLength="12.2" clip-path="url(#breeze-shell-line-163)">│</text><text class="breeze-shell-r4" x="24.4" y="3997.2" textLength="219.6" clip-path="url(#breeze-shell-line-163)">--verbose-commands</text><text class="breeze-shell-r1" x="353.8" y="3997.2" textLength="414.8" clip-path="url(#breeze-shell-line-163)">Show&#160;details&#160;of&#160;commands&#160;executed.</text><text class="breeze-shell-r5" x="1451.8" y="3997.2" textLength="12.2" clip-path="url(#breeze-shell-line-163)">│</text><text class="breeze-shell-r1" x="1464" y="3997.2" textLength="12.2" clip-path="url(#breeze-shell-line-163)">
-</text><text class="breeze-shell-r5" x="0" y="4021.6" textLength="12.2" clip-path="url(#breeze-shell-line-164)">│</text><text class="breeze-shell-r4" x="24.4" y="4021.6" textLength="244" clip-path="url(#breeze-shell-line-164)">--keep-env-variables</text><text class="breeze-shell-r1" x="353.8" y="4021.6" textLength="1000.4" clip-path="url(#breeze-shell-line-164)">Do&#160;not&#160;clear&#160;environment&#160;variables&#160;that&#160;might&#160;have&#160;side&#160;effect&#160;while&#160;running&#160;tests</text><text class="breeze-shell-r5" x="1451.8" y="4021.6" textLength="12.2" clip-path="url(#breeze-shell-line-164)">│</text><text class="breeze-shell-r1" x="1464" y="4021.6" textLength="12.2" clip-path="url(#breeze-shell-line-164)">
-</text><text class="breeze-shell-r5" x="0" y="4046" textLength="12.2" clip-path="url(#breeze-shell-line-165)">│</text><text class="breeze-shell-r4" x="24.4" y="4046" textLength="183" clip-path="url(#breeze-shell-line-165)">--no-db-cleanup</text><text class="breeze-shell-r1" x="353.8" y="4046" textLength="597.8" clip-path="url(#breeze-shell-line-165)">Do&#160;not&#160;clear&#160;the&#160;database&#160;before&#160;each&#160;test&#160;module</text><text class="breeze-shell-r5" x="1451.8" y="4046" textLength="12.2" clip-path="url(#breeze-shell-line-165)">│</text><text class="breeze-shell-r1" x="1464" y="4046" textLength="12.2" clip-path="url(#breeze-shell-line-165)">
-</text><text class="breeze-shell-r5" x="0" y="4070.4" textLength="1464" clip-path="url(#breeze-shell-line-166)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="4070.4" textLength="12.2" clip-path="url(#breeze-shell-line-166)">
-</text><text class="breeze-shell-r5" x="0" y="4094.8" textLength="24.4" clip-path="url(#breeze-shell-line-167)">╭─</text><text class="breeze-shell-r5" x="24.4" y="4094.8" textLength="195.2" clip-path="url(#breeze-shell-line-167)">&#160;Common&#160;options&#160;</text><text class="breeze-shell-r5" x="219.6" y="4094.8" textLength="1220" clip-path="url(#breeze-shell-line-167)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="4094.8" textLength="24.4" clip-path="url(#breeze-shell-line-167)">─╮</text><text class="breeze-shell-r1" x="1464" y="4094.8" textLength="12.2" clip-path="url(#breeze-shell-line-167)">
-</text><text class="breeze-shell-r5" x="0" y="4119.2" textLength="12.2" clip-path="url(#breeze-shell-line-168)">│</text><text class="breeze-shell-r4" x="24.4" y="4119.2" textLength="97.6" clip-path="url(#breeze-shell-line-168)">--answer</text><text class="breeze-shell-r6" x="158.6" y="4119.2" textLength="24.4" clip-path="url(#breeze-shell-line-168)">-a</text><text class="breeze-shell-r1" x="207.4" y="4119.2" textLength="317.2" clip-path="url(#breeze-shell-line-168)">Force&#160;answer&#160;to&#160;questions.</text><text class="breeze-shell-r7" x="536.8" y="4119.2" textLength="353.8" clip-path="url(#breeze-shell-line-168)">(y&#160;|&#160;n&#160;|&#160;q&#160;|&#160;yes&#160;|&#160;no&#160;|&#160;quit)</text><text class="breeze-shell-r5" x="1451.8" y="4119.2" textLength="12.2" clip-path="url(#breeze-shell-line-168)">│</text><text class="breeze-shell-r1" x="1464" y="4119.2" textLength="12.2" clip-path="url(#breeze-shell-line-168)">
-</text><text class="breeze-shell-r5" x="0" y="4143.6" textLength="12.2" clip-path="url(#breeze-shell-line-169)">│</text><text class="breeze-shell-r4" x="24.4" y="4143.6" textLength="109.8" clip-path="url(#breeze-shell-line-169)">--dry-run</text><text class="breeze-shell-r6" x="158.6" y="4143.6" textLength="24.4" clip-path="url(#breeze-shell-line-169)">-D</text><text class="breeze-shell-r1" x="207.4" y="4143.6" textLength="719.8" clip-path="url(#breeze-shell-line-169)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-shell-r5" x="1451.8" y="4143.6" textLength="12.2" clip-path="url(#breeze-shell-line-169)">│</text><text class="breeze-shell-r1" x="1464" y="4143.6" textLength="12.2" clip-path="url(#breeze-shell-line-169)">
-</text><text class="breeze-shell-r5" x="0" y="4168" textLength="12.2" clip-path="url(#breeze-shell-line-170)">│</text><text class="breeze-shell-r4" x="24.4" y="4168" textLength="109.8" clip-path="url(#breeze-shell-line-170)">--verbose</text><text class="breeze-shell-r6" x="158.6" y="4168" textLength="24.4" clip-path="url(#breeze-shell-line-170)">-v</text><text class="breeze-shell-r1" x="207.4" y="4168" textLength="585.6" clip-path="url(#breeze-shell-line-170)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-shell-r5" x="1451.8" y="4168" textLength="12.2" clip-path="url(#breeze-shell-line-170)">│</text><text class="breeze-shell-r1" x="1464" y="4168" textLength="12.2" clip-path="url(#breeze-shell-line-170)">
-</text><text class="breeze-shell-r5" x="0" y="4192.4" textLength="12.2" clip-path="url(#breeze-shell-line-171)">│</text><text class="breeze-shell-r4" x="24.4" y="4192.4" textLength="73.2" clip-path="url(#breeze-shell-line-171)">--help</text><text class="breeze-shell-r6" x="158.6" y="4192.4" textLength="24.4" clip-path="url(#breeze-shell-line-171)">-h</text><text class="breeze-shell-r1" x="207.4" y="4192.4" textLength="329.4" clip-path="url(#breeze-shell-line-171)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-shell-r5" x="1451.8" y="4192.4" textLength="12.2" clip-path="url(#breeze-shell-line-171)">│</text><text class="breeze-shell-r1" x="1464" y="4192.4" textLength="12.2" clip-path="url(#breeze-shell-line-171)">
-</text><text class="breeze-shell-r5" x="0" y="4216.8" textLength="1464" clip-path="url(#breeze-shell-line-172)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="4216.8" textLength="12.2" clip-path="url(#breeze-shell-line-172)">
+</text><text class="breeze-shell-r5" x="0" y="3728.8" textLength="12.2" clip-path="url(#breeze-shell-line-152)">│</text><text class="breeze-shell-r4" x="24.4" y="3728.8" textLength="244" clip-path="url(#breeze-shell-line-152)">--upgrade-sqlalchemy</text><text class="breeze-shell-r1" x="341.6" y="3728.8" textLength="500.2" clip-path="url(#breeze-shell-line-152)">Upgrade&#160;SQLAlchemy&#160;to&#160;the&#160;latest&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y="3728.8" textLength="12.2" clip-path="url(#breeze-shell-line-152)">│</text><text class="breeze-shell-r1" x="1464" y="3728.8" textLength="12.2" clip-path="url(#breeze-shell-line-152)">
+</text><text class="breeze-shell-r5" x="0" y="3753.2" textLength="12.2" clip-path="url(#breeze-shell-line-153)">│</text><text class="breeze-shell-r4" x="24.4" y="3753.2" textLength="268.4" clip-path="url(#breeze-shell-line-153)">--downgrade-sqlalchemy</text><text class="breeze-shell-r1" x="341.6" y="3753.2" textLength="610" clip-path="url(#breeze-shell-line-153)">Downgrade&#160;SQLAlchemy&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y="3753.2" textLength="12.2" clip-path="url(#breeze-shell-line-153)">│</text><text class="breeze-shell-r1" x="1464" y="3753.2" textLength="12.2" clip-path="url(#breeze-shell-line-153)">
+</text><text class="breeze-shell-r5" x="0" y="3777.6" textLength="12.2" clip-path="url(#breeze-shell-line-154)">│</text><text class="breeze-shell-r4" x="24.4" y="3777.6" textLength="244" clip-path="url(#breeze-shell-line-154)">--downgrade-pendulum</text><text class="breeze-shell-r1" x="341.6" y="3777.6" textLength="585.6" clip-path="url(#breeze-shell-line-154)">Downgrade&#160;Pendulum&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y="3777.6" textLength="12.2" clip-path="url(#breeze-shell-line-154)">│</text><text class="breeze-shell-r1" x="1464" y="3777.6" textLength="12.2" clip-path="url(#breeze-shell-line-154)">
+</text><text class="breeze-shell-r5" x="0" y="3802" textLength="1464" clip-path="url(#breeze-shell-line-155)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="3802" textLength="12.2" clip-path="url(#breeze-shell-line-155)">
+</text><text class="breeze-shell-r5" x="0" y="3826.4" textLength="24.4" clip-path="url(#breeze-shell-line-156)">╭─</text><text class="breeze-shell-r5" x="24.4" y="3826.4" textLength="183" clip-path="url(#breeze-shell-line-156)">&#160;DB&#160;test&#160;flags&#160;</text><text class="breeze-shell-r5" x="207.4" y="3826.4" textLength="1232.2" clip-path="url(#breeze-shell-line-156)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="3826.4" textLength="24.4" clip-path="url(#breeze-shell-line-156)">─╮</text><text class="breeze-shell-r1" x="1464" y="3826.4" textLength="12.2" clip-path="url(#breeze-shell-line-156)">
+</text><text class="breeze-shell-r5" x="0" y="3850.8" textLength="12.2" clip-path="url(#breeze-shell-line-157)">│</text><text class="breeze-shell-r4" x="24.4" y="3850.8" textLength="231.8" clip-path="url(#breeze-shell-line-157)">--run-db-tests-only</text><text class="breeze-shell-r1" x="305" y="3850.8" textLength="475.8" clip-path="url(#breeze-shell-line-157)">Only&#160;runs&#160;tests&#160;that&#160;require&#160;a&#160;database</text><text class="breeze-shell-r5" x="1451.8" y="3850.8" textLength="12.2" clip-path="url(#breeze-shell-line-157)">│</text><text class="breeze-shell-r1" x="1464" y="3850.8" textLength="12.2" clip-path="url(#breeze-shell-line-157)">
+</text><text class="breeze-shell-r5" x="0" y="3875.2" textLength="12.2" clip-path="url(#breeze-shell-line-158)">│</text><text class="breeze-shell-r4" x="24.4" y="3875.2" textLength="183" clip-path="url(#breeze-shell-line-158)">--skip-db-tests</text><text class="breeze-shell-r1" x="305" y="3875.2" textLength="414.8" clip-path="url(#breeze-shell-line-158)">Skip&#160;tests&#160;that&#160;require&#160;a&#160;database</text><text class="breeze-shell-r5" x="1451.8" y="3875.2" textLength="12.2" clip-path="url(#breeze-shell-line-158)">│</text><text class="breeze-shell-r1" x="1464" y="3875.2" textLength="12.2" clip-path="url(#breeze-shell-line-158)">
+</text><text class="breeze-shell-r5" x="0" y="3899.6" textLength="1464" clip-path="url(#breeze-shell-line-159)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="3899.6" textLength="12.2" clip-path="url(#breeze-shell-line-159)">
+</text><text class="breeze-shell-r5" x="0" y="3924" textLength="24.4" clip-path="url(#breeze-shell-line-160)">╭─</text><text class="breeze-shell-r5" x="24.4" y="3924" textLength="183" clip-path="url(#breeze-shell-line-160)">&#160;Other&#160;options&#160;</text><text class="breeze-shell-r5" x="207.4" y="3924" textLength="1232.2" clip-path="url(#breeze-shell-line-160)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="3924" textLength="24.4" clip-path="url(#breeze-shell-line-160)">─╮</text><text class="breeze-shell-r1" x="1464" y="3924" textLength="12.2" clip-path="url(#breeze-shell-line-160)">
+</text><text class="breeze-shell-r5" x="0" y="3948.4" textLength="12.2" clip-path="url(#breeze-shell-line-161)">│</text><text class="breeze-shell-r4" x="24.4" y="3948.4" textLength="256.2" clip-path="url(#breeze-shell-line-161)">--forward-credentials</text><text class="breeze-shell-r6" x="305" y="3948.4" textLength="24.4" clip-path="url(#breeze-shell-line-161)">-f</text><text class="breeze-shell-r1" x="353.8" y="3948.4" textLength="634.4" clip-path="url(#breeze-shell-line-161)">Forward&#160;local&#160;credentials&#160;to&#160;container&#160;when&#160;running.</text><text class="breeze-shell-r5" x="1451.8" y="3948.4" textLength="12.2" clip-path="url(#breeze-shell-line-161)">│</text><text class="breeze-shell-r1" x="1464" y="3948.4" textLength="12.2" clip-path="url(#breeze-shell-line-161)">
+</text><text class="breeze-shell-r5" x="0" y="3972.8" textLength="12.2" clip-path="url(#breeze-shell-line-162)">│</text><text class="breeze-shell-r4" x="24.4" y="3972.8" textLength="122" clip-path="url(#breeze-shell-line-162)">--max-time</text><text class="breeze-shell-r1" x="353.8" y="3972.8" textLength="1049.2" clip-path="url(#breeze-shell-line-162)">Maximum&#160;time&#160;that&#160;the&#160;command&#160;should&#160;take&#160;-&#160;if&#160;it&#160;takes&#160;longer,&#160;the&#160;command&#160;will&#160;fail.</text><text class="breeze-shell-r5" x="1451.8" y="3972.8" textLength="12.2" clip-path="url(#breeze-shell-line-162)">│</text><text class="breeze-shell-r1" x="1464" y="3972.8" textLength="12.2" clip-path="url(#breeze-shell-line-162)">
+</text><text class="breeze-shell-r5" x="0" y="3997.2" textLength="12.2" clip-path="url(#breeze-shell-line-163)">│</text><text class="breeze-shell-r7" x="353.8" y="3997.2" textLength="1049.2" clip-path="url(#breeze-shell-line-163)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shell-r5" x="1451.8" y="3997.2" textLength="12.2" clip-path="url(#breeze-shell-line-163)">│</text><text class="breeze-shell-r1" x="1464" y="3997.2" textLength="12.2" clip-path="url(#breeze-shell-line-163)">
+</text><text class="breeze-shell-r5" x="0" y="4021.6" textLength="12.2" clip-path="url(#breeze-shell-line-164)">│</text><text class="breeze-shell-r4" x="24.4" y="4021.6" textLength="219.6" clip-path="url(#breeze-shell-line-164)">--verbose-commands</text><text class="breeze-shell-r1" x="353.8" y="4021.6" textLength="414.8" clip-path="url(#breeze-shell-line-164)">Show&#160;details&#160;of&#160;commands&#160;executed.</text><text class="breeze-shell-r5" x="1451.8" y="4021.6" textLength="12.2" clip-path="url(#breeze-shell-line-164)">│</text><text class="breeze-shell-r1" x="1464" y="4021.6" textLength="12.2" clip-path="url(#breeze-shell-line-164)">
+</text><text class="breeze-shell-r5" x="0" y="4046" textLength="12.2" clip-path="url(#breeze-shell-line-165)">│</text><text class="breeze-shell-r4" x="24.4" y="4046" textLength="244" clip-path="url(#breeze-shell-line-165)">--keep-env-variables</text><text class="breeze-shell-r1" x="353.8" y="4046" textLength="1000.4" clip-path="url(#breeze-shell-line-165)">Do&#160;not&#160;clear&#160;environment&#160;variables&#160;that&#160;might&#160;have&#160;side&#160;effect&#160;while&#160;running&#160;tests</text><text class="breeze-shell-r5" x="1451.8" y="4046" textLength="12.2" clip-path="url(#breeze-shell-line-165)">│</text><text class="breeze-shell-r1" x="1464" y="4046" textLength="12.2" clip-path="url(#breeze-shell-line-165)">
+</text><text class="breeze-shell-r5" x="0" y="4070.4" textLength="12.2" clip-path="url(#breeze-shell-line-166)">│</text><text class="breeze-shell-r4" x="24.4" y="4070.4" textLength="183" clip-path="url(#breeze-shell-line-166)">--no-db-cleanup</text><text class="breeze-shell-r1" x="353.8" y="4070.4" textLength="597.8" clip-path="url(#breeze-shell-line-166)">Do&#160;not&#160;clear&#160;the&#160;database&#160;before&#160;each&#160;test&#160;module</text><text class="breeze-shell-r5" x="1451.8" y="4070.4" textLength="12.2" clip-path="url(#breeze-shell-line-166)">│</text><text class="breeze-shell-r1" x="1464" y="4070.4" textLength="12.2" clip-path="url(#breeze-shell-line-166)">
+</text><text class="breeze-shell-r5" x="0" y="4094.8" textLength="1464" clip-path="url(#breeze-shell-line-167)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="4094.8" textLength="12.2" clip-path="url(#breeze-shell-line-167)">
+</text><text class="breeze-shell-r5" x="0" y="4119.2" textLength="24.4" clip-path="url(#breeze-shell-line-168)">╭─</text><text class="breeze-shell-r5" x="24.4" y="4119.2" textLength="195.2" clip-path="url(#breeze-shell-line-168)">&#160;Common&#160;options&#160;</text><text class="breeze-shell-r5" x="219.6" y="4119.2" textLength="1220" clip-path="url(#breeze-shell-line-168)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-shell-r5" x="1439.6" y="4119.2" textLength="24.4" clip-path="url(#breeze-shell-line-168)">─╮</text><text class="breeze-shell-r1" x="1464" y="4119.2" textLength="12.2" clip-path="url(#breeze-shell-line-168)">
+</text><text class="breeze-shell-r5" x="0" y="4143.6" textLength="12.2" clip-path="url(#breeze-shell-line-169)">│</text><text class="breeze-shell-r4" x="24.4" y="4143.6" textLength="97.6" clip-path="url(#breeze-shell-line-169)">--answer</text><text class="breeze-shell-r6" x="158.6" y="4143.6" textLength="24.4" clip-path="url(#breeze-shell-line-169)">-a</text><text class="breeze-shell-r1" x="207.4" y="4143.6" textLength="317.2" clip-path="url(#breeze-shell-line-169)">Force&#160;answer&#160;to&#160;questions.</text><text class="breeze-shell-r7" x="536.8" y="4143.6" textLength="353.8" clip-path="url(#breeze-shell-line-169)">(y&#160;|&#160;n&#160;|&#160;q&#160;|&#160;yes&#160;|&#160;no&#160;|&#160;quit)</text><text class="breeze-shell-r5" x="1451.8" y="4143.6" textLength="12.2" clip-path="url(#breeze-shell-line-169)">│</text><text class="breeze-shell-r1" x="1464" y="4143.6" textLength="12.2" clip-path="url(#breeze-shell-line-169)">
+</text><text class="breeze-shell-r5" x="0" y="4168" textLength="12.2" clip-path="url(#breeze-shell-line-170)">│</text><text class="breeze-shell-r4" x="24.4" y="4168" textLength="109.8" clip-path="url(#breeze-shell-line-170)">--dry-run</text><text class="breeze-shell-r6" x="158.6" y="4168" textLength="24.4" clip-path="url(#breeze-shell-line-170)">-D</text><text class="breeze-shell-r1" x="207.4" y="4168" textLength="719.8" clip-path="url(#breeze-shell-line-170)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-shell-r5" x="1451.8" y="4168" textLength="12.2" clip-path="url(#breeze-shell-line-170)">│</text><text class="breeze-shell-r1" x="1464" y="4168" textLength="12.2" clip-path="url(#breeze-shell-line-170)">
+</text><text class="breeze-shell-r5" x="0" y="4192.4" textLength="12.2" clip-path="url(#breeze-shell-line-171)">│</text><text class="breeze-shell-r4" x="24.4" y="4192.4" textLength="109.8" clip-path="url(#breeze-shell-line-171)">--verbose</text><text class="breeze-shell-r6" x="158.6" y="4192.4" textLength="24.4" clip-path="url(#breeze-shell-line-171)">-v</text><text class="breeze-shell-r1" x="207.4" y="4192.4" textLength="585.6" clip-path="url(#breeze-shell-line-171)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-shell-r5" x="1451.8" y="4192.4" textLength="12.2" clip-path="url(#breeze-shell-line-171)">│</text><text class="breeze-shell-r1" x="1464" y="4192.4" textLength="12.2" clip-path="url(#breeze-shell-line-171)">
+</text><text class="breeze-shell-r5" x="0" y="4216.8" textLength="12.2" clip-path="url(#breeze-shell-line-172)">│</text><text class="breeze-shell-r4" x="24.4" y="4216.8" textLength="73.2" clip-path="url(#breeze-shell-line-172)">--help</text><text class="breeze-shell-r6" x="158.6" y="4216.8" textLength="24.4" clip-path="url(#breeze-shell-line-172)">-h</text><text class="breeze-shell-r1" x="207.4" y="4216.8" textLength="329.4" clip-path="url(#breeze-shell-line-172)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-shell-r5" x="1451.8" y="4216.8" textLength="12.2" clip-path="url(#breeze-shell-line-172)">│</text><text class="breeze-shell-r1" x="1464" y="4216.8" textLength="12.2" clip-path="url(#breeze-shell-line-172)">
+</text><text class="breeze-shell-r5" x="0" y="4241.2" textLength="1464" clip-path="url(#breeze-shell-line-173)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="4241.2" textLength="12.2" clip-path="url(#breeze-shell-line-173)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_shell.txt b/dev/breeze/doc/images/output_shell.txt
index 50018caa69fa6..f414fb14356d4 100644
--- a/dev/breeze/doc/images/output_shell.txt
+++ b/dev/breeze/doc/images/output_shell.txt
@@ -1 +1 @@
-74abdb31412e7ee706db5f3ece5beabc
+963bec258918bc3fa63ac8fc0a1eb433
diff --git a/dev/breeze/doc/images/output_testing_core-tests.svg b/dev/breeze/doc/images/output_testing_core-tests.svg
index a0fd2c02655c0..bb96e323122a8 100644
--- a/dev/breeze/doc/images/output_testing_core-tests.svg
+++ b/dev/breeze/doc/images/output_testing_core-tests.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 2709.6" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 2734.0" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-testing-core-tests-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="2658.6" />
+      <rect x="0" y="0" width="1463.0" height="2683.0" />
     </clipPath>
     <clipPath id="breeze-testing-core-tests-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -369,9 +369,12 @@
 <clipPath id="breeze-testing-core-tests-line-107">
     <rect x="0" y="2612.3" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-testing-core-tests-line-108">
+    <rect x="0" y="2636.7" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2707.6" rx="8"/><text class="breeze-testing-core-tests-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;testing&#160;core-tests</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2732" rx="8"/><text class="breeze-testing-core-tests-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;testing&#160;core-tests</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -445,51 +448,52 @@
 </text><text class="breeze-testing-core-tests-r5" x="0" y="1508.4" textLength="1464" clip-path="url(#breeze-testing-core-tests-line-61)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-core-tests-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-61)">
 </text><text class="breeze-testing-core-tests-r5" x="0" y="1532.8" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-62)">╭─</text><text class="breeze-testing-core-tests-r5" x="24.4" y="1532.8" textLength="610" clip-path="url(#breeze-testing-core-tests-line-62)">&#160;Upgrading/downgrading/removing&#160;selected&#160;packages&#160;</text><text class="breeze-testing-core-tests-r5" x="634.4" y="1532.8" textLength="805.2" clip-path="url(#breeze-testing-core-tests-line-62)">──────────────────────────────────────────────────────────────────</text><text class="breeze-testing-core-tests-r5" x="1439.6" y="1532.8" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-62)">─╮</text><text class="breeze-testing-core-tests-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-62)">
 </text><text class="breeze-testing-core-tests-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-63)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1557.2" textLength="170.8" clip-path="url(#breeze-testing-core-tests-line-63)">--upgrade-boto</text><text class="breeze-testing-core-tests-r1" x="341.6" y="1557.2" textLength="866.2" clip-path="url(#breeze-testing-core-tests-line-63)">Remove&#160;aiobotocore&#160;and&#160;upgrade&#160;botocore&#160;and&#160;boto&#160;to&#160;the&#160;latest&#160;version.</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1557.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-63)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-63)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-64)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1581.6" textLength="268.4" clip-path="url(#breeze-testing-core-tests-line-64)">--downgrade-sqlalchemy</text><text class="breeze-testing-core-tests-r1" x="341.6" y="1581.6" textLength="610" clip-path="url(#breeze-testing-core-tests-line-64)">Downgrade&#160;SQLAlchemy&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1581.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-64)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-64)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-65)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1606" textLength="244" clip-path="url(#breeze-testing-core-tests-line-65)">--downgrade-pendulum</text><text class="breeze-testing-core-tests-r1" x="341.6" y="1606" textLength="585.6" clip-path="url(#breeze-testing-core-tests-line-65)">Downgrade&#160;Pendulum&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1606" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-65)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-65)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1630.4" textLength="1464" clip-path="url(#breeze-testing-core-tests-line-66)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-core-tests-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-66)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1654.8" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-67)">╭─</text><text class="breeze-testing-core-tests-r5" x="24.4" y="1654.8" textLength="402.6" clip-path="url(#breeze-testing-core-tests-line-67)">&#160;Advanced&#160;flag&#160;for&#160;tests&#160;command&#160;</text><text class="breeze-testing-core-tests-r5" x="427" y="1654.8" textLength="1012.6" clip-path="url(#breeze-testing-core-tests-line-67)">───────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-testing-core-tests-r5" x="1439.6" y="1654.8" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-67)">─╮</text><text class="breeze-testing-core-tests-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-67)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-68)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1679.2" textLength="231.8" clip-path="url(#breeze-testing-core-tests-line-68)">--github-repository</text><text class="breeze-testing-core-tests-r7" x="366" y="1679.2" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-68)">-g</text><text class="breeze-testing-core-tests-r1" x="414.8" y="1679.2" textLength="585.6" clip-path="url(#breeze-testing-core-tests-line-68)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-testing-core-tests-r6" x="1012.6" y="1679.2" textLength="73.2" clip-path="url(#breeze-testing-core-tests-line-68)">(TEXT)</text><text class="breeze-testing-core-tests-r5" x="1098" y="1679.2" textLength="305" clip-path="url(#breeze-testing-core-tests-line-68)">[default:&#160;apache/airflow]</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1679.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-68)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-68)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-69)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1703.6" textLength="183" clip-path="url(#breeze-testing-core-tests-line-69)">--mount-sources</text><text class="breeze-testing-core-tests-r1" x="414.8" y="1703.6" textLength="1024.8" clip-path="url(#breeze-testing-core-tests-line-69)">Choose&#160;scope&#160;of&#160;local&#160;sources&#160;that&#160;should&#160;be&#160;mounted,&#160;skipped,&#160;or&#160;removed&#160;(default&#160;=</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1703.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-69)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-69)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-70)">│</text><text class="breeze-testing-core-tests-r1" x="414.8" y="1728" textLength="1024.8" clip-path="url(#breeze-testing-core-tests-line-70)">selected).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1728" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-70)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-70)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-71)">│</text><text class="breeze-testing-core-tests-r6" x="414.8" y="1752.4" textLength="1024.8" clip-path="url(#breeze-testing-core-tests-line-71)">(selected&#160;|&#160;all&#160;|&#160;skip&#160;|&#160;remove&#160;|&#160;tests&#160;|&#160;providers-and-tests)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1752.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-71)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1752.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-71)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-72)">│</text><text class="breeze-testing-core-tests-r5" x="414.8" y="1776.8" textLength="1024.8" clip-path="url(#breeze-testing-core-tests-line-72)">[default:&#160;selected]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1776.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-72)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1776.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-72)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-73)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1801.2" textLength="317.2" clip-path="url(#breeze-testing-core-tests-line-73)">--skip-docker-compose-down</text><text class="breeze-testing-core-tests-r1" x="414.8" y="1801.2" textLength="549" clip-path="url(#breeze-testing-core-tests-line-73)">Skips&#160;running&#160;docker-compose&#160;down&#160;after&#160;tests</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1801.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-73)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-73)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1825.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-74)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1825.6" textLength="244" clip-path="url(#breeze-testing-core-tests-line-74)">--keep-env-variables</text><text class="breeze-testing-core-tests-r1" x="414.8" y="1825.6" textLength="1000.4" clip-path="url(#breeze-testing-core-tests-line-74)">Do&#160;not&#160;clear&#160;environment&#160;variables&#160;that&#160;might&#160;have&#160;side&#160;effect&#160;while&#160;running&#160;tests</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1825.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-74)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-74)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1850" textLength="1464" clip-path="url(#breeze-testing-core-tests-line-75)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-core-tests-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-75)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1874.4" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-76)">╭─</text><text class="breeze-testing-core-tests-r5" x="24.4" y="1874.4" textLength="622.2" clip-path="url(#breeze-testing-core-tests-line-76)">&#160;Advanced&#160;flag&#160;for&#160;installing&#160;airflow&#160;in&#160;container&#160;</text><text class="breeze-testing-core-tests-r5" x="646.6" y="1874.4" textLength="793" clip-path="url(#breeze-testing-core-tests-line-76)">─────────────────────────────────────────────────────────────────</text><text class="breeze-testing-core-tests-r5" x="1439.6" y="1874.4" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-76)">─╮</text><text class="breeze-testing-core-tests-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-76)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1898.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-77)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1898.8" textLength="378.2" clip-path="url(#breeze-testing-core-tests-line-77)">--airflow-constraints-reference</text><text class="breeze-testing-core-tests-r1" x="756.4" y="1898.8" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-77)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;airflow&#160;installation&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1898.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-77)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-77)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1923.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-78)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="1923.2" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-78)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1923.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-78)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-78)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-79)">│</text><text class="breeze-testing-core-tests-r6" x="756.4" y="1947.6" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-79)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1947.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-79)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1947.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-79)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-80)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1972" textLength="341.6" clip-path="url(#breeze-testing-core-tests-line-80)">--clean-airflow-installation</text><text class="breeze-testing-core-tests-r1" x="756.4" y="1972" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-80)">Clean&#160;the&#160;airflow&#160;installation&#160;before&#160;installing&#160;version</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1972" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-80)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-80)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-81)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="1996.4" textLength="158.6" clip-path="url(#breeze-testing-core-tests-line-81)">specified&#160;by&#160;</text><text class="breeze-testing-core-tests-r4" x="915" y="1996.4" textLength="256.2" clip-path="url(#breeze-testing-core-tests-line-81)">--use-airflow-version</text><text class="breeze-testing-core-tests-r1" x="1171.2" y="1996.4" textLength="268.4" clip-path="url(#breeze-testing-core-tests-line-81)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1996.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-81)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-81)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-82)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2020.8" textLength="329.4" clip-path="url(#breeze-testing-core-tests-line-82)">--force-lowest-dependencies</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2020.8" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-82)">Run&#160;tests&#160;for&#160;the&#160;lowest&#160;direct&#160;dependencies&#160;of&#160;Airflow&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2020.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-82)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-82)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-83)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2045.2" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-83)">or&#160;selected&#160;provider&#160;if&#160;`Provider[PROVIDER_ID]`&#160;is&#160;used&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2045.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-83)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-83)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-84)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2069.6" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-84)">as&#160;test&#160;type.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2069.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-84)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-84)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-85)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2094" textLength="414.8" clip-path="url(#breeze-testing-core-tests-line-85)">--install-airflow-with-constraints</text><text class="breeze-testing-core-tests-r1" x="439.2" y="2094" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-85)">/</text><text class="breeze-testing-core-tests-r4" x="451.4" y="2094" textLength="256.2" clip-path="url(#breeze-testing-core-tests-line-85)">--no-install-airflow-</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2094" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-85)">Install&#160;airflow&#160;in&#160;a&#160;separate&#160;step,&#160;with&#160;constraints&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2094" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-85)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-85)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-86)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2118.4" textLength="195.2" clip-path="url(#breeze-testing-core-tests-line-86)">with-constraints</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2118.4" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-86)">determined&#160;from&#160;package&#160;or&#160;airflow&#160;version.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2118.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-86)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-86)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-87)">│</text><text class="breeze-testing-core-tests-r5" x="756.4" y="2142.8" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-87)">[default:&#160;no-install-airflow-with-constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2142.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-87)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-87)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-88)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2167.2" textLength="256.2" clip-path="url(#breeze-testing-core-tests-line-88)">--distribution-format</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2167.2" textLength="231.8" clip-path="url(#breeze-testing-core-tests-line-88)">Format&#160;of&#160;packages.</text><text class="breeze-testing-core-tests-r6" x="1000.4" y="2167.2" textLength="268.4" clip-path="url(#breeze-testing-core-tests-line-88)">(wheel&#160;|&#160;sdist&#160;|&#160;both)</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2167.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-88)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-88)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2191.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-89)">│</text><text class="breeze-testing-core-tests-r5" x="756.4" y="2191.6" textLength="231.8" clip-path="url(#breeze-testing-core-tests-line-89)">[default:&#160;wheel]&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2191.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-89)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2191.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-89)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2216" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-90)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2216" textLength="256.2" clip-path="url(#breeze-testing-core-tests-line-90)">--use-airflow-version</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2216" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-90)">Use&#160;(reinstall&#160;at&#160;entry)&#160;Airflow&#160;version&#160;from&#160;PyPI.&#160;It&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2216" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-90)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2216" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-90)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2240.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-91)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2240.4" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-91)">can&#160;also&#160;be&#160;version&#160;(to&#160;install&#160;from&#160;PyPI),&#160;`none`,&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2240.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-91)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2240.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-91)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2264.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-92)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2264.8" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-92)">`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder,&#160;or&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2264.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-92)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2264.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-92)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2289.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-93)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2289.2" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-93)">VCS&#160;URL&#160;to&#160;install&#160;from&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2289.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-93)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2289.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-93)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2313.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-94)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2313.6" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-94)">(https://pip.pypa.io/en/stable/topics/vcs-support/).&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2313.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-94)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2313.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-94)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2338" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-95)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2338" textLength="97.6" clip-path="url(#breeze-testing-core-tests-line-95)">Implies&#160;</text><text class="breeze-testing-core-tests-r4" x="854" y="2338" textLength="183" clip-path="url(#breeze-testing-core-tests-line-95)">--mount-sources</text><text class="breeze-testing-core-tests-r1" x="1037" y="2338" textLength="402.6" clip-path="url(#breeze-testing-core-tests-line-95)">&#160;`remove`.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2338" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-95)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2338" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-95)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2362.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-96)">│</text><text class="breeze-testing-core-tests-r6" x="756.4" y="2362.4" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-96)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2362.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-96)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2362.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-96)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2386.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-97)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2386.8" textLength="244" clip-path="url(#breeze-testing-core-tests-line-97)">--allow-pre-releases</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2386.8" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-97)">Allow&#160;pre-releases&#160;of&#160;Airflow,&#160;task-sdk&#160;and&#160;providers&#160;to</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2386.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-97)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2386.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-97)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2411.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-98)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2411.2" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-98)">be&#160;installed.&#160;Set&#160;to&#160;true&#160;automatically&#160;for&#160;pre-release&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2411.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-98)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2411.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-98)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2435.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-99)">│</text><text class="breeze-testing-core-tests-r4" x="756.4" y="2435.6" textLength="256.2" clip-path="url(#breeze-testing-core-tests-line-99)">--use-airflow-version</text><text class="breeze-testing-core-tests-r1" x="1012.6" y="2435.6" textLength="427" clip-path="url(#breeze-testing-core-tests-line-99)">)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2435.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-99)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2435.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-99)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2460" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-100)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2460" textLength="353.8" clip-path="url(#breeze-testing-core-tests-line-100)">--use-distributions-from-dist</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2460" textLength="402.6" clip-path="url(#breeze-testing-core-tests-line-100)">Install&#160;all&#160;found&#160;distributions&#160;(</text><text class="breeze-testing-core-tests-r4" x="1159" y="2460" textLength="256.2" clip-path="url(#breeze-testing-core-tests-line-100)">--distribution-format</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2460" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-100)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2460" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-100)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2484.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-101)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2484.4" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-101)">determines&#160;type)&#160;from&#160;&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2484.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-101)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2484.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-101)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2508.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-102)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2508.8" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-102)">breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2508.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-102)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2508.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-102)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2533.2" textLength="1464" clip-path="url(#breeze-testing-core-tests-line-103)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-core-tests-r1" x="1464" y="2533.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-103)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2557.6" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-104)">╭─</text><text class="breeze-testing-core-tests-r5" x="24.4" y="2557.6" textLength="195.2" clip-path="url(#breeze-testing-core-tests-line-104)">&#160;Common&#160;options&#160;</text><text class="breeze-testing-core-tests-r5" x="219.6" y="2557.6" textLength="1220" clip-path="url(#breeze-testing-core-tests-line-104)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-testing-core-tests-r5" x="1439.6" y="2557.6" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-104)">─╮</text><text class="breeze-testing-core-tests-r1" x="1464" y="2557.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-104)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2582" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-105)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2582" textLength="109.8" clip-path="url(#breeze-testing-core-tests-line-105)">--dry-run</text><text class="breeze-testing-core-tests-r7" x="158.6" y="2582" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-105)">-D</text><text class="breeze-testing-core-tests-r1" x="207.4" y="2582" textLength="719.8" clip-path="url(#breeze-testing-core-tests-line-105)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2582" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-105)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2582" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-105)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2606.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-106)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2606.4" textLength="109.8" clip-path="url(#breeze-testing-core-tests-line-106)">--verbose</text><text class="breeze-testing-core-tests-r7" x="158.6" y="2606.4" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-106)">-v</text><text class="breeze-testing-core-tests-r1" x="207.4" y="2606.4" textLength="585.6" clip-path="url(#breeze-testing-core-tests-line-106)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2606.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-106)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2606.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-106)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2630.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-107)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2630.8" textLength="73.2" clip-path="url(#breeze-testing-core-tests-line-107)">--help</text><text class="breeze-testing-core-tests-r7" x="158.6" y="2630.8" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-107)">-h</text><text class="breeze-testing-core-tests-r1" x="207.4" y="2630.8" textLength="329.4" clip-path="url(#breeze-testing-core-tests-line-107)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2630.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-107)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2630.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-107)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2655.2" textLength="1464" clip-path="url(#breeze-testing-core-tests-line-108)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-core-tests-r1" x="1464" y="2655.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-108)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-64)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1581.6" textLength="244" clip-path="url(#breeze-testing-core-tests-line-64)">--upgrade-sqlalchemy</text><text class="breeze-testing-core-tests-r1" x="341.6" y="1581.6" textLength="500.2" clip-path="url(#breeze-testing-core-tests-line-64)">Upgrade&#160;SQLAlchemy&#160;to&#160;the&#160;latest&#160;version.</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1581.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-64)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-64)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-65)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1606" textLength="268.4" clip-path="url(#breeze-testing-core-tests-line-65)">--downgrade-sqlalchemy</text><text class="breeze-testing-core-tests-r1" x="341.6" y="1606" textLength="610" clip-path="url(#breeze-testing-core-tests-line-65)">Downgrade&#160;SQLAlchemy&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1606" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-65)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-65)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-66)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1630.4" textLength="244" clip-path="url(#breeze-testing-core-tests-line-66)">--downgrade-pendulum</text><text class="breeze-testing-core-tests-r1" x="341.6" y="1630.4" textLength="585.6" clip-path="url(#breeze-testing-core-tests-line-66)">Downgrade&#160;Pendulum&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1630.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-66)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-66)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1654.8" textLength="1464" clip-path="url(#breeze-testing-core-tests-line-67)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-core-tests-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-67)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1679.2" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-68)">╭─</text><text class="breeze-testing-core-tests-r5" x="24.4" y="1679.2" textLength="402.6" clip-path="url(#breeze-testing-core-tests-line-68)">&#160;Advanced&#160;flag&#160;for&#160;tests&#160;command&#160;</text><text class="breeze-testing-core-tests-r5" x="427" y="1679.2" textLength="1012.6" clip-path="url(#breeze-testing-core-tests-line-68)">───────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-testing-core-tests-r5" x="1439.6" y="1679.2" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-68)">─╮</text><text class="breeze-testing-core-tests-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-68)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-69)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1703.6" textLength="231.8" clip-path="url(#breeze-testing-core-tests-line-69)">--github-repository</text><text class="breeze-testing-core-tests-r7" x="366" y="1703.6" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-69)">-g</text><text class="breeze-testing-core-tests-r1" x="414.8" y="1703.6" textLength="585.6" clip-path="url(#breeze-testing-core-tests-line-69)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-testing-core-tests-r6" x="1012.6" y="1703.6" textLength="73.2" clip-path="url(#breeze-testing-core-tests-line-69)">(TEXT)</text><text class="breeze-testing-core-tests-r5" x="1098" y="1703.6" textLength="305" clip-path="url(#breeze-testing-core-tests-line-69)">[default:&#160;apache/airflow]</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1703.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-69)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-69)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-70)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1728" textLength="183" clip-path="url(#breeze-testing-core-tests-line-70)">--mount-sources</text><text class="breeze-testing-core-tests-r1" x="414.8" y="1728" textLength="1024.8" clip-path="url(#breeze-testing-core-tests-line-70)">Choose&#160;scope&#160;of&#160;local&#160;sources&#160;that&#160;should&#160;be&#160;mounted,&#160;skipped,&#160;or&#160;removed&#160;(default&#160;=</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1728" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-70)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-70)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-71)">│</text><text class="breeze-testing-core-tests-r1" x="414.8" y="1752.4" textLength="1024.8" clip-path="url(#breeze-testing-core-tests-line-71)">selected).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1752.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-71)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1752.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-71)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-72)">│</text><text class="breeze-testing-core-tests-r6" x="414.8" y="1776.8" textLength="1024.8" clip-path="url(#breeze-testing-core-tests-line-72)">(selected&#160;|&#160;all&#160;|&#160;skip&#160;|&#160;remove&#160;|&#160;tests&#160;|&#160;providers-and-tests)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1776.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-72)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1776.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-72)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-73)">│</text><text class="breeze-testing-core-tests-r5" x="414.8" y="1801.2" textLength="1024.8" clip-path="url(#breeze-testing-core-tests-line-73)">[default:&#160;selected]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1801.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-73)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-73)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1825.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-74)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1825.6" textLength="317.2" clip-path="url(#breeze-testing-core-tests-line-74)">--skip-docker-compose-down</text><text class="breeze-testing-core-tests-r1" x="414.8" y="1825.6" textLength="549" clip-path="url(#breeze-testing-core-tests-line-74)">Skips&#160;running&#160;docker-compose&#160;down&#160;after&#160;tests</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1825.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-74)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-74)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-75)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1850" textLength="244" clip-path="url(#breeze-testing-core-tests-line-75)">--keep-env-variables</text><text class="breeze-testing-core-tests-r1" x="414.8" y="1850" textLength="1000.4" clip-path="url(#breeze-testing-core-tests-line-75)">Do&#160;not&#160;clear&#160;environment&#160;variables&#160;that&#160;might&#160;have&#160;side&#160;effect&#160;while&#160;running&#160;tests</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1850" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-75)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-75)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1874.4" textLength="1464" clip-path="url(#breeze-testing-core-tests-line-76)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-core-tests-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-76)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1898.8" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-77)">╭─</text><text class="breeze-testing-core-tests-r5" x="24.4" y="1898.8" textLength="622.2" clip-path="url(#breeze-testing-core-tests-line-77)">&#160;Advanced&#160;flag&#160;for&#160;installing&#160;airflow&#160;in&#160;container&#160;</text><text class="breeze-testing-core-tests-r5" x="646.6" y="1898.8" textLength="793" clip-path="url(#breeze-testing-core-tests-line-77)">─────────────────────────────────────────────────────────────────</text><text class="breeze-testing-core-tests-r5" x="1439.6" y="1898.8" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-77)">─╮</text><text class="breeze-testing-core-tests-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-77)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1923.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-78)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1923.2" textLength="378.2" clip-path="url(#breeze-testing-core-tests-line-78)">--airflow-constraints-reference</text><text class="breeze-testing-core-tests-r1" x="756.4" y="1923.2" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-78)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;airflow&#160;installation&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1923.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-78)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-78)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-79)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="1947.6" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-79)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1947.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-79)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1947.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-79)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-80)">│</text><text class="breeze-testing-core-tests-r6" x="756.4" y="1972" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-80)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1972" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-80)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-80)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-81)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1996.4" textLength="341.6" clip-path="url(#breeze-testing-core-tests-line-81)">--clean-airflow-installation</text><text class="breeze-testing-core-tests-r1" x="756.4" y="1996.4" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-81)">Clean&#160;the&#160;airflow&#160;installation&#160;before&#160;installing&#160;version</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="1996.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-81)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-81)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-82)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2020.8" textLength="158.6" clip-path="url(#breeze-testing-core-tests-line-82)">specified&#160;by&#160;</text><text class="breeze-testing-core-tests-r4" x="915" y="2020.8" textLength="256.2" clip-path="url(#breeze-testing-core-tests-line-82)">--use-airflow-version</text><text class="breeze-testing-core-tests-r1" x="1171.2" y="2020.8" textLength="268.4" clip-path="url(#breeze-testing-core-tests-line-82)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2020.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-82)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-82)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-83)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2045.2" textLength="329.4" clip-path="url(#breeze-testing-core-tests-line-83)">--force-lowest-dependencies</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2045.2" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-83)">Run&#160;tests&#160;for&#160;the&#160;lowest&#160;direct&#160;dependencies&#160;of&#160;Airflow&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2045.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-83)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-83)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-84)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2069.6" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-84)">or&#160;selected&#160;provider&#160;if&#160;`Provider[PROVIDER_ID]`&#160;is&#160;used&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2069.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-84)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-84)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-85)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2094" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-85)">as&#160;test&#160;type.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2094" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-85)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-85)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-86)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2118.4" textLength="414.8" clip-path="url(#breeze-testing-core-tests-line-86)">--install-airflow-with-constraints</text><text class="breeze-testing-core-tests-r1" x="439.2" y="2118.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-86)">/</text><text class="breeze-testing-core-tests-r4" x="451.4" y="2118.4" textLength="256.2" clip-path="url(#breeze-testing-core-tests-line-86)">--no-install-airflow-</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2118.4" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-86)">Install&#160;airflow&#160;in&#160;a&#160;separate&#160;step,&#160;with&#160;constraints&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2118.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-86)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-86)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-87)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2142.8" textLength="195.2" clip-path="url(#breeze-testing-core-tests-line-87)">with-constraints</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2142.8" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-87)">determined&#160;from&#160;package&#160;or&#160;airflow&#160;version.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2142.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-87)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-87)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-88)">│</text><text class="breeze-testing-core-tests-r5" x="756.4" y="2167.2" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-88)">[default:&#160;no-install-airflow-with-constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2167.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-88)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-88)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2191.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-89)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2191.6" textLength="256.2" clip-path="url(#breeze-testing-core-tests-line-89)">--distribution-format</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2191.6" textLength="231.8" clip-path="url(#breeze-testing-core-tests-line-89)">Format&#160;of&#160;packages.</text><text class="breeze-testing-core-tests-r6" x="1000.4" y="2191.6" textLength="268.4" clip-path="url(#breeze-testing-core-tests-line-89)">(wheel&#160;|&#160;sdist&#160;|&#160;both)</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2191.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-89)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2191.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-89)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2216" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-90)">│</text><text class="breeze-testing-core-tests-r5" x="756.4" y="2216" textLength="231.8" clip-path="url(#breeze-testing-core-tests-line-90)">[default:&#160;wheel]&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2216" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-90)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2216" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-90)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2240.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-91)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2240.4" textLength="256.2" clip-path="url(#breeze-testing-core-tests-line-91)">--use-airflow-version</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2240.4" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-91)">Use&#160;(reinstall&#160;at&#160;entry)&#160;Airflow&#160;version&#160;from&#160;PyPI.&#160;It&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2240.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-91)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2240.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-91)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2264.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-92)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2264.8" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-92)">can&#160;also&#160;be&#160;version&#160;(to&#160;install&#160;from&#160;PyPI),&#160;`none`,&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2264.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-92)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2264.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-92)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2289.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-93)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2289.2" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-93)">`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder,&#160;or&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2289.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-93)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2289.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-93)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2313.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-94)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2313.6" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-94)">VCS&#160;URL&#160;to&#160;install&#160;from&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2313.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-94)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2313.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-94)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2338" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-95)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2338" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-95)">(https://pip.pypa.io/en/stable/topics/vcs-support/).&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2338" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-95)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2338" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-95)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2362.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-96)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2362.4" textLength="97.6" clip-path="url(#breeze-testing-core-tests-line-96)">Implies&#160;</text><text class="breeze-testing-core-tests-r4" x="854" y="2362.4" textLength="183" clip-path="url(#breeze-testing-core-tests-line-96)">--mount-sources</text><text class="breeze-testing-core-tests-r1" x="1037" y="2362.4" textLength="402.6" clip-path="url(#breeze-testing-core-tests-line-96)">&#160;`remove`.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2362.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-96)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2362.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-96)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2386.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-97)">│</text><text class="breeze-testing-core-tests-r6" x="756.4" y="2386.8" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-97)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2386.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-97)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2386.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-97)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2411.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-98)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2411.2" textLength="244" clip-path="url(#breeze-testing-core-tests-line-98)">--allow-pre-releases</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2411.2" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-98)">Allow&#160;pre-releases&#160;of&#160;Airflow,&#160;task-sdk&#160;and&#160;providers&#160;to</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2411.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-98)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2411.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-98)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2435.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-99)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2435.6" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-99)">be&#160;installed.&#160;Set&#160;to&#160;true&#160;automatically&#160;for&#160;pre-release&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2435.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-99)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2435.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-99)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2460" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-100)">│</text><text class="breeze-testing-core-tests-r4" x="756.4" y="2460" textLength="256.2" clip-path="url(#breeze-testing-core-tests-line-100)">--use-airflow-version</text><text class="breeze-testing-core-tests-r1" x="1012.6" y="2460" textLength="427" clip-path="url(#breeze-testing-core-tests-line-100)">)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2460" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-100)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2460" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-100)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2484.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-101)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2484.4" textLength="353.8" clip-path="url(#breeze-testing-core-tests-line-101)">--use-distributions-from-dist</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2484.4" textLength="402.6" clip-path="url(#breeze-testing-core-tests-line-101)">Install&#160;all&#160;found&#160;distributions&#160;(</text><text class="breeze-testing-core-tests-r4" x="1159" y="2484.4" textLength="256.2" clip-path="url(#breeze-testing-core-tests-line-101)">--distribution-format</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2484.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-101)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2484.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-101)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2508.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-102)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2508.8" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-102)">determines&#160;type)&#160;from&#160;&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2508.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-102)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2508.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-102)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2533.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-103)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2533.2" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-103)">breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2533.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-103)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2533.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-103)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2557.6" textLength="1464" clip-path="url(#breeze-testing-core-tests-line-104)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-core-tests-r1" x="1464" y="2557.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-104)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2582" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-105)">╭─</text><text class="breeze-testing-core-tests-r5" x="24.4" y="2582" textLength="195.2" clip-path="url(#breeze-testing-core-tests-line-105)">&#160;Common&#160;options&#160;</text><text class="breeze-testing-core-tests-r5" x="219.6" y="2582" textLength="1220" clip-path="url(#breeze-testing-core-tests-line-105)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-testing-core-tests-r5" x="1439.6" y="2582" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-105)">─╮</text><text class="breeze-testing-core-tests-r1" x="1464" y="2582" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-105)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2606.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-106)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2606.4" textLength="109.8" clip-path="url(#breeze-testing-core-tests-line-106)">--dry-run</text><text class="breeze-testing-core-tests-r7" x="158.6" y="2606.4" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-106)">-D</text><text class="breeze-testing-core-tests-r1" x="207.4" y="2606.4" textLength="719.8" clip-path="url(#breeze-testing-core-tests-line-106)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2606.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-106)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2606.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-106)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2630.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-107)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2630.8" textLength="109.8" clip-path="url(#breeze-testing-core-tests-line-107)">--verbose</text><text class="breeze-testing-core-tests-r7" x="158.6" y="2630.8" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-107)">-v</text><text class="breeze-testing-core-tests-r1" x="207.4" y="2630.8" textLength="585.6" clip-path="url(#breeze-testing-core-tests-line-107)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2630.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-107)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2630.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-107)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2655.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-108)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2655.2" textLength="73.2" clip-path="url(#breeze-testing-core-tests-line-108)">--help</text><text class="breeze-testing-core-tests-r7" x="158.6" y="2655.2" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-108)">-h</text><text class="breeze-testing-core-tests-r1" x="207.4" y="2655.2" textLength="329.4" clip-path="url(#breeze-testing-core-tests-line-108)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2655.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-108)">│</text><text class="breeze-testing-core-tests-r1" x="1464" y="2655.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-108)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2679.6" textLength="1464" clip-path="url(#breeze-testing-core-tests-line-109)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-core-tests-r1" x="1464" y="2679.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-109)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_testing_core-tests.txt b/dev/breeze/doc/images/output_testing_core-tests.txt
index b0457d281ad67..df03fd5e9b805 100644
--- a/dev/breeze/doc/images/output_testing_core-tests.txt
+++ b/dev/breeze/doc/images/output_testing_core-tests.txt
@@ -1 +1 @@
-13a8da75e6aa2615690b1c23c98fd8b8
+8179cec98112f74c7e612d9ce1534afc
diff --git a/dev/breeze/doc/images/output_testing_providers-tests.svg b/dev/breeze/doc/images/output_testing_providers-tests.svg
index 255b305aa81a3..09334af9a6e67 100644
--- a/dev/breeze/doc/images/output_testing_providers-tests.svg
+++ b/dev/breeze/doc/images/output_testing_providers-tests.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 2953.6" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 2978.0" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-testing-providers-tests-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="2902.6" />
+      <rect x="0" y="0" width="1463.0" height="2927.0" />
     </clipPath>
     <clipPath id="breeze-testing-providers-tests-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -399,9 +399,12 @@
 <clipPath id="breeze-testing-providers-tests-line-117">
     <rect x="0" y="2856.3" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-testing-providers-tests-line-118">
+    <rect x="0" y="2880.7" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2951.6" rx="8"/><text class="breeze-testing-providers-tests-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;testing&#160;providers-tests</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2976" rx="8"/><text class="breeze-testing-providers-tests-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;testing&#160;providers-tests</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -476,60 +479,61 @@
 </text><text class="breeze-testing-providers-tests-r5" x="0" y="1532.8" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-62)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-62)">
 </text><text class="breeze-testing-providers-tests-r5" x="0" y="1557.2" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-63)">╭─</text><text class="breeze-testing-providers-tests-r5" x="24.4" y="1557.2" textLength="610" clip-path="url(#breeze-testing-providers-tests-line-63)">&#160;Upgrading/downgrading/removing&#160;selected&#160;packages&#160;</text><text class="breeze-testing-providers-tests-r5" x="634.4" y="1557.2" textLength="805.2" clip-path="url(#breeze-testing-providers-tests-line-63)">──────────────────────────────────────────────────────────────────</text><text class="breeze-testing-providers-tests-r5" x="1439.6" y="1557.2" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-63)">─╮</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-63)">
 </text><text class="breeze-testing-providers-tests-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-64)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1581.6" textLength="170.8" clip-path="url(#breeze-testing-providers-tests-line-64)">--upgrade-boto</text><text class="breeze-testing-providers-tests-r1" x="341.6" y="1581.6" textLength="866.2" clip-path="url(#breeze-testing-providers-tests-line-64)">Remove&#160;aiobotocore&#160;and&#160;upgrade&#160;botocore&#160;and&#160;boto&#160;to&#160;the&#160;latest&#160;version.</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1581.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-64)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-64)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-65)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1606" textLength="268.4" clip-path="url(#breeze-testing-providers-tests-line-65)">--downgrade-sqlalchemy</text><text class="breeze-testing-providers-tests-r1" x="341.6" y="1606" textLength="610" clip-path="url(#breeze-testing-providers-tests-line-65)">Downgrade&#160;SQLAlchemy&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1606" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-65)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-65)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-66)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1630.4" textLength="244" clip-path="url(#breeze-testing-providers-tests-line-66)">--downgrade-pendulum</text><text class="breeze-testing-providers-tests-r1" x="341.6" y="1630.4" textLength="585.6" clip-path="url(#breeze-testing-providers-tests-line-66)">Downgrade&#160;Pendulum&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1630.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-66)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-66)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1654.8" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-67)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-67)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1679.2" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-68)">╭─</text><text class="breeze-testing-providers-tests-r5" x="24.4" y="1679.2" textLength="402.6" clip-path="url(#breeze-testing-providers-tests-line-68)">&#160;Advanced&#160;flag&#160;for&#160;tests&#160;command&#160;</text><text class="breeze-testing-providers-tests-r5" x="427" y="1679.2" textLength="1012.6" clip-path="url(#breeze-testing-providers-tests-line-68)">───────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-testing-providers-tests-r5" x="1439.6" y="1679.2" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-68)">─╮</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-68)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-69)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1703.6" textLength="231.8" clip-path="url(#breeze-testing-providers-tests-line-69)">--github-repository</text><text class="breeze-testing-providers-tests-r6" x="366" y="1703.6" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-69)">-g</text><text class="breeze-testing-providers-tests-r1" x="414.8" y="1703.6" textLength="585.6" clip-path="url(#breeze-testing-providers-tests-line-69)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-testing-providers-tests-r7" x="1012.6" y="1703.6" textLength="73.2" clip-path="url(#breeze-testing-providers-tests-line-69)">(TEXT)</text><text class="breeze-testing-providers-tests-r5" x="1098" y="1703.6" textLength="305" clip-path="url(#breeze-testing-providers-tests-line-69)">[default:&#160;apache/airflow]</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1703.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-69)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-69)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-70)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1728" textLength="183" clip-path="url(#breeze-testing-providers-tests-line-70)">--mount-sources</text><text class="breeze-testing-providers-tests-r1" x="414.8" y="1728" textLength="1024.8" clip-path="url(#breeze-testing-providers-tests-line-70)">Choose&#160;scope&#160;of&#160;local&#160;sources&#160;that&#160;should&#160;be&#160;mounted,&#160;skipped,&#160;or&#160;removed&#160;(default&#160;=</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1728" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-70)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-70)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-71)">│</text><text class="breeze-testing-providers-tests-r1" x="414.8" y="1752.4" textLength="1024.8" clip-path="url(#breeze-testing-providers-tests-line-71)">selected).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1752.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-71)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1752.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-71)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-72)">│</text><text class="breeze-testing-providers-tests-r7" x="414.8" y="1776.8" textLength="1024.8" clip-path="url(#breeze-testing-providers-tests-line-72)">(selected&#160;|&#160;all&#160;|&#160;skip&#160;|&#160;remove&#160;|&#160;tests&#160;|&#160;providers-and-tests)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1776.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-72)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1776.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-72)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-73)">│</text><text class="breeze-testing-providers-tests-r5" x="414.8" y="1801.2" textLength="1024.8" clip-path="url(#breeze-testing-providers-tests-line-73)">[default:&#160;selected]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1801.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-73)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-73)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1825.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-74)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1825.6" textLength="317.2" clip-path="url(#breeze-testing-providers-tests-line-74)">--skip-docker-compose-down</text><text class="breeze-testing-providers-tests-r1" x="414.8" y="1825.6" textLength="549" clip-path="url(#breeze-testing-providers-tests-line-74)">Skips&#160;running&#160;docker-compose&#160;down&#160;after&#160;tests</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1825.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-74)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-74)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-75)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1850" textLength="244" clip-path="url(#breeze-testing-providers-tests-line-75)">--keep-env-variables</text><text class="breeze-testing-providers-tests-r1" x="414.8" y="1850" textLength="1000.4" clip-path="url(#breeze-testing-providers-tests-line-75)">Do&#160;not&#160;clear&#160;environment&#160;variables&#160;that&#160;might&#160;have&#160;side&#160;effect&#160;while&#160;running&#160;tests</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1850" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-75)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-75)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1874.4" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-76)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-76)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1898.8" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-77)">╭─</text><text class="breeze-testing-providers-tests-r5" x="24.4" y="1898.8" textLength="622.2" clip-path="url(#breeze-testing-providers-tests-line-77)">&#160;Advanced&#160;flag&#160;for&#160;installing&#160;airflow&#160;in&#160;container&#160;</text><text class="breeze-testing-providers-tests-r5" x="646.6" y="1898.8" textLength="793" clip-path="url(#breeze-testing-providers-tests-line-77)">─────────────────────────────────────────────────────────────────</text><text class="breeze-testing-providers-tests-r5" x="1439.6" y="1898.8" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-77)">─╮</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-77)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1923.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-78)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1923.2" textLength="378.2" clip-path="url(#breeze-testing-providers-tests-line-78)">--airflow-constraints-reference</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="1923.2" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-78)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;airflow&#160;installation&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1923.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-78)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-78)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-79)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="1947.6" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-79)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1947.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-79)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1947.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-79)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-80)">│</text><text class="breeze-testing-providers-tests-r7" x="756.4" y="1972" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-80)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1972" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-80)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-80)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-81)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1996.4" textLength="341.6" clip-path="url(#breeze-testing-providers-tests-line-81)">--clean-airflow-installation</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="1996.4" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-81)">Clean&#160;the&#160;airflow&#160;installation&#160;before&#160;installing&#160;version</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1996.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-81)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-81)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-82)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2020.8" textLength="158.6" clip-path="url(#breeze-testing-providers-tests-line-82)">specified&#160;by&#160;</text><text class="breeze-testing-providers-tests-r4" x="915" y="2020.8" textLength="256.2" clip-path="url(#breeze-testing-providers-tests-line-82)">--use-airflow-version</text><text class="breeze-testing-providers-tests-r1" x="1171.2" y="2020.8" textLength="268.4" clip-path="url(#breeze-testing-providers-tests-line-82)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2020.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-82)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-82)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-83)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2045.2" textLength="329.4" clip-path="url(#breeze-testing-providers-tests-line-83)">--force-lowest-dependencies</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2045.2" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-83)">Run&#160;tests&#160;for&#160;the&#160;lowest&#160;direct&#160;dependencies&#160;of&#160;Airflow&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2045.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-83)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-83)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-84)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2069.6" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-84)">or&#160;selected&#160;provider&#160;if&#160;`Provider[PROVIDER_ID]`&#160;is&#160;used&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2069.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-84)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-84)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-85)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2094" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-85)">as&#160;test&#160;type.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2094" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-85)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-85)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-86)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2118.4" textLength="414.8" clip-path="url(#breeze-testing-providers-tests-line-86)">--install-airflow-with-constraints</text><text class="breeze-testing-providers-tests-r1" x="439.2" y="2118.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-86)">/</text><text class="breeze-testing-providers-tests-r4" x="451.4" y="2118.4" textLength="256.2" clip-path="url(#breeze-testing-providers-tests-line-86)">--no-install-airflow-</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2118.4" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-86)">Install&#160;airflow&#160;in&#160;a&#160;separate&#160;step,&#160;with&#160;constraints&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2118.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-86)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-86)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-87)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2142.8" textLength="195.2" clip-path="url(#breeze-testing-providers-tests-line-87)">with-constraints</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2142.8" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-87)">determined&#160;from&#160;package&#160;or&#160;airflow&#160;version.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2142.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-87)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-87)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-88)">│</text><text class="breeze-testing-providers-tests-r5" x="756.4" y="2167.2" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-88)">[default:&#160;no-install-airflow-with-constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2167.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-88)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-88)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2191.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-89)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2191.6" textLength="256.2" clip-path="url(#breeze-testing-providers-tests-line-89)">--distribution-format</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2191.6" textLength="231.8" clip-path="url(#breeze-testing-providers-tests-line-89)">Format&#160;of&#160;packages.</text><text class="breeze-testing-providers-tests-r7" x="1000.4" y="2191.6" textLength="268.4" clip-path="url(#breeze-testing-providers-tests-line-89)">(wheel&#160;|&#160;sdist&#160;|&#160;both)</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2191.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-89)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2191.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-89)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2216" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-90)">│</text><text class="breeze-testing-providers-tests-r5" x="756.4" y="2216" textLength="231.8" clip-path="url(#breeze-testing-providers-tests-line-90)">[default:&#160;wheel]&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2216" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-90)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2216" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-90)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2240.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-91)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2240.4" textLength="256.2" clip-path="url(#breeze-testing-providers-tests-line-91)">--use-airflow-version</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2240.4" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-91)">Use&#160;(reinstall&#160;at&#160;entry)&#160;Airflow&#160;version&#160;from&#160;PyPI.&#160;It&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2240.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-91)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2240.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-91)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2264.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-92)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2264.8" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-92)">can&#160;also&#160;be&#160;version&#160;(to&#160;install&#160;from&#160;PyPI),&#160;`none`,&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2264.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-92)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2264.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-92)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2289.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-93)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2289.2" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-93)">`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder,&#160;or&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2289.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-93)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2289.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-93)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2313.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-94)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2313.6" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-94)">VCS&#160;URL&#160;to&#160;install&#160;from&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2313.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-94)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2313.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-94)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2338" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-95)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2338" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-95)">(https://pip.pypa.io/en/stable/topics/vcs-support/).&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2338" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-95)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2338" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-95)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2362.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-96)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2362.4" textLength="97.6" clip-path="url(#breeze-testing-providers-tests-line-96)">Implies&#160;</text><text class="breeze-testing-providers-tests-r4" x="854" y="2362.4" textLength="183" clip-path="url(#breeze-testing-providers-tests-line-96)">--mount-sources</text><text class="breeze-testing-providers-tests-r1" x="1037" y="2362.4" textLength="402.6" clip-path="url(#breeze-testing-providers-tests-line-96)">&#160;`remove`.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2362.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-96)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2362.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-96)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2386.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-97)">│</text><text class="breeze-testing-providers-tests-r7" x="756.4" y="2386.8" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-97)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2386.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-97)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2386.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-97)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2411.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-98)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2411.2" textLength="244" clip-path="url(#breeze-testing-providers-tests-line-98)">--allow-pre-releases</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2411.2" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-98)">Allow&#160;pre-releases&#160;of&#160;Airflow,&#160;task-sdk&#160;and&#160;providers&#160;to</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2411.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-98)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2411.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-98)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2435.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-99)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2435.6" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-99)">be&#160;installed.&#160;Set&#160;to&#160;true&#160;automatically&#160;for&#160;pre-release&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2435.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-99)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2435.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-99)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2460" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-100)">│</text><text class="breeze-testing-providers-tests-r4" x="756.4" y="2460" textLength="256.2" clip-path="url(#breeze-testing-providers-tests-line-100)">--use-airflow-version</text><text class="breeze-testing-providers-tests-r1" x="1012.6" y="2460" textLength="427" clip-path="url(#breeze-testing-providers-tests-line-100)">)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2460" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-100)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2460" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-100)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2484.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-101)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2484.4" textLength="353.8" clip-path="url(#breeze-testing-providers-tests-line-101)">--use-distributions-from-dist</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2484.4" textLength="402.6" clip-path="url(#breeze-testing-providers-tests-line-101)">Install&#160;all&#160;found&#160;distributions&#160;(</text><text class="breeze-testing-providers-tests-r4" x="1159" y="2484.4" textLength="256.2" clip-path="url(#breeze-testing-providers-tests-line-101)">--distribution-format</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2484.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-101)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2484.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-101)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2508.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-102)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2508.8" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-102)">determines&#160;type)&#160;from&#160;&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2508.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-102)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2508.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-102)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2533.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-103)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2533.2" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-103)">breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2533.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-103)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2533.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-103)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2557.6" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-104)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2557.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-104)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2582" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-105)">╭─</text><text class="breeze-testing-providers-tests-r5" x="24.4" y="2582" textLength="512.4" clip-path="url(#breeze-testing-providers-tests-line-105)">&#160;Advanced&#160;flag&#160;for&#160;provider&#160;tests&#160;command&#160;</text><text class="breeze-testing-providers-tests-r5" x="536.8" y="2582" textLength="902.8" clip-path="url(#breeze-testing-providers-tests-line-105)">──────────────────────────────────────────────────────────────────────────</text><text class="breeze-testing-providers-tests-r5" x="1439.6" y="2582" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-105)">─╮</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2582" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-105)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2606.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-106)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2606.4" textLength="244" clip-path="url(#breeze-testing-providers-tests-line-106)">--excluded-providers</text><text class="breeze-testing-providers-tests-r1" x="463.6" y="2606.4" textLength="976" clip-path="url(#breeze-testing-providers-tests-line-106)">JSON-string&#160;of&#160;dictionary&#160;containing&#160;excluded&#160;providers&#160;per&#160;python&#160;version&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2606.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-106)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2606.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-106)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2630.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-107)">│</text><text class="breeze-testing-providers-tests-r1" x="463.6" y="2630.8" textLength="976" clip-path="url(#breeze-testing-providers-tests-line-107)">({&#x27;3.12&#x27;:&#160;[&#x27;provider&#x27;]})&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2630.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-107)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2630.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-107)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2655.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-108)">│</text><text class="breeze-testing-providers-tests-r7" x="463.6" y="2655.2" textLength="976" clip-path="url(#breeze-testing-providers-tests-line-108)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2655.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-108)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2655.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-108)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2679.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-109)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2679.6" textLength="390.4" clip-path="url(#breeze-testing-providers-tests-line-109)">--providers-constraints-location</text><text class="breeze-testing-providers-tests-r1" x="463.6" y="2679.6" textLength="927.2" clip-path="url(#breeze-testing-providers-tests-line-109)">Location&#160;of&#160;providers&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;local&#160;context&#160;file).</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2679.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-109)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2679.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-109)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2704" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-110)">│</text><text class="breeze-testing-providers-tests-r7" x="463.6" y="2704" textLength="927.2" clip-path="url(#breeze-testing-providers-tests-line-110)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2704" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-110)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2704" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-110)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2728.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-111)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2728.4" textLength="341.6" clip-path="url(#breeze-testing-providers-tests-line-111)">--providers-skip-constraints</text><text class="breeze-testing-providers-tests-r1" x="463.6" y="2728.4" textLength="597.8" clip-path="url(#breeze-testing-providers-tests-line-111)">Do&#160;not&#160;use&#160;constraints&#160;when&#160;installing&#160;providers.</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2728.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-111)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2728.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-111)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2752.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-112)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2752.8" textLength="195.2" clip-path="url(#breeze-testing-providers-tests-line-112)">--skip-providers</text><text class="breeze-testing-providers-tests-r1" x="463.6" y="2752.8" textLength="768.6" clip-path="url(#breeze-testing-providers-tests-line-112)">Space-separated&#160;list&#160;of&#160;provider&#160;ids&#160;to&#160;skip&#160;when&#160;running&#160;tests</text><text class="breeze-testing-providers-tests-r7" x="1244.4" y="2752.8" textLength="73.2" clip-path="url(#breeze-testing-providers-tests-line-112)">(TEXT)</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2752.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-112)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2752.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-112)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2777.2" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-113)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2777.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-113)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2801.6" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-114)">╭─</text><text class="breeze-testing-providers-tests-r5" x="24.4" y="2801.6" textLength="195.2" clip-path="url(#breeze-testing-providers-tests-line-114)">&#160;Common&#160;options&#160;</text><text class="breeze-testing-providers-tests-r5" x="219.6" y="2801.6" textLength="1220" clip-path="url(#breeze-testing-providers-tests-line-114)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-testing-providers-tests-r5" x="1439.6" y="2801.6" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-114)">─╮</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2801.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-114)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2826" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-115)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2826" textLength="109.8" clip-path="url(#breeze-testing-providers-tests-line-115)">--dry-run</text><text class="breeze-testing-providers-tests-r6" x="158.6" y="2826" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-115)">-D</text><text class="breeze-testing-providers-tests-r1" x="207.4" y="2826" textLength="719.8" clip-path="url(#breeze-testing-providers-tests-line-115)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2826" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-115)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2826" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-115)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2850.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-116)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2850.4" textLength="109.8" clip-path="url(#breeze-testing-providers-tests-line-116)">--verbose</text><text class="breeze-testing-providers-tests-r6" x="158.6" y="2850.4" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-116)">-v</text><text class="breeze-testing-providers-tests-r1" x="207.4" y="2850.4" textLength="585.6" clip-path="url(#breeze-testing-providers-tests-line-116)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2850.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-116)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2850.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-116)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2874.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-117)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2874.8" textLength="73.2" clip-path="url(#breeze-testing-providers-tests-line-117)">--help</text><text class="breeze-testing-providers-tests-r6" x="158.6" y="2874.8" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-117)">-h</text><text class="breeze-testing-providers-tests-r1" x="207.4" y="2874.8" textLength="329.4" clip-path="url(#breeze-testing-providers-tests-line-117)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2874.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-117)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2874.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-117)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2899.2" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-118)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2899.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-118)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-65)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1606" textLength="244" clip-path="url(#breeze-testing-providers-tests-line-65)">--upgrade-sqlalchemy</text><text class="breeze-testing-providers-tests-r1" x="341.6" y="1606" textLength="500.2" clip-path="url(#breeze-testing-providers-tests-line-65)">Upgrade&#160;SQLAlchemy&#160;to&#160;the&#160;latest&#160;version.</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1606" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-65)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-65)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-66)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1630.4" textLength="268.4" clip-path="url(#breeze-testing-providers-tests-line-66)">--downgrade-sqlalchemy</text><text class="breeze-testing-providers-tests-r1" x="341.6" y="1630.4" textLength="610" clip-path="url(#breeze-testing-providers-tests-line-66)">Downgrade&#160;SQLAlchemy&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1630.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-66)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-66)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-67)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1654.8" textLength="244" clip-path="url(#breeze-testing-providers-tests-line-67)">--downgrade-pendulum</text><text class="breeze-testing-providers-tests-r1" x="341.6" y="1654.8" textLength="585.6" clip-path="url(#breeze-testing-providers-tests-line-67)">Downgrade&#160;Pendulum&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1654.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-67)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-67)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1679.2" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-68)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-68)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1703.6" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-69)">╭─</text><text class="breeze-testing-providers-tests-r5" x="24.4" y="1703.6" textLength="402.6" clip-path="url(#breeze-testing-providers-tests-line-69)">&#160;Advanced&#160;flag&#160;for&#160;tests&#160;command&#160;</text><text class="breeze-testing-providers-tests-r5" x="427" y="1703.6" textLength="1012.6" clip-path="url(#breeze-testing-providers-tests-line-69)">───────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-testing-providers-tests-r5" x="1439.6" y="1703.6" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-69)">─╮</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1703.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-69)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-70)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1728" textLength="231.8" clip-path="url(#breeze-testing-providers-tests-line-70)">--github-repository</text><text class="breeze-testing-providers-tests-r6" x="366" y="1728" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-70)">-g</text><text class="breeze-testing-providers-tests-r1" x="414.8" y="1728" textLength="585.6" clip-path="url(#breeze-testing-providers-tests-line-70)">GitHub&#160;repository&#160;used&#160;to&#160;pull,&#160;push&#160;run&#160;images.</text><text class="breeze-testing-providers-tests-r7" x="1012.6" y="1728" textLength="73.2" clip-path="url(#breeze-testing-providers-tests-line-70)">(TEXT)</text><text class="breeze-testing-providers-tests-r5" x="1098" y="1728" textLength="305" clip-path="url(#breeze-testing-providers-tests-line-70)">[default:&#160;apache/airflow]</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1728" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-70)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-70)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-71)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1752.4" textLength="183" clip-path="url(#breeze-testing-providers-tests-line-71)">--mount-sources</text><text class="breeze-testing-providers-tests-r1" x="414.8" y="1752.4" textLength="1024.8" clip-path="url(#breeze-testing-providers-tests-line-71)">Choose&#160;scope&#160;of&#160;local&#160;sources&#160;that&#160;should&#160;be&#160;mounted,&#160;skipped,&#160;or&#160;removed&#160;(default&#160;=</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1752.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-71)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1752.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-71)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-72)">│</text><text class="breeze-testing-providers-tests-r1" x="414.8" y="1776.8" textLength="1024.8" clip-path="url(#breeze-testing-providers-tests-line-72)">selected).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1776.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-72)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1776.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-72)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-73)">│</text><text class="breeze-testing-providers-tests-r7" x="414.8" y="1801.2" textLength="1024.8" clip-path="url(#breeze-testing-providers-tests-line-73)">(selected&#160;|&#160;all&#160;|&#160;skip&#160;|&#160;remove&#160;|&#160;tests&#160;|&#160;providers-and-tests)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1801.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-73)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-73)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1825.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-74)">│</text><text class="breeze-testing-providers-tests-r5" x="414.8" y="1825.6" textLength="1024.8" clip-path="url(#breeze-testing-providers-tests-line-74)">[default:&#160;selected]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1825.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-74)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-74)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-75)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1850" textLength="317.2" clip-path="url(#breeze-testing-providers-tests-line-75)">--skip-docker-compose-down</text><text class="breeze-testing-providers-tests-r1" x="414.8" y="1850" textLength="549" clip-path="url(#breeze-testing-providers-tests-line-75)">Skips&#160;running&#160;docker-compose&#160;down&#160;after&#160;tests</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1850" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-75)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-75)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-76)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1874.4" textLength="244" clip-path="url(#breeze-testing-providers-tests-line-76)">--keep-env-variables</text><text class="breeze-testing-providers-tests-r1" x="414.8" y="1874.4" textLength="1000.4" clip-path="url(#breeze-testing-providers-tests-line-76)">Do&#160;not&#160;clear&#160;environment&#160;variables&#160;that&#160;might&#160;have&#160;side&#160;effect&#160;while&#160;running&#160;tests</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1874.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-76)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-76)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1898.8" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-77)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-77)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1923.2" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-78)">╭─</text><text class="breeze-testing-providers-tests-r5" x="24.4" y="1923.2" textLength="622.2" clip-path="url(#breeze-testing-providers-tests-line-78)">&#160;Advanced&#160;flag&#160;for&#160;installing&#160;airflow&#160;in&#160;container&#160;</text><text class="breeze-testing-providers-tests-r5" x="646.6" y="1923.2" textLength="793" clip-path="url(#breeze-testing-providers-tests-line-78)">─────────────────────────────────────────────────────────────────</text><text class="breeze-testing-providers-tests-r5" x="1439.6" y="1923.2" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-78)">─╮</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-78)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-79)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1947.6" textLength="378.2" clip-path="url(#breeze-testing-providers-tests-line-79)">--airflow-constraints-reference</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="1947.6" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-79)">Constraint&#160;reference&#160;to&#160;use&#160;for&#160;airflow&#160;installation&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1947.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-79)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1947.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-79)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-80)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="1972" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-80)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1972" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-80)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-80)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-81)">│</text><text class="breeze-testing-providers-tests-r7" x="756.4" y="1996.4" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-81)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="1996.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-81)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-81)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-82)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2020.8" textLength="341.6" clip-path="url(#breeze-testing-providers-tests-line-82)">--clean-airflow-installation</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2020.8" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-82)">Clean&#160;the&#160;airflow&#160;installation&#160;before&#160;installing&#160;version</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2020.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-82)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-82)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-83)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2045.2" textLength="158.6" clip-path="url(#breeze-testing-providers-tests-line-83)">specified&#160;by&#160;</text><text class="breeze-testing-providers-tests-r4" x="915" y="2045.2" textLength="256.2" clip-path="url(#breeze-testing-providers-tests-line-83)">--use-airflow-version</text><text class="breeze-testing-providers-tests-r1" x="1171.2" y="2045.2" textLength="268.4" clip-path="url(#breeze-testing-providers-tests-line-83)">.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2045.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-83)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-83)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-84)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2069.6" textLength="329.4" clip-path="url(#breeze-testing-providers-tests-line-84)">--force-lowest-dependencies</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2069.6" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-84)">Run&#160;tests&#160;for&#160;the&#160;lowest&#160;direct&#160;dependencies&#160;of&#160;Airflow&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2069.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-84)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-84)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-85)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2094" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-85)">or&#160;selected&#160;provider&#160;if&#160;`Provider[PROVIDER_ID]`&#160;is&#160;used&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2094" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-85)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-85)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-86)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2118.4" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-86)">as&#160;test&#160;type.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2118.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-86)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-86)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-87)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2142.8" textLength="414.8" clip-path="url(#breeze-testing-providers-tests-line-87)">--install-airflow-with-constraints</text><text class="breeze-testing-providers-tests-r1" x="439.2" y="2142.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-87)">/</text><text class="breeze-testing-providers-tests-r4" x="451.4" y="2142.8" textLength="256.2" clip-path="url(#breeze-testing-providers-tests-line-87)">--no-install-airflow-</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2142.8" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-87)">Install&#160;airflow&#160;in&#160;a&#160;separate&#160;step,&#160;with&#160;constraints&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2142.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-87)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-87)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-88)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2167.2" textLength="195.2" clip-path="url(#breeze-testing-providers-tests-line-88)">with-constraints</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2167.2" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-88)">determined&#160;from&#160;package&#160;or&#160;airflow&#160;version.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2167.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-88)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-88)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2191.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-89)">│</text><text class="breeze-testing-providers-tests-r5" x="756.4" y="2191.6" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-89)">[default:&#160;no-install-airflow-with-constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2191.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-89)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2191.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-89)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2216" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-90)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2216" textLength="256.2" clip-path="url(#breeze-testing-providers-tests-line-90)">--distribution-format</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2216" textLength="231.8" clip-path="url(#breeze-testing-providers-tests-line-90)">Format&#160;of&#160;packages.</text><text class="breeze-testing-providers-tests-r7" x="1000.4" y="2216" textLength="268.4" clip-path="url(#breeze-testing-providers-tests-line-90)">(wheel&#160;|&#160;sdist&#160;|&#160;both)</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2216" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-90)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2216" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-90)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2240.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-91)">│</text><text class="breeze-testing-providers-tests-r5" x="756.4" y="2240.4" textLength="231.8" clip-path="url(#breeze-testing-providers-tests-line-91)">[default:&#160;wheel]&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2240.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-91)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2240.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-91)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2264.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-92)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2264.8" textLength="256.2" clip-path="url(#breeze-testing-providers-tests-line-92)">--use-airflow-version</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2264.8" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-92)">Use&#160;(reinstall&#160;at&#160;entry)&#160;Airflow&#160;version&#160;from&#160;PyPI.&#160;It&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2264.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-92)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2264.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-92)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2289.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-93)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2289.2" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-93)">can&#160;also&#160;be&#160;version&#160;(to&#160;install&#160;from&#160;PyPI),&#160;`none`,&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2289.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-93)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2289.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-93)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2313.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-94)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2313.6" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-94)">`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder,&#160;or&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2313.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-94)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2313.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-94)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2338" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-95)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2338" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-95)">VCS&#160;URL&#160;to&#160;install&#160;from&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2338" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-95)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2338" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-95)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2362.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-96)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2362.4" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-96)">(https://pip.pypa.io/en/stable/topics/vcs-support/).&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2362.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-96)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2362.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-96)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2386.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-97)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2386.8" textLength="97.6" clip-path="url(#breeze-testing-providers-tests-line-97)">Implies&#160;</text><text class="breeze-testing-providers-tests-r4" x="854" y="2386.8" textLength="183" clip-path="url(#breeze-testing-providers-tests-line-97)">--mount-sources</text><text class="breeze-testing-providers-tests-r1" x="1037" y="2386.8" textLength="402.6" clip-path="url(#breeze-testing-providers-tests-line-97)">&#160;`remove`.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2386.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-97)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2386.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-97)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2411.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-98)">│</text><text class="breeze-testing-providers-tests-r7" x="756.4" y="2411.2" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-98)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2411.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-98)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2411.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-98)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2435.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-99)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2435.6" textLength="244" clip-path="url(#breeze-testing-providers-tests-line-99)">--allow-pre-releases</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2435.6" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-99)">Allow&#160;pre-releases&#160;of&#160;Airflow,&#160;task-sdk&#160;and&#160;providers&#160;to</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2435.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-99)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2435.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-99)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2460" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-100)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2460" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-100)">be&#160;installed.&#160;Set&#160;to&#160;true&#160;automatically&#160;for&#160;pre-release&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2460" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-100)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2460" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-100)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2484.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-101)">│</text><text class="breeze-testing-providers-tests-r4" x="756.4" y="2484.4" textLength="256.2" clip-path="url(#breeze-testing-providers-tests-line-101)">--use-airflow-version</text><text class="breeze-testing-providers-tests-r1" x="1012.6" y="2484.4" textLength="427" clip-path="url(#breeze-testing-providers-tests-line-101)">)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2484.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-101)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2484.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-101)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2508.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-102)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2508.8" textLength="353.8" clip-path="url(#breeze-testing-providers-tests-line-102)">--use-distributions-from-dist</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2508.8" textLength="402.6" clip-path="url(#breeze-testing-providers-tests-line-102)">Install&#160;all&#160;found&#160;distributions&#160;(</text><text class="breeze-testing-providers-tests-r4" x="1159" y="2508.8" textLength="256.2" clip-path="url(#breeze-testing-providers-tests-line-102)">--distribution-format</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2508.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-102)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2508.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-102)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2533.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-103)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2533.2" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-103)">determines&#160;type)&#160;from&#160;&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2533.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-103)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2533.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-103)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2557.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-104)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2557.6" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-104)">breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2557.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-104)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2557.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-104)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2582" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-105)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2582" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-105)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2606.4" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-106)">╭─</text><text class="breeze-testing-providers-tests-r5" x="24.4" y="2606.4" textLength="512.4" clip-path="url(#breeze-testing-providers-tests-line-106)">&#160;Advanced&#160;flag&#160;for&#160;provider&#160;tests&#160;command&#160;</text><text class="breeze-testing-providers-tests-r5" x="536.8" y="2606.4" textLength="902.8" clip-path="url(#breeze-testing-providers-tests-line-106)">──────────────────────────────────────────────────────────────────────────</text><text class="breeze-testing-providers-tests-r5" x="1439.6" y="2606.4" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-106)">─╮</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2606.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-106)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2630.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-107)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2630.8" textLength="244" clip-path="url(#breeze-testing-providers-tests-line-107)">--excluded-providers</text><text class="breeze-testing-providers-tests-r1" x="463.6" y="2630.8" textLength="976" clip-path="url(#breeze-testing-providers-tests-line-107)">JSON-string&#160;of&#160;dictionary&#160;containing&#160;excluded&#160;providers&#160;per&#160;python&#160;version&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2630.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-107)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2630.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-107)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2655.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-108)">│</text><text class="breeze-testing-providers-tests-r1" x="463.6" y="2655.2" textLength="976" clip-path="url(#breeze-testing-providers-tests-line-108)">({&#x27;3.12&#x27;:&#160;[&#x27;provider&#x27;]})&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2655.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-108)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2655.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-108)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2679.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-109)">│</text><text class="breeze-testing-providers-tests-r7" x="463.6" y="2679.6" textLength="976" clip-path="url(#breeze-testing-providers-tests-line-109)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2679.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-109)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2679.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-109)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2704" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-110)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2704" textLength="390.4" clip-path="url(#breeze-testing-providers-tests-line-110)">--providers-constraints-location</text><text class="breeze-testing-providers-tests-r1" x="463.6" y="2704" textLength="927.2" clip-path="url(#breeze-testing-providers-tests-line-110)">Location&#160;of&#160;providers&#160;constraints&#160;to&#160;use&#160;(remote&#160;URL&#160;or&#160;local&#160;context&#160;file).</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2704" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-110)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2704" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-110)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2728.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-111)">│</text><text class="breeze-testing-providers-tests-r7" x="463.6" y="2728.4" textLength="927.2" clip-path="url(#breeze-testing-providers-tests-line-111)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2728.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-111)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2728.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-111)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2752.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-112)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2752.8" textLength="341.6" clip-path="url(#breeze-testing-providers-tests-line-112)">--providers-skip-constraints</text><text class="breeze-testing-providers-tests-r1" x="463.6" y="2752.8" textLength="597.8" clip-path="url(#breeze-testing-providers-tests-line-112)">Do&#160;not&#160;use&#160;constraints&#160;when&#160;installing&#160;providers.</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2752.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-112)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2752.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-112)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2777.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-113)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2777.2" textLength="195.2" clip-path="url(#breeze-testing-providers-tests-line-113)">--skip-providers</text><text class="breeze-testing-providers-tests-r1" x="463.6" y="2777.2" textLength="768.6" clip-path="url(#breeze-testing-providers-tests-line-113)">Space-separated&#160;list&#160;of&#160;provider&#160;ids&#160;to&#160;skip&#160;when&#160;running&#160;tests</text><text class="breeze-testing-providers-tests-r7" x="1244.4" y="2777.2" textLength="73.2" clip-path="url(#breeze-testing-providers-tests-line-113)">(TEXT)</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2777.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-113)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2777.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-113)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2801.6" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-114)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2801.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-114)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2826" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-115)">╭─</text><text class="breeze-testing-providers-tests-r5" x="24.4" y="2826" textLength="195.2" clip-path="url(#breeze-testing-providers-tests-line-115)">&#160;Common&#160;options&#160;</text><text class="breeze-testing-providers-tests-r5" x="219.6" y="2826" textLength="1220" clip-path="url(#breeze-testing-providers-tests-line-115)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-testing-providers-tests-r5" x="1439.6" y="2826" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-115)">─╮</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2826" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-115)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2850.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-116)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2850.4" textLength="109.8" clip-path="url(#breeze-testing-providers-tests-line-116)">--dry-run</text><text class="breeze-testing-providers-tests-r6" x="158.6" y="2850.4" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-116)">-D</text><text class="breeze-testing-providers-tests-r1" x="207.4" y="2850.4" textLength="719.8" clip-path="url(#breeze-testing-providers-tests-line-116)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2850.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-116)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2850.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-116)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2874.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-117)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2874.8" textLength="109.8" clip-path="url(#breeze-testing-providers-tests-line-117)">--verbose</text><text class="breeze-testing-providers-tests-r6" x="158.6" y="2874.8" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-117)">-v</text><text class="breeze-testing-providers-tests-r1" x="207.4" y="2874.8" textLength="585.6" clip-path="url(#breeze-testing-providers-tests-line-117)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2874.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-117)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2874.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-117)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2899.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-118)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2899.2" textLength="73.2" clip-path="url(#breeze-testing-providers-tests-line-118)">--help</text><text class="breeze-testing-providers-tests-r6" x="158.6" y="2899.2" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-118)">-h</text><text class="breeze-testing-providers-tests-r1" x="207.4" y="2899.2" textLength="329.4" clip-path="url(#breeze-testing-providers-tests-line-118)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2899.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-118)">│</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2899.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-118)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2923.6" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-119)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2923.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-119)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_testing_providers-tests.txt b/dev/breeze/doc/images/output_testing_providers-tests.txt
index d0cfab2be5135..15f84fb9e4ea0 100644
--- a/dev/breeze/doc/images/output_testing_providers-tests.txt
+++ b/dev/breeze/doc/images/output_testing_providers-tests.txt
@@ -1 +1 @@
-7e1ef96b4f18b709f93d71e988cd2887
+fed6b33e1f70b07c02f02483b66eec5a
diff --git a/dev/breeze/src/airflow_breeze/commands/common_options.py b/dev/breeze/src/airflow_breeze/commands/common_options.py
index ab52a567f3d29..5d9f6bb8f3438 100644
--- a/dev/breeze/src/airflow_breeze/commands/common_options.py
+++ b/dev/breeze/src/airflow_breeze/commands/common_options.py
@@ -396,6 +396,12 @@ def _set_default_from_parent(ctx: click.core.Context, option: click.core.Option,
     is_flag=True,
     envvar="UPGRADE_BOTO",
 )
+option_upgrade_sqlalchemy = click.option(
+    "--upgrade-sqlalchemy",
+    help="Upgrade SQLAlchemy to the latest version.",
+    is_flag=True,
+    envvar="UPGRADE_SQLALCHEMY",
+)
 option_use_uv = click.option(
     "--use-uv/--no-use-uv",
     is_flag=True,
diff --git a/dev/breeze/src/airflow_breeze/commands/developer_commands.py b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
index 85e593e8cf0c2..b3b2b96af71fd 100644
--- a/dev/breeze/src/airflow_breeze/commands/developer_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
@@ -67,6 +67,7 @@
     option_standalone_dag_processor,
     option_tty,
     option_upgrade_boto,
+    option_upgrade_sqlalchemy,
     option_use_airflow_version,
     option_use_uv,
     option_uv_http_timeout,
@@ -314,6 +315,7 @@ def run(self):
 @option_warn_image_upgrade_needed
 @option_standalone_dag_processor
 @option_upgrade_boto
+@option_upgrade_sqlalchemy
 @option_use_airflow_version
 @option_allow_pre_releases
 @option_use_distributions_from_dist
@@ -373,6 +375,7 @@ def shell(
     test_type: str | None,
     tty: str,
     upgrade_boto: bool,
+    upgrade_sqlalchemy: bool,
     use_airflow_version: str | None,
     allow_pre_releases: bool,
     use_distributions_from_dist: bool,
@@ -445,6 +448,7 @@ def shell(
         test_type=test_type,
         tty=tty,
         upgrade_boto=upgrade_boto,
+        upgrade_sqlalchemy=upgrade_sqlalchemy,
         use_airflow_version=use_airflow_version,
         use_distributions_from_dist=use_distributions_from_dist,
         use_uv=use_uv,
diff --git a/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py b/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py
index 445601d191bc6..dfb01ff83edc9 100644
--- a/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py
@@ -169,6 +169,7 @@
             "name": "Upgrading/downgrading/removing selected packages",
             "options": [
                 "--upgrade-boto",
+                "--upgrade-sqlalchemy",
                 "--downgrade-sqlalchemy",
                 "--downgrade-pendulum",
             ],
diff --git a/dev/breeze/src/airflow_breeze/commands/testing_commands.py b/dev/breeze/src/airflow_breeze/commands/testing_commands.py
index 3efcb54353b21..8cbea9586bded 100644
--- a/dev/breeze/src/airflow_breeze/commands/testing_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/testing_commands.py
@@ -57,6 +57,7 @@
     option_skip_cleanup,
     option_skip_db_tests,
     option_upgrade_boto,
+    option_upgrade_sqlalchemy,
     option_use_airflow_version,
     option_verbose,
 )
@@ -620,6 +621,7 @@ def _verify_parallelism_parameters(
 @option_test_type_core_group
 @option_total_test_timeout
 @option_upgrade_boto
+@option_upgrade_sqlalchemy
 @option_use_airflow_version
 @option_allow_pre_releases
 @option_use_distributions_from_dist
@@ -685,6 +687,7 @@ def core_tests(**kwargs):
 @option_test_type_providers_group
 @option_total_test_timeout
 @option_upgrade_boto
+@option_upgrade_sqlalchemy
 @option_use_airflow_version
 @option_allow_pre_releases
 @option_use_distributions_from_dist
@@ -748,6 +751,7 @@ def task_sdk_tests(**kwargs):
         test_type=ALL_TEST_TYPE,
         total_test_timeout=DEFAULT_TOTAL_TEST_TIMEOUT,
         upgrade_boto=False,
+        upgrade_sqlalchemy=False,
         use_airflow_version=None,
         use_distributions_from_dist=False,
         **kwargs,
@@ -1291,6 +1295,7 @@ def _run_test_command(
     test_type: str,
     total_test_timeout: int,
     upgrade_boto: bool,
+    upgrade_sqlalchemy: bool,
     use_airflow_version: str | None,
     use_distributions_from_dist: bool,
     use_xdist: bool,
@@ -1337,6 +1342,7 @@ def _run_test_command(
         test_type=test_type,
         test_group=test_group,
         upgrade_boto=upgrade_boto,
+        upgrade_sqlalchemy=upgrade_sqlalchemy,
         use_airflow_version=use_airflow_version,
         use_distributions_from_dist=use_distributions_from_dist,
         use_xdist=use_xdist,
diff --git a/dev/breeze/src/airflow_breeze/commands/testing_commands_config.py b/dev/breeze/src/airflow_breeze/commands/testing_commands_config.py
index f4cfc212eeaba..2491a34f886e4 100644
--- a/dev/breeze/src/airflow_breeze/commands/testing_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/testing_commands_config.py
@@ -65,6 +65,7 @@
     "name": "Upgrading/downgrading/removing selected packages",
     "options": [
         "--upgrade-boto",
+        "--upgrade-sqlalchemy",
         "--downgrade-sqlalchemy",
         "--downgrade-pendulum",
     ],
diff --git a/dev/breeze/src/airflow_breeze/params/shell_params.py b/dev/breeze/src/airflow_breeze/params/shell_params.py
index 628001fd111e6..b0fee42cea569 100644
--- a/dev/breeze/src/airflow_breeze/params/shell_params.py
+++ b/dev/breeze/src/airflow_breeze/params/shell_params.py
@@ -211,6 +211,7 @@ class ShellParams:
     test_group: GroupOfTests | None = None
     tty: str = "auto"
     upgrade_boto: bool = False
+    upgrade_sqlalchemy: bool = False
     use_airflow_version: str | None = None
     use_distributions_from_dist: bool = False
     use_uv: bool = False
@@ -642,6 +643,7 @@ def env_variables_for_docker_commands(self) -> dict[str, str]:
         _set_var(_env, "TEST_TYPE", self.test_type, "")
         _set_var(_env, "TEST_GROUP", str(self.test_group.value) if self.test_group else "")
         _set_var(_env, "UPGRADE_BOTO", self.upgrade_boto)
+        _set_var(_env, "UPGRADE_SQLALCHEMY", self.upgrade_sqlalchemy)
         _set_var(_env, "USE_AIRFLOW_VERSION", self.use_airflow_version, "")
         _set_var(_env, "USE_DISTRIBUTIONS_FROM_DIST", self.use_distributions_from_dist)
         _set_var(_env, "USE_UV", self.use_uv)
diff --git a/scripts/ci/docker-compose/devcontainer.env b/scripts/ci/docker-compose/devcontainer.env
index f639e6882d814..ec715ba740168 100644
--- a/scripts/ci/docker-compose/devcontainer.env
+++ b/scripts/ci/docker-compose/devcontainer.env
@@ -67,6 +67,7 @@ START_AIRFLOW="false"
 SUSPENDED_PROVIDERS_FOLDERS=""
 TEST_TYPE=
 UPGRADE_BOTO="false"
+UPGRADE_SQLALCHEMY="false"
 UPGRADE_RANDOM_INDICATOR_STRING=""
 VERBOSE="false"
 VERBOSE_COMMANDS="false"
diff --git a/scripts/docker/entrypoint_ci.sh b/scripts/docker/entrypoint_ci.sh
index 2588ab43e717f..e215ce642a0df 100755
--- a/scripts/docker/entrypoint_ci.sh
+++ b/scripts/docker/entrypoint_ci.sh
@@ -201,14 +201,14 @@ function handle_mount_sources() {
         echo
         echo "${COLOR_BLUE}Mounted sources are removed, cleaning up mounted dist-info files${COLOR_RESET}"
         echo
-        rm -rf /usr/local/lib/python${PYTHON_MAJOR_MINOR_VERSION}/site-packages/apache_airflow*.dist-info/
+        rm -rf /usr/local/lib/python"${PYTHON_MAJOR_MINOR_VERSION}"/site-packages/apache_airflow*.dist-info/
     fi
 }
 
 # Determine which airflow version to use
 function determine_airflow_to_use() {
     USE_AIRFLOW_VERSION="${USE_AIRFLOW_VERSION:=""}"
-    if [[ ${USE_AIRFLOW_VERSION} == "" && ${USE_DISTRIBUTIONS_FROM_DIST=} != "true" ]]; then
+    if [[ "${USE_AIRFLOW_VERSION}" == "" && "${USE_DISTRIBUTIONS_FROM_DIST}" != "true" ]]; then
         export PYTHONPATH=${AIRFLOW_SOURCES}
         echo
         echo "${COLOR_BLUE}Using airflow version from current sources${COLOR_RESET}"
@@ -239,7 +239,7 @@ function determine_airflow_to_use() {
         # for the use in parallel runs in docker containers--no-cache is needed - otherwise there is
         # possibility of overriding temporary environments by multiple parallel processes
         uv run --no-cache /opt/airflow/scripts/in_container/install_development_dependencies.py \
-           --constraint https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-${PYTHON_MAJOR_MINOR_VERSION}.txt
+           --constraint https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-"${PYTHON_MAJOR_MINOR_VERSION}".txt
         # Some packages might leave legacy typing module which causes test issues
         # shellcheck disable=SC2086
         ${PACKAGING_TOOL_CMD} uninstall ${EXTRA_UNINSTALL_FLAGS} typing || true
@@ -275,6 +275,20 @@ function check_boto_upgrade() {
     set +x
 }
 
+# Upgrade sqlalchemy to the latest version to run tests with it
+function check_upgrade_sqlalchemy() {
+    if [[ "${UPGRADE_SQLALCHEMY}" != "true" ]]; then
+        return
+    fi
+    echo
+    echo "${COLOR_BLUE}Upgrading sqlalchemy to the latest version to run tests with it${COLOR_RESET}"
+    echo
+    set -x
+    # shellcheck disable=SC2086
+    ${PACKAGING_TOOL_CMD} install ${EXTRA_INSTALL_FLAGS} --upgrade "sqlalchemy[asyncio]<2.1" "databricks-sqlalchemy>=2"
+    set +x
+}
+
 # Download minimum supported version of sqlalchemy to run tests with it
 function check_downgrade_sqlalchemy() {
     if [[ ${DOWNGRADE_SQLALCHEMY=} != "true" ]]; then
@@ -411,6 +425,7 @@ handle_mount_sources
 determine_airflow_to_use
 environment_initialization
 check_boto_upgrade
+check_upgrade_sqlalchemy
 check_downgrade_sqlalchemy
 check_downgrade_pendulum
 check_force_lowest_dependencies

From fa6949202c91b18766e7612aaf874b80531a364d Mon Sep 17 00:00:00 2001
From: Pierre Jeambrun <pierrejbrun@gmail.com>
Date: Mon, 30 Jun 2025 15:21:17 +0200
Subject: [PATCH 331/381] Fix airflow pin for fab provider (#52351)

---
 .../airflow/providers/fab/www/static/pin_100.png | Bin 0 -> 7501 bytes
 .../airflow/providers/fab/www/static/pin_32.png  | Bin 0 -> 1201 bytes
 providers/fab/www-hash.txt                       |   2 +-
 3 files changed, 1 insertion(+), 1 deletion(-)
 create mode 100644 providers/fab/src/airflow/providers/fab/www/static/pin_100.png
 create mode 100644 providers/fab/src/airflow/providers/fab/www/static/pin_32.png

diff --git a/providers/fab/src/airflow/providers/fab/www/static/pin_100.png b/providers/fab/src/airflow/providers/fab/www/static/pin_100.png
new file mode 100644
index 0000000000000000000000000000000000000000..1814ad621d094c7b06f3e90c69a17fbff58a7a94
GIT binary patch
diff --git a/providers/fab/src/airflow/providers/fab/www/static/pin_32.png b/providers/fab/src/airflow/providers/fab/www/static/pin_32.png
new file mode 100644
index 0000000000000000000000000000000000000000..244ffc5bab501fa18538ec669fcecafff2387159
GIT binary patch
diff --git a/providers/fab/www-hash.txt b/providers/fab/www-hash.txt
index c0a335802faa4..3cc44fe60b235 100644
--- a/providers/fab/www-hash.txt
+++ b/providers/fab/www-hash.txt
@@ -1 +1 @@
-e628a0561343f95bb6547d755d0cd8908e0d556b299a333c91cb8884bf3ee8ae
+1ad167892c3365364f9bdf3940d713e8e50f6d3aedd333f1a7dfb6455d1e2525

From f95319ef6792a5559bb8d82ab6f7f1cb9b67188a Mon Sep 17 00:00:00 2001
From: Yeonguk Choo <choo121600@gmail.com>
Date: Mon, 30 Jun 2025 22:59:04 +0900
Subject: [PATCH 332/381] feat: Add real-time clock updates to timezone
 selector (#52414)

* feat: Add real-time clock updates to timezone selector

* Add real-time clock update to user setting button Nav
---
 .../ui/src/layouts/Nav/TimezoneSelector.tsx      | 16 ++++++++++++++--
 .../ui/src/layouts/Nav/UserSettingsButton.tsx    | 16 ++++++++++++++--
 2 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/airflow-core/src/airflow/ui/src/layouts/Nav/TimezoneSelector.tsx b/airflow-core/src/airflow/ui/src/layouts/Nav/TimezoneSelector.tsx
index 8be9fd9a650b7..7a458f668c3a2 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Nav/TimezoneSelector.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Nav/TimezoneSelector.tsx
@@ -21,7 +21,7 @@ import { Select, type SingleValue } from "chakra-react-select";
 import dayjs from "dayjs";
 import timezone from "dayjs/plugin/timezone";
 import utc from "dayjs/plugin/utc";
-import React, { useMemo } from "react";
+import React, { useEffect, useMemo, useState } from "react";
 import { useTranslation } from "react-i18next";
 
 import { useTimezone } from "src/context/timezone";
@@ -33,6 +33,8 @@ dayjs.extend(timezone);
 const TimezoneSelector: React.FC = () => {
   const { selectedTimezone, setSelectedTimezone } = useTimezone();
   const { t: translate } = useTranslation("common");
+  const [currentTime, setCurrentTime] = useState<string>("");
+
   const timezones = useMemo<Array<string>>(() => {
     const tzList = Intl.supportedValuesOf("timeZone");
     const guessedTz = dayjs.tz.guess();
@@ -56,7 +58,17 @@ const TimezoneSelector: React.FC = () => {
     }
   };
 
-  const currentTime = dayjs().tz(selectedTimezone).format("YYYY-MM-DD HH:mm:ss");
+  useEffect(() => {
+    const updateTime = () => {
+      setCurrentTime(dayjs().tz(selectedTimezone).format("YYYY-MM-DD HH:mm:ss"));
+    };
+
+    updateTime();
+
+    const interval = setInterval(updateTime, 1000);
+
+    return () => clearInterval(interval);
+  }, [selectedTimezone]);
 
   return (
     <VStack align="stretch" gap={6}>
diff --git a/airflow-core/src/airflow/ui/src/layouts/Nav/UserSettingsButton.tsx b/airflow-core/src/airflow/ui/src/layouts/Nav/UserSettingsButton.tsx
index 4eca5ea77d8c5..3b9321525ad58 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Nav/UserSettingsButton.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Nav/UserSettingsButton.tsx
@@ -20,7 +20,7 @@ import { useDisclosure } from "@chakra-ui/react";
 import dayjs from "dayjs";
 import timezone from "dayjs/plugin/timezone";
 import utc from "dayjs/plugin/utc";
-import { useState } from "react";
+import { useEffect, useState } from "react";
 import { useTranslation } from "react-i18next";
 import { FiClock, FiGrid, FiLogOut, FiMoon, FiSun, FiUser, FiGlobe } from "react-icons/fi";
 import { MdOutlineAccountTree } from "react-icons/md";
@@ -49,8 +49,20 @@ export const UserSettingsButton = () => {
 
   const [time, setTime] = useState(dayjs());
 
+  useEffect(() => {
+    const updateTime = () => {
+      setTime(dayjs());
+    };
+
+    updateTime();
+
+    const interval = setInterval(updateTime, 1000);
+
+    return () => clearInterval(interval);
+  }, [selectedTimezone]);
+
   return (
-    <Menu.Root onOpenChange={() => setTime(dayjs())} positioning={{ placement: "right" }}>
+    <Menu.Root positioning={{ placement: "right" }}>
       <Menu.Trigger asChild>
         <NavButton icon={<FiUser size="1.75rem" />} title={translate("user")} />
       </Menu.Trigger>

From 97c0b40f094fe6bd0c4e0743b549fcd33d3cc954 Mon Sep 17 00:00:00 2001
From: Pierre Jeambrun <pierrejbrun@gmail.com>
Date: Mon, 30 Jun 2025 16:15:51 +0200
Subject: [PATCH 333/381] Allow Providers Iframe script execution (#52569)

---
 airflow-core/src/airflow/ui/src/pages/Iframe.tsx   |  6 +-----
 airflow-core/src/airflow/ui/src/pages/Security.tsx | 14 +++++++-------
 airflow-core/src/airflow/ui/src/router.tsx         |  7 ++++++-
 3 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/airflow-core/src/airflow/ui/src/pages/Iframe.tsx b/airflow-core/src/airflow/ui/src/pages/Iframe.tsx
index b6e3aa00cc911..ae67820700f93 100644
--- a/airflow-core/src/airflow/ui/src/pages/Iframe.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Iframe.tsx
@@ -24,7 +24,7 @@ import { ProgressBar } from "src/components/ui";
 
 import { ErrorPage } from "./Error";
 
-export const Iframe = () => {
+export const Iframe = ({ sandbox = "allow-same-origin allow-forms" }: { readonly sandbox: string }) => {
   const { page } = useParams();
   const { data: pluginData, isLoading } = usePluginServiceGetPlugins();
 
@@ -44,10 +44,6 @@ export const Iframe = () => {
     return <ErrorPage />;
   }
 
-  // The following iframe sandbox setting is intentionally less restrictive.
-  // ONLY trusted contents can be framed within Iframe.
-  const sandbox = "allow-same-origin allow-forms";
-
   return (
     <Box flexGrow={1} m={-3}>
       <iframe
diff --git a/airflow-core/src/airflow/ui/src/pages/Security.tsx b/airflow-core/src/airflow/ui/src/pages/Security.tsx
index d984935ffdb31..ab9941fc02ad0 100644
--- a/airflow-core/src/airflow/ui/src/pages/Security.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Security.tsx
@@ -24,6 +24,12 @@ import { ProgressBar } from "src/components/ui";
 
 import { ErrorPage } from "./Error";
 
+// The following iframe sandbox setting is intentionally less restrictive.
+// This is considered safe because the framed content originates from the Auth manager,
+// which is part of the deployment of Airflow and trusted as per our security policy.
+// https://airflow.apache.org/docs/apache-airflow/stable/security/security_model.html
+const SANDBOX = "allow-scripts allow-same-origin allow-forms";
+
 export const Security = () => {
   const { page } = useParams();
 
@@ -43,15 +49,9 @@ export const Security = () => {
     return <ErrorPage />;
   }
 
-  // The following iframe sandbox setting is intentionally less restrictive.
-  // This is considered safe because the framed content originates from the Auth manager,
-  // which is part of the deployment of Airflow and trusted as per our security policy.
-  //    https://airflow.apache.org/docs/apache-airflow/stable/security/security_model.html
-  const sandbox = "allow-scripts allow-same-origin allow-forms";
-
   return (
     <Box flexGrow={1} m={-3}>
-      <iframe sandbox={sandbox} src={link.href} style={{ height: "100%", width: "100%" }} title={link.text} />
+      <iframe sandbox={SANDBOX} src={link.href} style={{ height: "100%", width: "100%" }} title={link.text} />
     </Box>
   );
 };
diff --git a/airflow-core/src/airflow/ui/src/router.tsx b/airflow-core/src/airflow/ui/src/router.tsx
index f2ac9f7269c89..dd23359fb9093 100644
--- a/airflow-core/src/airflow/ui/src/router.tsx
+++ b/airflow-core/src/airflow/ui/src/router.tsx
@@ -143,7 +143,12 @@ export const routerConfig = [
         path: "connections",
       },
       {
-        element: <Iframe />,
+        // The following iframe sandbox setting is intentionally less restrictive.
+        // This is considered safe because the framed content originates from the Plugins,
+        // which is part of the deployment of Airflow and trusted as per our security policy.
+        // https://airflow.apache.org/docs/apache-airflow/stable/security/security_model.html
+        // They are not user provided plugins.
+        element: <Iframe sandbox="allow-scripts allow-same-origin allow-forms" />,
         path: "plugin/:page",
       },
       {

From 5228dfb6993cb4b61974cc30985c08c7d1474223 Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Mon, 30 Jun 2025 19:57:55 +0530
Subject: [PATCH 334/381] Provider Migration: Replace `BaseOperator` to Task
 SDK for `ssh` (#52558)

Part of #52378
---
 .../airflow/providers/ssh/operators/ssh.py    |  2 +-
 .../airflow/providers/ssh/version_compat.py   | 42 +++++++++++++++++++
 .../ssh/tests/unit/ssh/operators/test_ssh.py  |  7 ++--
 3 files changed, 46 insertions(+), 5 deletions(-)
 create mode 100644 providers/ssh/src/airflow/providers/ssh/version_compat.py

diff --git a/providers/ssh/src/airflow/providers/ssh/operators/ssh.py b/providers/ssh/src/airflow/providers/ssh/operators/ssh.py
index e6e90f50d765c..8f22a86407137 100644
--- a/providers/ssh/src/airflow/providers/ssh/operators/ssh.py
+++ b/providers/ssh/src/airflow/providers/ssh/operators/ssh.py
@@ -24,8 +24,8 @@
 
 from airflow.configuration import conf
 from airflow.exceptions import AirflowException, AirflowSkipException
-from airflow.models import BaseOperator
 from airflow.providers.ssh.hooks.ssh import SSHHook
+from airflow.providers.ssh.version_compat import BaseOperator
 from airflow.utils.types import NOTSET, ArgNotSet
 
 if TYPE_CHECKING:
diff --git a/providers/ssh/src/airflow/providers/ssh/version_compat.py b/providers/ssh/src/airflow/providers/ssh/version_compat.py
new file mode 100644
index 0000000000000..4f8d5e32bca4a
--- /dev/null
+++ b/providers/ssh/src/airflow/providers/ssh/version_compat.py
@@ -0,0 +1,42 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator  # type: ignore[no-redef]
+
+__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseOperator"]
diff --git a/providers/ssh/tests/unit/ssh/operators/test_ssh.py b/providers/ssh/tests/unit/ssh/operators/test_ssh.py
index 06ea865fc4481..b100fc13d31a4 100644
--- a/providers/ssh/tests/unit/ssh/operators/test_ssh.py
+++ b/providers/ssh/tests/unit/ssh/operators/test_ssh.py
@@ -268,7 +268,7 @@ def test_push_ssh_exit_to_xcom(self, request, dag_maker):
         dr = dag_maker.create_dagrun(run_id="push_xcom")
         ti = TaskInstance(task=task, run_id=dr.run_id)
         with pytest.raises(AirflowException, match=f"SSH operator error: exit status = {ssh_exit_code}"):
-            ti.run()
+            dag_maker.run_ti("push_xcom", dr)
         assert ti.xcom_pull(task_ids=task.task_id, key="ssh_exit") == ssh_exit_code
 
     def test_timeout_triggers_on_kill(self, request, dag_maker):
@@ -278,18 +278,17 @@ def command_sleep_forever(*args, **kwargs):
         self.exec_ssh_client_command.side_effect = command_sleep_forever
 
         with dag_maker(dag_id=f"dag_{request.node.name}"):
-            task = SSHOperator(
+            _ = SSHOperator(
                 task_id="test_timeout",
                 ssh_hook=self.hook,
                 command="sleep 100",
                 execution_timeout=timedelta(seconds=1),
             )
         dr = dag_maker.create_dagrun(run_id="test_timeout")
-        ti = TaskInstance(task=task, run_id=dr.run_id)
 
         with mock.patch.object(SSHOperator, "on_kill") as mock_on_kill:
             with pytest.raises(AirflowTaskTimeout):
-                ti.run()
+                dag_maker.run_ti("test_timeout", dr)
 
             # Wait a bit to ensure on_kill has time to be called
             time.sleep(1)

From 6514e3385d13b7771a0d0b2e8268917e4f50edfc Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Mon, 30 Jun 2025 21:09:58 +0530
Subject: [PATCH 335/381] Provider Migration: Replace `BaseOperator` to Task
 SDK for `Papermill` (#52565)

Part of https://github.com/apache/airflow/pull/52563
---
 .../papermill/operators/papermill.py          |  4 +-
 .../providers/papermill/version_compat.py     | 40 +++++++++++++++++++
 2 files changed, 42 insertions(+), 2 deletions(-)
 create mode 100644 providers/papermill/src/airflow/providers/papermill/version_compat.py

diff --git a/providers/papermill/src/airflow/providers/papermill/operators/papermill.py b/providers/papermill/src/airflow/providers/papermill/operators/papermill.py
index a624bf23d5365..5229f743a58d8 100644
--- a/providers/papermill/src/airflow/providers/papermill/operators/papermill.py
+++ b/providers/papermill/src/airflow/providers/papermill/operators/papermill.py
@@ -24,17 +24,17 @@
 import attr
 import papermill as pm
 
-from airflow.models import BaseOperator
 from airflow.providers.common.compat.lineage.entities import File
 from airflow.providers.common.compat.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.providers.papermill.hooks.kernel import REMOTE_KERNEL_ENGINE, KernelHook
+from airflow.providers.papermill.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     try:
         from airflow.sdk.definitions.context import Context
     except ImportError:
         # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+        from airflow.utils.context import Context  # type: ignore[no-redef]
 
 
 @attr.s(auto_attribs=True)
diff --git a/providers/papermill/src/airflow/providers/papermill/version_compat.py b/providers/papermill/src/airflow/providers/papermill/version_compat.py
new file mode 100644
index 0000000000000..89ade07a76753
--- /dev/null
+++ b/providers/papermill/src/airflow/providers/papermill/version_compat.py
@@ -0,0 +1,40 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator  # type: ignore[no-redef]
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+]

From 9428cb7999a316b0887bcf5a1963632b4288358e Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Mon, 30 Jun 2025 21:10:12 +0530
Subject: [PATCH 336/381] Provider Migration: Replace `BaseOperator` to Task
 SDK for `OpenAI` (#52561)

Part of #52378
---
 .../providers/openai/operators/openai.py      |  4 +-
 .../providers/openai/version_compat.py        | 42 +++++++++++++++++++
 2 files changed, 44 insertions(+), 2 deletions(-)
 create mode 100644 providers/openai/src/airflow/providers/openai/version_compat.py

diff --git a/providers/openai/src/airflow/providers/openai/operators/openai.py b/providers/openai/src/airflow/providers/openai/operators/openai.py
index 97356ad2f55c2..77bf82b665ef4 100644
--- a/providers/openai/src/airflow/providers/openai/operators/openai.py
+++ b/providers/openai/src/airflow/providers/openai/operators/openai.py
@@ -23,17 +23,17 @@
 from typing import TYPE_CHECKING, Any, Literal
 
 from airflow.configuration import conf
-from airflow.models import BaseOperator
 from airflow.providers.openai.exceptions import OpenAIBatchJobException
 from airflow.providers.openai.hooks.openai import OpenAIHook
 from airflow.providers.openai.triggers.openai import OpenAIBatchTrigger
+from airflow.providers.openai.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     try:
         from airflow.sdk.definitions.context import Context
     except ImportError:
         # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+        from airflow.utils.context import Context  # type: ignore[no-redef]
 
 
 class OpenAIEmbeddingOperator(BaseOperator):
diff --git a/providers/openai/src/airflow/providers/openai/version_compat.py b/providers/openai/src/airflow/providers/openai/version_compat.py
new file mode 100644
index 0000000000000..4f8d5e32bca4a
--- /dev/null
+++ b/providers/openai/src/airflow/providers/openai/version_compat.py
@@ -0,0 +1,42 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator  # type: ignore[no-redef]
+
+__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseOperator"]

From 893f8a52b955031d77831f6d69330ce761ca70a5 Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Mon, 30 Jun 2025 21:30:31 +0530
Subject: [PATCH 337/381] Provider Migration: Replace `BaseOperator` to Task
 SDK for `Pinecone` (#52563)

Part of #52378
---
 .../providers/pinecone/operators/pinecone.py  |  5 +--
 .../providers/pinecone/version_compat.py      | 40 +++++++++++++++++++
 2 files changed, 42 insertions(+), 3 deletions(-)
 create mode 100644 providers/pinecone/src/airflow/providers/pinecone/version_compat.py

diff --git a/providers/pinecone/src/airflow/providers/pinecone/operators/pinecone.py b/providers/pinecone/src/airflow/providers/pinecone/operators/pinecone.py
index b2d363f139b73..72c4277c85155 100644
--- a/providers/pinecone/src/airflow/providers/pinecone/operators/pinecone.py
+++ b/providers/pinecone/src/airflow/providers/pinecone/operators/pinecone.py
@@ -21,8 +21,8 @@
 from functools import cached_property
 from typing import TYPE_CHECKING, Any
 
-from airflow.models import BaseOperator
 from airflow.providers.pinecone.hooks.pinecone import PineconeHook
+from airflow.providers.pinecone.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from pinecone import Vector
@@ -30,8 +30,7 @@
     try:
         from airflow.sdk.definitions.context import Context
     except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+        from airflow.utils.context import Context  # type: ignore[no-redef]
 
 
 class PineconeIngestOperator(BaseOperator):
diff --git a/providers/pinecone/src/airflow/providers/pinecone/version_compat.py b/providers/pinecone/src/airflow/providers/pinecone/version_compat.py
new file mode 100644
index 0000000000000..89ade07a76753
--- /dev/null
+++ b/providers/pinecone/src/airflow/providers/pinecone/version_compat.py
@@ -0,0 +1,40 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator  # type: ignore[no-redef]
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+]

From eac9a920fb82ea9c750cf9b36608660cf42a0740 Mon Sep 17 00:00:00 2001
From: Amogh Desai <amoghrajesh1999@gmail.com>
Date: Mon, 30 Jun 2025 21:41:20 +0530
Subject: [PATCH 338/381] Marking test_process_dags_queries_count as flaky
 (#52535)

---
 airflow-core/tests/unit/jobs/test_scheduler_job.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/airflow-core/tests/unit/jobs/test_scheduler_job.py b/airflow-core/tests/unit/jobs/test_scheduler_job.py
index 2d11df5dfac2b..90d7eebdf4f2d 100644
--- a/airflow-core/tests/unit/jobs/test_scheduler_job.py
+++ b/airflow-core/tests/unit/jobs/test_scheduler_job.py
@@ -6652,6 +6652,7 @@ def test_execute_queries_count_with_harvested_dags(
 
                     self.job_runner._run_scheduler_loop()
 
+    @pytest.mark.flaky(reruns=3, reruns_delay=5)
     @pytest.mark.parametrize(
         "expected_query_counts, dag_count, task_count, start_ago, schedule, shape",
         [

From 11c132e75a016ed7876e296b3352d6e70cd24746 Mon Sep 17 00:00:00 2001
From: Ephraim Anierobi <splendidzigy24@gmail.com>
Date: Mon, 30 Jun 2025 17:29:23 +0100
Subject: [PATCH 339/381] Fix ParseImportError query in get_import_errors
 endpoint (#52531)

* Fix ParseImportError query in get_import_errors endpoint

An and_ is required in a join condition but was missing. This fixes
the issue that the bundle_name filter does not have any effect.

* fixup! Fix ParseImportError query in get_import_errors endpoint
---
 .../core_api/routes/public/import_error.py    |  2 +-
 .../routes/public/test_import_error.py        | 55 ++++++++++++++++++-
 2 files changed, 54 insertions(+), 3 deletions(-)

diff --git a/airflow-core/src/airflow/api_fastapi/core_api/routes/public/import_error.py b/airflow-core/src/airflow/api_fastapi/core_api/routes/public/import_error.py
index 4f223993bf4ea..a989a7eef168c 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/routes/public/import_error.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/routes/public/import_error.py
@@ -165,7 +165,7 @@ def get_import_errors(
             visible_files_cte,
             and_(
                 ParseImportError.filename == visible_files_cte.c.relative_fileloc,
-                # ParseImportError.bundle_name == visible_files_cte.c.bundle_name,  # apparently not needed
+                ParseImportError.bundle_name == visible_files_cte.c.bundle_name,
             ),
         )
         .order_by(ParseImportError.id)
diff --git a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_import_error.py b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_import_error.py
index 7654b0e62b987..da684c523ce6d 100644
--- a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_import_error.py
+++ b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_import_error.py
@@ -23,10 +23,11 @@
 import pytest
 
 from airflow.models import DagModel
+from airflow.models.dagbundle import DagBundleModel
 from airflow.models.errors import ParseImportError
 from airflow.utils.session import NEW_SESSION, provide_session
 
-from tests_common.test_utils.db import clear_db_dags, clear_db_import_errors
+from tests_common.test_utils.db import clear_db_dag_bundles, clear_db_dags, clear_db_import_errors
 from tests_common.test_utils.format_datetime import from_datetime_to_zulu_without_ms
 
 if TYPE_CHECKING:
@@ -51,7 +52,18 @@
 @pytest.fixture(scope="class")
 @provide_session
 def permitted_dag_model(session: Session = NEW_SESSION) -> DagModel:
-    dag_model = DagModel(fileloc=FILENAME1, relative_fileloc=FILENAME1, dag_id="dag_id1", is_paused=False)
+    # Create the bundle first
+    bundle = DagBundleModel(name=BUNDLE_NAME)
+    session.add(bundle)
+    session.commit()
+
+    dag_model = DagModel(
+        fileloc=FILENAME1,
+        relative_fileloc=FILENAME1,
+        dag_id="dag_id1",
+        is_paused=False,
+        bundle_name=BUNDLE_NAME,
+    )
     session.add(dag_model)
     session.commit()
     return dag_model
@@ -70,11 +82,13 @@ def not_permitted_dag_model(session: Session = NEW_SESSION) -> DagModel:
 def clear_db():
     clear_db_import_errors()
     clear_db_dags()
+    clear_db_dag_bundles()
 
     yield
 
     clear_db_import_errors()
     clear_db_dags()
+    clear_db_dag_bundles()
 
 
 @pytest.fixture(autouse=True, scope="class")
@@ -374,3 +388,40 @@ def test_user_can_not_read_all_dags_in_file(
                 }
             ],
         }
+
+    @pytest.mark.usefixtures("permitted_dag_model")
+    @mock.patch("airflow.api_fastapi.core_api.routes.public.import_error.get_auth_manager")
+    def test_bundle_name_join_condition_for_import_errors(
+        self, mock_get_auth_manager, test_client, permitted_dag_model, import_errors, session
+    ):
+        """Test that the bundle_name join condition works correctly."""
+        set_mock_auth_manager__is_authorized_dag(mock_get_auth_manager)
+        mock_get_authorized_dag_ids = set_mock_auth_manager__get_authorized_dag_ids(
+            mock_get_auth_manager, {permitted_dag_model.dag_id}
+        )
+        set_mock_auth_manager__batch_is_authorized_dag(mock_get_auth_manager, True)
+
+        response = test_client.get("/importErrors")
+
+        # Assert
+        mock_get_authorized_dag_ids.assert_called_once_with(method="GET", user=mock.ANY)
+        assert response.status_code == 200
+        response_json = response.json()
+
+        # Should return the import error with matching bundle_name and filename
+        assert response_json["total_entries"] == 1
+        assert response_json["import_errors"][0]["bundle_name"] == BUNDLE_NAME
+        assert response_json["import_errors"][0]["filename"] == FILENAME1
+
+        # Now test that removing the bundle_name from the DagModel causes the import error to not be returned
+        permitted_dag_model.bundle_name = None
+        session.merge(permitted_dag_model)
+        session.commit()
+
+        response2 = test_client.get("/importErrors")
+
+        # Assert - should return 0 entries because bundle_name no longer matches
+        assert response2.status_code == 200
+        response_json2 = response2.json()
+        assert response_json2["total_entries"] == 0
+        assert response_json2["import_errors"] == []

From e190769433413780770f726132af1e8a10154973 Mon Sep 17 00:00:00 2001
From: GPK <gopidesupavan@gmail.com>
Date: Mon, 30 Jun 2025 17:42:19 +0100
Subject: [PATCH 340/381] Migrate segment provider to af3 (#52579)

---
 .../segment/operators/segment_track_event.py  |  8 +--
 .../providers/segment/version_compat.py       | 50 +++++++++++++++++++
 2 files changed, 52 insertions(+), 6 deletions(-)
 create mode 100644 providers/segment/src/airflow/providers/segment/version_compat.py

diff --git a/providers/segment/src/airflow/providers/segment/operators/segment_track_event.py b/providers/segment/src/airflow/providers/segment/operators/segment_track_event.py
index f878addfa2744..d888da753be64 100644
--- a/providers/segment/src/airflow/providers/segment/operators/segment_track_event.py
+++ b/providers/segment/src/airflow/providers/segment/operators/segment_track_event.py
@@ -20,15 +20,11 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.segment.hooks.segment import SegmentHook
+from airflow.providers.segment.version_compat import BaseOperator
 
 if TYPE_CHECKING:
-    try:
-        from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+    from airflow.providers.segment.version_compat import Context
 
 
 class SegmentTrackEventOperator(BaseOperator):
diff --git a/providers/segment/src/airflow/providers/segment/version_compat.py b/providers/segment/src/airflow/providers/segment/version_compat.py
new file mode 100644
index 0000000000000..659e269d11a57
--- /dev/null
+++ b/providers/segment/src/airflow/providers/segment/version_compat.py
@@ -0,0 +1,50 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+    from airflow.sdk.definitions.context import Context
+else:
+    from airflow.models import BaseOperator  # type: ignore[no-redef]
+    from airflow.utils.context import Context  # type: ignore[no-redef]
+
+# Explicitly export these imports to protect them from being removed by linters
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+    "Context",
+]

From 921221b7d72fd041f4d56485988c05316bda4daf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Joel=20P=C3=A9rez=20Izquierdo?= <joelperez91@gmail.com>
Date: Mon, 30 Jun 2025 19:53:20 +0200
Subject: [PATCH 341/381] Set prefix to generate correctly the FAB Auth Manager
 API ref (#52329)

* set prefix to generate correctly the documentation because it is a FastAPI subapplication of the main one mounted in /auth

* autogenerated openapi yaml file generated by pre-commits
---
 .../api_fastapi/openapi/v2-fab-auth-manager-generated.yaml    | 4 ++--
 scripts/in_container/run_generate_openapi_spec_fab.py         | 4 +++-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/providers/fab/src/airflow/providers/fab/auth_manager/api_fastapi/openapi/v2-fab-auth-manager-generated.yaml b/providers/fab/src/airflow/providers/fab/auth_manager/api_fastapi/openapi/v2-fab-auth-manager-generated.yaml
index 25f14bc15d348..15503e4d4bb42 100644
--- a/providers/fab/src/airflow/providers/fab/auth_manager/api_fastapi/openapi/v2-fab-auth-manager-generated.yaml
+++ b/providers/fab/src/airflow/providers/fab/auth_manager/api_fastapi/openapi/v2-fab-auth-manager-generated.yaml
@@ -6,7 +6,7 @@ info:
     endpoints to manage users and permissions managed by the FAB auth manager.
   version: 0.1.0
 paths:
-  /token:
+  /auth/token:
     post:
       tags:
       - FabAuthManager
@@ -44,7 +44,7 @@ paths:
             application/json:
               schema:
                 $ref: '#/components/schemas/HTTPValidationError'
-  /token/cli:
+  /auth/token/cli:
     post:
       tags:
       - FabAuthManager
diff --git a/scripts/in_container/run_generate_openapi_spec_fab.py b/scripts/in_container/run_generate_openapi_spec_fab.py
index 271b1a593e94e..6aa09de304f2a 100755
--- a/scripts/in_container/run_generate_openapi_spec_fab.py
+++ b/scripts/in_container/run_generate_openapi_spec_fab.py
@@ -36,7 +36,9 @@
 # Generate FAB auth manager openapi spec
 fab_auth_manager_app = FabAuthManager().get_fastapi_app()
 if fab_auth_manager_app:
-    generate_openapi_file(app=fab_auth_manager_app, file_path=FAB_AUTH_MANAGER_OPENAPI_SPEC_FILE)
+    generate_openapi_file(
+        app=fab_auth_manager_app, file_path=FAB_AUTH_MANAGER_OPENAPI_SPEC_FILE, prefix="/auth"
+    )
     validate_openapi_file(FAB_AUTH_MANAGER_OPENAPI_SPEC_FILE)
 else:
     console.print("[red]FAB auth manager app not found. Skipping OpenAPI spec generation.[/]")

From 40f6f7ed1378f1263e4d85ee9225b893489b5927 Mon Sep 17 00:00:00 2001
From: Kaxil Naik <kaxilnaik@gmail.com>
Date: Tue, 1 Jul 2025 00:08:01 +0530
Subject: [PATCH 342/381] Move compat shim in Standard Provider to
 `version_compat.py` (#52567)

Moves the conditional imports to `version_compat.py`
---
 .../providers/standard/operators/bash.py      |  7 +----
 .../providers/standard/operators/branch.py    |  7 +----
 .../providers/standard/operators/empty.py     |  7 +----
 .../providers/standard/operators/python.py    |  7 +----
 .../providers/standard/operators/smooth.py    |  7 +----
 .../standard/operators/trigger_dagrun.py      |  5 +---
 .../providers/standard/sensors/bash.py        |  7 +----
 .../providers/standard/sensors/date_time.py   |  7 +----
 .../standard/sensors/external_task.py         | 20 +++++--------
 .../providers/standard/sensors/filesystem.py  |  7 +----
 .../providers/standard/sensors/python.py      |  7 +----
 .../providers/standard/sensors/time.py        |  7 +----
 .../providers/standard/sensors/time_delta.py  |  7 +----
 .../providers/standard/sensors/weekday.py     |  7 +----
 .../providers/standard/version_compat.py      | 28 +++++++++++++++++--
 .../standard/operators/test_trigger_dagrun.py |  4 +--
 16 files changed, 48 insertions(+), 93 deletions(-)

diff --git a/providers/standard/src/airflow/providers/standard/operators/bash.py b/providers/standard/src/airflow/providers/standard/operators/bash.py
index caee52072e10e..e10192a05b228 100644
--- a/providers/standard/src/airflow/providers/standard/operators/bash.py
+++ b/providers/standard/src/airflow/providers/standard/operators/bash.py
@@ -26,12 +26,7 @@
 
 from airflow.exceptions import AirflowException, AirflowSkipException
 from airflow.providers.standard.hooks.subprocess import SubprocessHook, SubprocessResult, working_directory
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS, AIRFLOW_V_3_1_PLUS
-
-if AIRFLOW_V_3_1_PLUS:
-    from airflow.sdk import BaseOperator
-else:
-    from airflow.models.baseoperator import BaseOperator  # type: ignore[no-redef]
+from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS, BaseOperator
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.context import context_to_airflow_vars
diff --git a/providers/standard/src/airflow/providers/standard/operators/branch.py b/providers/standard/src/airflow/providers/standard/operators/branch.py
index 064bb52afe188..98c059ac38eac 100644
--- a/providers/standard/src/airflow/providers/standard/operators/branch.py
+++ b/providers/standard/src/airflow/providers/standard/operators/branch.py
@@ -22,12 +22,7 @@
 from collections.abc import Iterable
 from typing import TYPE_CHECKING
 
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS, AIRFLOW_V_3_1_PLUS
-
-if AIRFLOW_V_3_1_PLUS:
-    from airflow.sdk import BaseOperator
-else:
-    from airflow.models.baseoperator import BaseOperator  # type: ignore[no-redef]
+from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS, BaseOperator
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.providers.standard.utils.skipmixin import SkipMixin
diff --git a/providers/standard/src/airflow/providers/standard/operators/empty.py b/providers/standard/src/airflow/providers/standard/operators/empty.py
index cdfebf3a4139c..b9a480bc86ea9 100644
--- a/providers/standard/src/airflow/providers/standard/operators/empty.py
+++ b/providers/standard/src/airflow/providers/standard/operators/empty.py
@@ -18,12 +18,7 @@
 
 from typing import TYPE_CHECKING
 
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_1_PLUS
-
-if AIRFLOW_V_3_1_PLUS:
-    from airflow.sdk import BaseOperator
-else:
-    from airflow.models.baseoperator import BaseOperator  # type: ignore[no-redef]
+from airflow.providers.standard.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.sdk.definitions.context import Context
diff --git a/providers/standard/src/airflow/providers/standard/operators/python.py b/providers/standard/src/airflow/providers/standard/operators/python.py
index 92387d28cbffd..f6efcf3bf0d26 100644
--- a/providers/standard/src/airflow/providers/standard/operators/python.py
+++ b/providers/standard/src/airflow/providers/standard/operators/python.py
@@ -50,18 +50,13 @@
 )
 from airflow.models.variable import Variable
 from airflow.providers.standard.utils.python_virtualenv import prepare_virtualenv, write_python_script
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS, AIRFLOW_V_3_1_PLUS
+from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS, BaseOperator
 from airflow.utils import hashlib_wrapper
 from airflow.utils.context import context_copy_partial, context_merge
 from airflow.utils.file import get_unique_dag_module_name
 from airflow.utils.operator_helpers import KeywordParameters
 from airflow.utils.process_utils import execute_in_subprocess
 
-if AIRFLOW_V_3_1_PLUS:
-    from airflow.sdk import BaseOperator
-else:
-    from airflow.models.baseoperator import BaseOperator  # type: ignore[no-redef]
-
 if AIRFLOW_V_3_0_PLUS:
     from airflow.providers.standard.operators.branch import BaseBranchOperator
     from airflow.providers.standard.utils.skipmixin import SkipMixin
diff --git a/providers/standard/src/airflow/providers/standard/operators/smooth.py b/providers/standard/src/airflow/providers/standard/operators/smooth.py
index 6799e07a5ef05..9b3d1ff181e26 100644
--- a/providers/standard/src/airflow/providers/standard/operators/smooth.py
+++ b/providers/standard/src/airflow/providers/standard/operators/smooth.py
@@ -19,12 +19,7 @@
 
 from typing import TYPE_CHECKING
 
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseOperator
-else:
-    from airflow.models.baseoperator import BaseOperator  # type: ignore[no-redef]
+from airflow.providers.standard.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.sdk.definitions.context import Context
diff --git a/providers/standard/src/airflow/providers/standard/operators/trigger_dagrun.py b/providers/standard/src/airflow/providers/standard/operators/trigger_dagrun.py
index 4f474c3e6996e..998fd4c8d7e55 100644
--- a/providers/standard/src/airflow/providers/standard/operators/trigger_dagrun.py
+++ b/providers/standard/src/airflow/providers/standard/operators/trigger_dagrun.py
@@ -34,12 +34,11 @@
     DagNotFound,
     DagRunAlreadyExists,
 )
-from airflow.models import BaseOperator
 from airflow.models.dag import DagModel
 from airflow.models.dagbag import DagBag
 from airflow.models.dagrun import DagRun
 from airflow.providers.standard.triggers.external_task import DagStateTrigger
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
+from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS, BaseOperator, BaseOperatorLink
 from airflow.utils import timezone
 from airflow.utils.state import DagRunState
 from airflow.utils.types import NOTSET, ArgNotSet, DagRunType
@@ -60,11 +59,9 @@
         from airflow.utils.context import Context
 
 if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseOperatorLink
     from airflow.sdk.execution_time.xcom import XCom
 else:
     from airflow.models import XCom  # type: ignore[no-redef]
-    from airflow.models.baseoperatorlink import BaseOperatorLink  # type: ignore[no-redef]
 
 
 class DagIsPaused(AirflowException):
diff --git a/providers/standard/src/airflow/providers/standard/sensors/bash.py b/providers/standard/src/airflow/providers/standard/sensors/bash.py
index 5e8dd0b24650f..9b83b4af187a3 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/bash.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/bash.py
@@ -24,12 +24,7 @@
 from typing import TYPE_CHECKING
 
 from airflow.exceptions import AirflowFailException
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk.bases.sensor import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+from airflow.providers.standard.version_compat import BaseSensorOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/standard/src/airflow/providers/standard/sensors/date_time.py b/providers/standard/src/airflow/providers/standard/sensors/date_time.py
index a2e2478109f59..85758210a05f6 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/date_time.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/date_time.py
@@ -23,14 +23,9 @@
 from typing import TYPE_CHECKING, Any, NoReturn
 
 from airflow.providers.standard.triggers.temporal import DateTimeTrigger
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
+from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS, BaseSensorOperator
 from airflow.utils import timezone
 
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk.bases.sensor import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
-
 try:
     from airflow.triggers.base import StartTriggerArgs
 except ImportError:
diff --git a/providers/standard/src/airflow/providers/standard/sensors/external_task.py b/providers/standard/src/airflow/providers/standard/sensors/external_task.py
index 974608bf714f4..32ad0111295bd 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/external_task.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/external_task.py
@@ -39,14 +39,16 @@
 from airflow.providers.standard.operators.empty import EmptyOperator
 from airflow.providers.standard.triggers.external_task import WorkflowTrigger
 from airflow.providers.standard.utils.sensor_helper import _get_count, _get_external_task_group_task_ids
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
+from airflow.providers.standard.version_compat import (
+    AIRFLOW_V_3_0_PLUS,
+    BaseOperator,
+    BaseOperatorLink,
+    BaseSensorOperator,
+)
 from airflow.utils.file import correct_maybe_zipped
 from airflow.utils.state import State, TaskInstanceState
 
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk.bases.sensor import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type:ignore[no-redef]
+if not AIRFLOW_V_3_0_PLUS:
     from airflow.utils.session import NEW_SESSION, provide_session
 
 if TYPE_CHECKING:
@@ -55,19 +57,11 @@
     from airflow.models.taskinstancekey import TaskInstanceKey
 
     if AIRFLOW_V_3_0_PLUS:
-        from airflow.sdk import BaseOperator
         from airflow.sdk.definitions.context import Context
     else:
-        from airflow.models.baseoperator import BaseOperator  # type: ignore[no-redef]
         from airflow.utils.context import Context  # type: ignore[no-redef]
 
 
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseOperatorLink
-else:
-    from airflow.models.baseoperatorlink import BaseOperatorLink  # type: ignore[no-redef]
-
-
 class ExternalDagLink(BaseOperatorLink):
     """
     Operator link for ExternalTaskSensor and ExternalTaskMarker.
diff --git a/providers/standard/src/airflow/providers/standard/sensors/filesystem.py b/providers/standard/src/airflow/providers/standard/sensors/filesystem.py
index 10315dc88a97e..32681cb0f2716 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/filesystem.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/filesystem.py
@@ -29,12 +29,7 @@
 from airflow.exceptions import AirflowException
 from airflow.providers.standard.hooks.filesystem import FSHook
 from airflow.providers.standard.triggers.file import FileTrigger
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk.bases.sensor import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+from airflow.providers.standard.version_compat import BaseSensorOperator
 
 try:
     from airflow.triggers.base import StartTriggerArgs
diff --git a/providers/standard/src/airflow/providers/standard/sensors/python.py b/providers/standard/src/airflow/providers/standard/sensors/python.py
index 512ebab4449d3..d6fc454018cc2 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/python.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/python.py
@@ -20,15 +20,10 @@
 from collections.abc import Callable, Mapping, Sequence
 from typing import TYPE_CHECKING, Any
 
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
+from airflow.providers.standard.version_compat import BaseSensorOperator, PokeReturnValue
 from airflow.utils.context import context_merge
 from airflow.utils.operator_helpers import determine_kwargs
 
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk.bases.sensor import BaseSensorOperator, PokeReturnValue
-else:
-    from airflow.sensors.base import BaseSensorOperator, PokeReturnValue  # type: ignore[no-redef]
-
 if TYPE_CHECKING:
     try:
         from airflow.sdk.definitions.context import Context
diff --git a/providers/standard/src/airflow/providers/standard/sensors/time.py b/providers/standard/src/airflow/providers/standard/sensors/time.py
index ad02dc4dc82a9..6d72c29fb4a81 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/time.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/time.py
@@ -25,12 +25,7 @@
 from airflow.configuration import conf
 from airflow.exceptions import AirflowProviderDeprecationWarning
 from airflow.providers.standard.triggers.temporal import DateTimeTrigger
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk.bases.sensor import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+from airflow.providers.standard.version_compat import BaseSensorOperator
 
 try:
     from airflow.triggers.base import StartTriggerArgs
diff --git a/providers/standard/src/airflow/providers/standard/sensors/time_delta.py b/providers/standard/src/airflow/providers/standard/sensors/time_delta.py
index 5b38a2b078e85..492e9aafa1da6 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/time_delta.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/time_delta.py
@@ -28,14 +28,9 @@
 from airflow.configuration import conf
 from airflow.exceptions import AirflowProviderDeprecationWarning, AirflowSkipException
 from airflow.providers.standard.triggers.temporal import DateTimeTrigger, TimeDeltaTrigger
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
+from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS, BaseSensorOperator
 from airflow.utils import timezone
 
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk.bases.sensor import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
-
 if TYPE_CHECKING:
     try:
         from airflow.sdk.definitions.context import Context
diff --git a/providers/standard/src/airflow/providers/standard/sensors/weekday.py b/providers/standard/src/airflow/providers/standard/sensors/weekday.py
index 6f3af7a318241..ac23e1ac9cb6c 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/weekday.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/weekday.py
@@ -21,14 +21,9 @@
 from typing import TYPE_CHECKING
 
 from airflow.providers.standard.utils.weekday import WeekDay
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
+from airflow.providers.standard.version_compat import BaseSensorOperator
 from airflow.utils import timezone
 
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk.bases.sensor import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
-
 if TYPE_CHECKING:
     try:
         from airflow.sdk.definitions.context import Context
diff --git a/providers/standard/src/airflow/providers/standard/version_compat.py b/providers/standard/src/airflow/providers/standard/version_compat.py
index 42bdcc7da03df..e630ace142f2b 100644
--- a/providers/standard/src/airflow/providers/standard/version_compat.py
+++ b/providers/standard/src/airflow/providers/standard/version_compat.py
@@ -32,5 +32,29 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
     return airflow_version.major, airflow_version.minor, airflow_version.micro
 
 
-AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
-AIRFLOW_V_3_1_PLUS = get_base_airflow_version_tuple() >= (3, 1, 0)
+AIRFLOW_V_3_0_PLUS: bool = get_base_airflow_version_tuple() >= (3, 0, 0)
+AIRFLOW_V_3_1_PLUS: bool = get_base_airflow_version_tuple() >= (3, 1, 0)
+
+# BaseOperator is not imported from SDK from 3.0 (and only done from 3.1) due to a bug with
+# DecoratedOperator -- where `DecoratedOperator._handle_output` needed `xcom_push` to exist on `BaseOperator`
+# even though it wasn't used.
+if AIRFLOW_V_3_1_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models.baseoperator import BaseOperator  # type: ignore[no-redef]
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperatorLink
+    from airflow.sdk.bases.sensor import BaseSensorOperator, PokeReturnValue
+else:
+    from airflow.models.baseoperatorlink import BaseOperatorLink  # type: ignore[no-redef]
+    from airflow.sensors.base import BaseSensorOperator, PokeReturnValue  # type: ignore[no-redef]
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "AIRFLOW_V_3_1_PLUS",
+    "BaseOperator",
+    "BaseOperatorLink",
+    "BaseSensorOperator",
+    "PokeReturnValue",
+]
diff --git a/providers/standard/tests/unit/standard/operators/test_trigger_dagrun.py b/providers/standard/tests/unit/standard/operators/test_trigger_dagrun.py
index 190973b477aaa..ad63b23096fb9 100644
--- a/providers/standard/tests/unit/standard/operators/test_trigger_dagrun.py
+++ b/providers/standard/tests/unit/standard/operators/test_trigger_dagrun.py
@@ -182,9 +182,9 @@ def test_trigger_dagrun_operator_templated_invalid_conf(self, dag_maker):
             )
         dag_maker.sync_dagbag_to_db()
         parse_and_sync_to_db(self.f_name)
-        dag_maker.create_dagrun()
+        dr = dag_maker.create_dagrun()
         with pytest.raises(ValueError, match="^conf parameter should be JSON Serializable$"):
-            task.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
+            dag_maker.run_ti(task.task_id, dr)
 
     def test_trigger_dagrun_with_no_failed_state(self, dag_maker):
         task = TriggerDagRunOperator(

From 2f9743eebea8e2175ef014afa782bad8bdff590d Mon Sep 17 00:00:00 2001
From: "Zhen-Lun (Kevin) Hong" <zhenlun.hong01@gmail.com>
Date: Tue, 1 Jul 2025 03:36:02 +0800
Subject: [PATCH 343/381] Provider Migration: Replace `BaseOperator` to Task
 SDK for `singularity` (#52590)

---
 .../singularity/operators/singularity.py      |  4 +-
 .../providers/singularity/version_compat.py   | 39 +++++++++++++++++++
 2 files changed, 41 insertions(+), 2 deletions(-)
 create mode 100644 providers/singularity/src/airflow/providers/singularity/version_compat.py

diff --git a/providers/singularity/src/airflow/providers/singularity/operators/singularity.py b/providers/singularity/src/airflow/providers/singularity/operators/singularity.py
index d5ba00425151e..bee538c02077f 100644
--- a/providers/singularity/src/airflow/providers/singularity/operators/singularity.py
+++ b/providers/singularity/src/airflow/providers/singularity/operators/singularity.py
@@ -26,10 +26,10 @@
 from spython.main import Client
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
+from airflow.providers.singularity.version_compat import BaseOperator
 
 if TYPE_CHECKING:
-    from airflow.utils.context import Context
+    from airflow.providers.singularity.version_compat import Context
 
 
 class SingularityOperator(BaseOperator):
diff --git a/providers/singularity/src/airflow/providers/singularity/version_compat.py b/providers/singularity/src/airflow/providers/singularity/version_compat.py
new file mode 100644
index 0000000000000..ec6d0191a9481
--- /dev/null
+++ b/providers/singularity/src/airflow/providers/singularity/version_compat.py
@@ -0,0 +1,39 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+    from airflow.sdk.definitions.context import Context
+else:
+    from airflow.models import BaseOperator  # type: ignore[no-redef]
+    from airflow.utils.context import Context  # type: ignore[no-redef]
+
+__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseOperator", "Context"]

From 87afb93dc09c25be2286371d3be42e328c4d75df Mon Sep 17 00:00:00 2001
From: "Zhen-Lun (Kevin) Hong" <zhenlun.hong01@gmail.com>
Date: Tue, 1 Jul 2025 03:36:21 +0800
Subject: [PATCH 344/381] Provider Migration: Replace `BaseOperator` to Task
 SDK for `samba` (#52588)

---
 .../providers/samba/transfers/gcs_to_samba.py |  8 +---
 .../airflow/providers/samba/version_compat.py | 39 +++++++++++++++++++
 2 files changed, 41 insertions(+), 6 deletions(-)
 create mode 100644 providers/samba/src/airflow/providers/samba/version_compat.py

diff --git a/providers/samba/src/airflow/providers/samba/transfers/gcs_to_samba.py b/providers/samba/src/airflow/providers/samba/transfers/gcs_to_samba.py
index 74120642442c1..87b83a0c3c844 100644
--- a/providers/samba/src/airflow/providers/samba/transfers/gcs_to_samba.py
+++ b/providers/samba/src/airflow/providers/samba/transfers/gcs_to_samba.py
@@ -25,18 +25,14 @@
 from typing import TYPE_CHECKING
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
 from airflow.providers.samba.hooks.samba import SambaHook
+from airflow.providers.samba.version_compat import BaseOperator
 
 WILDCARD = "*"
 
 if TYPE_CHECKING:
-    try:
-        from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+    from airflow.providers.samba.version_compat import Context
 
 
 class GCSToSambaOperator(BaseOperator):
diff --git a/providers/samba/src/airflow/providers/samba/version_compat.py b/providers/samba/src/airflow/providers/samba/version_compat.py
new file mode 100644
index 0000000000000..ec6d0191a9481
--- /dev/null
+++ b/providers/samba/src/airflow/providers/samba/version_compat.py
@@ -0,0 +1,39 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+    from airflow.sdk.definitions.context import Context
+else:
+    from airflow.models import BaseOperator  # type: ignore[no-redef]
+    from airflow.utils.context import Context  # type: ignore[no-redef]
+
+__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseOperator", "Context"]

From f1c1fd43846c7073102dde39d6b044ce52a5f230 Mon Sep 17 00:00:00 2001
From: "Zhen-Lun (Kevin) Hong" <zhenlun.hong01@gmail.com>
Date: Tue, 1 Jul 2025 03:36:58 +0800
Subject: [PATCH 345/381] Provider Migration: Replace `BaseOperator` to Task
 SDK for `salesforce` (#52587)

---
 .../providers/salesforce/operators/bulk.py    |  8 +---
 .../operators/salesforce_apex_rest.py         |  8 +---
 .../providers/salesforce/version_compat.py    | 40 +++++++++++++++++++
 3 files changed, 44 insertions(+), 12 deletions(-)
 create mode 100644 providers/salesforce/src/airflow/providers/salesforce/version_compat.py

diff --git a/providers/salesforce/src/airflow/providers/salesforce/operators/bulk.py b/providers/salesforce/src/airflow/providers/salesforce/operators/bulk.py
index fe33f5ab8f4ef..47eadd72e86a9 100644
--- a/providers/salesforce/src/airflow/providers/salesforce/operators/bulk.py
+++ b/providers/salesforce/src/airflow/providers/salesforce/operators/bulk.py
@@ -19,19 +19,15 @@
 from collections.abc import Iterable
 from typing import TYPE_CHECKING, cast
 
-from airflow.models import BaseOperator
 from airflow.providers.salesforce.hooks.salesforce import SalesforceHook
+from airflow.providers.salesforce.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from typing import Literal
 
     from simple_salesforce.bulk import SFBulkHandler
 
-    try:
-        from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+    from airflow.providers.salesforce.version_compat import Context
 
 
 class SalesforceBulkOperator(BaseOperator):
diff --git a/providers/salesforce/src/airflow/providers/salesforce/operators/salesforce_apex_rest.py b/providers/salesforce/src/airflow/providers/salesforce/operators/salesforce_apex_rest.py
index 66f731715d2d4..d1187ff73688b 100644
--- a/providers/salesforce/src/airflow/providers/salesforce/operators/salesforce_apex_rest.py
+++ b/providers/salesforce/src/airflow/providers/salesforce/operators/salesforce_apex_rest.py
@@ -18,15 +18,11 @@
 
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.salesforce.hooks.salesforce import SalesforceHook
+from airflow.providers.salesforce.version_compat import BaseOperator
 
 if TYPE_CHECKING:
-    try:
-        from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+    from airflow.providers.salesforce.version_compat import Context
 
 
 class SalesforceApexRestOperator(BaseOperator):
diff --git a/providers/salesforce/src/airflow/providers/salesforce/version_compat.py b/providers/salesforce/src/airflow/providers/salesforce/version_compat.py
new file mode 100644
index 0000000000000..8e18c3b4110c0
--- /dev/null
+++ b/providers/salesforce/src/airflow/providers/salesforce/version_compat.py
@@ -0,0 +1,40 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+    from airflow.sdk.definitions.context import Context
+else:
+    from airflow.models import BaseOperator  # type: ignore[no-redef]
+    from airflow.utils.context import Context  # type: ignore[no-redef]
+
+
+__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseOperator", "Context"]

From 2adaf8194a319ba218f4f9f25cead4a3938ada16 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Mon, 30 Jun 2025 21:56:44 +0200
Subject: [PATCH 346/381] Revert "Run release tests always - not only in canary
 runs (#52389)" (#52594)

This reverts commit 759653961f4fa1e188ca719c61e92c1d7126b3d4.
---
 .github/workflows/basic-tests.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.github/workflows/basic-tests.yml b/.github/workflows/basic-tests.yml
index f94626b34242f..161ba36d58043 100644
--- a/.github/workflows/basic-tests.yml
+++ b/.github/workflows/basic-tests.yml
@@ -317,6 +317,7 @@ jobs:
       GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
       GITHUB_USERNAME: ${{ github.actor }}
       VERBOSE: "true"
+    if: inputs.canary-run == 'true'
     steps:
       - name: "Cleanup repo"
         shell: bash

From 67df7f3ce170147636a785589da93893da20031b Mon Sep 17 00:00:00 2001
From: Maksim <maksimy@google.com>
Date: Mon, 30 Jun 2025 23:00:46 +0200
Subject: [PATCH 347/381] Fix deferrable mode for SparkKubernetesOperator
 (#51956)

---
 .../cncf/kubernetes/operators/pod.py          | 12 +++---
 .../kubernetes/operators/spark_kubernetes.py  | 25 +++++++-----
 .../operators/test_spark_kubernetes.py        | 39 ++++++++++++++++++-
 3 files changed, 60 insertions(+), 16 deletions(-)

diff --git a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/operators/pod.py b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/operators/pod.py
index ed8511be98deb..e01c5f437839b 100644
--- a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/operators/pod.py
+++ b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/operators/pod.py
@@ -796,11 +796,13 @@ def _refresh_cached_properties(self):
         del self.pod_manager
 
     def execute_async(self, context: Context) -> None:
-        self.pod_request_obj = self.build_pod_request_obj(context)
-        self.pod = self.get_or_create_pod(  # must set `self.pod` for `on_kill`
-            pod_request_obj=self.pod_request_obj,
-            context=context,
-        )
+        if self.pod_request_obj is None:
+            self.pod_request_obj = self.build_pod_request_obj(context)
+        if self.pod is None:
+            self.pod = self.get_or_create_pod(  # must set `self.pod` for `on_kill`
+                pod_request_obj=self.pod_request_obj,
+                context=context,
+            )
         if self.callbacks:
             pod = self.find_pod(self.pod.metadata.namespace, context=context)
             for callback in self.callbacks:
diff --git a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/operators/spark_kubernetes.py b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/operators/spark_kubernetes.py
index 5d3ff3b51a34e..c5fb8a6d86e66 100644
--- a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/operators/spark_kubernetes.py
+++ b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/operators/spark_kubernetes.py
@@ -254,13 +254,13 @@ def find_spark_job(self, context, exclude_checked: bool = True):
             self.log.info("`try_number` of pod: %s", pod.metadata.labels["try_number"])
         return pod
 
-    def get_or_create_spark_crd(self, launcher: CustomObjectLauncher, context) -> k8s.V1Pod:
+    def get_or_create_spark_crd(self, context) -> k8s.V1Pod:
         if self.reattach_on_restart:
             driver_pod = self.find_spark_job(context)
             if driver_pod:
                 return driver_pod
 
-        driver_pod, spark_obj_spec = launcher.start_spark_job(
+        driver_pod, spark_obj_spec = self.launcher.start_spark_job(
             image=self.image, code_path=self.code_path, startup_timeout=self.startup_timeout_seconds
         )
         return driver_pod
@@ -268,8 +268,9 @@ def get_or_create_spark_crd(self, launcher: CustomObjectLauncher, context) -> k8
     def process_pod_deletion(self, pod, *, reraise=True):
         if pod is not None:
             if self.delete_on_termination:
-                self.log.info("Deleting spark job: %s", pod.metadata.name.replace("-driver", ""))
-                self.launcher.delete_spark_job(pod.metadata.name.replace("-driver", ""))
+                pod_name = pod.metadata.name.replace("-driver", "")
+                self.log.info("Deleting spark job: %s", pod_name)
+                self.launcher.delete_spark_job(pod_name)
             else:
                 self.log.info("skipping deleting spark job: %s", pod.metadata.name)
 
@@ -293,18 +294,22 @@ def client(self) -> CoreV1Api:
     def custom_obj_api(self) -> CustomObjectsApi:
         return CustomObjectsApi()
 
-    def execute(self, context: Context):
-        self.name = self.create_job_name()
-
-        self.log.info("Creating sparkApplication.")
-        self.launcher = CustomObjectLauncher(
+    @cached_property
+    def launcher(self) -> CustomObjectLauncher:
+        launcher = CustomObjectLauncher(
             name=self.name,
             namespace=self.namespace,
             kube_client=self.client,
             custom_obj_api=self.custom_obj_api,
             template_body=self.template_body,
         )
-        self.pod = self.get_or_create_spark_crd(self.launcher, context)
+        return launcher
+
+    def execute(self, context: Context):
+        self.name = self.create_job_name()
+
+        self.log.info("Creating sparkApplication.")
+        self.pod = self.get_or_create_spark_crd(context)
         self.pod_request_obj = self.launcher.pod_spec
 
         return super().execute(context=context)
diff --git a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/operators/test_spark_kubernetes.py b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/operators/test_spark_kubernetes.py
index 2b9c7997e7e69..fa91a6686368a 100644
--- a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/operators/test_spark_kubernetes.py
+++ b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/operators/test_spark_kubernetes.py
@@ -23,7 +23,7 @@
 from datetime import date
 from functools import cached_property
 from unittest import mock
-from unittest.mock import patch
+from unittest.mock import mock_open, patch
 from uuid import uuid4
 
 import pendulum
@@ -32,9 +32,11 @@
 from kubernetes.client import models as k8s
 
 from airflow import DAG
+from airflow.exceptions import TaskDeferred
 from airflow.models import Connection, DagRun, TaskInstance
 from airflow.providers.cncf.kubernetes.operators.spark_kubernetes import SparkKubernetesOperator
 from airflow.providers.cncf.kubernetes.pod_generator import MAX_LABEL_LEN
+from airflow.providers.cncf.kubernetes.triggers.pod import KubernetesPodTrigger
 from airflow.utils import timezone
 from airflow.utils.types import DagRunType
 
@@ -752,6 +754,41 @@ def test_find_custom_pod_labels(
         op.find_spark_job(context)
         mock_get_kube_client.list_namespaced_pod.assert_called_with("default", label_selector=label_selector)
 
+    @pytest.mark.asyncio
+    def test_execute_deferrable(
+        self,
+        mock_create_namespaced_crd,
+        mock_get_namespaced_custom_object_status,
+        mock_cleanup,
+        mock_create_job_name,
+        mock_get_kube_client,
+        mock_create_pod,
+        mock_await_pod_completion,
+        mock_fetch_requested_container_logs,
+        data_file,
+        mocker,
+    ):
+        task_name = "test_execute_deferrable"
+        job_spec = yaml.safe_load(data_file("spark/application_template.yaml").read_text())
+
+        mock_create_job_name.return_value = task_name
+        op = SparkKubernetesOperator(
+            template_spec=job_spec,
+            kubernetes_conn_id="kubernetes_default_kube_config",
+            task_id=task_name,
+            get_logs=True,
+            deferrable=True,
+        )
+        context = create_context(op)
+
+        mock_file = mock_open(read_data='{"a": "b"}')
+        mocker.patch("builtins.open", mock_file)
+
+        with pytest.raises(TaskDeferred) as exc:
+            op.execute(context)
+
+        assert isinstance(exc.value.trigger, KubernetesPodTrigger)
+
 
 @pytest.mark.db_test
 def test_template_body_templating(create_task_instance_of_operator, session):

From 2c2e66f1082f5776b7b98f511f3aebc900311dc0 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Mon, 30 Jun 2025 23:11:01 +0200
Subject: [PATCH 348/381] Increase dependency epoch to trigger pip cache
 invalidation (#52599)

After removal of analytics-python we still keep it in the constraints.
This change is likely to build cache from the scratch an avoid
analytics-python in our constraints.
---
 Dockerfile.ci | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Dockerfile.ci b/Dockerfile.ci
index 70552cc35d754..f003636a2e6aa 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -1250,7 +1250,7 @@ ARG AIRFLOW_IMAGE_REPOSITORY="https://github.com/apache/airflow"
 # NOTE! When you want to make sure dependencies are installed from scratch in your PR after removing
 # some dependencies, you also need to set "disable image cache" in your PR to make sure the image is
 # not built using the "main" version of those dependencies.
-ARG DEPENDENCIES_EPOCH_NUMBER="14"
+ARG DEPENDENCIES_EPOCH_NUMBER="15"
 
 # Make sure noninteractive debian install is used and language variables set
 ENV PYTHON_BASE_IMAGE=${PYTHON_BASE_IMAGE} \

From 800ed1457d7812ee717d4b15a7c2fad30e839f40 Mon Sep 17 00:00:00 2001
From: olegkachur-e <qwsqad@gmail.com>
Date: Mon, 30 Jun 2025 23:13:52 +0200
Subject: [PATCH 349/381] Add Google Cloud VertexAI and Translate datasets
 import data verification (#51364)

For the:
- Google Cloud VertexAI datasets.
- Google Cloud Trasnalation native model datasets.

Co-authored-by: Oleg Kachur <kachur@google.com>
---
 .../providers/google/cloud/hooks/translate.py |  2 +-
 .../providers/google/cloud/links/translate.py |  2 +-
 .../google/cloud/operators/translate.py       | 32 ++++++++++++-
 .../cloud/operators/vertex_ai/dataset.py      | 46 ++++++++++++++++++-
 .../google/cloud/operators/test_translate.py  | 17 ++++++-
 .../google/cloud/operators/test_vertex_ai.py  | 20 ++++++--
 6 files changed, 110 insertions(+), 9 deletions(-)

diff --git a/providers/google/src/airflow/providers/google/cloud/hooks/translate.py b/providers/google/src/airflow/providers/google/cloud/hooks/translate.py
index 57b7846f023d3..c5f39819ba021 100644
--- a/providers/google/src/airflow/providers/google/cloud/hooks/translate.py
+++ b/providers/google/src/airflow/providers/google/cloud/hooks/translate.py
@@ -429,7 +429,7 @@ def get_dataset(
         project_id: str,
         location: str,
         retry: Retry | _MethodDefault = DEFAULT,
-        timeout: float | _MethodDefault = DEFAULT,
+        timeout: float | None | _MethodDefault = DEFAULT,
         metadata: Sequence[tuple[str, str]] = (),
     ) -> automl_translation.Dataset:
         """
diff --git a/providers/google/src/airflow/providers/google/cloud/links/translate.py b/providers/google/src/airflow/providers/google/cloud/links/translate.py
index bbd8febe37af7..29ed09df4e5e8 100644
--- a/providers/google/src/airflow/providers/google/cloud/links/translate.py
+++ b/providers/google/src/airflow/providers/google/cloud/links/translate.py
@@ -149,7 +149,7 @@ class TranslationNativeDatasetLink(BaseGoogleLink):
     """
 
     name = "Translation Native Dataset"
-    key = "translation_naive_dataset"
+    key = "translation_native_dataset"
     format_str = TRANSLATION_NATIVE_DATASET_LINK
 
 
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/translate.py b/providers/google/src/airflow/providers/google/cloud/operators/translate.py
index ba6b0c338abde..1a112f71636c3 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/translate.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/translate.py
@@ -37,6 +37,7 @@
     TranslationNativeDatasetLink,
 )
 from airflow.providers.google.cloud.operators.cloud_base import GoogleCloudBaseOperator
+from airflow.providers.google.cloud.operators.vertex_ai.dataset import DatasetImportDataResultsCheckHelper
 from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID
 
 if TYPE_CHECKING:
@@ -575,7 +576,7 @@ def execute(self, context: Context):
         return result_ids
 
 
-class TranslateImportDataOperator(GoogleCloudBaseOperator):
+class TranslateImportDataOperator(GoogleCloudBaseOperator, DatasetImportDataResultsCheckHelper):
     """
     Import data to the translation dataset.
 
@@ -602,6 +603,7 @@ class TranslateImportDataOperator(GoogleCloudBaseOperator):
         If set as a sequence, the identities from the list must grant
         Service Account Token Creator IAM role to the directly preceding identity, with first
         account from the list granting this role to the originating account (templated).
+    :param raise_for_empty_result: Raise an error if no additional data has been populated after the import.
     """
 
     template_fields: Sequence[str] = (
@@ -627,6 +629,7 @@ def __init__(
         retry: Retry | _MethodDefault = DEFAULT,
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: str | Sequence[str] | None = None,
+        raise_for_empty_result: bool = False,
         **kwargs,
     ) -> None:
         super().__init__(**kwargs)
@@ -639,9 +642,21 @@ def __init__(
         self.retry = retry
         self.gcp_conn_id = gcp_conn_id
         self.impersonation_chain = impersonation_chain
+        self.raise_for_empty_result = raise_for_empty_result
 
     def execute(self, context: Context):
         hook = TranslateHook(gcp_conn_id=self.gcp_conn_id, impersonation_chain=self.impersonation_chain)
+        initial_dataset_size = self._get_number_of_ds_items(
+            dataset=hook.get_dataset(
+                dataset_id=self.dataset_id,
+                project_id=self.project_id,
+                location=self.location,
+                retry=self.retry,
+                timeout=self.timeout,
+                metadata=self.metadata,
+            ),
+            total_key_name="example_count",
+        )
         self.log.info("Importing data to dataset...")
         operation = hook.import_dataset_data(
             dataset_id=self.dataset_id,
@@ -660,7 +675,22 @@ def execute(self, context: Context):
             location=self.location,
         )
         hook.wait_for_operation_done(operation=operation, timeout=self.timeout)
+
+        result_dataset_size = self._get_number_of_ds_items(
+            dataset=hook.get_dataset(
+                dataset_id=self.dataset_id,
+                project_id=self.project_id,
+                location=self.location,
+                retry=self.retry,
+                timeout=self.timeout,
+                metadata=self.metadata,
+            ),
+            total_key_name="example_count",
+        )
+        if self.raise_for_empty_result:
+            self._raise_for_empty_import_result(self.dataset_id, initial_dataset_size, result_dataset_size)
         self.log.info("Importing data finished!")
+        return {"total_imported": int(result_dataset_size) - int(initial_dataset_size)}
 
 
 class TranslateDeleteDatasetOperator(GoogleCloudBaseOperator):
diff --git a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/dataset.py b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/dataset.py
index a2c0c79eb0fd3..fc7ea9ba85445 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/dataset.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/vertex_ai/dataset.py
@@ -26,6 +26,7 @@
 from google.api_core.gapic_v1.method import DEFAULT, _MethodDefault
 from google.cloud.aiplatform_v1.types import Dataset, ExportDataConfig, ImportDataConfig
 
+from airflow.exceptions import AirflowException
 from airflow.providers.google.cloud.hooks.vertex_ai.dataset import DatasetHook
 from airflow.providers.google.cloud.links.vertex_ai import VertexAIDatasetLink, VertexAIDatasetListLink
 from airflow.providers.google.cloud.operators.cloud_base import GoogleCloudBaseOperator
@@ -335,7 +336,21 @@ def execute(self, context: Context):
         self.log.info("Export was done successfully")
 
 
-class ImportDataOperator(GoogleCloudBaseOperator):
+class DatasetImportDataResultsCheckHelper:
+    """Helper utils to verify import dataset data results."""
+
+    @staticmethod
+    def _get_number_of_ds_items(dataset, total_key_name):
+        number_of_items = type(dataset).to_dict(dataset).get(total_key_name, 0)
+        return number_of_items
+
+    @staticmethod
+    def _raise_for_empty_import_result(dataset_id, initial_size, size_after_import):
+        if int(size_after_import) - int(initial_size) <= 0:
+            raise AirflowException(f"Empty results of data import for the dataset_id {dataset_id}.")
+
+
+class ImportDataOperator(GoogleCloudBaseOperator, DatasetImportDataResultsCheckHelper):
     """
     Imports data into a Dataset.
 
@@ -356,6 +371,7 @@ class ImportDataOperator(GoogleCloudBaseOperator):
         If set as a sequence, the identities from the list must grant
         Service Account Token Creator IAM role to the directly preceding identity, with first
         account from the list granting this role to the originating account (templated).
+    :param raise_for_empty_result: Raise an error if no additional data has been populated after the import.
     """
 
     template_fields = ("region", "dataset_id", "project_id", "impersonation_chain")
@@ -372,6 +388,7 @@ def __init__(
         metadata: Sequence[tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: str | Sequence[str] | None = None,
+        raise_for_empty_result: bool = False,
         **kwargs,
     ) -> None:
         super().__init__(**kwargs)
@@ -384,13 +401,24 @@ def __init__(
         self.metadata = metadata
         self.gcp_conn_id = gcp_conn_id
         self.impersonation_chain = impersonation_chain
+        self.raise_for_empty_result = raise_for_empty_result
 
     def execute(self, context: Context):
         hook = DatasetHook(
             gcp_conn_id=self.gcp_conn_id,
             impersonation_chain=self.impersonation_chain,
         )
-
+        initial_dataset_size = self._get_number_of_ds_items(
+            dataset=hook.get_dataset(
+                dataset_id=self.dataset_id,
+                project_id=self.project_id,
+                region=self.region,
+                retry=self.retry,
+                timeout=self.timeout,
+                metadata=self.metadata,
+            ),
+            total_key_name="data_item_count",
+        )
         self.log.info("Importing data: %s", self.dataset_id)
         operation = hook.import_data(
             project_id=self.project_id,
@@ -402,7 +430,21 @@ def execute(self, context: Context):
             metadata=self.metadata,
         )
         hook.wait_for_operation(timeout=self.timeout, operation=operation)
+        result_dataset_size = self._get_number_of_ds_items(
+            dataset=hook.get_dataset(
+                dataset_id=self.dataset_id,
+                project_id=self.project_id,
+                region=self.region,
+                retry=self.retry,
+                timeout=self.timeout,
+                metadata=self.metadata,
+            ),
+            total_key_name="data_item_count",
+        )
+        if self.raise_for_empty_result:
+            self._raise_for_empty_import_result(self.dataset_id, initial_dataset_size, result_dataset_size)
         self.log.info("Import was done successfully")
+        return {"total_data_items_imported": int(result_dataset_size) - int(initial_dataset_size)}
 
 
 class ListDatasetsOperator(GoogleCloudBaseOperator):
diff --git a/providers/google/tests/unit/google/cloud/operators/test_translate.py b/providers/google/tests/unit/google/cloud/operators/test_translate.py
index 4e20d8ee2ace3..5bb259d01cc77 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_translate.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_translate.py
@@ -22,6 +22,7 @@
 from google.api_core.gapic_v1.method import DEFAULT
 from google.cloud.translate_v3.types import (
     BatchTranslateDocumentResponse,
+    Dataset,
     TranslateDocumentResponse,
     automl_translation,
     translation_service,
@@ -331,6 +332,19 @@ def test_minimal_green_path(self, mock_hook, mock_link_persist):
             "input_files": [{"usage": "UNASSIGNED", "gcs_source": {"input_uri": "import data gcs path"}}]
         }
         mock_hook.return_value.import_dataset_data.return_value = mock.MagicMock()
+
+        SAMPLE_DATASET = {
+            "name": "sample_translation_dataset",
+            "example_count": None,
+            "source_language_code": "en",
+            "target_language_code": "es",
+        }
+        INITIAL_DS_SIZE = 1
+        FINAL_DS_SIZE = 101
+        INITIAL_DS = {**SAMPLE_DATASET, "example_count": INITIAL_DS_SIZE}
+        FINAL_DS = {**SAMPLE_DATASET, "example_count": FINAL_DS_SIZE}
+
+        mock_hook.return_value.get_dataset.side_effect = [Dataset(INITIAL_DS), Dataset(FINAL_DS)]
         op = TranslateImportDataOperator(
             task_id="task_id",
             dataset_id=DATASET_ID,
@@ -343,7 +357,7 @@ def test_minimal_green_path(self, mock_hook, mock_link_persist):
             retry=DEFAULT,
         )
         context = mock.MagicMock()
-        op.execute(context=context)
+        res = op.execute(context=context)
         mock_hook.assert_called_once_with(
             gcp_conn_id=GCP_CONN_ID,
             impersonation_chain=IMPERSONATION_CHAIN,
@@ -363,6 +377,7 @@ def test_minimal_green_path(self, mock_hook, mock_link_persist):
             location=LOCATION,
             project_id=PROJECT_ID,
         )
+        assert res["total_imported"] == FINAL_DS_SIZE - INITIAL_DS_SIZE
 
 
 class TestTranslateDeleteData:
diff --git a/providers/google/tests/unit/google/cloud/operators/test_vertex_ai.py b/providers/google/tests/unit/google/cloud/operators/test_vertex_ai.py
index 460e8b24847c3..1e9ecf2b5690d 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_vertex_ai.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_vertex_ai.py
@@ -26,6 +26,7 @@
 
 from google.api_core.gapic_v1.method import DEFAULT
 from google.api_core.retry import Retry
+from google.cloud.aiplatform_v1.types.dataset import Dataset
 
 from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning, TaskDeferred
 from airflow.providers.google.cloud.operators.vertex_ai.auto_ml import (
@@ -1362,9 +1363,8 @@ def test_execute(self, mock_hook, to_dict_mock):
 
 
 class TestVertexAIImportDataOperator:
-    @mock.patch(VERTEX_AI_PATH.format("dataset.Dataset.to_dict"))
     @mock.patch(VERTEX_AI_PATH.format("dataset.DatasetHook"))
-    def test_execute(self, mock_hook, to_dict_mock):
+    def test_execute(self, mock_hook):
         op = ImportDataOperator(
             task_id=TASK_ID,
             gcp_conn_id=GCP_CONN_ID,
@@ -1377,7 +1377,20 @@ def test_execute(self, mock_hook, to_dict_mock):
             timeout=TIMEOUT,
             metadata=METADATA,
         )
-        op.execute(context={})
+        SAMPLE_DATASET = {
+            "name": "sample_translation_dataset",
+            "display_name": "VertexAI dataset",
+            "data_item_count": None,
+        }
+        INITIAL_DS_SIZE = 1
+        FINAL_DS_SIZE = 101
+        INITIAL_DS = {**SAMPLE_DATASET, "data_item_count": INITIAL_DS_SIZE}
+        FINAL_DS = {**SAMPLE_DATASET, "data_item_count": FINAL_DS_SIZE}
+
+        mock_hook.return_value.get_dataset.side_effect = [Dataset(INITIAL_DS), Dataset(FINAL_DS)]
+
+        res = op.execute(context={})
+
         mock_hook.assert_called_once_with(gcp_conn_id=GCP_CONN_ID, impersonation_chain=IMPERSONATION_CHAIN)
         mock_hook.return_value.import_data.assert_called_once_with(
             region=GCP_LOCATION,
@@ -1388,6 +1401,7 @@ def test_execute(self, mock_hook, to_dict_mock):
             timeout=TIMEOUT,
             metadata=METADATA,
         )
+        assert res["total_data_items_imported"] == FINAL_DS_SIZE - INITIAL_DS_SIZE
 
 
 class TestVertexAIListDatasetsOperator:

From 2bdb51550cb29da5a3dbb03812ace55ebf26b694 Mon Sep 17 00:00:00 2001
From: olegkachur-e <qwsqad@gmail.com>
Date: Mon, 30 Jun 2025 23:14:38 +0200
Subject: [PATCH 350/381] Refactor the google cloud DataprocCreateBatchOperator
 tests (#52573)

- replce un-called method mock
- add logging checks
- populate labels checks

Co-authored-by: Oleg Kachur <kachur@google.com>
---
 .../google/cloud/operators/dataproc.py        |   8 +-
 .../google/cloud/operators/test_dataproc.py   | 204 +++++++++++-------
 2 files changed, 125 insertions(+), 87 deletions(-)

diff --git a/providers/google/src/airflow/providers/google/cloud/operators/dataproc.py b/providers/google/src/airflow/providers/google/cloud/operators/dataproc.py
index 5ed6923821ac8..349250150a545 100644
--- a/providers/google/src/airflow/providers/google/cloud/operators/dataproc.py
+++ b/providers/google/src/airflow/providers/google/cloud/operators/dataproc.py
@@ -2488,13 +2488,13 @@ def handle_batch_status(
         link = DATAPROC_BATCH_LINK.format(region=self.region, project_id=self.project_id, batch_id=batch_id)
         if state == Batch.State.FAILED:
             raise AirflowException(
-                f"Batch job {batch_id} failed with error: {state_message}\nDriver Logs: {link}"
+                f"Batch job {batch_id} failed with error: {state_message}.\nDriver logs: {link}"
             )
         if state in (Batch.State.CANCELLED, Batch.State.CANCELLING):
-            raise AirflowException(f"Batch job {batch_id} was cancelled. Driver logs: {link}")
+            raise AirflowException(f"Batch job {batch_id} was cancelled.\nDriver logs: {link}")
         if state == Batch.State.STATE_UNSPECIFIED:
-            raise AirflowException(f"Batch job {batch_id} unspecified. Driver logs: {link}")
-        self.log.info("Batch job %s completed. Driver logs: %s", batch_id, link)
+            raise AirflowException(f"Batch job {batch_id} unspecified.\nDriver logs: {link}")
+        self.log.info("Batch job %s completed.\nDriver logs: %s", batch_id, link)
 
     def retry_batch_creation(
         self,
diff --git a/providers/google/tests/unit/google/cloud/operators/test_dataproc.py b/providers/google/tests/unit/google/cloud/operators/test_dataproc.py
index 00923cb590a1f..c76c7046db1cc 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_dataproc.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_dataproc.py
@@ -39,6 +39,7 @@
 )
 from airflow.models import DAG, DagBag
 from airflow.providers.google.cloud.links.dataproc import (
+    DATAPROC_BATCH_LINK,
     DATAPROC_CLUSTER_LINK_DEPRECATED,
     DATAPROC_JOB_LINK_DEPRECATED,
 )
@@ -353,6 +354,12 @@
 TEST_JOB_ID = "test-job"
 TEST_WORKFLOW_ID = "test-workflow"
 
+EXPECTED_LABELS = {
+    "airflow-dag-id": TEST_DAG_ID,
+    "airflow-dag-display-name": TEST_DAG_ID,
+    "airflow-task-id": TASK_ID,
+}
+
 DATAPROC_JOB_LINK_EXPECTED = (
     f"https://console.cloud.google.com/dataproc/jobs/{TEST_JOB_ID}?region={GCP_REGION}&project={GCP_PROJECT}"
 )
@@ -3187,9 +3194,10 @@ def test_missing_region_parameter(self):
 
 
 class TestDataprocCreateBatchOperator:
+    @mock.patch.object(DataprocCreateBatchOperator, "log", new_callable=mock.MagicMock)
     @mock.patch(DATAPROC_PATH.format("Batch.to_dict"))
     @mock.patch(DATAPROC_PATH.format("DataprocHook"))
-    def test_execute(self, mock_hook, to_dict_mock):
+    def test_execute(self, mock_hook, to_dict_mock, mock_log):
         op = DataprocCreateBatchOperator(
             task_id=TASK_ID,
             gcp_conn_id=GCP_CONN_ID,
@@ -3203,7 +3211,10 @@ def test_execute(self, mock_hook, to_dict_mock):
             timeout=TIMEOUT,
             metadata=METADATA,
         )
-        mock_hook.return_value.wait_for_operation.return_value = Batch(state=Batch.State.SUCCEEDED)
+        mock_hook.return_value.create_batch.return_value.metadata.batch = f"prefix/{BATCH_ID}"
+        batch_state_succeeded = Batch(state=Batch.State.SUCCEEDED)
+        mock_hook.return_value.wait_for_batch.return_value = batch_state_succeeded
+
         op.execute(context=MagicMock())
         mock_hook.assert_called_once_with(gcp_conn_id=GCP_CONN_ID, impersonation_chain=IMPERSONATION_CHAIN)
         mock_hook.return_value.create_batch.assert_called_once_with(
@@ -3216,6 +3227,16 @@ def test_execute(self, mock_hook, to_dict_mock):
             timeout=TIMEOUT,
             metadata=METADATA,
         )
+        to_dict_mock.assert_called_once_with(batch_state_succeeded)
+        logs_link = DATAPROC_BATCH_LINK.format(region=GCP_REGION, project_id=GCP_PROJECT, batch_id=BATCH_ID)
+        mock_log.info.assert_has_calls(
+            [
+                mock.call("Starting batch %s", BATCH_ID),
+                mock.call("The batch %s was created.", BATCH_ID),
+                mock.call("Waiting for the completion of batch job %s", BATCH_ID),
+                mock.call("Batch job %s completed.\nDriver logs: %s", BATCH_ID, logs_link),
+            ]
+        )
 
     @mock.patch(DATAPROC_PATH.format("Batch.to_dict"))
     @mock.patch(DATAPROC_PATH.format("DataprocHook"))
@@ -3234,7 +3255,7 @@ def test_execute_with_result_retry(self, mock_hook, to_dict_mock):
             timeout=TIMEOUT,
             metadata=METADATA,
         )
-        mock_hook.return_value.wait_for_operation.return_value = Batch(state=Batch.State.SUCCEEDED)
+        mock_hook.return_value.wait_for_batch.return_value = Batch(state=Batch.State.SUCCEEDED)
         op.execute(context=MagicMock())
         mock_hook.assert_called_once_with(gcp_conn_id=GCP_CONN_ID, impersonation_chain=IMPERSONATION_CHAIN)
         mock_hook.return_value.create_batch.assert_called_once_with(
@@ -3268,8 +3289,9 @@ def test_execute_batch_failed(self, mock_hook, to_dict_mock):
         with pytest.raises(AirflowException):
             op.execute(context=MagicMock())
 
+    @mock.patch.object(DataprocCreateBatchOperator, "log", new_callable=mock.MagicMock)
     @mock.patch(DATAPROC_PATH.format("DataprocHook"))
-    def test_execute_batch_already_exists_succeeds(self, mock_hook):
+    def test_execute_batch_already_exists_succeeds(self, mock_hook, mock_log):
         op = DataprocCreateBatchOperator(
             task_id=TASK_ID,
             gcp_conn_id=GCP_CONN_ID,
@@ -3283,9 +3305,10 @@ def test_execute_batch_already_exists_succeeds(self, mock_hook):
             timeout=TIMEOUT,
             metadata=METADATA,
         )
-        mock_hook.return_value.wait_for_operation.side_effect = AlreadyExists("")
-        mock_hook.return_value.wait_for_batch.return_value = Batch(state=Batch.State.SUCCEEDED)
+        mock_hook.return_value.create_batch.side_effect = AlreadyExists("")
         mock_hook.return_value.create_batch.return_value.metadata.batch = f"prefix/{BATCH_ID}"
+        mock_hook.return_value.wait_for_batch.return_value = Batch(state=Batch.State.SUCCEEDED)
+
         op.execute(context=MagicMock())
         mock_hook.return_value.wait_for_batch.assert_called_once_with(
             batch_id=BATCH_ID,
@@ -3295,9 +3318,23 @@ def test_execute_batch_already_exists_succeeds(self, mock_hook):
             timeout=TIMEOUT,
             metadata=METADATA,
         )
+        # Check for succeeded run
+        logs_link = DATAPROC_BATCH_LINK.format(region=GCP_REGION, project_id=GCP_PROJECT, batch_id=BATCH_ID)
+
+        mock_log.info.assert_has_calls(
+            [
+                mock.call(
+                    "Batch with given id already exists.",
+                ),
+                mock.call("Attaching to the job %s if it is still running.", BATCH_ID),
+                mock.call("Waiting for the completion of batch job %s", BATCH_ID),
+                mock.call("Batch job %s completed.\nDriver logs: %s", BATCH_ID, logs_link),
+            ]
+        )
 
+    @mock.patch.object(DataprocCreateBatchOperator, "log", new_callable=mock.MagicMock)
     @mock.patch(DATAPROC_PATH.format("DataprocHook"))
-    def test_execute_batch_already_exists_fails(self, mock_hook):
+    def test_execute_batch_already_exists_fails(self, mock_hook, mock_log):
         op = DataprocCreateBatchOperator(
             task_id=TASK_ID,
             gcp_conn_id=GCP_CONN_ID,
@@ -3311,11 +3348,15 @@ def test_execute_batch_already_exists_fails(self, mock_hook):
             timeout=TIMEOUT,
             metadata=METADATA,
         )
-        mock_hook.return_value.wait_for_operation.side_effect = AlreadyExists("")
-        mock_hook.return_value.wait_for_batch.return_value = Batch(state=Batch.State.FAILED)
+        mock_hook.return_value.create_batch.side_effect = AlreadyExists("")
         mock_hook.return_value.create_batch.return_value.metadata.batch = f"prefix/{BATCH_ID}"
-        with pytest.raises(AirflowException):
+        mock_hook.return_value.wait_for_batch.return_value = Batch(state=Batch.State.FAILED)
+
+        with pytest.raises(AirflowException) as exc:
             op.execute(context=MagicMock())
+        # Check msg for FAILED batch state
+        logs_link = DATAPROC_BATCH_LINK.format(region=GCP_REGION, project_id=GCP_PROJECT, batch_id=BATCH_ID)
+        assert str(exc.value) == (f"Batch job {BATCH_ID} failed with error: .\nDriver logs: {logs_link}")
         mock_hook.return_value.wait_for_batch.assert_called_once_with(
             batch_id=BATCH_ID,
             region=GCP_REGION,
@@ -3324,9 +3365,12 @@ def test_execute_batch_already_exists_fails(self, mock_hook):
             timeout=TIMEOUT,
             metadata=METADATA,
         )
+        # Check logs for AlreadyExists being called
+        mock_log.info.assert_any_call("Batch with given id already exists.")
 
+    @mock.patch.object(DataprocCreateBatchOperator, "log", new_callable=mock.MagicMock)
     @mock.patch(DATAPROC_PATH.format("DataprocHook"))
-    def test_execute_batch_already_exists_cancelled(self, mock_hook):
+    def test_execute_batch_already_exists_cancelled(self, mock_hook, mock_log):
         op = DataprocCreateBatchOperator(
             task_id=TASK_ID,
             gcp_conn_id=GCP_CONN_ID,
@@ -3340,11 +3384,16 @@ def test_execute_batch_already_exists_cancelled(self, mock_hook):
             timeout=TIMEOUT,
             metadata=METADATA,
         )
-        mock_hook.return_value.wait_for_operation.side_effect = AlreadyExists("")
-        mock_hook.return_value.wait_for_batch.return_value = Batch(state=Batch.State.CANCELLED)
+        mock_hook.return_value.create_batch.side_effect = AlreadyExists("")
         mock_hook.return_value.create_batch.return_value.metadata.batch = f"prefix/{BATCH_ID}"
-        with pytest.raises(AirflowException):
+        mock_hook.return_value.wait_for_batch.return_value = Batch(state=Batch.State.CANCELLED)
+
+        with pytest.raises(AirflowException) as exc:
             op.execute(context=MagicMock())
+        # Check msg for CANCELLED batch state
+        logs_link = DATAPROC_BATCH_LINK.format(region=GCP_REGION, project_id=GCP_PROJECT, batch_id=BATCH_ID)
+        assert str(exc.value) == f"Batch job {BATCH_ID} was cancelled.\nDriver logs: {logs_link}"
+
         mock_hook.return_value.wait_for_batch.assert_called_once_with(
             batch_id=BATCH_ID,
             region=GCP_REGION,
@@ -3353,21 +3402,29 @@ def test_execute_batch_already_exists_cancelled(self, mock_hook):
             timeout=TIMEOUT,
             metadata=METADATA,
         )
+        # Check logs for AlreadyExists being called
+        mock_log.info.assert_any_call("Batch with given id already exists.")
 
+    @mock.patch.object(DataprocCreateBatchOperator, "log", new_callable=mock.MagicMock)
     @mock.patch("airflow.providers.openlineage.plugins.adapter.generate_static_uuid")
     @mock.patch("airflow.providers.google.cloud.openlineage.utils._is_openlineage_provider_accessible")
     @mock.patch(DATAPROC_PATH.format("Batch.to_dict"))
     @mock.patch(DATAPROC_PATH.format("DataprocHook"))
     def test_execute_openlineage_parent_job_info_injection(
-        self, mock_hook, to_dict_mock, mock_ol_accessible, mock_static_uuid
+        self,
+        mock_hook,
+        to_dict_mock,
+        mock_ol_accessible,
+        mock_static_uuid,
+        mock_log,
     ):
         mock_ol_accessible.return_value = True
         mock_static_uuid.return_value = "01931885-2800-7be7-aa8d-aaa15c337267"
         expected_batch = {
             **BATCH,
+            "labels": EXPECTED_LABELS,
             "runtime_config": {"properties": OPENLINEAGE_PARENT_JOB_EXAMPLE_SPARK_PROPERTIES},
         }
-
         op = DataprocCreateBatchOperator(
             task_id=TASK_ID,
             gcp_conn_id=GCP_CONN_ID,
@@ -3381,9 +3438,13 @@ def test_execute_openlineage_parent_job_info_injection(
             timeout=TIMEOUT,
             metadata=METADATA,
             openlineage_inject_parent_job_info=True,
+            dag=DAG(dag_id=TEST_DAG_ID),
         )
-        mock_hook.return_value.wait_for_operation.return_value = Batch(state=Batch.State.SUCCEEDED)
+        batch_state_succeeded = Batch(state=Batch.State.SUCCEEDED)
+        mock_hook.return_value.wait_for_batch.return_value = batch_state_succeeded
+        mock_hook.return_value.create_batch.return_value.metadata.batch = f"prefix/{BATCH_ID}"
         op.execute(context=EXAMPLE_CONTEXT)
+
         mock_hook.return_value.create_batch.assert_called_once_with(
             region=GCP_REGION,
             project_id=GCP_PROJECT,
@@ -3394,14 +3455,19 @@ def test_execute_openlineage_parent_job_info_injection(
             timeout=TIMEOUT,
             metadata=METADATA,
         )
+        to_dict_mock.assert_called_once_with(batch_state_succeeded)
+        logs_link = DATAPROC_BATCH_LINK.format(region=GCP_REGION, project_id=GCP_PROJECT, batch_id=BATCH_ID)
+        # Check SUCCEED run from the logs
+        mock_log.info.assert_any_call("Batch job %s completed.\nDriver logs: %s", BATCH_ID, logs_link)
 
+    @mock.patch.object(DataprocCreateBatchOperator, "log", new_callable=mock.MagicMock)
     @mock.patch("airflow.providers.openlineage.plugins.adapter.generate_static_uuid")
     @mock.patch("airflow.providers.openlineage.plugins.listener._openlineage_listener")
     @mock.patch("airflow.providers.google.cloud.openlineage.utils._is_openlineage_provider_accessible")
     @mock.patch(DATAPROC_PATH.format("Batch.to_dict"))
     @mock.patch(DATAPROC_PATH.format("DataprocHook"))
     def test_execute_openlineage_transport_info_injection(
-        self, mock_hook, to_dict_mock, mock_ol_accessible, mock_ol_listener, mock_static_uuid
+        self, mock_hook, to_dict_mock, mock_ol_accessible, mock_ol_listener, mock_static_uuid, mock_log
     ):
         mock_ol_accessible.return_value = True
         mock_static_uuid.return_value = "01931885-2800-7be7-aa8d-aaa15c337267"
@@ -3410,9 +3476,9 @@ def test_execute_openlineage_transport_info_injection(
         )
         expected_batch = {
             **BATCH,
+            "labels": EXPECTED_LABELS,
             "runtime_config": {"properties": OPENLINEAGE_HTTP_TRANSPORT_EXAMPLE_SPARK_PROPERTIES},
         }
-
         op = DataprocCreateBatchOperator(
             task_id=TASK_ID,
             gcp_conn_id=GCP_CONN_ID,
@@ -3426,9 +3492,13 @@ def test_execute_openlineage_transport_info_injection(
             timeout=TIMEOUT,
             metadata=METADATA,
             openlineage_inject_transport_info=True,
+            dag=DAG(dag_id=TEST_DAG_ID),
         )
-        mock_hook.return_value.wait_for_operation.return_value = Batch(state=Batch.State.SUCCEEDED)
+        batch_state_succeeded = Batch(state=Batch.State.SUCCEEDED)
+        mock_hook.return_value.wait_for_batch.return_value = batch_state_succeeded
+        mock_hook.return_value.create_batch.return_value.metadata.batch = f"prefix/{BATCH_ID}"
         op.execute(context=EXAMPLE_CONTEXT)
+
         mock_hook.return_value.create_batch.assert_called_once_with(
             region=GCP_REGION,
             project_id=GCP_PROJECT,
@@ -3439,6 +3509,14 @@ def test_execute_openlineage_transport_info_injection(
             timeout=TIMEOUT,
             metadata=METADATA,
         )
+        to_dict_mock.assert_called_once_with(batch_state_succeeded)
+        logs_link = DATAPROC_BATCH_LINK.format(region=GCP_REGION, project_id=GCP_PROJECT, batch_id=BATCH_ID)
+        # Verify logs for successful run
+        mock_log.info.assert_any_call(
+            "Batch job %s completed.\nDriver logs: %s",
+            BATCH_ID,
+            logs_link,
+        )
 
     @mock.patch("airflow.providers.openlineage.plugins.adapter.generate_static_uuid")
     @mock.patch("airflow.providers.openlineage.plugins.listener._openlineage_listener")
@@ -3455,6 +3533,7 @@ def test_execute_openlineage_all_info_injection(
         )
         expected_batch = {
             **BATCH,
+            "labels": EXPECTED_LABELS,
             "runtime_config": {
                 "properties": {
                     **OPENLINEAGE_PARENT_JOB_EXAMPLE_SPARK_PROPERTIES,
@@ -3462,7 +3541,6 @@ def test_execute_openlineage_all_info_injection(
                 }
             },
         }
-
         op = DataprocCreateBatchOperator(
             task_id=TASK_ID,
             gcp_conn_id=GCP_CONN_ID,
@@ -3477,8 +3555,9 @@ def test_execute_openlineage_all_info_injection(
             metadata=METADATA,
             openlineage_inject_parent_job_info=True,
             openlineage_inject_transport_info=True,
+            dag=DAG(dag_id=TEST_DAG_ID),
         )
-        mock_hook.return_value.wait_for_operation.return_value = Batch(state=Batch.State.SUCCEEDED)
+        mock_hook.return_value.wait_for_batch.return_value = Batch(state=Batch.State.SUCCEEDED)
         op.execute(context=EXAMPLE_CONTEXT)
         mock_hook.return_value.create_batch.assert_called_once_with(
             region=GCP_REGION,
@@ -3498,22 +3577,15 @@ def test_execute_openlineage_parent_job_info_injection_skipped_when_already_pres
         self, mock_hook, to_dict_mock, mock_ol_accessible
     ):
         mock_ol_accessible.return_value = True
-        expected_labels = {
-            "airflow-dag-id": "test_dag",
-            "airflow-dag-display-name": "test_dag",
-            "airflow-task-id": "task-id",
-        }
-
         batch = {
             **BATCH,
-            "labels": expected_labels,
+            "labels": EXPECTED_LABELS,
             "runtime_config": {
                 "properties": {
                     "spark.openlineage.parentJobName": "dag_id.task_id",
                 }
             },
         }
-
         op = DataprocCreateBatchOperator(
             task_id=TASK_ID,
             gcp_conn_id=GCP_CONN_ID,
@@ -3527,9 +3599,9 @@ def test_execute_openlineage_parent_job_info_injection_skipped_when_already_pres
             timeout=TIMEOUT,
             metadata=METADATA,
             openlineage_inject_parent_job_info=True,
-            dag=DAG(dag_id="test_dag"),
+            dag=DAG(dag_id=TEST_DAG_ID),
         )
-        mock_hook.return_value.wait_for_operation.return_value = Batch(state=Batch.State.SUCCEEDED)
+        mock_hook.return_value.wait_for_batch.return_value = Batch(state=Batch.State.SUCCEEDED)
         op.execute(context=EXAMPLE_CONTEXT)
         mock_hook.return_value.create_batch.assert_called_once_with(
             region=GCP_REGION,
@@ -3553,23 +3625,15 @@ def test_execute_openlineage_transport_info_injection_skipped_when_already_prese
         mock_ol_listener.adapter.get_or_create_openlineage_client.return_value.transport = HttpTransport(
             HttpConfig.from_dict(OPENLINEAGE_HTTP_TRANSPORT_EXAMPLE_CONFIG)
         )
-
-        expected_labels = {
-            "airflow-dag-id": "test_dag",
-            "airflow-dag-display-name": "test_dag",
-            "airflow-task-id": "task-id",
-        }
-
         batch = {
             **BATCH,
-            "labels": expected_labels,
+            "labels": EXPECTED_LABELS,
             "runtime_config": {
                 "properties": {
                     "spark.openlineage.transport.type": "console",
                 }
             },
         }
-
         op = DataprocCreateBatchOperator(
             task_id=TASK_ID,
             gcp_conn_id=GCP_CONN_ID,
@@ -3583,7 +3647,7 @@ def test_execute_openlineage_transport_info_injection_skipped_when_already_prese
             timeout=TIMEOUT,
             metadata=METADATA,
             openlineage_inject_transport_info=True,
-            dag=DAG(dag_id="test_dag"),
+            dag=DAG(dag_id=TEST_DAG_ID),
         )
         mock_hook.return_value.wait_for_operation.return_value = Batch(state=Batch.State.SUCCEEDED)
         op.execute(context=EXAMPLE_CONTEXT)
@@ -3609,7 +3673,6 @@ def test_execute_openlineage_parent_job_info_injection_skipped_by_default_unless
             **BATCH,
             "runtime_config": {"properties": {}},
         }
-
         op = DataprocCreateBatchOperator(
             task_id=TASK_ID,
             gcp_conn_id=GCP_CONN_ID,
@@ -3624,7 +3687,7 @@ def test_execute_openlineage_parent_job_info_injection_skipped_by_default_unless
             metadata=METADATA,
             # not passing openlineage_inject_parent_job_info, should be False by default
         )
-        mock_hook.return_value.wait_for_operation.return_value = Batch(state=Batch.State.SUCCEEDED)
+        mock_hook.return_value.wait_for_batch.return_value = Batch(state=Batch.State.SUCCEEDED)
         op.execute(context=EXAMPLE_CONTEXT)
         mock_hook.return_value.create_batch.assert_called_once_with(
             region=GCP_REGION,
@@ -3652,7 +3715,6 @@ def test_execute_openlineage_transport_info_injection_skipped_by_default_unless_
             **BATCH,
             "runtime_config": {"properties": {}},
         }
-
         op = DataprocCreateBatchOperator(
             task_id=TASK_ID,
             gcp_conn_id=GCP_CONN_ID,
@@ -3667,7 +3729,7 @@ def test_execute_openlineage_transport_info_injection_skipped_by_default_unless_
             metadata=METADATA,
             # not passing openlineage_inject_transport_info, should be False by default
         )
-        mock_hook.return_value.wait_for_operation.return_value = Batch(state=Batch.State.SUCCEEDED)
+        mock_hook.return_value.wait_for_batch.return_value = Batch(state=Batch.State.SUCCEEDED)
         op.execute(context=EXAMPLE_CONTEXT)
         mock_hook.return_value.create_batch.assert_called_once_with(
             region=GCP_REGION,
@@ -3691,7 +3753,6 @@ def test_execute_openlineage_parent_job_info_injection_skipped_when_ol_not_acces
             **BATCH,
             "runtime_config": {"properties": {}},
         }
-
         op = DataprocCreateBatchOperator(
             task_id=TASK_ID,
             gcp_conn_id=GCP_CONN_ID,
@@ -3706,7 +3767,7 @@ def test_execute_openlineage_parent_job_info_injection_skipped_when_ol_not_acces
             metadata=METADATA,
             openlineage_inject_parent_job_info=True,
         )
-        mock_hook.return_value.wait_for_operation.return_value = Batch(state=Batch.State.SUCCEEDED)
+        mock_hook.return_value.wait_for_batch.return_value = Batch(state=Batch.State.SUCCEEDED)
         op.execute(context=EXAMPLE_CONTEXT)
         mock_hook.return_value.create_batch.assert_called_once_with(
             region=GCP_REGION,
@@ -3734,7 +3795,6 @@ def test_execute_openlineage_transport_info_injection_skipped_when_ol_not_access
             **BATCH,
             "runtime_config": {"properties": {}},
         }
-
         op = DataprocCreateBatchOperator(
             task_id=TASK_ID,
             gcp_conn_id=GCP_CONN_ID,
@@ -3749,7 +3809,7 @@ def test_execute_openlineage_transport_info_injection_skipped_when_ol_not_access
             metadata=METADATA,
             openlineage_inject_transport_info=True,
         )
-        mock_hook.return_value.wait_for_operation.return_value = Batch(state=Batch.State.SUCCEEDED)
+        mock_hook.return_value.wait_for_batch.return_value = Batch(state=Batch.State.SUCCEEDED)
         op.execute(context=EXAMPLE_CONTEXT)
         mock_hook.return_value.create_batch.assert_called_once_with(
             region=GCP_REGION,
@@ -3778,20 +3838,13 @@ def __assert_batch_create(mock_hook, expected_batch):
     @mock.patch(DATAPROC_PATH.format("Batch.to_dict"))
     @mock.patch(DATAPROC_PATH.format("DataprocHook"))
     def test_create_batch_asdict_labels_updated(self, mock_hook, to_dict_mock):
-        expected_labels = {
-            "airflow-dag-id": "test_dag",
-            "airflow-dag-display-name": "test_dag",
-            "airflow-task-id": "test-task",
-        }
-
         expected_batch = {
             **BATCH,
-            "labels": expected_labels,
+            "labels": EXPECTED_LABELS,
         }
-
         DataprocCreateBatchOperator(
-            task_id="test-task",
-            dag=DAG(dag_id="test_dag"),
+            task_id=TASK_ID,
+            dag=DAG(dag_id=TEST_DAG_ID),
             batch=BATCH,
             region=GCP_REGION,
         ).execute(context=EXAMPLE_CONTEXT)
@@ -3801,20 +3854,13 @@ def test_create_batch_asdict_labels_updated(self, mock_hook, to_dict_mock):
     @mock.patch(DATAPROC_PATH.format("Batch.to_dict"))
     @mock.patch(DATAPROC_PATH.format("DataprocHook"))
     def test_create_batch_asdict_labels_uppercase_transformed(self, mock_hook, to_dict_mock):
-        expected_labels = {
-            "airflow-dag-id": "test_dag",
-            "airflow-dag-display-name": "test_dag",
-            "airflow-task-id": "test-task",
-        }
-
         expected_batch = {
             **BATCH,
-            "labels": expected_labels,
+            "labels": EXPECTED_LABELS,
         }
-
         DataprocCreateBatchOperator(
-            task_id="test-TASK",
-            dag=DAG(dag_id="Test_dag"),
+            task_id=TASK_ID,
+            dag=DAG(dag_id=TEST_DAG_ID),
             batch=BATCH,
             region=GCP_REGION,
         ).execute(context=EXAMPLE_CONTEXT)
@@ -3826,7 +3872,7 @@ def test_create_batch_asdict_labels_uppercase_transformed(self, mock_hook, to_di
     def test_create_batch_invalid_taskid_labels_ignored(self, mock_hook, to_dict_mock):
         DataprocCreateBatchOperator(
             task_id=".task-id",
-            dag=DAG(dag_id="test-dag"),
+            dag=DAG(dag_id=TEST_DAG_ID),
             batch=BATCH,
             region=GCP_REGION,
         ).execute(context=EXAMPLE_CONTEXT)
@@ -3838,7 +3884,7 @@ def test_create_batch_invalid_taskid_labels_ignored(self, mock_hook, to_dict_moc
     def test_create_batch_long_taskid_labels_ignored(self, mock_hook, to_dict_mock):
         DataprocCreateBatchOperator(
             task_id="a" * 65,
-            dag=DAG(dag_id="test-dag"),
+            dag=DAG(dag_id=TEST_DAG_ID),
             batch=BATCH,
             region=GCP_REGION,
         ).execute(context=EXAMPLE_CONTEXT)
@@ -3850,21 +3896,13 @@ def test_create_batch_long_taskid_labels_ignored(self, mock_hook, to_dict_mock):
     def test_create_batch_asobj_labels_updated(self, mock_hook, to_dict_mock):
         batch = Batch(name="test")
         batch.labels["foo"] = "bar"
-        dag = DAG(dag_id="test_dag")
-
-        expected_labels = {
-            "airflow-dag-id": "test_dag",
-            "airflow-dag-display-name": "test_dag",
-            "airflow-task-id": "test-task",
-        }
-
         expected_batch = deepcopy(batch)
-        expected_batch.labels.update(expected_labels)
+        expected_batch.labels.update(EXPECTED_LABELS)
+        dag = DAG(dag_id=TEST_DAG_ID)
 
-        DataprocCreateBatchOperator(task_id="test-task", batch=batch, region=GCP_REGION, dag=dag).execute(
+        DataprocCreateBatchOperator(task_id=TASK_ID, batch=batch, region=GCP_REGION, dag=dag).execute(
             context=EXAMPLE_CONTEXT
         )
-
         TestDataprocCreateBatchOperator.__assert_batch_create(mock_hook, expected_batch)
 
 

From 4b8cd257e9ad88ffe617ef642cdbfba87fe1298c Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Mon, 30 Jun 2025 23:23:50 +0200
Subject: [PATCH 351/381] Upgrade ruff to latest version (0.12.1) (#52562)

Fixes #52551
---
 .pre-commit-config.yaml                       |   6 +-
 .../src/airflow/utils/log/logging_mixin.py    |   6 +-
 .../unit/always/test_providers_manager.py     |  10 +-
 .../versions/head/test_task_instances.py      |   2 +-
 .../tests/unit/core/test_configuration.py     |  49 ++--
 .../tests/unit/datasets/test_dataset.py       |  10 +-
 .../tests/unit/listeners/test_listeners.py    |  12 +-
 airflow-core/tests/unit/models/test_dagbag.py |   2 +-
 .../tests/unit/models/test_taskinstance.py    |   6 +-
 .../tests/unit/models/test_timestamp.py       |   4 +-
 devel-common/pyproject.toml                   |   2 +-
 .../airflow_aux/test_container_lifecycle.py   |   3 +
 .../tests/unit/amazon/aws/hooks/test_eks.py   |   3 +
 .../aws/utils/test_connection_wrapper.py      |   2 +-
 .../celery/executors/test_celery_executor.py  |   2 +-
 .../executors/test_kubernetes_executor.py     |   2 +-
 .../databricks/hooks/test_databricks_sql.py   |   3 +
 .../unit/google/cloud/hooks/test_bigquery.py  |  34 +--
 .../google/cloud/operators/test_automl.py     |   8 +-
 .../google/cloud/operators/test_bigquery.py   | 216 +++++++++---------
 .../cloud/operators/test_life_sciences.py     |   8 +-
 .../microsoft/azure/operators/test_msgraph.py |  54 ++---
 .../microsoft/azure/sensors/test_msgraph.py   |  28 +--
 .../tests/unit/slack/hooks/test_slack.py      |   6 +-
 .../unit/slack/hooks/test_slack_webhook.py    |   6 +-
 .../unit/standard/decorators/test_bash.py     |   4 +-
 .../unit/standard/decorators/test_python.py   |  20 +-
 .../unit/standard/operators/test_python.py    |  16 +-
 .../unit/standard/sensors/test_time_delta.py  |  76 +++---
 task-sdk/pyproject.toml                       |   4 +-
 .../airflow/sdk/execution_time/supervisor.py  |  10 +-
 .../tests/task_sdk/bases/test_operator.py     |  16 +-
 .../tests/task_sdk/definitions/test_asset.py  |   2 +-
 33 files changed, 324 insertions(+), 308 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index fefaecec8b4d2..15b5a3605d5ca 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -427,7 +427,7 @@ repos:
         types_or: [python, pyi]
         args: [--fix]
         require_serial: true
-        additional_dependencies: ['ruff==0.11.13']
+        additional_dependencies: ['ruff==0.12.1']
         exclude: ^airflow-core/tests/unit/dags/test_imports\.py$|^performance/tests/test_.*\.py$
       - id: ruff-format
         name: Run 'ruff format'
@@ -437,7 +437,7 @@ repos:
         types_or: [python, pyi]
         args: []
         require_serial: true
-        additional_dependencies: ['ruff==0.11.13']
+        additional_dependencies: ['ruff==0.12.1']
         exclude: ^airflow-core/tests/unit/dags/test_imports\.py$
       - id: replace-bad-characters
         name: Replace bad characters
@@ -1590,7 +1590,7 @@ repos:
         name: Check imports in providers
         entry: ./scripts/ci/pre_commit/check_imports_in_providers.py
         language: python
-        additional_dependencies: ['rich>=12.4.4', 'ruff==0.11.13']
+        additional_dependencies: ['rich>=12.4.4', 'ruff==0.12.1']
         files: ^providers/.*/src/airflow/providers/.*version_compat.*\.py$
         require_serial: true
         ## ONLY ADD PRE-COMMITS HERE THAT REQUIRE CI IMAGE
diff --git a/airflow-core/src/airflow/utils/log/logging_mixin.py b/airflow-core/src/airflow/utils/log/logging_mixin.py
index 2e22c6999cb0b..1b3e24442dfa1 100644
--- a/airflow-core/src/airflow/utils/log/logging_mixin.py
+++ b/airflow-core/src/airflow/utils/log/logging_mixin.py
@@ -24,7 +24,7 @@
 import sys
 from io import TextIOBase, UnsupportedOperation
 from logging import Handler, StreamHandler
-from typing import IO, TYPE_CHECKING, Any, Optional, TypeVar, cast
+from typing import IO, TYPE_CHECKING, Any, TypeVar, cast
 
 if TYPE_CHECKING:
     from logging import Logger
@@ -72,9 +72,9 @@ class LoggingMixin:
     # Parent logger used by this class. It should match one of the loggers defined in the
     # `logging_config_class`. By default, this attribute is used to create the final name of the logger, and
     # will prefix the `_logger_name` with a separating dot.
-    _log_config_logger_name: Optional[str] = None  # noqa: UP007
+    _log_config_logger_name: str | None = None
 
-    _logger_name: Optional[str] = None  # noqa: UP007
+    _logger_name: str | None = None
 
     def __init__(self, context=None):
         self._set_context(context)
diff --git a/airflow-core/tests/unit/always/test_providers_manager.py b/airflow-core/tests/unit/always/test_providers_manager.py
index 4f2de48b70bac..d0a2037f9bdce 100644
--- a/airflow-core/tests/unit/always/test_providers_manager.py
+++ b/airflow-core/tests/unit/always/test_providers_manager.py
@@ -72,12 +72,12 @@ def test_providers_are_loaded(self):
             assert self._caplog.records == []
 
     def test_hooks_deprecation_warnings_generated(self):
+        providers_manager = ProvidersManager()
+        providers_manager._provider_dict["test-package"] = ProviderInfo(
+            version="0.0.1",
+            data={"hook-class-names": ["airflow.providers.sftp.hooks.sftp.SFTPHook"]},
+        )
         with pytest.warns(expected_warning=DeprecationWarning, match="hook-class-names") as warning_records:
-            providers_manager = ProvidersManager()
-            providers_manager._provider_dict["test-package"] = ProviderInfo(
-                version="0.0.1",
-                data={"hook-class-names": ["airflow.providers.sftp.hooks.sftp.SFTPHook"]},
-            )
             providers_manager._discover_hooks()
         assert warning_records
 
diff --git a/airflow-core/tests/unit/api_fastapi/execution_api/versions/head/test_task_instances.py b/airflow-core/tests/unit/api_fastapi/execution_api/versions/head/test_task_instances.py
index 3c107f61863f2..d9cdf9542aae3 100644
--- a/airflow-core/tests/unit/api_fastapi/execution_api/versions/head/test_task_instances.py
+++ b/airflow-core/tests/unit/api_fastapi/execution_api/versions/head/test_task_instances.py
@@ -1909,7 +1909,7 @@ def test_get_task_group_states_with_multiple_task(self, client, session, dag_mak
             },
         }
 
-    def test_get_task_group_states_with_logical_dates(self, client, session, dag_maker, serialized=True):
+    def test_get_task_group_states_with_logical_dates(self, client, session, dag_maker):
         with dag_maker("test_get_task_group_states_with_logical_dates", serialized=True):
             with TaskGroup("group1"):
                 EmptyOperator(task_id="task1")
diff --git a/airflow-core/tests/unit/core/test_configuration.py b/airflow-core/tests/unit/core/test_configuration.py
index 8b64640f93532..2de31a5dd1063 100644
--- a/airflow-core/tests/unit/core/test_configuration.py
+++ b/airflow-core/tests/unit/core/test_configuration.py
@@ -1040,11 +1040,14 @@ def test_deprecated_options(self):
             # Remove it so we are sure we use the right setting
             conf.remove_option("celery", "worker_concurrency")
 
-            with pytest.warns(DeprecationWarning):
+            with pytest.warns(DeprecationWarning, match="celeryd_concurrency"):
                 with mock.patch.dict("os.environ", AIRFLOW__CELERY__CELERYD_CONCURRENCY="99"):
                     assert conf.getint("celery", "worker_concurrency") == 99
 
-            with pytest.warns(DeprecationWarning), conf_vars({("celery", "celeryd_concurrency"): "99"}):
+            with (
+                pytest.warns(DeprecationWarning, match="celeryd_concurrency"),
+                conf_vars({("celery", "celeryd_concurrency"): "99"}),
+            ):
                 assert conf.getint("celery", "worker_concurrency") == 99
 
     @pytest.mark.parametrize(
@@ -1109,13 +1112,13 @@ def test_deprecated_options_cmd(self):
         ):
             conf.remove_option("celery", "result_backend")
             with conf_vars({("celery", "celery_result_backend_cmd"): "/bin/echo 99"}):
-                with pytest.warns(DeprecationWarning):
-                    tmp = None
-                    if "AIRFLOW__CELERY__RESULT_BACKEND" in os.environ:
-                        tmp = os.environ.pop("AIRFLOW__CELERY__RESULT_BACKEND")
+                tmp = None
+                if "AIRFLOW__CELERY__RESULT_BACKEND" in os.environ:
+                    tmp = os.environ.pop("AIRFLOW__CELERY__RESULT_BACKEND")
+                with pytest.warns(DeprecationWarning, match="result_backend"):
                     assert conf.getint("celery", "result_backend") == 99
-                    if tmp:
-                        os.environ["AIRFLOW__CELERY__RESULT_BACKEND"] = tmp
+                if tmp:
+                    os.environ["AIRFLOW__CELERY__RESULT_BACKEND"] = tmp
 
     def test_deprecated_values_from_conf(self):
         test_conf = AirflowConfigParser(
@@ -1135,7 +1138,7 @@ def test_deprecated_values_from_conf(self):
 
         with pytest.warns(FutureWarning):
             test_conf.validate()
-            assert test_conf.get("core", "hostname_callable") == "airflow.utils.net.getfqdn"
+        assert test_conf.get("core", "hostname_callable") == "airflow.utils.net.getfqdn"
 
     @pytest.mark.parametrize(
         "old, new",
@@ -1160,19 +1163,19 @@ def test_deprecated_env_vars_upgraded_and_removed(self, old, new):
         old_env_var = test_conf._env_var_name(old_section, old_key)
         new_env_var = test_conf._env_var_name(new_section, new_key)
 
-        with pytest.warns(FutureWarning):
-            with mock.patch.dict("os.environ", **{old_env_var: old_value}):
-                # Can't start with the new env var existing...
-                os.environ.pop(new_env_var, None)
+        with mock.patch.dict("os.environ", **{old_env_var: old_value}):
+            # Can't start with the new env var existing...
+            os.environ.pop(new_env_var, None)
 
+            with pytest.warns(FutureWarning):
                 test_conf.validate()
-                assert test_conf.get(new_section, new_key) == new_value
-                # We also need to make sure the deprecated env var is removed
-                # so that any subprocesses don't use it in place of our updated
-                # value.
-                assert old_env_var not in os.environ
-                # and make sure we track the old value as well, under the new section/key
-                assert test_conf.upgraded_values[(new_section, new_key)] == old_value
+            assert test_conf.get(new_section, new_key) == new_value
+            # We also need to make sure the deprecated env var is removed
+            # so that any subprocesses don't use it in place of our updated
+            # value.
+            assert old_env_var not in os.environ
+            # and make sure we track the old value as well, under the new section/key
+            assert test_conf.upgraded_values[(new_section, new_key)] == old_value
 
     @pytest.mark.parametrize(
         "conf_dict",
@@ -1200,10 +1203,10 @@ def make_config():
             test_conf.validate()
             return test_conf
 
-        with pytest.warns(FutureWarning):
-            with mock.patch.dict("os.environ", AIRFLOW__CORE__HOSTNAME_CALLABLE="airflow.utils.net:getfqdn"):
+        with mock.patch.dict("os.environ", AIRFLOW__CORE__HOSTNAME_CALLABLE="airflow.utils.net:getfqdn"):
+            with pytest.warns(FutureWarning):
                 test_conf = make_config()
-                assert test_conf.get("core", "hostname_callable") == "airflow.utils.net.getfqdn"
+            assert test_conf.get("core", "hostname_callable") == "airflow.utils.net.getfqdn"
 
         with reset_warning_registry():
             with warnings.catch_warnings(record=True) as warning:
diff --git a/airflow-core/tests/unit/datasets/test_dataset.py b/airflow-core/tests/unit/datasets/test_dataset.py
index 31211ad0dd247..4ad0946549937 100644
--- a/airflow-core/tests/unit/datasets/test_dataset.py
+++ b/airflow-core/tests/unit/datasets/test_dataset.py
@@ -73,12 +73,14 @@
     ),
 )
 def test_backward_compat_import_before_airflow_3_2(module_path, attr_name, expected_value, warning_message):
-    with pytest.warns() as record:
-        import importlib
+    import importlib
 
+    with pytest.warns() as record:
         mod = importlib.import_module(module_path, __name__)
         attr = getattr(mod, attr_name)
-        assert f"{attr.__module__}.{attr.__name__}" == expected_value
-
+    assert f"{attr.__module__}.{attr.__name__}" == expected_value
     assert record[0].category is DeprecationWarning
     assert str(record[0].message) == warning_message
+
+
+# ruff: noqa: PT031
diff --git a/airflow-core/tests/unit/listeners/test_listeners.py b/airflow-core/tests/unit/listeners/test_listeners.py
index 3fceaaf0843cc..9a4c85cb504a1 100644
--- a/airflow-core/tests/unit/listeners/test_listeners.py
+++ b/airflow-core/tests/unit/listeners/test_listeners.py
@@ -69,7 +69,7 @@ def clean_listener_manager():
 
 
 @provide_session
-def test_listener_gets_calls(create_task_instance, session=None):
+def test_listener_gets_calls(create_task_instance, session):
     lm = get_listener_manager()
     lm.add_listener(full_listener)
 
@@ -84,7 +84,7 @@ def test_listener_gets_calls(create_task_instance, session=None):
 
 
 @provide_session
-def test_multiple_listeners(create_task_instance, session=None):
+def test_multiple_listeners(create_task_instance, session):
     lm = get_listener_manager()
     lm.add_listener(full_listener)
     lm.add_listener(lifecycle_listener)
@@ -105,7 +105,7 @@ def test_multiple_listeners(create_task_instance, session=None):
 
 
 @provide_session
-def test_listener_gets_only_subscribed_calls(create_task_instance, session=None):
+def test_listener_gets_only_subscribed_calls(create_task_instance, session):
     lm = get_listener_manager()
     lm.add_listener(partial_listener)
 
@@ -130,7 +130,7 @@ def test_listener_suppresses_exceptions(create_task_instance, session, cap_struc
 
 
 @provide_session
-def test_listener_captures_failed_taskinstances(create_task_instance_of_operator, session=None):
+def test_listener_captures_failed_taskinstances(create_task_instance_of_operator, session):
     lm = get_listener_manager()
     lm.add_listener(full_listener)
 
@@ -145,7 +145,7 @@ def test_listener_captures_failed_taskinstances(create_task_instance_of_operator
 
 
 @provide_session
-def test_listener_captures_longrunning_taskinstances(create_task_instance_of_operator, session=None):
+def test_listener_captures_longrunning_taskinstances(create_task_instance_of_operator, session):
     lm = get_listener_manager()
     lm.add_listener(full_listener)
 
@@ -159,7 +159,7 @@ def test_listener_captures_longrunning_taskinstances(create_task_instance_of_ope
 
 
 @provide_session
-def test_class_based_listener(create_task_instance, session=None):
+def test_class_based_listener(create_task_instance, session):
     lm = get_listener_manager()
     listener = class_listener.ClassBasedListener()
     lm.add_listener(listener)
diff --git a/airflow-core/tests/unit/models/test_dagbag.py b/airflow-core/tests/unit/models/test_dagbag.py
index c3a0fcd929f8e..0e863bd17a58c 100644
--- a/airflow-core/tests/unit/models/test_dagbag.py
+++ b/airflow-core/tests/unit/models/test_dagbag.py
@@ -1032,7 +1032,7 @@ def test_capture_warnings(self):
         with pytest.warns(UserWarning, match="(Foo|Bar|Baz)") as ctx:
             with _capture_with_reraise() as cw:
                 self.raise_warnings()
-            assert len(cw) == 3
+        assert len(cw) == 3
         assert len(ctx.list) == 3
 
     def test_capture_warnings_with_parent_error_filter(self):
diff --git a/airflow-core/tests/unit/models/test_taskinstance.py b/airflow-core/tests/unit/models/test_taskinstance.py
index 8f0de3d07c95e..a25924e4ab17f 100644
--- a/airflow-core/tests/unit/models/test_taskinstance.py
+++ b/airflow-core/tests/unit/models/test_taskinstance.py
@@ -404,7 +404,7 @@ def test_pool_slots_property(self):
             )
 
     @provide_session
-    def test_ti_updates_with_task(self, create_task_instance, session=None):
+    def test_ti_updates_with_task(self, create_task_instance, session):
         """
         test that updating the executor_config propagates to the TaskInstance DB
         """
@@ -1269,7 +1269,7 @@ def test_respects_prev_dagrun_dep(self, create_task_instance):
     )
     @provide_session
     def test_are_dependents_done(
-        self, downstream_ti_state, expected_are_dependents_done, create_task_instance, session=None
+        self, downstream_ti_state, expected_are_dependents_done, create_task_instance, session
     ):
         ti = create_task_instance(session=session)
         dag = ti.task.dag
@@ -2288,7 +2288,7 @@ def test_template_with_json_variable_missing(self, create_task_instance, session
             ti.task.render_template('{{ var.json.get("missing_variable") }}', context)
 
     @provide_session
-    def test_handle_failure(self, dag_maker, session=None):
+    def test_handle_failure(self, dag_maker, session):
         class CustomOp(BaseOperator):
             def execute(self, context): ...
 
diff --git a/airflow-core/tests/unit/models/test_timestamp.py b/airflow-core/tests/unit/models/test_timestamp.py
index 912347c602e77..5aaa956829d72 100644
--- a/airflow-core/tests/unit/models/test_timestamp.py
+++ b/airflow-core/tests/unit/models/test_timestamp.py
@@ -54,7 +54,7 @@ def add_log(execdate, session, dag_maker, timezone_override=None):
 
 
 @provide_session
-def test_timestamp_behaviour(dag_maker, session=None):
+def test_timestamp_behaviour(dag_maker, session):
     execdate = timezone.utcnow()
     with time_machine.travel(execdate, tick=False):
         current_time = timezone.utcnow()
@@ -66,7 +66,7 @@ def test_timestamp_behaviour(dag_maker, session=None):
 
 
 @provide_session
-def test_timestamp_behaviour_with_timezone(dag_maker, session=None):
+def test_timestamp_behaviour_with_timezone(dag_maker, session):
     execdate = timezone.utcnow()
     with time_machine.travel(execdate, tick=False):
         current_time = timezone.utcnow()
diff --git a/devel-common/pyproject.toml b/devel-common/pyproject.toml
index 2af4184c0e2e5..1a37f7cafcfac 100644
--- a/devel-common/pyproject.toml
+++ b/devel-common/pyproject.toml
@@ -35,7 +35,7 @@ dependencies = [
     "kgb>=7.2.0",
     "requests_mock>=1.11.0",
     "rich>=13.6.0",
-    "ruff==0.11.13",
+    "ruff==0.12.1",
     "semver>=3.0.2",
     "time-machine>=2.13.0",
     "wheel>=0.42.0",
diff --git a/helm-tests/tests/helm_tests/airflow_aux/test_container_lifecycle.py b/helm-tests/tests/helm_tests/airflow_aux/test_container_lifecycle.py
index 77e8cb09a33ff..440dc68b4da7e 100644
--- a/helm-tests/tests/helm_tests/airflow_aux/test_container_lifecycle.py
+++ b/helm-tests/tests/helm_tests/airflow_aux/test_container_lifecycle.py
@@ -223,3 +223,6 @@ def test_log_groomer_sidecar_container_setting(self, hook_type="preStop"):
             assert lifecycle_hook_params["lifecycle_parsed"] == jmespath.search(
                 f"spec.template.spec.containers[1].lifecycle.{hook_type}", doc
             )
+
+
+# ruff: noqa: PT028
diff --git a/providers/amazon/tests/unit/amazon/aws/hooks/test_eks.py b/providers/amazon/tests/unit/amazon/aws/hooks/test_eks.py
index ed95a4f75e5d0..ebd45661cd315 100644
--- a/providers/amazon/tests/unit/amazon/aws/hooks/test_eks.py
+++ b/providers/amazon/tests/unit/amazon/aws/hooks/test_eks.py
@@ -1360,3 +1360,6 @@ def assert_is_valid_uri(value: str) -> None:
 
     assert all([result.scheme, result.netloc, result.path])
     assert REGION in value
+
+
+# ruff: noqa: PT028
diff --git a/providers/amazon/tests/unit/amazon/aws/utils/test_connection_wrapper.py b/providers/amazon/tests/unit/amazon/aws/utils/test_connection_wrapper.py
index 02275cccaea59..796d105724159 100644
--- a/providers/amazon/tests/unit/amazon/aws/utils/test_connection_wrapper.py
+++ b/providers/amazon/tests/unit/amazon/aws/utils/test_connection_wrapper.py
@@ -120,7 +120,7 @@ def test_unexpected_aws_connection_type(self, conn_type):
         warning_message = f"expected connection type 'aws', got '{conn_type}'"
         with pytest.warns(UserWarning, match=warning_message):
             wrap_conn = AwsConnectionWrapper(conn=mock_connection_factory(conn_type=conn_type))
-            assert wrap_conn.conn_type == conn_type
+        assert wrap_conn.conn_type == conn_type
 
     @pytest.mark.parametrize("aws_session_token", [None, "mock-aws-session-token"])
     @pytest.mark.parametrize("aws_secret_access_key", ["mock-aws-secret-access-key"])
diff --git a/providers/celery/tests/unit/celery/executors/test_celery_executor.py b/providers/celery/tests/unit/celery/executors/test_celery_executor.py
index 974dc2b06f72e..d71fa9a64bb56 100644
--- a/providers/celery/tests/unit/celery/executors/test_celery_executor.py
+++ b/providers/celery/tests/unit/celery/executors/test_celery_executor.py
@@ -260,7 +260,7 @@ def test_cleanup_stuck_queued_tasks(self, mock_fail):
             executor.running = {ti.key}
             executor.tasks = {ti.key: AsyncResult("231")}
             assert executor.has_task(ti)
-            with pytest.warns(DeprecationWarning):
+            with pytest.warns(DeprecationWarning, match="cleanup_stuck_queued_tasks"):
                 executor.cleanup_stuck_queued_tasks(tis=tis)
             executor.sync()
         assert executor.tasks == {}
diff --git a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/executors/test_kubernetes_executor.py b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/executors/test_kubernetes_executor.py
index 062c889089e1a..31899080ceaf1 100644
--- a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/executors/test_kubernetes_executor.py
+++ b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/executors/test_kubernetes_executor.py
@@ -1250,7 +1250,7 @@ def test_cleanup_stuck_queued_tasks(self, mock_kube_dynamic_client, dag_maker, c
         executor.kube_scheduler = mock.MagicMock()
         ti.refresh_from_db()
         tis = [ti]
-        with pytest.warns(DeprecationWarning):
+        with pytest.warns(DeprecationWarning, match="cleanup_stuck_queued_tasks"):
             executor.cleanup_stuck_queued_tasks(tis=tis)
         executor.kube_scheduler.delete_pod.assert_called_once()
         assert executor.running == set()
diff --git a/providers/databricks/tests/unit/databricks/hooks/test_databricks_sql.py b/providers/databricks/tests/unit/databricks/hooks/test_databricks_sql.py
index 20e2c081f740d..f7dfc1d73ac69 100644
--- a/providers/databricks/tests/unit/databricks/hooks/test_databricks_sql.py
+++ b/providers/databricks/tests/unit/databricks/hooks/test_databricks_sql.py
@@ -573,3 +573,6 @@ def test_get_df(df_type, df_class, description):
             assert df.row(1)[0] == result_sets[1][0]
 
         assert isinstance(df, df_class)
+
+
+# ruff: noqa: PT028
diff --git a/providers/google/tests/unit/google/cloud/hooks/test_bigquery.py b/providers/google/tests/unit/google/cloud/hooks/test_bigquery.py
index 0b0e8d94ce2a6..e46142e88690c 100644
--- a/providers/google/tests/unit/google/cloud/hooks/test_bigquery.py
+++ b/providers/google/tests/unit/google/cloud/hooks/test_bigquery.py
@@ -788,7 +788,7 @@ def test_create_empty_table_view(self, mock_bq_client, mock_table):
                 view=view,
                 retry=DEFAULT_RETRY,
             )
-            assert_warning("create_empty_table", warnings)
+        assert_warning("create_empty_table", warnings)
 
         body = {"tableReference": TABLE_REFERENCE_REPR, "view": view}
         mock_table.from_api_repr.assert_called_once_with(body)
@@ -827,7 +827,7 @@ def test_create_table_view(self, mock_bq_client, mock_table):
     def test_create_empty_table_succeed(self, mock_bq_client, mock_table):
         with pytest.warns(AirflowProviderDeprecationWarning) as warnings:
             self.hook.create_empty_table(project_id=PROJECT_ID, dataset_id=DATASET_ID, table_id=TABLE_ID)
-            assert_warning("create_empty_table", warnings)
+        assert_warning("create_empty_table", warnings)
 
         body = {
             "tableReference": {
@@ -880,22 +880,22 @@ def test_create_empty_table_with_extras_succeed(self, mock_bq_client, mock_table
                 time_partitioning=time_partitioning,
                 cluster_fields=cluster_fields,
             )
-            assert_warning("create_empty_table", warnings)
+        assert_warning("create_empty_table", warnings)
 
-            body = {
-                "tableReference": {
-                    "tableId": TABLE_ID,
-                    "projectId": PROJECT_ID,
-                    "datasetId": DATASET_ID,
-                },
-                "schema": {"fields": schema_fields},
-                "timePartitioning": time_partitioning,
-                "clustering": {"fields": cluster_fields},
-            }
-            mock_table.from_api_repr.assert_called_once_with(body)
-            mock_bq_client.return_value.create_table.assert_called_once_with(
-                table=mock_table.from_api_repr.return_value, exists_ok=True, retry=DEFAULT_RETRY
-            )
+        body = {
+            "tableReference": {
+                "tableId": TABLE_ID,
+                "projectId": PROJECT_ID,
+                "datasetId": DATASET_ID,
+            },
+            "schema": {"fields": schema_fields},
+            "timePartitioning": time_partitioning,
+            "clustering": {"fields": cluster_fields},
+        }
+        mock_table.from_api_repr.assert_called_once_with(body)
+        mock_bq_client.return_value.create_table.assert_called_once_with(
+            table=mock_table.from_api_repr.return_value, exists_ok=True, retry=DEFAULT_RETRY
+        )
 
     @mock.patch("airflow.providers.google.cloud.hooks.bigquery.Table.from_api_repr")
     @mock.patch("airflow.providers.google.cloud.hooks.bigquery.Client")
diff --git a/providers/google/tests/unit/google/cloud/operators/test_automl.py b/providers/google/tests/unit/google/cloud/operators/test_automl.py
index 34c0397a43906..18f4de4af709d 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_automl.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_automl.py
@@ -91,7 +91,7 @@ def test_execute(self, mock_hook):
                 project_id=GCP_PROJECT_ID,
                 task_id=TASK_ID,
             )
-            op.execute(context=mock.MagicMock())
+        op.execute(context=mock.MagicMock())
 
         mock_hook.return_value.create_model.assert_called_once_with(
             model=MODEL,
@@ -194,7 +194,9 @@ def test_hook_type(self):
                 task_id=TASK_ID,
                 operation_params={"TEST_KEY": "TEST_VALUE"},
             )
+        with pytest.warns(AirflowProviderDeprecationWarning):
             assert isinstance(op.hook, CloudAutoMLHook)
+        with pytest.warns(AirflowProviderDeprecationWarning):
             op = AutoMLPredictOperator(
                 endpoint_id="endpoint_id",
                 location=GCP_LOCATION,
@@ -203,7 +205,7 @@ def test_hook_type(self):
                 task_id=TASK_ID,
                 operation_params={"TEST_KEY": "TEST_VALUE"},
             )
-            assert isinstance(op.hook, PredictionServiceHook)
+        assert isinstance(op.hook, PredictionServiceHook)
 
 
 class TestAutoMLCreateImportOperator:
@@ -218,7 +220,7 @@ def test_execute(self, mock_hook):
                 project_id=GCP_PROJECT_ID,
                 task_id=TASK_ID,
             )
-            op.execute(context=mock.MagicMock())
+        op.execute(context=mock.MagicMock())
 
         mock_hook.return_value.create_dataset.assert_called_once_with(
             dataset=DATASET,
diff --git a/providers/google/tests/unit/google/cloud/operators/test_bigquery.py b/providers/google/tests/unit/google/cloud/operators/test_bigquery.py
index 114c6f899a595..dc4ef3135d907 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_bigquery.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_bigquery.py
@@ -348,7 +348,7 @@ def test_deprecation_warning(self):
                 project_id=TEST_GCP_PROJECT_ID,
                 table_id=TEST_TABLE_ID,
             )
-            assert_warning("BigQueryCreateEmptyTableOperator", warnings)
+        assert_warning("BigQueryCreateEmptyTableOperator", warnings)
 
     @mock.patch("airflow.providers.google.cloud.operators.bigquery.BigQueryHook")
     def test_execute(self, mock_hook):
@@ -360,22 +360,22 @@ def test_execute(self, mock_hook):
                 table_id=TEST_TABLE_ID,
             )
 
-            operator.execute(context=MagicMock())
+        operator.execute(context=MagicMock())
 
-            mock_hook.return_value.create_empty_table.assert_called_once_with(
-                dataset_id=TEST_DATASET,
-                project_id=TEST_GCP_PROJECT_ID,
-                table_id=TEST_TABLE_ID,
-                schema_fields=None,
-                time_partitioning={},
-                cluster_fields=None,
-                labels=None,
-                view=None,
-                materialized_view=None,
-                encryption_configuration=None,
-                table_resource=None,
-                exists_ok=False,
-            )
+        mock_hook.return_value.create_empty_table.assert_called_once_with(
+            dataset_id=TEST_DATASET,
+            project_id=TEST_GCP_PROJECT_ID,
+            table_id=TEST_TABLE_ID,
+            schema_fields=None,
+            time_partitioning={},
+            cluster_fields=None,
+            labels=None,
+            view=None,
+            materialized_view=None,
+            encryption_configuration=None,
+            table_resource=None,
+            exists_ok=False,
+        )
 
     @mock.patch("airflow.providers.google.cloud.operators.bigquery.BigQueryHook")
     def test_create_view(self, mock_hook):
@@ -388,22 +388,22 @@ def test_create_view(self, mock_hook):
                 view=VIEW_DEFINITION,
             )
 
-            operator.execute(context=MagicMock())
+        operator.execute(context=MagicMock())
 
-            mock_hook.return_value.create_empty_table.assert_called_once_with(
-                dataset_id=TEST_DATASET,
-                project_id=TEST_GCP_PROJECT_ID,
-                table_id=TEST_TABLE_ID,
-                schema_fields=None,
-                time_partitioning={},
-                cluster_fields=None,
-                labels=None,
-                view=VIEW_DEFINITION,
-                materialized_view=None,
-                encryption_configuration=None,
-                table_resource=None,
-                exists_ok=False,
-            )
+        mock_hook.return_value.create_empty_table.assert_called_once_with(
+            dataset_id=TEST_DATASET,
+            project_id=TEST_GCP_PROJECT_ID,
+            table_id=TEST_TABLE_ID,
+            schema_fields=None,
+            time_partitioning={},
+            cluster_fields=None,
+            labels=None,
+            view=VIEW_DEFINITION,
+            materialized_view=None,
+            encryption_configuration=None,
+            table_resource=None,
+            exists_ok=False,
+        )
 
     @mock.patch("airflow.providers.google.cloud.operators.bigquery.BigQueryHook")
     def test_create_materialized_view(self, mock_hook):
@@ -416,22 +416,22 @@ def test_create_materialized_view(self, mock_hook):
                 materialized_view=MATERIALIZED_VIEW_DEFINITION,
             )
 
-            operator.execute(context=MagicMock())
+        operator.execute(context=MagicMock())
 
-            mock_hook.return_value.create_empty_table.assert_called_once_with(
-                dataset_id=TEST_DATASET,
-                project_id=TEST_GCP_PROJECT_ID,
-                table_id=TEST_TABLE_ID,
-                schema_fields=None,
-                time_partitioning={},
-                cluster_fields=None,
-                labels=None,
-                view=None,
-                materialized_view=MATERIALIZED_VIEW_DEFINITION,
-                encryption_configuration=None,
-                table_resource=None,
-                exists_ok=False,
-            )
+        mock_hook.return_value.create_empty_table.assert_called_once_with(
+            dataset_id=TEST_DATASET,
+            project_id=TEST_GCP_PROJECT_ID,
+            table_id=TEST_TABLE_ID,
+            schema_fields=None,
+            time_partitioning={},
+            cluster_fields=None,
+            labels=None,
+            view=None,
+            materialized_view=MATERIALIZED_VIEW_DEFINITION,
+            encryption_configuration=None,
+            table_resource=None,
+            exists_ok=False,
+        )
 
     @mock.patch("airflow.providers.google.cloud.operators.bigquery.BigQueryHook")
     def test_create_clustered_empty_table(self, mock_hook):
@@ -453,21 +453,21 @@ def test_create_clustered_empty_table(self, mock_hook):
                 cluster_fields=cluster_fields,
             )
 
-            operator.execute(context=MagicMock())
-            mock_hook.return_value.create_empty_table.assert_called_once_with(
-                dataset_id=TEST_DATASET,
-                project_id=TEST_GCP_PROJECT_ID,
-                table_id=TEST_TABLE_ID,
-                schema_fields=schema_fields,
-                time_partitioning=time_partitioning,
-                cluster_fields=cluster_fields,
-                labels=None,
-                view=None,
-                materialized_view=None,
-                encryption_configuration=None,
-                table_resource=None,
-                exists_ok=False,
-            )
+        operator.execute(context=MagicMock())
+        mock_hook.return_value.create_empty_table.assert_called_once_with(
+            dataset_id=TEST_DATASET,
+            project_id=TEST_GCP_PROJECT_ID,
+            table_id=TEST_TABLE_ID,
+            schema_fields=schema_fields,
+            time_partitioning=time_partitioning,
+            cluster_fields=cluster_fields,
+            labels=None,
+            view=None,
+            materialized_view=None,
+            encryption_configuration=None,
+            table_resource=None,
+            exists_ok=False,
+        )
 
     @pytest.mark.parametrize(
         "if_exists, is_conflict, expected_error, log_msg",
@@ -492,17 +492,17 @@ def test_create_existing_table(self, mock_hook, caplog, if_exists, is_conflict,
                 view=VIEW_DEFINITION,
                 if_exists=if_exists,
             )
-            if is_conflict:
-                mock_hook.return_value.create_empty_table.side_effect = Conflict("any")
-            else:
-                mock_hook.return_value.create_empty_table.side_effect = None
-            if expected_error is not None:
-                with pytest.raises(expected_error):
-                    operator.execute(context=MagicMock())
-            else:
+        if is_conflict:
+            mock_hook.return_value.create_empty_table.side_effect = Conflict("any")
+        else:
+            mock_hook.return_value.create_empty_table.side_effect = None
+        if expected_error is not None:
+            with pytest.raises(expected_error):
                 operator.execute(context=MagicMock())
-            if log_msg is not None:
-                assert log_msg in caplog.text
+        else:
+            operator.execute(context=MagicMock())
+        if log_msg is not None:
+            assert log_msg in caplog.text
 
     @mock.patch("airflow.providers.google.cloud.operators.bigquery.BigQueryHook")
     def test_get_openlineage_facets_on_complete(self, mock_hook):
@@ -528,22 +528,22 @@ def test_get_openlineage_facets_on_complete(self, mock_hook):
                 table_id=TEST_TABLE_ID,
                 schema_fields=schema_fields,
             )
-            operator.execute(context=MagicMock())
+        operator.execute(context=MagicMock())
 
-            mock_hook.return_value.create_empty_table.assert_called_once_with(
-                dataset_id=TEST_DATASET,
-                project_id=TEST_GCP_PROJECT_ID,
-                table_id=TEST_TABLE_ID,
-                schema_fields=schema_fields,
-                time_partitioning={},
-                cluster_fields=None,
-                labels=None,
-                view=None,
-                materialized_view=None,
-                encryption_configuration=None,
-                table_resource=None,
-                exists_ok=False,
-            )
+        mock_hook.return_value.create_empty_table.assert_called_once_with(
+            dataset_id=TEST_DATASET,
+            project_id=TEST_GCP_PROJECT_ID,
+            table_id=TEST_TABLE_ID,
+            schema_fields=schema_fields,
+            time_partitioning={},
+            cluster_fields=None,
+            labels=None,
+            view=None,
+            materialized_view=None,
+            encryption_configuration=None,
+            table_resource=None,
+            exists_ok=False,
+        )
 
         result = operator.get_openlineage_facets_on_complete(None)
         assert not result.run_facets
@@ -576,7 +576,7 @@ def test_deprecation_warning(self):
                     },
                 },
             )
-            assert_warning("BigQueryCreateExternalTableOperator", warnings)
+        assert_warning("BigQueryCreateExternalTableOperator", warnings)
 
     @mock.patch("airflow.providers.google.cloud.operators.bigquery.BigQueryHook")
     def test_execute_with_csv_format(self, mock_hook):
@@ -615,14 +615,14 @@ def test_execute_with_csv_format(self, mock_hook):
                 table_resource=table_resource,
             )
 
-            mock_hook.return_value.split_tablename.return_value = (
-                TEST_GCP_PROJECT_ID,
-                TEST_DATASET,
-                TEST_TABLE_ID,
-            )
+        mock_hook.return_value.split_tablename.return_value = (
+            TEST_GCP_PROJECT_ID,
+            TEST_DATASET,
+            TEST_TABLE_ID,
+        )
 
-            operator.execute(context=MagicMock())
-            mock_hook.return_value.create_empty_table.assert_called_once_with(table_resource=table_resource)
+        operator.execute(context=MagicMock())
+        mock_hook.return_value.create_empty_table.assert_called_once_with(table_resource=table_resource)
 
     @mock.patch("airflow.providers.google.cloud.operators.bigquery.BigQueryHook")
     def test_execute_with_parquet_format(self, mock_hook):
@@ -654,14 +654,14 @@ def test_execute_with_parquet_format(self, mock_hook):
                 table_resource=table_resource,
             )
 
-            mock_hook.return_value.split_tablename.return_value = (
-                TEST_GCP_PROJECT_ID,
-                TEST_DATASET,
-                TEST_TABLE_ID,
-            )
+        mock_hook.return_value.split_tablename.return_value = (
+            TEST_GCP_PROJECT_ID,
+            TEST_DATASET,
+            TEST_TABLE_ID,
+        )
 
-            operator.execute(context=MagicMock())
-            mock_hook.return_value.create_empty_table.assert_called_once_with(table_resource=table_resource)
+        operator.execute(context=MagicMock())
+        mock_hook.return_value.create_empty_table.assert_called_once_with(table_resource=table_resource)
 
     @mock.patch("airflow.providers.google.cloud.operators.bigquery.BigQueryHook")
     def test_get_openlineage_facets_on_complete(self, mock_hook):
@@ -694,14 +694,14 @@ def test_get_openlineage_facets_on_complete(self, mock_hook):
                 table_resource=table_resource,
             )
 
-            mock_hook.return_value.split_tablename.return_value = (
-                TEST_GCP_PROJECT_ID,
-                TEST_DATASET,
-                TEST_TABLE_ID,
-            )
+        mock_hook.return_value.split_tablename.return_value = (
+            TEST_GCP_PROJECT_ID,
+            TEST_DATASET,
+            TEST_TABLE_ID,
+        )
 
-            operator.execute(context=MagicMock())
-            mock_hook.return_value.create_empty_table.assert_called_once_with(table_resource=table_resource)
+        operator.execute(context=MagicMock())
+        mock_hook.return_value.create_empty_table.assert_called_once_with(table_resource=table_resource)
 
         result = operator.get_openlineage_facets_on_complete(None)
         assert not result.run_facets
diff --git a/providers/google/tests/unit/google/cloud/operators/test_life_sciences.py b/providers/google/tests/unit/google/cloud/operators/test_life_sciences.py
index e49c428d1a44d..d125bdf10dcee 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_life_sciences.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_life_sciences.py
@@ -47,8 +47,8 @@ def test_executes(self, mock_hook):
             operator = LifeSciencesRunPipelineOperator(
                 task_id="task-id", body=TEST_BODY, location=TEST_LOCATION, project_id=TEST_PROJECT_ID
             )
-            context = mock.MagicMock()
-            result = operator.execute(context=context)
+        context = mock.MagicMock()
+        result = operator.execute(context=context)
 
         assert result == TEST_OPERATION
 
@@ -62,6 +62,6 @@ def test_executes_without_project_id(self, mock_hook):
                 body=TEST_BODY,
                 location=TEST_LOCATION,
             )
-            context = mock.MagicMock()
-            result = operator.execute(context=context)
+        context = mock.MagicMock()
+        result = operator.execute(context=context)
         assert result == TEST_OPERATION
diff --git a/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_msgraph.py b/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_msgraph.py
index d6a9fae4bdcaf..2168744edcade 100644
--- a/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_msgraph.py
+++ b/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_msgraph.py
@@ -63,17 +63,17 @@ def test_execute_with_old_result_processor_signature(self):
             ):
                 results, events = execute_operator(operator)
 
-                assert len(results) == 30
-                assert results == users.get("value") + next_users.get("value")
-                assert len(events) == 2
-                assert isinstance(events[0], TriggerEvent)
-                assert events[0].payload["status"] == "success"
-                assert events[0].payload["type"] == "builtins.dict"
-                assert events[0].payload["response"] == json.dumps(users)
-                assert isinstance(events[1], TriggerEvent)
-                assert events[1].payload["status"] == "success"
-                assert events[1].payload["type"] == "builtins.dict"
-                assert events[1].payload["response"] == json.dumps(next_users)
+            assert len(results) == 30
+            assert results == users.get("value") + next_users.get("value")
+            assert len(events) == 2
+            assert isinstance(events[0], TriggerEvent)
+            assert events[0].payload["status"] == "success"
+            assert events[0].payload["type"] == "builtins.dict"
+            assert events[0].payload["response"] == json.dumps(users)
+            assert isinstance(events[1], TriggerEvent)
+            assert events[1].payload["status"] == "success"
+            assert events[1].payload["type"] == "builtins.dict"
+            assert events[1].payload["response"] == json.dumps(next_users)
 
     def test_execute_with_new_result_processor_signature(self):
         users = load_json_from_resources(dirname(__file__), "..", "resources", "users.json")
@@ -124,17 +124,17 @@ def test_execute_with_old_paginate_function_signature(self):
             ):
                 results, events = execute_operator(operator)
 
-                assert len(results) == 30
-                assert results == users.get("value") + next_users.get("value")
-                assert len(events) == 2
-                assert isinstance(events[0], TriggerEvent)
-                assert events[0].payload["status"] == "success"
-                assert events[0].payload["type"] == "builtins.dict"
-                assert events[0].payload["response"] == json.dumps(users)
-                assert isinstance(events[1], TriggerEvent)
-                assert events[1].payload["status"] == "success"
-                assert events[1].payload["type"] == "builtins.dict"
-                assert events[1].payload["response"] == json.dumps(next_users)
+            assert len(results) == 30
+            assert results == users.get("value") + next_users.get("value")
+            assert len(events) == 2
+            assert isinstance(events[0], TriggerEvent)
+            assert events[0].payload["status"] == "success"
+            assert events[0].payload["type"] == "builtins.dict"
+            assert events[0].payload["response"] == json.dumps(users)
+            assert isinstance(events[1], TriggerEvent)
+            assert events[1].payload["status"] == "success"
+            assert events[1].payload["type"] == "builtins.dict"
+            assert events[1].payload["response"] == json.dumps(next_users)
 
     def test_execute_when_do_xcom_push_is_false(self):
         users = load_json_from_resources(dirname(__file__), "..", "resources", "users.json")
@@ -193,11 +193,11 @@ def custom_event_handler(context: Context, event: dict[Any, Any] | None = None):
             ):
                 results, events = execute_operator(operator)
 
-                assert not results
-                assert len(events) == 1
-                assert isinstance(events[0], TriggerEvent)
-                assert events[0].payload["status"] == "failure"
-                assert events[0].payload["message"] == "An error occurred"
+            assert not results
+            assert len(events) == 1
+            assert isinstance(events[0], TriggerEvent)
+            assert events[0].payload["status"] == "failure"
+            assert events[0].payload["message"] == "An error occurred"
 
     def test_execute_when_an_exception_occurs_on_custom_event_handler_with_new_signature(self):
         with self.patch_hook_and_request_adapter(AirflowException("An error occurred")):
diff --git a/providers/microsoft/azure/tests/unit/microsoft/azure/sensors/test_msgraph.py b/providers/microsoft/azure/tests/unit/microsoft/azure/sensors/test_msgraph.py
index 055165d4fc70a..7361697b009d6 100644
--- a/providers/microsoft/azure/tests/unit/microsoft/azure/sensors/test_msgraph.py
+++ b/providers/microsoft/azure/tests/unit/microsoft/azure/sensors/test_msgraph.py
@@ -54,20 +54,20 @@ def test_execute_with_result_processor_with_old_signature(self):
             ):
                 results, events = execute_operator(sensor)
 
-                assert sensor.path_parameters == {"scanId": "0a1b1bf3-37de-48f7-9863-ed4cda97a9ef"}
-                assert isinstance(results, str)
-                assert results == "0a1b1bf3-37de-48f7-9863-ed4cda97a9ef"
-                assert len(events) == 3
-                assert isinstance(events[0], TriggerEvent)
-                assert events[0].payload["status"] == "success"
-                assert events[0].payload["type"] == "builtins.dict"
-                assert events[0].payload["response"] == json.dumps(status[0])
-                assert isinstance(events[1], TriggerEvent)
-                assert isinstance(events[1].payload, datetime)
-                assert isinstance(events[2], TriggerEvent)
-                assert events[2].payload["status"] == "success"
-                assert events[2].payload["type"] == "builtins.dict"
-                assert events[2].payload["response"] == json.dumps(status[1])
+            assert sensor.path_parameters == {"scanId": "0a1b1bf3-37de-48f7-9863-ed4cda97a9ef"}
+            assert isinstance(results, str)
+            assert results == "0a1b1bf3-37de-48f7-9863-ed4cda97a9ef"
+            assert len(events) == 3
+            assert isinstance(events[0], TriggerEvent)
+            assert events[0].payload["status"] == "success"
+            assert events[0].payload["type"] == "builtins.dict"
+            assert events[0].payload["response"] == json.dumps(status[0])
+            assert isinstance(events[1], TriggerEvent)
+            assert isinstance(events[1].payload, datetime)
+            assert isinstance(events[2], TriggerEvent)
+            assert events[2].payload["status"] == "success"
+            assert events[2].payload["type"] == "builtins.dict"
+            assert events[2].payload["response"] == json.dumps(status[1])
 
     def test_execute_with_result_processor_with_new_signature(self):
         status = load_json_from_resources(dirname(__file__), "..", "resources", "status.json")
diff --git a/providers/slack/tests/unit/slack/hooks/test_slack.py b/providers/slack/tests/unit/slack/hooks/test_slack.py
index 904ea02bf329f..cd7e3321191c4 100644
--- a/providers/slack/tests/unit/slack/hooks/test_slack.py
+++ b/providers/slack/tests/unit/slack/hooks/test_slack.py
@@ -111,8 +111,8 @@ def test_resolve_token(self):
         """Test that we only use token from Slack API Connection ID."""
         with pytest.warns(UserWarning, match="Provide `token` as part of .* parameters is disallowed"):
             hook = SlackHook(slack_conn_id=SLACK_API_DEFAULT_CONN_ID, token="foo-bar")
-            assert "token" not in hook.extra_client_args
-            assert hook._get_conn_params()["token"] == MOCK_SLACK_API_TOKEN
+        assert "token" not in hook.extra_client_args
+        assert hook._get_conn_params()["token"] == MOCK_SLACK_API_TOKEN
 
     def test_empty_password(self):
         """Test password field defined in the connection."""
@@ -330,7 +330,7 @@ def test_backcompat_prefix_both_causes_warning(self, monkeypatch):
         hook = SlackHook(slack_conn_id="my_conn")
         with pytest.warns(Warning, match="Using value for `timeout`"):
             params = hook._get_conn_params()
-            assert params["timeout"] == 222
+        assert params["timeout"] == 222
 
     def test_empty_string_ignored_prefixed(self, monkeypatch):
         monkeypatch.setenv(
diff --git a/providers/slack/tests/unit/slack/hooks/test_slack_webhook.py b/providers/slack/tests/unit/slack/hooks/test_slack_webhook.py
index cf2d406533df5..8dfa021b9113f 100644
--- a/providers/slack/tests/unit/slack/hooks/test_slack_webhook.py
+++ b/providers/slack/tests/unit/slack/hooks/test_slack_webhook.py
@@ -199,8 +199,8 @@ def test_ignore_webhook_token(self):
             UserWarning, match="Provide `webhook_token` as part of .* parameters is disallowed"
         ):
             hook = SlackWebhookHook(slack_webhook_conn_id=TEST_CONN_ID, webhook_token="foo-bar")
-            assert "webhook_token" not in hook.extra_client_args
-            assert hook._get_conn_params()["url"] == TEST_WEBHOOK_URL
+        assert "webhook_token" not in hook.extra_client_args
+        assert hook._get_conn_params()["url"] == TEST_WEBHOOK_URL
 
     @pytest.mark.parametrize("conn_id", ["conn_token_in_host_1", "conn_token_in_host_2"])
     def test_wrong_connections(self, conn_id):
@@ -479,7 +479,7 @@ def test_backcompat_prefix_both_causes_warning(self):
             hook = SlackWebhookHook(slack_webhook_conn_id="my_conn")
             with pytest.warns(Warning, match="Using value for `timeout`"):
                 params = hook._get_conn_params()
-                assert params["timeout"] == 222
+            assert params["timeout"] == 222
 
     def test_empty_string_ignored_prefixed(self):
         with patch.dict(
diff --git a/providers/standard/tests/unit/standard/decorators/test_bash.py b/providers/standard/tests/unit/standard/decorators/test_bash.py
index c5ba14e70daaa..f4303b345ebc4 100644
--- a/providers/standard/tests/unit/standard/decorators/test_bash.py
+++ b/providers/standard/tests/unit/standard/decorators/test_bash.py
@@ -412,9 +412,9 @@ def bash():
             ):
                 bash_task = bash()
 
-                assert bash_task.operator.bash_command == SET_DURING_EXECUTION
+            assert bash_task.operator.bash_command == SET_DURING_EXECUTION
 
-                ti, _ = self.execute_task(bash_task)
+            ti, _ = self.execute_task(bash_task)
 
         assert bash_task.operator.multiple_outputs is False
         self.validate_bash_command_rtif(ti, "echo")
diff --git a/providers/standard/tests/unit/standard/decorators/test_python.py b/providers/standard/tests/unit/standard/decorators/test_python.py
index 6e74a4e16a3c6..221aaf9b06fe8 100644
--- a/providers/standard/tests/unit/standard/decorators/test_python.py
+++ b/providers/standard/tests/unit/standard/decorators/test_python.py
@@ -154,18 +154,18 @@ def t2(x: "FakeTypeCheckingOnlyClass", y: int) -> "dict[int, int]":  # type: ign
 
         assert t2(5, 5).operator.multiple_outputs is True
 
-        with pytest.warns(UserWarning, match="Cannot infer multiple_outputs.*t3") as recwarn:
-
-            @task_decorator
-            def t3(  # type: ignore[empty-body]
-                x: "FakeTypeCheckingOnlyClass",
-                y: int,
-            ) -> "UnresolveableName[int, int]": ...
+        @task_decorator
+        def t3(  # type: ignore[empty-body]
+            x: "FakeTypeCheckingOnlyClass",
+            y: int,
+        ) -> "UnresolveableName[int, int]": ...
 
+        with pytest.warns(UserWarning, match="Cannot infer multiple_outputs.*t3") as recwarn:
             line = sys._getframe().f_lineno - 5 if PY38 else sys._getframe().f_lineno - 2
-            if PY311:
-                # extra line explaining the error location in Py311
-                line = line - 1
+
+        if PY311:
+            # extra line explaining the error location in Py311
+            line = line - 1
 
         warn = recwarn[0]
         assert warn.filename == __file__
diff --git a/providers/standard/tests/unit/standard/operators/test_python.py b/providers/standard/tests/unit/standard/operators/test_python.py
index e3ae3672718a2..a04575e8bff31 100644
--- a/providers/standard/tests/unit/standard/operators/test_python.py
+++ b/providers/standard/tests/unit/standard/operators/test_python.py
@@ -1940,8 +1940,8 @@ def test_context_removed_after_exit(self):
         with set_current_context(example_context):
             pass
         if AIRFLOW_V_3_0_PLUS:
-            with pytest.warns(AirflowProviderDeprecationWarning):
-                with pytest.raises(RuntimeError):
+            with pytest.raises(RuntimeError):
+                with pytest.warns(AirflowProviderDeprecationWarning):
                     get_current_context()
         else:
             with pytest.raises(RuntimeError):
@@ -1963,13 +1963,13 @@ def test_nested_context(self):
             ctx_obj.__enter__()
             ctx_list.append(ctx_obj)
         if AIRFLOW_V_3_0_PLUS:
-            with pytest.warns(AirflowProviderDeprecationWarning):
-                for i in reversed(range(max_stack_depth)):
-                    # Iterate over contexts in reverse order - stack is LIFO
+            for i in reversed(range(max_stack_depth)):
+                # Iterate over contexts in reverse order - stack is LIFO
+                with pytest.warns(AirflowProviderDeprecationWarning):
                     ctx = get_current_context()
-                    assert ctx["ContextId"] == i
-                    # End of with statement
-                    ctx_list[i].__exit__(None, None, None)
+                assert ctx["ContextId"] == i
+                # End of with statement
+                ctx_list[i].__exit__(None, None, None)
         else:
             for i in reversed(range(max_stack_depth)):
                 # Iterate over contexts in reverse order - stack is LIFO
diff --git a/providers/standard/tests/unit/standard/sensors/test_time_delta.py b/providers/standard/tests/unit/standard/sensors/test_time_delta.py
index 2014e9b1275e2..bc70aca8a9b2b 100644
--- a/providers/standard/tests/unit/standard/sensors/test_time_delta.py
+++ b/providers/standard/tests/unit/standard/sensors/test_time_delta.py
@@ -170,20 +170,18 @@ def setup_method(self):
     )
     @mock.patch(DEFER_PATH)
     def test_timedelta_sensor(self, defer_mock, should_defer):
+        delta = timedelta(hours=1)
         with pytest.warns(AirflowProviderDeprecationWarning):
-            delta = timedelta(hours=1)
             op = TimeDeltaSensorAsync(task_id="timedelta_sensor_check", delta=delta, dag=self.dag)
-            if should_defer:
-                data_interval_end = pendulum.now("UTC").add(hours=1)
-            else:
-                data_interval_end = (
-                    pendulum.now("UTC").replace(microsecond=0, second=0, minute=0).add(hours=-1)
-                )
-            op.execute({"data_interval_end": data_interval_end})
-            if should_defer:
-                defer_mock.assert_called_once()
-            else:
-                defer_mock.assert_not_called()
+        if should_defer:
+            data_interval_end = pendulum.now("UTC").add(hours=1)
+        else:
+            data_interval_end = pendulum.now("UTC").replace(microsecond=0, second=0, minute=0).add(hours=-1)
+        op.execute({"data_interval_end": data_interval_end})
+        if should_defer:
+            defer_mock.assert_called_once()
+        else:
+            defer_mock.assert_not_called()
 
     @pytest.mark.parametrize(
         "should_defer",
@@ -213,32 +211,32 @@ def test_wait_sensor(self, sleep_mock, defer_mock, should_defer):
     )
     def test_timedelta_sensor_async_run_after_vs_interval(self, run_after, interval_end, dag_maker):
         """Interval end should be used as base time when present else run_after"""
-        with pytest.warns(AirflowProviderDeprecationWarning):
-            if not AIRFLOW_V_3_0_PLUS and not interval_end:
-                pytest.skip("not applicable")
-
-            context = {}
-            if interval_end:
-                context["data_interval_end"] = interval_end
-            with dag_maker() as dag:
-                kwargs = {}
-                if AIRFLOW_V_3_0_PLUS:
-                    from airflow.utils.types import DagRunTriggeredByType
-
-                    kwargs.update(triggered_by=DagRunTriggeredByType.TEST, run_after=run_after)
-
-                dr = dag.create_dagrun(
-                    run_id="abcrhroceuh",
-                    run_type=DagRunType.MANUAL,
-                    state=None,
-                    **kwargs,
-                )
-                context.update(dag_run=dr)
-                delta = timedelta(seconds=1)
+        if not AIRFLOW_V_3_0_PLUS and not interval_end:
+            pytest.skip("not applicable")
+
+        context = {}
+        if interval_end:
+            context["data_interval_end"] = interval_end
+        with dag_maker() as dag:
+            kwargs = {}
+            if AIRFLOW_V_3_0_PLUS:
+                from airflow.utils.types import DagRunTriggeredByType
+
+                kwargs.update(triggered_by=DagRunTriggeredByType.TEST, run_after=run_after)
+
+            dr = dag.create_dagrun(
+                run_id="abcrhroceuh",
+                run_type=DagRunType.MANUAL,
+                state=None,
+                **kwargs,
+            )
+            context.update(dag_run=dr)
+            delta = timedelta(seconds=1)
+            with pytest.warns(AirflowProviderDeprecationWarning):
                 op = TimeDeltaSensorAsync(task_id="wait_sensor_check", delta=delta, dag=dag)
-                base_time = interval_end or run_after
-                expected_time = base_time + delta
-                with pytest.raises(TaskDeferred) as caught:
-                    op.execute(context)
+            base_time = interval_end or run_after
+            expected_time = base_time + delta
+            with pytest.raises(TaskDeferred) as caught:
+                op.execute(context)
 
-                assert caught.value.trigger.moment == expected_time
+            assert caught.value.trigger.moment == expected_time
diff --git a/task-sdk/pyproject.toml b/task-sdk/pyproject.toml
index fb2c514349556..0c3cee49059f0 100644
--- a/task-sdk/pyproject.toml
+++ b/task-sdk/pyproject.toml
@@ -138,13 +138,15 @@ codegen = [
     "datamodel-code-generator[http]==0.28.2",
     "openapi-spec-validator>=0.7.1",
     "svcs>=25.1.0",
-    "ruff==0.11.13",
+    "ruff==0.12.1",
     "rich>=12.4.4",
 ]
 dev = [
     "apache-airflow-providers-common-sql",
     "apache-airflow-providers-standard",
     "apache-airflow-devel-common",
+    "pandas>=2.1.2; python_version <\"3.13\"",
+    "pandas>=2.2.3; python_version >=\"3.13\""
 ]
 docs = [
     "apache-airflow-devel-common[docs]",
diff --git a/task-sdk/src/airflow/sdk/execution_time/supervisor.py b/task-sdk/src/airflow/sdk/execution_time/supervisor.py
index 2bae008a0a6ff..690411979865e 100644
--- a/task-sdk/src/airflow/sdk/execution_time/supervisor.py
+++ b/task-sdk/src/airflow/sdk/execution_time/supervisor.py
@@ -1015,11 +1015,11 @@ def _send_heartbeat_if_needed(self):
                 self._terminal_state = SERVER_TERMINATED
             else:
                 # If we get any other error, we'll just log it and try again next time
-                self._handle_heartbeat_failures()
-        except Exception:
-            self._handle_heartbeat_failures()
+                self._handle_heartbeat_failures(e)
+        except Exception as e:
+            self._handle_heartbeat_failures(e)
 
-    def _handle_heartbeat_failures(self):
+    def _handle_heartbeat_failures(self, exc: Exception | None):
         """Increment the failed heartbeats counter and kill the process if too many failures."""
         self.failed_heartbeats += 1
         log.warning(
@@ -1027,7 +1027,7 @@ def _handle_heartbeat_failures(self):
             failed_heartbeats=self.failed_heartbeats,
             ti_id=self.id,
             max_retries=MAX_FAILED_HEARTBEATS,
-            exc_info=True,
+            exception=exc,
         )
         # If we've failed to heartbeat too many times, kill the process
         if self.failed_heartbeats >= MAX_FAILED_HEARTBEATS:
diff --git a/task-sdk/tests/task_sdk/bases/test_operator.py b/task-sdk/tests/task_sdk/bases/test_operator.py
index dafce2400c8e0..b9a4c14e31750 100644
--- a/task-sdk/tests/task_sdk/bases/test_operator.py
+++ b/task-sdk/tests/task_sdk/bases/test_operator.py
@@ -250,13 +250,13 @@ def get_weight(self, ti):
             )
 
     def test_warnings_are_properly_propagated(self):
-        with pytest.warns(DeprecationWarning) as warnings:
+        with pytest.warns(DeprecationWarning, match="deprecated") as warnings:
             DeprecatedOperator(task_id="test")
-            assert len(warnings) == 1
-            warning = warnings[0]
-            # Here we check that the trace points to the place
-            # where the deprecated class was used
-            assert warning.filename == __file__
+        assert len(warnings) == 1
+        warning = warnings[0]
+        # Here we check that the trace points to the place
+        # where the deprecated class was used
+        assert warning.filename == __file__
 
     def test_setattr_performs_no_custom_action_at_execute_time(self, spy_agency):
         op = MockOperator(task_id="test_task")
@@ -680,8 +680,8 @@ class StringTemplateFieldsOperator(BaseOperator):
         with pytest.warns(UserWarning, match=warning_message) as warnings:
             task = StringTemplateFieldsOperator(task_id="op1")
 
-            assert len(warnings) == 1
-            assert isinstance(task.template_fields, list)
+        assert len(warnings) == 1
+        assert isinstance(task.template_fields, list)
 
     def test_jinja_invalid_expression_is_just_propagated(self):
         """Test render_template propagates Jinja invalid expression errors."""
diff --git a/task-sdk/tests/task_sdk/definitions/test_asset.py b/task-sdk/tests/task_sdk/definitions/test_asset.py
index fd70882e96ada..34992c73f8673 100644
--- a/task-sdk/tests/task_sdk/definitions/test_asset.py
+++ b/task-sdk/tests/task_sdk/definitions/test_asset.py
@@ -117,7 +117,7 @@ def test_uri_with_scheme(uri: str, normalized: str) -> None:
 
 
 def test_uri_with_auth() -> None:
-    with pytest.warns(UserWarning) as record:
+    with pytest.warns(UserWarning, match="username") as record:
         asset = Asset("ftp://user@localhost/foo.txt")
     assert len(record) == 1
     assert str(record[0].message) == (

From acea31e7a3d91c5c0a30736367cca5bc89ede4e9 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Mon, 30 Jun 2025 23:25:00 +0200
Subject: [PATCH 352/381] Fix SBOM commands to work for Airfow 2 (#52591)

Airflow 3 will need to be updated with package-json.lock but for now
we are fixing the sbom command to work for Airflow 2 (and generate
airflow 2.11 SBOMS.

Changes:

* passing --github-token parameter which might be helpful to not
  rate-limit GitHub calls

* allowing to pass either `--airflow-site-archive-path` or
  `--airflow-root-path` depending where we want to generate sbom -
  it can be generated in `archive` folder directly (when we want
  to update historical data) or in the airflow source directory
  when we want to add SBOM to **just** generated documentation
  during the doc-building phase
---
 dev/breeze/doc/images/output_sbom.svg         |   8 +-
 dev/breeze/doc/images/output_sbom.txt         |   2 +-
 .../output_sbom_update-sbom-information.svg   | 122 ++++++++++------
 .../output_sbom_update-sbom-information.txt   |   2 +-
 .../airflow_breeze/commands/sbom_commands.py  | 136 ++++++++++++++----
 .../commands/sbom_commands_config.py          |   9 +-
 dev/breeze/src/airflow_breeze/utils/cdxgen.py |  31 ++--
 dev/breeze/src/airflow_breeze/utils/github.py |   6 +-
 8 files changed, 224 insertions(+), 92 deletions(-)

diff --git a/dev/breeze/doc/images/output_sbom.svg b/dev/breeze/doc/images/output_sbom.svg
index 02ef64aa6a878..058cb7a00230e 100644
--- a/dev/breeze/doc/images/output_sbom.svg
+++ b/dev/breeze/doc/images/output_sbom.svg
@@ -104,10 +104,10 @@
 </text><text class="breeze-sbom-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-sbom-line-6)">│</text><text class="breeze-sbom-r4" x="24.4" y="166.4" textLength="73.2" clip-path="url(#breeze-sbom-line-6)">--help</text><text class="breeze-sbom-r6" x="122" y="166.4" textLength="24.4" clip-path="url(#breeze-sbom-line-6)">-h</text><text class="breeze-sbom-r1" x="170.8" y="166.4" textLength="329.4" clip-path="url(#breeze-sbom-line-6)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-sbom-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-sbom-line-6)">│</text><text class="breeze-sbom-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-sbom-line-6)">
 </text><text class="breeze-sbom-r5" x="0" y="190.8" textLength="1464" clip-path="url(#breeze-sbom-line-7)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-sbom-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-sbom-line-7)">
 </text><text class="breeze-sbom-r5" x="0" y="215.2" textLength="24.4" clip-path="url(#breeze-sbom-line-8)">╭─</text><text class="breeze-sbom-r5" x="24.4" y="215.2" textLength="183" clip-path="url(#breeze-sbom-line-8)">&#160;SBOM&#160;commands&#160;</text><text class="breeze-sbom-r5" x="207.4" y="215.2" textLength="1232.2" clip-path="url(#breeze-sbom-line-8)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-sbom-r5" x="1439.6" y="215.2" textLength="24.4" clip-path="url(#breeze-sbom-line-8)">─╮</text><text class="breeze-sbom-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-sbom-line-8)">
-</text><text class="breeze-sbom-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-sbom-line-9)">│</text><text class="breeze-sbom-r4" x="24.4" y="239.6" textLength="536.8" clip-path="url(#breeze-sbom-line-9)">update-sbom-information&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-r1" x="585.6" y="239.6" textLength="854" clip-path="url(#breeze-sbom-line-9)">Update&#160;SBOM&#160;information&#160;in&#160;airflow-site&#160;project.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-sbom-line-9)">│</text><text class="breeze-sbom-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-sbom-line-9)">
-</text><text class="breeze-sbom-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-sbom-line-10)">│</text><text class="breeze-sbom-r4" x="24.4" y="264" textLength="536.8" clip-path="url(#breeze-sbom-line-10)">build-all-airflow-images&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-r1" x="585.6" y="264" textLength="854" clip-path="url(#breeze-sbom-line-10)">Generate&#160;images&#160;with&#160;airflow&#160;versions&#160;pre-installed&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-sbom-line-10)">│</text><text class="breeze-sbom-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-sbom-line-10)">
-</text><text class="breeze-sbom-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-sbom-line-11)">│</text><text class="breeze-sbom-r4" x="24.4" y="288.4" textLength="536.8" clip-path="url(#breeze-sbom-line-11)">generate-providers-requirements&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-r1" x="585.6" y="288.4" textLength="854" clip-path="url(#breeze-sbom-line-11)">Generate&#160;requirements&#160;for&#160;selected&#160;provider.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-sbom-line-11)">│</text><text class="breeze-sbom-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-sbom-line-11)">
-</text><text class="breeze-sbom-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-sbom-line-12)">│</text><text class="breeze-sbom-r4" x="24.4" y="312.8" textLength="536.8" clip-path="url(#breeze-sbom-line-12)">export-dependency-information&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-r1" x="585.6" y="312.8" textLength="854" clip-path="url(#breeze-sbom-line-12)">Export&#160;dependency&#160;information&#160;from&#160;SBOM.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-sbom-line-12)">│</text><text class="breeze-sbom-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-sbom-line-12)">
+</text><text class="breeze-sbom-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-sbom-line-9)">│</text><text class="breeze-sbom-r4" x="24.4" y="239.6" textLength="500.2" clip-path="url(#breeze-sbom-line-9)">update-sbom-information&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-r1" x="549" y="239.6" textLength="890.6" clip-path="url(#breeze-sbom-line-9)">Update&#160;SBOM&#160;information&#160;in&#160;airflow-site-archive&#160;project.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-sbom-line-9)">│</text><text class="breeze-sbom-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-sbom-line-9)">
+</text><text class="breeze-sbom-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-sbom-line-10)">│</text><text class="breeze-sbom-r4" x="24.4" y="264" textLength="500.2" clip-path="url(#breeze-sbom-line-10)">build-all-airflow-images&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-r1" x="549" y="264" textLength="890.6" clip-path="url(#breeze-sbom-line-10)">Generate&#160;images&#160;with&#160;airflow&#160;versions&#160;pre-installed&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-sbom-line-10)">│</text><text class="breeze-sbom-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-sbom-line-10)">
+</text><text class="breeze-sbom-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-sbom-line-11)">│</text><text class="breeze-sbom-r4" x="24.4" y="288.4" textLength="500.2" clip-path="url(#breeze-sbom-line-11)">generate-providers-requirements&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-r1" x="549" y="288.4" textLength="890.6" clip-path="url(#breeze-sbom-line-11)">Generate&#160;requirements&#160;for&#160;selected&#160;provider.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-sbom-line-11)">│</text><text class="breeze-sbom-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-sbom-line-11)">
+</text><text class="breeze-sbom-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-sbom-line-12)">│</text><text class="breeze-sbom-r4" x="24.4" y="312.8" textLength="500.2" clip-path="url(#breeze-sbom-line-12)">export-dependency-information&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-r1" x="549" y="312.8" textLength="890.6" clip-path="url(#breeze-sbom-line-12)">Export&#160;dependency&#160;information&#160;from&#160;SBOM.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-sbom-line-12)">│</text><text class="breeze-sbom-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-sbom-line-12)">
 </text><text class="breeze-sbom-r5" x="0" y="337.2" textLength="1464" clip-path="url(#breeze-sbom-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-sbom-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-sbom-line-13)">
 </text>
     </g>
diff --git a/dev/breeze/doc/images/output_sbom.txt b/dev/breeze/doc/images/output_sbom.txt
index 472454d810718..12cb2627e1612 100644
--- a/dev/breeze/doc/images/output_sbom.txt
+++ b/dev/breeze/doc/images/output_sbom.txt
@@ -1 +1 @@
-b03d6ab68f41027663d36fe101214323
+a66ca015aaf5cd2f0bf0671db381f9f2
diff --git a/dev/breeze/doc/images/output_sbom_update-sbom-information.svg b/dev/breeze/doc/images/output_sbom_update-sbom-information.svg
index 159e57af8981f..714502939fefe 100644
--- a/dev/breeze/doc/images/output_sbom_update-sbom-information.svg
+++ b/dev/breeze/doc/images/output_sbom_update-sbom-information.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1001.5999999999999" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 1245.6" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -37,15 +37,13 @@
 .breeze-sbom-update-sbom-information-r3 { fill: #c5c8c6;font-weight: bold }
 .breeze-sbom-update-sbom-information-r4 { fill: #68a0b3;font-weight: bold }
 .breeze-sbom-update-sbom-information-r5 { fill: #868887 }
-.breeze-sbom-update-sbom-information-r6 { fill: #cc555a }
-.breeze-sbom-update-sbom-information-r7 { fill: #8d7b39 }
-.breeze-sbom-update-sbom-information-r8 { fill: #8a4346 }
-.breeze-sbom-update-sbom-information-r9 { fill: #98a84b;font-weight: bold }
+.breeze-sbom-update-sbom-information-r6 { fill: #8d7b39 }
+.breeze-sbom-update-sbom-information-r7 { fill: #98a84b;font-weight: bold }
     </style>
 
     <defs>
     <clipPath id="breeze-sbom-update-sbom-information-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="950.5999999999999" />
+      <rect x="0" y="0" width="1463.0" height="1194.6" />
     </clipPath>
     <clipPath id="breeze-sbom-update-sbom-information-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -161,9 +159,39 @@
 <clipPath id="breeze-sbom-update-sbom-information-line-37">
     <rect x="0" y="904.3" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-sbom-update-sbom-information-line-38">
+    <rect x="0" y="928.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-sbom-update-sbom-information-line-39">
+    <rect x="0" y="953.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-sbom-update-sbom-information-line-40">
+    <rect x="0" y="977.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-sbom-update-sbom-information-line-41">
+    <rect x="0" y="1001.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-sbom-update-sbom-information-line-42">
+    <rect x="0" y="1026.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-sbom-update-sbom-information-line-43">
+    <rect x="0" y="1050.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-sbom-update-sbom-information-line-44">
+    <rect x="0" y="1075.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-sbom-update-sbom-information-line-45">
+    <rect x="0" y="1099.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-sbom-update-sbom-information-line-46">
+    <rect x="0" y="1123.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-sbom-update-sbom-information-line-47">
+    <rect x="0" y="1148.3" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="999.6" rx="8"/><text class="breeze-sbom-update-sbom-information-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;sbom&#160;update-sbom-information</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1243.6" rx="8"/><text class="breeze-sbom-update-sbom-information-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;sbom&#160;update-sbom-information</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -176,42 +204,52 @@
     <text class="breeze-sbom-update-sbom-information-r1" x="1464" y="20" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-0)">
 </text><text class="breeze-sbom-update-sbom-information-r2" x="12.2" y="44.4" textLength="73.2" clip-path="url(#breeze-sbom-update-sbom-information-line-1)">Usage:</text><text class="breeze-sbom-update-sbom-information-r3" x="97.6" y="44.4" textLength="427" clip-path="url(#breeze-sbom-update-sbom-information-line-1)">breeze&#160;sbom&#160;update-sbom-information</text><text class="breeze-sbom-update-sbom-information-r1" x="536.8" y="44.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-1)">[</text><text class="breeze-sbom-update-sbom-information-r4" x="549" y="44.4" textLength="85.4" clip-path="url(#breeze-sbom-update-sbom-information-line-1)">OPTIONS</text><text class="breeze-sbom-update-sbom-information-r1" x="634.4" y="44.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-1)">]</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="44.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-1)">
 </text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="68.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-2)">
-</text><text class="breeze-sbom-update-sbom-information-r1" x="12.2" y="93.2" textLength="585.6" clip-path="url(#breeze-sbom-update-sbom-information-line-3)">Update&#160;SBOM&#160;information&#160;in&#160;airflow-site&#160;project.</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-3)">
+</text><text class="breeze-sbom-update-sbom-information-r1" x="12.2" y="93.2" textLength="683.2" clip-path="url(#breeze-sbom-update-sbom-information-line-3)">Update&#160;SBOM&#160;information&#160;in&#160;airflow-site-archive&#160;project.</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-3)">
 </text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-4)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-sbom-update-sbom-information-line-5)">╭─</text><text class="breeze-sbom-update-sbom-information-r5" x="24.4" y="142" textLength="378.2" clip-path="url(#breeze-sbom-update-sbom-information-line-5)">&#160;Update&#160;SBOM&#160;information&#160;flags&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="402.6" y="142" textLength="1037" clip-path="url(#breeze-sbom-update-sbom-information-line-5)">─────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-sbom-update-sbom-information-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-sbom-update-sbom-information-line-5)">─╮</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-5)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-6)">│</text><text class="breeze-sbom-update-sbom-information-r6" x="24.4" y="166.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-6)">*</text><text class="breeze-sbom-update-sbom-information-r4" x="61" y="166.4" textLength="292.8" clip-path="url(#breeze-sbom-update-sbom-information-line-6)">--airflow-site-directory</text><text class="breeze-sbom-update-sbom-information-r1" x="549" y="166.4" textLength="610" clip-path="url(#breeze-sbom-update-sbom-information-line-6)">Directory&#160;where&#160;airflow-site&#160;directory&#160;is&#160;located.</text><text class="breeze-sbom-update-sbom-information-r7" x="1171.2" y="166.4" textLength="134.2" clip-path="url(#breeze-sbom-update-sbom-information-line-6)">(DIRECTORY)</text><text class="breeze-sbom-update-sbom-information-r8" x="1317.6" y="166.4" textLength="122" clip-path="url(#breeze-sbom-update-sbom-information-line-6)">[required]</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-6)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-6)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-7)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="61" y="190.8" textLength="207.4" clip-path="url(#breeze-sbom-update-sbom-information-line-7)">--airflow-version</text><text class="breeze-sbom-update-sbom-information-r1" x="549" y="190.8" textLength="890.6" clip-path="url(#breeze-sbom-update-sbom-information-line-7)">Version&#160;of&#160;airflow&#160;to&#160;update&#160;sbom&#160;from.&#160;(defaulted&#160;to&#160;all&#160;active&#160;airflow&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-7)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-7)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-8)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="549" y="215.2" textLength="890.6" clip-path="url(#breeze-sbom-update-sbom-information-line-8)">versions)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-8)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-8)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-9)">│</text><text class="breeze-sbom-update-sbom-information-r7" x="549" y="239.6" textLength="890.6" clip-path="url(#breeze-sbom-update-sbom-information-line-9)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-9)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-9)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-10)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="61" y="264" textLength="97.6" clip-path="url(#breeze-sbom-update-sbom-information-line-10)">--python</text><text class="breeze-sbom-update-sbom-information-r1" x="549" y="264" textLength="890.6" clip-path="url(#breeze-sbom-update-sbom-information-line-10)">Python&#160;version&#160;to&#160;update&#160;sbom&#160;from.&#160;(defaults&#160;to&#160;all&#160;historical&#160;python&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-10)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-10)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-11)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="549" y="288.4" textLength="890.6" clip-path="url(#breeze-sbom-update-sbom-information-line-11)">versions)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-11)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-11)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-12)">│</text><text class="breeze-sbom-update-sbom-information-r7" x="549" y="312.8" textLength="890.6" clip-path="url(#breeze-sbom-update-sbom-information-line-12)">(3.6&#160;|&#160;3.7&#160;|&#160;3.8&#160;|&#160;3.9&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-12)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-12)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-13)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="61" y="337.2" textLength="378.2" clip-path="url(#breeze-sbom-update-sbom-information-line-13)">--include-provider-dependencies</text><text class="breeze-sbom-update-sbom-information-r1" x="549" y="337.2" textLength="732" clip-path="url(#breeze-sbom-update-sbom-information-line-13)">Whether&#160;to&#160;include&#160;provider&#160;dependencies&#160;in&#160;SBOM&#160;generation.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-13)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-13)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-14)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="61" y="361.6" textLength="195.2" clip-path="url(#breeze-sbom-update-sbom-information-line-14)">--include-python</text><text class="breeze-sbom-update-sbom-information-r1" x="256.2" y="361.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-14)">/</text><text class="breeze-sbom-update-sbom-information-r4" x="268.4" y="361.6" textLength="231.8" clip-path="url(#breeze-sbom-update-sbom-information-line-14)">--no-include-python</text><text class="breeze-sbom-update-sbom-information-r1" x="549" y="361.6" textLength="475.8" clip-path="url(#breeze-sbom-update-sbom-information-line-14)">Whether&#160;to&#160;include&#160;python&#160;dependencies.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-14)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-14)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-15)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="61" y="386" textLength="158.6" clip-path="url(#breeze-sbom-update-sbom-information-line-15)">--include-npm</text><text class="breeze-sbom-update-sbom-information-r1" x="219.6" y="386" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-15)">/</text><text class="breeze-sbom-update-sbom-information-r4" x="231.8" y="386" textLength="195.2" clip-path="url(#breeze-sbom-update-sbom-information-line-15)">--no-include-npm</text><text class="breeze-sbom-update-sbom-information-r1" x="549" y="386" textLength="439.2" clip-path="url(#breeze-sbom-update-sbom-information-line-15)">Whether&#160;to&#160;include&#160;npm&#160;dependencies.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-15)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-15)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-16)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="61" y="410.4" textLength="219.6" clip-path="url(#breeze-sbom-update-sbom-information-line-16)">--all-combinations</text><text class="breeze-sbom-update-sbom-information-r1" x="549" y="410.4" textLength="890.6" clip-path="url(#breeze-sbom-update-sbom-information-line-16)">Produces&#160;all&#160;combinations&#160;of&#160;airflow&#160;sbom&#160;npm/python(airflow/full).&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-16)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-16)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-17)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="549" y="434.8" textLength="97.6" clip-path="url(#breeze-sbom-update-sbom-information-line-17)">Ignores&#160;</text><text class="breeze-sbom-update-sbom-information-r4" x="646.6" y="434.8" textLength="109.8" clip-path="url(#breeze-sbom-update-sbom-information-line-17)">--include</text><text class="breeze-sbom-update-sbom-information-r1" x="756.4" y="434.8" textLength="683.2" clip-path="url(#breeze-sbom-update-sbom-information-line-17)">&#160;flags&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-17)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-17)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-18)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="61" y="459.2" textLength="195.2" clip-path="url(#breeze-sbom-update-sbom-information-line-18)">--package-filter</text><text class="breeze-sbom-update-sbom-information-r1" x="549" y="459.2" textLength="890.6" clip-path="url(#breeze-sbom-update-sbom-information-line-18)">Filter(s)&#160;to&#160;use&#160;more&#160;than&#160;one&#160;can&#160;be&#160;specified.&#160;You&#160;can&#160;use&#160;glob&#160;pattern</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-18)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-18)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-19)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="549" y="483.6" textLength="890.6" clip-path="url(#breeze-sbom-update-sbom-information-line-19)">matching&#160;the&#160;full&#160;package&#160;name,&#160;for&#160;example&#160;`apache-airflow-providers-*`.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-19)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-19)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-20)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="549" y="508" textLength="890.6" clip-path="url(#breeze-sbom-update-sbom-information-line-20)">Useful&#160;when&#160;you&#160;want&#160;to&#160;selectseveral&#160;similarly&#160;named&#160;packages&#160;together.&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-20)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-20)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-21)">│</text><text class="breeze-sbom-update-sbom-information-r7" x="549" y="532.4" textLength="890.6" clip-path="url(#breeze-sbom-update-sbom-information-line-21)">(apache-airflow-providers&#160;|&#160;apache-airflow)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-21)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-21)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-22)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="61" y="556.8" textLength="85.4" clip-path="url(#breeze-sbom-update-sbom-information-line-22)">--force</text><text class="breeze-sbom-update-sbom-information-r1" x="549" y="556.8" textLength="573.4" clip-path="url(#breeze-sbom-update-sbom-information-line-22)">Force&#160;update&#160;of&#160;sbom&#160;even&#160;if&#160;it&#160;already&#160;exists.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-22)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-22)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="581.2" textLength="1464" clip-path="url(#breeze-sbom-update-sbom-information-line-23)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-23)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="605.6" textLength="24.4" clip-path="url(#breeze-sbom-update-sbom-information-line-24)">╭─</text><text class="breeze-sbom-update-sbom-information-r5" x="24.4" y="605.6" textLength="219.6" clip-path="url(#breeze-sbom-update-sbom-information-line-24)">&#160;Parallel&#160;running&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="244" y="605.6" textLength="1195.6" clip-path="url(#breeze-sbom-update-sbom-information-line-24)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-sbom-update-sbom-information-r5" x="1439.6" y="605.6" textLength="24.4" clip-path="url(#breeze-sbom-update-sbom-information-line-24)">─╮</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-24)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-25)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="630" textLength="207.4" clip-path="url(#breeze-sbom-update-sbom-information-line-25)">--run-in-parallel</text><text class="breeze-sbom-update-sbom-information-r1" x="378.2" y="630" textLength="854" clip-path="url(#breeze-sbom-update-sbom-information-line-25)">Run&#160;the&#160;operation&#160;in&#160;parallel&#160;on&#160;all&#160;or&#160;selected&#160;subset&#160;of&#160;parameters.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-25)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-25)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-26)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="654.4" textLength="158.6" clip-path="url(#breeze-sbom-update-sbom-information-line-26)">--parallelism</text><text class="breeze-sbom-update-sbom-information-r1" x="378.2" y="654.4" textLength="915" clip-path="url(#breeze-sbom-update-sbom-information-line-26)">Maximum&#160;number&#160;of&#160;processes&#160;to&#160;use&#160;while&#160;running&#160;the&#160;operation&#160;in&#160;parallel.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-26)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-26)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-27)">│</text><text class="breeze-sbom-update-sbom-information-r7" x="378.2" y="678.8" textLength="915" clip-path="url(#breeze-sbom-update-sbom-information-line-27)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-27)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-27)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-28)">│</text><text class="breeze-sbom-update-sbom-information-r5" x="378.2" y="703.2" textLength="915" clip-path="url(#breeze-sbom-update-sbom-information-line-28)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-28)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-28)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-29)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="727.6" textLength="170.8" clip-path="url(#breeze-sbom-update-sbom-information-line-29)">--skip-cleanup</text><text class="breeze-sbom-update-sbom-information-r1" x="378.2" y="727.6" textLength="732" clip-path="url(#breeze-sbom-update-sbom-information-line-29)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-29)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-29)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-30)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="752" textLength="207.4" clip-path="url(#breeze-sbom-update-sbom-information-line-30)">--debug-resources</text><text class="breeze-sbom-update-sbom-information-r1" x="378.2" y="752" textLength="768.6" clip-path="url(#breeze-sbom-update-sbom-information-line-30)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;running&#160;in&#160;parallel.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-30)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-30)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-31)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="776.4" textLength="305" clip-path="url(#breeze-sbom-update-sbom-information-line-31)">--include-success-outputs</text><text class="breeze-sbom-update-sbom-information-r1" x="378.2" y="776.4" textLength="841.8" clip-path="url(#breeze-sbom-update-sbom-information-line-31)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;runs&#160;(not&#160;shown&#160;by&#160;default).</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-31)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-31)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="800.8" textLength="1464" clip-path="url(#breeze-sbom-update-sbom-information-line-32)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-32)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="825.2" textLength="24.4" clip-path="url(#breeze-sbom-update-sbom-information-line-33)">╭─</text><text class="breeze-sbom-update-sbom-information-r5" x="24.4" y="825.2" textLength="195.2" clip-path="url(#breeze-sbom-update-sbom-information-line-33)">&#160;Common&#160;options&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="219.6" y="825.2" textLength="1220" clip-path="url(#breeze-sbom-update-sbom-information-line-33)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-sbom-update-sbom-information-r5" x="1439.6" y="825.2" textLength="24.4" clip-path="url(#breeze-sbom-update-sbom-information-line-33)">─╮</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-33)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-34)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="849.6" textLength="109.8" clip-path="url(#breeze-sbom-update-sbom-information-line-34)">--verbose</text><text class="breeze-sbom-update-sbom-information-r9" x="158.6" y="849.6" textLength="24.4" clip-path="url(#breeze-sbom-update-sbom-information-line-34)">-v</text><text class="breeze-sbom-update-sbom-information-r1" x="207.4" y="849.6" textLength="585.6" clip-path="url(#breeze-sbom-update-sbom-information-line-34)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="849.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-34)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-34)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-35)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="874" textLength="109.8" clip-path="url(#breeze-sbom-update-sbom-information-line-35)">--dry-run</text><text class="breeze-sbom-update-sbom-information-r9" x="158.6" y="874" textLength="24.4" clip-path="url(#breeze-sbom-update-sbom-information-line-35)">-D</text><text class="breeze-sbom-update-sbom-information-r1" x="207.4" y="874" textLength="719.8" clip-path="url(#breeze-sbom-update-sbom-information-line-35)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="874" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-35)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-35)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-36)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="898.4" textLength="97.6" clip-path="url(#breeze-sbom-update-sbom-information-line-36)">--answer</text><text class="breeze-sbom-update-sbom-information-r9" x="158.6" y="898.4" textLength="24.4" clip-path="url(#breeze-sbom-update-sbom-information-line-36)">-a</text><text class="breeze-sbom-update-sbom-information-r1" x="207.4" y="898.4" textLength="317.2" clip-path="url(#breeze-sbom-update-sbom-information-line-36)">Force&#160;answer&#160;to&#160;questions.</text><text class="breeze-sbom-update-sbom-information-r7" x="536.8" y="898.4" textLength="353.8" clip-path="url(#breeze-sbom-update-sbom-information-line-36)">(y&#160;|&#160;n&#160;|&#160;q&#160;|&#160;yes&#160;|&#160;no&#160;|&#160;quit)</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="898.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-36)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-36)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-37)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="922.8" textLength="73.2" clip-path="url(#breeze-sbom-update-sbom-information-line-37)">--help</text><text class="breeze-sbom-update-sbom-information-r9" x="158.6" y="922.8" textLength="24.4" clip-path="url(#breeze-sbom-update-sbom-information-line-37)">-h</text><text class="breeze-sbom-update-sbom-information-r1" x="207.4" y="922.8" textLength="329.4" clip-path="url(#breeze-sbom-update-sbom-information-line-37)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="922.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-37)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-37)">
-</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="947.2" textLength="1464" clip-path="url(#breeze-sbom-update-sbom-information-line-38)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-38)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-sbom-update-sbom-information-line-5)">╭─</text><text class="breeze-sbom-update-sbom-information-r5" x="24.4" y="142" textLength="378.2" clip-path="url(#breeze-sbom-update-sbom-information-line-5)">&#160;Update&#160;SBOM&#160;destination&#160;flags&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="402.6" y="142" textLength="1037" clip-path="url(#breeze-sbom-update-sbom-information-line-5)">─────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-sbom-update-sbom-information-r5" x="1439.6" y="142" textLength="24.4" clip-path="url(#breeze-sbom-update-sbom-information-line-5)">─╮</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-5)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-6)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="166.4" textLength="231.8" clip-path="url(#breeze-sbom-update-sbom-information-line-6)">--airflow-root-path</text><text class="breeze-sbom-update-sbom-information-r1" x="402.6" y="166.4" textLength="1037" clip-path="url(#breeze-sbom-update-sbom-information-line-6)">Path&#160;to&#160;the&#160;root&#160;of&#160;the&#160;airflow&#160;repository.&#160;Mutually&#160;exclusive&#160;with&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="166.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-6)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-6)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-7)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="402.6" y="190.8" textLength="329.4" clip-path="url(#breeze-sbom-update-sbom-information-line-7)">--airflow-site-archive-path</text><text class="breeze-sbom-update-sbom-information-r1" x="732" y="190.8" textLength="707.6" clip-path="url(#breeze-sbom-update-sbom-information-line-7)">&#160;option.&#160;When&#160;specified&#160;SBOM&#160;generated&#160;files&#160;are&#160;placed&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-7)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-7)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-8)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="402.6" y="215.2" textLength="1037" clip-path="url(#breeze-sbom-update-sbom-information-line-8)">where&#160;airflow&#160;docs&#160;are&#160;build&#160;(generated/_build/docs/apache-airflow/stable&#160;directory).</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-8)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-8)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-9)">│</text><text class="breeze-sbom-update-sbom-information-r6" x="402.6" y="239.6" textLength="1037" clip-path="url(#breeze-sbom-update-sbom-information-line-9)">(DIRECTORY)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-9)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-9)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-10)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="264" textLength="329.4" clip-path="url(#breeze-sbom-update-sbom-information-line-10)">--airflow-site-archive-path</text><text class="breeze-sbom-update-sbom-information-r1" x="402.6" y="264" textLength="1037" clip-path="url(#breeze-sbom-update-sbom-information-line-10)">Directory&#160;where&#160;airflow-site-archive&#160;directory&#160;is&#160;located.&#160;Mutually&#160;exclusive&#160;with&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-10)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-10)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-11)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="402.6" y="288.4" textLength="231.8" clip-path="url(#breeze-sbom-update-sbom-information-line-11)">--airflow-root-path</text><text class="breeze-sbom-update-sbom-information-r1" x="634.4" y="288.4" textLength="805.2" clip-path="url(#breeze-sbom-update-sbom-information-line-11)">&#160;option.&#160;When&#160;specified&#160;SBOM&#160;generated&#160;files&#160;are&#160;placed&#160;in&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-11)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-11)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-12)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="402.6" y="312.8" textLength="1037" clip-path="url(#breeze-sbom-update-sbom-information-line-12)">airflow-site-archive/docs-archive/directory.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-12)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-12)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-13)">│</text><text class="breeze-sbom-update-sbom-information-r6" x="402.6" y="337.2" textLength="1037" clip-path="url(#breeze-sbom-update-sbom-information-line-13)">(DIRECTORY)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-13)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-13)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="361.6" textLength="1464" clip-path="url(#breeze-sbom-update-sbom-information-line-14)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-14)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="386" textLength="24.4" clip-path="url(#breeze-sbom-update-sbom-information-line-15)">╭─</text><text class="breeze-sbom-update-sbom-information-r5" x="24.4" y="386" textLength="378.2" clip-path="url(#breeze-sbom-update-sbom-information-line-15)">&#160;Update&#160;SBOM&#160;information&#160;flags&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="402.6" y="386" textLength="1037" clip-path="url(#breeze-sbom-update-sbom-information-line-15)">─────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-sbom-update-sbom-information-r5" x="1439.6" y="386" textLength="24.4" clip-path="url(#breeze-sbom-update-sbom-information-line-15)">─╮</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-15)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-16)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="410.4" textLength="207.4" clip-path="url(#breeze-sbom-update-sbom-information-line-16)">--airflow-version</text><text class="breeze-sbom-update-sbom-information-r1" x="512.4" y="410.4" textLength="927.2" clip-path="url(#breeze-sbom-update-sbom-information-line-16)">Version&#160;of&#160;airflow&#160;to&#160;update&#160;sbom&#160;from.&#160;(defaulted&#160;to&#160;all&#160;active&#160;airflow&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-16)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-16)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-17)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="512.4" y="434.8" textLength="927.2" clip-path="url(#breeze-sbom-update-sbom-information-line-17)">versions)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-17)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-17)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-18)">│</text><text class="breeze-sbom-update-sbom-information-r6" x="512.4" y="459.2" textLength="927.2" clip-path="url(#breeze-sbom-update-sbom-information-line-18)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-18)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-18)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-19)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="483.6" textLength="97.6" clip-path="url(#breeze-sbom-update-sbom-information-line-19)">--python</text><text class="breeze-sbom-update-sbom-information-r1" x="512.4" y="483.6" textLength="927.2" clip-path="url(#breeze-sbom-update-sbom-information-line-19)">Python&#160;version&#160;to&#160;update&#160;sbom&#160;from.&#160;(defaults&#160;to&#160;all&#160;historical&#160;python&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-19)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-19)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-20)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="512.4" y="508" textLength="927.2" clip-path="url(#breeze-sbom-update-sbom-information-line-20)">versions)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="508" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-20)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-20)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-21)">│</text><text class="breeze-sbom-update-sbom-information-r6" x="512.4" y="532.4" textLength="927.2" clip-path="url(#breeze-sbom-update-sbom-information-line-21)">(3.6&#160;|&#160;3.7&#160;|&#160;3.8&#160;|&#160;3.9&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-21)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-21)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-22)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="556.8" textLength="378.2" clip-path="url(#breeze-sbom-update-sbom-information-line-22)">--include-provider-dependencies</text><text class="breeze-sbom-update-sbom-information-r1" x="512.4" y="556.8" textLength="732" clip-path="url(#breeze-sbom-update-sbom-information-line-22)">Whether&#160;to&#160;include&#160;provider&#160;dependencies&#160;in&#160;SBOM&#160;generation.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-22)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-22)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-23)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="581.2" textLength="195.2" clip-path="url(#breeze-sbom-update-sbom-information-line-23)">--include-python</text><text class="breeze-sbom-update-sbom-information-r1" x="219.6" y="581.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-23)">/</text><text class="breeze-sbom-update-sbom-information-r4" x="231.8" y="581.2" textLength="231.8" clip-path="url(#breeze-sbom-update-sbom-information-line-23)">--no-include-python</text><text class="breeze-sbom-update-sbom-information-r1" x="512.4" y="581.2" textLength="475.8" clip-path="url(#breeze-sbom-update-sbom-information-line-23)">Whether&#160;to&#160;include&#160;python&#160;dependencies.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-23)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-23)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-24)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="605.6" textLength="158.6" clip-path="url(#breeze-sbom-update-sbom-information-line-24)">--include-npm</text><text class="breeze-sbom-update-sbom-information-r1" x="183" y="605.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-24)">/</text><text class="breeze-sbom-update-sbom-information-r4" x="195.2" y="605.6" textLength="195.2" clip-path="url(#breeze-sbom-update-sbom-information-line-24)">--no-include-npm</text><text class="breeze-sbom-update-sbom-information-r1" x="512.4" y="605.6" textLength="439.2" clip-path="url(#breeze-sbom-update-sbom-information-line-24)">Whether&#160;to&#160;include&#160;npm&#160;dependencies.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-24)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-24)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-25)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="630" textLength="219.6" clip-path="url(#breeze-sbom-update-sbom-information-line-25)">--all-combinations</text><text class="breeze-sbom-update-sbom-information-r1" x="512.4" y="630" textLength="927.2" clip-path="url(#breeze-sbom-update-sbom-information-line-25)">Produces&#160;all&#160;combinations&#160;of&#160;airflow&#160;sbom&#160;npm/python(airflow/full).&#160;Ignores&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-25)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-25)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-26)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="512.4" y="654.4" textLength="109.8" clip-path="url(#breeze-sbom-update-sbom-information-line-26)">--include</text><text class="breeze-sbom-update-sbom-information-r1" x="622.2" y="654.4" textLength="817.4" clip-path="url(#breeze-sbom-update-sbom-information-line-26)">&#160;flags&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-26)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-26)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-27)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="678.8" textLength="195.2" clip-path="url(#breeze-sbom-update-sbom-information-line-27)">--package-filter</text><text class="breeze-sbom-update-sbom-information-r1" x="512.4" y="678.8" textLength="927.2" clip-path="url(#breeze-sbom-update-sbom-information-line-27)">Filter(s)&#160;to&#160;use&#160;more&#160;than&#160;one&#160;can&#160;be&#160;specified.&#160;You&#160;can&#160;use&#160;glob&#160;pattern&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-27)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-27)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-28)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="512.4" y="703.2" textLength="927.2" clip-path="url(#breeze-sbom-update-sbom-information-line-28)">matching&#160;the&#160;full&#160;package&#160;name,&#160;for&#160;example&#160;`apache-airflow-providers-*`.&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-28)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-28)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-29)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="512.4" y="727.6" textLength="927.2" clip-path="url(#breeze-sbom-update-sbom-information-line-29)">Useful&#160;when&#160;you&#160;want&#160;to&#160;selectseveral&#160;similarly&#160;named&#160;packages&#160;together.&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-29)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-29)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-30)">│</text><text class="breeze-sbom-update-sbom-information-r6" x="512.4" y="752" textLength="927.2" clip-path="url(#breeze-sbom-update-sbom-information-line-30)">(apache-airflow-providers&#160;|&#160;apache-airflow)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-30)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-30)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-31)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="776.4" textLength="85.4" clip-path="url(#breeze-sbom-update-sbom-information-line-31)">--force</text><text class="breeze-sbom-update-sbom-information-r1" x="512.4" y="776.4" textLength="573.4" clip-path="url(#breeze-sbom-update-sbom-information-line-31)">Force&#160;update&#160;of&#160;sbom&#160;even&#160;if&#160;it&#160;already&#160;exists.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-31)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-31)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-32)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="800.8" textLength="170.8" clip-path="url(#breeze-sbom-update-sbom-information-line-32)">--github-token</text><text class="breeze-sbom-update-sbom-information-r1" x="512.4" y="800.8" textLength="500.2" clip-path="url(#breeze-sbom-update-sbom-information-line-32)">The&#160;token&#160;used&#160;to&#160;authenticate&#160;to&#160;GitHub.</text><text class="breeze-sbom-update-sbom-information-r6" x="1024.8" y="800.8" textLength="73.2" clip-path="url(#breeze-sbom-update-sbom-information-line-32)">(TEXT)</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-32)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-32)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="825.2" textLength="1464" clip-path="url(#breeze-sbom-update-sbom-information-line-33)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-33)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="849.6" textLength="24.4" clip-path="url(#breeze-sbom-update-sbom-information-line-34)">╭─</text><text class="breeze-sbom-update-sbom-information-r5" x="24.4" y="849.6" textLength="219.6" clip-path="url(#breeze-sbom-update-sbom-information-line-34)">&#160;Parallel&#160;running&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="244" y="849.6" textLength="1195.6" clip-path="url(#breeze-sbom-update-sbom-information-line-34)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-sbom-update-sbom-information-r5" x="1439.6" y="849.6" textLength="24.4" clip-path="url(#breeze-sbom-update-sbom-information-line-34)">─╮</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-34)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-35)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="874" textLength="207.4" clip-path="url(#breeze-sbom-update-sbom-information-line-35)">--run-in-parallel</text><text class="breeze-sbom-update-sbom-information-r1" x="378.2" y="874" textLength="854" clip-path="url(#breeze-sbom-update-sbom-information-line-35)">Run&#160;the&#160;operation&#160;in&#160;parallel&#160;on&#160;all&#160;or&#160;selected&#160;subset&#160;of&#160;parameters.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="874" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-35)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-35)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-36)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="898.4" textLength="158.6" clip-path="url(#breeze-sbom-update-sbom-information-line-36)">--parallelism</text><text class="breeze-sbom-update-sbom-information-r1" x="378.2" y="898.4" textLength="915" clip-path="url(#breeze-sbom-update-sbom-information-line-36)">Maximum&#160;number&#160;of&#160;processes&#160;to&#160;use&#160;while&#160;running&#160;the&#160;operation&#160;in&#160;parallel.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="898.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-36)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-36)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-37)">│</text><text class="breeze-sbom-update-sbom-information-r6" x="378.2" y="922.8" textLength="915" clip-path="url(#breeze-sbom-update-sbom-information-line-37)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="922.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-37)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-37)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-38)">│</text><text class="breeze-sbom-update-sbom-information-r5" x="378.2" y="947.2" textLength="915" clip-path="url(#breeze-sbom-update-sbom-information-line-38)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="947.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-38)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-38)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-39)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="971.6" textLength="170.8" clip-path="url(#breeze-sbom-update-sbom-information-line-39)">--skip-cleanup</text><text class="breeze-sbom-update-sbom-information-r1" x="378.2" y="971.6" textLength="732" clip-path="url(#breeze-sbom-update-sbom-information-line-39)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="971.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-39)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-39)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-40)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="996" textLength="207.4" clip-path="url(#breeze-sbom-update-sbom-information-line-40)">--debug-resources</text><text class="breeze-sbom-update-sbom-information-r1" x="378.2" y="996" textLength="768.6" clip-path="url(#breeze-sbom-update-sbom-information-line-40)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;running&#160;in&#160;parallel.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="996" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-40)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-40)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-41)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="1020.4" textLength="305" clip-path="url(#breeze-sbom-update-sbom-information-line-41)">--include-success-outputs</text><text class="breeze-sbom-update-sbom-information-r1" x="378.2" y="1020.4" textLength="841.8" clip-path="url(#breeze-sbom-update-sbom-information-line-41)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;runs&#160;(not&#160;shown&#160;by&#160;default).</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-41)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-41)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="1044.8" textLength="1464" clip-path="url(#breeze-sbom-update-sbom-information-line-42)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-42)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="1069.2" textLength="24.4" clip-path="url(#breeze-sbom-update-sbom-information-line-43)">╭─</text><text class="breeze-sbom-update-sbom-information-r5" x="24.4" y="1069.2" textLength="195.2" clip-path="url(#breeze-sbom-update-sbom-information-line-43)">&#160;Common&#160;options&#160;</text><text class="breeze-sbom-update-sbom-information-r5" x="219.6" y="1069.2" textLength="1220" clip-path="url(#breeze-sbom-update-sbom-information-line-43)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-sbom-update-sbom-information-r5" x="1439.6" y="1069.2" textLength="24.4" clip-path="url(#breeze-sbom-update-sbom-information-line-43)">─╮</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-43)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-44)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="1093.6" textLength="109.8" clip-path="url(#breeze-sbom-update-sbom-information-line-44)">--verbose</text><text class="breeze-sbom-update-sbom-information-r7" x="158.6" y="1093.6" textLength="24.4" clip-path="url(#breeze-sbom-update-sbom-information-line-44)">-v</text><text class="breeze-sbom-update-sbom-information-r1" x="207.4" y="1093.6" textLength="585.6" clip-path="url(#breeze-sbom-update-sbom-information-line-44)">Print&#160;verbose&#160;information&#160;about&#160;performed&#160;steps.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="1093.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-44)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-44)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-45)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="1118" textLength="109.8" clip-path="url(#breeze-sbom-update-sbom-information-line-45)">--dry-run</text><text class="breeze-sbom-update-sbom-information-r7" x="158.6" y="1118" textLength="24.4" clip-path="url(#breeze-sbom-update-sbom-information-line-45)">-D</text><text class="breeze-sbom-update-sbom-information-r1" x="207.4" y="1118" textLength="719.8" clip-path="url(#breeze-sbom-update-sbom-information-line-45)">If&#160;dry-run&#160;is&#160;set,&#160;commands&#160;are&#160;only&#160;printed,&#160;not&#160;executed.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="1118" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-45)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-45)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-46)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="1142.4" textLength="97.6" clip-path="url(#breeze-sbom-update-sbom-information-line-46)">--answer</text><text class="breeze-sbom-update-sbom-information-r7" x="158.6" y="1142.4" textLength="24.4" clip-path="url(#breeze-sbom-update-sbom-information-line-46)">-a</text><text class="breeze-sbom-update-sbom-information-r1" x="207.4" y="1142.4" textLength="317.2" clip-path="url(#breeze-sbom-update-sbom-information-line-46)">Force&#160;answer&#160;to&#160;questions.</text><text class="breeze-sbom-update-sbom-information-r6" x="536.8" y="1142.4" textLength="353.8" clip-path="url(#breeze-sbom-update-sbom-information-line-46)">(y&#160;|&#160;n&#160;|&#160;q&#160;|&#160;yes&#160;|&#160;no&#160;|&#160;quit)</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="1142.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-46)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-46)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-47)">│</text><text class="breeze-sbom-update-sbom-information-r4" x="24.4" y="1166.8" textLength="73.2" clip-path="url(#breeze-sbom-update-sbom-information-line-47)">--help</text><text class="breeze-sbom-update-sbom-information-r7" x="158.6" y="1166.8" textLength="24.4" clip-path="url(#breeze-sbom-update-sbom-information-line-47)">-h</text><text class="breeze-sbom-update-sbom-information-r1" x="207.4" y="1166.8" textLength="329.4" clip-path="url(#breeze-sbom-update-sbom-information-line-47)">Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="breeze-sbom-update-sbom-information-r5" x="1451.8" y="1166.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-47)">│</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="1166.8" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-47)">
+</text><text class="breeze-sbom-update-sbom-information-r5" x="0" y="1191.2" textLength="1464" clip-path="url(#breeze-sbom-update-sbom-information-line-48)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-sbom-update-sbom-information-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#breeze-sbom-update-sbom-information-line-48)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_sbom_update-sbom-information.txt b/dev/breeze/doc/images/output_sbom_update-sbom-information.txt
index 6e5ac979b168c..483167d8d8a7a 100644
--- a/dev/breeze/doc/images/output_sbom_update-sbom-information.txt
+++ b/dev/breeze/doc/images/output_sbom_update-sbom-information.txt
@@ -1 +1 @@
-7cb3c6bd7a08706720035864df941273
+43dadb548e01dd68fd148adf2e62f750
diff --git a/dev/breeze/src/airflow_breeze/commands/sbom_commands.py b/dev/breeze/src/airflow_breeze/commands/sbom_commands.py
index f7d7b77a18c5d..8eb29258792c0 100644
--- a/dev/breeze/src/airflow_breeze/commands/sbom_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/sbom_commands.py
@@ -121,13 +121,24 @@ def sbom():
 """
 
 
-@sbom.command(name="update-sbom-information", help="Update SBOM information in airflow-site project.")
+@sbom.command(name="update-sbom-information", help="Update SBOM information in airflow-site-archive project.")
 @click.option(
-    "--airflow-site-directory",
+    "--airflow-site-archive-path",
     type=click.Path(file_okay=False, dir_okay=True, path_type=Path, exists=True),
-    required=True,
-    envvar="AIRFLOW_SITE_DIRECTORY",
-    help="Directory where airflow-site directory is located.",
+    required=False,
+    envvar="AIRFLOW_SITE_ARCHIVE_PATH",
+    help="Directory where airflow-site-archive directory is located. Mutually exclusive with "
+    "--airflow-root-path option. When specified SBOM generated files are placed in "
+    "airflow-site-archive/docs-archive/directory.",
+)
+@click.option(
+    "--airflow-root-path",
+    type=click.Path(file_okay=False, dir_okay=True, path_type=Path, exists=True),
+    required=False,
+    help="Path to the root of the airflow repository. Mutually exclusive with "
+    "--airflow-site-archive-path option. When specified SBOM generated files are placed where "
+    "airflow docs are build (generated/_build/docs/apache-airflow/stable directory).",
+    envvar="AIRFLOW_ROOT_PATH",
 )
 @click.option(
     "--airflow-version",
@@ -169,6 +180,7 @@ def sbom():
     is_flag=True,
     help="Produces all combinations of airflow sbom npm/python(airflow/full). Ignores --include flags",
 )
+@option_github_token
 @option_verbose
 @option_dry_run
 @option_answer
@@ -182,7 +194,8 @@ def sbom():
     default="apache-airflow",
 )
 def update_sbom_information(
-    airflow_site_directory: Path,
+    airflow_site_archive_path: Path | None,
+    airflow_root_path: Path | None,
     airflow_version: str | None,
     python: str | None,
     include_provider_dependencies: bool,
@@ -195,6 +208,7 @@ def update_sbom_information(
     skip_cleanup: bool,
     force: bool,
     all_combinations: bool,
+    github_token: str | None,
     package_filter: tuple[str, ...],
 ):
     import jinja2
@@ -208,8 +222,10 @@ def update_sbom_information(
 
     if airflow_version is None:
         airflow_versions, _ = get_active_airflow_versions()
+        all_airflow_versions = airflow_versions.copy()
     else:
         airflow_versions = [airflow_version]
+        all_airflow_versions = get_active_airflow_versions(confirm=False)
     if python is None:
         python_versions = ALL_HISTORICAL_PYTHON_VERSIONS
     else:
@@ -219,7 +235,19 @@ def update_sbom_information(
 
     jobs_to_run: list[SbomApplicationJob] = []
 
-    airflow_site_archive_directory = airflow_site_directory / "docs-archive"
+    if airflow_root_path and airflow_site_archive_path:
+        get_console().print(
+            "[error]You cannot specify both --airflow-site-archive-path and --airflow-root-path. "
+            "Please specify only one of them."
+        )
+        sys.exit(1)
+
+    if not airflow_root_path and not airflow_site_archive_path:
+        get_console().print(
+            "[error]You must specify either --airflow-site-archive-path or --airflow-root-path. "
+            "Please specify one of them."
+        )
+        sys.exit(1)
 
     def _dir_exists_warn_and_should_skip(dir: Path, force: bool) -> bool:
         if dir.exists():
@@ -230,7 +258,6 @@ def _dir_exists_warn_and_should_skip(dir: Path, force: bool) -> bool:
             return False
         return False
 
-    apache_airflow_documentation_directory = airflow_site_archive_directory / "apache-airflow"
     if package_filter == "apache-airflow":
         if all_combinations:
             for include_npm, include_python, include_provider_dependencies in [
@@ -244,8 +271,10 @@ def _dir_exists_warn_and_should_skip(dir: Path, force: bool) -> bool:
                 if not include_python:
                     use_python_versions = [None]
                 core_jobs(
+                    all_airflow_versions,
                     _dir_exists_warn_and_should_skip,
-                    apache_airflow_documentation_directory,
+                    airflow_site_archive_path,
+                    airflow_root_path,
                     airflow_versions,
                     application_root_path,
                     force,
@@ -260,8 +289,10 @@ def _dir_exists_warn_and_should_skip(dir: Path, force: bool) -> bool:
             if not include_python:
                 use_python_versions = [None]
             core_jobs(
+                all_airflow_versions,
                 _dir_exists_warn_and_should_skip,
-                apache_airflow_documentation_directory,
+                airflow_site_archive_path,
+                airflow_root_path,
                 airflow_versions,
                 application_root_path,
                 force,
@@ -284,7 +315,7 @@ def _dir_exists_warn_and_should_skip(dir: Path, force: bool) -> bool:
             provider_id,
             provider_version,
             provider_version_documentation_directory,
-        ) in list_providers_from_providers_requirements(airflow_site_archive_directory):
+        ) in list_providers_from_providers_requirements(airflow_site_archive_path):
             destination_dir = provider_version_documentation_directory / "sbom"
 
             destination_dir.mkdir(parents=True, exist_ok=True)
@@ -340,6 +371,7 @@ def _dir_exists_warn_and_should_skip(dir: Path, force: bool) -> bool:
                             "job": job,
                             "output": outputs[index],
                             "port_map": port_map,
+                            "github_token": github_token,
                         },
                     )
                     for index, job in enumerate(jobs_to_run)
@@ -353,7 +385,7 @@ def _dir_exists_warn_and_should_skip(dir: Path, force: bool) -> bool:
         )
     else:
         for job in jobs_to_run:
-            produce_sbom_for_application_via_cdxgen_server(job, output=None)
+            produce_sbom_for_application_via_cdxgen_server(job, output=None, github_token=github_token)
 
     html_template = SBOM_INDEX_TEMPLATE
 
@@ -372,6 +404,20 @@ def _generate_index(destination_dir: Path, provider_id: str | None, version: str
 
     if package_filter == "apache-airflow":
         for airflow_v in airflow_versions:
+            if airflow_site_archive_path:
+                apache_airflow_documentation_directory = (
+                    airflow_site_archive_path / "docs-archive" / "apache-airflow"
+                )
+            elif airflow_root_path:
+                apache_airflow_documentation_directory = (
+                    airflow_root_path / "generated" / "_build" / "docs" / "apache-airflow"
+                )
+            else:
+                get_console().print(
+                    "[error]You must specify either --airflow-site-archive-path or --airflow-root-path. "
+                    "Please specify one of them."
+                )
+                sys.exit(1)
             airflow_version_dir = apache_airflow_documentation_directory / airflow_v
             destination_dir = airflow_version_dir / "sbom"
             _generate_index(destination_dir, None, airflow_v)
@@ -381,14 +427,16 @@ def _generate_index(destination_dir: Path, provider_id: str | None, version: str
             provider_id,
             provider_version,
             provider_version_documentation_directory,
-        ) in list_providers_from_providers_requirements(airflow_site_archive_directory):
+        ) in list_providers_from_providers_requirements(airflow_site_archive_path):
             destination_dir = provider_version_documentation_directory / "sbom"
             _generate_index(destination_dir, provider_id, provider_version)
 
 
 def core_jobs(
+    all_airflow_versions: list[str],
     _dir_exists_warn_and_should_skip,
-    apache_airflow_documentation_directory: Path,
+    airflow_site_archive_path: Path | None,
+    airflow_root_path: Path | None,
     airflow_versions: list[str],
     application_root_path: Path,
     force: bool,
@@ -398,18 +446,48 @@ def core_jobs(
     jobs_to_run: list[SbomApplicationJob],
     python_versions: list[str | None],
 ):
+    latest_airflow_version = all_airflow_versions[-1]
     # Create core jobs
     for airflow_v in airflow_versions:
-        airflow_version_dir = apache_airflow_documentation_directory / airflow_v
-        if not airflow_version_dir.exists():
-            get_console().print(f"[warning]The {airflow_version_dir} does not exist. Skipping")
+        if airflow_site_archive_path:
+            airflow_version_dirs = [
+                airflow_site_archive_path / "docs-archive" / "apache-airflow" / airflow_v,
+            ]
+            if latest_airflow_version == airflow_v:
+                airflow_version_dirs.append(airflow_site_archive_path / "apache-airflow" / "stable")
+        elif airflow_root_path:
+            airflow_version_dirs = [
+                airflow_root_path / "generated" / "_build" / "docs" / "apache-airflow" / "stable"
+            ]
+        else:
+            get_console().print(
+                "[error]You must specify either --airflow-site-archive-path or --airflow-root-path. "
+                "Please specify one of them."
+            )
+            sys.exit(1)
+        exists = True
+        for airflow_version_dir in airflow_version_dirs:
+            if not airflow_version_dir.exists():
+                get_console().print(f"[warning]The {airflow_version_dir} does not exist. Skipping")
+                exists = False
+                break
+        if not exists:
             continue
-        destination_dir = airflow_version_dir / "sbom"
-
-        if _dir_exists_warn_and_should_skip(destination_dir, force):
+        destination_dirs: list[Path] = []
+        for airflow_version_dir in airflow_version_dirs:
+            destination_dir = airflow_version_dir / "sbom"
+            if not _dir_exists_warn_and_should_skip(destination_dir, force):
+                destination_dirs.append(destination_dir)
+            else:
+                get_console().print(
+                    f"[warning]The {destination_dir} already exists and generation is not forced. "
+                    f"Skipping for airflow version {airflow_v}"
+                )
+        if not destination_dirs:
+            get_console().print(
+                f"[warning]All directories already exist and generation is not forced. Skipping {airflow_v}"
+            )
             continue
-
-        destination_dir.mkdir(parents=True, exist_ok=True)
         get_console().print(f"[info]Attempting to update sbom for {airflow_v}.")
         for python_version in python_versions:
             if include_python and include_npm:
@@ -425,10 +503,12 @@ def core_jobs(
                 suffix += "-full"
 
             target_sbom_file_name = f"apache-airflow-sbom-{airflow_v}{suffix}.json"
-            target_sbom_path = destination_dir / target_sbom_file_name
-
-            if _dir_exists_warn_and_should_skip(target_sbom_path, force):
-                continue
+            target_sbom_paths: list[Path] = []
+            for destination_dir in destination_dirs:
+                target_sbom_path = destination_dir / target_sbom_file_name
+                if _dir_exists_warn_and_should_skip(target_sbom_path, force):
+                    continue
+                target_sbom_paths.append(target_sbom_path)
 
             jobs_to_run.append(
                 SbomCoreJob(
@@ -436,7 +516,7 @@ def core_jobs(
                     python_version=python_version,
                     application_root_path=application_root_path,
                     include_provider_dependencies=include_provider_dependencies,
-                    target_path=target_sbom_path,
+                    target_paths=target_sbom_paths,
                     include_python=include_python,
                     include_npm=include_npm,
                 )
@@ -745,7 +825,7 @@ def export_dependency_information(
 
     import requests
 
-    base_url = f"https://airflow.apache.org/docs/apache-airflow/{airflow_version}/sbom"
+    base_url = f"https://airflow.apache.org/docs/apache-airflow/{airflow_version}"
     sbom_file_base = f"apache-airflow-sbom-{airflow_version}-python{python}-python-only"
 
     sbom_core_url = f"{base_url}/{sbom_file_base}.json"
diff --git a/dev/breeze/src/airflow_breeze/commands/sbom_commands_config.py b/dev/breeze/src/airflow_breeze/commands/sbom_commands_config.py
index 96cc5cad8852b..a68e8a6c9ac90 100644
--- a/dev/breeze/src/airflow_breeze/commands/sbom_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/sbom_commands_config.py
@@ -28,10 +28,16 @@
 
 SBOM_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
     "breeze sbom update-sbom-information": [
+        {
+            "name": "Update SBOM destination flags",
+            "options": [
+                "--airflow-root-path",
+                "--airflow-site-archive-path",
+            ],
+        },
         {
             "name": "Update SBOM information flags",
             "options": [
-                "--airflow-site-directory",
                 "--airflow-version",
                 "--python",
                 "--include-provider-dependencies",
@@ -40,6 +46,7 @@
                 "--all-combinations",
                 "--package-filter",
                 "--force",
+                "--github-token",
             ],
         },
         {
diff --git a/dev/breeze/src/airflow_breeze/utils/cdxgen.py b/dev/breeze/src/airflow_breeze/utils/cdxgen.py
index f8822250dc244..d3b09b459d643 100644
--- a/dev/breeze/src/airflow_breeze/utils/cdxgen.py
+++ b/dev/breeze/src/airflow_breeze/utils/cdxgen.py
@@ -137,7 +137,7 @@ def get_all_airflow_versions_image_name(python_version: str) -> str:
 
 
 def list_providers_from_providers_requirements(
-    airflow_site_archive_directory: Path,
+    airflow_site_archive_path: Path,
 ) -> Generator[tuple[str, str, str, Path], None, None]:
     for node_name in os.listdir(PROVIDER_REQUIREMENTS_DIR_PATH):
         if not node_name.startswith("provider"):
@@ -146,7 +146,7 @@ def list_providers_from_providers_requirements(
         provider_id, provider_version = node_name.rsplit("-", 1)
 
         provider_documentation_directory = (
-            airflow_site_archive_directory
+            airflow_site_archive_path
             / f"apache-airflow-providers-{provider_id.replace('provider-', '').replace('.', '-')}"
         )
         provider_version_documentation_directory = provider_documentation_directory / provider_version
@@ -325,10 +325,10 @@ def build_all_airflow_versions_base_image(
 @dataclass
 class SbomApplicationJob:
     python_version: str | None
-    target_path: Path
+    target_paths: list[Path]
 
     @abstractmethod
-    def produce(self, output: Output | None, port: int) -> tuple[int, str]:
+    def produce(self, output: Output | None, port: int, github_token: str | None) -> tuple[int, str]:
         raise NotImplementedError
 
     @abstractmethod
@@ -368,7 +368,7 @@ def get_files_directory(self, root_path: Path):
             source_dir = source_dir / f"python{self.python_version}"
         return source_dir
 
-    def download_dependency_files(self, output: Output | None) -> bool:
+    def download_dependency_files(self, output: Output | None, github_token: str | None) -> bool:
         source_dir = self.get_files_directory(self.application_root_path)
         source_dir.mkdir(parents=True, exist_ok=True)
         lock_file_relative_path = "airflow/www/yarn.lock"
@@ -384,6 +384,7 @@ def download_dependency_files(self, output: Output | None) -> bool:
                 python_version=self.python_version,
                 include_provider_dependencies=self.include_provider_dependencies,
                 output_file=source_dir / "requirements.txt",
+                github_token=github_token,
             ):
                 get_console(output=output).print(
                     f"[warning]Failed to download constraints file for "
@@ -395,7 +396,7 @@ def download_dependency_files(self, output: Output | None) -> bool:
             (source_dir / "requirements.txt").unlink(missing_ok=True)
         return True
 
-    def produce(self, output: Output | None, port: int) -> tuple[int, str]:
+    def produce(self, output: Output | None, port: int, github_token: str | None) -> tuple[int, str]:
         import requests
 
         get_console(output=output).print(
@@ -403,7 +404,7 @@ def produce(self, output: Output | None, port: int) -> tuple[int, str]:
             f"include_provider_dependencies={self.include_provider_dependencies}, "
             f"python={self.include_python}, npm={self.include_npm}"
         )
-        if not self.download_dependency_files(output):
+        if not self.download_dependency_files(output, github_token=github_token):
             return 0, f"SBOM Generate {self.airflow_version}:{self.python_version}"
 
         get_console(output=output).print(
@@ -437,7 +438,8 @@ def produce(self, output: Output | None, port: int) -> tuple[int, str]:
                     response.status_code,
                     f"SBOM Generate {self.airflow_version}:python{self.python_version}",
                 )
-            self.target_path.write_bytes(response.content)
+            for target_path in self.target_paths:
+                target_path.write_bytes(response.content)
             suffix = ""
             if self.python_version:
                 suffix += f":python{self.python_version}"
@@ -462,7 +464,7 @@ class SbomProviderJob(SbomApplicationJob):
     def get_job_name(self) -> str:
         return f"{self.provider_id}:{self.provider_version}:python{self.python_version}"
 
-    def produce(self, output: Output | None, port: int) -> tuple[int, str]:
+    def produce(self, output: Output | None, port: int, github_token: str | None) -> tuple[int, str]:
         import requests
 
         get_console(output=output).print(
@@ -491,7 +493,8 @@ def produce(self, output: Output | None, port: int) -> tuple[int, str]:
                     response.status_code,
                     f"SBOM Generate {self.provider_id}:{self.provider_version}:{self.python_version}",
                 )
-            self.target_path.write_bytes(response.content)
+            for target_path in self.target_paths:
+                target_path.write_bytes(response.content)
             get_console(output=output).print(
                 f"[success]Generated SBOM for {self.provider_id}:{self.provider_version}:"
                 f"{self.python_version}"
@@ -501,12 +504,16 @@ def produce(self, output: Output | None, port: int) -> tuple[int, str]:
 
 
 def produce_sbom_for_application_via_cdxgen_server(
-    job: SbomApplicationJob, output: Output | None, port_map: dict[str, int] | None = None
+    job: SbomApplicationJob,
+    output: Output | None,
+    github_token: str | None,
+    port_map: dict[str, int] | None = None,
 ) -> tuple[int, str]:
     """
     Produces SBOM for application using cdxgen server.
     :param job: Job to run
     :param output: Output to use
+    :param github_token: GitHub token to use for downloading files`
     :param port_map map of process name to port - making sure that one process talks to one server
          in case parallel processing is used
     :return: tuple with exit code and output
@@ -517,7 +524,7 @@ def produce_sbom_for_application_via_cdxgen_server(
     else:
         port = port_map[multiprocessing.current_process().name]
         get_console(output=output).print(f"[info]Using port {port}")
-    return job.produce(output, port)
+    return job.produce(output, port, github_token)
 
 
 def convert_licenses(licenses: list[dict[str, Any]]) -> str:
diff --git a/dev/breeze/src/airflow_breeze/utils/github.py b/dev/breeze/src/airflow_breeze/utils/github.py
index d1a9c2621045e..2f1f960c4cdbd 100644
--- a/dev/breeze/src/airflow_breeze/utils/github.py
+++ b/dev/breeze/src/airflow_breeze/utils/github.py
@@ -176,10 +176,10 @@ def get_active_airflow_versions(confirm: bool = True) -> tuple[list[str], dict[s
             get_console().print("[error]Error fetching tag date for Airflow {version}")
             sys.exit(1)
         airflow_release_dates[version] = date
-    get_console().print("[info]All Airflow 2 versions")
-    for version in airflow_versions:
-        get_console().print(f"  {version}: [info]{airflow_release_dates[version]}[/]")
+    get_console().print("[info]All Airflow 2/3 versions")
     if confirm:
+        for version in airflow_versions:
+            get_console().print(f"  {version}: [info]{airflow_release_dates[version]}[/]")
         answer = user_confirm(
             "Should we continue with those versions?", quit_allowed=False, default_answer=Answer.YES
         )

From 12cd06d41366fe40ebd8712945d5201c5b0f19b2 Mon Sep 17 00:00:00 2001
From: "jj.lee" <63435794+jx2lee@users.noreply.github.com>
Date: Tue, 1 Jul 2025 07:44:33 +0900
Subject: [PATCH 353/381] airflowctl: transition of bulk operations to return
 BulkResponse (#52458)

* bulkactionresponse to bulkresponse

* modified pool cmd
---
 airflow-ctl/src/airflowctl/api/operations.py  |  9 ++++---
 .../airflowctl/ctl/commands/pool_command.py   | 12 +++++-----
 .../tests/airflow_ctl/api/test_operations.py  | 24 +++++++++----------
 .../ctl/commands/test_pool_command.py         |  6 ++++-
 4 files changed, 27 insertions(+), 24 deletions(-)

diff --git a/airflow-ctl/src/airflowctl/api/operations.py b/airflow-ctl/src/airflowctl/api/operations.py
index 7350b1aa2d657..0161f566ff790 100644
--- a/airflow-ctl/src/airflowctl/api/operations.py
+++ b/airflow-ctl/src/airflowctl/api/operations.py
@@ -33,7 +33,6 @@
     BackfillCollectionResponse,
     BackfillPostBody,
     BackfillResponse,
-    BulkActionResponse,
     BulkBodyConnectionBody,
     BulkBodyPoolBody,
     BulkBodyVariableBody,
@@ -382,11 +381,11 @@ def create(
         except ServerResponseError as e:
             raise e
 
-    def bulk(self, connections: BulkBodyConnectionBody) -> BulkActionResponse | ServerResponseError:
+    def bulk(self, connections: BulkBodyConnectionBody) -> BulkResponse | ServerResponseError:
         """CRUD multiple connections."""
         try:
             self.response = self.client.patch("connections", json=connections.model_dump())
-            return BulkActionResponse.model_validate_json(self.response.content)
+            return BulkResponse.model_validate_json(self.response.content)
         except ServerResponseError as e:
             raise e
 
@@ -609,11 +608,11 @@ def create(self, pool: PoolBody) -> PoolResponse | ServerResponseError:
         except ServerResponseError as e:
             raise e
 
-    def bulk(self, pools: BulkBodyPoolBody) -> BulkActionResponse | ServerResponseError:
+    def bulk(self, pools: BulkBodyPoolBody) -> BulkResponse | ServerResponseError:
         """CRUD multiple pools."""
         try:
             self.response = self.client.patch("pools", json=pools.model_dump())
-            return BulkActionResponse.model_validate_json(self.response.content)
+            return BulkResponse.model_validate_json(self.response.content)
         except ServerResponseError as e:
             raise e
 
diff --git a/airflow-ctl/src/airflowctl/ctl/commands/pool_command.py b/airflow-ctl/src/airflowctl/ctl/commands/pool_command.py
index 4cdf889bf0aae..bc0009e339147 100644
--- a/airflow-ctl/src/airflowctl/ctl/commands/pool_command.py
+++ b/airflow-ctl/src/airflowctl/ctl/commands/pool_command.py
@@ -34,20 +34,20 @@
 
 
 @provide_api_client(kind=ClientKind.CLI)
-def import_(args, api_client: Client = NEW_API_CLIENT):
+def import_(args, api_client: Client = NEW_API_CLIENT) -> None:
     """Import pools from file."""
     filepath = Path(args.file)
     if not filepath.exists():
         raise SystemExit(f"Missing pools file {args.file}")
 
-    success, failed = _import_helper(api_client, filepath)
-    if failed:
-        raise SystemExit(f"Failed to update pool(s): {', '.join(failed)}")
+    success, errors = _import_helper(api_client, filepath)
+    if errors:
+        raise SystemExit(f"Failed to update pool(s): {errors}")
     rich.print(success)
 
 
 @provide_api_client(kind=ClientKind.CLI)
-def export(args, api_client: Client = NEW_API_CLIENT):
+def export(args, api_client: Client = NEW_API_CLIENT) -> None:
     """
     Export all pools.
 
@@ -119,4 +119,4 @@ def _import_helper(api_client: Client, filepath: Path):
     )
     result = api_client.pools.bulk(pools=bulk_body)
     # Return the successful and failed entities directly from the response
-    return result.success, result.errors
+    return result.create.success, result.create.errors
diff --git a/airflow-ctl/tests/airflow_ctl/api/test_operations.py b/airflow-ctl/tests/airflow_ctl/api/test_operations.py
index 9d4588bdde0bf..1a894990183a0 100644
--- a/airflow-ctl/tests/airflow_ctl/api/test_operations.py
+++ b/airflow-ctl/tests/airflow_ctl/api/test_operations.py
@@ -487,9 +487,10 @@ class TestConnectionsOperations:
         ]
     )
 
-    connection_bulk_action_response = BulkActionResponse(
-        success=[connection_id],
-        errors=[],
+    connection_bulk_response = BulkResponse(
+        create=BulkActionResponse(success=[connection_id], errors=[]),
+        update=None,
+        delete=None,
     )
 
     def test_get(self):
@@ -522,13 +523,11 @@ def handle_request(request: httpx.Request) -> httpx.Response:
     def test_bulk(self):
         def handle_request(request: httpx.Request) -> httpx.Response:
             assert request.url.path == "/api/v2/connections"
-            return httpx.Response(
-                200, json=json.loads(self.connection_bulk_action_response.model_dump_json())
-            )
+            return httpx.Response(200, json=json.loads(self.connection_bulk_response.model_dump_json()))
 
         client = make_api_client(transport=httpx.MockTransport(handle_request))
         response = client.connections.bulk(connections=self.connection_bulk_body)
-        assert response == self.connection_bulk_action_response
+        assert response == self.connection_bulk_response
 
     def test_delete(self):
         def handle_request(request: httpx.Request) -> httpx.Response:
@@ -954,9 +953,10 @@ class TestPoolsOperations:
         pools=[pool_response],
         total_entries=1,
     )
-    pool_bulk_action_response = BulkActionResponse(
-        success=[pool_name],
-        errors=[],
+    pool_bulk_aresponse = BulkResponse(
+        create=BulkActionResponse(success=[pool_name], errors=[]),
+        update=None,
+        delete=None,
     )
 
     def test_get(self):
@@ -989,11 +989,11 @@ def handle_request(request: httpx.Request) -> httpx.Response:
     def test_bulk(self):
         def handle_request(request: httpx.Request) -> httpx.Response:
             assert request.url.path == "/api/v2/pools"
-            return httpx.Response(200, json=json.loads(self.pool_bulk_action_response.model_dump_json()))
+            return httpx.Response(200, json=json.loads(self.pool_bulk_aresponse.model_dump_json()))
 
         client = make_api_client(transport=httpx.MockTransport(handle_request))
         response = client.pools.bulk(pools=self.pools_bulk_body)
-        assert response == self.pool_bulk_action_response
+        assert response == self.pool_bulk_aresponse
 
     def test_delete(self):
         def handle_request(request: httpx.Request) -> httpx.Response:
diff --git a/airflow-ctl/tests/airflow_ctl/ctl/commands/test_pool_command.py b/airflow-ctl/tests/airflow_ctl/ctl/commands/test_pool_command.py
index b5644d6627fb0..44cc341ee1c36 100644
--- a/airflow-ctl/tests/airflow_ctl/ctl/commands/test_pool_command.py
+++ b/airflow-ctl/tests/airflow_ctl/ctl/commands/test_pool_command.py
@@ -81,7 +81,11 @@ def test_import_success(self, mock_client, tmp_path, capsys):
         mock_response = mock.MagicMock()
         mock_response.success = ["test_pool"]
         mock_response.errors = []
-        mock_client.pools.bulk.return_value = mock_response
+
+        mock_bulk_builder = mock.MagicMock()
+        mock_bulk_builder.create = mock_response
+
+        mock_client.pools.bulk.return_value = mock_bulk_builder
 
         pool_command.import_(args=mock.MagicMock(file=pools_file))
 

From 61aa4d2f7918083cd795784e865f9c8ba51670c4 Mon Sep 17 00:00:00 2001
From: Kyungjun Lee <kyungjunlee.me@gmail.com>
Date: Tue, 1 Jul 2025 12:59:01 +0900
Subject: [PATCH 354/381] Provider Migration: Update presto for Airflow 3.0
 compatibility (#52608)

* ADD: add conditional import for BaseOperator

* CHG: change import path
---
 .../providers/presto/transfers/gcs_to_presto.py        |  2 +-
 .../src/airflow/providers/presto/version_compat.py     | 10 ++++++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/providers/presto/src/airflow/providers/presto/transfers/gcs_to_presto.py b/providers/presto/src/airflow/providers/presto/transfers/gcs_to_presto.py
index d64ecbfbee170..ed53a3fc0811f 100644
--- a/providers/presto/src/airflow/providers/presto/transfers/gcs_to_presto.py
+++ b/providers/presto/src/airflow/providers/presto/transfers/gcs_to_presto.py
@@ -25,9 +25,9 @@
 from tempfile import NamedTemporaryFile
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.google.cloud.hooks.gcs import GCSHook
 from airflow.providers.presto.hooks.presto import PrestoHook
+from airflow.providers.presto.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/presto/src/airflow/providers/presto/version_compat.py b/providers/presto/src/airflow/providers/presto/version_compat.py
index 48d122b669696..e7a259afb357c 100644
--- a/providers/presto/src/airflow/providers/presto/version_compat.py
+++ b/providers/presto/src/airflow/providers/presto/version_compat.py
@@ -33,3 +33,13 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+]

From 240508ba8096a9db7ae1c7173b60d19cbcb48074 Mon Sep 17 00:00:00 2001
From: Kyungjun Lee <kyungjunlee.me@gmail.com>
Date: Tue, 1 Jul 2025 13:00:57 +0900
Subject: [PATCH 355/381] Provider Migration: Update opensearch for Airflow 3.0
 compatibility (#52609)

* ADD: add conditional import for BaseOperator

* CHG: change import path
---
 .../providers/opensearch/operators/opensearch.py       |  2 +-
 .../src/airflow/providers/opensearch/version_compat.py | 10 ++++++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/providers/opensearch/src/airflow/providers/opensearch/operators/opensearch.py b/providers/opensearch/src/airflow/providers/opensearch/operators/opensearch.py
index 9174e03b36936..3391df3f59dd3 100644
--- a/providers/opensearch/src/airflow/providers/opensearch/operators/opensearch.py
+++ b/providers/opensearch/src/airflow/providers/opensearch/operators/opensearch.py
@@ -25,8 +25,8 @@
 from opensearchpy.exceptions import OpenSearchException
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.opensearch.hooks.opensearch import OpenSearchHook
+from airflow.providers.opensearch.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from opensearchpy import Connection as OpenSearchConnectionClass
diff --git a/providers/opensearch/src/airflow/providers/opensearch/version_compat.py b/providers/opensearch/src/airflow/providers/opensearch/version_compat.py
index 48d122b669696..e7a259afb357c 100644
--- a/providers/opensearch/src/airflow/providers/opensearch/version_compat.py
+++ b/providers/opensearch/src/airflow/providers/opensearch/version_compat.py
@@ -33,3 +33,13 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+]

From c7ce990f0f8ebd2fd7e7c796d2d8a3b07200930f Mon Sep 17 00:00:00 2001
From: Kyungjun Lee <kyungjunlee.me@gmail.com>
Date: Tue, 1 Jul 2025 13:02:49 +0900
Subject: [PATCH 356/381] Provider Migration: Update neo4j for Airflow 3.0
 compatibility (#52610)

* NEW: add conditional import for BaseOperator

* CHG: change import path
---
 .../providers/neo4j/operators/neo4j.py        |  2 +-
 .../airflow/providers/neo4j/version_compat.py | 45 +++++++++++++++++++
 2 files changed, 46 insertions(+), 1 deletion(-)
 create mode 100644 providers/neo4j/src/airflow/providers/neo4j/version_compat.py

diff --git a/providers/neo4j/src/airflow/providers/neo4j/operators/neo4j.py b/providers/neo4j/src/airflow/providers/neo4j/operators/neo4j.py
index 7211b8bab5936..819991a1bb8fe 100644
--- a/providers/neo4j/src/airflow/providers/neo4j/operators/neo4j.py
+++ b/providers/neo4j/src/airflow/providers/neo4j/operators/neo4j.py
@@ -20,8 +20,8 @@
 from collections.abc import Iterable, Mapping, Sequence
 from typing import TYPE_CHECKING, Any
 
-from airflow.models import BaseOperator
 from airflow.providers.neo4j.hooks.neo4j import Neo4jHook
+from airflow.providers.neo4j.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/neo4j/src/airflow/providers/neo4j/version_compat.py b/providers/neo4j/src/airflow/providers/neo4j/version_compat.py
new file mode 100644
index 0000000000000..e7a259afb357c
--- /dev/null
+++ b/providers/neo4j/src/airflow/providers/neo4j/version_compat.py
@@ -0,0 +1,45 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+]

From 7bafaa4afaaa2ac742d5a5288855bcb3250a65a8 Mon Sep 17 00:00:00 2001
From: "Zhen-Lun (Kevin) Hong" <zhenlun.hong01@gmail.com>
Date: Tue, 1 Jul 2025 12:03:51 +0800
Subject: [PATCH 357/381] Provider Migration: Replace `BaseSensorOperator` to
 Task SDK for `datadog` (#52583)

* Provider Migration: Replace BaseSensorOperator to Task SDK for datadog

* Apply suggestion from @kaxil

---------

Co-authored-by: Kaxil Naik <kaxilnaik@gmail.com>
---
 .../airflow/providers/datadog/sensors/datadog.py    | 13 ++-----------
 .../src/airflow/providers/datadog/version_compat.py | 13 +++++++++++++
 2 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/providers/datadog/src/airflow/providers/datadog/sensors/datadog.py b/providers/datadog/src/airflow/providers/datadog/sensors/datadog.py
index 251020febb871..d39f20352e665 100644
--- a/providers/datadog/src/airflow/providers/datadog/sensors/datadog.py
+++ b/providers/datadog/src/airflow/providers/datadog/sensors/datadog.py
@@ -24,19 +24,10 @@
 
 from airflow.exceptions import AirflowException
 from airflow.providers.datadog.hooks.datadog import DatadogHook
-from airflow.providers.datadog.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+from airflow.providers.datadog.version_compat import BaseSensorOperator
 
 if TYPE_CHECKING:
-    try:
-        from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+    from airflow.providers.datadog.version_compat import Context
 
 
 class DatadogSensor(BaseSensorOperator):
diff --git a/providers/datadog/src/airflow/providers/datadog/version_compat.py b/providers/datadog/src/airflow/providers/datadog/version_compat.py
index 48d122b669696..52dee9e5be6f4 100644
--- a/providers/datadog/src/airflow/providers/datadog/version_compat.py
+++ b/providers/datadog/src/airflow/providers/datadog/version_compat.py
@@ -33,3 +33,16 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+    from airflow.sdk.definitions.context import Context
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+    from airflow.utils.context import Context  # type: ignore[no-redef]
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseSensorOperator",
+    "Context",
+]

From 9138fc19f4c050eb2f9267f0ef09e8638b68e475 Mon Sep 17 00:00:00 2001
From: "Zhen-Lun (Kevin) Hong" <zhenlun.hong01@gmail.com>
Date: Tue, 1 Jul 2025 12:04:46 +0800
Subject: [PATCH 358/381] Provider Migration: Replace `BaseOperator` to Task
 SDK for `dingding` (#52577)

* Provider Migration: Replace BaseOperator to Task SDK for dingding

* Apply suggestion from @kaxil

---------

Co-authored-by: Kaxil Naik <kaxilnaik@gmail.com>
---
 .../providers/dingding/operators/dingding.py  |  8 +---
 .../providers/dingding/version_compat.py      | 43 +++++++++++++++++++
 2 files changed, 45 insertions(+), 6 deletions(-)
 create mode 100644 providers/dingding/src/airflow/providers/dingding/version_compat.py

diff --git a/providers/dingding/src/airflow/providers/dingding/operators/dingding.py b/providers/dingding/src/airflow/providers/dingding/operators/dingding.py
index 3f092c83a119f..642b21093a514 100644
--- a/providers/dingding/src/airflow/providers/dingding/operators/dingding.py
+++ b/providers/dingding/src/airflow/providers/dingding/operators/dingding.py
@@ -20,15 +20,11 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.dingding.hooks.dingding import DingdingHook
+from airflow.providers.dingding.version_compat import BaseOperator
 
 if TYPE_CHECKING:
-    try:
-        from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+    from airflow.providers.dingding.version_compat import Context
 
 
 class DingdingOperator(BaseOperator):
diff --git a/providers/dingding/src/airflow/providers/dingding/version_compat.py b/providers/dingding/src/airflow/providers/dingding/version_compat.py
new file mode 100644
index 0000000000000..44798d7a8acef
--- /dev/null
+++ b/providers/dingding/src/airflow/providers/dingding/version_compat.py
@@ -0,0 +1,43 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+    from airflow.sdk.definitions.context import Context
+else:
+    from airflow.models import BaseOperator  # type: ignore[no-redef]
+    from airflow.utils.context import Context  # type: ignore[no-redef]
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+    "Context",
+]

From d1f44205c6201a62a73b9a44c1668dbbae99b928 Mon Sep 17 00:00:00 2001
From: magic_frog <Chenyzsjtu@gmail.com>
Date: Tue, 1 Jul 2025 12:21:40 +0800
Subject: [PATCH 359/381] Fix symlink handling for static assets when installed
 in editable mode with uv (#52612)

* Update app.py

Add follow_symlink for StaticFiels

* Update simple_auth_manager.py

add follow_symlink for StaticFiles
---
 .../api_fastapi/auth/managers/simple/simple_auth_manager.py      | 1 +
 airflow-core/src/airflow/api_fastapi/core_api/app.py             | 1 +
 2 files changed, 2 insertions(+)

diff --git a/airflow-core/src/airflow/api_fastapi/auth/managers/simple/simple_auth_manager.py b/airflow-core/src/airflow/api_fastapi/auth/managers/simple/simple_auth_manager.py
index b3ce04a94b8ea..c1b9048a107be 100644
--- a/airflow-core/src/airflow/api_fastapi/auth/managers/simple/simple_auth_manager.py
+++ b/airflow-core/src/airflow/api_fastapi/auth/managers/simple/simple_auth_manager.py
@@ -300,6 +300,7 @@ def get_fastapi_app(self) -> FastAPI | None:
             StaticFiles(
                 directory=directory,
                 html=True,
+                follow_symlink=True,
             ),
             name="simple_auth_manager_ui_folder",
         )
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/app.py b/airflow-core/src/airflow/api_fastapi/core_api/app.py
index ad8938de994b6..89b0fca50620e 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/app.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/app.py
@@ -59,6 +59,7 @@ def init_views(app: FastAPI) -> None:
             "/static/i18n/locales",
             StaticFiles(directory=Path(AIRFLOW_PATH) / "airflow/ui/public/i18n/locales"),
             name="dev_i18n_static",
+            follow_symlink=True,
         )
 
     app.mount(

From b290af4cf6467b095b3bdcd7397891fa00303182 Mon Sep 17 00:00:00 2001
From: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
Date: Tue, 1 Jul 2025 09:52:32 +0530
Subject: [PATCH 360/381] Replace models.BaseOperator to Task SDK one for Slack
 Provider (#52347)

* replace baseOperator to Task SDK

* fix version compat

* update imports
---
 .../providers/slack/operators/slack.py        |  2 +-
 .../slack/operators/slack_webhook.py          |  2 +-
 .../slack/transfers/base_sql_to_slack.py      |  2 +-
 .../airflow/providers/slack/version_compat.py | 45 +++++++++++
 .../transfers/test_sql_to_slack_webhook.py    | 81 ++++++++++---------
 5 files changed, 91 insertions(+), 41 deletions(-)
 create mode 100644 providers/slack/src/airflow/providers/slack/version_compat.py

diff --git a/providers/slack/src/airflow/providers/slack/operators/slack.py b/providers/slack/src/airflow/providers/slack/operators/slack.py
index aed353ea5a021..07c9289f14cbb 100644
--- a/providers/slack/src/airflow/providers/slack/operators/slack.py
+++ b/providers/slack/src/airflow/providers/slack/operators/slack.py
@@ -22,8 +22,8 @@
 from functools import cached_property
 from typing import TYPE_CHECKING, Any, Literal
 
-from airflow.models import BaseOperator
 from airflow.providers.slack.hooks.slack import SlackHook
+from airflow.providers.slack.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from slack_sdk.http_retry import RetryHandler
diff --git a/providers/slack/src/airflow/providers/slack/operators/slack_webhook.py b/providers/slack/src/airflow/providers/slack/operators/slack_webhook.py
index 58c6906c5ea02..3bdb7a55e9d12 100644
--- a/providers/slack/src/airflow/providers/slack/operators/slack_webhook.py
+++ b/providers/slack/src/airflow/providers/slack/operators/slack_webhook.py
@@ -21,8 +21,8 @@
 from functools import cached_property
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.slack.hooks.slack_webhook import SlackWebhookHook
+from airflow.providers.slack.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from slack_sdk.http_retry import RetryHandler
diff --git a/providers/slack/src/airflow/providers/slack/transfers/base_sql_to_slack.py b/providers/slack/src/airflow/providers/slack/transfers/base_sql_to_slack.py
index 43221e601935a..ba544965ea255 100644
--- a/providers/slack/src/airflow/providers/slack/transfers/base_sql_to_slack.py
+++ b/providers/slack/src/airflow/providers/slack/transfers/base_sql_to_slack.py
@@ -21,7 +21,7 @@
 
 from airflow.exceptions import AirflowException
 from airflow.hooks.base import BaseHook
-from airflow.models import BaseOperator
+from airflow.providers.slack.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     import pandas as pd
diff --git a/providers/slack/src/airflow/providers/slack/version_compat.py b/providers/slack/src/airflow/providers/slack/version_compat.py
new file mode 100644
index 0000000000000..e7a259afb357c
--- /dev/null
+++ b/providers/slack/src/airflow/providers/slack/version_compat.py
@@ -0,0 +1,45 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+]
diff --git a/providers/slack/tests/unit/slack/transfers/test_sql_to_slack_webhook.py b/providers/slack/tests/unit/slack/transfers/test_sql_to_slack_webhook.py
index c3d8481f4847a..a8f846b8c7f9c 100644
--- a/providers/slack/tests/unit/slack/transfers/test_sql_to_slack_webhook.py
+++ b/providers/slack/tests/unit/slack/transfers/test_sql_to_slack_webhook.py
@@ -21,7 +21,6 @@
 import pandas as pd
 import pytest
 
-from airflow import DAG
 from airflow.models import Connection
 from airflow.providers.slack.transfers.sql_to_slack_webhook import SqlToSlackWebhookOperator
 from airflow.utils import timezone
@@ -40,7 +39,6 @@ def mocked_hook():
 @pytest.mark.db_test
 class TestSqlToSlackWebhookOperator:
     def setup_method(self):
-        self.example_dag = DAG(TEST_DAG_ID, schedule=None, start_date=DEFAULT_DATE)
         self.default_hook_parameters = {"timeout": None, "proxy": None, "retry_handlers": None}
 
     @staticmethod
@@ -61,27 +59,31 @@ def _construct_operator(**kwargs):
             ),
         ],
     )
-    def test_rendering_and_message_execution(self, slack_op_kwargs, hook_extra_kwargs, mocked_hook):
+    def test_rendering_and_message_execution(
+        self, slack_op_kwargs, hook_extra_kwargs, mocked_hook, dag_maker
+    ):
         mock_dbapi_hook = mock.Mock()
 
         test_df = pd.DataFrame({"a": "1", "b": "2"}, index=[0, 1])
         get_df_mock = mock_dbapi_hook.return_value.get_df
         get_df_mock.return_value = test_df
 
-        operator_args = {
-            "sql_conn_id": "snowflake_connection",
-            "slack_webhook_conn_id": "slack_connection",
-            "slack_message": "message: {{ ds }}, {{ results_df }}",
-            "slack_channel": "#test",
-            "sql": "sql {{ ds }}",
-            "dag": self.example_dag,
-            **slack_op_kwargs,
-        }
-        sql_to_slack_operator = self._construct_operator(**operator_args)
+        with dag_maker(dag_id=TEST_DAG_ID, start_date=DEFAULT_DATE):
+            operator_args = {
+                "sql_conn_id": "snowflake_connection",
+                "slack_webhook_conn_id": "slack_connection",
+                "slack_message": "message: {{ ds }}, {{ results_df }}",
+                "slack_channel": "#test",
+                "sql": "sql {{ ds }}",
+                **slack_op_kwargs,
+            }
+            sql_to_slack_operator = self._construct_operator(**operator_args)
 
         slack_webhook_hook = mocked_hook.return_value
         sql_to_slack_operator._get_hook = mock_dbapi_hook
-        sql_to_slack_operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
+
+        ti = dag_maker.create_dagrun().task_instances[0]
+        ti.run()
 
         # Test that the Slack hook is instantiated with the right parameters
         mocked_hook.assert_called_once_with(slack_webhook_conn_id="slack_connection", **hook_extra_kwargs)
@@ -92,26 +94,28 @@ def test_rendering_and_message_execution(self, slack_op_kwargs, hook_extra_kwarg
             channel="#test",
         )
 
-    def test_rendering_and_message_execution_with_slack_hook(self, mocked_hook):
+    def test_rendering_and_message_execution_with_slack_hook(self, mocked_hook, dag_maker):
         mock_dbapi_hook = mock.Mock()
 
         test_df = pd.DataFrame({"a": "1", "b": "2"}, index=[0, 1])
         get_df_mock = mock_dbapi_hook.return_value.get_df
         get_df_mock.return_value = test_df
 
-        operator_args = {
-            "sql_conn_id": "snowflake_connection",
-            "slack_webhook_conn_id": "slack_connection",
-            "slack_message": "message: {{ ds }}, {{ results_df }}",
-            "slack_channel": "#test",
-            "sql": "sql {{ ds }}",
-            "dag": self.example_dag,
-        }
-        sql_to_slack_operator = self._construct_operator(**operator_args)
+        with dag_maker(dag_id=TEST_DAG_ID, start_date=DEFAULT_DATE):
+            operator_args = {
+                "sql_conn_id": "snowflake_connection",
+                "slack_webhook_conn_id": "slack_connection",
+                "slack_message": "message: {{ ds }}, {{ results_df }}",
+                "slack_channel": "#test",
+                "sql": "sql {{ ds }}",
+            }
+            sql_to_slack_operator = self._construct_operator(**operator_args)
 
         slack_webhook_hook = mocked_hook.return_value
         sql_to_slack_operator._get_hook = mock_dbapi_hook
-        sql_to_slack_operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
+
+        ti = dag_maker.create_dagrun().task_instances[0]
+        ti.run()
 
         # Test that the Slack hook is instantiated with the right parameters
         mocked_hook.assert_called_once_with(
@@ -153,27 +157,29 @@ def test_non_existing_slack_webhook_conn_id(self):
         with pytest.raises(ValueError, match="Got an empty `slack_webhook_conn_id` value"):
             self._construct_operator(**operator_args)
 
-    def test_rendering_custom_df_name_message_execution(self, mocked_hook):
+    def test_rendering_custom_df_name_message_execution(self, mocked_hook, dag_maker):
         mock_dbapi_hook = mock.Mock()
 
         test_df = pd.DataFrame({"a": "1", "b": "2"}, index=[0, 1])
         get_df_mock = mock_dbapi_hook.return_value.get_df
         get_df_mock.return_value = test_df
 
-        operator_args = {
-            "sql_conn_id": "snowflake_connection",
-            "slack_webhook_conn_id": "slack_connection",
-            "slack_message": "message: {{ ds }}, {{ testing }}",
-            "slack_channel": "#test",
-            "sql": "sql {{ ds }}",
-            "results_df_name": "testing",
-            "dag": self.example_dag,
-        }
-        sql_to_slack_operator = self._construct_operator(**operator_args)
+        with dag_maker(dag_id=TEST_DAG_ID, start_date=DEFAULT_DATE):
+            operator_args = {
+                "sql_conn_id": "snowflake_connection",
+                "slack_webhook_conn_id": "slack_connection",
+                "slack_message": "message: {{ ds }}, {{ testing }}",
+                "slack_channel": "#test",
+                "sql": "sql {{ ds }}",
+                "results_df_name": "testing",
+            }
+            sql_to_slack_operator = self._construct_operator(**operator_args)
 
         slack_webhook_hook = mocked_hook.return_value
         sql_to_slack_operator._get_hook = mock_dbapi_hook
-        sql_to_slack_operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE, ignore_ti_state=True)
+
+        ti = dag_maker.create_dagrun().task_instances[0]
+        ti.run()
 
         # Test that the Slack hook is instantiated with the right parameters
         mocked_hook.assert_called_once_with(
@@ -202,7 +208,6 @@ def test_hook_params_building(self, mocked_get_connection):
             "slack_webhook_conn_id": "slack_connection",
             "parameters": ["1", "2", "3"],
             "slack_message": "message: {{ ds }}, {{ xxxx }}",
-            "dag": self.example_dag,
         }
         sql_to_slack_operator = SqlToSlackWebhookOperator(task_id=TEST_TASK_ID, **operator_args)
 

From 3391ba2d41ffd6da79400f0ad0a9f5c9e19cda67 Mon Sep 17 00:00:00 2001
From: Geonwoo Kim <78521993+kgw7401@users.noreply.github.com>
Date: Tue, 1 Jul 2025 13:25:41 +0900
Subject: [PATCH 361/381] fix (#52607)

---
 .../providers/apache/beam/operators/beam.py   |  5 ++-
 .../providers/apache/beam/version_compat.py   | 42 +++++++++++++++++++
 .../unit/apache/beam/operators/test_beam.py   | 37 ++++++++--------
 3 files changed, 63 insertions(+), 21 deletions(-)
 create mode 100644 providers/apache/beam/src/airflow/providers/apache/beam/version_compat.py

diff --git a/providers/apache/beam/src/airflow/providers/apache/beam/operators/beam.py b/providers/apache/beam/src/airflow/providers/apache/beam/operators/beam.py
index d1e3bcd411064..85d858ff45cdf 100644
--- a/providers/apache/beam/src/airflow/providers/apache/beam/operators/beam.py
+++ b/providers/apache/beam/src/airflow/providers/apache/beam/operators/beam.py
@@ -34,9 +34,9 @@
 
 from airflow.configuration import conf
 from airflow.exceptions import AirflowException, AirflowOptionalProviderFeatureException
-from airflow.models import BaseOperator
 from airflow.providers.apache.beam.hooks.beam import BeamHook, BeamRunnerType
 from airflow.providers.apache.beam.triggers.beam import BeamJavaPipelineTrigger, BeamPythonPipelineTrigger
+from airflow.providers.apache.beam.version_compat import BaseOperator
 from airflow.providers_manager import ProvidersManager
 from airflow.utils.helpers import convert_camel_to_snake, exactly_one
 from airflow.version import version
@@ -214,7 +214,8 @@ def dataflow_job_id(self, new_value):
         if all([new_value, not self._dataflow_job_id, self._execute_context]):
             # push job_id as soon as it's ready, to let Sensors work before the job finished
             # and job_id pushed as returned value item.
-            self.xcom_push(context=self._execute_context, key="dataflow_job_id", value=new_value)
+            # Use task instance to push XCom (works for both Airflow 2.x and 3.x)
+            self._execute_context["ti"].xcom_push(key="dataflow_job_id", value=new_value)
         self._dataflow_job_id = new_value
 
     def _cast_dataflow_config(self):
diff --git a/providers/apache/beam/src/airflow/providers/apache/beam/version_compat.py b/providers/apache/beam/src/airflow/providers/apache/beam/version_compat.py
new file mode 100644
index 0000000000000..6756c5b297327
--- /dev/null
+++ b/providers/apache/beam/src/airflow/providers/apache/beam/version_compat.py
@@ -0,0 +1,42 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+"""Version compatibility for Apache Beam provider."""
+
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_1_PLUS = get_base_airflow_version_tuple() >= (3, 1, 0)
+
+if AIRFLOW_V_3_1_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator
+
+__all__ = [
+    "AIRFLOW_V_3_1_PLUS",
+    "BaseOperator",
+]
diff --git a/providers/apache/beam/tests/unit/apache/beam/operators/test_beam.py b/providers/apache/beam/tests/unit/apache/beam/operators/test_beam.py
index d03cde557767f..1616f11803202 100644
--- a/providers/apache/beam/tests/unit/apache/beam/operators/test_beam.py
+++ b/providers/apache/beam/tests/unit/apache/beam/operators/test_beam.py
@@ -116,25 +116,24 @@ def test_async_execute_logging_should_execute_successfully(self, caplog):
         assert f"{TASK_ID} completed with response Pipeline has finished SUCCESSFULLY" in caplog.text
 
     def test_early_dataflow_id_xcom_push(self, default_options, pipeline_options):
-        with mock.patch.object(BeamBasePipelineOperator, "xcom_push") as mock_xcom_push:
-            op = BeamBasePipelineOperator(
-                **self.default_op_kwargs,
-                default_pipeline_options=copy.deepcopy(default_options),
-                pipeline_options=copy.deepcopy(pipeline_options),
-                dataflow_config={},
-            )
-            sample_df_job_id = "sample_df_job_id_value"
-            op._execute_context = MagicMock()
-
-            assert op.dataflow_job_id is None
-
-            op.dataflow_job_id = sample_df_job_id
-            mock_xcom_push.assert_called_once_with(
-                context=op._execute_context, key="dataflow_job_id", value=sample_df_job_id
-            )
-            mock_xcom_push.reset_mock()
-            op.dataflow_job_id = "sample_df_job_same_value_id"
-            mock_xcom_push.assert_not_called()
+        op = BeamBasePipelineOperator(
+            **self.default_op_kwargs,
+            default_pipeline_options=copy.deepcopy(default_options),
+            pipeline_options=copy.deepcopy(pipeline_options),
+            dataflow_config={},
+        )
+        sample_df_job_id = "sample_df_job_id_value"
+        # Mock the task instance with xcom_push method
+        mock_ti = MagicMock()
+        op._execute_context = {"ti": mock_ti}
+
+        assert op.dataflow_job_id is None
+
+        op.dataflow_job_id = sample_df_job_id
+        mock_ti.xcom_push.assert_called_once_with(key="dataflow_job_id", value=sample_df_job_id)
+        mock_ti.xcom_push.reset_mock()
+        op.dataflow_job_id = "sample_df_job_same_value_id"
+        mock_ti.xcom_push.assert_not_called()
 
 
 class TestBeamRunPythonPipelineOperator:

From f9a12244d5eef0e5543c97e4913126829718dacf Mon Sep 17 00:00:00 2001
From: Harikrishna D <64940963+harikrishna12524@users.noreply.github.com>
Date: Tue, 1 Jul 2025 10:27:42 +0530
Subject: [PATCH 362/381] Add regional support for google secret manager hook
 (#52124)

* Add regional support for google secret manager hook

* Change property name from location_id to location

* Remove backward compatibility comment.

* Fix static check failing
---
 .../google/cloud/hooks/secret_manager.py      | 112 ++++++++++++++++--
 .../google/cloud/hooks/test_secret_manager.py |  71 +++++++++--
 2 files changed, 166 insertions(+), 17 deletions(-)

diff --git a/providers/google/src/airflow/providers/google/cloud/hooks/secret_manager.py b/providers/google/src/airflow/providers/google/cloud/hooks/secret_manager.py
index db144acf42da6..c68c01fe1c9be 100644
--- a/providers/google/src/airflow/providers/google/cloud/hooks/secret_manager.py
+++ b/providers/google/src/airflow/providers/google/cloud/hooks/secret_manager.py
@@ -47,6 +47,10 @@ class GoogleCloudSecretManagerHook(GoogleBaseHook):
     See https://cloud.google.com/secret-manager
     """
 
+    def __init__(self, location: str | None = None, **kwargs) -> None:
+        super().__init__(**kwargs)
+        self.location = location
+
     @cached_property
     def client(self):
         """
@@ -54,7 +58,16 @@ def client(self):
 
         :return: Secret Manager client.
         """
-        return SecretManagerServiceClient(credentials=self.get_credentials(), client_info=CLIENT_INFO)
+        if self.location is not None:
+            return SecretManagerServiceClient(
+                credentials=self.get_credentials(),
+                client_info=CLIENT_INFO,
+                client_options={"api_endpoint": f"secretmanager.{self.location}.rep.googleapis.com"},
+            )
+        return SecretManagerServiceClient(
+            credentials=self.get_credentials(),
+            client_info=CLIENT_INFO,
+        )
 
     def get_conn(self) -> SecretManagerServiceClient:
         """
@@ -64,6 +77,60 @@ def get_conn(self) -> SecretManagerServiceClient:
         """
         return self.client
 
+    def _get_parent(self, project_id: str, location: str | None = None) -> str:
+        """
+        Return parent path.
+
+        :param project_id: Required. ID of the GCP project that owns the job.
+        :param location: Optional. Target location.  If set to ``None`` or missing, the location provided for GoogleCloudSecretHook instantiation is used
+            For more details : https://cloud.google.com/secret-manager/docs/locations
+
+        :return: Parent path.
+        """
+        _location = location or self.location
+        if _location is not None:
+            return self.client.common_location_path(project_id, _location)
+        return self.client.common_project_path(project_id)
+
+    def _get_secret_path(self, project_id: str, secret_id: str, location: str | None = None) -> str:
+        """
+        Return secret path.
+
+        :param project_id: Required. ID of the GCP project that owns the job.
+        :param secret_id: Required. Secret ID for which path is required.
+        :param location: Optional. Target location.  If set to ``None`` or missing, the location provided for GoogleCloudSecretHook instantiation is used
+            For more details : https://cloud.google.com/secret-manager/docs/locations
+
+        :return: Parent path.
+        """
+        _location = location or self.location
+        if _location is not None:
+            # Google's client library does not provide a method to construct regional secret paths, so constructing manually.
+            return f"projects/{project_id}/locations/{_location}/secrets/{secret_id}"
+        return self.client.secret_path(project_id, secret_id)
+
+    def _get_secret_version_path(
+        self, project_id: str, secret_id: str, secret_version: str, location: str | None = None
+    ) -> str:
+        """
+        Return secret version path.
+
+        :param project_id: Required. ID of the GCP project that owns the job.
+        :param secret_id: Required. Secret ID for which path is required.
+        :param secret_version: Required. Secret version for which path is required.
+        :param location: Optional. Target location.  If set to ``None`` or missing, the location provided for GoogleCloudSecretHook instantiation is used
+            For more details : https://cloud.google.com/secret-manager/docs/locations
+
+        :return: Parent path.
+        """
+        _location = location or self.location
+        if _location is not None:
+            # Google's client library does not provide a method to construct regional secret version paths, so constructing manually.
+            return (
+                f"projects/{project_id}/locations/{_location}/secrets/{secret_id}/versions/{secret_version}"
+            )
+        return self.client.secret_version_path(project_id, secret_id, secret_version)
+
     @GoogleBaseHook.fallback_to_default_project_id
     def create_secret(
         self,
@@ -73,6 +140,7 @@ def create_secret(
         retry: Retry | _MethodDefault = DEFAULT,
         timeout: float | None = None,
         metadata: Sequence[tuple[str, str]] = (),
+        location: str | None = None,
     ) -> Secret:
         """
         Create a secret.
@@ -88,12 +156,20 @@ def create_secret(
         :param retry: Optional. Designation of what errors, if any, should be retried.
         :param timeout: Optional. The timeout for this request.
         :param metadata: Optional. Strings which should be sent along with the request as metadata.
+        :param location: Optional. Location where secret should be created. Used for creating regional secret.  If set to ``None`` or missing, the location provided for GoogleCloudSecretHook instantiation is used
+            For more details : https://cloud.google.com/secret-manager/docs/locations
         :return: Secret object.
         """
-        _secret = secret or {"replication": {"automatic": {}}}
+        if not secret:
+            _secret: dict | Secret = {}
+            if (location or self.location) is None:
+                _secret["replication"] = {"automatic": {}}
+        else:
+            _secret = secret
+
         response = self.client.create_secret(
             request={
-                "parent": f"projects/{project_id}",
+                "parent": self._get_parent(project_id, location),
                 "secret_id": secret_id,
                 "secret": _secret,
             },
@@ -113,6 +189,7 @@ def add_secret_version(
         retry: Retry | _MethodDefault = DEFAULT,
         timeout: float | None = None,
         metadata: Sequence[tuple[str, str]] = (),
+        location: str | None = None,
     ) -> SecretVersion:
         """
         Add a version to the secret.
@@ -128,11 +205,13 @@ def add_secret_version(
         :param retry: Optional. Designation of what errors, if any, should be retried.
         :param timeout: Optional. The timeout for this request.
         :param metadata: Optional. Strings which should be sent along with the request as metadata.
+        :param location: Optional. Location where secret is located. Used for adding version to regional secret.  If set to ``None`` or missing, the location provided for GoogleCloudSecretHook instantiation is used
+            For more details : https://cloud.google.com/secret-manager/docs/locations
         :return: Secret version object.
         """
         response = self.client.add_secret_version(
             request={
-                "parent": f"projects/{project_id}/secrets/{secret_id}",
+                "parent": self._get_secret_path(project_id, secret_id, location),
                 "payload": secret_payload,
             },
             retry=retry,
@@ -152,6 +231,7 @@ def list_secrets(
         retry: Retry | _MethodDefault = DEFAULT,
         timeout: float | None = None,
         metadata: Sequence[tuple[str, str]] = (),
+        location: str | None = None,
     ) -> ListSecretsPager:
         """
         List secrets.
@@ -168,11 +248,13 @@ def list_secrets(
         :param retry: Optional. Designation of what errors, if any, should be retried.
         :param timeout: Optional. The timeout for this request.
         :param metadata: Optional. Strings which should be sent along with the request as metadata.
+        :param location: Optional. The regional secrets stored in the provided location will be listed.  If set to ``None`` or missing, the location provided for GoogleCloudSecretHook instantiation is used
+            For more details : https://cloud.google.com/secret-manager/docs/locations
         :return: Secret List object.
         """
         response = self.client.list_secrets(
             request={
-                "parent": f"projects/{project_id}",
+                "parent": self._get_parent(project_id, location),
                 "page_size": page_size,
                 "page_token": page_token,
                 "filter": secret_filter,
@@ -185,18 +267,22 @@ def list_secrets(
         return response
 
     @GoogleBaseHook.fallback_to_default_project_id
-    def secret_exists(self, project_id: str, secret_id: str) -> bool:
+    def secret_exists(self, project_id: str, secret_id: str, location: str | None = None) -> bool:
         """
         Check whether secret exists.
 
         :param project_id: Required. ID of the GCP project that owns the job.
             If set to ``None`` or missing, the default project_id from the GCP connection is used.
         :param secret_id: Required. ID of the secret to find.
+        :param location: Optional. Location where secret is expected to be stored regionally.  If set to ``None`` or missing, the location provided for GoogleCloudSecretHook instantiation is used
+            For more details : https://cloud.google.com/secret-manager/docs/locations
         :return: True if the secret exists, False otherwise.
         """
         secret_filter = f"name:{secret_id}"
-        secret_name = self.client.secret_path(project_id, secret_id)
-        for secret in self.list_secrets(project_id=project_id, page_size=100, secret_filter=secret_filter):
+        secret_name = self._get_secret_path(project_id, secret_id, location)
+        for secret in self.list_secrets(
+            project_id=project_id, page_size=100, secret_filter=secret_filter, location=location
+        ):
             if secret.name.split("/")[-1] == secret_id:
                 self.log.info("Secret %s exists.", secret_name)
                 return True
@@ -212,6 +298,7 @@ def access_secret(
         retry: Retry | _MethodDefault = DEFAULT,
         timeout: float | None = None,
         metadata: Sequence[tuple[str, str]] = (),
+        location: str | None = None,
     ) -> AccessSecretVersionResponse:
         """
         Access a secret version.
@@ -227,11 +314,13 @@ def access_secret(
         :param retry: Optional. Designation of what errors, if any, should be retried.
         :param timeout: Optional. The timeout for this request.
         :param metadata: Optional. Strings which should be sent along with the request as metadata.
+        :param location: Optional. Location where secret is stored regionally.  If set to ``None`` or missing, the location provided for GoogleCloudSecretHook instantiation is used
+            For more details : https://cloud.google.com/secret-manager/docs/locations
         :return: Access secret version response object.
         """
         response = self.client.access_secret_version(
             request={
-                "name": self.client.secret_version_path(project_id, secret_id, secret_version),
+                "name": self._get_secret_version_path(project_id, secret_id, secret_version, location),
             },
             retry=retry,
             timeout=timeout,
@@ -248,6 +337,7 @@ def delete_secret(
         retry: Retry | _MethodDefault = DEFAULT,
         timeout: float | None = None,
         metadata: Sequence[tuple[str, str]] = (),
+        location: str | None = None,
     ) -> None:
         """
         Delete a secret.
@@ -262,9 +352,11 @@ def delete_secret(
         :param retry: Optional. Designation of what errors, if any, should be retried.
         :param timeout: Optional. The timeout for this request.
         :param metadata: Optional. Strings which should be sent along with the request as metadata.
+        :param location: Optional. Location where secret is stored regionally. If set to ``None`` or missing, the location provided for GoogleCloudSecretHook instantiation is used.
+            For more details : https://cloud.google.com/secret-manager/docs/locations
         :return: Access secret version response object.
         """
-        name = self.client.secret_path(project_id, secret_id)
+        name = self._get_secret_path(project_id, secret_id, location)
         self.client.delete_secret(
             request={"name": name},
             retry=retry,
diff --git a/providers/google/tests/unit/google/cloud/hooks/test_secret_manager.py b/providers/google/tests/unit/google/cloud/hooks/test_secret_manager.py
index 3bcafad0dcfe1..4bf8a156cfe86 100644
--- a/providers/google/tests/unit/google/cloud/hooks/test_secret_manager.py
+++ b/providers/google/tests/unit/google/cloud/hooks/test_secret_manager.py
@@ -29,6 +29,8 @@
 BASE_PACKAGE = "airflow.providers.google.common.hooks.base_google."
 SECRETS_HOOK_PACKAGE = "airflow.providers.google.cloud.hooks.secret_manager."
 SECRET_ID = "test-secret-id"
+REGIONAL_SECRET_LOCATION = "test-location"
+SECRET_VERSION = "test-secret-version"
 
 
 class TestGoogleCloudSecretManagerHook:
@@ -36,6 +38,52 @@ def setup_method(self, method):
         with patch(f"{BASE_PACKAGE}GoogleBaseHook.get_connection", return_value=MagicMock()):
             self.hook = GoogleCloudSecretManagerHook()
 
+    @patch(f"{SECRETS_HOOK_PACKAGE}GoogleCloudSecretManagerHook.client", new_callable=PropertyMock)
+    def test__get_parent(self, mock_client):
+        expected_value = mock_client.return_value.common_project_path.return_value
+        parent = self.hook._get_parent(GCP_PROJECT_ID_HOOK_UNIT_TEST)
+        assert expected_value == parent
+        mock_client.assert_called_once()
+        mock_client.return_value.common_project_path.assert_called_once_with(GCP_PROJECT_ID_HOOK_UNIT_TEST)
+
+        expected_value = mock_client.return_value.common_location_path.return_value
+        parent = self.hook._get_parent(GCP_PROJECT_ID_HOOK_UNIT_TEST, REGIONAL_SECRET_LOCATION)
+        assert expected_value == parent
+        # mock_client.assert_called_once() # will fail as already client has been triggered due to previous case.
+        mock_client.return_value.common_location_path.assert_called_once_with(
+            GCP_PROJECT_ID_HOOK_UNIT_TEST, REGIONAL_SECRET_LOCATION
+        )
+
+    @patch(f"{SECRETS_HOOK_PACKAGE}GoogleCloudSecretManagerHook.client", new_callable=PropertyMock)
+    def test__get_secret_path(self, mock_client):
+        expected_value = mock_client.return_value.secret_path.return_value
+        secret_path = self.hook._get_secret_path(GCP_PROJECT_ID_HOOK_UNIT_TEST, SECRET_ID)
+        assert expected_value == secret_path
+        mock_client.assert_called_once()
+        mock_client.return_value.secret_path.assert_called_once_with(GCP_PROJECT_ID_HOOK_UNIT_TEST, SECRET_ID)
+
+        expected_value = f"projects/{GCP_PROJECT_ID_HOOK_UNIT_TEST}/locations/{REGIONAL_SECRET_LOCATION}/secrets/{SECRET_ID}"
+        parent = self.hook._get_secret_path(
+            GCP_PROJECT_ID_HOOK_UNIT_TEST, SECRET_ID, REGIONAL_SECRET_LOCATION
+        )
+        assert expected_value == parent
+
+    @patch(f"{SECRETS_HOOK_PACKAGE}GoogleCloudSecretManagerHook.client", new_callable=PropertyMock)
+    def test__get_secret_version_path(self, mock_client):
+        expected_value = mock_client.return_value.secret_version_path.return_value
+        parent = self.hook._get_secret_version_path(GCP_PROJECT_ID_HOOK_UNIT_TEST, SECRET_ID, SECRET_VERSION)
+        assert expected_value == parent
+        mock_client.assert_called_once()
+        mock_client.return_value.secret_version_path.assert_called_once_with(
+            GCP_PROJECT_ID_HOOK_UNIT_TEST, SECRET_ID, SECRET_VERSION
+        )
+
+        expected_value = f"projects/{GCP_PROJECT_ID_HOOK_UNIT_TEST}/locations/{REGIONAL_SECRET_LOCATION}/secrets/{SECRET_ID}/versions/{SECRET_VERSION}"
+        parent = self.hook._get_secret_version_path(
+            GCP_PROJECT_ID_HOOK_UNIT_TEST, SECRET_ID, SECRET_VERSION, REGIONAL_SECRET_LOCATION
+        )
+        assert expected_value == parent
+
     @patch(f"{SECRETS_HOOK_PACKAGE}GoogleCloudSecretManagerHook.get_credentials")
     @patch(f"{SECRETS_HOOK_PACKAGE}SecretManagerServiceClient")
     def test_client(self, mock_client, mock_get_credentials):
@@ -66,9 +114,10 @@ def test_get_conn(self, mock_client):
             (mock_secret := MagicMock(), mock_secret),  # type: ignore[name-defined]
         ],
     )
+    @patch(f"{SECRETS_HOOK_PACKAGE}GoogleCloudSecretManagerHook._get_parent")
     @patch(f"{SECRETS_HOOK_PACKAGE}GoogleCloudSecretManagerHook.client", new_callable=PropertyMock)
-    def test_create_secret(self, mock_client, input_secret, expected_secret):
-        expected_parent = f"projects/{GCP_PROJECT_ID_HOOK_UNIT_TEST}"
+    def test_create_secret(self, mock_client, mock_get_parent, input_secret, expected_secret):
+        expected_parent = mock_get_parent.return_value  # f"projects/{GCP_PROJECT_ID_HOOK_UNIT_TEST}"
         expected_response = mock_client.return_value.create_secret.return_value
         mock_retry, mock_timeout, mock_metadata = MagicMock(), MagicMock(), MagicMock()
 
@@ -83,6 +132,7 @@ def test_create_secret(self, mock_client, input_secret, expected_secret):
 
         assert actual_response == expected_response
         mock_client.assert_called_once()
+        mock_get_parent.assert_called_once_with(GCP_PROJECT_ID_HOOK_UNIT_TEST, None)
         mock_client.return_value.create_secret.assert_called_once_with(
             request={
                 "parent": expected_parent,
@@ -94,9 +144,10 @@ def test_create_secret(self, mock_client, input_secret, expected_secret):
             metadata=mock_metadata,
         )
 
+    @patch(f"{SECRETS_HOOK_PACKAGE}GoogleCloudSecretManagerHook._get_secret_path")
     @patch(f"{SECRETS_HOOK_PACKAGE}GoogleCloudSecretManagerHook.client", new_callable=PropertyMock)
-    def test_add_secret_version(self, mock_client):
-        expected_parent = f"projects/{GCP_PROJECT_ID_HOOK_UNIT_TEST}/secrets/{SECRET_ID}"
+    def test_add_secret_version(self, mock_client, mock_get_secret_path):
+        expected_parent = mock_get_secret_path.return_value
         expected_response = mock_client.return_value.add_secret_version.return_value
         mock_payload, mock_retry, mock_timeout, mock_metadata = (MagicMock() for _ in range(4))
 
@@ -111,6 +162,7 @@ def test_add_secret_version(self, mock_client):
 
         assert actual_response == expected_response
         mock_client.assert_called_once()
+        mock_get_secret_path.assert_called_once_with(GCP_PROJECT_ID_HOOK_UNIT_TEST, SECRET_ID, None)
         mock_client.return_value.add_secret_version.assert_called_once_with(
             request={
                 "parent": expected_parent,
@@ -121,9 +173,10 @@ def test_add_secret_version(self, mock_client):
             metadata=mock_metadata,
         )
 
+    @patch(f"{SECRETS_HOOK_PACKAGE}GoogleCloudSecretManagerHook._get_parent")
     @patch(f"{SECRETS_HOOK_PACKAGE}GoogleCloudSecretManagerHook.client", new_callable=PropertyMock)
-    def test_list_secrets(self, mock_client):
-        expected_parent = f"projects/{GCP_PROJECT_ID_HOOK_UNIT_TEST}"
+    def test_list_secrets(self, mock_client, mock_get_parent):
+        expected_parent = mock_get_parent.return_value
         expected_response = mock_client.return_value.list_secrets.return_value
         mock_filter, mock_retry, mock_timeout, mock_metadata = (MagicMock() for _ in range(4))
         page_size, page_token = 20, "test-page-token"
@@ -140,6 +193,7 @@ def test_list_secrets(self, mock_client):
 
         assert actual_response == expected_response
         mock_client.assert_called_once()
+        mock_get_parent.assert_called_once_with(GCP_PROJECT_ID_HOOK_UNIT_TEST, None)
         mock_client.return_value.list_secrets.assert_called_once_with(
             request={
                 "parent": expected_parent,
@@ -184,7 +238,10 @@ def test_secret_exists(
         assert secret_exists_actual == secret_exists_expected
         mock_client.return_value.secret_path.assert_called_once_with(GCP_PROJECT_ID_HOOK_UNIT_TEST, secret_id)
         mock_list_secrets.assert_called_once_with(
-            project_id=GCP_PROJECT_ID_HOOK_UNIT_TEST, page_size=100, secret_filter=secret_filter
+            project_id=GCP_PROJECT_ID_HOOK_UNIT_TEST,
+            page_size=100,
+            secret_filter=secret_filter,
+            location=None,
         )
 
     @patch(f"{SECRETS_HOOK_PACKAGE}GoogleCloudSecretManagerHook.client", new_callable=PropertyMock)

From 448a1843bada35c792136ef497fd12d1ba9524d5 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Tue, 1 Jul 2025 06:57:59 +0200
Subject: [PATCH 363/381] Add more dependency reports (#52606)

The dependency reports of ours will be different for:

* different python versions
* different constraint modes

We change the job to produce the reports into matrix of jobs
producing reports for all combinations of those.
---
 .github/workflows/finalize-tests.yml     | 16 +++--
 dev/constraints-updated-version-check.py | 85 +++++++++++++++---------
 2 files changed, 64 insertions(+), 37 deletions(-)

diff --git a/.github/workflows/finalize-tests.yml b/.github/workflows/finalize-tests.yml
index bdfd0bbe79e45..bab0d82bd7a3c 100644
--- a/.github/workflows/finalize-tests.yml
+++ b/.github/workflows/finalize-tests.yml
@@ -136,7 +136,11 @@ jobs:
     runs-on: ${{ fromJSON(inputs.runners) }}
     needs: [update-constraints]
     if: inputs.upgrade-to-newer-dependencies == 'true' && inputs.platform == 'linux/amd64'
-    name: "Dependency upgrade summary"
+    name: "Dependencies ${{ matrix.python-version }}:${{ matrix.constraints-mode }}"
+    strategy:
+      matrix:
+        python-version: ${{ fromJson(inputs.python-versions) }}
+        constraints-mode: ["constraints", "constraints-source-providers", "constraints-no-providers"]
     env:
       GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
     steps:
@@ -151,14 +155,18 @@ jobs:
         uses: ./.github/actions/prepare_breeze_and_image
         with:
           platform: ${{ inputs.platform }}
-          python: ${{ inputs.default-python-version }}
+          python: ${{ matrix.python-version }}
           use-uv: ${{ inputs.use-uv }}
       - name: "Dependency upgrade summary"
         shell: bash
         run: >
-          breeze run uv run /opt/airflow/dev/constraints-updated-version-check.py --explain-why
+          breeze run uv run /opt/airflow/dev/constraints-updated-version-check.py
+          --python-version "${MATRIX_PYTHON_VERSION}"
+          --airflow-constraints-mode "${MATRIX_CONSTRAINTS_MODE}" --explain-why
         env:
-          PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
+          MATRIX_PYTHON_VERSION: "${{ matrix.python-version }}"
+          MATRIX_CONSTRAINTS_MODE: "${{ matrix.constraints-mode }}"
+          VERBOSE: "false"
 
   push-buildx-cache-to-github-registry:
     name: Push Regular Image Cache ${{ inputs.platform }}
diff --git a/dev/constraints-updated-version-check.py b/dev/constraints-updated-version-check.py
index bf68c9b067ac7..35630854b1392 100755
--- a/dev/constraints-updated-version-check.py
+++ b/dev/constraints-updated-version-check.py
@@ -56,16 +56,20 @@ def parse_constraints_generation_date(lines):
     return None
 
 
-def get_constraints_file(python_version):
-    url = f"https://raw.githubusercontent.com/apache/airflow/refs/heads/constraints-main/constraints-{python_version}.txt"
+def get_constraints_file(python_version, airflow_constraints_mode="constraints"):
+    url = f"https://raw.githubusercontent.com/apache/airflow/refs/heads/constraints-main/{airflow_constraints_mode}-{python_version}.txt"
     try:
         response = urllib.request.urlopen(url)
         return response.read().decode("utf-8").splitlines()
     except HTTPError as e:
         if e.code == 404:
-            console.print(f"[bold red]Error: Constraints file for Python {python_version} not found.[/]")
+            console.print(
+                f"[bold red]Error: Constraints file for Python {python_version} and mode {airflow_constraints_mode} not found.[/]"
+            )
             console.print(f"[bold red]URL: {url}[/]")
-            console.print("[bold red]Please check if the Python version is correct and the file exists.[/]")
+            console.print(
+                "[bold red]Please check if the Python version and constraints mode are correct and the file exists.[/]"
+            )
         else:
             console.print(f"[bold red]HTTP Error: {e.code} - {e.reason}[/]")
         exit(1)
@@ -163,13 +167,16 @@ def get_first_newer_release_date_str(releases, current_version):
 
 def main(
     python_version: str,
+    airflow_constraints_mode: str,
     mode: str,
     selected_packages: set[str] | None = None,
     explain_why: bool = False,
     verbose: bool = False,
 ):
-    lines = get_constraints_file(python_version)
+    lines = get_constraints_file(python_version, airflow_constraints_mode)
     constraints_date = parse_constraints_generation_date(lines)
+    console.print(f"[bold cyan]Python version:[/] [white]{python_version}[/]")
+    console.print(f"[bold cyan]Constraints mode:[/] [white]{airflow_constraints_mode}[/]\n")
     if constraints_date:
         console.print(
             f"[bold cyan]Constraints file generation date:[/] [white]{constraints_date.strftime('%Y-%m-%d %H:%M:%S')}[/]"
@@ -181,7 +188,7 @@ def main(
     print_table_header(format_str, headers, total_width)
 
     outdated_count, skipped_count, explanations = process_packages(
-        packages, constraints_date, mode, explain_why, verbose, col_widths, format_str
+        packages, constraints_date, mode, explain_why, verbose, col_widths, format_str, python_version
     )
 
     print_table_footer(total_width, len(packages), outdated_count, skipped_count, mode)
@@ -267,6 +274,7 @@ def process_packages(
     verbose: bool,
     col_widths: dict,
     format_str: str,
+    python_version: str,
 ) -> tuple[int, int, list[str]]:
     import subprocess
     import tempfile
@@ -319,6 +327,10 @@ def update_pyproject_dependency(pyproject_path: Path, pkg: str, latest_version:
         if not dep_added:
             new_lines.append(f'    "{pkg}=={latest_version}",')
         pyproject_path.write_text("\n".join(new_lines) + "\n")
+        if verbose:
+            console.print(
+                f"[cyan]Fixed {pkg} at {latest_version} in [white]{pyproject_path}[/] [dim](pyproject.toml)[/]"
+            )
 
     airflow_pyproject = Path(__file__).parent.parent / "pyproject.toml"
     airflow_pyproject = airflow_pyproject.resolve()
@@ -369,6 +381,7 @@ def update_pyproject_dependency(pyproject_path: Path, pkg: str, latest_version:
                         run_uv_sync,
                         update_pyproject_dependency,
                         verbose,
+                        python_version,
                     )
                     explanations.append(explanation)
             except HTTPError as e:
@@ -430,6 +443,7 @@ def explain_package_upgrade(
     run_uv_sync,
     update_pyproject_dependency,
     verbose: bool,
+    python_version: str,
 ) -> str:
     explanation = (
         f"[bold blue]\n--- Explaining for {pkg} (current: {pinned_version}, latest: {latest_version}) ---[/]"
@@ -452,6 +466,8 @@ def preserve_pyproject_file(pyproject_path: Path):
                 "--resolution",
                 "highest",
                 "--refresh",
+                "--python",
+                python_version,
             ],
             cwd=repo_root,
         )
@@ -470,13 +486,15 @@ def preserve_pyproject_file(pyproject_path: Path):
                 "--resolution",
                 "highest",
                 "--refresh",
+                "--python",
+                python_version,
             ],
             cwd=repo_root,
         )
         (temp_dir_path / "uv_sync_after.txt").write_text(after_result.stdout + after_result.stderr)
         if after_result.returncode == 0:
             explanation += f"\n[bold yellow]Package {pkg} can be upgraded from {pinned_version} to {latest_version} without conflicts.[/]."
-        else:
+        if after_result.returncode != 0 or verbose:
             explanation += f"\n[yellow]uv sync output for {pkg}=={latest_version}:[/]\n"
             explanation += after_result.stdout + after_result.stderr
     return explanation
@@ -485,46 +503,47 @@ def preserve_pyproject_file(pyproject_path: Path):
 @click.command()
 @click.option(
     "--python-version",
-    required=False,
+    type=click.Choice(["3.10", "3.11", "3.12", "3.13"]),
     default="3.10",
-    help="Python version to check constraints for (e.g., 3.12)",
+    help="Python version to check constraints for (e.g. 3.10, 3.11, 3.12, 3.13).",
+)
+@click.option(
+    "--airflow-constraints-mode",
+    type=click.Choice(
+        ["constraints", "constraints-no-providers", "constraints-source-providers"], case_sensitive=False
+    ),
+    default="constraints",
+    show_default=True,
+    help="Constraints mode to use: constraints, constraints-no-providers, constraints-source-providers.",
 )
 @click.option(
     "--mode",
-    type=click.Choice(["full", "diff-constraints", "diff-all"]),
-    default="diff-constraints",
+    type=click.Choice(["full", "diff-all", "diff-constraints"], case_sensitive=False),
+    default="full",
     show_default=True,
-    help="Operation mode: full, diff-constraints, or diff-all.",
+    help="Report mode: full, diff-all, diff-constraints.",
 )
 @click.option(
-    "--selected-packages",
-    required=False,
-    default=None,
-    help="Comma-separated list of package names to check (e.g., 'requests,flask'). If not set, all packages are checked.",
+    "--package",
+    multiple=True,
+    help="Only check specific package(s). Can be used multiple times.",
 )
 @click.option(
-    "--explain-why",
-    is_flag=True,
+    "--explain-why/--no-explain-why",
     default=False,
-    help="For each selected package, attempts to upgrade to the latest version and explains why it cannot be upgraded.",
+    help="Show explanations for outdated packages.",
 )
 @click.option(
-    "--verbose",
-    is_flag=True,
+    "--verbose/--no-verbose",
     default=False,
-    help="Print the temporary pyproject.toml file used for each package when running --explain-why.",
+    help="Show verbose output.",
 )
-def cli(
-    python_version: str,
-    mode: str,
-    selected_packages: str | None,
-    explain_why: bool,
-    verbose: bool,
-):
-    selected_packages_set = None
-    if selected_packages:
-        selected_packages_set = set(pkg.strip() for pkg in selected_packages.split(",") if pkg.strip())
-    main(python_version, mode, selected_packages_set, explain_why, verbose)
+def cli(python_version, airflow_constraints_mode, mode, package, explain_why, verbose):
+    if os.environ.get("CI", "false") == "true":
+        # Show output outside the group in CI
+        print("::endgroup::")
+    selected_packages = set(package) if package else None
+    main(python_version, airflow_constraints_mode, mode, selected_packages, explain_why, verbose)
 
 
 if __name__ == "__main__":

From a3621016840d8dba97777954333f6b214d4f3363 Mon Sep 17 00:00:00 2001
From: Collin McNulty <collin.mcnulty@gmail.com>
Date: Tue, 1 Jul 2025 00:55:15 -0500
Subject: [PATCH 364/381] Correctly treat requeues on reschedule sensors as
 resetting after each reschedule (#51410)

---
 .../src/airflow/jobs/scheduler_job_runner.py  | 27 +++--
 .../tests/unit/jobs/test_scheduler_job.py     | 99 +++++++++++++++++++
 2 files changed, 120 insertions(+), 6 deletions(-)

diff --git a/airflow-core/src/airflow/jobs/scheduler_job_runner.py b/airflow-core/src/airflow/jobs/scheduler_job_runner.py
index 50d6a5d63589e..38e70b372ab1d 100644
--- a/airflow-core/src/airflow/jobs/scheduler_job_runner.py
+++ b/airflow-core/src/airflow/jobs/scheduler_job_runner.py
@@ -32,7 +32,7 @@
 from itertools import groupby
 from typing import TYPE_CHECKING, Any
 
-from sqlalchemy import and_, delete, exists, func, or_, select, text, tuple_, update
+from sqlalchemy import and_, delete, desc, exists, func, or_, select, text, tuple_, update
 from sqlalchemy.exc import OperationalError
 from sqlalchemy.orm import joinedload, lazyload, load_only, make_transient, selectinload
 from sqlalchemy.sql import expression
@@ -2028,19 +2028,34 @@ def _get_num_times_stuck_in_queued(self, ti: TaskInstance, session: Session = NE
 
         We can then use this information to determine whether to reschedule a task or fail it.
         """
-        return (
-            session.query(Log)
+        last_running_time = session.scalar(
+            select(Log.dttm)
             .where(
-                Log.task_id == ti.task_id,
                 Log.dag_id == ti.dag_id,
+                Log.task_id == ti.task_id,
                 Log.run_id == ti.run_id,
                 Log.map_index == ti.map_index,
                 Log.try_number == ti.try_number,
-                Log.event == TASK_STUCK_IN_QUEUED_RESCHEDULE_EVENT,
+                Log.event == "running",
             )
-            .count()
+            .order_by(desc(Log.dttm))
+            .limit(1)
+        )
+
+        query = session.query(Log).where(
+            Log.task_id == ti.task_id,
+            Log.dag_id == ti.dag_id,
+            Log.run_id == ti.run_id,
+            Log.map_index == ti.map_index,
+            Log.try_number == ti.try_number,
+            Log.event == TASK_STUCK_IN_QUEUED_RESCHEDULE_EVENT,
         )
 
+        if last_running_time:
+            query = query.where(Log.dttm > last_running_time)
+
+        return query.count()
+
     previous_ti_running_metrics: dict[tuple[str, str, str], int] = {}
 
     @provide_session
diff --git a/airflow-core/tests/unit/jobs/test_scheduler_job.py b/airflow-core/tests/unit/jobs/test_scheduler_job.py
index 90d7eebdf4f2d..22d6211064295 100644
--- a/airflow-core/tests/unit/jobs/test_scheduler_job.py
+++ b/airflow-core/tests/unit/jobs/test_scheduler_job.py
@@ -2090,6 +2090,105 @@ def _queue_tasks(tis):
         states = [x.state for x in dr.get_task_instances(session=session)]
         assert states == ["failed", "failed"]
 
+    @conf_vars({("scheduler", "num_stuck_in_queued_retries"): "2"})
+    def test_handle_stuck_queued_tasks_reschedule_sensors(self, dag_maker, session, mock_executors):
+        """Reschedule sensors go in and out of running repeatedly using the same try_number
+        Make sure that they get three attempts per reschedule, not 3 attempts per try_number"""
+        with dag_maker("test_fail_stuck_queued_tasks_multiple_executors"):
+            EmptyOperator(task_id="op1")
+            EmptyOperator(task_id="op2", executor="default_exec")
+
+        def _queue_tasks(tis):
+            for ti in tis:
+                ti.state = "queued"
+                ti.queued_dttm = timezone.utcnow()
+            session.commit()
+
+        def _add_running_event(tis):
+            for ti in tis:
+                updated_entry = Log(
+                    dttm=timezone.utcnow(),
+                    dag_id=ti.dag_id,
+                    task_id=ti.task_id,
+                    map_index=ti.map_index,
+                    event="running",
+                    run_id=ti.run_id,
+                    try_number=ti.try_number,
+                )
+                session.add(updated_entry)
+
+        run_id = str(uuid4())
+        dr = dag_maker.create_dagrun(run_id=run_id)
+
+        tis = dr.get_task_instances(session=session)
+        _queue_tasks(tis=tis)
+        scheduler_job = Job()
+        scheduler = SchedulerJobRunner(job=scheduler_job, num_runs=0)
+        # job_runner._reschedule_stuck_task = MagicMock()
+        scheduler._task_queued_timeout = -300  # always in violation of timeout
+
+        with _loader_mock(mock_executors):
+            scheduler._handle_tasks_stuck_in_queued()
+        # If the task gets stuck in queued once, we reset it to scheduled
+        tis = dr.get_task_instances(session=session)
+        assert [x.state for x in tis] == ["scheduled", "scheduled"]
+        assert [x.queued_dttm for x in tis] == [None, None]
+
+        _queue_tasks(tis=tis)
+        log_events = [
+            x.event for x in session.scalars(select(Log).where(Log.run_id == run_id).order_by(Log.id)).all()
+        ]
+        assert log_events == [
+            "stuck in queued reschedule",
+            "stuck in queued reschedule",
+        ]
+
+        with _loader_mock(mock_executors):
+            scheduler._handle_tasks_stuck_in_queued()
+
+        log_events = [
+            x.event for x in session.scalars(select(Log).where(Log.run_id == run_id).order_by(Log.id)).all()
+        ]
+        assert log_events == [
+            "stuck in queued reschedule",
+            "stuck in queued reschedule",
+            "stuck in queued reschedule",
+            "stuck in queued reschedule",
+        ]
+        mock_executors[0].fail.assert_not_called()
+        tis = dr.get_task_instances(session=session)
+        assert [x.state for x in tis] == ["scheduled", "scheduled"]
+
+        _add_running_event(tis)  # This should "reset" the count of stuck queued
+
+        for _ in range(3):  # Should be able to be stuck 3 more times before failing
+            _queue_tasks(tis=tis)
+            with _loader_mock(mock_executors):
+                scheduler._handle_tasks_stuck_in_queued()
+            tis = dr.get_task_instances(session=session)
+
+        log_events = [
+            x.event for x in session.scalars(select(Log).where(Log.run_id == run_id).order_by(Log.id)).all()
+        ]
+        assert log_events == [
+            "stuck in queued reschedule",
+            "stuck in queued reschedule",
+            "stuck in queued reschedule",
+            "stuck in queued reschedule",
+            "running",
+            "running",
+            "stuck in queued reschedule",
+            "stuck in queued reschedule",
+            "stuck in queued reschedule",
+            "stuck in queued reschedule",
+            "stuck in queued tries exceeded",
+            "stuck in queued tries exceeded",
+        ]
+
+        mock_executors[0].fail.assert_not_called()  # just demoing that we don't fail with executor method
+        states = [x.state for x in dr.get_task_instances(session=session)]
+        assert states == ["failed", "failed"]
+
     def test_revoke_task_not_imp_tolerated(self, dag_maker, session, caplog):
         """Test that if executor no implement revoke_task then we don't blow up."""
         with dag_maker("test_fail_stuck_queued_tasks"):

From 760c68b6191728dd0f6b41b77b7ca390643d328c Mon Sep 17 00:00:00 2001
From: Karen Braganza <karenbraganza15@gmail.com>
Date: Tue, 1 Jul 2025 02:38:24 -0400
Subject: [PATCH 365/381] Update `BaseOperator` and `BaseSensorOperator`
 imports for Airflow 3.0 compatibility in `qdrant` provider (#52600)

---
 .../providers/qdrant/operators/qdrant.py      |  2 +-
 .../providers/qdrant/version_compat.py        | 37 +++++++++++++++++++
 2 files changed, 38 insertions(+), 1 deletion(-)
 create mode 100644 providers/qdrant/src/airflow/providers/qdrant/version_compat.py

diff --git a/providers/qdrant/src/airflow/providers/qdrant/operators/qdrant.py b/providers/qdrant/src/airflow/providers/qdrant/operators/qdrant.py
index e22171e9aab84..40af99eb1fde4 100644
--- a/providers/qdrant/src/airflow/providers/qdrant/operators/qdrant.py
+++ b/providers/qdrant/src/airflow/providers/qdrant/operators/qdrant.py
@@ -21,8 +21,8 @@
 from functools import cached_property
 from typing import TYPE_CHECKING, Any
 
-from airflow.models import BaseOperator
 from airflow.providers.qdrant.hooks.qdrant import QdrantHook
+from airflow.providers.qdrant.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from qdrant_client.models import VectorStruct
diff --git a/providers/qdrant/src/airflow/providers/qdrant/version_compat.py b/providers/qdrant/src/airflow/providers/qdrant/version_compat.py
new file mode 100644
index 0000000000000..9e99cafacafa1
--- /dev/null
+++ b/providers/qdrant/src/airflow/providers/qdrant/version_compat.py
@@ -0,0 +1,37 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator
+
+__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseOperator"]

From 53b0c6ce0a08f132d0bb8b4a84521dfe0d1f3bf3 Mon Sep 17 00:00:00 2001
From: Guangyang Li <2060045+gyli@users.noreply.github.com>
Date: Tue, 1 Jul 2025 02:41:43 -0400
Subject: [PATCH 366/381] Provider Migration: Replace `models.BaseOperator` to
 Task SDK for `smtp` (#52596)

Related #52378
---
 .../airflow/providers/smtp/operators/smtp.py  |  8 +---
 .../airflow/providers/smtp/version_compat.py  | 48 +++++++++++++++++++
 2 files changed, 50 insertions(+), 6 deletions(-)
 create mode 100644 providers/smtp/src/airflow/providers/smtp/version_compat.py

diff --git a/providers/smtp/src/airflow/providers/smtp/operators/smtp.py b/providers/smtp/src/airflow/providers/smtp/operators/smtp.py
index d9880f595fe7b..c35da707a5a69 100644
--- a/providers/smtp/src/airflow/providers/smtp/operators/smtp.py
+++ b/providers/smtp/src/airflow/providers/smtp/operators/smtp.py
@@ -22,15 +22,11 @@
 from typing import TYPE_CHECKING, Any
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.smtp.hooks.smtp import SmtpHook
+from airflow.providers.smtp.version_compat import BaseOperator
 
 if TYPE_CHECKING:
-    try:
-        from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+    from airflow.providers.smtp.version_compat import Context
 
 
 class EmailOperator(BaseOperator):
diff --git a/providers/smtp/src/airflow/providers/smtp/version_compat.py b/providers/smtp/src/airflow/providers/smtp/version_compat.py
new file mode 100644
index 0000000000000..1db30bd476272
--- /dev/null
+++ b/providers/smtp/src/airflow/providers/smtp/version_compat.py
@@ -0,0 +1,48 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+    from airflow.sdk.definitions.context import Context
+else:
+    from airflow.models import BaseOperator  # type: ignore[no-redef]
+    from airflow.utils.context import Context  # type: ignore[no-redef]
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+    "Context",
+]

From ee67073239bdaee1bcd639791b895095333dbb81 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Tue, 1 Jul 2025 08:54:57 +0200
Subject: [PATCH 367/381] Upgrade uv to 0.7.17 (#52615)

---
 .github/actions/install-pre-commit/action.yml                   | 2 +-
 .github/workflows/ci-amd.yml                                    | 2 +-
 Dockerfile                                                      | 2 +-
 Dockerfile.ci                                                   | 2 +-
 dev/breeze/doc/ci/02_images.md                                  | 2 +-
 .../src/airflow_breeze/commands/release_management_commands.py  | 2 +-
 dev/breeze/src/airflow_breeze/global_constants.py               | 2 +-
 pyproject.toml                                                  | 2 +-
 scripts/ci/install_breeze.sh                                    | 2 +-
 scripts/tools/setup_breeze                                      | 2 +-
 10 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/.github/actions/install-pre-commit/action.yml b/.github/actions/install-pre-commit/action.yml
index 3d3196c31b5be..ca6dd5da78194 100644
--- a/.github/actions/install-pre-commit/action.yml
+++ b/.github/actions/install-pre-commit/action.yml
@@ -24,7 +24,7 @@ inputs:
     default: "3.10"
   uv-version:
     description: 'uv version to use'
-    default: "0.7.16"  # Keep this comment to allow automatic replacement of uv version
+    default: "0.7.17"  # Keep this comment to allow automatic replacement of uv version
   pre-commit-version:
     description: 'pre-commit version to use'
     default: "4.2.0"  # Keep this comment to allow automatic replacement of pre-commit version
diff --git a/.github/workflows/ci-amd.yml b/.github/workflows/ci-amd.yml
index e7573035b1a68..05faec6423c44 100644
--- a/.github/workflows/ci-amd.yml
+++ b/.github/workflows/ci-amd.yml
@@ -186,7 +186,7 @@ jobs:
       - name: Install pre-commit, uv, and pre-commit-uv
         shell: bash
         env:
-          UV_VERSION: "0.7.16"  # Keep this comment to allow automatic replacement of uv version
+          UV_VERSION: "0.7.17"  # Keep this comment to allow automatic replacement of uv version
           PRE_COMMIT_VERSION: "4.2.0"  # Keep this comment to allow automatic replacement of pre-commit version
           PRE_COMMIT_UV_VERSION: "4.1.4"  # Keep this comment to allow automatic replacement of pre-commit-uv version
         run: |
diff --git a/Dockerfile b/Dockerfile
index d06b263c79dfa..194c27645d550 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -57,7 +57,7 @@ ARG PYTHON_BASE_IMAGE="python:3.10-slim-bookworm"
 ARG AIRFLOW_PIP_VERSION=25.1.1
 # ARG AIRFLOW_PIP_VERSION="git+https://github.com/pypa/pip.git@main"
 ARG AIRFLOW_SETUPTOOLS_VERSION=80.9.0
-ARG AIRFLOW_UV_VERSION=0.7.16
+ARG AIRFLOW_UV_VERSION=0.7.17
 ARG AIRFLOW_USE_UV="false"
 ARG UV_HTTP_TIMEOUT="300"
 ARG AIRFLOW_IMAGE_REPOSITORY="https://github.com/apache/airflow"
diff --git a/Dockerfile.ci b/Dockerfile.ci
index f003636a2e6aa..6ba138121af1a 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -1407,7 +1407,7 @@ COPY --from=scripts common.sh install_packaging_tools.sh install_additional_depe
 ARG AIRFLOW_PIP_VERSION=25.1.1
 # ARG AIRFLOW_PIP_VERSION="git+https://github.com/pypa/pip.git@main"
 ARG AIRFLOW_SETUPTOOLS_VERSION=80.9.0
-ARG AIRFLOW_UV_VERSION=0.7.16
+ARG AIRFLOW_UV_VERSION=0.7.17
 # TODO(potiuk): automate with upgrade check (possibly)
 ARG AIRFLOW_PRE_COMMIT_VERSION="4.2.0"
 ARG AIRFLOW_PRE_COMMIT_UV_VERSION="4.1.4"
diff --git a/dev/breeze/doc/ci/02_images.md b/dev/breeze/doc/ci/02_images.md
index 4dbfdb6e19637..224110e751cfb 100644
--- a/dev/breeze/doc/ci/02_images.md
+++ b/dev/breeze/doc/ci/02_images.md
@@ -443,7 +443,7 @@ can be used for CI images:
 | `ADDITIONAL_DEV_APT_DEPS`         |                             | Additional apt dev dependencies installed in the first part of the image                                          |
 | `ADDITIONAL_DEV_APT_ENV`          |                             | Additional env variables defined when installing dev deps                                                         |
 | `AIRFLOW_PIP_VERSION`             | `25.1.1`                    | `pip` version used.                                                                                               |
-| `AIRFLOW_UV_VERSION`              | `0.7.16`                    | `uv` version used.                                                                                                |
+| `AIRFLOW_UV_VERSION`              | `0.7.17`                    | `uv` version used.                                                                                                |
 | `AIRFLOW_PRE_COMMIT_VERSION`      | `4.2.0`                     | `pre-commit` version used.                                                                                        |
 | `AIRFLOW_PRE_COMMIT_UV_VERSION`   | `4.1.4`                     | `pre-commit-uv` version used.                                                                                     |
 | `AIRFLOW_USE_UV`                  | `true`                      | Whether to use UV for installation.                                                                               |
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index d3fb805f03d10..c05877226c986 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -242,7 +242,7 @@ class VersionedFile(NamedTuple):
 
 
 AIRFLOW_PIP_VERSION = "25.1.1"
-AIRFLOW_UV_VERSION = "0.7.16"
+AIRFLOW_UV_VERSION = "0.7.17"
 AIRFLOW_USE_UV = False
 # TODO(potiuk): automate upgrades of these versions (likely via requirements.txt file)
 GITPYTHON_VERSION = "3.1.44"
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py b/dev/breeze/src/airflow_breeze/global_constants.py
index 401387dbddb70..3a0d01a4ff446 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -199,7 +199,7 @@
 ALLOWED_INSTALL_MYSQL_CLIENT_TYPES = ["mariadb", "mysql"]
 
 PIP_VERSION = "25.1.1"
-UV_VERSION = "0.7.16"
+UV_VERSION = "0.7.17"
 
 DEFAULT_UV_HTTP_TIMEOUT = 300
 DEFAULT_WSL2_HTTP_TIMEOUT = 900
diff --git a/pyproject.toml b/pyproject.toml
index b23a2851b5310..a7dbd581e30fb 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -528,7 +528,7 @@ packages = []
     "apache-airflow-providers-amazon[s3fs]",
 ]
 "uv" = [
-    "uv>=0.7.16",
+    "uv>=0.7.17",
 ]
 
 
diff --git a/scripts/ci/install_breeze.sh b/scripts/ci/install_breeze.sh
index 1743f549be8f6..15d0fd6c4cf9b 100755
--- a/scripts/ci/install_breeze.sh
+++ b/scripts/ci/install_breeze.sh
@@ -22,7 +22,7 @@ cd "$( dirname "${BASH_SOURCE[0]}" )/../../"
 PYTHON_ARG=""
 
 PIP_VERSION="25.1.1"
-UV_VERSION="0.7.16"
+UV_VERSION="0.7.17"
 if [[ ${PYTHON_VERSION=} != "" ]]; then
     PYTHON_ARG="--python=$(which python"${PYTHON_VERSION}") "
 fi
diff --git a/scripts/tools/setup_breeze b/scripts/tools/setup_breeze
index bb795c4672356..2cf2f23bfd594 100755
--- a/scripts/tools/setup_breeze
+++ b/scripts/tools/setup_breeze
@@ -27,7 +27,7 @@ COLOR_YELLOW=$'\e[33m'
 COLOR_BLUE=$'\e[34m'
 COLOR_RESET=$'\e[0m'
 
-UV_VERSION="0.7.16"
+UV_VERSION="0.7.17"
 
 function manual_instructions() {
     echo

From 5af60f576083dc57724d1155f46637a1a3a52bda Mon Sep 17 00:00:00 2001
From: Jake Roach <116606359+jroachgolf84@users.noreply.github.com>
Date: Tue, 1 Jul 2025 02:58:43 -0400
Subject: [PATCH 368/381] Ensuring XCom return value can be mapped for
 dynamically-mapped `@task_group`'s (#51556)

* Added same logic to @task_group as is in @task for mapping over invalid XCom arg

* Added same logic to @task_group as is in @task for mapping over invalid XCom arg

* Fixing linting
---
 .../sdk/definitions/decorators/task_group.py  | 12 ++++-
 .../definitions/decorators/test_task_group.py | 52 ++++++++++++++++++-
 2 files changed, 62 insertions(+), 2 deletions(-)

diff --git a/task-sdk/src/airflow/sdk/definitions/decorators/task_group.py b/task-sdk/src/airflow/sdk/definitions/decorators/task_group.py
index 809f5889e003e..2c1e2c70e0675 100644
--- a/task-sdk/src/airflow/sdk/definitions/decorators/task_group.py
+++ b/task-sdk/src/airflow/sdk/definitions/decorators/task_group.py
@@ -40,6 +40,7 @@
     MappedArgument,
 )
 from airflow.sdk.definitions._internal.node import DAGNode
+from airflow.sdk.definitions.mappedoperator import ensure_xcomarg_return_value
 from airflow.sdk.definitions.taskgroup import MappedTaskGroup, TaskGroup
 from airflow.sdk.definitions.xcom_arg import XComArg
 from airflow.typing_compat import ParamSpec
@@ -135,6 +136,11 @@ def expand(self, **kwargs: OperatorExpandArgument) -> DAGNode:
         self._validate_arg_names("expand", kwargs)
         prevent_duplicates(self.partial_kwargs, kwargs, fail_reason="mapping already partial")
         expand_input = DictOfListsExpandInput(kwargs)
+
+        # Similar to @task, @task_group should not be "mappable" over an XCom with a custom key. This will
+        # raise an exception, rather than having an ambiguous exception similar to the one found in #51109.
+        ensure_xcomarg_return_value(expand_input.value)
+
         return self._create_task_group(
             functools.partial(MappedTaskGroup, expand_input=expand_input),
             **self.partial_kwargs,
@@ -162,8 +168,12 @@ def expand_kwargs(self, kwargs: OperatorExpandKwargsArgument) -> DAGNode:
         # technically we can with AST but let's not), so we have to create stubs
         # for every argument, including those with default values.
         map_kwargs = (k for k in self.function_signature.parameters if k not in self.partial_kwargs)
-
         expand_input = ListOfDictsExpandInput(kwargs)
+
+        # Similar to @task, @task_group should not be "mappable" over an XCom with a custom key. This will
+        # raise an exception, rather than having an ambiguous exception similar to the one found in #51109.
+        ensure_xcomarg_return_value(expand_input.value)
+
         return self._create_task_group(
             functools.partial(MappedTaskGroup, expand_input=expand_input),
             **self.partial_kwargs,
diff --git a/task-sdk/tests/task_sdk/definitions/decorators/test_task_group.py b/task-sdk/tests/task_sdk/definitions/decorators/test_task_group.py
index a6415ce7b0274..6cbf16a1e6958 100644
--- a/task-sdk/tests/task_sdk/definitions/decorators/test_task_group.py
+++ b/task-sdk/tests/task_sdk/definitions/decorators/test_task_group.py
@@ -23,7 +23,7 @@
 import pytest
 
 from airflow.providers.standard.operators.empty import EmptyOperator
-from airflow.sdk import dag, task_group
+from airflow.sdk import dag, task, task_group
 from airflow.sdk.definitions._internal.expandinput import (
     DictOfListsExpandInput,
     ListOfDictsExpandInput,
@@ -158,6 +158,31 @@ def tg(a, b):
     assert saved == {"a": 1, "b": MappedArgument(input=tg._expand_input, key="b")}
 
 
+def test_expand_invalid_xcomarg_return_value():
+    saved = {}
+
+    @dag(schedule=None, start_date=pendulum.datetime(2022, 1, 1))
+    def pipeline():
+        @task
+        def t():
+            return {"values": ["value_1", "value_2"]}
+
+        @task_group()
+        def tg(a, b):
+            saved["a"] = a
+            saved["b"] = b
+
+        tg.partial(a=1).expand(b=t()["values"])
+
+    with pytest.raises(ValueError) as ctx:
+        pipeline()
+
+    assert (
+        str(ctx.value)
+        == "cannot map over XCom with custom key 'values' from <Task(_PythonDecoratedOperator): t>"
+    )
+
+
 def test_expand_kwargs_no_wildcard():
     @dag(schedule=None, start_date=pendulum.datetime(2022, 1, 1))
     def pipeline():
@@ -194,6 +219,31 @@ def tg(a, b):
     assert saved == {"a": 1, "b": MappedArgument(input=tg._expand_input, key="b")}
 
 
+def test_expand_kwargs_invalid_xcomarg_return_value():
+    saved = {}
+
+    @dag(schedule=None, start_date=pendulum.datetime(2022, 1, 1))
+    def pipeline():
+        @task
+        def t():
+            return {"values": [{"b": 2}, {"b": 3}]}
+
+        @task_group()
+        def tg(a, b):
+            saved["a"] = a
+            saved["b"] = b
+
+        tg.partial(a=1).expand_kwargs(t()["values"])
+
+    with pytest.raises(ValueError) as ctx:
+        pipeline()
+
+    assert (
+        str(ctx.value)
+        == "cannot map over XCom with custom key 'values' from <Task(_PythonDecoratedOperator): t>"
+    )
+
+
 def test_override_dag_default_args():
     @dag(
         dag_id="test_dag",

From b7b832fe06e2e1aa6d87f5038a9af5f218fdea98 Mon Sep 17 00:00:00 2001
From: Dov Benyomin Sohacheski <b@kloud.email>
Date: Tue, 1 Jul 2025 10:00:33 +0300
Subject: [PATCH 369/381] Add support for templating the DockerOperator 
 parameter (#52451)

---
 .../providers/docker/operators/docker.py      | 13 ++++++++++--
 .../unit/docker/decorators/test_docker.py     | 10 +++++++++-
 .../unit/docker/operators/test_docker.py      | 20 +++++++++++++++++++
 3 files changed, 40 insertions(+), 3 deletions(-)

diff --git a/providers/docker/src/airflow/providers/docker/operators/docker.py b/providers/docker/src/airflow/providers/docker/operators/docker.py
index 546c8736b13bf..bf6f7a463fad6 100644
--- a/providers/docker/src/airflow/providers/docker/operators/docker.py
+++ b/providers/docker/src/airflow/providers/docker/operators/docker.py
@@ -145,7 +145,7 @@ class DockerOperator(BaseOperator):
         ``AIRFLOW_TMP_DIR`` inside the container.
     :param user: Default user inside the docker container.
     :param mounts: List of volumes to mount into the container. Each item should
-        be a :py:class:`docker.types.Mount` instance.
+        be a :py:class:`docker.types.Mount` instance. (templated)
     :param entrypoint: Overwrite the default ENTRYPOINT of the image
     :param working_dir: Working directory to
         set on the container (equivalent to the -w switch the docker client)
@@ -198,7 +198,14 @@ class DockerOperator(BaseOperator):
     #  - docs/apache-airflow-providers-docker/decorators/docker.rst
     #  - airflow/decorators/__init__.pyi  (by a separate PR)
 
-    template_fields: Sequence[str] = ("image", "command", "environment", "env_file", "container_name")
+    template_fields: Sequence[str] = (
+        "image",
+        "command",
+        "environment",
+        "env_file",
+        "container_name",
+        "mounts",
+    )
     template_fields_renderers = {"env_file": "yaml"}
     template_ext: Sequence[str] = (
         ".sh",
@@ -291,6 +298,8 @@ def __init__(
         self.tmp_dir = tmp_dir
         self.user = user
         self.mounts = mounts or []
+        for mount in self.mounts:
+            mount.template_fields = ("Source", "Target", "Type")
         self.entrypoint = entrypoint
         self.working_dir = working_dir
         self.xcom_all = xcom_all
diff --git a/providers/docker/tests/unit/docker/decorators/test_docker.py b/providers/docker/tests/unit/docker/decorators/test_docker.py
index 2009361d8832d..c2264a6c76340 100644
--- a/providers/docker/tests/unit/docker/decorators/test_docker.py
+++ b/providers/docker/tests/unit/docker/decorators/test_docker.py
@@ -82,7 +82,14 @@ def f(num_results):
 
     @pytest.mark.db_test
     def test_basic_docker_operator_with_template_fields(self, dag_maker):
-        @task.docker(image="python:3.9-slim", container_name="python_{{dag_run.dag_id}}", auto_remove="force")
+        from docker.types import Mount
+
+        @task.docker(
+            image="python:3.9-slim",
+            container_name="python_{{dag_run.dag_id}}",
+            auto_remove="force",
+            mounts=[Mount(source="workspace", target="/{{task_instance.run_id}}")],
+        )
         def f():
             raise RuntimeError("Should not executed")
 
@@ -93,6 +100,7 @@ def f():
         ti = TaskInstance(task=ret.operator, run_id=dr.run_id)
         rendered = ti.render_templates()
         assert rendered.container_name == f"python_{dr.dag_id}"
+        assert rendered.mounts[0]["Target"] == f"/{ti.run_id}"
 
     @pytest.mark.db_test
     def test_basic_docker_operator_multiple_output(self, dag_maker, session):
diff --git a/providers/docker/tests/unit/docker/operators/test_docker.py b/providers/docker/tests/unit/docker/operators/test_docker.py
index d3e5bf6328238..a8ab46e89af87 100644
--- a/providers/docker/tests/unit/docker/operators/test_docker.py
+++ b/providers/docker/tests/unit/docker/operators/test_docker.py
@@ -27,6 +27,7 @@
 from docker.types import DeviceRequest, LogConfig, Mount, Ulimit
 
 from airflow.exceptions import AirflowException, AirflowSkipException
+from airflow.models import TaskInstance
 from airflow.providers.docker.exceptions import DockerContainerFailedException
 from airflow.providers.docker.operators.docker import DockerOperator, fetch_logs
 
@@ -794,3 +795,22 @@ def test_labels(self, labels: dict[str, str] | list[str]):
         self.client_mock.create_container.assert_called_once()
         assert "labels" in self.client_mock.create_container.call_args.kwargs
         assert labels == self.client_mock.create_container.call_args.kwargs["labels"]
+
+    @pytest.mark.db_test
+    def test_basic_docker_operator_with_template_fields(self, dag_maker):
+        from docker.types import Mount
+
+        with dag_maker():
+            operator = DockerOperator(
+                task_id="test",
+                image="test",
+                container_name="python_{{dag_run.dag_id}}",
+                mounts=[Mount(source="workspace", target="/{{task_instance.run_id}}")],
+            )
+            operator.execute({})
+
+        dr = dag_maker.create_dagrun()
+        ti = TaskInstance(task=operator, run_id=dr.run_id)
+        rendered = ti.render_templates()
+        assert rendered.container_name == f"python_{dr.dag_id}"
+        assert rendered.mounts[0]["Target"] == f"/{ti.run_id}"

From bf1a6b6f52a3ba5f2f084b1317fcc43222919e8c Mon Sep 17 00:00:00 2001
From: Karen Braganza <karenbraganza15@gmail.com>
Date: Tue, 1 Jul 2025 03:01:26 -0400
Subject: [PATCH 370/381] Update `grpc` BaseOperator imports for Airflow 3.0
 compatibility (#52603)

* Update grpc BaseOperator imports for Airflow 3.0 compatibility

* Apply suggestions from code review

---------

Co-authored-by: Kaxil Naik <kaxilnaik@gmail.com>
---
 .../airflow/providers/grpc/operators/grpc.py  |  2 +-
 .../airflow/providers/grpc/version_compat.py  | 37 +++++++++++++++++++
 2 files changed, 38 insertions(+), 1 deletion(-)
 create mode 100644 providers/grpc/src/airflow/providers/grpc/version_compat.py

diff --git a/providers/grpc/src/airflow/providers/grpc/operators/grpc.py b/providers/grpc/src/airflow/providers/grpc/operators/grpc.py
index b877a4ddbf366..d60c90b63c724 100644
--- a/providers/grpc/src/airflow/providers/grpc/operators/grpc.py
+++ b/providers/grpc/src/airflow/providers/grpc/operators/grpc.py
@@ -20,8 +20,8 @@
 from collections.abc import Callable, Sequence
 from typing import TYPE_CHECKING, Any
 
-from airflow.models import BaseOperator
 from airflow.providers.grpc.hooks.grpc import GrpcHook
+from airflow.providers.grpc.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/grpc/src/airflow/providers/grpc/version_compat.py b/providers/grpc/src/airflow/providers/grpc/version_compat.py
new file mode 100644
index 0000000000000..ab72155414178
--- /dev/null
+++ b/providers/grpc/src/airflow/providers/grpc/version_compat.py
@@ -0,0 +1,37 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator  # type: ignore[no-redef]
+
+__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseOperator"]

From 1fd66f1ab5dd2f5ebda376e808243d1bcdf562b2 Mon Sep 17 00:00:00 2001
From: fweilun <william20020503@gmail.com>
Date: Tue, 1 Jul 2025 15:02:48 +0800
Subject: [PATCH 371/381] Provider Migration: Update Apache Kylin for Airflow
 3.0 compatibility (#52572)

---
 .../apache/kylin/operators/kylin_cube.py      |  2 +-
 .../providers/apache/kylin/version_compat.py  | 45 +++++++++++++++++++
 2 files changed, 46 insertions(+), 1 deletion(-)
 create mode 100644 providers/apache/kylin/src/airflow/providers/apache/kylin/version_compat.py

diff --git a/providers/apache/kylin/src/airflow/providers/apache/kylin/operators/kylin_cube.py b/providers/apache/kylin/src/airflow/providers/apache/kylin/operators/kylin_cube.py
index 01b98995802d4..7c2b317bffe7a 100644
--- a/providers/apache/kylin/src/airflow/providers/apache/kylin/operators/kylin_cube.py
+++ b/providers/apache/kylin/src/airflow/providers/apache/kylin/operators/kylin_cube.py
@@ -25,8 +25,8 @@
 from kylinpy import kylinpy
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.apache.kylin.hooks.kylin import KylinHook
+from airflow.providers.apache.kylin.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/apache/kylin/src/airflow/providers/apache/kylin/version_compat.py b/providers/apache/kylin/src/airflow/providers/apache/kylin/version_compat.py
new file mode 100644
index 0000000000000..df1b3e7037841
--- /dev/null
+++ b/providers/apache/kylin/src/airflow/providers/apache/kylin/version_compat.py
@@ -0,0 +1,45 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator  # type: ignore[no-redef]
+
+__all__ = [
+    "AIRFLOW_V_3_0_PLUS",
+    "BaseOperator",
+]

From f009834171dcf06232e6da61efdf61c07d218b4b Mon Sep 17 00:00:00 2001
From: Karen Braganza <karenbraganza15@gmail.com>
Date: Tue, 1 Jul 2025 03:06:20 -0400
Subject: [PATCH 372/381] Update influxdb BaseOperator imports for Airflow 3.0
 compatibility (#52602)

* Update influxdb BaseOperator imports for Airflow 3.0 compatibility

* Apply suggestions from code review

---------

Co-authored-by: Kaxil Naik <kaxilnaik@gmail.com>
---
 .../providers/influxdb/operators/influxdb.py  |  2 +-
 .../providers/influxdb/version_compat.py      | 37 +++++++++++++++++++
 2 files changed, 38 insertions(+), 1 deletion(-)
 create mode 100644 providers/influxdb/src/airflow/providers/influxdb/version_compat.py

diff --git a/providers/influxdb/src/airflow/providers/influxdb/operators/influxdb.py b/providers/influxdb/src/airflow/providers/influxdb/operators/influxdb.py
index 6c3cba0b14394..62e9b75bcc9af 100644
--- a/providers/influxdb/src/airflow/providers/influxdb/operators/influxdb.py
+++ b/providers/influxdb/src/airflow/providers/influxdb/operators/influxdb.py
@@ -20,8 +20,8 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.influxdb.hooks.influxdb import InfluxDBHook
+from airflow.providers.influxdb.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/influxdb/src/airflow/providers/influxdb/version_compat.py b/providers/influxdb/src/airflow/providers/influxdb/version_compat.py
new file mode 100644
index 0000000000000..ab72155414178
--- /dev/null
+++ b/providers/influxdb/src/airflow/providers/influxdb/version_compat.py
@@ -0,0 +1,37 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator  # type: ignore[no-redef]
+
+__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseOperator"]

From efd0c9afa92424c73d149839baeb1ac52130c1a6 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Tue, 1 Jul 2025 09:11:42 +0200
Subject: [PATCH 373/381] Revert "Fix symlink handling for static assets when
 installed in editable mode with uv (#52612)" (#52620)

This reverts commit d1f44205c6201a62a73b9a44c1668dbbae99b928.
---
 .../api_fastapi/auth/managers/simple/simple_auth_manager.py      | 1 -
 airflow-core/src/airflow/api_fastapi/core_api/app.py             | 1 -
 2 files changed, 2 deletions(-)

diff --git a/airflow-core/src/airflow/api_fastapi/auth/managers/simple/simple_auth_manager.py b/airflow-core/src/airflow/api_fastapi/auth/managers/simple/simple_auth_manager.py
index c1b9048a107be..b3ce04a94b8ea 100644
--- a/airflow-core/src/airflow/api_fastapi/auth/managers/simple/simple_auth_manager.py
+++ b/airflow-core/src/airflow/api_fastapi/auth/managers/simple/simple_auth_manager.py
@@ -300,7 +300,6 @@ def get_fastapi_app(self) -> FastAPI | None:
             StaticFiles(
                 directory=directory,
                 html=True,
-                follow_symlink=True,
             ),
             name="simple_auth_manager_ui_folder",
         )
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/app.py b/airflow-core/src/airflow/api_fastapi/core_api/app.py
index 89b0fca50620e..ad8938de994b6 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/app.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/app.py
@@ -59,7 +59,6 @@ def init_views(app: FastAPI) -> None:
             "/static/i18n/locales",
             StaticFiles(directory=Path(AIRFLOW_PATH) / "airflow/ui/public/i18n/locales"),
             name="dev_i18n_static",
-            follow_symlink=True,
         )
 
     app.mount(

From cdfc44683dfa61af579200551b8a41b885cf7eff Mon Sep 17 00:00:00 2001
From: Jake Roach <116606359+jroachgolf84@users.noreply.github.com>
Date: Tue, 1 Jul 2025 04:15:07 -0400
Subject: [PATCH 374/381] Replace `models.BaseOperator` to Task SDK one for
 OpsGenie (#52564)

---
 .../providers/opsgenie/operators/opsgenie.py  |  2 +-
 .../providers/opsgenie/version_compat.py      | 42 +++++++++++++++++++
 2 files changed, 43 insertions(+), 1 deletion(-)
 create mode 100644 providers/opsgenie/src/airflow/providers/opsgenie/version_compat.py

diff --git a/providers/opsgenie/src/airflow/providers/opsgenie/operators/opsgenie.py b/providers/opsgenie/src/airflow/providers/opsgenie/operators/opsgenie.py
index 1ee2f17831787..27932f8be7aba 100644
--- a/providers/opsgenie/src/airflow/providers/opsgenie/operators/opsgenie.py
+++ b/providers/opsgenie/src/airflow/providers/opsgenie/operators/opsgenie.py
@@ -20,8 +20,8 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING, Any
 
-from airflow.models import BaseOperator
 from airflow.providers.opsgenie.hooks.opsgenie import OpsgenieAlertHook
+from airflow.providers.opsgenie.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/opsgenie/src/airflow/providers/opsgenie/version_compat.py b/providers/opsgenie/src/airflow/providers/opsgenie/version_compat.py
new file mode 100644
index 0000000000000..4f8d5e32bca4a
--- /dev/null
+++ b/providers/opsgenie/src/airflow/providers/opsgenie/version_compat.py
@@ -0,0 +1,42 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator  # type: ignore[no-redef]
+
+__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseOperator"]

From c489678571e27961d6865ed802f0f95a5fe83b4f Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Tue, 1 Jul 2025 10:18:41 +0200
Subject: [PATCH 375/381] Improve dependency report and uppgrading (#52619)

Our dependencies should be set in "upgrade to newer dependencies"
mode every time every single pyproject.toml changes - this is slower
as it triggers full builds with all versions but it also prevents some
errors when dependencies from one provider are impacting what will
be resolved in the CI image. As part of it - whenever we run the
dependency report with "source constraints" we use exactly the same
`uv sync` command as used during image build with "ugprade to
newer dependencies" - this way the report is more accurate as it
includes some dependencies from dev dependency groups that have
not been included in the current reports.
---
 dev/breeze/doc/ci/04_selective_checks.md      |   1 -
 .../airflow_breeze/utils/selective_checks.py  |  50 ++-----
 dev/breeze/tests/test_selective_checks.py     | 136 +-----------------
 dev/constraints-updated-version-check.py      |  21 ++-
 4 files changed, 29 insertions(+), 179 deletions(-)

diff --git a/dev/breeze/doc/ci/04_selective_checks.md b/dev/breeze/doc/ci/04_selective_checks.md
index 15a60d24670d0..cb2139411a480 100644
--- a/dev/breeze/doc/ci/04_selective_checks.md
+++ b/dev/breeze/doc/ci/04_selective_checks.md
@@ -170,7 +170,6 @@ GitHub Actions to pass the list of parameters to a command to execute
 | all-python-versions-list-as-string                      | List of all python versions there are available in the form of space separated string                  | 3.10 3.11                                | *    |
 | all-versions                                            | If set to true, then all python, k8s, DB versions are used for tests.                                  | false                                    |      |
 | basic-checks-only                                       | Whether to run all static checks ("false") or only basic set of static checks ("true")                 | false                                    |      |
-| build_system_changed_in_pyproject_toml                  | When builds system dependencies changed in pyproject.toml changed in the PR.                           | false                                    |      |
 | ci-image-build                                          | Whether CI image build is needed                                                                       | true                                     |      |
 | core-test-types-list-as-strings-in-json                 | Which test types should be run for unit tests for core                                                 | API Always Providers                     | *    |
 | debug-resources                                         | Whether resources usage should be printed during parallel job execution ("true"/ "false")              | false                                    |      |
diff --git a/dev/breeze/src/airflow_breeze/utils/selective_checks.py b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
index 02836fcf93891..70001ffaf66b5 100644
--- a/dev/breeze/src/airflow_breeze/utils/selective_checks.py
+++ b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
@@ -111,6 +111,7 @@ class FileGroupForCi(Enum):
     TASK_SDK_FILES = "task_sdk_files"
     GO_SDK_FILES = "go_sdk_files"
     AIRFLOW_CTL_FILES = "airflow_ctl_files"
+    ALL_PYPROJECT_TOML_FILES = "all_pyproject_toml_files"
     ALL_PYTHON_FILES = "all_python_files"
     ALL_SOURCE_FILES = "all_sources_for_tests"
     ALL_AIRFLOW_PYTHON_FILES = "all_airflow_python_files"
@@ -186,9 +187,6 @@ def __hash__(self):
             r"^airflow-core/tests/unit/kubernetes",
             r"^helm-tests",
         ],
-        FileGroupForCi.DEPENDENCY_FILES: [
-            r"^generated/provider_dependencies.json$",
-        ],
         FileGroupForCi.DOC_FILES: [
             r"^docs",
             r"^devel-common/src/docs",
@@ -266,6 +264,9 @@ def __hash__(self):
         FileGroupForCi.ALL_PROVIDER_YAML_FILES: [
             r".*/provider\.yaml$",
         ],
+        FileGroupForCi.ALL_PYPROJECT_TOML_FILES: [
+            r".*pyproject\.toml$",
+        ],
         FileGroupForCi.TESTS_UTILS_FILES: [
             r"^airflow-core/tests/unit/utils/",
             r"^devel-common/.*\.py$",
@@ -505,13 +506,8 @@ def _should_run_all_tests_and_versions(self) -> bool:
         if not self._commit_ref:
             get_console().print("[warning]Running everything in all versions as commit is missing[/]")
             return True
-        if self.hatch_build_changed:
-            get_console().print("[warning]Running everything with all versions: hatch_build.py changed[/]")
-            return True
-        if self.pyproject_toml_changed and self.build_system_changed_in_pyproject_toml:
-            get_console().print(
-                "[warning]Running everything with all versions: build-system changed in pyproject.toml[/]"
-            )
+        if self.pyproject_toml_changed:
+            get_console().print("[warning]Running everything with all versions: changed pyproject.toml[/]")
             return True
         if self.generated_dependencies_changed:
             get_console().print(
@@ -926,6 +922,8 @@ def _get_core_test_types_to_run(self) -> list[str]:
     def _get_providers_test_types_to_run(self, split_to_individual_providers: bool = False) -> list[str]:
         if self._default_branch != "main":
             return []
+        if self.upgrade_to_newer_dependencies:
+            return ["Providers"]
         if self.full_tests_needed or self.run_task_sdk_tests:
             if split_to_individual_providers:
                 return list(providers_test_type())
@@ -1069,10 +1067,6 @@ def _print_diff(old_lines: list[str], new_lines: list[str]):
     def generated_dependencies_changed(self) -> bool:
         return "generated/provider_dependencies.json" in self._files
 
-    @cached_property
-    def hatch_build_changed(self) -> bool:
-        return "hatch_build.py" in self._files
-
     @cached_property
     def any_provider_yaml_or_pyproject_toml_changed(self) -> bool:
         if not self._commit_ref:
@@ -1126,37 +1120,11 @@ def pyproject_toml_changed(self) -> bool:
         self._old_toml = tomllib.loads(old_result.stdout)
         return True
 
-    @cached_property
-    def build_system_changed_in_pyproject_toml(self) -> bool:
-        if not self.pyproject_toml_changed:
-            return False
-        new_build_backend = self._new_toml["build-system"]["build-backend"]
-        old_build_backend = self._old_toml["build-system"]["build-backend"]
-        if new_build_backend != old_build_backend:
-            get_console().print("[warning]Build backend changed in pyproject.toml [/]")
-            self._print_diff([old_build_backend], [new_build_backend])
-            return True
-        new_requires = self._new_toml["build-system"]["requires"]
-        old_requires = self._old_toml["build-system"]["requires"]
-        if new_requires != old_requires:
-            get_console().print("[warning]Build system changed in pyproject.toml [/]")
-            self._print_diff(old_requires, new_requires)
-            return True
-        return False
-
     @cached_property
     def upgrade_to_newer_dependencies(self) -> bool:
-        if len(self._matching_files(FileGroupForCi.DEPENDENCY_FILES, CI_FILE_GROUP_MATCHES)) > 0:
+        if len(self._matching_files(FileGroupForCi.ALL_PYPROJECT_TOML_FILES, CI_FILE_GROUP_MATCHES)) > 0:
             get_console().print("[warning]Upgrade to newer dependencies: Dependency files changed[/]")
             return True
-        if self.hatch_build_changed:
-            get_console().print("[warning]Upgrade to newer dependencies: hatch_build.py changed[/]")
-            return True
-        if self.build_system_changed_in_pyproject_toml:
-            get_console().print(
-                "[warning]Upgrade to newer dependencies: Build system changed in pyproject.toml[/]"
-            )
-            return True
         if self._github_event in [GithubEvents.PUSH, GithubEvents.SCHEDULE]:
             get_console().print("[warning]Upgrade to newer dependencies: Push or Schedule event[/]")
             return True
diff --git a/dev/breeze/tests/test_selective_checks.py b/dev/breeze/tests/test_selective_checks.py
index f014eb662d21a..61b6c4f3a19f2 100644
--- a/dev/breeze/tests/test_selective_checks.py
+++ b/dev/breeze/tests/test_selective_checks.py
@@ -805,34 +805,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
         ),
         (
             pytest.param(
-                ("generated/provider_dependencies.json",),
-                {
-                    "selected-providers-list-as-string": ALL_PROVIDERS_AFFECTED,
-                    "all-python-versions": "['3.10', '3.11', '3.12']",
-                    "all-python-versions-list-as-string": ALL_PYTHON_VERSIONS_AS_STRING,
-                    "python-versions": "['3.10', '3.11', '3.12']",
-                    "python-versions-list-as-string": ALL_PYTHON_VERSIONS_AS_STRING,
-                    "ci-image-build": "true",
-                    "prod-image-build": "true",
-                    "needs-helm-tests": "true",
-                    "run-tests": "true",
-                    "run-amazon-tests": "true",
-                    "docs-build": "true",
-                    "full-tests-needed": "true",
-                    "skip-pre-commits": ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
-                    "upgrade-to-newer-dependencies": "true",
-                    "core-test-types-list-as-strings-in-json": ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
-                    "providers-test-types-list-as-strings-in-json": ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
-                    "needs-mypy": "true",
-                    "mypy-checks": ALL_MYPY_CHECKS,
-                },
-                id="Everything should run - including all providers and upgrading to "
-                "newer requirements as pyproject.toml changed and all Python versions",
-            )
-        ),
-        (
-            pytest.param(
-                ("generated/provider_dependencies.json",),
+                ("pyproject.toml",),
                 {
                     "selected-providers-list-as-string": ALL_PROVIDERS_AFFECTED,
                     "all-python-versions": "['3.10', '3.11', '3.12']",
@@ -856,83 +829,6 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 id="Everything should run and upgrading to newer requirements as dependencies change",
             )
         ),
-        pytest.param(
-            ("providers/amazon/src/airflow/providers/amazon/__init__.py",),
-            {
-                "selected-providers-list-as-string": "amazon apache.hive cncf.kubernetes "
-                "common.compat common.messaging common.sql exasol ftp google http imap microsoft.azure "
-                "mongo mysql openlineage postgres salesforce ssh teradata",
-                "all-python-versions": f"['{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}']",
-                "all-python-versions-list-as-string": DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
-                "python-versions": f"['{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}']",
-                "python-versions-list-as-string": DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
-                "ci-image-build": "true",
-                "prod-image-build": "false",
-                "needs-helm-tests": "false",
-                "run-tests": "true",
-                "docs-build": "true",
-                "skip-pre-commits": ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
-                "run-kubernetes-tests": "false",
-                "upgrade-to-newer-dependencies": "false",
-                "run-amazon-tests": "true",
-                "core-test-types-list-as-strings-in-json": json.dumps(
-                    [{"description": "Always", "test_types": "Always"}]
-                ),
-                "providers-test-types-list-as-strings-in-json": json.dumps(
-                    [
-                        {
-                            "description": "amazon...google",
-                            "test_types": "Providers[amazon] Providers[apache.hive,cncf.kubernetes,"
-                            "common.compat,common.messaging,common.sql,exasol,ftp,http,imap,"
-                            "microsoft.azure,mongo,mysql,openlineage,postgres,salesforce,ssh,teradata] "
-                            "Providers[google]",
-                        }
-                    ]
-                ),
-                "needs-mypy": "true",
-                "mypy-checks": "['mypy-providers']",
-            },
-            id="Providers tests run including amazon tests if amazon provider files changed",
-        ),
-        pytest.param(
-            ("providers/amazon/src/airflow/providers/amazon/pyproject.toml",),
-            {
-                "selected-providers-list-as-string": "amazon apache.hive cncf.kubernetes "
-                "common.compat common.messaging common.sql exasol ftp google http imap microsoft.azure "
-                "mongo mysql openlineage postgres salesforce ssh teradata",
-                "all-python-versions": f"['{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}']",
-                "all-python-versions-list-as-string": DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
-                "python-versions": f"['{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}']",
-                "python-versions-list-as-string": DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
-                "ci-image-build": "true",
-                "prod-image-build": "false",
-                "needs-helm-tests": "false",
-                "run-tests": "true",
-                "docs-build": "true",
-                # no python files changed so flynt should not run
-                "skip-pre-commits": "flynt," + ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
-                "run-kubernetes-tests": "false",
-                "upgrade-to-newer-dependencies": "false",
-                "run-amazon-tests": "true",
-                "core-test-types-list-as-strings-in-json": json.dumps(
-                    [{"description": "Always", "test_types": "Always"}]
-                ),
-                "providers-test-types-list-as-strings-in-json": json.dumps(
-                    [
-                        {
-                            "description": "amazon...google",
-                            "test_types": "Providers[amazon] Providers[apache.hive,cncf.kubernetes,"
-                            "common.compat,common.messaging,common.sql,exasol,ftp,http,imap,"
-                            "microsoft.azure,mongo,mysql,openlineage,postgres,salesforce,ssh,teradata] "
-                            "Providers[google]",
-                        }
-                    ]
-                ),
-                "needs-mypy": "true",
-                "mypy-checks": "['mypy-providers']",
-            },
-            id="Providers tests run including amazon tests if only amazon pyproject.toml files changed",
-        ),
         pytest.param(
             ("providers/amazon/src/airflow/providers/amazon/provider.yaml",),
             {
@@ -1276,17 +1172,6 @@ def test_expected_output_pull_request_main(
 @pytest.mark.parametrize(
     "files, commit_ref, expected_outputs",
     [
-        (
-            pytest.param(
-                ("pyproject.toml",),
-                "2bc8e175b3a4cc84fe33e687f1a00d2a49563090",
-                {
-                    "full-tests-needed": "false",
-                    "all-versions": "false",
-                },
-                id="No full tests needed / all versions when pyproject.toml changes in insignificant way",
-            )
-        ),
         (
             pytest.param(
                 ("pyproject.toml",),
@@ -2183,16 +2068,6 @@ def test_files_provided_trigger_full_build_for_any_event_type(github_event):
             None,
             id="Regular source changed",
         ),
-        pytest.param(
-            ("pyproject.toml",),
-            {
-                "upgrade-to-newer-dependencies": "false",
-            },
-            (),
-            # In this commit only ruff configuration changed
-            "2bc8e175b3a4cc84fe33e687f1a00d2a49563090",
-            id="pyproject.toml changed but no dependency change",
-        ),
         pytest.param(
             ("providers/microsoft/azure/src/airflow/providers/microsoft/azure/provider.yaml",),
             {
@@ -2202,15 +2077,6 @@ def test_files_provided_trigger_full_build_for_any_event_type(github_event):
             None,
             id="Provider.yaml changed",
         ),
-        pytest.param(
-            ("generated/provider_dependencies.json",),
-            {
-                "upgrade-to-newer-dependencies": "true",
-            },
-            (),
-            "None",
-            id="Generated provider_dependencies changed",
-        ),
         pytest.param(
             ("airflow-core/src/airflow/models/dag.py",),
             {
diff --git a/dev/constraints-updated-version-check.py b/dev/constraints-updated-version-check.py
index 35630854b1392..52476f26e9a95 100755
--- a/dev/constraints-updated-version-check.py
+++ b/dev/constraints-updated-version-check.py
@@ -188,7 +188,15 @@ def main(
     print_table_header(format_str, headers, total_width)
 
     outdated_count, skipped_count, explanations = process_packages(
-        packages, constraints_date, mode, explain_why, verbose, col_widths, format_str, python_version
+        packages,
+        constraints_date,
+        mode,
+        explain_why,
+        verbose,
+        col_widths,
+        format_str,
+        python_version,
+        airflow_constraints_mode,
     )
 
     print_table_footer(total_width, len(packages), outdated_count, skipped_count, mode)
@@ -275,6 +283,7 @@ def process_packages(
     col_widths: dict,
     format_str: str,
     python_version: str,
+    airflow_constraints_mode: str,
 ) -> tuple[int, int, list[str]]:
     import subprocess
     import tempfile
@@ -382,6 +391,7 @@ def update_pyproject_dependency(pyproject_path: Path, pkg: str, latest_version:
                         update_pyproject_dependency,
                         verbose,
                         python_version,
+                        airflow_constraints_mode,
                     )
                     explanations.append(explanation)
             except HTTPError as e:
@@ -444,6 +454,7 @@ def explain_package_upgrade(
     update_pyproject_dependency,
     verbose: bool,
     python_version: str,
+    airflow_constraints_mode: str,
 ) -> str:
     explanation = (
         f"[bold blue]\n--- Explaining for {pkg} (current: {pinned_version}, latest: {latest_version}) ---[/]"
@@ -457,12 +468,18 @@ def preserve_pyproject_file(pyproject_path: Path):
         finally:
             pyproject_path.write_text(original_content)
 
+    additional_args = []
+    if airflow_constraints_mode == "constraints-source-providers":
+        # In case of source constraints we also need to add all development dependencies
+        # to reflect exactly what is installed in the CI image by default
+        additional_args.extend(["--group dev", "--group docs", "--group docs-gen", "--group leveldb"])
     with preserve_pyproject_file(airflow_pyproject):
         before_result = run_uv_sync(
             [
                 "uv",
                 "sync",
                 "--all-packages",
+                *additional_args,
                 "--resolution",
                 "highest",
                 "--refresh",
@@ -472,7 +489,7 @@ def preserve_pyproject_file(pyproject_path: Path):
             cwd=repo_root,
         )
         (temp_dir_path / "uv_sync_before.txt").write_text(before_result.stdout + before_result.stderr)
-        update_pyproject_dependency(airflow_pyproject, pkg, latest_version)
+        update_pyproject_dependency(airflow_pyproject, pkg, latest_version, airflow_constraints_mode)
         if verbose:
             syntax = Syntax(
                 airflow_pyproject.read_text(), "toml", theme="monokai", line_numbers=True, word_wrap=False

From 97bbf3ba031ebea162d649157cd8c5c1adcdb12e Mon Sep 17 00:00:00 2001
From: Jed Cunningham <66968678+jedcunningham@users.noreply.github.com>
Date: Tue, 1 Jul 2025 02:24:11 -0600
Subject: [PATCH 376/381] Allow more empty loops before stopping log streaming
 (#52614)

In #50715 we starting short-circuiting if we hit 5 iterations of no new
log messages. This works well, except in the scenario where there are no
log messages at all. ES log handler has it's own short-circuit for that
scenario, but it triggers based on time and that works out to ~7
iterations. Let's let ES have the first crack at it so the user gets a
better message.

Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
---
 airflow-core/src/airflow/utils/log/log_reader.py     | 3 ++-
 airflow-core/tests/unit/utils/log/test_log_reader.py | 8 ++------
 2 files changed, 4 insertions(+), 7 deletions(-)

diff --git a/airflow-core/src/airflow/utils/log/log_reader.py b/airflow-core/src/airflow/utils/log/log_reader.py
index 6ce10e387e52b..0bb61c52dbc57 100644
--- a/airflow-core/src/airflow/utils/log/log_reader.py
+++ b/airflow-core/src/airflow/utils/log/log_reader.py
@@ -45,7 +45,8 @@ class TaskLogReader:
 
     STREAM_LOOP_SLEEP_SECONDS = 1
     """Time to sleep between loops while waiting for more logs"""
-    STREAM_LOOP_STOP_AFTER_EMPTY_ITERATIONS = 5
+
+    STREAM_LOOP_STOP_AFTER_EMPTY_ITERATIONS = 10
     """Number of empty loop iterations before stopping the stream"""
 
     def read_log_chunks(
diff --git a/airflow-core/tests/unit/utils/log/test_log_reader.py b/airflow-core/tests/unit/utils/log/test_log_reader.py
index 2e330773f8292..5ca675f8d08c4 100644
--- a/airflow-core/tests/unit/utils/log/test_log_reader.py
+++ b/airflow-core/tests/unit/utils/log/test_log_reader.py
@@ -222,11 +222,7 @@ def test_read_log_stream_should_read_each_try_in_turn(self, mock_read):
     def test_read_log_stream_no_end_of_log_marker(self, mock_read):
         mock_read.side_effect = [
             (["hello"], {"end_of_log": False}),
-            ([], {"end_of_log": False}),
-            ([], {"end_of_log": False}),
-            ([], {"end_of_log": False}),
-            ([], {"end_of_log": False}),
-            ([], {"end_of_log": False}),
+            *[([], {"end_of_log": False}) for _ in range(10)],
         ]
 
         self.ti.state = TaskInstanceState.SUCCESS
@@ -237,7 +233,7 @@ def test_read_log_stream_no_end_of_log_marker(self, mock_read):
             "hello\n",
             "(Log stream stopped - End of log marker not found; logs may be incomplete.)\n",
         ]
-        assert mock_read.call_count == 6
+        assert mock_read.call_count == 11
 
     def test_supports_external_link(self):
         task_log_reader = TaskLogReader()

From 0cc667e286db41f1126f34e49d9ef8dada6266c8 Mon Sep 17 00:00:00 2001
From: Daniel Wolf <95075445+wolfdn@users.noreply.github.com>
Date: Tue, 1 Jul 2025 10:51:32 +0200
Subject: [PATCH 377/381] Honor `index_urls` when venv is created with `uv` in
 `PythonVirtualenvOperator` (#52287)

* Use `index_urls` when venv is created with `uv`

* Fix formatting

* Remove conditional creation of `pip.conf`

* Set Python package index for uv with environment variables

* Update documentation

* Fix unit tests
---
 providers/standard/docs/operators/python.rst  |  4 +++
 .../standard/utils/python_virtualenv.py       | 11 ++++++-
 .../unit/standard/operators/test_python.py    | 31 ++++++++++++++++---
 .../standard/utils/test_python_virtualenv.py  | 21 ++++++++++---
 4 files changed, 57 insertions(+), 10 deletions(-)

diff --git a/providers/standard/docs/operators/python.rst b/providers/standard/docs/operators/python.rst
index 60e2c83b5f1e7..d93606021da34 100644
--- a/providers/standard/docs/operators/python.rst
+++ b/providers/standard/docs/operators/python.rst
@@ -197,6 +197,10 @@ pip install configurations. Passed index urls replace the standard system config
 To prevent adding secrets to the private repository in your DAG code you can use the Airflow
 :doc:`apache-airflow:authoring-and-scheduling/connections`. For this purpose the connection type ``Package Index (Python)`` can be used.
 
+The first ``index_url`` in the list will be used as main index URL (``index-url`` for pip or ``default-index`` for uv) of the virtual environment setup.
+Additional URLs will be added as extra index URLs. If you provide both parameters ``index_urls`` and ``index_urls_from_connection_ids``, the first URL in
+the ``index_urls`` will be used as the main index URL and the rest will be added as extra index URLs.
+
 In the special case you want to prevent remote calls for setup of a virtual environment, pass the ``index_urls`` as empty list as ``index_urls=[]`` which
 forced pip installer to use the ``--no-index`` option.
 
diff --git a/providers/standard/src/airflow/providers/standard/utils/python_virtualenv.py b/providers/standard/src/airflow/providers/standard/utils/python_virtualenv.py
index e182df55b5d3b..356b6fba75bc1 100644
--- a/providers/standard/src/airflow/providers/standard/utils/python_virtualenv.py
+++ b/providers/standard/src/airflow/providers/standard/utils/python_virtualenv.py
@@ -118,6 +118,15 @@ def _generate_pip_conf(conf_file: Path, index_urls: list[str]) -> None:
     conf_file.write_text(f"[global]\n{pip_conf_options}")
 
 
+def _index_urls_to_uv_env_vars(index_urls: list[str] | None = None) -> dict[str, str]:
+    uv_index_env_vars = {}
+    if index_urls:
+        uv_index_env_vars = {"UV_DEFAULT_INDEX": index_urls[0]}
+        if len(index_urls) > 1:
+            uv_index_env_vars["UV_INDEX"] = " ".join(x for x in index_urls[1:])
+    return uv_index_env_vars
+
+
 def prepare_virtualenv(
     venv_directory: str,
     python_bin: str,
@@ -174,7 +183,7 @@ def prepare_virtualenv(
             )
 
     if pip_cmd:
-        execute_in_subprocess(pip_cmd)
+        execute_in_subprocess(pip_cmd, env={**os.environ, **_index_urls_to_uv_env_vars(index_urls)})
 
     return f"{venv_directory}/bin/python"
 
diff --git a/providers/standard/tests/unit/standard/operators/test_python.py b/providers/standard/tests/unit/standard/operators/test_python.py
index a04575e8bff31..6407a4b455f45 100644
--- a/providers/standard/tests/unit/standard/operators/test_python.py
+++ b/providers/standard/tests/unit/standard/operators/test_python.py
@@ -61,7 +61,7 @@
     _PythonVersionInfo,
     get_current_context,
 )
-from airflow.providers.standard.utils.python_virtualenv import prepare_virtualenv
+from airflow.providers.standard.utils.python_virtualenv import execute_in_subprocess, prepare_virtualenv
 from airflow.utils import timezone
 from airflow.utils.session import create_session
 from airflow.utils.state import DagRunState, State, TaskInstanceState
@@ -1319,17 +1319,38 @@ def f(a):
 
         self.run_as_task(f, system_site_packages=False, op_args=[4])
 
-    def test_with_index_urls(self):
+    @mock.patch(
+        "airflow.providers.standard.utils.python_virtualenv.execute_in_subprocess",
+        wraps=execute_in_subprocess,
+    )
+    def test_with_index_urls(self, wrapped_execute_in_subprocess):
         def f(a):
             import sys
             from pathlib import Path
 
             pip_conf = (Path(sys.executable).parents[1] / "pip.conf").read_text()
-            assert "abc.def.de" in pip_conf
-            assert "xyz.abc.de" in pip_conf
+            assert "first.package.index" in pip_conf
+            assert "second.package.index" in pip_conf
+            assert "third.package.index" in pip_conf
             return a
 
-        self.run_as_task(f, index_urls=["https://abc.def.de", "http://xyz.abc.de"], op_args=[4])
+        self.run_as_task(
+            f,
+            index_urls=[
+                "https://first.package.index",
+                "http://second.package.index",
+                "http://third.package.index",
+            ],
+            op_args=[4],
+        )
+
+        # first call creates venv, second call installs packages
+        package_install_call_args = wrapped_execute_in_subprocess.call_args[1]
+        assert package_install_call_args["env"]["UV_DEFAULT_INDEX"] == "https://first.package.index"
+        assert (
+            package_install_call_args["env"]["UV_INDEX"]
+            == "http://second.package.index http://third.package.index"
+        )
 
     def test_caching(self):
         def f(a):
diff --git a/providers/standard/tests/unit/standard/utils/test_python_virtualenv.py b/providers/standard/tests/unit/standard/utils/test_python_virtualenv.py
index 6e571962befbc..a7c8000b85842 100644
--- a/providers/standard/tests/unit/standard/utils/test_python_virtualenv.py
+++ b/providers/standard/tests/unit/standard/utils/test_python_virtualenv.py
@@ -142,7 +142,8 @@ def test_pip_install_options_pip(self, mock_execute_in_subprocess):
 
         assert python_bin == "/VENV/bin/python"
         mock_execute_in_subprocess.assert_called_with(
-            ["/VENV/bin/pip", "install", *pip_install_options, "apache-beam[gcp]"]
+            ["/VENV/bin/pip", "install", *pip_install_options, "apache-beam[gcp]"],
+            env=mock.ANY,
         )
 
     @mock.patch("airflow.providers.standard.utils.python_virtualenv.execute_in_subprocess")
@@ -159,7 +160,16 @@ def test_pip_install_options_uv(self, mock_execute_in_subprocess):
 
         assert python_bin == "/VENV/bin/python"
         mock_execute_in_subprocess.assert_called_with(
-            ["uv", "pip", "install", "--python", "/VENV/bin/python", *pip_install_options, "apache-beam[gcp]"]
+            [
+                "uv",
+                "pip",
+                "install",
+                "--python",
+                "/VENV/bin/python",
+                *pip_install_options,
+                "apache-beam[gcp]",
+            ],
+            env=mock.ANY,
         )
 
     @mock.patch("airflow.providers.standard.utils.python_virtualenv.execute_in_subprocess")
@@ -175,7 +185,9 @@ def test_should_create_virtualenv_with_extra_packages_pip(self, mock_execute_in_
 
         mock_execute_in_subprocess.assert_any_call(["pythonVER", "-m", "venv", "/VENV"])
 
-        mock_execute_in_subprocess.assert_called_with(["/VENV/bin/pip", "install", "apache-beam[gcp]"])
+        mock_execute_in_subprocess.assert_called_with(
+            ["/VENV/bin/pip", "install", "apache-beam[gcp]"], env=mock.ANY
+        )
 
     @mock.patch("airflow.providers.standard.utils.python_virtualenv.execute_in_subprocess")
     @conf_vars({("standard", "venv_install_method"): "uv"})
@@ -189,7 +201,8 @@ def test_should_create_virtualenv_with_extra_packages_uv(self, mock_execute_in_s
         assert python_bin == "/VENV/bin/python"
 
         mock_execute_in_subprocess.assert_called_with(
-            ["uv", "pip", "install", "--python", "/VENV/bin/python", "apache-beam[gcp]"]
+            ["uv", "pip", "install", "--python", "/VENV/bin/python", "apache-beam[gcp]"],
+            env=mock.ANY,
         )
 
     @pytest.mark.parametrize(

From d49afebfd1710bb0085366b37cbc5969b77095ff Mon Sep 17 00:00:00 2001
From: Nataneljpwd <104094207+Nataneljpwd@users.noreply.github.com>
Date: Tue, 1 Jul 2025 12:51:59 +0300
Subject: [PATCH 378/381] Provider Migration: Update cassandra for Airflow 3.0
 compatibility (#52623)

Co-authored-by: Natanel Rudyuklakir <natanelrudyuklakir@gmail.com>
---
 .../airflow/providers/apache/cassandra/sensors/record.py   | 7 +------
 .../airflow/providers/apache/cassandra/sensors/table.py    | 7 +------
 .../airflow/providers/apache/cassandra/version_compat.py   | 7 +++++++
 3 files changed, 9 insertions(+), 12 deletions(-)

diff --git a/providers/apache/cassandra/src/airflow/providers/apache/cassandra/sensors/record.py b/providers/apache/cassandra/src/airflow/providers/apache/cassandra/sensors/record.py
index 1c3a55b694991..cb46283fb2631 100644
--- a/providers/apache/cassandra/src/airflow/providers/apache/cassandra/sensors/record.py
+++ b/providers/apache/cassandra/src/airflow/providers/apache/cassandra/sensors/record.py
@@ -21,12 +21,7 @@
 from typing import TYPE_CHECKING, Any
 
 from airflow.providers.apache.cassandra.hooks.cassandra import CassandraHook
-from airflow.providers.apache.cassandra.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+from airflow.providers.apache.cassandra.version_compat import BaseSensorOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/apache/cassandra/src/airflow/providers/apache/cassandra/sensors/table.py b/providers/apache/cassandra/src/airflow/providers/apache/cassandra/sensors/table.py
index 18297f0bef482..89bd81def30dd 100644
--- a/providers/apache/cassandra/src/airflow/providers/apache/cassandra/sensors/table.py
+++ b/providers/apache/cassandra/src/airflow/providers/apache/cassandra/sensors/table.py
@@ -21,12 +21,7 @@
 from typing import TYPE_CHECKING, Any
 
 from airflow.providers.apache.cassandra.hooks.cassandra import CassandraHook
-from airflow.providers.apache.cassandra.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+from airflow.providers.apache.cassandra.version_compat import BaseSensorOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/apache/cassandra/src/airflow/providers/apache/cassandra/version_compat.py b/providers/apache/cassandra/src/airflow/providers/apache/cassandra/version_compat.py
index 48d122b669696..319d86aca697c 100644
--- a/providers/apache/cassandra/src/airflow/providers/apache/cassandra/version_compat.py
+++ b/providers/apache/cassandra/src/airflow/providers/apache/cassandra/version_compat.py
@@ -33,3 +33,10 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseSensorOperator
+else:
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+
+__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseSensorOperator"]

From 87e34a69638e39c46697cd483249771ede793568 Mon Sep 17 00:00:00 2001
From: Jarek Potiuk <jarek@potiuk.com>
Date: Tue, 1 Jul 2025 12:19:11 +0200
Subject: [PATCH 379/381] Bump pyarrow to 16.1.0 minimum version for several
 providers (#52635)

Pyarrow < 16.1.0 does not play well with numpy 2. Bumping it to
16.1.0 as minimum version should make compatibility tests to not
downgrade to versions that are not compoatible when numpy 2 is
already installed. It should also prevent our users from accidentally
downgrading pyarrow or not upgrading it when numpy is upgraded
to >= 2.0.0.
---
 providers/apache/beam/pyproject.toml | 2 +-
 providers/databricks/pyproject.toml  | 2 +-
 providers/google/pyproject.toml      | 2 +-
 providers/snowflake/pyproject.toml   | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/providers/apache/beam/pyproject.toml b/providers/apache/beam/pyproject.toml
index 590bbe6b0429a..af174e291d23c 100644
--- a/providers/apache/beam/pyproject.toml
+++ b/providers/apache/beam/pyproject.toml
@@ -58,7 +58,7 @@ requires-python = "~=3.10"
 dependencies = [
     "apache-airflow>=2.10.0",
     'apache-beam>=2.60.0',
-    "pyarrow>=14.0.1",
+    "pyarrow>=16.1.0",
     "numpy>=1.26.0",
 
 ]
diff --git a/providers/databricks/pyproject.toml b/providers/databricks/pyproject.toml
index 632dd6bf8bf4c..e6edcc34943d8 100644
--- a/providers/databricks/pyproject.toml
+++ b/providers/databricks/pyproject.toml
@@ -66,7 +66,7 @@ dependencies = [
     "mergedeep>=1.3.4",
     'pandas>=2.1.2; python_version <"3.13"',
     'pandas>=2.2.3; python_version >="3.13"',
-    "pyarrow>=14.0.1",
+    "pyarrow>=16.1.0",
 ]
 
 # The optional dependencies should be modified in place in the generated file
diff --git a/providers/google/pyproject.toml b/providers/google/pyproject.toml
index b46d9146dadf8..0de82f05454f0 100644
--- a/providers/google/pyproject.toml
+++ b/providers/google/pyproject.toml
@@ -129,7 +129,7 @@ dependencies = [
     # further constrain it since older versions are buggy.
     "proto-plus>=1.19.6",
     # Used to write parquet files by BaseSqlToGCSOperator
-    "pyarrow>=14.0.1",
+    "pyarrow>=16.1.0",
     "python-slugify>=7.0.0",
     "PyOpenSSL>=23.0.0",
     "sqlalchemy-bigquery>=1.2.1",
diff --git a/providers/snowflake/pyproject.toml b/providers/snowflake/pyproject.toml
index 16f9b6a73a4b5..ef0b04b974a9c 100644
--- a/providers/snowflake/pyproject.toml
+++ b/providers/snowflake/pyproject.toml
@@ -61,7 +61,7 @@ dependencies = [
     "apache-airflow-providers-common-sql>=1.21.0",
     'pandas>=2.1.2; python_version <"3.13"',
     'pandas>=2.2.3; python_version >="3.13"',
-    "pyarrow>=14.0.1",
+    "pyarrow>=16.1.0",
     "snowflake-connector-python>=3.7.1",
     "snowflake-sqlalchemy>=1.4.0",
     "snowflake-snowpark-python>=1.17.0;python_version<'3.12'",

From dc47a11df91f9a1e59ca3b50e49c21bf781ab979 Mon Sep 17 00:00:00 2001
From: Ash Berlin-Taylor <ash@apache.org>
Date: Tue, 1 Jul 2025 15:33:53 +0100
Subject: [PATCH 380/381] Disable UP038 ruff rule and revert mandatory `X | Y`
 in insintance checks (#52644)

This came in to effect once we swapped to Py 3.10 as the minimum version.

This is inplace because of the ruff rule [UP038], and as we have discovered
(after changing it to this style in the first place) the docs for the rule
say:

> **Warning: This rule is deprecated and will be removed in a future release.**

So lets change it back

[UP038]:  https://docs.astral.sh/ruff/rules/non-pep604-isinstance/#deprecation
---
 airflow-core/src/airflow/api_fastapi/auth/tokens.py  |  2 +-
 .../src/airflow/api_fastapi/common/parameters.py     |  2 +-
 .../core_api/services/public/variables.py            |  2 +-
 .../airflow/api_fastapi/core_api/services/ui/grid.py |  2 +-
 .../execution_api/routes/task_instances.py           |  2 +-
 .../src/airflow/cli/commands/plugins_command.py      |  2 +-
 airflow-core/src/airflow/cli/simple_table.py         |  2 +-
 airflow-core/src/airflow/exceptions.py               |  2 +-
 airflow-core/src/airflow/models/asset.py             |  4 ++--
 airflow-core/src/airflow/models/dag.py               |  6 +++---
 airflow-core/src/airflow/models/dagbag.py            |  4 ++--
 airflow-core/src/airflow/models/expandinput.py       |  2 +-
 airflow-core/src/airflow/models/taskmap.py           |  2 +-
 .../src/airflow/serialization/serialized_objects.py  |  6 +++---
 .../airflow/serialization/serializers/datetime.py    |  2 +-
 .../airflow/serialization/serializers/kubernetes.py  |  2 +-
 .../src/airflow/serialization/serializers/numpy.py   |  2 +-
 .../airflow/serialization/serializers/timezone.py    |  2 +-
 airflow-core/src/airflow/utils/dot_renderer.py       |  2 +-
 airflow-core/src/airflow/utils/helpers.py            |  4 ++--
 airflow-core/src/airflow/utils/log/colored_log.py    |  4 ++--
 airflow-core/src/airflow/utils/setup_teardown.py     |  2 +-
 airflow-core/src/airflow/utils/sqlalchemy.py         |  4 ++--
 .../tests/unit/always/test_project_structure.py      |  2 +-
 .../core_api/routes/public/test_variables.py         |  2 +-
 .../unit/serialization/test_dag_serialization.py     |  4 ++--
 dev/breeze/src/airflow_breeze/utils/parallel.py      |  2 +-
 .../src/sphinx_exts/operators_and_hooks_ref.py       |  2 +-
 devel-common/src/sphinx_exts/providers_extensions.py |  2 +-
 devel-common/src/sphinx_exts/removemarktransform.py  |  2 +-
 .../src/sphinx_exts/substitution_extensions.py       |  2 +-
 .../tests_common/_internals/forbidden_warnings.py    |  2 +-
 .../alibaba/cloud/hooks/analyticdb_spark.py          |  6 +++---
 .../src/airflow/providers/amazon/aws/hooks/s3.py     |  2 +-
 .../src/airflow/providers/amazon/aws/hooks/sns.py    |  2 +-
 .../amazon/aws/log/cloudwatch_task_handler.py        |  2 +-
 .../src/airflow/providers/amazon/aws/operators/s3.py |  2 +-
 .../providers/amazon/aws/utils/connection_wrapper.py |  2 +-
 .../src/airflow/providers/apache/livy/hooks/livy.py  | 12 ++++++------
 .../providers/databricks/hooks/databricks_base.py    |  4 ++--
 .../databricks/sensors/databricks_partition.py       |  4 ++--
 .../airflow/providers/databricks/utils/databricks.py |  6 +++---
 .../src/airflow/providers/dbt/cloud/hooks/dbt.py     |  2 +-
 .../providers/elasticsearch/log/es_response.py       |  2 +-
 .../log/elasticmock/utilities/__init__.py            |  6 +++---
 .../providers/google/cloud/hooks/vertex_ai/ray.py    |  2 +-
 .../src/airflow/providers/google/cloud/links/base.py |  2 +-
 .../providers/google/cloud/sensors/bigquery_dts.py   |  2 +-
 .../google/cloud/transfers/cassandra_to_gcs.py       |  6 +++---
 .../providers/google/cloud/transfers/mssql_to_gcs.py |  2 +-
 .../providers/google/common/hooks/base_google.py     |  2 +-
 .../google/suite/transfers/sql_to_sheets.py          |  2 +-
 .../src/airflow/providers/openai/operators/openai.py |  2 +-
 .../src/airflow/providers/openlineage/utils/utils.py |  8 ++++----
 .../airflow/providers/opensearch/log/os_response.py  |  2 +-
 .../src/airflow/providers/oracle/hooks/oracle.py     |  4 ++--
 .../src/airflow/providers/postgres/hooks/postgres.py |  2 +-
 .../airflow/providers/snowflake/hooks/snowflake.py   |  2 +-
 .../providers/standard/operators/trigger_dagrun.py   |  2 +-
 .../providers/standard/sensors/external_task.py      |  2 +-
 .../airflow/providers/standard/utils/skipmixin.py    |  2 +-
 .../src/airflow/providers/teradata/hooks/bteq.py     |  4 ++--
 pyproject.toml                                       |  1 +
 scripts/ci/pre_commit/chart_schema.py                |  2 +-
 scripts/ci/pre_commit/check_deprecations.py          |  4 ++--
 scripts/in_container/run_migration_reference.py      |  2 +-
 task-sdk/src/airflow/sdk/bases/decorator.py          |  2 +-
 task-sdk/src/airflow/sdk/bases/sensor.py             | 10 +++++-----
 .../sdk/definitions/_internal/abstractoperator.py    |  2 +-
 .../airflow/sdk/definitions/_internal/expandinput.py |  6 +++---
 .../src/airflow/sdk/definitions/_internal/node.py    |  2 +-
 task-sdk/src/airflow/sdk/definitions/dag.py          |  4 ++--
 .../airflow/sdk/definitions/decorators/task_group.py |  2 +-
 task-sdk/src/airflow/sdk/definitions/edges.py        |  2 +-
 .../src/airflow/sdk/definitions/mappedoperator.py    |  6 +++---
 task-sdk/src/airflow/sdk/definitions/xcom_arg.py     |  8 ++++----
 task-sdk/src/airflow/sdk/execution_time/context.py   |  2 +-
 .../src/airflow/sdk/execution_time/secrets_masker.py |  4 ++--
 .../src/airflow/sdk/execution_time/task_runner.py    |  6 +++---
 task-sdk/tests/conftest.py                           |  2 +-
 task-sdk/tests/task_sdk/definitions/conftest.py      |  2 +-
 task-sdk/tests/task_sdk/definitions/test_asset.py    |  2 +-
 82 files changed, 128 insertions(+), 127 deletions(-)

diff --git a/airflow-core/src/airflow/api_fastapi/auth/tokens.py b/airflow-core/src/airflow/api_fastapi/auth/tokens.py
index dfcef7318313a..f80b7513d8ee8 100644
--- a/airflow-core/src/airflow/api_fastapi/auth/tokens.py
+++ b/airflow-core/src/airflow/api_fastapi/auth/tokens.py
@@ -68,7 +68,7 @@ def key_to_jwk_dict(key: AllowedKeys, kid: str | None = None):
     from cryptography.hazmat.primitives.asymmetric.rsa import RSAPrivateKey, RSAPublicKey
     from jwt.algorithms import OKPAlgorithm, RSAAlgorithm
 
-    if isinstance(key, RSAPrivateKey | Ed25519PrivateKey):
+    if isinstance(key, (RSAPrivateKey, Ed25519PrivateKey)):
         key = key.public_key()
 
     if isinstance(key, RSAPublicKey):
diff --git a/airflow-core/src/airflow/api_fastapi/common/parameters.py b/airflow-core/src/airflow/api_fastapi/common/parameters.py
index c6e3bc945b020..14ab5efa8ef4d 100644
--- a/airflow-core/src/airflow/api_fastapi/common/parameters.py
+++ b/airflow-core/src/airflow/api_fastapi/common/parameters.py
@@ -264,7 +264,7 @@ def __init__(
         self.filter_option: FilterOptionEnum = filter_option
 
     def to_orm(self, select: Select) -> Select:
-        if isinstance(self.value, list | str) and not self.value and self.skip_none:
+        if isinstance(self.value, (list, str)) and not self.value and self.skip_none:
             return select
         if self.value is None and self.skip_none:
             return select
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/services/public/variables.py b/airflow-core/src/airflow/api_fastapi/core_api/services/public/variables.py
index 00bbf543288fe..0208ea1a0a5f7 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/services/public/variables.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/services/public/variables.py
@@ -64,7 +64,7 @@ def handle_bulk_create(self, action: BulkCreateAction, results: BulkActionRespon
 
             for variable in action.entities:
                 if variable.key in create_keys:
-                    should_serialize_json = isinstance(variable.value, dict | list)
+                    should_serialize_json = isinstance(variable.value, (dict, list))
                     Variable.set(
                         key=variable.key,
                         value=variable.value,
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/services/ui/grid.py b/airflow-core/src/airflow/api_fastapi/core_api/services/ui/grid.py
index 9c356e9c3ad84..a69cafb7bbbda 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/services/ui/grid.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/services/ui/grid.py
@@ -133,7 +133,7 @@ def get_child_task_map(parent_task_id: str, task_node_map: dict[str, dict[str, A
 
 
 def _count_tis(node: int | MappedTaskGroup | MappedOperator, run_id: str, session: SessionDep) -> int:
-    if not isinstance(node, MappedTaskGroup | MappedOperator):
+    if not isinstance(node, (MappedTaskGroup, MappedOperator)):
         return node
     with contextlib.suppress(NotFullyPopulated, NotMapped):
         return DBBaseOperator.get_mapped_ti_count(node, run_id=run_id, session=session)
diff --git a/airflow-core/src/airflow/api_fastapi/execution_api/routes/task_instances.py b/airflow-core/src/airflow/api_fastapi/execution_api/routes/task_instances.py
index 0a57e604a6eb6..e22d0a5f34d0d 100644
--- a/airflow-core/src/airflow/api_fastapi/execution_api/routes/task_instances.py
+++ b/airflow-core/src/airflow/api_fastapi/execution_api/routes/task_instances.py
@@ -434,7 +434,7 @@ def _create_ti_state_update_query_and_update_state(
     dag_bag: DagBagDep,
     dag_id: str,
 ) -> tuple[Update, TaskInstanceState]:
-    if isinstance(ti_patch_payload, TITerminalStatePayload | TIRetryStatePayload | TISuccessStatePayload):
+    if isinstance(ti_patch_payload, (TITerminalStatePayload, TIRetryStatePayload, TISuccessStatePayload)):
         ti = session.get(TI, ti_id_str)
         updated_state = ti_patch_payload.state
         query = TI.duration_expression_update(ti_patch_payload.end_date, query, session.bind)
diff --git a/airflow-core/src/airflow/cli/commands/plugins_command.py b/airflow-core/src/airflow/cli/commands/plugins_command.py
index f26546439e940..29dd75674afe0 100644
--- a/airflow-core/src/airflow/cli/commands/plugins_command.py
+++ b/airflow-core/src/airflow/cli/commands/plugins_command.py
@@ -27,7 +27,7 @@
 
 
 def _get_name(class_like_object) -> str:
-    if isinstance(class_like_object, str | PluginsDirectorySource):
+    if isinstance(class_like_object, (str, PluginsDirectorySource)):
         return str(class_like_object)
     if inspect.isclass(class_like_object):
         return class_like_object.__name__
diff --git a/airflow-core/src/airflow/cli/simple_table.py b/airflow-core/src/airflow/cli/simple_table.py
index 01025f3d64762..53125e3f74830 100644
--- a/airflow-core/src/airflow/cli/simple_table.py
+++ b/airflow-core/src/airflow/cli/simple_table.py
@@ -84,7 +84,7 @@ def print_as_plain_table(self, data: list[dict]):
         print(output)
 
     def _normalize_data(self, value: Any, output: str) -> list | str | dict | None:
-        if isinstance(value, tuple | list):
+        if isinstance(value, (tuple, list)):
             if output == "table":
                 return ",".join(str(self._normalize_data(x, output)) for x in value)
             return [self._normalize_data(x, output) for x in value]
diff --git a/airflow-core/src/airflow/exceptions.py b/airflow-core/src/airflow/exceptions.py
index 2d12b0baabf32..045f9647ade76 100644
--- a/airflow-core/src/airflow/exceptions.py
+++ b/airflow-core/src/airflow/exceptions.py
@@ -476,7 +476,7 @@ def __init__(
         self.kwargs = kwargs
         self.timeout: timedelta | None
         # Check timeout type at runtime
-        if isinstance(timeout, int | float):
+        if isinstance(timeout, (int, float)):
             self.timeout = timedelta(seconds=timeout)
         else:
             self.timeout = timeout
diff --git a/airflow-core/src/airflow/models/asset.py b/airflow-core/src/airflow/models/asset.py
index 79cf8ef28a622..a345ebe7995d3 100644
--- a/airflow-core/src/airflow/models/asset.py
+++ b/airflow-core/src/airflow/models/asset.py
@@ -209,7 +209,7 @@ def __hash__(self):
     def __eq__(self, other: object) -> bool:
         from airflow.sdk.definitions.asset import AssetAlias
 
-        if isinstance(other, self.__class__ | AssetAlias):
+        if isinstance(other, (self.__class__, AssetAlias)):
             return self.name == other.name
         return NotImplemented
 
@@ -306,7 +306,7 @@ def __init__(self, name: str = "", uri: str = "", **kwargs):
     def __eq__(self, other: object) -> bool:
         from airflow.sdk.definitions.asset import Asset
 
-        if isinstance(other, self.__class__ | Asset):
+        if isinstance(other, (self.__class__, Asset)):
             return self.name == other.name and self.uri == other.uri
         return NotImplemented
 
diff --git a/airflow-core/src/airflow/models/dag.py b/airflow-core/src/airflow/models/dag.py
index a74a68ac2c493..2fe689e6168d5 100644
--- a/airflow-core/src/airflow/models/dag.py
+++ b/airflow-core/src/airflow/models/dag.py
@@ -463,7 +463,7 @@ def _upgrade_outdated_dag_access_control(access_control=None):
         for role, perms in access_control.items():
             if packaging_version.parse(FAB_VERSION) >= packaging_version.parse("1.3.0"):
                 updated_access_control[role] = updated_access_control.get(role, {})
-                if isinstance(perms, set | list):
+                if isinstance(perms, (set, list)):
                     # Support for old-style access_control where only the actions are specified
                     updated_access_control[role][permissions.RESOURCE_DAG] = set(perms)
                 else:
@@ -541,7 +541,7 @@ def infer_automated_data_interval(self, logical_date: datetime) -> DataInterval:
         :meta private:
         """
         timetable_type = type(self.timetable)
-        if issubclass(timetable_type, NullTimetable | OnceTimetable | AssetTriggeredTimetable):
+        if issubclass(timetable_type, (NullTimetable, OnceTimetable, AssetTriggeredTimetable)):
             return DataInterval.exact(timezone.coerce_datetime(logical_date))
         start = timezone.coerce_datetime(logical_date)
         if issubclass(timetable_type, CronDataIntervalTimetable):
@@ -959,7 +959,7 @@ def _get_task_instances(
             tis = tis.where(DagRun.logical_date <= end_date)
 
         if state:
-            if isinstance(state, str | TaskInstanceState):
+            if isinstance(state, (str, TaskInstanceState)):
                 tis = tis.where(TaskInstance.state == state)
             elif len(state) == 1:
                 tis = tis.where(TaskInstance.state == state[0])
diff --git a/airflow-core/src/airflow/models/dagbag.py b/airflow-core/src/airflow/models/dagbag.py
index df13c38581d76..83fc47444c179 100644
--- a/airflow-core/src/airflow/models/dagbag.py
+++ b/airflow-core/src/airflow/models/dagbag.py
@@ -448,7 +448,7 @@ def parse(mod_name, filepath):
 
         dagbag_import_timeout = settings.get_dagbag_import_timeout(filepath)
 
-        if not isinstance(dagbag_import_timeout, int | float):
+        if not isinstance(dagbag_import_timeout, (int, float)):
             raise TypeError(
                 f"Value ({dagbag_import_timeout}) from get_dagbag_import_timeout must be int or float"
             )
@@ -520,7 +520,7 @@ def _process_modules(self, filepath, mods, file_last_changed_on_disk):
         from airflow.sdk import DAG as SDKDAG
         from airflow.sdk.definitions._internal.contextmanager import DagContext
 
-        top_level_dags = {(o, m) for m in mods for o in m.__dict__.values() if isinstance(o, DAG | SDKDAG)}
+        top_level_dags = {(o, m) for m in mods for o in m.__dict__.values() if isinstance(o, (DAG, SDKDAG))}
 
         top_level_dags.update(DagContext.autoregistered_dags)
 
diff --git a/airflow-core/src/airflow/models/expandinput.py b/airflow-core/src/airflow/models/expandinput.py
index 46b70be79a954..803a8fe294c6d 100644
--- a/airflow-core/src/airflow/models/expandinput.py
+++ b/airflow-core/src/airflow/models/expandinput.py
@@ -54,7 +54,7 @@
 def _needs_run_time_resolution(v: OperatorExpandArgument) -> TypeGuard[MappedArgument | SchedulerXComArg]:
     from airflow.models.xcom_arg import SchedulerXComArg
 
-    return isinstance(v, MappedArgument | SchedulerXComArg)
+    return isinstance(v, (MappedArgument, SchedulerXComArg))
 
 
 @attrs.define
diff --git a/airflow-core/src/airflow/models/taskmap.py b/airflow-core/src/airflow/models/taskmap.py
index ff3b94a84dacf..f0fd4c0231b70 100644
--- a/airflow-core/src/airflow/models/taskmap.py
+++ b/airflow-core/src/airflow/models/taskmap.py
@@ -137,7 +137,7 @@ def expand_mapped_task(cls, task, run_id: str, *, session: Session) -> tuple[Seq
         from airflow.sdk.definitions.mappedoperator import MappedOperator
         from airflow.settings import task_instance_mutation_hook
 
-        if not isinstance(task, BaseOperator | MappedOperator):
+        if not isinstance(task, (BaseOperator, MappedOperator)):
             raise RuntimeError(
                 f"cannot expand unrecognized operator type {type(task).__module__}.{type(task).__name__}"
             )
diff --git a/airflow-core/src/airflow/serialization/serialized_objects.py b/airflow-core/src/airflow/serialization/serialized_objects.py
index 33676d58bec06..1db0a91236199 100644
--- a/airflow-core/src/airflow/serialization/serialized_objects.py
+++ b/airflow-core/src/airflow/serialization/serialized_objects.py
@@ -744,7 +744,7 @@ def serialize(
             return cls._encode(var.timestamp(), type_=DAT.DATETIME)
         elif isinstance(var, datetime.timedelta):
             return cls._encode(var.total_seconds(), type_=DAT.TIMEDELTA)
-        elif isinstance(var, Timezone | FixedTimezone):
+        elif isinstance(var, (Timezone, FixedTimezone)):
             return cls._encode(encode_timezone(var), type_=DAT.TIMEZONE)
         elif isinstance(var, relativedelta.relativedelta):
             return cls._encode(encode_relativedelta(var), type_=DAT.RELATIVEDELTA)
@@ -753,7 +753,7 @@ def serialize(
                 var._asdict(),
                 type_=DAT.TASK_INSTANCE_KEY,
             )
-        elif isinstance(var, AirflowException | TaskDeferred) and hasattr(var, "serialize"):
+        elif isinstance(var, (AirflowException, TaskDeferred)) and hasattr(var, "serialize"):
             exc_cls_name, args, kwargs = var.serialize()
             return cls._encode(
                 cls.serialize(
@@ -762,7 +762,7 @@ def serialize(
                 ),
                 type_=DAT.AIRFLOW_EXC_SER,
             )
-        elif isinstance(var, KeyError | AttributeError):
+        elif isinstance(var, (KeyError, AttributeError)):
             return cls._encode(
                 cls.serialize(
                     {
diff --git a/airflow-core/src/airflow/serialization/serializers/datetime.py b/airflow-core/src/airflow/serialization/serializers/datetime.py
index a99c690f3cb72..69058b8c02a8b 100644
--- a/airflow-core/src/airflow/serialization/serializers/datetime.py
+++ b/airflow-core/src/airflow/serialization/serializers/datetime.py
@@ -92,7 +92,7 @@ def deserialize(classname: str, version: int, data: dict | str) -> datetime.date
     if classname == qualname(DateTime) and isinstance(data, dict):
         return DateTime.fromtimestamp(float(data[TIMESTAMP]), tz=tz)
 
-    if classname == qualname(datetime.timedelta) and isinstance(data, str | float):
+    if classname == qualname(datetime.timedelta) and isinstance(data, (str, float)):
         return datetime.timedelta(seconds=float(data))
 
     if classname == qualname(datetime.date) and isinstance(data, str):
diff --git a/airflow-core/src/airflow/serialization/serializers/kubernetes.py b/airflow-core/src/airflow/serialization/serializers/kubernetes.py
index 908bd0dc29e17..faa2312ac7a81 100644
--- a/airflow-core/src/airflow/serialization/serializers/kubernetes.py
+++ b/airflow-core/src/airflow/serialization/serializers/kubernetes.py
@@ -43,7 +43,7 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
     if not k8s:
         return "", "", 0, False
 
-    if isinstance(o, k8s.V1Pod | k8s.V1ResourceRequirements):
+    if isinstance(o, (k8s.V1Pod, k8s.V1ResourceRequirements)):
         from airflow.providers.cncf.kubernetes.pod_generator import PodGenerator
 
         # We're running this in an except block, so we don't want it to fail
diff --git a/airflow-core/src/airflow/serialization/serializers/numpy.py b/airflow-core/src/airflow/serialization/serializers/numpy.py
index 6e317b47d3885..1e32f90a081aa 100644
--- a/airflow-core/src/airflow/serialization/serializers/numpy.py
+++ b/airflow-core/src/airflow/serialization/serializers/numpy.py
@@ -72,7 +72,7 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
     if isinstance(o, np.bool_):
         return bool(o), name, __version__, True
 
-    if isinstance(o, np.float16 | np.float32 | np.float64 | np.complex64 | np.complex128):
+    if isinstance(o, (np.float16, np.float32, np.float64, np.complex64, np.complex128)):
         return float(o), name, __version__, True
 
     return "", "", 0, False
diff --git a/airflow-core/src/airflow/serialization/serializers/timezone.py b/airflow-core/src/airflow/serialization/serializers/timezone.py
index ca2f25ed59010..9f2ef7cef65ac 100644
--- a/airflow-core/src/airflow/serialization/serializers/timezone.py
+++ b/airflow-core/src/airflow/serialization/serializers/timezone.py
@@ -70,7 +70,7 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
 def deserialize(classname: str, version: int, data: object) -> Any:
     from airflow.utils.timezone import parse_timezone
 
-    if not isinstance(data, str | int):
+    if not isinstance(data, (str, int)):
         raise TypeError(f"{data} is not of type int or str but of {type(data)}")
 
     if version > __version__:
diff --git a/airflow-core/src/airflow/utils/dot_renderer.py b/airflow-core/src/airflow/utils/dot_renderer.py
index f54ea23935637..fc1685b68b61f 100644
--- a/airflow-core/src/airflow/utils/dot_renderer.py
+++ b/airflow-core/src/airflow/utils/dot_renderer.py
@@ -134,7 +134,7 @@ def _draw_nodes(
     node: DependencyMixin, parent_graph: graphviz.Digraph, states_by_task_id: dict[str, str] | None
 ) -> None:
     """Draw the node and its children on the given parent_graph recursively."""
-    if isinstance(node, BaseOperator | MappedOperator):
+    if isinstance(node, (BaseOperator, MappedOperator)):
         _draw_task(node, parent_graph, states_by_task_id)
     else:
         if not isinstance(node, TaskGroup):
diff --git a/airflow-core/src/airflow/utils/helpers.py b/airflow-core/src/airflow/utils/helpers.py
index aa111cf07733b..00d865ff9fcf5 100644
--- a/airflow-core/src/airflow/utils/helpers.py
+++ b/airflow-core/src/airflow/utils/helpers.py
@@ -300,7 +300,7 @@ def is_empty(x):
         for k, v in val.items():
             if is_empty(v):
                 continue
-            if isinstance(v, list | dict):
+            if isinstance(v, (list, dict)):
                 new_val = prune_dict(v, mode=mode)
                 if not is_empty(new_val):
                     new_dict[k] = new_val
@@ -312,7 +312,7 @@ def is_empty(x):
         for v in val:
             if is_empty(v):
                 continue
-            if isinstance(v, list | dict):
+            if isinstance(v, (list, dict)):
                 new_val = prune_dict(v, mode=mode)
                 if not is_empty(new_val):
                     new_list.append(new_val)
diff --git a/airflow-core/src/airflow/utils/log/colored_log.py b/airflow-core/src/airflow/utils/log/colored_log.py
index fa3c9d52c2609..bd9763ce4553a 100644
--- a/airflow-core/src/airflow/utils/log/colored_log.py
+++ b/airflow-core/src/airflow/utils/log/colored_log.py
@@ -58,7 +58,7 @@ def __init__(self, *args, **kwargs):
 
     @staticmethod
     def _color_arg(arg: Any) -> str | float | int:
-        if isinstance(arg, int | float):
+        if isinstance(arg, (int, float)):
             # In case of %d or %f formatting
             return arg
         return BOLD_ON + str(arg) + BOLD_OFF
@@ -69,7 +69,7 @@ def _count_number_of_arguments_in_message(record: LogRecord) -> int:
         return len(matches) if matches else 0
 
     def _color_record_args(self, record: LogRecord) -> LogRecord:
-        if isinstance(record.args, tuple | list):
+        if isinstance(record.args, (tuple, list)):
             record.args = tuple(self._color_arg(arg) for arg in record.args)
         elif isinstance(record.args, dict):
             if self._count_number_of_arguments_in_message(record) > 1:
diff --git a/airflow-core/src/airflow/utils/setup_teardown.py b/airflow-core/src/airflow/utils/setup_teardown.py
index d2273c0c3f705..b62e3ab298b40 100644
--- a/airflow-core/src/airflow/utils/setup_teardown.py
+++ b/airflow-core/src/airflow/utils/setup_teardown.py
@@ -114,7 +114,7 @@ def set_dependency(
         new_task: AbstractOperator | list[AbstractOperator],
         upstream=True,
     ):
-        if isinstance(new_task, list | tuple):
+        if isinstance(new_task, (list, tuple)):
             for task in new_task:
                 cls._set_dependency(task, receiving_task, upstream)
         else:
diff --git a/airflow-core/src/airflow/utils/sqlalchemy.py b/airflow-core/src/airflow/utils/sqlalchemy.py
index a75edafebb567..d08307db14bf5 100644
--- a/airflow-core/src/airflow/utils/sqlalchemy.py
+++ b/airflow-core/src/airflow/utils/sqlalchemy.py
@@ -165,13 +165,13 @@ def sanitize_for_serialization(obj: V1Pod):
     """
     if obj is None:
         return None
-    if isinstance(obj, float | bool | bytes | str | int):
+    if isinstance(obj, (float, bool, bytes, str, int)):
         return obj
     if isinstance(obj, list):
         return [sanitize_for_serialization(sub_obj) for sub_obj in obj]
     if isinstance(obj, tuple):
         return tuple(sanitize_for_serialization(sub_obj) for sub_obj in obj)
-    if isinstance(obj, datetime.datetime | datetime.date):
+    if isinstance(obj, (datetime.datetime, datetime.date)):
         return obj.isoformat()
 
     if isinstance(obj, dict):
diff --git a/airflow-core/tests/unit/always/test_project_structure.py b/airflow-core/tests/unit/always/test_project_structure.py
index 2a818c13ac4dd..ae29a5abc6b25 100644
--- a/airflow-core/tests/unit/always/test_project_structure.py
+++ b/airflow-core/tests/unit/always/test_project_structure.py
@@ -267,7 +267,7 @@ def get_imports_from_file(filepath: str):
     doc_node = ast.parse(content, filepath)
     import_names: set[str] = set()
     for current_node in ast.walk(doc_node):
-        if not isinstance(current_node, ast.Import | ast.ImportFrom):
+        if not isinstance(current_node, (ast.Import, ast.ImportFrom)):
             continue
         for alias in current_node.names:
             name = alias.name
diff --git a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_variables.py b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_variables.py
index 34874c1fcf13f..b1270b7365efc 100644
--- a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_variables.py
+++ b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_variables.py
@@ -1095,7 +1095,7 @@ def test_bulk_create_entity_serialization(
         response = test_client.patch("/variables", json=actions)
         assert response.status_code == 200
 
-        if isinstance(entity_value, dict | list):
+        if isinstance(entity_value, (dict, list)):
             retrieved_value_deserialized = Variable.get(entity_key, deserialize_json=True)
             assert retrieved_value_deserialized == entity_value
             retrieved_value_raw_string = Variable.get(entity_key, deserialize_json=False)
diff --git a/airflow-core/tests/unit/serialization/test_dag_serialization.py b/airflow-core/tests/unit/serialization/test_dag_serialization.py
index e78c40d3797d4..1a3b55f0a892e 100644
--- a/airflow-core/tests/unit/serialization/test_dag_serialization.py
+++ b/airflow-core/tests/unit/serialization/test_dag_serialization.py
@@ -404,7 +404,7 @@ def collect_dags(dag_folder=None):
             "providers/*/*/tests/system/*/*/",
         ]
     else:
-        if isinstance(dag_folder, list | tuple):
+        if isinstance(dag_folder, (list, tuple)):
             patterns = dag_folder
         else:
             patterns = [dag_folder]
@@ -723,7 +723,7 @@ def validate_deserialized_task(
         from airflow.sdk.definitions.mappedoperator import MappedOperator
 
         assert not isinstance(task, SerializedBaseOperator)
-        assert isinstance(task, BaseOperator | MappedOperator)
+        assert isinstance(task, (BaseOperator, MappedOperator))
 
         # Every task should have a task_group property -- even if it's the DAG's root task group
         assert serialized_task.task_group
diff --git a/dev/breeze/src/airflow_breeze/utils/parallel.py b/dev/breeze/src/airflow_breeze/utils/parallel.py
index 68dd0b30967a4..1d6af2d174865 100644
--- a/dev/breeze/src/airflow_breeze/utils/parallel.py
+++ b/dev/breeze/src/airflow_breeze/utils/parallel.py
@@ -217,7 +217,7 @@ def bytes2human(n):
 def get_printable_value(key: str, value: Any) -> str:
     if key == "percent":
         return f"{value} %"
-    if isinstance(value, int | float):
+    if isinstance(value, (int, float)):
         return bytes2human(value)
     return str(value)
 
diff --git a/devel-common/src/sphinx_exts/operators_and_hooks_ref.py b/devel-common/src/sphinx_exts/operators_and_hooks_ref.py
index 54d4fe86215ca..496a45db09ba5 100644
--- a/devel-common/src/sphinx_exts/operators_and_hooks_ref.py
+++ b/devel-common/src/sphinx_exts/operators_and_hooks_ref.py
@@ -287,7 +287,7 @@ def analyze_decorators(node, _file_path, object_type, _class_name=None):
         if isinstance(child, ast.ClassDef):
             analyze_decorators(child, file_path, object_type="class")
             deprecations.extend(_iter_module_for_deprecations(child, file_path, class_name=child.name))
-        elif isinstance(child, ast.FunctionDef | ast.AsyncFunctionDef):
+        elif isinstance(child, (ast.FunctionDef, ast.AsyncFunctionDef)):
             analyze_decorators(
                 child, file_path, _class_name=class_name, object_type="method" if class_name else "function"
             )
diff --git a/devel-common/src/sphinx_exts/providers_extensions.py b/devel-common/src/sphinx_exts/providers_extensions.py
index 78a0a40df820a..0ea9148893400 100644
--- a/devel-common/src/sphinx_exts/providers_extensions.py
+++ b/devel-common/src/sphinx_exts/providers_extensions.py
@@ -140,7 +140,7 @@ def get_import_mappings(tree) -> dict[str, str]:
     """
     imports = {}
     for node in ast.walk(tree):
-        if isinstance(node, ast.Import | ast.ImportFrom):
+        if isinstance(node, (ast.Import, ast.ImportFrom)):
             for alias in node.names:
                 module_prefix = f"{node.module}." if hasattr(node, "module") and node.module else ""
                 imports[alias.asname or alias.name] = f"{module_prefix}{alias.name}"
diff --git a/devel-common/src/sphinx_exts/removemarktransform.py b/devel-common/src/sphinx_exts/removemarktransform.py
index 9561baa9ff43c..bb65d026bce93 100644
--- a/devel-common/src/sphinx_exts/removemarktransform.py
+++ b/devel-common/src/sphinx_exts/removemarktransform.py
@@ -61,7 +61,7 @@ def is_pycode(node: nodes.literal_block) -> bool:
         if language == "guess":
             try:
                 lexer = guess_lexer(node.rawsource)
-                return isinstance(lexer, PythonLexer | Python3Lexer)
+                return isinstance(lexer, (PythonLexer, Python3Lexer))
             except Exception:
                 pass
 
diff --git a/devel-common/src/sphinx_exts/substitution_extensions.py b/devel-common/src/sphinx_exts/substitution_extensions.py
index 5fe68e1d55106..faa9501ffee77 100644
--- a/devel-common/src/sphinx_exts/substitution_extensions.py
+++ b/devel-common/src/sphinx_exts/substitution_extensions.py
@@ -60,7 +60,7 @@ class SubstitutionCodeBlockTransform(SphinxTransform):
 
     def apply(self, **kwargs: Any) -> None:
         def condition(node):
-            return isinstance(node, nodes.literal_block | nodes.literal)
+            return isinstance(node, (nodes.literal_block, nodes.literal))
 
         for node in self.document.traverse(condition):
             if _SUBSTITUTION_OPTION_NAME not in node:
diff --git a/devel-common/src/tests_common/_internals/forbidden_warnings.py b/devel-common/src/tests_common/_internals/forbidden_warnings.py
index 77e08c9320f49..6e231160e70b9 100644
--- a/devel-common/src/tests_common/_internals/forbidden_warnings.py
+++ b/devel-common/src/tests_common/_internals/forbidden_warnings.py
@@ -34,7 +34,7 @@ class ForbiddenWarningsPlugin:
     def __init__(self, config: pytest.Config, forbidden_warnings: tuple[str, ...]):
         # Set by a pytest_configure hook in conftest
         deprecations_ignore = config.inicfg["airflow_deprecations_ignore"]
-        if isinstance(deprecations_ignore, str | os.PathLike):
+        if isinstance(deprecations_ignore, (str, os.PathLike)):
             self.deprecations_ignore = [deprecations_ignore]
         else:
             self.deprecations_ignore = deprecations_ignore
diff --git a/providers/alibaba/src/airflow/providers/alibaba/cloud/hooks/analyticdb_spark.py b/providers/alibaba/src/airflow/providers/alibaba/cloud/hooks/analyticdb_spark.py
index b9bb25766be44..73b6b33e66992 100644
--- a/providers/alibaba/src/airflow/providers/alibaba/cloud/hooks/analyticdb_spark.py
+++ b/providers/alibaba/src/airflow/providers/alibaba/cloud/hooks/analyticdb_spark.py
@@ -306,8 +306,8 @@ def _validate_list_of_stringables(vals: Sequence[str | int | float]) -> bool:
         """
         if (
             vals is None
-            or not isinstance(vals, tuple | list)
-            or not all(isinstance(val, str | int | float) for val in vals)
+            or not isinstance(vals, (tuple, list))
+            or not all(isinstance(val, (str, int, float)) for val in vals)
         ):
             raise ValueError("List of strings expected")
         return True
@@ -322,7 +322,7 @@ def _validate_extra_conf(conf: dict[Any, Any]) -> bool:
         if conf:
             if not isinstance(conf, dict):
                 raise ValueError("'conf' argument must be a dict")
-            if not all(isinstance(v, str | int) and v != "" for v in conf.values()):
+            if not all(isinstance(v, (str, int)) and v != "" for v in conf.values()):
                 raise ValueError("'conf' values must be either strings or ints")
         return True
 
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/hooks/s3.py b/providers/amazon/src/airflow/providers/amazon/aws/hooks/s3.py
index a432534fab3c3..81cd7a0cb170f 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/hooks/s3.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/hooks/s3.py
@@ -652,7 +652,7 @@ async def get_files_async(
             response = paginator.paginate(**params)
             async for page in response:
                 if "Contents" in page:
-                    keys.extend(k for k in page["Contents"] if isinstance(k.get("Size"), int | float))
+                    keys.extend(k for k in page["Contents"] if isinstance(k.get("Size"), (int, float)))
         return keys
 
     async def _list_keys_async(
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/hooks/sns.py b/providers/amazon/src/airflow/providers/amazon/aws/hooks/sns.py
index 275df5b69a907..00315fbddc370 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/hooks/sns.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/hooks/sns.py
@@ -29,7 +29,7 @@ def _get_message_attribute(o):
         return {"DataType": "Binary", "BinaryValue": o}
     if isinstance(o, str):
         return {"DataType": "String", "StringValue": o}
-    if isinstance(o, int | float):
+    if isinstance(o, (int, float)):
         return {"DataType": "Number", "StringValue": str(o)}
     if hasattr(o, "__iter__"):
         return {"DataType": "String.Array", "StringValue": json.dumps(o)}
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/log/cloudwatch_task_handler.py b/providers/amazon/src/airflow/providers/amazon/aws/log/cloudwatch_task_handler.py
index 2eab684130c42..b5f6aaa12662b 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/log/cloudwatch_task_handler.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/log/cloudwatch_task_handler.py
@@ -55,7 +55,7 @@ def json_serialize_legacy(value: Any) -> str | None:
     :param value: the object to serialize
     :return: string representation of `value` if it is an instance of datetime or `None` otherwise
     """
-    if isinstance(value, date | datetime):
+    if isinstance(value, (date, datetime)):
         return value.isoformat()
     return None
 
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/operators/s3.py b/providers/amazon/src/airflow/providers/amazon/aws/operators/s3.py
index 1757614101a19..f486084f34de0 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/operators/s3.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/operators/s3.py
@@ -536,7 +536,7 @@ def execute(self, context: Context):
                 "Either keys or at least one of prefix, from_datetime, to_datetime should be set."
             )
 
-        if isinstance(self.keys, list | str) and not self.keys:
+        if isinstance(self.keys, (list, str)) and not self.keys:
             return
         # handle case where dates are strings, specifically when sent as template fields and macros.
         if isinstance(self.to_datetime, str):
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/utils/connection_wrapper.py b/providers/amazon/src/airflow/providers/amazon/aws/utils/connection_wrapper.py
index 79e6b966bc056..ef2ca7b4cb343 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/utils/connection_wrapper.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/utils/connection_wrapper.py
@@ -187,7 +187,7 @@ def __post_init__(self, conn: Connection | AwsConnectionWrapper | _ConnectionMet
             return
 
         if TYPE_CHECKING:
-            assert isinstance(conn, Connection | _ConnectionMetadata)
+            assert isinstance(conn, (Connection, _ConnectionMetadata))
 
         # Assign attributes from AWS Connection
         self.conn_id = conn.conn_id
diff --git a/providers/apache/livy/src/airflow/providers/apache/livy/hooks/livy.py b/providers/apache/livy/src/airflow/providers/apache/livy/hooks/livy.py
index 68912c30fe9d3..2c9f4bb7de609 100644
--- a/providers/apache/livy/src/airflow/providers/apache/livy/hooks/livy.py
+++ b/providers/apache/livy/src/airflow/providers/apache/livy/hooks/livy.py
@@ -439,8 +439,8 @@ def _validate_list_of_stringables(vals: Sequence[str | int | float]) -> bool:
         """
         if (
             vals is None
-            or not isinstance(vals, tuple | list)
-            or not all(isinstance(val, str | int | float) for val in vals)
+            or not isinstance(vals, (tuple, list))
+            or not all(isinstance(val, (str, int, float)) for val in vals)
         ):
             raise ValueError("List of strings expected")
         return True
@@ -456,7 +456,7 @@ def _validate_extra_conf(conf: dict[Any, Any]) -> bool:
         if conf:
             if not isinstance(conf, dict):
                 raise ValueError("'conf' argument must be a dict")
-            if not all(isinstance(v, str | int) and v != "" for v in conf.values()):
+            if not all(isinstance(v, (str, int)) and v != "" for v in conf.values()):
                 raise ValueError("'conf' values must be either strings or ints")
         return True
 
@@ -825,8 +825,8 @@ def _validate_list_of_stringables(vals: Sequence[str | int | float]) -> bool:
         """
         if (
             vals is None
-            or not isinstance(vals, tuple | list)
-            or not all(isinstance(val, str | int | float) for val in vals)
+            or not isinstance(vals, (tuple, list))
+            or not all(isinstance(val, (str, int, float)) for val in vals)
         ):
             raise ValueError("List of strings expected")
         return True
@@ -842,6 +842,6 @@ def _validate_extra_conf(conf: dict[Any, Any]) -> bool:
         if conf:
             if not isinstance(conf, dict):
                 raise ValueError("'conf' argument must be a dict")
-            if not all(isinstance(v, str | int) and v != "" for v in conf.values()):
+            if not all(isinstance(v, (str, int)) and v != "" for v in conf.values()):
                 raise ValueError("'conf' values must be either strings or ints")
         return True
diff --git a/providers/databricks/src/airflow/providers/databricks/hooks/databricks_base.py b/providers/databricks/src/airflow/providers/databricks/hooks/databricks_base.py
index cba505f9988a8..2829c7012d32b 100644
--- a/providers/databricks/src/airflow/providers/databricks/hooks/databricks_base.py
+++ b/providers/databricks/src/airflow/providers/databricks/hooks/databricks_base.py
@@ -766,7 +766,7 @@ def _get_error_code(exception: BaseException) -> str:
     @staticmethod
     def _retryable_error(exception: BaseException) -> bool:
         if isinstance(exception, requests_exceptions.RequestException):
-            if isinstance(exception, requests_exceptions.ConnectionError | requests_exceptions.Timeout) or (
+            if isinstance(exception, (requests_exceptions.ConnectionError, requests_exceptions.Timeout)) or (
                 exception.response is not None
                 and (
                     exception.response.status_code >= 500
@@ -783,7 +783,7 @@ def _retryable_error(exception: BaseException) -> bool:
             if exception.status >= 500 or exception.status == 429:
                 return True
 
-        if isinstance(exception, ClientConnectorError | TimeoutError):
+        if isinstance(exception, (ClientConnectorError, TimeoutError)):
             return True
 
         return False
diff --git a/providers/databricks/src/airflow/providers/databricks/sensors/databricks_partition.py b/providers/databricks/src/airflow/providers/databricks/sensors/databricks_partition.py
index 86ec7ca385d05..49f9ed874e6bc 100644
--- a/providers/databricks/src/airflow/providers/databricks/sensors/databricks_partition.py
+++ b/providers/databricks/src/airflow/providers/databricks/sensors/databricks_partition.py
@@ -205,11 +205,11 @@ def _generate_partition_query(
                     if isinstance(partition_value, list):
                         output_list.append(f"""{partition_col} in {tuple(partition_value)}""")
                         self.log.debug("List formatting for partitions: %s", output_list)
-                    if isinstance(partition_value, int | float | complex):
+                    if isinstance(partition_value, (int, float, complex)):
                         output_list.append(
                             f"""{partition_col}{self.partition_operator}{self.escaper.escape_item(partition_value)}"""
                         )
-                    if isinstance(partition_value, str | datetime):
+                    if isinstance(partition_value, (str, datetime)):
                         output_list.append(
                             f"""{partition_col}{self.partition_operator}{self.escaper.escape_item(partition_value)}"""
                         )
diff --git a/providers/databricks/src/airflow/providers/databricks/utils/databricks.py b/providers/databricks/src/airflow/providers/databricks/utils/databricks.py
index 8159bce1aff32..e19bccf290a36 100644
--- a/providers/databricks/src/airflow/providers/databricks/utils/databricks.py
+++ b/providers/databricks/src/airflow/providers/databricks/utils/databricks.py
@@ -34,12 +34,12 @@ def normalise_json_content(content, json_path: str = "json") -> str | bool | lis
     to string type because databricks does not understand 'True' or 'False' values.
     """
     normalise = normalise_json_content
-    if isinstance(content, str | bool):
+    if isinstance(content, (str, bool)):
         return content
-    if isinstance(content, int | float):
+    if isinstance(content, (int, float)):
         # Databricks can tolerate either numeric or string types in the API backend.
         return str(content)
-    if isinstance(content, list | tuple):
+    if isinstance(content, (list, tuple)):
         return [normalise(e, f"{json_path}[{i}]") for i, e in enumerate(content)]
     if isinstance(content, dict):
         return {k: normalise(v, f"{json_path}[{k}]") for k, v in content.items()}
diff --git a/providers/dbt/cloud/src/airflow/providers/dbt/cloud/hooks/dbt.py b/providers/dbt/cloud/src/airflow/providers/dbt/cloud/hooks/dbt.py
index e9c37d926dbcb..4abd415480bcc 100644
--- a/providers/dbt/cloud/src/airflow/providers/dbt/cloud/hooks/dbt.py
+++ b/providers/dbt/cloud/src/airflow/providers/dbt/cloud/hooks/dbt.py
@@ -117,7 +117,7 @@ class DbtCloudJobRunStatus(Enum):
     @classmethod
     def check_is_valid(cls, statuses: int | Sequence[int] | set[int]):
         """Validate input statuses are a known value."""
-        if isinstance(statuses, Sequence | set):
+        if isinstance(statuses, (Sequence, set)):
             for status in statuses:
                 cls(status)
         else:
diff --git a/providers/elasticsearch/src/airflow/providers/elasticsearch/log/es_response.py b/providers/elasticsearch/src/airflow/providers/elasticsearch/log/es_response.py
index 221a45fdb3b94..610b03f96e199 100644
--- a/providers/elasticsearch/src/airflow/providers/elasticsearch/log/es_response.py
+++ b/providers/elasticsearch/src/airflow/providers/elasticsearch/log/es_response.py
@@ -130,7 +130,7 @@ def __iter__(self) -> Iterator[Hit]:
 
     def __getitem__(self, key):
         """Retrieve a specific hit or a slice of hits from the Elasticsearch response."""
-        if isinstance(key, slice | int):
+        if isinstance(key, (slice, int)):
             return self.hits[key]
         return super().__getitem__(key)
 
diff --git a/providers/elasticsearch/tests/unit/elasticsearch/log/elasticmock/utilities/__init__.py b/providers/elasticsearch/tests/unit/elasticsearch/log/elasticmock/utilities/__init__.py
index abd3606b1e056..50b883e0f02f3 100644
--- a/providers/elasticsearch/tests/unit/elasticsearch/log/elasticmock/utilities/__init__.py
+++ b/providers/elasticsearch/tests/unit/elasticsearch/log/elasticmock/utilities/__init__.py
@@ -177,7 +177,7 @@ def _base64_auth_header(auth_value):
     and returns a base64-encoded string to be used
     as an HTTP authorization header.
     """
-    if isinstance(auth_value, list | tuple):
+    if isinstance(auth_value, (list, tuple)):
         auth_value = base64.b64encode(to_bytes(":".join(auth_value)))
     return to_str(auth_value)
 
@@ -189,11 +189,11 @@ def _escape(value):
     """
 
     # make sequences into comma-separated strings
-    if isinstance(value, list | tuple):
+    if isinstance(value, (list, tuple)):
         value = ",".join(value)
 
     # dates and datetimes into isoformat
-    elif isinstance(value, date | datetime):
+    elif isinstance(value, (date, datetime)):
         value = value.isoformat()
 
     # make bools into true/false strings
diff --git a/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/ray.py b/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/ray.py
index 64054d1460802..5aede4a0465e7 100644
--- a/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/ray.py
+++ b/providers/google/src/airflow/providers/google/cloud/hooks/vertex_ai/ray.py
@@ -57,7 +57,7 @@ def serialize_cluster_obj(self, cluster_obj: resources.Cluster) -> dict:
         """Serialize Cluster dataclass to dict."""
 
         def __encode_value(value: Any) -> Any:
-            if isinstance(value, list | Repeated):
+            if isinstance(value, (list, Repeated)):
                 return [__encode_value(nested_value) for nested_value in value]
             if isinstance(value, ScalarMapContainer):
                 return {key: __encode_value(nested_value) for key, nested_value in dict(value).items()}
diff --git a/providers/google/src/airflow/providers/google/cloud/links/base.py b/providers/google/src/airflow/providers/google/cloud/links/base.py
index d543b495ab10c..ea6d8850c95f5 100644
--- a/providers/google/src/airflow/providers/google/cloud/links/base.py
+++ b/providers/google/src/airflow/providers/google/cloud/links/base.py
@@ -107,7 +107,7 @@ def get_link(
         ti_key: TaskInstanceKey,
     ) -> str:
         if TYPE_CHECKING:
-            assert isinstance(operator, GoogleCloudBaseOperator | BaseSensorOperator)
+            assert isinstance(operator, (GoogleCloudBaseOperator, BaseSensorOperator))
 
         conf = self.get_config(operator, ti_key)
         if not conf:
diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/bigquery_dts.py b/providers/google/src/airflow/providers/google/cloud/sensors/bigquery_dts.py
index d7572a05a0fb0..c89763f9b6c49 100644
--- a/providers/google/src/airflow/providers/google/cloud/sensors/bigquery_dts.py
+++ b/providers/google/src/airflow/providers/google/cloud/sensors/bigquery_dts.py
@@ -112,7 +112,7 @@ def __init__(
         self.location = location
 
     def _normalize_state_list(self, states) -> set[TransferState]:
-        states = {states} if isinstance(states, str | TransferState | int) else states
+        states = {states} if isinstance(states, (str, TransferState, int)) else states
         result = set()
         for state in states:
             if isinstance(state, str):
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/cassandra_to_gcs.py b/providers/google/src/airflow/providers/google/cloud/transfers/cassandra_to_gcs.py
index 7c40c8fae5d47..ce56036de6214 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/cassandra_to_gcs.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/cassandra_to_gcs.py
@@ -259,7 +259,7 @@ def generate_data_dict(self, names: Iterable[str], values: Any) -> dict[str, Any
 
     def convert_value(self, value: Any | None) -> Any | None:
         """Convert value to BQ type."""
-        if not value or isinstance(value, str | int | float | bool | dict):
+        if not value or isinstance(value, (str, int, float, bool, dict)):
             return value
         if isinstance(value, bytes):
             return b64encode(value).decode("ascii")
@@ -267,13 +267,13 @@ def convert_value(self, value: Any | None) -> Any | None:
             if self.encode_uuid:
                 return b64encode(value.bytes).decode("ascii")
             return str(value)
-        if isinstance(value, datetime | Date):
+        if isinstance(value, (datetime, Date)):
             return str(value)
         if isinstance(value, Decimal):
             return float(value)
         if isinstance(value, Time):
             return str(value).split(".")[0]
-        if isinstance(value, list | SortedSet):
+        if isinstance(value, (list, SortedSet)):
             return self.convert_array_types(value)
         if hasattr(value, "_fields"):
             return self.convert_user_type(value)
diff --git a/providers/google/src/airflow/providers/google/cloud/transfers/mssql_to_gcs.py b/providers/google/src/airflow/providers/google/cloud/transfers/mssql_to_gcs.py
index 17fd87e9284c5..8f861aaee690a 100644
--- a/providers/google/src/airflow/providers/google/cloud/transfers/mssql_to_gcs.py
+++ b/providers/google/src/airflow/providers/google/cloud/transfers/mssql_to_gcs.py
@@ -114,7 +114,7 @@ def convert_type(cls, value, schema_type, **kwargs):
         """
         if isinstance(value, decimal.Decimal):
             return float(value)
-        if isinstance(value, datetime.date | datetime.time):
+        if isinstance(value, (datetime.date, datetime.time)):
             return value.isoformat()
         return value
 
diff --git a/providers/google/src/airflow/providers/google/common/hooks/base_google.py b/providers/google/src/airflow/providers/google/common/hooks/base_google.py
index 524acb030c8f3..75ca159906855 100644
--- a/providers/google/src/airflow/providers/google/common/hooks/base_google.py
+++ b/providers/google/src/airflow/providers/google/common/hooks/base_google.py
@@ -93,7 +93,7 @@ def is_soft_quota_exception(exception: Exception):
     if isinstance(exception, Forbidden):
         return any(reason in error.details() for reason in INVALID_REASONS for error in exception.errors)
 
-    if isinstance(exception, ResourceExhausted | TooManyRequests):
+    if isinstance(exception, (ResourceExhausted, TooManyRequests)):
         return any(key in error.details() for key in INVALID_KEYS for error in exception.errors)
 
     return False
diff --git a/providers/google/src/airflow/providers/google/suite/transfers/sql_to_sheets.py b/providers/google/src/airflow/providers/google/suite/transfers/sql_to_sheets.py
index e791e3adb880c..ed9243a0c900c 100644
--- a/providers/google/src/airflow/providers/google/suite/transfers/sql_to_sheets.py
+++ b/providers/google/src/airflow/providers/google/suite/transfers/sql_to_sheets.py
@@ -88,7 +88,7 @@ def _data_prep(self, data):
         for row in data:
             item_list = []
             for item in row:
-                if isinstance(item, datetime.date | datetime.datetime):
+                if isinstance(item, (datetime.date, datetime.datetime)):
                     item = item.isoformat()
                 elif isinstance(item, int):  # To exclude int from the number check.
                     pass
diff --git a/providers/openai/src/airflow/providers/openai/operators/openai.py b/providers/openai/src/airflow/providers/openai/operators/openai.py
index 77bf82b665ef4..297b6b86b6474 100644
--- a/providers/openai/src/airflow/providers/openai/operators/openai.py
+++ b/providers/openai/src/airflow/providers/openai/operators/openai.py
@@ -75,7 +75,7 @@ def hook(self) -> OpenAIHook:
         return OpenAIHook(conn_id=self.conn_id)
 
     def execute(self, context: Context) -> list[float]:
-        if not self.input_text or not isinstance(self.input_text, str | list):
+        if not self.input_text or not isinstance(self.input_text, (str, list)):
             raise ValueError(
                 "The 'input_text' must be a non-empty string, list of strings, list of integers, or list of lists of integers."
             )
diff --git a/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py b/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py
index 9ca1ba427ee60..0f5704cb2d040 100644
--- a/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py
+++ b/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py
@@ -233,7 +233,7 @@ def get_user_provided_run_facets(ti: TaskInstance, ti_state: TaskInstanceState)
 
 
 def get_fully_qualified_class_name(operator: BaseOperator | MappedOperator) -> str:
-    if isinstance(operator, MappedOperator | SerializedBaseOperator):
+    if isinstance(operator, (MappedOperator, SerializedBaseOperator)):
         # as in airflow.api_connexion.schemas.common_schema.ClassReferenceSchema
         return operator._task_module + "." + operator._task_type  # type: ignore
     op_class = get_operator_class(operator)
@@ -250,7 +250,7 @@ def is_selective_lineage_enabled(obj: DAG | BaseOperator | MappedOperator) -> bo
         return True
     if isinstance(obj, DAG):
         return is_dag_lineage_enabled(obj)
-    if isinstance(obj, BaseOperator | MappedOperator):
+    if isinstance(obj, (BaseOperator, MappedOperator)):
         return is_task_lineage_enabled(obj)
     raise TypeError("is_selective_lineage_enabled can only be used on DAG or Operator objects")
 
@@ -328,7 +328,7 @@ def _cast_basic_types(value):
             return value.isoformat()
         if isinstance(value, datetime.timedelta):
             return f"{value.total_seconds()} seconds"
-        if isinstance(value, set | list | tuple):
+        if isinstance(value, (set, list, tuple)):
             return str(list(value))
         return value
 
@@ -403,7 +403,7 @@ def serialize_timetable(cls, dag: DAG) -> dict[str, Any]:
                 return serialized
 
             def _serialize_ds(ds: BaseDatasetEventInput) -> dict[str, Any]:
-                if isinstance(ds, DatasetAny | DatasetAll):
+                if isinstance(ds, (DatasetAny, DatasetAll)):
                     return {
                         "__type": "dataset_all" if isinstance(ds, DatasetAll) else "dataset_any",
                         "objects": [_serialize_ds(child) for child in ds.objects],
diff --git a/providers/opensearch/src/airflow/providers/opensearch/log/os_response.py b/providers/opensearch/src/airflow/providers/opensearch/log/os_response.py
index 4479e21b9ce45..2827cb0f04547 100644
--- a/providers/opensearch/src/airflow/providers/opensearch/log/os_response.py
+++ b/providers/opensearch/src/airflow/providers/opensearch/log/os_response.py
@@ -130,7 +130,7 @@ def __iter__(self) -> Iterator[Hit]:
 
     def __getitem__(self, key):
         """Retrieve a specific hit or a slice of hits from the Elasticsearch response."""
-        if isinstance(key, slice | int):
+        if isinstance(key, (slice, int)):
             return self.hits[key]
         return super().__getitem__(key)
 
diff --git a/providers/oracle/src/airflow/providers/oracle/hooks/oracle.py b/providers/oracle/src/airflow/providers/oracle/hooks/oracle.py
index 355a7b0d8f978..39b32fd119494 100644
--- a/providers/oracle/src/airflow/providers/oracle/hooks/oracle.py
+++ b/providers/oracle/src/airflow/providers/oracle/hooks/oracle.py
@@ -156,14 +156,14 @@ def get_conn(self) -> oracledb.Connection:
         if thick_mode is True:
             if self.thick_mode_lib_dir is None:
                 self.thick_mode_lib_dir = conn.extra_dejson.get("thick_mode_lib_dir")
-                if not isinstance(self.thick_mode_lib_dir, str | type(None)):
+                if not isinstance(self.thick_mode_lib_dir, (str, type(None))):
                     raise TypeError(
                         f"thick_mode_lib_dir expected str or None, "
                         f"got {type(self.thick_mode_lib_dir).__name__}"
                     )
             if self.thick_mode_config_dir is None:
                 self.thick_mode_config_dir = conn.extra_dejson.get("thick_mode_config_dir")
-                if not isinstance(self.thick_mode_config_dir, str | type(None)):
+                if not isinstance(self.thick_mode_config_dir, (str, type(None))):
                     raise TypeError(
                         f"thick_mode_config_dir expected str or None, "
                         f"got {type(self.thick_mode_config_dir).__name__}"
diff --git a/providers/postgres/src/airflow/providers/postgres/hooks/postgres.py b/providers/postgres/src/airflow/providers/postgres/hooks/postgres.py
index 3c506656c3d6d..e46839f598179 100644
--- a/providers/postgres/src/airflow/providers/postgres/hooks/postgres.py
+++ b/providers/postgres/src/airflow/providers/postgres/hooks/postgres.py
@@ -228,7 +228,7 @@ def _serialize_cell(cell: object, conn: connection | None = None) -> Any:
         :param conn: The database connection
         :return: The cell
         """
-        if isinstance(cell, dict | list):
+        if isinstance(cell, (dict, list)):
             cell = Json(cell)
         return cell
 
diff --git a/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake.py b/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake.py
index 0c4719bef93e2..ff55bfa21abae 100644
--- a/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake.py
+++ b/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake.py
@@ -49,7 +49,7 @@
 
 
 def _try_to_boolean(value: Any):
-    if isinstance(value, str | type(None)):
+    if isinstance(value, (str, type(None))):
         return to_boolean(value)
     return value
 
diff --git a/providers/standard/src/airflow/providers/standard/operators/trigger_dagrun.py b/providers/standard/src/airflow/providers/standard/operators/trigger_dagrun.py
index 998fd4c8d7e55..7618ef16b2927 100644
--- a/providers/standard/src/airflow/providers/standard/operators/trigger_dagrun.py
+++ b/providers/standard/src/airflow/providers/standard/operators/trigger_dagrun.py
@@ -192,7 +192,7 @@ def __init__(
         self.logical_date = logical_date
         if logical_date is NOTSET:
             self.logical_date = NOTSET
-        elif logical_date is None or isinstance(logical_date, str | datetime.datetime):
+        elif logical_date is None or isinstance(logical_date, (str, datetime.datetime)):
             self.logical_date = logical_date
         else:
             raise TypeError(
diff --git a/providers/standard/src/airflow/providers/standard/sensors/external_task.py b/providers/standard/src/airflow/providers/standard/sensors/external_task.py
index 32ad0111295bd..9912fe96d70d0 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/external_task.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/external_task.py
@@ -73,7 +73,7 @@ class ExternalDagLink(BaseOperatorLink):
 
     def get_link(self, operator: BaseOperator, *, ti_key: TaskInstanceKey) -> str:
         if TYPE_CHECKING:
-            assert isinstance(operator, ExternalTaskMarker | ExternalTaskSensor)
+            assert isinstance(operator, (ExternalTaskMarker, ExternalTaskSensor))
 
         external_dag_id = operator.external_dag_id
 
diff --git a/providers/standard/src/airflow/providers/standard/utils/skipmixin.py b/providers/standard/src/airflow/providers/standard/utils/skipmixin.py
index bd8e31bc72a34..32eb545f47019 100644
--- a/providers/standard/src/airflow/providers/standard/utils/skipmixin.py
+++ b/providers/standard/src/airflow/providers/standard/utils/skipmixin.py
@@ -52,7 +52,7 @@ def _ensure_tasks(nodes: Iterable[DAGNode]) -> Sequence[Operator]:
         from airflow.models.baseoperator import BaseOperator  # type: ignore[no-redef]
         from airflow.models.mappedoperator import MappedOperator  # type: ignore[no-redef]
 
-    return [n for n in nodes if isinstance(n, BaseOperator | MappedOperator)]
+    return [n for n in nodes if isinstance(n, (BaseOperator, MappedOperator))]
 
 
 # This class should only be used in Airflow 3.0 and later.
diff --git a/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py b/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py
index 2d9b0904e48f9..dae400a638825 100644
--- a/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py
+++ b/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py
@@ -200,7 +200,7 @@ def _transfer_to_and_execute_bteq_on_remote(
                         and exit_status
                         not in (
                             bteq_quit_rc
-                            if isinstance(bteq_quit_rc, list | tuple)
+                            if isinstance(bteq_quit_rc, (list, tuple))
                             else [bteq_quit_rc if bteq_quit_rc is not None else 0]
                         )
                     ):
@@ -298,7 +298,7 @@ def execute_bteq_script_at_local(
             and process.returncode
             not in (
                 bteq_quit_rc
-                if isinstance(bteq_quit_rc, list | tuple)
+                if isinstance(bteq_quit_rc, (list, tuple))
                 else [bteq_quit_rc if bteq_quit_rc is not None else 0]
             )
         ):
diff --git a/pyproject.toml b/pyproject.toml
index a7dbd581e30fb..ffd562e6a9b00 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -650,6 +650,7 @@ ignore = [
     "COM819",
     "E501", # Formatted code may exceed the line length, leading to line-too-long (E501) errors.
     "ASYNC110", # TODO: Use `anyio.Event` instead of awaiting `anyio.sleep` in a `while` loop
+    "UP038",
 ]
 unfixable = [
     # PT022 replace empty `yield` to empty `return`. Might be fixed with a combination of PLR1711
diff --git a/scripts/ci/pre_commit/chart_schema.py b/scripts/ci/pre_commit/chart_schema.py
index 5257fcca54c49..de720573f7ef3 100755
--- a/scripts/ci/pre_commit/chart_schema.py
+++ b/scripts/ci/pre_commit/chart_schema.py
@@ -58,7 +58,7 @@ def walk(value, path="$"):
     if isinstance(value, dict):
         for k, v in value.items():
             yield from walk(v, path + f"[{k!r}]")
-    elif isinstance(value, list | set | tuple):
+    elif isinstance(value, (list, set, tuple)):
         for no, v in enumerate(value):
             yield from walk(v, path + f"[{no}]")
 
diff --git a/scripts/ci/pre_commit/check_deprecations.py b/scripts/ci/pre_commit/check_deprecations.py
index f20d2c55e0459..c1fb6354c9a91 100755
--- a/scripts/ci/pre_commit/check_deprecations.py
+++ b/scripts/ci/pre_commit/check_deprecations.py
@@ -138,7 +138,7 @@ def built_import(import_clause: ast.Import) -> list[str]:
 def found_compatible_decorators(mod: ast.Module) -> tuple[str, ...]:
     result = []
     for node in mod.body:
-        if not isinstance(node, ast.ImportFrom | ast.Import):
+        if not isinstance(node, (ast.ImportFrom, ast.Import)):
             continue
         result.extend(built_import_from(node) if isinstance(node, ast.ImportFrom) else built_import(node))
     return tuple(sorted(set(result)))
@@ -193,7 +193,7 @@ def check_decorators(mod: ast.Module, file: str, file_group: str) -> int:
             category_value_ast = category_keyword.value
 
             warns_types = allowed_warnings[file_group]
-            if isinstance(category_value_ast, ast.Name | ast.Attribute):
+            if isinstance(category_value_ast, (ast.Name, ast.Attribute)):
                 category_value = resolve_name(category_value_ast)
                 if not any(cv.endswith(category_value) for cv in warns_types):
                     errors += 1
diff --git a/scripts/in_container/run_migration_reference.py b/scripts/in_container/run_migration_reference.py
index bc92e7766ae15..bdf7bf3b7667b 100755
--- a/scripts/in_container/run_migration_reference.py
+++ b/scripts/in_container/run_migration_reference.py
@@ -58,7 +58,7 @@ def wrap_backticks(val):
     def _wrap_backticks(x):
         return f"``{x}``"
 
-    return ",\n".join(map(_wrap_backticks, val)) if isinstance(val, tuple | list) else _wrap_backticks(val)
+    return ",\n".join(map(_wrap_backticks, val)) if isinstance(val, (tuple, list)) else _wrap_backticks(val)
 
 
 def update_doc(file, data, app):
diff --git a/task-sdk/src/airflow/sdk/bases/decorator.py b/task-sdk/src/airflow/sdk/bases/decorator.py
index fb77b079a3386..39e4560b47da7 100644
--- a/task-sdk/src/airflow/sdk/bases/decorator.py
+++ b/task-sdk/src/airflow/sdk/bases/decorator.py
@@ -424,7 +424,7 @@ def expand_kwargs(self, kwargs: OperatorExpandKwargsArgument, *, strict: bool =
             )
         if isinstance(kwargs, Sequence):
             for item in kwargs:
-                if not isinstance(item, XComArg | Mapping):
+                if not isinstance(item, (XComArg, Mapping)):
                     raise TypeError(f"expected XComArg or list[dict], not {type(kwargs).__name__}")
         elif not isinstance(kwargs, XComArg):
             raise TypeError(f"expected XComArg or list[dict], not {type(kwargs).__name__}")
diff --git a/task-sdk/src/airflow/sdk/bases/sensor.py b/task-sdk/src/airflow/sdk/bases/sensor.py
index a912476322c15..a39de2a151873 100644
--- a/task-sdk/src/airflow/sdk/bases/sensor.py
+++ b/task-sdk/src/airflow/sdk/bases/sensor.py
@@ -143,7 +143,7 @@ def __init__(
     def _coerce_poke_interval(poke_interval: float | timedelta) -> timedelta:
         if isinstance(poke_interval, timedelta):
             return poke_interval
-        if isinstance(poke_interval, int | float) and poke_interval >= 0:
+        if isinstance(poke_interval, (int, float)) and poke_interval >= 0:
             return timedelta(seconds=poke_interval)
         raise AirflowException(
             "Operator arg `poke_interval` must be timedelta object or a non-negative number"
@@ -153,7 +153,7 @@ def _coerce_poke_interval(poke_interval: float | timedelta) -> timedelta:
     def _coerce_timeout(timeout: float | timedelta) -> timedelta:
         if isinstance(timeout, timedelta):
             return timeout
-        if isinstance(timeout, int | float) and timeout >= 0:
+        if isinstance(timeout, (int, float)) and timeout >= 0:
             return timedelta(seconds=timeout)
         raise AirflowException("Operator arg `timeout` must be timedelta object or a non-negative number")
 
@@ -161,14 +161,14 @@ def _coerce_timeout(timeout: float | timedelta) -> timedelta:
     def _coerce_max_wait(max_wait: float | timedelta | None) -> timedelta | None:
         if max_wait is None or isinstance(max_wait, timedelta):
             return max_wait
-        if isinstance(max_wait, int | float) and max_wait >= 0:
+        if isinstance(max_wait, (int, float)) and max_wait >= 0:
             return timedelta(seconds=max_wait)
         raise AirflowException("Operator arg `max_wait` must be timedelta object or a non-negative number")
 
     def _validate_input_values(self) -> None:
-        if not isinstance(self.poke_interval, int | float) or self.poke_interval < 0:
+        if not isinstance(self.poke_interval, (int, float)) or self.poke_interval < 0:
             raise AirflowException("The poke_interval must be a non-negative number")
-        if not isinstance(self.timeout, int | float) or self.timeout < 0:
+        if not isinstance(self.timeout, (int, float)) or self.timeout < 0:
             raise AirflowException("The timeout must be a non-negative number")
         if self.mode not in self.valid_modes:
             raise AirflowException(
diff --git a/task-sdk/src/airflow/sdk/definitions/_internal/abstractoperator.py b/task-sdk/src/airflow/sdk/definitions/_internal/abstractoperator.py
index 4180c4edaa4db..ec2fefa0a08b4 100644
--- a/task-sdk/src/airflow/sdk/definitions/_internal/abstractoperator.py
+++ b/task-sdk/src/airflow/sdk/definitions/_internal/abstractoperator.py
@@ -426,7 +426,7 @@ def _walk_group(group: TaskGroup) -> Iterable[tuple[str, DAGNode]]:
         for key, child in _walk_group(dag.task_group):
             if key == self.node_id:
                 continue
-            if not isinstance(child, MappedOperator | MappedTaskGroup):
+            if not isinstance(child, (MappedOperator, MappedTaskGroup)):
                 continue
             if self.node_id in child.upstream_task_ids:
                 yield child
diff --git a/task-sdk/src/airflow/sdk/definitions/_internal/expandinput.py b/task-sdk/src/airflow/sdk/definitions/_internal/expandinput.py
index 00b12e24b399d..b1c0c6ee5f979 100644
--- a/task-sdk/src/airflow/sdk/definitions/_internal/expandinput.py
+++ b/task-sdk/src/airflow/sdk/definitions/_internal/expandinput.py
@@ -62,21 +62,21 @@ def __str__(self) -> str:
 def is_mappable(v: Any) -> TypeGuard[OperatorExpandArgument]:
     from airflow.sdk.definitions.xcom_arg import XComArg
 
-    return isinstance(v, MappedArgument | XComArg | Mapping | Sequence) and not isinstance(v, str)
+    return isinstance(v, (MappedArgument, XComArg, Mapping, Sequence)) and not isinstance(v, str)
 
 
 # To replace tedious isinstance() checks.
 def _is_parse_time_mappable(v: OperatorExpandArgument) -> TypeGuard[Mapping | Sequence]:
     from airflow.sdk.definitions.xcom_arg import XComArg
 
-    return not isinstance(v, MappedArgument | XComArg)
+    return not isinstance(v, (MappedArgument, XComArg))
 
 
 # To replace tedious isinstance() checks.
 def _needs_run_time_resolution(v: OperatorExpandArgument) -> TypeGuard[MappedArgument | XComArg]:
     from airflow.sdk.definitions.xcom_arg import XComArg
 
-    return isinstance(v, MappedArgument | XComArg)
+    return isinstance(v, (MappedArgument, XComArg))
 
 
 @attrs.define(kw_only=True)
diff --git a/task-sdk/src/airflow/sdk/definitions/_internal/node.py b/task-sdk/src/airflow/sdk/definitions/_internal/node.py
index 177111af541c0..21fa4ede5b1c9 100644
--- a/task-sdk/src/airflow/sdk/definitions/_internal/node.py
+++ b/task-sdk/src/airflow/sdk/definitions/_internal/node.py
@@ -168,7 +168,7 @@ def _set_relatives(
             task_object.update_relative(self, not upstream, edge_modifier=edge_modifier)
             relatives = task_object.leaves if upstream else task_object.roots
             for task in relatives:
-                if not isinstance(task, BaseOperator | MappedOperator):
+                if not isinstance(task, (BaseOperator, MappedOperator)):
                     raise TypeError(
                         f"Relationships can only be set between Operators; received {task.__class__.__name__}"
                     )
diff --git a/task-sdk/src/airflow/sdk/definitions/dag.py b/task-sdk/src/airflow/sdk/definitions/dag.py
index 5291a38651486..9e728d6812844 100644
--- a/task-sdk/src/airflow/sdk/definitions/dag.py
+++ b/task-sdk/src/airflow/sdk/definitions/dag.py
@@ -122,7 +122,7 @@ def _create_timetable(interval: ScheduleInterval, timezone: Timezone | FixedTime
         return OnceTimetable()
     if interval == "@continuous":
         return ContinuousTimetable()
-    if isinstance(interval, timedelta | relativedelta):
+    if isinstance(interval, (timedelta, relativedelta)):
         if airflow_conf.getboolean("scheduler", "create_cron_data_intervals"):
             return DeltaDataIntervalTimetable(interval)
         return DeltaTriggerTimetable(interval)
@@ -807,7 +807,7 @@ def partial_subset(
         direct_upstreams: list[Operator] = []
         if include_direct_upstream:
             for t in itertools.chain(matched_tasks, also_include):
-                upstream = (u for u in t.upstream_list if isinstance(u, BaseOperator | MappedOperator))
+                upstream = (u for u in t.upstream_list if isinstance(u, (BaseOperator, MappedOperator)))
                 direct_upstreams.extend(upstream)
 
         # Make sure to not recursively deepcopy the dag or task_group while copying the task.
diff --git a/task-sdk/src/airflow/sdk/definitions/decorators/task_group.py b/task-sdk/src/airflow/sdk/definitions/decorators/task_group.py
index 2c1e2c70e0675..c77b65bf48e34 100644
--- a/task-sdk/src/airflow/sdk/definitions/decorators/task_group.py
+++ b/task-sdk/src/airflow/sdk/definitions/decorators/task_group.py
@@ -150,7 +150,7 @@ def expand(self, **kwargs: OperatorExpandArgument) -> DAGNode:
     def expand_kwargs(self, kwargs: OperatorExpandKwargsArgument) -> DAGNode:
         if isinstance(kwargs, Sequence):
             for item in kwargs:
-                if not isinstance(item, XComArg | Mapping):
+                if not isinstance(item, (XComArg, Mapping)):
                     raise TypeError(f"expected XComArg or list[dict], not {type(kwargs).__name__}")
         elif not isinstance(kwargs, XComArg):
             raise TypeError(f"expected XComArg or list[dict], not {type(kwargs).__name__}")
diff --git a/task-sdk/src/airflow/sdk/definitions/edges.py b/task-sdk/src/airflow/sdk/definitions/edges.py
index 4a52b9df32c4e..39fafc4b932c8 100644
--- a/task-sdk/src/airflow/sdk/definitions/edges.py
+++ b/task-sdk/src/airflow/sdk/definitions/edges.py
@@ -75,7 +75,7 @@ def _save_nodes(
         from airflow.sdk.definitions.xcom_arg import XComArg
 
         for node in self._make_list(nodes):
-            if isinstance(node, TaskGroup | XComArg | DAGNode):
+            if isinstance(node, (TaskGroup, XComArg, DAGNode)):
                 stream.append(node)
             else:
                 raise TypeError(
diff --git a/task-sdk/src/airflow/sdk/definitions/mappedoperator.py b/task-sdk/src/airflow/sdk/definitions/mappedoperator.py
index 9f2cc18604354..7fddf969137fb 100644
--- a/task-sdk/src/airflow/sdk/definitions/mappedoperator.py
+++ b/task-sdk/src/airflow/sdk/definitions/mappedoperator.py
@@ -140,9 +140,9 @@ def is_mappable_value(value: Any) -> TypeGuard[Collection]:
 
     :meta private:
     """
-    if not isinstance(value, Sequence | dict):
+    if not isinstance(value, (Sequence, dict)):
         return False
-    if isinstance(value, bytearray | bytes | str):
+    if isinstance(value, (bytearray, bytes, str)):
         return False
     return True
 
@@ -192,7 +192,7 @@ def expand_kwargs(self, kwargs: OperatorExpandKwargsArgument, *, strict: bool =
 
         if isinstance(kwargs, Sequence):
             for item in kwargs:
-                if not isinstance(item, XComArg | Mapping):
+                if not isinstance(item, (XComArg, Mapping)):
                     raise TypeError(f"expected XComArg or list[dict], not {type(kwargs).__name__}")
         elif not isinstance(kwargs, XComArg):
             raise TypeError(f"expected XComArg or list[dict], not {type(kwargs).__name__}")
diff --git a/task-sdk/src/airflow/sdk/definitions/xcom_arg.py b/task-sdk/src/airflow/sdk/definitions/xcom_arg.py
index 7a5ed0468e739..162a63db5c884 100644
--- a/task-sdk/src/airflow/sdk/definitions/xcom_arg.py
+++ b/task-sdk/src/airflow/sdk/definitions/xcom_arg.py
@@ -104,7 +104,7 @@ def iter_xcom_references(arg: Any) -> Iterator[tuple[Operator, str]]:
         """
         if isinstance(arg, ResolveMixin):
             yield from arg.iter_references()
-        elif isinstance(arg, tuple | set | list):
+        elif isinstance(arg, (tuple, set, list)):
             for elem in arg:
                 yield from XComArg.iter_xcom_references(elem)
         elif isinstance(arg, dict):
@@ -429,7 +429,7 @@ def map(self, f: Callable[[Any], Any]) -> MapXComArg:
 
     def resolve(self, context: Mapping[str, Any]) -> Any:
         value = self.arg.resolve(context)
-        if not isinstance(value, Sequence | dict):
+        if not isinstance(value, (Sequence, dict)):
             raise ValueError(f"XCom map expects sequence or dict, not {type(value).__name__}")
         return _MapResult(value, self.callables)
 
@@ -494,7 +494,7 @@ def iter_references(self) -> Iterator[tuple[Operator, str]]:
     def resolve(self, context: Mapping[str, Any]) -> Any:
         values = [arg.resolve(context) for arg in self.args]
         for value in values:
-            if not isinstance(value, Sequence | dict):
+            if not isinstance(value, (Sequence, dict)):
                 raise ValueError(f"XCom zip expects sequence or dict, not {type(value).__name__}")
         return _ZipResult(values, fillvalue=self.fillvalue)
 
@@ -557,7 +557,7 @@ def concat(self, *others: XComArg) -> ConcatXComArg:
     def resolve(self, context: Mapping[str, Any]) -> Any:
         values = [arg.resolve(context) for arg in self.args]
         for value in values:
-            if not isinstance(value, Sequence | dict):
+            if not isinstance(value, (Sequence, dict)):
                 raise ValueError(f"XCom concat expects sequence or dict, not {type(value).__name__}")
         return _ConcatResult(values)
 
diff --git a/task-sdk/src/airflow/sdk/execution_time/context.py b/task-sdk/src/airflow/sdk/execution_time/context.py
index e95b9b173dc90..c76994995ebab 100644
--- a/task-sdk/src/airflow/sdk/execution_time/context.py
+++ b/task-sdk/src/airflow/sdk/execution_time/context.py
@@ -529,7 +529,7 @@ def __getitem__(self, key: int | Asset | AssetAlias | AssetRef) -> list[AssetEve
         msg: ToSupervisor
         if isinstance(key, int):  # Support index access; it's easier for trivial cases.
             obj = self._inlets[key]
-            if not isinstance(obj, Asset | AssetAlias | AssetRef):
+            if not isinstance(obj, (Asset, AssetAlias, AssetRef)):
                 raise IndexError(key)
         else:
             obj = key
diff --git a/task-sdk/src/airflow/sdk/execution_time/secrets_masker.py b/task-sdk/src/airflow/sdk/execution_time/secrets_masker.py
index 560a493d3bc3f..b36eca9cd0809 100644
--- a/task-sdk/src/airflow/sdk/execution_time/secrets_masker.py
+++ b/task-sdk/src/airflow/sdk/execution_time/secrets_masker.py
@@ -232,7 +232,7 @@ def _redact_all(self, item: Redactable, depth: int, max_depth: int = MAX_RECURSI
             return {
                 dict_key: self._redact_all(subval, depth + 1, max_depth) for dict_key, subval in item.items()
             }
-        if isinstance(item, tuple | set):
+        if isinstance(item, (tuple, set)):
             # Turn set in to tuple!
             return tuple(self._redact_all(subval, depth + 1, max_depth) for subval in item)
         if isinstance(item, list):
@@ -270,7 +270,7 @@ def _redact(self, item: Redactable, name: str | None, depth: int, max_depth: int
                     # the structure.
                     return self.replacer.sub("***", str(item))
                 return item
-            if isinstance(item, tuple | set):
+            if isinstance(item, (tuple, set)):
                 # Turn set in to tuple!
                 return tuple(
                     self._redact(subval, name=None, depth=(depth + 1), max_depth=max_depth) for subval in item
diff --git a/task-sdk/src/airflow/sdk/execution_time/task_runner.py b/task-sdk/src/airflow/sdk/execution_time/task_runner.py
index 24127d65a2763..6c6e597f65e5c 100644
--- a/task-sdk/src/airflow/sdk/execution_time/task_runner.py
+++ b/task-sdk/src/airflow/sdk/execution_time/task_runner.py
@@ -340,8 +340,8 @@ def xcom_pull(
         if run_id is None:
             run_id = self.run_id
 
-        single_task_requested = isinstance(task_ids, str | type(None))
-        single_map_index_requested = isinstance(map_indexes, int | type(None))
+        single_task_requested = isinstance(task_ids, (str, type(None)))
+        single_map_index_requested = isinstance(map_indexes, (int, type(None)))
 
         if task_ids is None:
             # default to the current task if not provided
@@ -618,7 +618,7 @@ def parse(what: StartupDetails, log: Logger) -> RuntimeTaskInstance:
         )
         exit(1)
 
-    if not isinstance(task, BaseOperator | MappedOperator):
+    if not isinstance(task, (BaseOperator, MappedOperator)):
         raise TypeError(
             f"task is of the wrong type, got {type(task)}, wanted {BaseOperator} or {MappedOperator}"
         )
diff --git a/task-sdk/tests/conftest.py b/task-sdk/tests/conftest.py
index f2660faa2d206..80c71f41a8fe8 100644
--- a/task-sdk/tests/conftest.py
+++ b/task-sdk/tests/conftest.py
@@ -119,7 +119,7 @@ def captured_logs(request):
         # We need to replace remove the last processor (the one that turns JSON into text, as we want the
         # event dict for tests)
         proc = processors.pop()
-        assert isinstance(proc, structlog.dev.ConsoleRenderer | structlog.processors.JSONRenderer), (
+        assert isinstance(proc, (structlog.dev.ConsoleRenderer, structlog.processors.JSONRenderer)), (
             "Pre-condition"
         )
     try:
diff --git a/task-sdk/tests/task_sdk/definitions/conftest.py b/task-sdk/tests/task_sdk/definitions/conftest.py
index 7ad358487ba63..3f89f34b4d2da 100644
--- a/task-sdk/tests/task_sdk/definitions/conftest.py
+++ b/task-sdk/tests/task_sdk/definitions/conftest.py
@@ -42,7 +42,7 @@ def run(dag: DAG, task_id: str, map_index: int):
 
         for call in mock_supervisor_comms.send.mock_calls:
             msg = call.kwargs.get("msg") or call.args[0]
-            if isinstance(msg, TaskState | SucceedTask):
+            if isinstance(msg, (TaskState, SucceedTask)):
                 return msg.state
         raise RuntimeError("Unable to find call to TaskState")
 
diff --git a/task-sdk/tests/task_sdk/definitions/test_asset.py b/task-sdk/tests/task_sdk/definitions/test_asset.py
index 34992c73f8673..7bd45edd8f99a 100644
--- a/task-sdk/tests/task_sdk/definitions/test_asset.py
+++ b/task-sdk/tests/task_sdk/definitions/test_asset.py
@@ -244,7 +244,7 @@ def assets_equal(a1: BaseAsset, a2: BaseAsset) -> bool:
     if isinstance(a1, Asset) and isinstance(a2, Asset):
         return a1.uri == a2.uri
 
-    if isinstance(a1, AssetAny | AssetAll) and isinstance(a2, AssetAny | AssetAll):
+    if isinstance(a1, (AssetAny, AssetAll)) and isinstance(a2, AssetAny | AssetAll):
         if len(a1.objects) != len(a2.objects):
             return False
 

From 567d3485da11c5a577a835bfd72e0bed3d601dea Mon Sep 17 00:00:00 2001
From: Jake Roach <116606359+jroachgolf84@users.noreply.github.com>
Date: Tue, 1 Jul 2025 10:58:58 -0400
Subject: [PATCH 381/381] Replace `models.BaseOperator` to Task SDK one for
 Tableau, Telegram, and Teradata (#52642)

Part of #52378
---
 .../providers/tableau/operators/tableau.py    |  2 +-
 .../providers/tableau/sensors/tableau.py      |  7 +---
 .../providers/tableau/version_compat.py       |  8 ++++
 .../providers/telegram/operators/telegram.py  |  2 +-
 .../providers/telegram/version_compat.py      | 42 +++++++++++++++++++
 .../providers/teradata/operators/bteq.py      |  2 +-
 .../providers/teradata/operators/teradata.py  |  2 +-
 .../operators/teradata_compute_cluster.py     |  2 +-
 .../transfers/azure_blob_to_teradata.py       |  3 +-
 .../teradata/transfers/s3_to_teradata.py      |  3 +-
 .../transfers/teradata_to_teradata.py         |  2 +-
 .../providers/teradata/version_compat.py      | 42 +++++++++++++++++++
 .../unit/teradata/operators/test_bteq.py      |  2 +-
 13 files changed, 102 insertions(+), 17 deletions(-)
 create mode 100644 providers/telegram/src/airflow/providers/telegram/version_compat.py
 create mode 100644 providers/teradata/src/airflow/providers/teradata/version_compat.py

diff --git a/providers/tableau/src/airflow/providers/tableau/operators/tableau.py b/providers/tableau/src/airflow/providers/tableau/operators/tableau.py
index 951ad44535197..ea435e47e6307 100644
--- a/providers/tableau/src/airflow/providers/tableau/operators/tableau.py
+++ b/providers/tableau/src/airflow/providers/tableau/operators/tableau.py
@@ -20,12 +20,12 @@
 from typing import TYPE_CHECKING
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.tableau.hooks.tableau import (
     TableauHook,
     TableauJobFailedException,
     TableauJobFinishCode,
 )
+from airflow.providers.tableau.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/tableau/src/airflow/providers/tableau/sensors/tableau.py b/providers/tableau/src/airflow/providers/tableau/sensors/tableau.py
index ce823b2fdc023..2953039cd25ab 100644
--- a/providers/tableau/src/airflow/providers/tableau/sensors/tableau.py
+++ b/providers/tableau/src/airflow/providers/tableau/sensors/tableau.py
@@ -24,12 +24,7 @@
     TableauJobFailedException,
     TableauJobFinishCode,
 )
-from airflow.providers.tableau.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseSensorOperator
-else:
-    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+from airflow.providers.tableau.version_compat import BaseSensorOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/tableau/src/airflow/providers/tableau/version_compat.py b/providers/tableau/src/airflow/providers/tableau/version_compat.py
index 48d122b669696..fde11c60d3655 100644
--- a/providers/tableau/src/airflow/providers/tableau/version_compat.py
+++ b/providers/tableau/src/airflow/providers/tableau/version_compat.py
@@ -33,3 +33,11 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator, BaseSensorOperator
+else:
+    from airflow.models import BaseOperator  # type: ignore[no-redef]
+    from airflow.sensors.base import BaseSensorOperator  # type: ignore[no-redef]
+
+__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseOperator", "BaseSensorOperator"]
diff --git a/providers/telegram/src/airflow/providers/telegram/operators/telegram.py b/providers/telegram/src/airflow/providers/telegram/operators/telegram.py
index 641a2760839b7..7531a740879f8 100644
--- a/providers/telegram/src/airflow/providers/telegram/operators/telegram.py
+++ b/providers/telegram/src/airflow/providers/telegram/operators/telegram.py
@@ -23,8 +23,8 @@
 from typing import TYPE_CHECKING
 
 from airflow.exceptions import AirflowException
-from airflow.models import BaseOperator
 from airflow.providers.telegram.hooks.telegram import TelegramHook
+from airflow.providers.telegram.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/telegram/src/airflow/providers/telegram/version_compat.py b/providers/telegram/src/airflow/providers/telegram/version_compat.py
new file mode 100644
index 0000000000000..4f8d5e32bca4a
--- /dev/null
+++ b/providers/telegram/src/airflow/providers/telegram/version_compat.py
@@ -0,0 +1,42 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator  # type: ignore[no-redef]
+
+__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseOperator"]
diff --git a/providers/teradata/src/airflow/providers/teradata/operators/bteq.py b/providers/teradata/src/airflow/providers/teradata/operators/bteq.py
index c1373d51e9cd1..0496201fbae07 100644
--- a/providers/teradata/src/airflow/providers/teradata/operators/bteq.py
+++ b/providers/teradata/src/airflow/providers/teradata/operators/bteq.py
@@ -36,10 +36,10 @@
     except ImportError:
         from airflow.utils.context import Context
 
-from airflow.models import BaseOperator
 from airflow.providers.ssh.hooks.ssh import SSHHook
 from airflow.providers.teradata.hooks.bteq import BteqHook
 from airflow.providers.teradata.hooks.teradata import TeradataHook
+from airflow.providers.teradata.version_compat import BaseOperator
 
 
 def contains_template(parameter_value):
diff --git a/providers/teradata/src/airflow/providers/teradata/operators/teradata.py b/providers/teradata/src/airflow/providers/teradata/operators/teradata.py
index beaca171106c6..da9d23ed3c699 100644
--- a/providers/teradata/src/airflow/providers/teradata/operators/teradata.py
+++ b/providers/teradata/src/airflow/providers/teradata/operators/teradata.py
@@ -20,9 +20,9 @@
 from collections.abc import Sequence
 from typing import TYPE_CHECKING, ClassVar
 
-from airflow.models import BaseOperator
 from airflow.providers.common.sql.operators.sql import SQLExecuteQueryOperator
 from airflow.providers.teradata.hooks.teradata import TeradataHook
+from airflow.providers.teradata.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/teradata/src/airflow/providers/teradata/operators/teradata_compute_cluster.py b/providers/teradata/src/airflow/providers/teradata/operators/teradata_compute_cluster.py
index 81e4fc22b34cc..81ce3ff69e6fb 100644
--- a/providers/teradata/src/airflow/providers/teradata/operators/teradata_compute_cluster.py
+++ b/providers/teradata/src/airflow/providers/teradata/operators/teradata_compute_cluster.py
@@ -23,9 +23,9 @@
 from functools import cached_property
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.teradata.hooks.teradata import TeradataHook
 from airflow.providers.teradata.utils.constants import Constants
+from airflow.providers.teradata.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/teradata/src/airflow/providers/teradata/transfers/azure_blob_to_teradata.py b/providers/teradata/src/airflow/providers/teradata/transfers/azure_blob_to_teradata.py
index 125e63119f6bd..e046a4dcd9d72 100644
--- a/providers/teradata/src/airflow/providers/teradata/transfers/azure_blob_to_teradata.py
+++ b/providers/teradata/src/airflow/providers/teradata/transfers/azure_blob_to_teradata.py
@@ -21,8 +21,6 @@
 from textwrap import dedent
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
-
 try:
     from airflow.providers.microsoft.azure.hooks.wasb import WasbHook
 except ModuleNotFoundError as e:
@@ -31,6 +29,7 @@
     raise AirflowOptionalProviderFeatureException(e)
 
 from airflow.providers.teradata.hooks.teradata import TeradataHook
+from airflow.providers.teradata.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
diff --git a/providers/teradata/src/airflow/providers/teradata/transfers/s3_to_teradata.py b/providers/teradata/src/airflow/providers/teradata/transfers/s3_to_teradata.py
index 707de137ab063..85d6827c43faf 100644
--- a/providers/teradata/src/airflow/providers/teradata/transfers/s3_to_teradata.py
+++ b/providers/teradata/src/airflow/providers/teradata/transfers/s3_to_teradata.py
@@ -21,8 +21,6 @@
 from textwrap import dedent
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
-
 try:
     from airflow.providers.amazon.aws.hooks.s3 import S3Hook
 except ModuleNotFoundError as e:
@@ -30,6 +28,7 @@
 
     raise AirflowOptionalProviderFeatureException(e)
 from airflow.providers.teradata.hooks.teradata import TeradataHook
+from airflow.providers.teradata.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/teradata/src/airflow/providers/teradata/transfers/teradata_to_teradata.py b/providers/teradata/src/airflow/providers/teradata/transfers/teradata_to_teradata.py
index d2465bd91f71e..825ffbc324d6b 100644
--- a/providers/teradata/src/airflow/providers/teradata/transfers/teradata_to_teradata.py
+++ b/providers/teradata/src/airflow/providers/teradata/transfers/teradata_to_teradata.py
@@ -21,8 +21,8 @@
 from functools import cached_property
 from typing import TYPE_CHECKING
 
-from airflow.models import BaseOperator
 from airflow.providers.teradata.hooks.teradata import TeradataHook
+from airflow.providers.teradata.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     try:
diff --git a/providers/teradata/src/airflow/providers/teradata/version_compat.py b/providers/teradata/src/airflow/providers/teradata/version_compat.py
new file mode 100644
index 0000000000000..4f8d5e32bca4a
--- /dev/null
+++ b/providers/teradata/src/airflow/providers/teradata/version_compat.py
@@ -0,0 +1,42 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
+# DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
+# ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
+# THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
+#
+from __future__ import annotations
+
+
+def get_base_airflow_version_tuple() -> tuple[int, int, int]:
+    from packaging.version import Version
+
+    from airflow import __version__
+
+    airflow_version = Version(__version__)
+    return airflow_version.major, airflow_version.minor, airflow_version.micro
+
+
+AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
+
+if AIRFLOW_V_3_0_PLUS:
+    from airflow.sdk import BaseOperator
+else:
+    from airflow.models import BaseOperator  # type: ignore[no-redef]
+
+__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseOperator"]
diff --git a/providers/teradata/tests/unit/teradata/operators/test_bteq.py b/providers/teradata/tests/unit/teradata/operators/test_bteq.py
index 0e9a0ed0b150d..7afac54d311f8 100644
--- a/providers/teradata/tests/unit/teradata/operators/test_bteq.py
+++ b/providers/teradata/tests/unit/teradata/operators/test_bteq.py
@@ -252,7 +252,7 @@ def test_remote_execution_with_sql(
         mock_execute_bteq_script.assert_called_once()
         assert result == 0
 
-    @mock.patch("airflow.models.BaseOperator.render_template")
+    @mock.patch("airflow.providers.teradata.version_compat.BaseOperator.render_template")
     def test_render_template_in_sql(self, mock_render):
         op = BteqOperator(task_id="render_test", sql="SELECT * FROM {{ params.table }};")
         mock_render.return_value = "SELECT * FROM my_table;"
